From 5a9be998d3dc8097d19d6f4833c0538c34bd6dcb Mon Sep 17 00:00:00 2001
From: lkk <364857242@qq.com>
Date: 星期四, 09 一月 2025 10:29:18 +0800
Subject: [PATCH] 111

---
 src/views/system/package/index.vue |  383 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 342 insertions(+), 41 deletions(-)

diff --git a/src/views/system/package/index.vue b/src/views/system/package/index.vue
index 5644531..b6a2b1a 100644
--- a/src/views/system/package/index.vue
+++ b/src/views/system/package/index.vue
@@ -145,10 +145,24 @@
           fixed
         />
         <el-table-column
-          label="浠锋牸"
+          label="鍘熶环"
           width="80px"
           align="center"
           prop="price"
+          fixed
+        ></el-table-column>
+        <el-table-column
+          label="鎶樻墸"
+          width="80px"
+          align="center"
+          prop="limits"
+          fixed
+        ></el-table-column>
+        <el-table-column
+          label="浼樻儬浠�"
+          width="80px"
+          align="center"
+          prop="newPrice"
           fixed
         >
         </el-table-column>
@@ -301,8 +315,9 @@
     <el-dialog
       :title="title"
       :visible.sync="open"
-      width="1100px"
+      width="1500px"
       append-to-body
+      :close-on-click-modal="false"
     >
       <el-form
         ref="form"
@@ -424,12 +439,49 @@
             style="width: 150px"
           />
         </el-form-item>
-        <el-form-item label="鍘熶环" prop="counterPrice">
+        <el-form-item label="鍘熶环" prop="pics">
           <el-input
-            v-model="form.counterPrice"
+            v-model="pics"
             placeholder="璇疯緭鍏ュ師浠�"
             style="width: 150px"
           />
+        </el-form-item>
+        <el-form-item label="鎶樻墸">
+          <el-input-number
+            ref="inputNumber"
+            style="width: 150px"
+            v-model="youhui"
+            :precision="2"
+            :step="0.1"
+            :max="10"
+            :min="1"
+            @change="numberChange"
+          ></el-input-number>
+        </el-form-item>
+        <el-form-item label="浼樻儬浠�">
+          <el-input
+            ref="inputName"
+            v-model="form.xianprice"
+            placeholder="浼樻儬浠�"
+            clearable
+            style="width: 140px"
+          />
+        </el-form-item>
+        <el-form-item label="浣撴绫诲埆" prop="tjCategory">
+          <el-select
+            v-model="form.tjCategory"
+            placeholder="璇烽�夋嫨浣撴绫诲埆"
+            style="width: 150px"
+            filterable
+            clearable
+          >
+            <el-option
+              v-for="dict in dict.type.dict_tjtype"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
         </el-form-item>
 
         <div v-if="!isCollapsed" style="display: flex">
@@ -498,8 +550,8 @@
         </el-table-column>
       </el-table> -->
 
-      <el-row :gutter="20">
-        <el-col :span="6">
+      <el-row :gutter="11">
+        <el-col :span="11">
           <div
             style="text-align: center; margin-bottom: 10px; margin-top: 10px"
           >
@@ -519,11 +571,12 @@
               :default-checked-keys="checkedkey"
               :filter-node-method="filterNode"
               ref="tree"
+              :render-content="renderContent"
             >
             </el-tree>
           </div>
         </el-col>
-        <el-col :span="6">
+        <!--  <el-col :span="6">
           <div
             style="text-align: center; margin-bottom: 10px; margin-top: 10px"
           >
@@ -541,30 +594,55 @@
               @check-change="handleCurrentChecked1"
               :default-checked-keys="checkedListkey"
               ref="trees"
+              :render-content="renderContent"
             >
             </el-tree>
           </div>
-        </el-col>
+        </el-col> -->
         <el-col :span="11">
           <div class="grid-content bg-purple">
             <div
-              style="text-align: center; margin-bottom: 10px; margin-top: 10px"
+              style="
+                text-align: center;
+                margin-bottom: 10px;
+                margin-top: 10px;
+                margin-left: 16%;
+              "
             >
               宸查�夐」鐩垪琛�
             </div>
             <el-table
               :data="DataList"
               border
-              style="width: 100%"
+              style="width: 80%; margin-left: 18%"
               height="400"
               :span-method="objectSpanMethod"
             >
-              <el-table-column prop="propinName" label="妫�鏌ラ」鐩�">
+              <el-table-column prop="proName" label="妫�鏌ラ」鐩�">
               </el-table-column>
-              <el-table-column prop="proName" label="鏄庣粏椤圭洰" width="260px">
+
+              <el-table-column prop="proPrice" label="鍘熶环" align="center">
               </el-table-column>
-              <el-table-column prop="proPrice" label="鍘熶环" width="56px">
+              <el-table-column label="鎶樻墸">
+                <template slot-scope="scope">
+                  <!-- 鍙緭鍏ョ函鏁板瓧鎶樻墸 -->
+                  <el-input
+                    v-model.number="scope.row.limits"
+                    @input="calculateDiscount(scope.row)"
+                    placeholder="杈撳叆鎶樻墸"
+                    size="small"
+                    type="number"
+                    min="0"
+                    step="0.1"
+                    max="10"
+                  >
+                  </el-input>
+                </template>
               </el-table-column>
+              <el-table-column prop="priceNow" label="浼樻儬浠�" align="center">
+              </el-table-column>
+              <!-- <el-table-column prop="proName" label="鏄庣粏椤圭洰" width="260px">
+              </el-table-column> -->
 
               <!-- <el-table-column
                 label="鎿嶄綔"
@@ -584,6 +662,7 @@
                 </template> 
               </el-table-column>-->
             </el-table>
+            <!-- <h3 style="font-weight: 600">鍚堣锛歿{ pics }}鍏�</h3> -->
           </div>
         </el-col>
       </el-row>
@@ -632,15 +711,16 @@
   getAllList,
   updateProject,
   getPacTjProjectList,
+  saveOreditTjPacNew,
 } from "@/api/system/package";
 import { Message } from "element-ui";
+import Big from "big.js";
 export default {
   name: "Package",
-  dicts: ["sys_normal_disable", "sys_yes_no"],
+  dicts: ["sys_normal_disable", "sys_yes_no", "dict_tjtype"],
   components: { Packages },
   data() {
     let checkPhoneNum = (rule, value, callback) => {
-      console.log(value);
       let patter = new RegExp(/^1\s*[3456789]\s*(\d\s*){9}$/);
       if (value == "" && value == undefined && !value) {
         return callback("");
@@ -651,10 +731,12 @@
       }
     };
     return {
+      pics: 0,
       filterText: "",
       DataList: [],
       list1: true,
       activeName: "1",
+      num: 1,
       checkedObj: {},
       dataObj: {},
       Treedata: [],
@@ -696,6 +778,7 @@
       newproName: [],
       // 鎵�鏈変綋妫�椤圭洰路
       allList: [],
+      treeList: [],
       // 鎵�鏈夊椁愭暟鎹�
       // allpackage:[],
       // 寮瑰嚭灞傛爣棰�
@@ -712,8 +795,13 @@
         pacRemark: null,
       },
       // 琛ㄥ崟鍙傛暟
-      form: {},
+      form: {
+        xianprice: null, // 浼樻儬浠�
+        counterPrice: null, //鍘熶环
+        limits: 10,
+      },
       forms: {},
+      youhui: 10,
       // 琛ㄥ崟鏍¢獙
       rules: {
         deleted: [
@@ -749,6 +837,7 @@
       this.$refs.tree.filter(val);
     },
   },
+
   created() {
     this.getList();
     this.getKeyword();
@@ -760,7 +849,12 @@
     },
     filterNode(value, data) {
       if (!value) return true;
-      return data.proName.indexOf(value) !== -1;
+      // return data.proName.indexOf(value) !== -1;
+      if (data.proName.indexOf(value) !== -1) {
+        return data.proName.indexOf(value) !== -1;
+      } else {
+        return data.proEngName.indexOf(value) !== -1;
+      }
     },
     /** 鏌ヨ浣撴濂楅鍒楄〃 */
     getList() {
@@ -794,7 +888,6 @@
       });
     },
     sel(val) {
-      console.log(val);
       let id = val;
       this.keys = "";
       id.forEach((item) => {
@@ -808,9 +901,7 @@
         this.categoryList = response.rows;
       });
     },
-    shangpin(vals) {
-      console.log(vals);
-    },
+    shangpin(vals) {},
     // 鍙栨秷鎸夐挳
     cancel() {
       this.open = false;
@@ -876,6 +967,8 @@
       this.open = true;
       this.title = "浣撴濂楅淇℃伅缁存姢";
       this.DataList = [];
+      this.checkedkey = [];
+      this.checkedListkey = [];
       this.getDataList();
       // getAllList().then((response) => {
       //   this.allList = response.data;
@@ -928,9 +1021,10 @@
       // });
       getPacInFo(this.forms.pacId).then((response) => {
         this.form = response.data;
-        this.form.keywords=this.form.keywords.slice(0, -1);
+        this.form.keywords = this.form.keywords.slice(0, -1);
         this.form.keywords = this.form.keywords.split(",");
         this.DataList = [];
+        // this.pics = 0;
         this.checkedkey = [];
         this.checkedListkey = [];
         this.getDataList();
@@ -942,7 +1036,7 @@
       this.open = true;
       getPacInFo(row.pacId).then((response) => {
         this.form = response.data;
-        this.form.keywords=this.form.keywords.slice(0, -1);
+        this.form.keywords = this.form.keywords.slice(0, -1);
         this.form.keywords = this.form.keywords.split(",");
         this.DataList = [];
         this.checkedkey = [];
@@ -1029,9 +1123,56 @@
 
       return this.form.tjProjectList;
     },
-    //  // 榛樿鎺ュ彈鍥涗釜鍊� { 褰撳墠琛岀殑鍊�, 褰撳墠鍒楃殑鍊�, 琛岀殑涓嬫爣, 鍒楃殑涓嬫爣 }
+
+    numberChange(currentValue, oldValue) {
+      this.$confirm("纭畾淇敼鎵�鏈夊瓙椤圭殑鎶樻墸鍚楋紵", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          this.youhui = currentValue;
+          /*    if (this.youhui < 10) {
+            this.youhui = 10;
+            // this.$modal.msgError(`璇ヤ汉鍛樻渶楂樹紭鎯犳潈闄愪负${this.getInfodis}鎶榒);
+          } */
+          this.DataList.forEach((item) => {
+            item.limits = this.youhui;
+            const proPrice = new Big(item.proPrice);
+            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));
+          });
+        })
+        .catch(() => {
+          this.youhui = oldValue;
+        });
+    },
+
+    updateProPrice(row) {
+      const proPrice = new Big(row.proPrice);
+      const limits = new Big(row.limits);
+      const result = proPrice.times(limits.div(10)); // ordPrice * (discount / 10)
+      row.priceNow = result.toNumber();
+      this.form.xianprice = this.DataList.reduce((sum, item) => {
+        return sum.plus(new Big(item.priceNow || "0"));
+      }, new Big(0)).toNumber();
+      this.youhui =
+        (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10;
+    },
+    calculateDiscount(row) {
+      if (row.limits > 10) {
+        row.limits = 10; // 寮哄埗灏嗗�艰缃负鏈�澶у��
+      } else if (row.limits < 0) {
+        row.limits = 0; // 寮哄埗灏嗗�艰缃负鏈�灏忓��
+      }
+      this.updateProPrice(row); // 鏇存柊浠锋牸鎴栧叾浠栭�昏緫
+    },
+    // 榛樿鎺ュ彈鍥涗釜鍊� { 褰撳墠琛岀殑鍊�, 褰撳墠鍒楃殑鍊�, 琛岀殑涓嬫爣, 鍒楃殑涓嬫爣 }
     objectSpanMethod({ row, column, rowIndex, columnIndex }) {
-      // console.log(row, column, rowIndex, columnIndex);
       let fields = ["propinName"];
       let cellValue = row[column.property];
       if (cellValue && fields.includes(column.property)) {
@@ -1050,7 +1191,14 @@
         }
       }
     },
-
+    renderContent(h, { node, data, store }) {
+      return (
+        <span class="custom-tree-node">
+          <span>{node.label}</span>
+          <span>({data.proPrice}鍏�)</span>
+        </span>
+      );
+    },
     getDataList() {
       this.loading = true;
       getProParentIdDxList().then((response) => {
@@ -1060,7 +1208,19 @@
             this.Treedata.forEach((item1) => {
               if (item.proId == item1.proId) {
                 this.checkedkey.push(item1.proId);
-                let proId = item1.proId;
+
+                this.DataList.push(item1);
+                this.DataList.forEach((item1) => {
+                  item1.limits = 10;
+                  if (item1.limits > 10) {
+                    item1.limits = 10; // 寮哄埗灏嗗�艰缃负鏈�澶у��
+                  } else if (item1.limits < 0) {
+                    item1.limits = 0; // 寮哄埗灏嗗�艰缃负鏈�灏忓��
+                  }
+                  this.updateProPrice(item1); // 鏇存柊浠锋牸鎴栧叾浠栭�昏緫
+                });
+
+                /* let proId = item1.proId;
                 getProSonDxList(proId).then((res) => {
                   this.TreedataList = res.data.list;
                   this.TreedataList.forEach((item2) => {
@@ -1074,16 +1234,29 @@
                           item.propinPrice = item1.proPrice;
                         }
                       });
+                      this.pics = 0;
+                      this.DataList.forEach((item) => {
+                        this.pics += item.proPrice;
+                      });
                     }
                   });
-                });
+                }); */
               }
             });
           });
         } else {
           this.checkedkey.push(this.Treedata[0].proId);
           let proId = this.Treedata[0].proId;
-          getProSonDxList(proId).then((res) => {
+          this.TreedataList = this.Treedata.filter(
+            (item) => item.proId == proId
+          );
+
+          // 灏嗙涓�涓」鐩坊鍔犲埌 DataList
+          this.TreedataList.forEach((item) => {
+            this.checkedListkey.push(item.proId);
+            this.DataList.push(item);
+          });
+          /*  getProSonDxList(proId).then((res) => {
             this.TreedataList = res.data.list;
             this.TreedataList.forEach((item) => {
               item.disabled = true;
@@ -1093,14 +1266,65 @@
                 item.propinName = this.Treedata[0].proName;
                 item.propinPrice = this.Treedata[0].proPrice;
               });
+              this.pics = 0;
+              this.DataList.forEach((item) => {
+                this.pics += item.proPrice;
+              });
             });
-          });
+          }); */
         }
+        this.pics = this.DataList.reduce(
+          (total, item) => total + item.proPrice,
+          0
+        );
         this.loading = false;
       });
     },
+
     handleCurrentChecked(data, checked, checkedNodes) {
-      console.log(data, checked);
+      this.dataObj = data;
+      this.checkedObj = checked;
+
+      if (checked == true) {
+        // 灏嗛�変腑鐨勯」鐩坊鍔犲埌 DataList
+        this.checkedListkey.push(data.proId);
+        this.DataList.push({
+          proId: data.proId,
+          proName: data.proName,
+          proPrice: data.proPrice, // 鍘熶环
+          limits: 10, // 榛樿鎶樻墸锛�100%锛�
+          priceNow: data.proPrice, // 榛樿浼樻儬浠蜂笌鍘熶环鐩稿悓
+        });
+
+        // 閲嶆柊璁$畻鎬讳环
+        this.pics = 0;
+        this.TotalPrice1 = 0;
+        this.DataList.forEach((item) => {
+          this.pics += item.proPrice;
+          this.form.counterPrice += item.proPrice;
+          this.TotalPrice1 += item.proPrice; // 鍙互鏍规嵁闇�瑕佹敼鎴愪紭鎯犱环 `priceNow`
+        });
+      } else if (checked == false) {
+        // 浠� DataList 涓Щ闄ゅ彇娑堥�変腑鐨勯」鐩�
+        let index = this.DataList.findIndex(
+          (item) => item.proId === data.proId
+        );
+        if (index !== -1) {
+          this.DataList.splice(index, 1);
+        }
+
+        // 閲嶆柊璁$畻鎬讳环
+        this.pics = 0;
+        this.TotalPrice1 = 0;
+        this.DataList.forEach((item) => {
+          this.pics += item.proPrice;
+          this.form.counterPrice += item.proPrice;
+          this.TotalPrice1 += item.proPrice; // 鍙互鏍规嵁闇�瑕佹敼鎴愪紭鎯犱环 `priceNow`
+        });
+      }
+    },
+
+    /* handleCurrentChecked(data, checked, checkedNodes) {
       this.dataObj = data;
       this.checkedObj = checked;
       if (checked == true) {
@@ -1113,7 +1337,9 @@
             this.checkedListkey.push(item.proId);
             this.DataList.push(item);
             this.spliceData();
+            this.pics = 0;
             this.DataList.forEach((item1) => {
+              this.pics += item1.proPrice;
               if (item1.proParentId == data.proId) {
                 item1.propinName = data.proName;
                 item1.propinPrice = this.dataObj.proPrice;
@@ -1121,10 +1347,12 @@
             });
           });
           this.TotalPrice1 = 0;
+          this.pics = 0;
           if (this.DataList.length != 0) {
             this.list1 = false;
             this.DataList.forEach((item) => {
               this.TotalPrice1 = item.proPrice + this.TotalPrice1;
+              this.pics += item.proPrice;
             });
           }
         });
@@ -1136,15 +1364,18 @@
             item.disabled = true;
           });
           this.checkedListkey = [];
-          console.log(this.TreedataList.length);
           this.DataList.forEach((item, index) => {
             if (item.proParentId == this.dataObj.proId) {
               this.DataList.splice(index, this.TreedataList.length);
             }
           });
+          this.pics = 0;
+          this.DataList.forEach((item, index) => {
+            this.pics += item.proPrice;
+          });
         });
       }
-    },
+    }, */
 
     spliceData() {
       for (var i = 0; i < this.DataList.length; i++) {
@@ -1166,14 +1397,18 @@
           if (item.proId == data.proId) {
             this.DataList.splice(index, 1);
             this.TotalPrice1 = 0;
+            this.pics = 0;
             this.DataList.forEach((item1) => {
-              this.TotalPrice1 = item1.proPrice + this.TotalPrice1;
+              this.pics += item1.proPrice;
+              // this.TotalPrice1 = item1.proPrice + this.TotalPrice1;
             });
           }
         });
       } else if (checked == true) {
         this.DataList.push(data);
+        this.pics = 0;
         this.DataList.forEach((item1) => {
+          this.pics += item1.proPrice;
           if (item1.proParentId == this.dataObj.proId) {
             item1.propinName = this.dataObj.proName;
             item1.propinPrice = this.dataObj.proPrice;
@@ -1181,8 +1416,10 @@
         });
         this.spliceData();
         this.TotalPrice1 = 0;
+        this.pics = 0;
         this.DataList.forEach((item1) => {
-          this.TotalPrice1 = item1.proPrice + this.TotalPrice1;
+          // this.TotalPrice1 = item1.proPrice + this.TotalPrice1;
+          this.pics += item1.proPrice;
         });
       }
     },
@@ -1204,10 +1441,67 @@
 
     /** 鎻愪氦鎸夐挳 */
     submitForm() {
+      console.log(this.form, 999);
+      this.form.limits = this.youhui;
+      this.form.price = this.pics;
+      this.form.priceNow = this.queryParams.xianprice;
+
+      if (this.keys) {
+        this.form.keywords = this.keys; // 濡傛灉鏈� this.keys锛屽垯鐩存帴璧嬪��
+      } else {
+        this.form.keywords = this.form.keywords.toString(); // 濡傛灉娌℃湁锛屽垯灏� this.form.keywords 杞垚瀛楃涓�
+      }
+
+      let packageProjects = []; // 瀹氫箟涓�涓┖鏁扮粍
+
+      this.DataList.forEach((item) => {
+        packageProjects.push({
+          proName: item.proName,
+          proId: item.proId,
+          priceNow: item.priceNow,
+          limits: item.limits,
+          priceOrd: item.proPrice,
+        });
+      });
+      let data = {
+        pacName: this.form.pacName,
+        limits: this.form.limits,
+        pacStatus: this.form.pacStatus,
+        packageProjects: packageProjects,
+        newPrice: this.form.xianprice,
+        price: this.pics,
+        pacId: this.form.pacId || null,
+        isOnSale: this.form.isOnSale,
+        keywords: this.form.keywords,
+        sort: this.form.sort,
+        retailPrice: this.form.retailPrice,
+        tjCategory: this.form.tjCategory,
+        pacRemark: this.form.pacRemark,
+        detail: this.form.detail,
+      };
+
+      saveOreditTjPacNew(data).then((res) => {
+        console.log(res, 555);
+        this.open = false;
+        this.getList();
+      });
+    },
+    /* submitForm() {
       if (this.form.pacName) {
         this.form.tjProjectList = [];
         if (this.DataList.length != 0) {
-          this.DataList.forEach((item) => {
+          this.treeList = JSON.parse(JSON.stringify(this.DataList));
+          for (var i = 0; i < this.treeList.length; i++) {
+            for (var j = i + 1; j < this.treeList.length; j++) {
+              if (
+                this.treeList[i].proParentId == this.treeList[j].proParentId
+              ) {
+                this.treeList.splice(j, 1);
+                j--;
+              }
+            }
+          }
+          this.treeList.forEach((item) => {
             this.form.tjProjectList.push({
               // id: 0,
               proName: item.propinName,
@@ -1226,12 +1520,12 @@
               // } else {
               //   this.form.pacStatus = 1;
               // }
-              if(this.keys){
+              if (this.keys) {
                 this.form.keywords = this.keys;
-              }else{
+              } else {
                 this.form.keywords = this.form.keywords.toString();
               }
-            
+
               updatePackage(this.form).then((response) => {
                 this.$modal.msgSuccess("淇敼鎴愬姛");
                 this.open = false;
@@ -1244,7 +1538,6 @@
               // } else {
               //   this.form.pacStatus = 1;
               // }
-              // console.log(this.form.tjProjectList);
               // return;
               addPackage(this.form).then((response) => {
                 this.$modal.msgSuccess("鏂板鎴愬姛");
@@ -1257,7 +1550,7 @@
       } else {
         Message.warning("璇峰厛濉啓濂楅鍚嶇О");
       }
-    },
+    }, */
     /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     handleDelete(row) {
       const pacIds = row.pacId || this.ids;
@@ -1385,4 +1678,12 @@
   overflow-y: auto;
   border: 1px solid #d9d9d9;
 }
+/* .custom-tree-node {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    font-size: 14px;
+    padding-right: 8px;
+  } */
 </style>
\ No newline at end of file

--
Gitblit v1.8.0