From 5da536668e047dbaefbb79731ab2cacfdf70dc56 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期二, 22 七月 2025 17:36:38 +0800
Subject: [PATCH] 1、提交配煤计算器 解除煤种限制 2、增加销售出库的导出功能 3、库存管理正式库的导出功能 4、文档管理优化 5、优化设备管理模块

---
 src/views/warehouseManagement/index.vue                             |  723 ++++++++++++++++++++++----------
 src/views/calculator/index.vue                                      |    6 
 src/views/equipment/management/index.vue                            |   14 
 src/views/salesOutbound/index.vue                                   |   27 +
 src/views/equipment/management/mould/equipmentRequisitionDialog.vue |   79 ++
 src/views/salesOutbound/components/formDia.vue                      |   12 
 src/views/equipment/management/mould/managementDialog.vue           |   11 
 src/views/archiveManagement/index.vue                               |  393 +++++++++++++++--
 8 files changed, 952 insertions(+), 313 deletions(-)

diff --git a/src/views/archiveManagement/index.vue b/src/views/archiveManagement/index.vue
index 81d3a18..8db8de6 100644
--- a/src/views/archiveManagement/index.vue
+++ b/src/views/archiveManagement/index.vue
@@ -34,13 +34,21 @@
             :expand-on-click-node="false"
             :filter-node-method="filterNode"
             :props="props"
+            :lazy="false"
+            :load="undefined"
+            :render-after-expand="true"
+            :auto-expand-parent="true"
+            :indent="20"
             class="custom-tree"
             node-key="id"
             @node-click="handleNodeClick"
+            @node-expand="handleNodeExpand"
           >
             <template #default="{ node, data }">
               <div
                 class="tree-node-content"
+                :data-temp-id="data._tempId"
+                :data-node-id="data.id"
                 @dblclick="headerDbClick(node, data)"
               >
                 <div class="node-icon">
@@ -61,7 +69,7 @@
                   }}</span>
                   <el-input
                     v-else
-                    :ref="(el) => setInputRef(el, data)"
+                    :ref="(el) => setInputRef(data.id || data._tempId, el)"
                     v-model="newName"
                     autofocus
                     class="tree-input"
@@ -69,6 +77,7 @@
                     size="small"
                     @blur="(event) => handleInputBlur(event, data, node)"
                     @keyup.enter="(event) => handleInputBlur(event, data, node)"
+                    @keyup.esc="() => cancelEdit(data, node)"
                   />
                 </div>
                 <div v-show="!data.isEdit" class="node-actions">
@@ -76,7 +85,8 @@
                     icon="Plus"
                     link
                     size="small"
-                    title="鏂板瀛愯妭鐐�"
+                    :title="getNodeDepth(data) >= 7 ? '宸茶揪鍒版渶澶у祵濂楀眰绾э紙7灞傦級' : '鏂板瀛愯妭鐐�'"
+                    :disabled="getNodeDepth(data) >= 7"
                     @click.stop="append(data)"
                   ></el-button>
                   <el-button
@@ -165,7 +175,7 @@
   </el-card>
 </template>
 <script setup>
-import { nextTick, onMounted, reactive, ref } from "vue";
+import { computed, nextTick, onMounted, reactive, ref } from "vue";
 import ETable from "@/components/Table/ETable.vue";
 import {
   ElButton,
@@ -226,6 +236,41 @@
   label: "name",
   children: "children",
   isLeaf: "leaf",
+};
+
+// ===== 璁$畻灞炴�� =====
+// 璁$畻鎬昏妭鐐规暟
+const totalNodeCount = computed(() => {
+  const countNodes = (nodes) => {
+    let count = 0;
+    for (const node of nodes || []) {
+      count += 1;
+      if (node.children) {
+        count += countNodes(node.children);
+      }
+    }
+    return count;
+  };
+  return countNodes(treeData.value);
+});
+
+// 妫�鏌ユ槸鍚︿负澶ч噺鑺傜偣锛堣秴杩�1000涓妭鐐规椂鎻愮ず鎬ц兘浼樺寲锛�
+const isLargeTree = computed(() => totalNodeCount.value > 1000);
+
+// 鑾峰彇鑺傜偣娣卞害鐨勫嚱鏁�
+const getNodeDepth = (nodeData) => {
+  if (!nodeData || !nodeData.id) return 0;
+  
+  let depth = 1;
+  const node = treeRef.value?.getNode(nodeData.id);
+  let parentNode = node?.parent;
+  
+  while (parentNode && parentNode.data && parentNode.data.id) {
+    depth++;
+    parentNode = parentNode.parent;
+  }
+  
+  return depth;
 };
 
 // ===== 宸ュ叿鍑芥暟 =====
@@ -337,6 +382,20 @@
   getArchiveListData();
 };
 
+// 鑺傜偣灞曞紑浜嬩欢澶勭悊
+const handleNodeExpand = (data, node, instance) => {
+  // 灞曞紑鍚庣◢寰欢杩燂紝纭繚瀛愯妭鐐规覆鏌撳畬鎴�
+  setTimeout(() => {
+    // 濡傛灉鏈夋柊娣诲姞鐨勭紪杈戠姸鎬佽妭鐐癸紝鑱氱劍鍒板畠
+    if (data.children && data.children.length > 0) {
+      const editingChild = data.children.find(child => child.isEdit && child._tempId);
+      if (editingChild) {
+        focusInput(editingChild._tempId, 200);
+      }
+    }
+  }, 100);
+};
+
 const handlePageChange = (pagination) => {
   try {
     const { page, limit } = pagination;
@@ -427,22 +486,62 @@
   }
 };
 // ===== 鏍戣妭鐐圭紪杈戝嚱鏁� =====
-const setInputRef = (el, data) => {
-  if (el) {
-    inputRefs.value.set(data.id || data, el);
+const setInputRef = (key, el) => {
+  if (el && key) {
+    inputRefs.value.set(key, el);
   }
 };
 
 const headerDbClick = (node, data) => {
-  data.isEdit = true;
-  newName.value = data.name;
-  nextTick(() => {
-    const inputEl = inputRefs.value.get(data.id || data);
-    if (inputEl) {
-      inputEl.focus();
-      inputEl.select();
+  try {
+    data.isEdit = true;
+    newName.value = data.name;
+    
+    nextTick(() => {
+      const key = data._tempId || data.id;
+      if (key) {
+        focusInput(key, 50);
+      }
+    });
+  } catch (error) {
+    console.error('杩涘叆缂栬緫妯″紡澶辫触:', error);
+    ElMessage.error('杩涘叆缂栬緫妯″紡澶辫触');
+  }
+};
+
+// 鍙栨秷缂栬緫鍔熻兘
+const cancelEdit = (data, node) => {
+  try {
+    data.isEdit = false;
+    
+    // 濡傛灉鏄柊鍒涘缓鐨勪复鏃惰妭鐐癸紝鍒犻櫎瀹�
+    if (data._tempId && !data.id) {
+      if (node.parent) {
+        const parent = node.parent.data;
+        const index = parent.children?.indexOf(data);
+        if (index > -1) {
+          parent.children.splice(index, 1);
+        }
+      } else {
+        // 鏍硅妭鐐�
+        const index = treeData.value.indexOf(data);
+        if (index > -1) {
+          treeData.value.splice(index, 1);
+        }
+      }
+      
+      // 娓呯悊杈撳叆妗嗗紩鐢�
+      const key = data._tempId;
+      if (inputRefs.value.has(key)) {
+        inputRefs.value.delete(key);
+      }
     }
-  });
+    
+    // 閲嶇疆鍚嶇О
+    newName.value = "";
+  } catch (error) {
+    console.error('鍙栨秷缂栬緫澶辫触:', error);
+  }
 };
 
 const expandParentNodes = (node) => {
@@ -460,11 +559,21 @@
     comeTreeData.isEdit = false;
     const newValue = newName.value.trim();
 
-    if (comeTreeData.name === newValue) return;
-
+    // 濡傛灉鍚嶇О涓虹┖锛屽鐞嗙┖鍚嶇О鎯呭喌
     if (!newValue) {
-      newName.value = comeTreeData.name || "鏂拌妭鐐�";
+      // 濡傛灉鏄柊鍒涘缓鐨勪复鏃惰妭鐐癸紝鍒犻櫎瀹�
+      if (comeTreeData._tempId && !comeTreeData.id) {
+        cancelEdit(comeTreeData, node);
+      } else {
+        // 宸插瓨鍦ㄧ殑鑺傜偣锛屾仮澶嶅師鍚嶇О
+        newName.value = comeTreeData.name || "鏂拌妭鐐�";
+      }
       ElMessage.warning("鑺傜偣鍚嶇О涓嶈兘涓虹┖");
+      return;
+    }
+
+    // 濡傛灉鍚嶇О娌℃湁鏀瑰彉锛岀洿鎺ヨ繑鍥�
+    if (comeTreeData.name === newValue) {
       return;
     }
 
@@ -480,6 +589,20 @@
       comeTreeData.name = newValue;
       if (!comeTreeData.id && result.data) {
         comeTreeData.id = result.data.id || result.data;
+        // 娓呯悊涓存椂ID
+        if (comeTreeData._tempId) {
+          const tempKey = comeTreeData._tempId;
+          delete comeTreeData._tempId;
+          
+          // 鏇存柊寮曠敤鏄犲皠
+          if (inputRefs.value.has(tempKey)) {
+            const inputEl = inputRefs.value.get(tempKey);
+            inputRefs.value.delete(tempKey);
+            if (comeTreeData.id && inputEl) {
+              inputRefs.value.set(comeTreeData.id, inputEl);
+            }
+          }
+        }
       }
       showSuccess("淇濆瓨鎴愬姛");
 
@@ -490,18 +613,42 @@
         if (currentNodeId && treeRef.value) {
           const targetNode = treeRef.value.getNode(currentNodeId);
           if (targetNode) {
+            // 灞曞紑褰撳墠鑺傜偣
             targetNode.expanded = true;
+            
+            // 灞曞紑鎵�鏈夌埗鑺傜偣
             expandParentNodes(targetNode);
+            
+            // 婊氬姩鍒拌妭鐐逛綅缃�
+            setTimeout(() => {
+              const nodeElement = document.querySelector(`[data-node-id="${currentNodeId}"]`);
+              if (nodeElement) {
+                nodeElement.scrollIntoView({
+                  behavior: 'smooth',
+                  block: 'center'
+                });
+              }
+            }, 300);
           }
         }
       });
     } else {
-      comeTreeData.name = comeTreeData.name || "鏂拌妭鐐�";
+      // 淇濆瓨澶辫触锛屾仮澶嶅師鍚嶇О鎴栧垹闄や复鏃惰妭鐐�
+      if (comeTreeData._tempId && !comeTreeData.id) {
+        cancelEdit(comeTreeData, node);
+      } else {
+        comeTreeData.name = comeTreeData.name || "鏂拌妭鐐�";
+      }
       ElMessage.error("淇濆瓨澶辫触: " + (result.msg || "鏈煡閿欒"));
     }
   } catch (error) {
     handleError(error, "淇濆瓨鑺傜偣澶辫触");
-    comeTreeData.name = comeTreeData.name || "鏂拌妭鐐�";
+    // 鍑洪敊鏃跺鐞嗕复鏃惰妭鐐�
+    if (comeTreeData._tempId && !comeTreeData.id) {
+      cancelEdit(comeTreeData, node);
+    } else {
+      comeTreeData.name = comeTreeData.name || "鏂拌妭鐐�";
+    }
   }
 };
 
@@ -509,51 +656,167 @@
 const createNewNode = (name, isEdit = true) => ({
   name,
   isEdit,
+  _tempId: Date.now() + Math.random(), // 娣诲姞涓存椂ID
 });
 
-const focusInput = (nodeData, delay = 50) => {
+const focusInput = (nodeKey, delay = 100) => {
   setTimeout(() => {
-    const inputEl = inputRefs.value.get(nodeData.id || nodeData);
+    const inputEl = inputRefs.value.get(nodeKey);
     if (inputEl) {
-      inputEl.focus();
-      inputEl.select();
-      inputEl.$el?.scrollIntoView?.({
-        behavior: "smooth",
-        block: "nearest",
-      });
+      try {
+        // 鍏堟粴鍔ㄥ埌鍙鍖哄煙
+        inputEl.$el?.scrollIntoView?.({
+          behavior: "smooth",
+          block: "center",
+        });
+        
+        // 鑱氱劍骞堕�変腑鎵�鏈夋枃鏈紝纭繚鍙互鐩存帴缂栬緫
+        setTimeout(() => {
+          inputEl.focus();
+          inputEl.select();
+          
+          // 纭繚鍏夋爣鍦ㄨ緭鍏ユ鏈熬锛堝鏋渟elect澶辫触鐨勮瘽锛�
+          const inputElement = inputEl.ref || inputEl.input || inputEl.$el?.querySelector('input');
+          if (inputElement) {
+            inputElement.setSelectionRange(0, inputElement.value.length);
+            
+            // 纭繚杈撳叆妗嗗湪瑙嗗彛涓ぎ
+            setTimeout(() => {
+              inputElement.scrollIntoView({
+                behavior: 'smooth',
+                block: 'center'
+              });
+            }, 100);
+          }
+        }, 100);
+      } catch (error) {
+        console.warn('鑱氱劍杈撳叆妗嗗け璐�:', error);
+        // 澶囩敤鏂规锛氱洿鎺ヨ仛鐒�
+        try {
+          inputEl.focus();
+          // 灏濊瘯閫変腑鏂囨湰
+          setTimeout(() => {
+            const inputElement = inputEl.ref || inputEl.input || inputEl.$el?.querySelector('input');
+            if (inputElement) {
+              inputElement.select();
+            }
+          }, 200);
+        } catch (e) {
+          console.warn('澶囩敤鑱氱劍鏂规涔熷け璐�:', e);
+        }
+      }
+    } else {
+      console.warn('鏈壘鍒拌緭鍏ユ鍏冪礌锛宬ey:', nodeKey);
     }
   }, delay);
 };
 
 const append = async (data) => {
-  if (data === "") {
-    // 鏂板鏍硅妭鐐�
-    const newNode = createNewNode("鏂拌妭鐐�");
-    treeData.value.push(newNode);
-    newName.value = "鏂拌妭鐐�";
+  try {
+    // 妫�鏌ュ祵濂楀眰绾ч檺鍒�
+    const getNodeDepth = (nodeData, currentDepth = 1) => {
+      if (!nodeData || data === "") return 0; // 鏍硅妭鐐逛笉绠楀眰绾�
+      
+      let depth = currentDepth;
+      let current = nodeData;
+      
+      // 閫氳繃鏍戠粍浠惰幏鍙栫埗鑺傜偣鏉ヨ绠楁繁搴�
+      if (current.id) {
+        const node = treeRef.value?.getNode(current.id);
+        let parentNode = node?.parent;
+        
+        while (parentNode && parentNode.data && parentNode.data.id) {
+          depth++;
+          parentNode = parentNode.parent;
+        }
+      }
+      
+      return depth;
+    };
 
-    nextTick(() => focusInput(newNode));
-  } else {
-    const hasChildren = data.children;
-    const nodeKey = data.id || data;
-    const node = treeRef.value?.getNode(nodeKey);
-    const isExpanded = node?.expanded;
-
-    // 濡傛灉鏈夊瓙绾т笖鏈睍寮�锛屽厛灞曞紑鑺傜偣
-    if (hasChildren && !isExpanded && treeRef.value?.store?.nodesMap[nodeKey]) {
-      treeRef.value.store.nodesMap[nodeKey].expanded = true;
+    const currentDepth = getNodeDepth(data);
+    
+    // 闄愬埗鏈�澶�7灞傚祵濂�
+    if (currentDepth >= 7) {
+      ElMessage.warning('鏈�澶氬彧鑳藉祵濂�7灞傝妭鐐癸紝褰撳墠宸茶揪鍒版渶澶у眰绾ч檺鍒�');
+      return;
     }
 
-    const newNode = createNewNode("鏂板瓙鑺傜偣");
-
-    if (!data.children) {
-      data.children = [];
+    // 鍦ㄥぇ閲忚妭鐐规椂鎻愮ず鎬ц兘娉ㄦ剰浜嬮」
+    if (isLargeTree.value && totalNodeCount.value > 2000) {
+      const confirmed = await ElMessageBox.confirm(
+        `褰撳墠鏍戠粨鏋勫寘鍚� ${totalNodeCount.value} 涓妭鐐癸紝鑺傜偣杈冨鍙兘褰卞搷鎬ц兘銆傚缓璁�冭檻鍒嗗眰绠$悊銆傛槸鍚︾户缁坊鍔狅紵`,
+        '鎬ц兘鎻愮ず',
+        {
+          confirmButtonText: '缁х画娣诲姞',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning',
+        }
+      ).catch(() => false);
+      
+      if (!confirmed) return;
     }
-    data.children.push(newNode);
-    newName.value = "鏂板瓙鑺傜偣";
 
-    const delay = hasChildren && !isExpanded ? 200 : 50;
-    nextTick(() => focusInput(newNode, delay));
+    if (data === "") {
+      // 鏂板鏍硅妭鐐�
+      const newNode = createNewNode("鏂拌妭鐐�");
+      treeData.value.push(newNode);
+      newName.value = "鏂拌妭鐐�";
+
+      await nextTick();
+      focusInput(newNode._tempId, 200);
+    } else {
+      const hasChildren = data.children && data.children.length > 0;
+      const nodeKey = data.id || data;
+      const node = treeRef.value?.getNode(nodeKey);
+
+      // 鍒涘缓鏂板瓙鑺傜偣
+      const newNode = createNewNode("鏂板瓙鑺傜偣");
+
+      if (!data.children) {
+        data.children = [];
+      }
+      data.children.push(newNode);
+      newName.value = "鏂板瓙鑺傜偣";
+
+      // 寮哄埗鏇存柊鏍戠粨鏋�
+      await nextTick();
+      
+      // 纭繚鐖惰妭鐐瑰睍寮�浠ユ樉绀烘柊鑺傜偣
+      if (node) {
+        node.expanded = true;
+        
+        // 濡傛灉鏄涓�娆℃坊鍔犲瓙鑺傜偣锛岀瓑寰呭睍寮�鍔ㄧ敾骞剁‘淇濆彲瑙�
+        if (!hasChildren) {
+          await new Promise(resolve => setTimeout(resolve, 300));
+          
+          // 灞曞紑鍚庢粴鍔ㄥ埌鏂拌妭鐐逛綅缃�
+          setTimeout(() => {
+            const newNodeElement = document.querySelector(`[data-temp-id="${newNode._tempId}"]`);
+            if (newNodeElement) {
+              newNodeElement.scrollIntoView({
+                behavior: 'smooth',
+                block: 'center'
+              });
+            }
+          }, 100);
+        }
+        
+        // 灞曞紑鎵�鏈夌埗鑺傜偣纭繚瀹屽叏鍙
+        let parentNode = node.parent;
+        while (parentNode && parentNode.data && parentNode.data.id) {
+          parentNode.expanded = true;
+          parentNode = parentNode.parent;
+        }
+      }
+      
+      // 鑱氱劍鍒版柊鍒涘缓鐨勮緭鍏ユ
+      const delay = hasChildren ? 150 : 500; // 濡傛灉涔嬪墠娌℃湁瀛愯妭鐐癸紝寤惰繜鏇撮暱鏃堕棿绛夊睍寮�
+      focusInput(newNode._tempId, delay);
+    }
+  } catch (error) {
+    console.error('鏂板鑺傜偣澶辫触:', error);
+    ElMessage.error('鏂板鑺傜偣澶辫触锛岃閲嶈瘯');
   }
 };
 
@@ -618,18 +881,27 @@
   border-radius: 8px;
   background: #fff;
   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+  max-height: calc(100vh - 240px); // 闄愬埗鏈�澶ч珮搴︼紝鍚敤婊氬姩
 
   .custom-tree {
     padding: 8px;
     background: transparent;
+    // 浣跨敤GPU鍔犻�熸彁鍗囨粴鍔ㄦ�ц兘
+    transform: translateZ(0);
+    will-change: scroll-position;
 
     :deep(.el-tree-node) {
+      // 鍑忓皯涓嶅繀瑕佺殑閲嶇粯
+      contain: layout style;
+      
       .el-tree-node__content {
         height: 36px;
         padding: 0 8px;
         border-radius: 6px;
         margin: 2px 0;
         transition: all 0.2s ease;
+        // 浼樺寲娓叉煋鎬ц兘
+        will-change: background-color;
 
         &:hover {
           background-color: #f0f9ff;
@@ -709,13 +981,19 @@
       color: #909399;
       min-height: auto;
 
-      &:hover {
+      &:hover:not(:disabled) {
         color: #1890ff;
         background-color: #f0f9ff;
       }
 
-      &.el-button--text:hover {
+      &.el-button--text:hover:not(:disabled) {
         background-color: #f0f9ff;
+      }
+      
+      &:disabled {
+        color: #c0c4cc;
+        cursor: not-allowed;
+        background-color: transparent;
       }
     }
   }
@@ -731,11 +1009,13 @@
 
   :deep(.el-input__wrapper) {
     border-radius: 4px;
-    border: 1px solid #d9d9d9;
+    border: 1px solid #40a9ff;
     transition: all 0.2s ease;
+    box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.1);
 
     &:hover {
-      border-color: #40a9ff;
+      border-color: #1890ff;
+      box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.15);
     }
 
     &.is-focus {
@@ -748,10 +1028,15 @@
     padding: 4px 8px;
     font-size: 14px;
     color: #303133;
+    background-color: #fff;
 
     &::placeholder {
       color: #bfbfbf;
     }
+    
+    &:focus {
+      background-color: #f8fcff;
+    }
   }
 }
 
diff --git a/src/views/calculator/index.vue b/src/views/calculator/index.vue
index 814e57f..e09e4c9 100644
--- a/src/views/calculator/index.vue
+++ b/src/views/calculator/index.vue
@@ -826,12 +826,6 @@
   const createCoalExists = coalInfoList.value.some(
     item => item.key === result.value.optimal.props.coalId
   );
-
-  if (!createCoalExists) {
-    ElMessage.warning("鐢熸垚鐓ょ鏄湭鐭ョ叅绉嶏紝鏃犳硶娣诲姞鑷冲緟鍏ュ簱");
-    return;
-  }
-
   // 鍑嗗鏁版嵁
   const optimalData = result.value.optimal;
   optimalData.props.totalTonnage = formInline.value.totalTonnage;
diff --git a/src/views/equipment/management/index.vue b/src/views/equipment/management/index.vue
index 97ca889..0654e82 100644
--- a/src/views/equipment/management/index.vue
+++ b/src/views/equipment/management/index.vue
@@ -184,6 +184,8 @@
     columns: [
       { prop: "equipmentNo", label: "璁惧缂栧彿", minWidth: 100 },
       { prop: "equipmentName", label: "璁惧鍚嶇О", minWidth: 100 },
+      { prop: "consumables", label: "鑰楁潗",
+        formatter: (row) => (row.consumables ? "鏄�" : "鍚�"), minWidth: 100 },
       { prop: "quantity", label: "鎬绘暟閲�", minWidth: 100 },
       { prop: "usedNo", label: "宸蹭娇鐢ㄦ暟閲�", minWidth: 100 },
       { prop: "specification", label: "瑙勬牸鍨嬪彿", minWidth: 100 },
@@ -206,7 +208,7 @@
         prop: "equipmentStatus",
         label: "浣跨敤鐘舵��",
         minWidth: 100,
-        formatter: (row) => (row.equipmentStatus == "0" ? "浣跨敤涓�" : "宸插綊杩�"),
+        formatter: (row) => (row.equipmentStatus == 1 ? "浣跨敤涓�" : "宸插綊杩�"),
       },
       { prop: "usageStartTime", label: "浣跨敤寮�濮嬫椂闂�", minWidth: 100 },
       { prop: "usageEndTime", label: "浣跨敤缁撴潫鏃堕棿", minWidth: 100 },
@@ -267,7 +269,9 @@
 };
 
 const resetState = () => {
-  form.value = {};
+  form.value = {
+    consumables: false,
+  };
   addOrEdit.value = "add";
   loading.value = true;
   tableData.value = [];
@@ -290,7 +294,9 @@
 
 const handleAdd = () => {
   addOrEdit.value = "add";
-  form.value = {};
+  form.value = {
+    consumables: false,
+  };
   title.value = `鏂板${currentTabConfig.value.label}`;
   // 閫氱敤鐨�
   copyForm.value = {};
@@ -366,7 +372,7 @@
 // 璁惧棰嗙敤寮圭獥鎻愪氦澶勭悊
 const onEquipmentRequisitionSubmit = (formData) => {
   console.log("璁惧棰嗙敤鎻愪氦鏁版嵁锛�", formData);
-  if (formData.equipmentStatus == "1") {
+  if (formData.equipmentStatus == 1) {
     ElMessage.success("璁惧褰掕繕鎴愬姛");
   } else {
     ElMessage.success("璁惧棰嗙敤鎴愬姛");
diff --git a/src/views/equipment/management/mould/equipmentRequisitionDialog.vue b/src/views/equipment/management/mould/equipmentRequisitionDialog.vue
index 82b6f85..8438624 100644
--- a/src/views/equipment/management/mould/equipmentRequisitionDialog.vue
+++ b/src/views/equipment/management/mould/equipmentRequisitionDialog.vue
@@ -7,7 +7,12 @@
   >
     <el-form :model="form" :rules="rules" ref="formRef" label-width="150px">
       <el-form-item label="棰嗙敤浜�" prop="userId">
-        <el-select v-model="form.userId" placeholder="璇烽�夋嫨" :disabled="isViewMode">
+        <el-select
+          v-model="form.userId"
+          placeholder="璇烽�夋嫨"
+          :disabled="isViewMode"
+          @change="getEquipment"
+        >
           <el-option
             v-for="item in userList"
             :key="item.userId"
@@ -17,7 +22,11 @@
         </el-select>
       </el-form-item>
       <el-form-item label="璁惧鍚嶇О" prop="equipmentId">
-        <el-select v-model="form.equipmentId" placeholder="璇烽�夋嫨" :disabled="isViewMode">
+        <el-select
+          v-model="form.equipmentId"
+          placeholder="璇烽�夋嫨"
+          :disabled="isViewMode"
+        >
           <el-option
             v-for="item in equipmentList"
             :key="item.id"
@@ -52,9 +61,14 @@
       </el-form-item>
       <el-form-item label="浣跨敤鐘舵��" prop="equipmentStatus">
         <!-- 缂栬緫鐨勬椂鍊欒嚜鍔ㄥ尮閰� -->
-        <el-select v-model="form.equipmentStatus" placeholder="璇烽�夋嫨" :disabled="isViewMode">
-          <el-option label="浣跨敤涓�" value="0" />
-          <el-option label="宸插綊杩�" value="1" />
+        <el-select
+          v-model="form.equipmentStatus"
+          placeholder="璇烽�夋嫨"
+          :disabled="isViewMode"
+          default-first-option
+        >
+          <el-option label="浣跨敤涓�" :value="1" />
+          <el-option label="宸插綊杩�" :value="2" :disabled="props.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="浣跨敤寮�濮嬫椂闂�" prop="usageStartTime">
@@ -87,7 +101,9 @@
     </el-form>
     <template #footer>
       <el-button @click="handleClose">鍙栨秷</el-button>
-      <el-button type="primary" @click="handleSubmit" v-if="!isViewMode">纭畾</el-button>
+      <el-button type="primary" @click="handleSubmit" v-if="!isViewMode"
+        >纭畾</el-button
+      >
     </template>
   </el-dialog>
 </template>
@@ -100,7 +116,6 @@
 
 import useUserStore from "@/store/modules/user";
 
-onMounted(() => {});
 const userStore = useUserStore();
 let userList = ref([]);
 userStore.getUserList().then((res) => {
@@ -108,9 +123,17 @@
 });
 // 鑾峰彇璁惧鍒楄〃
 const equipmentList = ref([]);
-getEquipmentList().then((res) => {
-  equipmentList.value = res.data;
-});
+// 鑾峰彇鏈�鏂版暟鎹�
+const getEquipment = async () => {
+  try {
+    await getEquipmentList().then((res) => {
+      equipmentList.value = res.data;
+    });
+  } catch (error) {
+    ElMessage.error("鑾峰彇璁惧鍒楄〃澶辫触");
+  }
+};
+
 const props = defineProps({
   modelValue: Boolean,
   formData: {
@@ -129,10 +152,10 @@
     type: String,
     default: "",
   },
-  equipmentStatus:{
-    type: String,
-    default: "0"
-  }
+  equipmentStatus: {
+    type: [Number, String], // 鍏佽鏁板瓧鎴栧瓧绗︿覆
+    default: 1,
+  },
 });
 const maxQuantity = computed(() => {
   if (!form.value.equipmentId) return 0;
@@ -148,7 +171,12 @@
   get: () => props.modelValue,
   set: (v) => emit("update:modelValue", v),
 });
-const isViewMode = computed(() => props.addOrEdit === "view" || props.addOrEdit === "viewRow" || props.equipmentStatus ==="1");
+const isViewMode = computed(
+  () =>
+    props.addOrEdit === "view" ||
+    props.addOrEdit === "viewRow" ||
+    Number(props.equipmentStatus) === 2
+);
 
 const isEdit = computed(() => !!props.formData?.id);
 const formRef = ref();
@@ -158,19 +186,32 @@
   userId: "",
   equipmentId: "",
   usageQuantity: 1,
-  equipmentStatus: 1,
+  equipmentStatus: 1, // 榛樿浣跨敤涓�
   usageStartTime: "",
-  remarks: ""
+  remarks: "",
 };
 const form = ref({ ...defaultForm });
+
+// 纭繚鍒濆鍖栨椂浣跨敤鐘舵�佹湁榛樿鍊�
+onMounted(() => {
+  if (
+    form.value.equipmentStatus === undefined ||
+    form.value.equipmentStatus === null
+  ) {
+    console.log(form.value.equipmentStatus);
+    form.value.equipmentStatus = 1;
+  }
+  getEquipment();
+});
 
 watch(
   () => props.formData,
   (val) => {
     if (val && Object.keys(val).length > 0) {
-      form.value = { ...defaultForm, ...val };
+      // 缂栬緫妯″紡锛岀洿鎺ヨ祴鍊硷紝涓嶄娇鐢ㄩ粯璁ゅ�煎悎骞�
+      form.value = { ...val };
     } else {
-      // 鏂板缓鏃堕噸缃负鍒濆鍊硷紝闃叉鑴忔暟鎹�
+      // 鏂板妯″紡锛屼娇鐢ㄩ粯璁ゅ��
       form.value = { ...defaultForm };
     }
   },
diff --git a/src/views/equipment/management/mould/managementDialog.vue b/src/views/equipment/management/mould/managementDialog.vue
index 80b22f1..8f72187 100644
--- a/src/views/equipment/management/mould/managementDialog.vue
+++ b/src/views/equipment/management/mould/managementDialog.vue
@@ -36,6 +36,14 @@
             </el-form-item>
           </el-col>
           <el-col :span="11">
+            <el-form-item label="鏄惁涓鸿�楁潗" prop="consumables">
+              <el-select v-model="formData.consumables" placeholder="璇烽�夋嫨鏄惁涓鸿�楁潗绫诲瀷" :disabled="isViewMode">
+                <el-option label="鏄�" :value="true" />
+                <el-option label="鍚�" :value="false" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
             <el-form-item label="鏁伴噺" prop="quantity">
               <el-input
                 v-model="formData.quantity"
@@ -225,6 +233,9 @@
   equipmentName: [
     { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" },
   ],
+  consumables: [
+    { required: true, message: "璇烽�夋嫨鏄惁涓鸿�楁潗", trigger: "change" },
+  ],
 });
 </script>
 <style lang="scss" scoped>
diff --git a/src/views/salesOutbound/components/formDia.vue b/src/views/salesOutbound/components/formDia.vue
index 9797549..e990bc8 100644
--- a/src/views/salesOutbound/components/formDia.vue
+++ b/src/views/salesOutbound/components/formDia.vue
@@ -110,6 +110,16 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="娣诲姞鑷冲緟琛ュ簱" prop="isPendingRestock">
+              <el-select v-model="form.isPendingRestock" placeholder="">
+                <el-option label="鏄�" :value="true" />
+                <el-option label="鍚�" :value="false" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -149,6 +159,7 @@
     netProfit: '',
     inventoryQuantity: '',
     priceIncludingTax: '',
+    isPendingRestock: false
   },
   rules: {
     saleDate: [{ required: true, message: "璇烽�夋嫨鏃ユ湡", trigger: "change" },],
@@ -165,6 +176,7 @@
 		netProfit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" },],
 		inventoryQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" },],
 		priceIncludingTax: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" },],
+    isPendingRestock: [{ required: true, message: "璇烽�夋嫨鏄惁娣诲姞鑷冲緟琛ュ簱", trigger: "change" },],
   }
 })
 
diff --git a/src/views/salesOutbound/index.vue b/src/views/salesOutbound/index.vue
index b9d38ce..8704650 100644
--- a/src/views/salesOutbound/index.vue
+++ b/src/views/salesOutbound/index.vue
@@ -39,7 +39,7 @@
       <el-space>
         <el-button type="primary" :icon="Plus" @click="openDia(undefined, 'add')">鏂板缓</el-button>
         <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
-        <!-- <el-button type="info" plain :icon="Download" @click="handleExport">瀵煎嚭</el-button> -->
+        <el-button type="info" plain :icon="Download" @click="handleExport">瀵煎嚭</el-button>
       </el-space>
       <!-- 琛ㄦ牸缁勪欢 -->
       <div>
@@ -169,7 +169,30 @@
 };
 // 瀵煎嚭鍑哄簱
 const handleExport = () => {
-
+  const config = { api: "/salesRecord/export", name: "閿�鍞嚭搴�" };
+  proxy.$modal
+    .confirm(
+      "鏄惁瑕佸鍑�" +
+        (selectedRows.value.length > 0
+          ? `閫変腑鐨�${selectedRows.value.length}鏉
+          : "鍏ㄩ儴") +
+        "鏁版嵁锛�"
+    )
+    .then((res) => {
+      if (res) {
+        ElMessage.success("姝e湪瀵煎嚭鏁版嵁锛岃绋嶅��...");
+        exportData(config.api, config.name);
+      }
+    })
+    .catch(() => {});
+};
+const exportData = (api, name) => {
+  proxy.download(
+    api,
+    { exportIds: selectedRows.value.map((row) => row.id) },
+    `${new Date().getTime()}${name}${new Date().toLocaleDateString("en-CA")}.xlsx`
+  );
+  ElMessage.success("瀵煎嚭鏁版嵁锛�" + name);
 };
 // 閫夋嫨琛�
 const handleSelectionChange = (selection) => {
diff --git a/src/views/warehouseManagement/index.vue b/src/views/warehouseManagement/index.vue
index b7bd8a4..02d226f 100644
--- a/src/views/warehouseManagement/index.vue
+++ b/src/views/warehouseManagement/index.vue
@@ -1,25 +1,25 @@
 <template>
   <div class="app-container">
     <el-form :inline="true" :model="queryParams" class="search-form">
-			<el-form-item label="鐧昏鏃ユ湡">
-				<el-date-picker
-					v-model="queryParams.registrationDate"
-					type="date"
-					value-format="YYYY-MM-DD"
-					format="YYYY-MM-DD"
-					clearable
-					style="width: 100%"
-					placeholder="璇烽�夋嫨鏃ユ湡"
-				/>
-			</el-form-item>
-			<el-form-item label="鐓ょ">
-				<el-input
-					v-model="queryParams.coal"
-					placeholder="璇疯緭鍏ョ叅绉�"
-					clearable
-					:style="{ width: '100%' }"
-				/>
-			</el-form-item>
+      <el-form-item label="鐧昏鏃ユ湡">
+        <el-date-picker
+          v-model="queryParams.registrationDate"
+          type="date"
+          value-format="YYYY-MM-DD"
+          format="YYYY-MM-DD"
+          clearable
+          style="width: 100%"
+          placeholder="璇烽�夋嫨鏃ユ湡"
+        />
+      </el-form-item>
+      <el-form-item label="鐓ょ">
+        <el-input
+          v-model="queryParams.coal"
+          placeholder="璇疯緭鍏ョ叅绉�"
+          clearable
+          :style="{ width: '100%' }"
+        />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="handleQuery">鏌ヨ</el-button>
         <el-button @click="resetQuery">閲嶇疆</el-button>
@@ -28,56 +28,158 @@
     <el-card>
       <!-- 鏍囩椤� -->
       <el-tabs
-          v-model="activeTab"
-          class="info-tabs"
-          @tab-click="handleTabClick"
+        v-model="activeTab"
+        class="info-tabs"
+        @tab-click="handleTabClick"
       >
         <el-tab-pane
-            v-for="tab in tabs"
-            :key="tab.name"
-            :label="tab.label"
-            :name="tab.name"
+          v-for="tab in tabs"
+          :key="tab.name"
+          :label="tab.label"
+          :name="tab.name"
         />
       </el-tabs>
       <!-- 鎿嶄綔鎸夐挳鍖� -->
       <el-space>
-<!--        <el-button type="danger" :icon="Delete">鍒犻櫎</el-button>-->
+        <!--        <el-button type="danger" :icon="Delete">鍒犻櫎</el-button>-->
         <!-- <el-button type="info" plain :icon="Download">瀵煎嚭</el-button>  -->
-        <el-button type="success" plain :icon="Refresh" v-if="activeTab=== 'officialInventory'" @click="mergeRows('merge')">鍚堝苟</el-button>
+        <el-button
+          type="success"
+          plain
+          :icon="Refresh"
+          v-if="activeTab === 'officialInventory'"
+          @click="mergeRows('merge')"
+          >鍚堝苟</el-button
+        >
+        <el-button
+          type="info"
+          plain
+          :icon="Download"
+          v-if="activeTab === 'officialInventory'"
+          @click="handleExport"
+          >瀵煎嚭</el-button
+        >
       </el-space>
       <div>
-        <el-table :data="tableData" border @selection-change="selectionChange" style="width: 100%;height: calc(100vh - 30em)" show-summary :summary-method="summarizeChildrenTable">
+        <el-table
+          :data="tableData"
+          border
+          @selection-change="selectionChange"
+          style="width: 100%; height: calc(100vh - 30em)"
+          show-summary
+          :summary-method="summarizeChildrenTable"
+        >
           <el-table-column type="selection" width="55" align="center" />
-          <el-table-column label="搴忓彿" type="index" width="60" align="center" />
-          <el-table-column prop="supplierName" label="渚涜揣鍟嗗悕绉�" width="180" sortable/>
-          <el-table-column prop="coal" label="鐓ょ" sortable/>
-          <el-table-column prop="unit" label="鍗曚綅" width="70"/>
-          <el-table-column prop="inventoryQuantity" label="搴撳瓨鏁伴噺" sortable min-width="110"/>
-          <el-table-column prop="priceIncludingTax" label="鍗曚环(鍚◣)" sortable width="130"/>
-          <el-table-column prop="totalPriceIncludingTax" label="鎬讳环(鍚◣)" width="130" />
-          <el-table-column prop="priceExcludingTax" label="鍗曚环(涓嶅惈绋�)" width="130" />
-          <el-table-column prop="totalPriceExcludingTax" label="鎬讳环(涓嶅惈绋�)" width="130" />
-          <el-table-column prop="pendingReplenishment" label="寰呰ˉ搴�" width="130" v-if="activeTab=== 'officialInventory'"/>
-          <el-table-column label="鐓よ川" align="center" v-if="activeTab=== 'officialInventory'" width="600">
-            <el-table-column v-for="col in columnTitle" :key="col.prop" :prop="col.prop" :label="col.label" align="center" sortable min-width="200"/>
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            width="60"
+            align="center"
+          />
+          <el-table-column
+            prop="supplierName"
+            label="渚涜揣鍟嗗悕绉�"
+            width="180"
+            sortable
+          />
+          <el-table-column prop="coal" label="鐓ょ" sortable />
+          <el-table-column prop="unit" label="鍗曚綅" width="70" />
+          <el-table-column
+            prop="inventoryQuantity"
+            label="搴撳瓨鏁伴噺"
+            sortable
+            min-width="110"
+          />
+          <el-table-column
+            prop="priceIncludingTax"
+            label="鍗曚环(鍚◣)"
+            sortable
+            width="130"
+          />
+          <el-table-column
+            prop="totalPriceIncludingTax"
+            label="鎬讳环(鍚◣)"
+            width="130"
+          />
+          <el-table-column
+            prop="priceExcludingTax"
+            label="鍗曚环(涓嶅惈绋�)"
+            width="130"
+          />
+          <el-table-column
+            prop="totalPriceExcludingTax"
+            label="鎬讳环(涓嶅惈绋�)"
+            width="130"
+          />
+          <el-table-column
+            prop="pendingReplenishment"
+            label="寰呰ˉ搴�"
+            width="130"
+            v-if="activeTab === 'officialInventory'"
+          />
+          <el-table-column
+            label="鐓よ川"
+            align="center"
+            v-if="activeTab === 'officialInventory'"
+            width="600"
+          >
+            <el-table-column
+              v-for="col in columnTitle"
+              :key="col.prop"
+              :prop="col.prop"
+              :label="col.label"
+              align="center"
+              sortable
+              min-width="200"
+            />
           </el-table-column>
-          <el-table-column prop="registrant" label="鐧昏浜�" width="180"/>
-          <el-table-column prop="registrationDate" label="鐧昏鏃ユ湡" width="180"/>
-          <el-table-column fixed="right" label="鎿嶄綔" min-width="100" align="center">
+          <el-table-column prop="registrant" label="鐧昏浜�" width="180" />
+          <el-table-column
+            prop="registrationDate"
+            label="鐧昏鏃ユ湡"
+            width="180"
+          />
+          <el-table-column
+            fixed="right"
+            label="鎿嶄綔"
+            min-width="100"
+            align="center"
+          >
             <template #default="scope">
-              <el-button link type="primary" size="small" @click="reviewDia(scope.row)" v-if="activeTab !== 'officialInventory'">瀹℃牳</el-button>
-              <el-button link type="primary" size="small" @click="mergeRows('edit', scope.row)" v-if="activeTab === 'officialInventory'">缂栬緫</el-button>
-              <el-button link type="primary" size="small" @click="mergeRows('view', scope.row)" v-if="activeTab === 'officialInventory'">璇︽儏</el-button>
+              <el-button
+                link
+                type="primary"
+                size="small"
+                @click="reviewDia(scope.row)"
+                v-if="activeTab !== 'officialInventory'"
+                >瀹℃牳</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                size="small"
+                @click="mergeRows('edit', scope.row)"
+                v-if="activeTab === 'officialInventory'"
+                >缂栬緫</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                size="small"
+                @click="mergeRows('view', scope.row)"
+                v-if="activeTab === 'officialInventory'"
+                >璇︽儏</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
         <pagination
-            v-if="total>0"
-            :page="pageNum"
-            :limit="pageSize"
-            :total="total"
-            @pagination="handlePagination"
-            :layout="'total, prev, pager, next, jumper'"
+          v-if="total > 0"
+          :page="pageNum"
+          :limit="pageSize"
+          :total="total"
+          @pagination="handlePagination"
+          :layout="'total, prev, pager, next, jumper'"
         />
       </div>
     </el-card>
@@ -88,14 +190,24 @@
           <el-col :span="12">
             <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierId">
               <el-select v-model="form.supplierId" placeholder="璇烽�夋嫨渚涘簲鍟�">
-                <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/>
+                <el-option
+                  :label="item.label"
+                  v-for="item in supplyList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鐓ょ" prop="coalId">
               <el-select v-model="form.coalId" placeholder="璇烽�夋嫨鐓ょ">
-                <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/>
+                <el-option
+                  :label="item.label"
+                  v-for="item in coalList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
@@ -103,48 +215,78 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚綅" prop="unit">
-              <el-input v-model="form.unit" placeholder="璇疯緭鍏ュ崟浣�" maxlength="30" />
+              <el-input
+                v-model="form.unit"
+                placeholder="璇疯緭鍏ュ崟浣�"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="搴撳瓨鏁伴噺" prop="inventoryQuantity">
-              <el-input v-model="form.inventoryQuantity" placeholder="璇疯緭鍏ュ簱瀛樻暟閲�" :max="inventoryQuantity" type="number"/>
+              <el-input
+                v-model="form.inventoryQuantity"
+                placeholder="璇疯緭鍏ュ簱瀛樻暟閲�"
+                :max="inventoryQuantity"
+                type="number"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
-              <el-input v-model="form.priceIncludingTax" placeholder="璇疯緭鍏ュ崟浠�(鍚◣)" maxlength="30" />
+              <el-input
+                v-model="form.priceIncludingTax"
+                placeholder="璇疯緭鍏ュ崟浠�(鍚◣)"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
-              <el-input v-model="form.totalPriceIncludingTax" placeholder="璇疯緭鍏ユ�讳环(鍚◣)" maxlength="30" />
+              <el-input
+                v-model="form.totalPriceIncludingTax"
+                placeholder="璇疯緭鍏ユ�讳环(鍚◣)"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
-              <el-input v-model="form.priceExcludingTax" placeholder="璇疯緭鍏ユ垚鏈崟浠�" maxlength="30" />
+              <el-input
+                v-model="form.priceExcludingTax"
+                placeholder="璇疯緭鍏ユ垚鏈崟浠�"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
-              <el-input v-model="form.totalPriceExcludingTax" placeholder="璇疯緭鍏ユ垚鏈崟浠�" maxlength="30" />
+              <el-input
+                v-model="form.totalPriceExcludingTax"
+                placeholder="璇疯緭鍏ユ垚鏈崟浠�"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鐓よ川鏂规" prop="coalPlanId">
-              <el-select v-model="form.coalPlanId" placeholder="璇烽�夋嫨" @change="coalPlanByIdList" clearable>
+              <el-select
+                v-model="form.coalPlanId"
+                placeholder="璇烽�夋嫨"
+                @change="coalPlanByIdList"
+                clearable
+              >
                 <el-option
-                    v-for="dict in qualityPlanOption"
-                    :key="dict.id"
-                    :label="dict.plan"
-                    :value="dict.id"
+                  v-for="dict in qualityPlanOption"
+                  :key="dict.id"
+                  :label="dict.plan"
+                  :value="dict.id"
                 ></el-option>
               </el-select>
             </el-form-item>
@@ -167,20 +309,47 @@
       </template>
     </el-dialog>
     <!-- 鍚堝苟鏁版嵁寮规 -->
-    <el-dialog :title="operationType.value === 'edit' ? '缂栬緫搴撳瓨' : '鍚堝苟搴撳瓨'" v-model="mergeVisible" width="800px">
-      <el-form :model="mergeForm" :rules="mergeRules" ref="mergeRef" label-width="100px">
+    <el-dialog
+      :title="operationType.value === 'edit' ? '缂栬緫搴撳瓨' : '鍚堝苟搴撳瓨'"
+      v-model="mergeVisible"
+      width="800px"
+    >
+      <el-form
+        :model="mergeForm"
+        :rules="mergeRules"
+        ref="mergeRef"
+        label-width="100px"
+      >
         <el-row>
           <el-col :span="12">
             <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierId">
-              <el-select v-model="mergeForm.supplierId" placeholder="璇烽�夋嫨渚涘簲鍟�" :disabled="operationType === 'view'">
-                <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/>
+              <el-select
+                v-model="mergeForm.supplierId"
+                placeholder="璇烽�夋嫨渚涘簲鍟�"
+                :disabled="operationType === 'view'"
+              >
+                <el-option
+                  :label="item.label"
+                  v-for="item in supplyList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鐓ょ" prop="coalId">
-              <el-select v-model="mergeForm.coalId" placeholder="璇烽�夋嫨鐓ょ" :disabled="operationType === 'view'">
-                <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/>
+              <el-select
+                v-model="mergeForm.coalId"
+                placeholder="璇烽�夋嫨鐓ょ"
+                :disabled="operationType === 'view'"
+              >
+                <el-option
+                  :label="item.label"
+                  v-for="item in coalList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
@@ -188,48 +357,85 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚綅" prop="unit">
-              <el-input v-model="mergeForm.unit" placeholder="璇疯緭鍏ュ崟浣�" maxlength="30" :disabled="operationType === 'view'"/>
+              <el-input
+                v-model="mergeForm.unit"
+                placeholder="璇疯緭鍏ュ崟浣�"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="搴撳瓨鏁伴噺" prop="inventoryQuantity">
-              <el-input v-model="mergeForm.inventoryQuantity" placeholder="璇疯緭鍏ュ簱瀛樻暟閲�" :max="inventoryQuantity" type="number" :disabled="operationType === 'view'"/>
+              <el-input
+                v-model="mergeForm.inventoryQuantity"
+                placeholder="璇疯緭鍏ュ簱瀛樻暟閲�"
+                :max="inventoryQuantity"
+                type="number"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
-              <el-input v-model="mergeForm.priceIncludingTax" placeholder="璇疯緭鍏ュ崟浠�(鍚◣)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.priceIncludingTax"
+                placeholder="璇疯緭鍏ュ崟浠�(鍚◣)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
-              <el-input v-model="mergeForm.totalPriceIncludingTax" placeholder="璇疯緭鍏ユ�讳环(鍚◣)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.totalPriceIncludingTax"
+                placeholder="璇疯緭鍏ユ�讳环(鍚◣)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
-              <el-input v-model="mergeForm.priceExcludingTax" placeholder="璇疯緭鍏ュ崟浠�(涓嶅惈绋�)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.priceExcludingTax"
+                placeholder="璇疯緭鍏ュ崟浠�(涓嶅惈绋�)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
-              <el-input v-model="mergeForm.totalPriceExcludingTax" placeholder="璇疯緭鍏ユ�讳环(涓嶅惈绋�)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.totalPriceExcludingTax"
+                placeholder="璇疯緭鍏ユ�讳环(涓嶅惈绋�)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鐓よ川鏂规" prop="coalPlanId">
-              <el-select v-model="mergeForm.coalPlanId" placeholder="璇烽�夋嫨" @change="coalPlanByIdList" clearable :disabled="operationType === 'view'">
+              <el-select
+                v-model="mergeForm.coalPlanId"
+                placeholder="璇烽�夋嫨"
+                @change="coalPlanByIdList"
+                clearable
+                :disabled="operationType === 'view'"
+              >
                 <el-option
-                    v-for="dict in qualityPlanOption"
-                    :key="dict.id"
-                    :label="dict.plan"
-                    :value="dict.id"
+                  v-for="dict in qualityPlanOption"
+                  :key="dict.id"
+                  :label="dict.plan"
+                  :value="dict.id"
                 ></el-option>
               </el-select>
             </el-form-item>
@@ -239,7 +445,10 @@
         <el-row>
           <el-col :span="12" v-for="item in filteredList" :key="item.id">
             <el-form-item :label="item.fieldName">
-              <el-input v-model="mergeForm[item.fields]" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm[item.fields]"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
@@ -255,25 +464,28 @@
 </template>
 
 <script setup>
-import {onMounted, ref} from "vue";
-import {Delete, Download, Refresh} from "@element-plus/icons-vue";
+import { onMounted, ref } from "vue";
+import { Delete, Download, Refresh } from "@element-plus/icons-vue";
 import Pagination from "@/components/Pagination/index.vue";
 import {
   addOrEditCoalValue,
-  coalFieldList, coalPlanById,
-  coalPlanList, officialInventoryList,
-  pendingInventoryList
+  coalFieldList,
+  coalPlanById,
+  coalPlanList,
+  officialInventoryList,
+  pendingInventoryList,
 } from "@/api/warehouseManagement/index.js";
-import {editOfficial, merge} from "../../api/warehouseManagement/index.js";
-import {getSupplyList} from "@/api/procureMent/index.js";
-import {getCoalInfoList} from "@/api/production/index.js";
+import { editOfficial, merge } from "../../api/warehouseManagement/index.js";
+import { getSupplyList } from "@/api/procureMent/index.js";
+import { getCoalInfoList } from "@/api/production/index.js";
+import { ElMessage } from "element-plus";
 
-const { proxy } = getCurrentInstance()
+const { proxy } = getCurrentInstance();
 
-const tableData = ref([])
-const selectedRows = ref([])
-const qualityPlanOption = ref([])
-const filteredList = ref([])
+const tableData = ref([]);
+const selectedRows = ref([]);
+const qualityPlanOption = ref([]);
+const filteredList = ref([]);
 const tableLoading = ref(false);
 const total = ref(0);
 const pageNum = ref(1);
@@ -285,50 +497,58 @@
 // 瀹℃牳寮规
 const reviewVisible = ref(false);
 // 鍚堝苟寮规
-const mergeVisible = ref(false)
-const operationType = ref('')
+const mergeVisible = ref(false);
+const operationType = ref("");
 const data = reactive({
   form: {
-    supplierName: '',
-    coal: '',
-    unit: '',
-    inventoryQuantity: '',
-    priceIncludingTax: '',
-    totalPriceIncludingTax: '',
-    priceExcludingTax: '',
-    totalPriceExcludingTax: '',
-    coalPlanId: '',
-    pId: '',
+    supplierName: "",
+    coal: "",
+    unit: "",
+    inventoryQuantity: "",
+    priceIncludingTax: "",
+    totalPriceIncludingTax: "",
+    priceExcludingTax: "",
+    totalPriceExcludingTax: "",
+    coalPlanId: "",
+    pId: "",
   },
   mergeForm: {
-    supplierId: '',
-    coalId: '',
-    unit: '',
-    inventoryQuantity: '',
-    priceIncludingTax: '',
-    totalPriceIncludingTax: '',
-    priceExcludingTax: '',
-    totalPriceExcludingTax: '',
-    coalPlanId: '',
-    pId: '',
+    supplierId: "",
+    coalId: "",
+    unit: "",
+    inventoryQuantity: "",
+    priceIncludingTax: "",
+    totalPriceIncludingTax: "",
+    priceExcludingTax: "",
+    totalPriceExcludingTax: "",
+    coalPlanId: "",
+    pId: "",
   },
   rules: {
-    supplierName: [{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }],
+    supplierName: [
+      { required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" },
+    ],
     coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }],
     unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
     coalPlanId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    supplierId: [{ required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" }],
+    supplierId: [
+      { required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" },
+    ],
   },
   mergeRules: {
-    supplierName: [{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }],
+    supplierName: [
+      { required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" },
+    ],
     coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }],
     unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
     coalPlanId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    supplierId: [{ required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" }],
-  }
-})
+    supplierId: [
+      { required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" },
+    ],
+  },
+});
 
-const { form, rules, mergeForm, mergeRules } = toRefs(data)
+const { form, rules, mergeForm, mergeRules } = toRefs(data);
 // 褰撳墠鏍囩
 const activeTab = ref("pendingInbound");
 const tabName = ref("pendingInbound");
@@ -339,10 +559,10 @@
 ]);
 // 鏌ヨ鍙傛暟
 const queryParams = reactive({
-	registrationDate: "",
-	coal: "",
-})
-const columnTitle = ref([])
+  registrationDate: "",
+  coal: "",
+});
+const columnTitle = ref([]);
 const supplyList = ref([]);
 const coalList = ref([]);
 
@@ -380,52 +600,66 @@
   getList();
 };
 const summarizeChildrenTable = (param) => {
-  return proxy.summarizeTable(param, ['inventoryQuantity', 'priceIncludingTax', 'totalPriceIncludingTax','priceExcludingTax','totalPriceExcludingTax']);
-}
+  return proxy.summarizeTable(param, [
+    "inventoryQuantity",
+    "priceIncludingTax",
+    "totalPriceIncludingTax",
+    "priceExcludingTax",
+    "totalPriceExcludingTax",
+  ]);
+};
 // 鐐瑰嚮鏌ヨ
 const handleQuery = () => {
-  pageNum.value = 1
-  pageSize.value = 10
-  getList()
-}
+  pageNum.value = 1;
+  pageSize.value = 10;
+  getList();
+};
 // 鍒嗛〉澶勭悊
 const handlePagination = (val) => {
-	pageNum.value = val.page;
-	pageSize.value = val.limit;
-	getList();
+  pageNum.value = val.page;
+  pageSize.value = val.limit;
+  getList();
 };
 const getList = () => {
   tableLoading.value = true;
   // 璧嬪�肩叅璐ㄨ〃澶村睍绀哄瓧娈�
   if (tabName.value === "pendingInbound") {
-    pendingInventoryList({ ...queryParams, current: pageNum.value, size: pageSize.value }).then(res => {
+    pendingInventoryList({
+      ...queryParams,
+      current: pageNum.value,
+      size: pageSize.value,
+    }).then((res) => {
       tableLoading.value = false;
       tableData.value = res.data.records;
       total.value = res.data.total;
-    })
+    });
   } else {
-    officialInventoryList({ ...queryParams, current: pageNum.value, size: pageSize.value }).then(res => {
+    officialInventoryList({
+      ...queryParams,
+      current: pageNum.value,
+      size: pageSize.value,
+    }).then((res) => {
       tableLoading.value = false;
       const result = flattenFields(res.data.records);
       tableData.value = result;
       total.value = res.data.total;
-      coalFieldListOption()
-    })
+      coalFieldListOption();
+    });
   }
 };
 // 鎵佸钩鍖栧鐞嗗嚱鏁�
 const flattenFields = (data) => {
-  return data.map(item => {
+  return data.map((item) => {
     const mergedFields = item.fields.reduce((acc, obj) => {
       const key = Object.keys(obj)[0];
       acc[key] = obj[key];
       return acc;
     }, {});
-    
+
     // 鍚堝苟涓诲璞′笌鎻愬彇鍑虹殑 fields 瀛楁
     return {
       ...item,
-      ...mergedFields
+      ...mergedFields,
     };
   });
 };
@@ -440,66 +674,91 @@
 };
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const selectionChange = (rows) => {
-  selectedRows.value = rows
-}
+  selectedRows.value = rows;
+};
 // 鎵撳紑瀹℃牳寮规
 const reviewDia = (row) => {
-  reviewVisible.value = true
-  filteredList.value = []
-  form.value = {...row}
-  form.value.pId = row.id
-  inventoryQuantity.value = row.inventoryQuantity
-  getDropdownData()
-  coalPlanListOptions()
-}
+  reviewVisible.value = true;
+  filteredList.value = [];
+  form.value = { ...row };
+  form.value.pId = row.id;
+  inventoryQuantity.value = row.inventoryQuantity;
+  getDropdownData();
+  coalPlanListOptions();
+};
 // 鏌ヨ鐓よ川鏂规涓嬫媺妗�
 const coalPlanListOptions = () => {
-  coalPlanList().then(res => {
-    qualityPlanOption.value = res.data
-  })
-}
+  coalPlanList().then((res) => {
+    qualityPlanOption.value = res.data;
+  });
+};
 // 鏌ヨ鐓よ川鏂规瀛楁
 const coalPlanByIdList = (id) => {
-  coalPlanById({id: id}).then(res => {
-    filteredList.value = res.data
-    if(!id) {
-      filteredList.value = []
+  coalPlanById({ id: id }).then((res) => {
+    filteredList.value = res.data;
+    if (!id) {
+      filteredList.value = [];
     }
-  })
-}
+  });
+};
 // 鏌ヨ鐓よ川瀛楁
 const coalFieldListOption = () => {
-  coalFieldList().then(res => {
-    filteredList.value = res.data
-    columnTitle.value = res.data.map(item => {
+  coalFieldList().then((res) => {
+    filteredList.value = res.data;
+    columnTitle.value = res.data.map((item) => {
       return {
         prop: item.fields,
-        label: item.fieldName // 浣跨敤 fieldName 浣滀负 label
+        label: item.fieldName, // 浣跨敤 fieldName 浣滀负 label
       };
     });
-  })
-}
+  });
+};
+const handleExport = () => {
+  const config = { api: "/officialInventory/export", name: "姝e紡搴�" };
+  proxy.$modal
+    .confirm(
+      "鏄惁瑕佸鍑�" +
+        (selectedRows.value.length > 0
+          ? `閫変腑鐨�${selectedRows.value.length}鏉
+          : "鍏ㄩ儴") +
+        "鏁版嵁锛�"
+    )
+    .then((res) => {
+      if (res) {
+        ElMessage.success("姝e湪瀵煎嚭鏁版嵁锛岃绋嶅��...");
+        exportData(config.api, config.name);
+      }
+    })
+    .catch(() => {});
+};
+const exportData = (api, name) => {
+  proxy.download(
+    api,
+    { exportIds: selectedRows.value.map((row) => row.id) },
+    `${new Date().getTime()}${name}${new Date().toLocaleDateString("en-CA")}.xlsx`
+  );
+};
 // 鍚堝苟搴撳瓨鏁版嵁鏂规硶
-const mergeRows = (type,row) => {
-  getDropdownData()
-  coalPlanListOptions()
-  if (type === 'edit') {
+const mergeRows = (type, row) => {
+  getDropdownData();
+  coalPlanListOptions();
+  if (type === "edit") {
     mergeVisible.value = true;
   }
   operationType.value = type;
-  if (type !== 'merge') {
-    mergeForm.value = {...row}
+  if (type !== "merge") {
+    mergeForm.value = { ...row };
   } else {
     if (selectedRows.value.length < 2) {
-      proxy.$modal.msgWarning('璇疯嚦灏戦�夋嫨涓ゆ潯鏁版嵁')
-      return
+      proxy.$modal.msgWarning("璇疯嚦灏戦�夋嫨涓ゆ潯鏁版嵁");
+      return;
     }
     mergeVisible.value = true;
-    filteredList.value.forEach(item => {
-      mergeForm.value[item.fields] = ''
-    })
-    const data = selectedRows.value
-    const selectedIds = selectedRows.value.map(row => row.id);
+    filteredList.value.forEach((item) => {
+      mergeForm.value[item.fields] = "";
+    });
+    const data = selectedRows.value;
+    const selectedIds = selectedRows.value.map((row) => row.id);
     // 鍒濆鍖栧悎璁″拰鍧囧�煎彉閲�
     let totalInventory = 0;
     let totalPriceIncludingTax = 0;
@@ -507,7 +766,7 @@
     let priceIncludingTaxSum = 0;
     let priceExcludingTaxSum = 0;
     // 閬嶅巻鎵�鏈夐�変腑鏁版嵁锛岀疮鍔犺绠�
-    data.forEach(row => {
+    data.forEach((row) => {
       totalInventory += parseFloat(row.inventoryQuantity) || 0;
       priceIncludingTaxSum += parseFloat(row.priceIncludingTax) || 0;
       totalPriceIncludingTax += parseFloat(row.totalPriceIncludingTax) || 0;
@@ -515,10 +774,18 @@
       totalPriceExcludingTax += parseFloat(row.totalPriceExcludingTax) || 0;
     });
     // 璁$畻骞冲潎鍊煎苟淇濈暀涓や綅灏忔暟
-    const avgPriceIncludingTax = Number((priceIncludingTaxSum / data.length).toFixed(2));
-    const avgTotalPriceIncludingTax = Number((totalPriceIncludingTax / data.length).toFixed(2));
-    const avgPriceExcludingTax = Number((priceExcludingTaxSum / data.length).toFixed(2));
-    const avgTotalPriceExcludingTax = Number((totalPriceExcludingTax / data.length).toFixed(2));
+    const avgPriceIncludingTax = Number(
+      (priceIncludingTaxSum / data.length).toFixed(2)
+    );
+    const avgTotalPriceIncludingTax = Number(
+      (totalPriceIncludingTax / data.length).toFixed(2)
+    );
+    const avgPriceExcludingTax = Number(
+      (priceExcludingTaxSum / data.length).toFixed(2)
+    );
+    const avgTotalPriceExcludingTax = Number(
+      (totalPriceExcludingTax / data.length).toFixed(2)
+    );
     // 璁剧疆琛ㄥ崟鏄剧ず
     mergeForm.value.inventoryQuantity = totalInventory;
     mergeForm.value.priceIncludingTax = avgPriceIncludingTax;
@@ -527,81 +794,81 @@
     mergeForm.value.totalPriceExcludingTax = avgTotalPriceExcludingTax;
     mergeForm.value.ids = selectedIds;
   }
-}
+};
 // 鎻愪氦鍚堝苟琛ㄥ崟
 const submitForm = () => {
-  proxy.$refs.mergeRef.validate(valid => {
+  proxy.$refs.mergeRef.validate((valid) => {
     if (valid) {
-      delete mergeForm.value.createTime
-      delete mergeForm.value.updateTime
-      if (operationType.value === 'edit') {
+      delete mergeForm.value.createTime;
+      delete mergeForm.value.updateTime;
+      if (operationType.value === "edit") {
         mergeForm.value.fields = filteredList.value.reduce((acc, item) => {
           const key = item.fields;
           const value = mergeForm.value[key];
           // 鍒ゆ柇鏄惁鏈夊�硷紙浣犲彲浠ユ牴鎹渶瑕佷慨鏀瑰垽鏂潯浠讹級
-          if (value !== null && value !== undefined && value !== '') {
+          if (value !== null && value !== undefined && value !== "") {
             acc.push({ [key]: value });
           }
           return acc;
         }, []);
         editOfficial(mergeForm.value).then(() => {
-          cancel()
-          proxy.$modal.msgSuccess('淇敼鎴愬姛')
-          handleQuery()
-        })
+          cancel();
+          proxy.$modal.msgSuccess("淇敼鎴愬姛");
+          handleQuery();
+        });
       } else {
         mergeForm.value.fields = filteredList.value.reduce((acc, item) => {
           const key = item.fields;
           const value = mergeForm.value[key];
           // 鍒ゆ柇鏄惁鏈夊�硷紙浣犲彲浠ユ牴鎹渶瑕佷慨鏀瑰垽鏂潯浠讹級
-          if (value !== null && value !== undefined && value !== '') {
+          if (value !== null && value !== undefined && value !== "") {
             acc.push({ [key]: value });
           }
           return acc;
         }, []);
-        mergeForm.value.type = 2
+        mergeForm.value.type = 2;
         merge(mergeForm.value).then(() => {
-          cancel()
-          proxy.$modal.msgSuccess('鍚堝苟鎴愬姛')
-          handleQuery()
-        })
+          cancel();
+          proxy.$modal.msgSuccess("鍚堝苟鎴愬姛");
+          handleQuery();
+        });
       }
     }
-  })
-}
+  });
+};
 // 鍏抽棴鍚堝苟琛ㄥ崟
 const cancel = () => {
   proxy.$refs.mergeRef.resetFields();
-  mergeVisible.value = false
-}
+  mergeVisible.value = false;
+};
 // 鎻愪氦瀹℃牳琛ㄥ崟
 const submitReviewForm = () => {
   proxy.$refs.formRef.validate((valid) => {
     if (valid) {
-      delete form.value.registrationTime
-      delete form.value.createTime
-      delete form.value.updateTime
-      form.value.type = 1
-      form.value.fieldValue = filteredList.value.map(item => ({
-        [item.fields]: form.value[item.fields]
-      }))
+      delete form.value.registrationTime;
+      delete form.value.createTime;
+      delete form.value.updateTime;
+      form.value.type = 1;
+      form.value.fieldValue = filteredList.value.map((item) => ({
+        [item.fields]: form.value[item.fields],
+      }));
       addOrEditCoalValue(form.value).then(() => {
-        cancelReview()
-        proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
-        handleQuery()
-      })
+        cancelReview();
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        handleQuery();
+      });
     }
-  })
-}
+  });
+};
 // 鍏抽棴瀹℃牳寮规
 const cancelReview = () => {
-  proxy.$refs.formRef.resetFields()
-  reviewVisible.value = false
-}
+  proxy.$refs.formRef.resetFields();
+  reviewVisible.value = false;
+};
 </script>
 
 <style scoped>
 :deep(.el-table) {
   margin: 20px 0;
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3