From 6d4e9ccb34e0292bfadba7bfd678231cb37ae8c0 Mon Sep 17 00:00:00 2001
From: qx <1084500556@qq.com>
Date: 星期三, 02 七月 2025 15:45:16 +0800
Subject: [PATCH] :qx

---
 src/views/system/package/index.vue |  466 ++++++++++++++++-----------------------------------------
 1 files changed, 134 insertions(+), 332 deletions(-)

diff --git a/src/views/system/package/index.vue b/src/views/system/package/index.vue
index af9f3af..6dc6de8 100644
--- a/src/views/system/package/index.vue
+++ b/src/views/system/package/index.vue
@@ -39,16 +39,11 @@
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <!-- 
-    element-loading-background="rgba(0, 0, 0, 0.1)"
-    element-loading-spinner="el-icon-loading"
-        element-loading-text="姝e湪鍔犺浇涓�..." -->
     <template>
       <el-table v-loading="loading" style="width: 100%" :data="packageList" @selection-change="handleSelectionChange"
         border>
         <el-table-column fixed type="selection" width="40" align="center" :show-overflow-tooltip="true" />
         <el-table-column label="搴忓彿" align="center" width="50" prop="newID" fixed />
-        <!-- <el-table-column label="缂栧彿" align="center" prop="pacId" /> -->
         <el-table-column label="浣撴绫诲埆" width="100px" align="center" prop="categoryNames" fixed>
           <template slot-scope="scope">
             <dict-tag :options="dict.type.dict_tjtype" :value="scope.row.tjCategory" />
@@ -57,55 +52,21 @@
         <el-table-column label="濂楅鍚嶇О" align="center" prop="pacName" width="150px" fixed />
         <el-table-column 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>
-        <el-table-column label="鍗曢」鍒楄〃" align="center" prop="allProName" width="1200px">
-        </el-table-column>
-        <!-- <el-table-column
-          label="椤圭洰鏄庣粏"
-          align="center"
-          prop="allSonName"
-          :show-overflow-tooltip="true"
-        > 
-        </el-table-column>-->
+        <el-table-column label="鐜颁环" width="80px" align="center" prop="newPrice" fixed></el-table-column>
+        <el-table-column label="鍗曢」鍒楄〃" align="center" prop="allProName" width="1200px"></el-table-column>
         <el-table-column label="濂楅鎻忚堪" align="center" :show-overflow-tooltip="true" width="120px">
           <template slot-scope="scope">
             <div class="showInline">{{ scope.row.pacRemark }}</div>
           </template>
         </el-table-column>
-        <!-- <el-table-column
-          label="鍥剧墖"
-          align="center"
-          prop="pacPhone"
-          width="100"
-          :show-overflow-tooltip="true"
-        >
-          <template slot-scope="scope">
-            <image-preview :src="scope.row.pacPhone" :width="50" :height="50" />
-          </template>
-        </el-table-column> -->
-
         <el-table-column label="鍏抽敭瀛�" width="110px" align="center" prop="keyNames"></el-table-column>
         <el-table-column label="鏄惁涓婃灦" width="94px" align="center" prop="isOnSale">
           <template slot-scope="scope">
             <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.isOnSale" />
           </template>
         </el-table-column>
-        <!-- <el-table-column
-          label="璇︾粏浠嬬粛"
-          :show-overflow-tooltip="true"
-          width="100px"
-          align="center"
-          prop="detail"
-        ></el-table-column> -->
         <el-table-column label="鎺掑簭" width="50px" align="center" prop="sort"></el-table-column>
         <el-table-column label="灏忕▼搴忎环鏍�" width="90px" align="center" prop="retailPrice"></el-table-column>
-        <!-- <el-table-column
-          label="鍘熶环"
-          width="90px"
-          align="center"
-          prop="counterPrice"
-        ></el-table-column> -->
         <el-table-column label="宸插敭鏁伴噺" width="90px" align="center" prop="saleNum"></el-table-column>
         <el-table-column label="鐘舵��" align="center" prop="pacStatus" fixed="right" width="100px">
           <template slot-scope="scope">
@@ -119,8 +80,6 @@
               v-hasPermi="['system:package:edit']" title="淇敼"></el-button>
             <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
               v-hasPermi="['system:package:remove']" title="鍒犻櫎"></el-button>
-            <!-- <el-button size="mini" type="text" icon="el-icon-circle-check" @click="handleSeach(scope.row)"
-              v-hasPermi="['system:package:Seach']" title="濂楅璇︽儏"></el-button> -->
           </template>
         </el-table-column>
       </el-table>
@@ -136,8 +95,6 @@
     <!-- 淇敼浣撴濂楅瀵硅瘽妗� -->
     <el-dialog :title="title" :visible.sync="open" width="1400px" append-to-body :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="100px" :inline="true">
-        <!-- <div class="dialo">
-        <div class="dialo1"> -->
         <el-form-item label="濂楅鍚嶇О" prop="pacName">
           <span slot="label" style="display: inline-block; border-bottom: 2px solid blue" @click="handlePackage">
             濂楅鍚嶇О
@@ -145,51 +102,23 @@
           <el-input v-model="form.pacName" placeholder="璇疯緭鍏ュ椁愬悕绉�" style="width: 150px" />
         </el-form-item>
         <el-form-item label="濂楅鐘舵��" prop="pacStatus">
-          <!-- <el-radio-group v-model="form.pacStatus">
-              <el-radio :label="0">鍚敤</el-radio>
-              <el-radio :label="1">鍋滅敤</el-radio>
-            </el-radio-group> -->
           <el-select v-model="form.pacStatus" placeholder="璇烽�夋嫨鐘舵��" style="width: 150px" filterable clearable>
             <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
               :value="dict.value"></el-option>
           </el-select>
         </el-form-item>
-
-        <!--  <el-form-item label="濂楅绫荤洰" prop="categoryId">
-          <el-select
-            v-model="form.categoryId"
-            placeholder="璇烽�夋嫨濂楅绫荤洰"
-            style="width: 150px"
-            @change="shangpin"
-            filterable
-            clearablez
-          >
-            <el-option
-              v-for="item in categoryList"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            ></el-option>
-          </el-select>
-        </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>
-
         <el-form-item label="鏄惁涓婃灦" prop="isOnSale">
-          <!-- <el-radio-group v-model="form.pacStatus">
-              <el-radio :label="0">鍚敤</el-radio>
-              <el-radio :label="1">鍋滅敤</el-radio>
-            </el-radio-group> -->
           <el-select v-model="form.isOnSale" placeholder="璇烽�夋嫨鏄惁涓婃灦" style="width: 140px" filterable clearable>
             <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label"
               :value="dict.value"></el-option>
           </el-select>
         </el-form-item>
-
         <el-form-item label="鎺掑簭" prop="sort">
           <el-input v-model="form.sort" placeholder="璇疯緭鍏ユ帓搴�" style="width: 150px" />
         </el-form-item>
@@ -197,13 +126,12 @@
           <el-input v-model="form.retailPrice" placeholder="璇疯緭鍏ュ皬绋嬪簭浠锋牸" style="width: 150px" />
         </el-form-item>
         <el-form-item label="鍘熶环" prop="pics">
-          <el-input v-model="pics" placeholder="璇疯緭鍏ュ師浠�" style="width: 150px" />
+          <el-input v-model="pics" placeholder="璇疯緭鍏ュ師浠�" style="width: 150px" type="number" />
         </el-form-item>
         <el-form-item label="鎶樻墸">
           <el-input-number style="width: 150px" v-model="youhui" :precision="2" :step="0.1" :max="10" :min="0.1"
-          @change="debounceNumberChange" :debounce="3000"></el-input-number>
+            @change="debounceNumberChange" :debounce="3000"></el-input-number>
         </el-form-item>
-
         <el-form-item label="鐜颁环" prop="xianprice">
           <el-input v-model="form.xianprice" placeholder="鐜颁环" clearable style="width: 140px" @input="changeXianjia"
             type="number" :debounce="3000" min="0"/>
@@ -214,7 +142,6 @@
             <el-option v-for="item in keywordList" :key="item.id" :label="item.keyword" :value="item.id"></el-option>
           </el-select>
         </el-form-item>
-
         <div v-if="!isCollapsed" style="display: flex">
           <div>
             <el-form-item label="濂楅鎻忚堪" prop="pacRemark">
@@ -222,56 +149,19 @@
                 rows="2"></el-input>
             </el-form-item>
             <el-form-item label="璇︾粏浠嬬粛" prop="detail">
-              <!-- <el-input
-            v-model="form.detail"
-            placeholder="璇疯緭鍏ヨ缁嗕粙缁�"
-            style="width: 200px"
-          /> -->
               <editor v-model="form.detail" :min-height="192" style="width: 670px" />
             </el-form-item>
           </div>
-          <!-- </div> -->
           <div class="dialo2">
             <el-form-item label="鍥剧墖">
               <image-upload v-model="form.pacPhone" />
             </el-form-item>
           </div>
-          <!-- </div> -->
         </div>
       </el-form>
       <el-button type="primary" plain size="mini" @click="toggleCollapse">{{
         isCollapsed ? "灞曞紑" : "鏀惰捣"
       }}</el-button>
-      <!-- <el-button type="primary" plain size="mini" icon="el-icon-plus" @click="addmembers()">鏂板鍗曢」</el-button>
-      <el-table v-loading="loading" :data="form.tjProjectList" @selection-change="handleSelectionChange" border
-        max-height="275" style="margin: 10px 0">
-        <el-table-column label="搴忓彿" align="center" type="index" />
-        <el-table-column label="椤圭洰鍚嶇О" align="center" prop="proName" width="180px">
-          <template slot-scope="scope">
-            <el-select filterable v-model="scope.row.proName" placeholder="璇烽�夋嫨椤圭洰鍚嶇О" @change="getSelectValue">
-              <el-option v-for="(item, index) in allList" :key="index" :label="item.proName" :value="item.proName">
-              </el-option>
-            </el-select>
-          </template>
-        </el-table-column>
-        <el-table-column label="椤圭洰鏄庣粏" align="center" prop="allSonProName" width="400px" :show-overflow-tooltip="true">
-        </el-table-column>
-        <el-table-column label="鍘熶环(鍏�)" align="center" prop="proPrice" width="80px" />
-        <el-table-column label="鐜颁环(鍏�)" align="center" prop="priceNow" width="80px">
-          <template slot-scope="scope">
-            <el-input v-model="scope.row.priceNow" autocomplete="off" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" fixed="right" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button size="mini" type="text" icon="el-icon-circle-plus-outline" @click="addmembers(scope.row)"
-              v-hasPermi="['system:package:edit']" title="鏂板琛�"></el-button>
-            <el-button size="mini" type="text" icon="el-icon-delete" @click.native.prevent="Delete(scope.$index)"
-              v-hasPermi="['hosp:consumables:remove']" title="鍒犻櫎"></el-button>
-          </template>
-        </el-table-column>
-      </el-table> -->
-
       <el-row style="display: flex; width: 1300px">
         <el-col>
           <div style="text-align: center; margin-bottom: 10px; margin-top: 10px">
@@ -287,29 +177,6 @@
               :limit.sync="queryParams1.pageSize" @pagination="getDataList" />
           </div>
         </el-col>
-        <!--  <el-col :span="6">
-          <div
-            style="text-align: center; margin-bottom: 10px; margin-top: 10px"
-          >
-            鏄庣粏椤圭洰鍒楄〃
-          </div>
-          <div class="tab3">
-            <el-tree
-              class="filter-tree"
-              v-loading="loading"
-              :data="TreedataList"
-              node-key="proId"
-              :props="defaultProps"
-              :filter-node-method="filterNode"
-              show-checkbox
-              @check-change="handleCurrentChecked1"
-              :default-checked-keys="checkedListkey"
-              ref="trees"
-              :render-content="renderContent"
-            >
-            </el-tree>
-          </div>
-        </el-col> -->
         <el-col>
           <div class="grid-content bg-purple">
             <div style="
@@ -324,12 +191,10 @@
               :span-method="objectSpanMethod">
               <el-table-column prop="proName" label="妫�鏌ラ」鐩�">
               </el-table-column>
-
               <el-table-column prop="priceOrd" label="鍘熶环" align="center" width="80px">
               </el-table-column>
               <el-table-column label="鎶樻墸" width="100px">
                 <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>
@@ -343,54 +208,16 @@
                   </el-button>
                 </template>
               </el-table-column>
-              <!-- <el-table-column prop="proName" label="鏄庣粏椤圭洰" width="260px">
-              </el-table-column> -->
-
-              <!-- <el-table-column
-                label="鎿嶄綔"
-                align="center"
-                fixed="right"
-                class-name="small-padding fixed-width"
-                width="50px"
-              >
-                <template slot-scope="scope">
-                  <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-delete"
-                    @click="handleDeletes(scope.row)"
-                    title="鍒犻櫎"
-                  ></el-button>
-                </template> 
-              </el-table-column>-->
             </el-table>
             <h4 style="font-weight: 600;padding-left:20px">涓�鍏遍�変腑{{DataList.length}}椤癸紝鍚堣锛歿{ form.xianprice }}鍏�</h4>
           </div>
         </el-col>
       </el-row>
-
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
         <el-button @click="cancel">鍙� 娑�</el-button>
       </div>
     </el-dialog>
-
-    <!-- 濂楅璇︽儏 -->
-    <!-- <el-dialog :title="title" :visible.sync="Seachopen" width="500px" append-to-body>
-      <template>
-        <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">鍏ㄩ��</el-checkbox>
-        <div style="margin: 15px 0px; width: 60px"></div>
-        <el-checkbox-group v-model="newproName" @change="handleCheckedCitiesChange">
-          <el-checkbox style="margin: 15px 0px; width: 180px" v-for="item in allList" :label="item.proName"
-            :key="item.proId">{{ item.proName }}</el-checkbox>
-        </el-checkbox-group>
-
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="submitcheckbox">纭� 瀹�</el-button>
-          <el-button @click="cancel">鍙� 娑�</el-button>
-        </div>
-      </template>
-    </el-dialog> -->
     <Packages ref="aaa" @add="handleChanges" />
   </div>
 </template>
@@ -483,13 +310,16 @@
         xianprice: null,
         counterPrice: null,
         limits: 10,
+        keywords: [],
       },
       forms: {},
       youhui: 10,
-      initializing: true, // 鍒濆鍖栨爣蹇�
+      initializing: true,
       debounceTimer: null,
       rules: {
-       
+        pacName: [{ required: true, message: "璇疯緭鍏ュ椁愬悕绉�", trigger: "blur" }],
+        pics: [{ required: true, message: "璇疯緭鍏ュ師浠�", trigger: "blur" }],
+        xianprice: [{ required: true, message: "璇疯緭鍏ョ幇浠�", trigger: "blur" }],
       },
     };
   },
@@ -498,7 +328,6 @@
     this.getKeyword();
     this.getCategory();
   },
- 
   methods: {
     debounceNumberChange(currentValue, oldValue) {
       clearTimeout(this.debounceTimer);
@@ -506,16 +335,18 @@
         this.numberChange(currentValue, oldValue);
       }, 300);
     },
-   
+    numberChange(currentValue, oldValue) {
+      // 瀹炵幇鎶樻墸鍙樺寲鐨勯�昏緫锛堝鏋滈渶瑕侊級
+    },
     updateProPrice(row) {
-      const proPrice = new Big(row.priceOrd);
-      const limits = new Big(row.limits);
+      const proPrice = new Big(row.priceOrd || 0);
+      const limits = new Big(row.limits || 10);
       const result = proPrice.times(limits.div(10));
       row.priceNow = result.toNumber();
       this.form.xianprice = this.DataList.reduce((sum, item) => {
-        return sum.plus(new Big(item.priceNow || "0"));
+        return sum.plus(new Big(item.priceNow || 0));
       }, new Big(0)).toNumber();
-      this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10;
+      this.youhui = this.pics ? (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10 : 10;
     },
     calculateDiscount(row) {
       if (row.limits > 10) {
@@ -530,37 +361,79 @@
     },
     filterNode(value, data) {
       if (!value) return true;
-      return data.proName.indexOf(value) !== -1 || data.proEngName.indexOf(value) !== -1;
+      return data.proName.indexOf(value) !== -1 || (data.proEngName && data.proEngName.indexOf(value) !== -1);
     },
     getList() {
       this.loading = true;
       getPacTjProjectList().then((response) => {
-        this.allList = response.data;
+        this.allList = response.data || [];
         this.loading = false;
       });
       getPacList(this.queryParams).then((response) => {
         response.rows.forEach((item, index) => {
           item.newID = (this.queryParams.pageNum - 1) * this.queryParams.pageSize + index + 1;
         });
-        this.total = response.total;
-        this.packageList = response.rows;
+        this.total = response.total || 0;
+        this.packageList = response.rows || [];
         this.loading = false;
+      }).catch(() => {
+        this.loading = false;
+        this.$message.error("鑾峰彇濂楅鍒楄〃澶辫触");
       });
     },
     getKeyword() {
       this.loading = true;
       listKeyword(this.queryParams).then((response) => {
-        this.keywordList = response.rows;
+        this.keywordList = response.rows || [];
+        this.loading = false;
+      }).catch(() => {
+        this.loading = false;
+        this.$message.error("鑾峰彇鍏抽敭瀛楀垪琛ㄥけ璐�");
       });
     },
     sel(val) {
-      let id = val;
-      this.keys = id.join(",");
+      const maleId = '4'; // 鈥滅敺鈥濈殑 ID
+      const femaleId = '5'; // 鈥滃コ鈥濈殑 ID
+      let selectedIds = [...val]; // 澶嶅埗褰撳墠閫変腑鐨� ID 鏁扮粍
+
+      // 瀹炵幇鈥滅敺鈥濆拰鈥滃コ鈥濅簰鏂ラ�昏緫
+      if (selectedIds.includes(maleId) && selectedIds.includes(femaleId)) {
+        selectedIds = selectedIds.slice(-1); // 淇濈暀鏈�鍚庨�変腑鐨勪竴涓�
+        this.$message.warning('鈥滅敺鈥濆拰鈥滃コ鈥濆叧閿瓧浜掓枼锛屽彧鑳介�夋嫨涓�涓紒');
+      }
+
+      // 鏇存柊 form.keywords 鍜� keys
+      this.form.keywords = selectedIds;
+      this.keys = selectedIds.join(',');
+
+      // 璋冪敤 getDataList锛屼紶閫掓墍鏈夐�変腑鐨勫叧閿瓧 ID锛堥�楀彿鍒嗛殧锛�
+      this.getDataList({ xb: this.keys });
     },
     getCategory() {
       this.loading = true;
       listCategory(this.queryParams).then((response) => {
-        this.categoryList = response.rows;
+        this.categoryList = response.rows || [];
+        this.loading = false;
+      }).catch(() => {
+        this.loading = false;
+        this.$message.error('鑾峰彇濂楅绫荤洰澶辫触');
+      });
+    },
+    getDataList(params = {}) {
+      this.loading = true;
+      const query = { ...this.queryParams1, ...params };
+      search(query).then((response) => {
+        this.Treedata = response.data.list || [];
+        this.total1 = response.data.total || 0;
+        this.pics = this.DataList.reduce((total, item) => total + (item.priceOrd || 0), 0);
+        this.$nextTick(() => {
+          this.$refs.tree.setCheckedKeys(this.checkedNodes);
+          this.initializing = false;
+        });
+        this.loading = false;
+      }).catch(() => {
+        this.loading = false;
+        this.$message.error('鑾峰彇椤圭洰鍒楄〃澶辫触');
       });
     },
     shangpin(vals) {},
@@ -586,8 +459,9 @@
         xianprice: null,
         counterPrice: null,
         limits: 10,
+        keywords: [],
       };
-      this.initializing = true; 
+      this.initializing = true;
       this.resetForm("form");
     },
     handleQuery() {
@@ -629,7 +503,7 @@
       this.checkedListkey = [];
       this.checkedNodes = [];
       this.getDataList();
-      this.youhui = 10
+      this.youhui = 10;
     },
     handleStatusChange(row) {
       let data = {
@@ -637,10 +511,11 @@
         pacStatus: row.pacStatus,
       };
       let text = row.pacStatus === "0" ? "鍚敤" : "鍋滅敤";
-      this.$confirm("纭瑕�" + text + row.pacName + "濂楅鍚楋紵")
+      this.$modal
+        .confirm("纭瑕�" + text + row.pacName + "濂楅鍚楋紵")
         .then(() => updateStatus(data))
         .then(() => {
-          this.msgSuccess(text + "鎴愬姛");
+          this.$modal.msgSuccess(text + "鎴愬姛");
         })
         .catch(() => {
           row.pacStatus = row.pacStatus === "0" ? "0" : "1";
@@ -676,7 +551,7 @@
       getPacInFo(row.pacId).then((response) => {
         const data = response.data || {};
         Object.keys(data).forEach((key) => {
-          this.$set(this.form, key, response.data[key]);
+          this.$set(this.form, key, data[key]);
         });
         this.youhui = data.limits || 10;
         this.pics = data.price || 0;
@@ -689,9 +564,7 @@
         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(() => {
@@ -706,32 +579,23 @@
       if (this.form.pacName) {
         if (!this.form.tjProjectList) {
           this.form.tjProjectList = [];
-          this.form.tjProjectList.push({
-            id: parseInt(length),
-            proName: "",
-            allSonProName: "",
-            proPrice: "",
-            priceNow: "",
-            proId: "",
-          });
-        } else {
-          this.form.tjProjectList.push({
-            id: parseInt(length),
-            proName: "",
-            allSonProName: "",
-            proPrice: "",
-            priceNow: "",
-            proId: "",
-          });
         }
+        this.form.tjProjectList.push({
+          id: this.form.tjProjectList.length + 1,
+          proName: "",
+          allSonProName: "",
+          proPrice: "",
+          priceNow: "",
+          proId: "",
+        });
       } else {
-        Message.warning("璇峰厛濉啓濂楅鍚嶇О");
+        this.$modal.msgWarning("璇峰厛濉啓濂楅鍚嶇О");
       }
       this.$forceUpdate();
     },
     Delete(index) {
       if (this.form.tjProjectList.length === 0) {
-        this.$alert("璇峰厛閫夋嫨瑕佸垹闄ょ殑鏁版嵁", "鎻愮ず", { confirmButtonText: "纭畾" });
+        this.$modal.alert("璇峰厛閫夋嫨瑕佸垹闄ょ殑鏁版嵁", "鎻愮ず", { confirmButtonText: "纭畾" });
       } else {
         this.form.tjProjectList.splice(index, 1);
       }
@@ -801,20 +665,6 @@
         </span>
       );
     },
-    getDataList() {
-      this.loading = true;
-      search(this.queryParams1).then((response) => {
-        this.Treedata = response.data.list;
-        this.total1 = response.data.total;
-        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;
-    },
     handleFilterInput() {
       this.queryParams1.page = 1;
       this.getDataList();
@@ -824,7 +674,7 @@
     },
     handleCurrentChecked(data, checked, indeterminate) {
       if (this.initializing) {
-        return; // 鍒濆鍖栨椂涓嶅鐞�
+        return;
       }
       if (checked) {
         if (!this.DataList.some((item) => item.proId === data.proId)) {
@@ -848,57 +698,21 @@
         }
         this.updateTotalPrice();
       }
-     
     },
     updateTotalPrice() {
       this.form.xianprice = this.DataList.reduce((sum, item) => {
-        return sum.plus(new Big(item.priceNow || "0"));
+        return sum.plus(new Big(item.priceNow || 0));
       }, new Big(0)).toNumber();
-      this.pics = this.DataList.reduce((total, item) => total + item.priceOrd, 0);
+      this.pics = this.DataList.reduce((total, item) => total + (item.priceOrd || 0), 0);
     },
     changeXianjia() {
-      if (this.form.xianprice !== 0) {
+      if (this.form.xianprice !== 0 && this.pics) {
         this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10;
       }
     },
-   /*  numberChangeXianPrice(currentValue, oldValue) {
-      if (this.form.xianprice === this.lastXianPrice || !this.form.xianprice) return;
-      clearTimeout(this.debounceTimer);
-      this.debounceTimer = setTimeout(() => {
-        this.$confirm("纭畾淇敼鎵�鏈夊瓙椤圭殑鎶樻墸鍚楋紵", "鎻愮ず", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning",
-        })
-          .then(() => {
-            this.youhui = currentValue;
-            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);
-              }
-            }
-            this.lastXianPrice = this.form.xianprice;
-          })
-          .catch(() => {
-            this.youhui = oldValue;
-          });
-      }, 500);
-    }, */
     spliceData() {
-      for (var i = 0; i < this.DataList.length; i++) {
-        for (var j = i + 1; j < this.DataList.length; j++) {
+      for (let i = 0; i < this.DataList.length; i++) {
+        for (let j = i + 1; j < this.DataList.length; j++) {
           if (this.DataList[i].proId === this.DataList[j].proId) {
             this.DataList.splice(j, 1);
             j--;
@@ -910,60 +724,59 @@
     handleCurrentChecked1(data, checked, checkedNodes) {
       if (!checked) {
         this.DataList = this.DataList.filter((item) => item.proId !== data.proId);
-        this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0);
+        this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0);
         this.pics = this.TotalPrice1;
       } else {
         this.DataList.push(data);
-        this.pics = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0);
+        this.pics = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0);
         this.spliceData();
         this.TotalPrice1 = this.pics;
       }
     },
     handleDeletes(row) {
       this.DataList = this.DataList.filter((item) => item.proParentId !== row.proParentId);
-      this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0);
+      this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 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);
-            }
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          if (this.form.xianprice !== this.lastXianPrice) {
+            this.$modal
+              .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 || 0);
+                  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();
           }
-          
-          // 淇濆瓨鏁版嵁
-          return this.saveData();
-        }).catch(() => {
-          // 鐢ㄦ埛鍙栨秷鎿嶄綔锛屾仮澶嶅師鏉ョ殑鐜颁环
-          this.form.xianprice = this.lastXianPrice;
-        });
-      } else {
-        // 鐜颁环娌℃湁鍙樺寲锛岀洿鎺ヤ繚瀛�
-        this.saveData();
-      }
+        }
+      });
     },
-    // 鏂板涓�涓柟娉曞鐞嗕繚瀛橀�昏緫
     saveData() {
       this.form.limits = this.youhui;
       this.form.price = this.pics;
@@ -985,7 +798,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,
@@ -996,10 +809,12 @@
         pacRemark: this.form.pacRemark,
         detail: this.form.detail,
       };
-      
       return saveOreditTjPacNew(data).then((res) => {
+        this.$modal.msgSuccess("淇濆瓨鎴愬姛");
         this.open = false;
         this.getList();
+      }).catch(() => {
+        this.$message.error("淇濆瓨澶辫触");
       });
     },
     handleDelete(row) {
@@ -1027,11 +842,11 @@
   },
 };
 </script>
+
 <style>
 .el-tooltip__popper {
   max-width: 800px;
 }
-
 .showInline {
   overflow: hidden;
   text-overflow: ellipsis;
@@ -1040,35 +855,22 @@
   line-clamp: 2;
   -webkit-box-orient: vertical;
 }
-
 .pag {
   width: 100%;
   display: flex;
   justify-content: center;
 }
-
 .pag1 {
   width: 30%;
 }
-
 .dialog-footer {
   position: absolute;
   left: 40%;
   bottom: 2%;
 }
-
 .tab3 {
   max-height: 400px;
   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