1
wwl
2025-06-10 cee2eca9c3e40b48c40a8fe80f938a777f03d463
src/views/system/package/index.vue
@@ -206,7 +206,7 @@
        <el-form-item label="现价" prop="xianprice">
          <el-input v-model="form.xianprice" placeholder="现价" clearable style="width: 140px" @input="changeXianjia"
            @blur="numberChangeXianPrice(youhui, youhui)" type="number" :debounce="3000" min="0"/>
            type="number" :debounce="3000" min="0"/>
        </el-form-item>
        <el-form-item label="关键字" prop="keywords">
          <el-select multiple v-model="form.keywords" placeholder="请选择关键字" style="width: 160px" @change="sel" filterable
@@ -486,6 +486,7 @@
      },
      forms: {},
      youhui: 10,
      initializing: true, // 初始化标志
      debounceTimer: null,
      rules: {
       
@@ -497,6 +498,7 @@
    this.getKeyword();
    this.getCategory();
  },
  methods: {
    debounceNumberChange(currentValue, oldValue) {
      clearTimeout(this.debounceTimer);
@@ -504,30 +506,7 @@
        this.numberChange(currentValue, oldValue);
      }, 300);
    },
    numberChange(currentValue, oldValue) {
      this.$confirm("确定修改所有子项的折扣吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.youhui = currentValue;
          this.DataList.forEach((item) => {
            item.limits = this.youhui;
            const proPrice = new Big(item.priceOrd);
            const limits = new Big(item.limits);
            const result = proPrice.times(limits.div(10));
            item.priceNow = result.toNumber();
          });
          this.form.xianprice = this.DataList.reduce((sum, item) => {
            return sum.plus(new Big(item.priceNow || "0"));
          }, new Big(0)).toNumber();
          this.lastXianPrice = this.form.xianprice;
        })
        .catch(() => {
          this.youhui = oldValue;
        });
    },
    updateProPrice(row) {
      const proPrice = new Big(row.priceOrd);
      const limits = new Big(row.limits);
@@ -608,6 +587,7 @@
        counterPrice: null,
        limits: 10,
      };
      this.initializing = true;
      this.resetForm("form");
    },
    handleQuery() {
@@ -649,6 +629,7 @@
      this.checkedListkey = [];
      this.checkedNodes = [];
      this.getDataList();
      this.youhui = 10
    },
    handleStatusChange(row) {
      let data = {
@@ -666,6 +647,7 @@
        });
    },
    handleUp() {
      this.reset();
      this.title = "体检套餐信息维护";
      this.open = true;
      getPacInFo(this.forms.pacId).then((response) => {
@@ -694,7 +676,7 @@
      getPacInFo(row.pacId).then((response) => {
        const data = response.data || {};
        Object.keys(data).forEach((key) => {
          this.$set(this.form, key, data[key]);
          this.$set(this.form, key, response.data[key]);
        });
        this.youhui = data.limits || 10;
        this.pics = data.price || 0;
@@ -707,7 +689,9 @@
        this.checkedkey = this.DataList.map(item => item.proId || '');
        this.checkedListkey = [...this.checkedkey];
        this.checkedNodes = [...this.checkedkey];
        return this.getDataList();
      }).then(() => {
        this.loading = false;
        this.$nextTick(() => {
@@ -716,7 +700,6 @@
      }).catch((error) => {
        this.loading = false;
        this.$message.error("加载数据失败");
        console.error(error);
      });
    },
    addmembers() {
@@ -826,7 +809,9 @@
        this.pics = this.DataList.reduce((total, item) => total + item.priceOrd, 0);
        this.$nextTick(() => {
          this.$refs.tree.setCheckedKeys(this.checkedNodes);
          this.initializing = false;
        });
      });
      this.loading = false;
    },
@@ -838,6 +823,9 @@
      });
    },
    handleCurrentChecked(data, checked, indeterminate) {
      if (this.initializing) {
        return; // 初始化时不处理
      }
      if (checked) {
        if (!this.DataList.some((item) => item.proId === data.proId)) {
          this.DataList.push({
@@ -851,14 +839,16 @@
        if (!this.checkedNodes.includes(data.proId)) {
          this.checkedNodes.push(data.proId);
        }
        this.updateTotalPrice();
      } else {
        this.DataList = this.DataList.filter((item) => item.proId !== data.proId);
        const index = this.checkedNodes.indexOf(data.proId);
        if (index > -1) {
          this.checkedNodes.splice(index, 1);
        }
        this.updateTotalPrice();
      }
      this.updateTotalPrice();
    },
    updateTotalPrice() {
      this.form.xianprice = this.DataList.reduce((sum, item) => {
@@ -871,7 +861,7 @@
        this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10;
      }
    },
    numberChangeXianPrice(currentValue, oldValue) {
   /*  numberChangeXianPrice(currentValue, oldValue) {
      if (this.form.xianprice === this.lastXianPrice || !this.form.xianprice) return;
      clearTimeout(this.debounceTimer);
      this.debounceTimer = setTimeout(() => {
@@ -905,7 +895,7 @@
            this.youhui = oldValue;
          });
      }, 500);
    },
    }, */
    spliceData() {
      for (var i = 0; i < this.DataList.length; i++) {
        for (var j = i + 1; j < this.DataList.length; j++) {
@@ -934,6 +924,47 @@
      this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0);
    },
    submitForm() {
      // 检查现价是否发生变化
      if (this.form.xianprice !== this.lastXianPrice) {
        this.$confirm("确定修改所有子项的折扣吗?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        }).then(() => {
          // 更新所有子项的折扣
          this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10;
          let totalYsprice = new Big(0);
          this.DataList.forEach((item) => {
            item.limits = this.youhui;
            const ordPrice = new Big(item.priceOrd);
            const discount = new Big(item.limits);
            const result = ordPrice.times(discount.div(10));
            item.priceNow = result.toNumber();
            totalYsprice = totalYsprice.plus(new Big(item.priceNow));
          });
          if (!totalYsprice.eq(this.form.xianprice)) {
            const diff = new Big(this.form.xianprice).minus(totalYsprice);
            if (this.DataList.length > 0) {
              const lastItem = this.DataList[this.DataList.length - 1];
              const newYsPrice = new Big(lastItem.priceNow).plus(diff).toNumber();
              this.$set(this.DataList[this.DataList.length - 1], "priceNow", newYsPrice);
            }
          }
          // 保存数据
          return this.saveData();
        }).catch(() => {
          // 用户取消操作,恢复原来的现价
          this.form.xianprice = this.lastXianPrice;
        });
      } else {
        // 现价没有变化,直接保存
        this.saveData();
      }
    },
    // 新增一个方法处理保存逻辑
    saveData() {
      this.form.limits = this.youhui;
      this.form.price = this.pics;
      this.form.priceNow = this.form.xianprice;
@@ -954,7 +985,7 @@
        pacName: this.form.pacName,
        limits: this.form.limits,
        pacStatus: this.form.pacStatus,
        packageProjects: packageProjects,
        packageProjects: packageProjects,
        newPrice: this.form.xianprice,
        price: this.pics,
        pacId: this.form.pacId || null,
@@ -965,7 +996,8 @@
        pacRemark: this.form.pacRemark,
        detail: this.form.detail,
      };
      saveOreditTjPacNew(data).then((res) => {
      return saveOreditTjPacNew(data).then((res) => {
        this.open = false;
        this.getList();
      });