From 18f35fe78de41a1b240758c91e05380decb48978 Mon Sep 17 00:00:00 2001
From: lkk <364857242@qq.com>
Date: 星期五, 25 七月 2025 17:39:59 +0800
Subject: [PATCH] 1

---
 src/views/hosp/project/index.vue |  275 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 224 insertions(+), 51 deletions(-)

diff --git a/src/views/hosp/project/index.vue b/src/views/hosp/project/index.vue
index d2ec25c..ec93cd3 100644
--- a/src/views/hosp/project/index.vue
+++ b/src/views/hosp/project/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" v-loading="pageLoading">
     <el-row :gutter="20">
       <el-col :span="4" :xs="24">
         <div class="head-container">
@@ -12,7 +12,7 @@
             style="margin-bottom: 15px"
           />
         </div>
-        <div class="scrollable-container">
+        <div class="scrollable-container" v-loading="loadings">
           <div class="content">
             <el-tree
               :data="deptOptions"
@@ -25,7 +25,6 @@
               highlight-current
               @node-click="handleNodeClick"
               :render-content="renderContent"
-              v-loading="loadings"
             />
           </div>
         </div>
@@ -87,6 +86,7 @@
               icon="el-icon-plus"
               size="mini"
               @click="handleUpdate1"
+              :loading="updateLoading"
               v-hasPermi="['hosp:project:add']"
               >淇敼</el-button
             >
@@ -128,6 +128,7 @@
         <el-table
           v-if="refreshTable"
           v-loading="loading"
+          style="width: 100%"
           :data="projectList"
           ref="tableRef"
           height="580"
@@ -308,6 +309,7 @@
       width="1200px"
       append-to-body
       :before-close="handleClose"
+      v-loading="loading"
       :close-on-click-modal="false"
     >
       <el-form
@@ -469,11 +471,27 @@
             ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="鏍锋湰绫诲瀷" prop="yb">
+          <el-select
+            v-model="form.yb"
+            placeholder="璇烽�夋嫨鏍锋湰绫诲瀷"
+            style="width: 200px"
+            filterable
+            clearable
+          >
+            <el-option
+              v-for="dict in dict.type.yblx"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="妫�鏌ラ儴浣�" prop="checkBw">
           <el-select
             v-model="form.checkBw"
             placeholder="璇烽�夋嫨妫�鏌ラ儴浣�"
-            style="width: 200px"
+            style="width: 260px"
             filterable
             clearable
           >
@@ -489,7 +507,7 @@
           <el-input
             v-model="form.proMetering"
             placeholder="璇疯緭鍏ュ崟浣�"
-            style="width: 260px"
+            style="width: 200px"
           />
         </el-form-item>
         <el-form-item label="鍙傝�冭寖鍥�" prop="proScope">
@@ -503,14 +521,14 @@
           <el-input
             v-model="form.sl"
             placeholder="璇疯緭鍏ユ暟閲�"
-            style="width: 200px"
+            style="width: 260px"
           />
         </el-form-item>
         <el-form-item label="缁勫悎鏍囧織" prop="sfzhfy">
           <el-select
             v-model="form.sfzhfy"
             placeholder="璇烽�夋嫨鏄惁缁勫悎鏍囧織"
-            style="width: 260px"
+            style="width: 200px"
           >
             <el-option
               v-for="dict in dict.type.sys_yes_no"
@@ -547,7 +565,7 @@
           <el-input
             v-model="form.hisXmmc"
             placeholder="his椤圭洰鍚嶇О"
-            style="width: 200px"
+            style="width: 260px"
           ></el-input>
         </el-form-item>
         <el-form-item label="his椤圭洰鍚嶇О" prop="hisXmmc" v-if="key == 'N'">
@@ -561,7 +579,7 @@
           <el-input
             v-model="form.hisXmbm"
             placeholder="璇疯緭鍏is缂栫爜"
-            style="width: 260px"
+            style="width: 200px"
           />
         </el-form-item>
         <el-form-item label="his鍗曚环" prop="hisdj">
@@ -582,14 +600,14 @@
           <el-input
             v-model="form.lisXmmc"
             placeholder="璇疯緭鍏IS椤圭洰"
-            style="width: 200px"
+            style="width: 260px"
           ></el-input>
         </el-form-item>
         <el-form-item label="LIS缂栫爜" prop="lisXmbm">
           <el-input
             v-model="form.lisXmbm"
             placeholder="璇疯緭鍏is缂栫爜"
-            style="width: 260px"
+            style="width: 200px"
           />
         </el-form-item>
         <el-form-item label="澶囨敞" prop="proRemark">
@@ -603,8 +621,36 @@
           <el-input
             v-model="form.xh"
             placeholder="璇疯緭鍏ユ帓搴�"
-            style="width: 200px"
+            style="width: 260px"
           />
+        </el-form-item>
+        <el-form-item label="鏄惁鍙備笌寮傚父" prop="sfcyyc">
+          <el-select
+            v-model="form.sfcyyc"
+            placeholder="璇烽�夋嫨鏄惁鍙備笌寮傚父"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="dict in dictTypesy"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鏄惁澶栭��" prop="proDelivery">
+          <el-select
+            v-model="form.proDelivery"
+            placeholder="璇烽�夋嫨鏄惁澶栭��"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="dict in wsTypesy"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
         </el-form-item>
       </el-form>
       <el-button
@@ -956,6 +1002,7 @@
     "sys_dict_position",
     "tj_result_type",
     "sys_yes_no",
+    "yblx",
   ],
   components: { Treeselect, IconSelect, Packagese },
   data() {
@@ -975,12 +1022,33 @@
       deptOptions: [],
       dialogTableVisible: false,
       isPriceDisabled: false,
+      pageLoading: true,
       sfxmList: [],
       deptOptionstree: [],
       defaultPropstree: {
         children: "dictSfxms",
         label: "xmmc",
       },
+      dictTypesy: [
+        {
+          value: "0",
+          label: "鏄�",
+        },
+        {
+          value: "1",
+          label: "鍚�",
+        },
+      ],
+      wsTypesy: [
+        {
+          value: "1",
+          label: "鏄�",
+        },
+        {
+          value: "0",
+          label: "鍚�",
+        },
+      ],
       xmmc: "",
       chargeId: [],
       List: false,
@@ -989,6 +1057,8 @@
       ChangeList: [],
       loading: true,
       loadings: false,
+      addLoading: false,
+      updateLoading: false,
       key: "",
       ids: [],
       single: true,
@@ -1057,6 +1127,7 @@
         proScope: "",
         proSex: "2",
         resultType: "",
+        sfcyyc: "0",
       },
       rules: {
         createTime: [
@@ -1086,11 +1157,13 @@
       this.debounceFilter(val);
     },
     treeId(newVal) {
-      console.log(newVal,8989)
+      console.log(newVal, 8989);
       if (newVal && newVal.length > 0) {
         this.$nextTick(() => {
           const lastId = newVal[newVal.length - 1] || "532";
           const node = this.findNodeById(this.deptOptions, lastId);
+          this.queryParams.proId = lastId;
+          this.getList();
           if (node) {
             this.$refs.tree1.setCurrentKey(lastId);
             const nodeElement = document.querySelector(
@@ -1119,16 +1192,18 @@
     },
   },
   created() {
-    this.getConsumables();
-    this.getDeptList();
+    // this.getConsumables();
+    // this.getDeptList();
     // this.getDeptTree().then(() => {
     //   this.precomputePinyin();
     // });
   },
   mounted() {
-    this.getDeptTree().then(() => {
-      this.precomputePinyin();
-    });
+    // this.getDeptTree().then(() => {
+    //   this.precomputePinyin();
+    // });
+    // this.precomputePinyin();
+    this.loadPage();
   },
   methods: {
     debounceFilter: debounce(function (val) {
@@ -1151,6 +1226,58 @@
       };
       traverse(this.deptOptions);
     },
+
+    async loadPage() {
+      this.pageLoading = true;
+      try {
+        await Promise.all([
+          this.getDeptTree(), // 鑾峰彇宸︿晶鏍�
+          //this.getList(),  鑾峰彇鍙充晶琛ㄦ牸
+        ]);
+      } catch (error) {
+        console.error("鍔犺浇椤甸潰鍑洪敊", error);
+      } finally {
+        this.pageLoading = false; // 涓や釜閮藉姞杞藉畬鍐嶅叧闂� loading
+      }
+    },
+
+    async getDeptTree() {
+      this.loadings = true;
+      try {
+        const response = await deptTree111();
+        this.deptOptions = response.data;
+
+        // 淇濊瘉 treeId 鏄暟缁勬牸寮�
+        this.treeId = [];
+
+        if (this.treeDate?.id) {
+          this.treeId.push(this.treeDate.id);
+        } else {
+          this.treeId.push("532");
+        }
+      } catch (error) {
+        console.error("鍔犺浇閮ㄩ棬鏍戝け璐ワ細", error);
+      } finally {
+        this.loadings = false; // loading 鐘舵�佺粨鏉�
+      }
+    },
+
+    async getList() {
+      this.loading = true;
+      let data = {
+        proName: this.queryParams.proName,
+        checkType: this.queryParams.checkType,
+        deptId: this.queryParams.deptId,
+        proId: this.queryParams.proId,
+      };
+      try {
+        const res = await getAllChildListById(data); // 鏇挎崲鎴愪綘瀹為檯鐨勬帴鍙�
+        this.projectList = res.data.list;
+      } finally {
+        this.loading = false;
+      }
+    },
+
     filterNode(value, data) {
       if (!value) return true;
       const cached = this.pinyinCache.get(data.id);
@@ -1315,7 +1442,7 @@
           this.dialogTableVisible = true;
           if (this.deptOptionstree.length != 0) {
             this.$nextTick(() => {
-              this.chargeId.push(this.deptOptionstree[0].id);
+              // this.chargeId.push(this.deptOptionstree[0].id);
             });
           }
 
@@ -1342,10 +1469,13 @@
       }
     },
     getlistSfxm() {
+      console.log(2222);
       this.loading = true;
       this.List = true;
       listSfxm(this.querycharge).then((response) => {
-        this.sfxmList = response.rows;
+        this.sfxmList = response.rows || [];
+        console.log(response.rows, 111222);
+
         response.rows.forEach((item, index) => {
           item.newID =
             (this.querycharge.pageNum - 1) * this.querycharge.pageSize +
@@ -1370,18 +1500,26 @@
       this.queryParam.id = data.id;
       this.List = false;
       this.getListByXmId();
+      this.total = 0;
     },
     getListByXmId() {
+      console.log(this.sfxmList);
       this.loading = true;
+
       getListByXmId(this.queryParam).then((response) => {
-        this.sfxmList = response.data.date;
-        response.data.date.forEach((item, index) => {
-          item.newID =
-            (this.queryParam.page - 1) * this.queryParam.pageSize + index + 1;
-        });
+        this.sfxmList = response.data.date || [];
+        if (response.data.date == null) {
+          return;
+        } else {
+          response.data.date.forEach((item, index) => {
+            item.newID =
+              (this.queryParam.page - 1) * this.queryParam.pageSize + index + 1;
+          });
+        }
+
         this.total = response.data.total;
-        this.loading = false;
       });
+      this.loading = false;
     },
     normalizer(node) {
       if (node.children && !node.children.length) {
@@ -1409,20 +1547,27 @@
       });
     },
     getDeptTree() {
-      return deptTree111().then((response) => {
-        this.deptOptions = response.data;
-        this.treeId = []
-        if(this.treeDate.id){
-          this.treeId.push( this.treeDate.id)
-        }else{
-          this.treeId.push("532")
-        }
-        
-      });
+      this.loadings = true;
+      return deptTree111()
+        .then((response) => {
+          this.deptOptions = response.data;
+          this.treeId = [];
+          if (this.treeDate.id) {
+            this.treeId.push(this.treeDate.id);
+          } else {
+            this.treeId.push("532");
+          }
+        })
+        .catch((err) => {
+          console.error("鍔犺浇閮ㄩ棬鏍戝け璐ワ細", err);
+        })
+        .finally(() => {
+          this.loadings = false; // 鏃犺鎴愬姛鎴栧け璐ワ紝缁撴潫鍔犺浇
+        });
     },
     handleNodeClick(date) {
       this.treeDate = date;
-      console.log(this.treeId,2222);
+      this.xiugaiList = {};
       this.xiugais = date.qf === "0";
       let proId = date.id;
       getInfoByProId(proId).then((response) => {
@@ -1577,20 +1722,27 @@
       }
     },
     handleUpdate1() {
+      this.updateLoading = true;
+      this.form = {};
       this.form = this.xiugaiList;
       this.form.proStatus = this.form.proStatus.toString();
+      this.form.sfcyyc = this.form.sfcyyc.toString();
       this.proParent = true;
       this.isPriceDisabled = true;
-      getlist().then((response) => {
-        if (response.code == 200) {
-          this.loading = false;
-          this.projectOptions = [];
-          const project = { proId: 0, proName: "涓荤被鐩�", children: [] };
-          project.children = this.handleTree(response.data.list, "proId");
-          this.key = response.data.key;
-          this.projectOptions.push(project);
-        }
-      });
+      getlist()
+        .then((response) => {
+          if (response.code == 200) {
+            this.loading = false;
+            this.projectOptions = [];
+            const project = { proId: 0, proName: "涓荤被鐩�", children: [] };
+            project.children = this.handleTree(response.data.list, "proId");
+            this.key = response.data.key;
+            this.projectOptions.push(project);
+          }
+        })
+        .finally(() => {
+          this.updateLoading = false;
+        });
       this.open = true;
     },
     handleUpdate(row) {
@@ -1604,6 +1756,7 @@
         this.showPrise = this.form.proParentId === "0";
         this.showRentPrise = !this.showPrise;
         this.form.proStatus = this.form.proStatus.toString();
+        this.form.sfcyyc = this.form.sfcyyc.toString();
         this.form.consumablesList = response.data.consumablesList;
         this.form.tjStandardList = response.data.tjStandardList;
         if (this.form.tjStandardList) {
@@ -1628,7 +1781,7 @@
         }
         getlist().then((response) => {
           if (response.code == 200) {
-            this.loading = false;
+            // this.loading = false;
             this.projectOptions = [];
             const project = { proId: 0, proName: "涓荤被鐩�", children: [] };
             project.children = this.handleTree(response.data.list, "proId");
@@ -1636,6 +1789,7 @@
             this.projectOptions.push(project);
           }
         });
+        // this.loadPage();
         this.open = true;
         this.title = "浣撴椤圭洰淇℃伅缁存姢";
       });
@@ -1655,6 +1809,7 @@
     },
     submitForm() {
       this.noclick = true;
+      this.pageLoading = true;
       this.$refs["form"].validate((valid) => {
         if (valid) {
           const isUpdate = this.form.proId != null;
@@ -1681,9 +1836,13 @@
           this.form.lisXmbm = this.form.lisXmbm;
           if (this.key === "N") {
             this.processSubmission(isUpdate, false);
+            this.open = false;
+            // this.pageLoading = false;
           } else if (this.key === "Y") {
             this.form.sfxmId = this.sfxmId;
             this.processSubmission(isUpdate, true);
+            this.open = false;
+            // this.pageLoading = false;
           }
         }
       });
@@ -1716,15 +1875,29 @@
         }
       }
     },
-    handleSuccess(isY) {
+    /* handleSuccess(isY) {
       this.cancel();
-      this.getList();
+      // this.getList();
       if (this.proParent || isY) {
         this.getDeptTree().then(() => {
           this.precomputePinyin();
         });
       }
-      console.log(this.treeId)
+      console.log(this.treeId);
+    }, */
+    async handleSuccess(isY) {
+      this.cancel();
+
+      if (this.proParent || isY) {
+        // 绛夊緟宸︿晶鏍戝姞杞藉拰鎷奸煶澶勭悊
+        await this.getDeptTree();
+        this.precomputePinyin();
+      }
+
+      // 绛夊緟鍙充晶琛ㄦ牸鍒锋柊
+      await this.getList();
+
+      this.pageLoading = false; // 鉁� 缁熶竴鍔犺浇鐘舵�佹帶鍒�
     },
     submit() {
       this.ChangeList.forEach((item) => {

--
Gitblit v1.8.0