From d0b2606e410257ebb73c05aeaeac079dc5db81f0 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期五, 15 五月 2026 17:23:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_NEW_pro' into dev_NEW_pro

---
 multiple/assets/favicon/JXJHfavicon.ico                                    |    0 
 src/views/safeProduction/safeWorkApproval/components/infoFormDia.vue       |    6 
 multiple/assets/logo/XSWHLogo.png                                          |    0 
 multiple/assets/favicon/ZQSYfavicon.ico                                    |    0 
 multiple/config.json                                                       |   54 +++
 src/views/equipmentManagement/inspectionManagement/components/formDia.vue  |   19 +
 src/views/collaborativeApproval/approvalProcess/index.vue                  |   23 +
 src/views/salesManagement/salesLedger/index.vue                            |    4 
 multiple/assets/favicon/HYLQfavicon.ico                                    |    0 
 src/api/inventoryManagement/stockInventory.js                              |    8 
 multiple/assets/logo/ZQSYLogo.png                                          |    0 
 multiple/assets/favicon/QXYfavicon.ico                                     |    0 
 multiple/assets/logo/JXJHLogo.png                                          |    0 
 src/views/inventoryManagement/stockManagement/Record.vue                   |  354 ++++++++++++++++--------
 multiple/assets/favicon/XSWHfavicon.ico                                    |    0 
 multiple/assets/logo/HYLQLogo.png                                          |    0 
 multiple/assets/logo/YTJZLogo.png                                          |    0 
 src/views/basicData/supplierManage/components/HomeTab.vue                  |   21 
 multiple/assets/favicon/YTJZfavicon.ico                                    |    0 
 src/views/equipmentManagement/repair/Modal/MaintainModal.vue               |    5 
 src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue |    5 
 src/views/equipmentManagement/inspectionManagement/index.vue               |   17 +
 multiple/assets/logo/QXYLogo.png                                           |    0 
 src/views/equipmentManagement/measurementEquipment/index.vue               |   52 ++-
 src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue         |  227 ++++++++++++++++
 multiple/assets/logo/HYJCLogo.png                                          |    0 
 src/views/basicData/supplierManage/components/BlacklistTab.vue             |   21 
 multiple/assets/favicon/HYJCfavicon.ico                                    |    0 
 28 files changed, 648 insertions(+), 168 deletions(-)

diff --git a/multiple/assets/favicon/HYJCfavicon.ico b/multiple/assets/favicon/HYJCfavicon.ico
new file mode 100644
index 0000000..e52f096
--- /dev/null
+++ b/multiple/assets/favicon/HYJCfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/HYLQfavicon.ico b/multiple/assets/favicon/HYLQfavicon.ico
new file mode 100644
index 0000000..9a2dbf3
--- /dev/null
+++ b/multiple/assets/favicon/HYLQfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/JXJHfavicon.ico b/multiple/assets/favicon/JXJHfavicon.ico
new file mode 100644
index 0000000..0c90589
--- /dev/null
+++ b/multiple/assets/favicon/JXJHfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/QXYfavicon.ico b/multiple/assets/favicon/QXYfavicon.ico
new file mode 100644
index 0000000..e56847e
--- /dev/null
+++ b/multiple/assets/favicon/QXYfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/XSWHfavicon.ico b/multiple/assets/favicon/XSWHfavicon.ico
new file mode 100644
index 0000000..f6cd72d
--- /dev/null
+++ b/multiple/assets/favicon/XSWHfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/YTJZfavicon.ico b/multiple/assets/favicon/YTJZfavicon.ico
new file mode 100644
index 0000000..ad7b03b
--- /dev/null
+++ b/multiple/assets/favicon/YTJZfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/ZQSYfavicon.ico b/multiple/assets/favicon/ZQSYfavicon.ico
new file mode 100644
index 0000000..9e3422f
--- /dev/null
+++ b/multiple/assets/favicon/ZQSYfavicon.ico
Binary files differ
diff --git a/multiple/assets/logo/HYJCLogo.png b/multiple/assets/logo/HYJCLogo.png
new file mode 100644
index 0000000..367f64d
--- /dev/null
+++ b/multiple/assets/logo/HYJCLogo.png
Binary files differ
diff --git a/multiple/assets/logo/HYLQLogo.png b/multiple/assets/logo/HYLQLogo.png
new file mode 100644
index 0000000..8eda2f7
--- /dev/null
+++ b/multiple/assets/logo/HYLQLogo.png
Binary files differ
diff --git a/multiple/assets/logo/JXJHLogo.png b/multiple/assets/logo/JXJHLogo.png
new file mode 100644
index 0000000..1d47288
--- /dev/null
+++ b/multiple/assets/logo/JXJHLogo.png
Binary files differ
diff --git a/multiple/assets/logo/QXYLogo.png b/multiple/assets/logo/QXYLogo.png
new file mode 100644
index 0000000..45318ed
--- /dev/null
+++ b/multiple/assets/logo/QXYLogo.png
Binary files differ
diff --git a/multiple/assets/logo/XSWHLogo.png b/multiple/assets/logo/XSWHLogo.png
new file mode 100644
index 0000000..d0c32f5
--- /dev/null
+++ b/multiple/assets/logo/XSWHLogo.png
Binary files differ
diff --git a/multiple/assets/logo/YTJZLogo.png b/multiple/assets/logo/YTJZLogo.png
new file mode 100644
index 0000000..ea0c489
--- /dev/null
+++ b/multiple/assets/logo/YTJZLogo.png
Binary files differ
diff --git a/multiple/assets/logo/ZQSYLogo.png b/multiple/assets/logo/ZQSYLogo.png
new file mode 100644
index 0000000..fe865b6
--- /dev/null
+++ b/multiple/assets/logo/ZQSYLogo.png
Binary files differ
diff --git a/multiple/config.json b/multiple/config.json
index 6a0b9e6..1cc8f1f 100644
--- a/multiple/config.json
+++ b/multiple/config.json
@@ -96,6 +96,60 @@
     "logo": "logo/DYKJLogo.png",
     "favicon": "favicon/DYKJfavicon.ico"
   },
+  "ZQSY": {
+    "env": {
+      "VITE_APP_TITLE": "娉芥穱瀹炰笟",
+      "VITE_BASE_API": "http://36.213.128.159:9000",
+      "VITE_JAVA_API": "http://36.213.128.159:9001"
+    },
+    "logo": "logo/ZQSYLogo.png",
+    "favicon": "favicon/ZQSYfavicon.ico"
+  },
+  "JXJH": {
+    "env": {
+      "VITE_APP_TITLE": "娴氬幙姹熸捣姘存偿鍒跺搧鏈夐檺鍏徃",
+      "VITE_BASE_API": "http://36.139.201.20:9000",
+      "VITE_JAVA_API": "http://36.139.201.20:9001"
+    },
+    "logo": "logo/JXJHLogo.png",
+    "favicon": "favicon/JXJHfavicon.ico"
+  },
+  "YTJZ": {
+    "env": {
+      "VITE_APP_TITLE": "璞嘲寤虹瓚鏉愭枡鏈夐檺鍏徃",
+      "VITE_BASE_API": "http://36.139.201.181:9000",
+      "VITE_JAVA_API": "http://36.139.201.181:9001"
+    },
+    "logo": "logo/YTJZLogo.png",
+    "favicon": "favicon/YTJZfavicon.ico"
+  },
+  "HYLQ": {
+    "env": {
+      "VITE_APP_TITLE": "鑸�歌矾妗ュ伐绋嬫湁闄愬叕鍙�",
+      "VITE_BASE_API": "http://36.139.202.111:9000",
+      "VITE_JAVA_API": "http://36.139.202.111:9001"
+    },
+    "logo": "logo/HYLQLogo.png",
+    "favicon": "favicon/HYLQfavicon.ico"
+  },
+  "QXY": {
+    "env": {
+      "VITE_APP_TITLE": "寮轰俊瀹囩數鍣ㄤ簯涓绘満",
+      "VITE_BASE_API": "http://36.134.154.10:9000",
+      "VITE_JAVA_API": "http://36.134.154.10:9001"
+    },
+    "logo": "logo/QXYLogo.png",
+    "favicon": "favicon/QXYfavicon.ico"
+  },
+  "HYJC": {
+    "env": {
+      "VITE_APP_TITLE": "鎭掓磱寤烘潗",
+      "VITE_BASE_API": "http://36.138.94.178:9000",
+      "VITE_JAVA_API": "http://36.138.94.178:9001"
+    },
+    "logo": "logo/HYJCLogo.png",
+    "favicon": "favicon/HYJCfavicon.ico"
+  },
   "logo": "/src/assets/logo/logo.png",
   "favicon": "/public/favicon.ico"
 }
diff --git a/src/api/inventoryManagement/stockInventory.js b/src/api/inventoryManagement/stockInventory.js
index 0ba0943..539eedc 100644
--- a/src/api/inventoryManagement/stockInventory.js
+++ b/src/api/inventoryManagement/stockInventory.js
@@ -17,6 +17,14 @@
     });
 };
 
+export const getStockInventoryBatchNoQty = (params) => {
+    return request({
+        url: "/stockInventory/getBatchNoQty",
+        method: "get",
+        params,
+    });
+};
+
 // 鍒涘缓搴撳瓨璁板綍
 export const createStockInventory = (params) => {
     return request({
diff --git a/src/views/basicData/supplierManage/components/BlacklistTab.vue b/src/views/basicData/supplierManage/components/BlacklistTab.vue
index 8f6204b..206ba62 100644
--- a/src/views/basicData/supplierManage/components/BlacklistTab.vue
+++ b/src/views/basicData/supplierManage/components/BlacklistTab.vue
@@ -231,7 +231,10 @@
         </div>
       </template>
     </el-dialog>
-    <files-dia ref="filesDia"></files-dia>
+    <FileList v-if="fileListDialogVisible"
+              v-model:visible="fileListDialogVisible"
+              record-type="supplier_manage"
+              :record-id="recordId" />
   </div>
 </template>
 
@@ -249,7 +252,9 @@
 } from "@/api/basicData/supplierManageFile.js";
 import useUserStore from "@/store/modules/user";
 import { getToken } from "@/utils/auth.js";
-import FilesDia from "../filesDia.vue";
+const FileList = defineAsyncComponent(() =>
+    import("@/components/Dialog/FileList.vue")
+);
 const { proxy } = getCurrentInstance();
 const userStore = useUserStore();
 
@@ -327,7 +332,7 @@
         name: "璧勮川鏂囦欢",
         type: "text",
         clickFun: (row) => {
-          openFilesFormDia(row)
+          openFileDialog(row)
         }
       }
     ],
@@ -342,7 +347,8 @@
   size: 100,
   total: 0,
 });
-const filesDia = ref()
+const fileListDialogVisible = ref(false);
+const recordId = ref();
 // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
 const operationType = ref("");
 const dialogFormVisible = ref(false);
@@ -567,10 +573,9 @@
   return `${year}-${month}-${day}`;
 }
 // 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (row) => {
-  nextTick(() => {
-    filesDia.value?.openDialog(row)
-  })
+const openFileDialog = async row => {
+  recordId.value = row.id;
+  fileListDialogVisible.value = true;
 };
 
 onMounted(() => {
diff --git a/src/views/basicData/supplierManage/components/HomeTab.vue b/src/views/basicData/supplierManage/components/HomeTab.vue
index 47dce00..da62ca4 100644
--- a/src/views/basicData/supplierManage/components/HomeTab.vue
+++ b/src/views/basicData/supplierManage/components/HomeTab.vue
@@ -237,7 +237,10 @@
         </div>
       </template>
     </el-dialog>
-    <files-dia ref="filesDia"></files-dia>
+    <FileList v-if="fileListDialogVisible"
+              v-model:visible="fileListDialogVisible"
+              record-type="supplier_manage"
+              :record-id="recordId" />
   </div>
 </template>
 
@@ -255,7 +258,9 @@
 } from "@/api/basicData/supplierManageFile.js";
 import useUserStore from "@/store/modules/user";
 import { getToken } from "@/utils/auth.js";
-import FilesDia from "../filesDia.vue";
+const FileList = defineAsyncComponent(() =>
+    import("@/components/Dialog/FileList.vue")
+);
 const { proxy } = getCurrentInstance();
 const userStore = useUserStore();
 
@@ -333,7 +338,7 @@
         name: "璧勮川鏂囦欢",
         type: "text",
         clickFun: (row) => {
-          openFilesFormDia(row)
+          openFileDialog(row)
         }
       }
     ],
@@ -343,12 +348,13 @@
 const selectedRows = ref([]);
 const userList = ref([]);
 const tableLoading = ref(false);
+const fileListDialogVisible = ref(false);
+const recordId = ref();
 const page = reactive({
   current: 1,
   size: 100,
   total: 0,
 });
-const filesDia = ref()
 // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
 const operationType = ref("");
 const dialogFormVisible = ref(false);
@@ -573,10 +579,9 @@
   return `${year}-${month}-${day}`;
 }
 // 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (row) => {
-  nextTick(() => {
-    filesDia.value?.openDialog(row)
-  })
+const openFileDialog = async row => {
+  recordId.value = row.id;
+  fileListDialogVisible.value = true;
 };
 
 onMounted(() => {
diff --git a/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue
index 6461b2d..5bd7a3e 100644
--- a/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue
+++ b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue
@@ -152,7 +152,8 @@
     startDate: "", // 璇峰亣寮�濮嬫椂闂�
     endDate: "", // 璇峰亣缁撴潫鏃堕棿
     price: null, // 鎶ラ攢閲戦
-    location: "" // 鍑哄樊鍦扮偣
+    location: "", // 鍑哄樊鍦扮偣
+    storageBlobDTOS: []
   },
   rules: {
     approveId: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
@@ -270,7 +271,7 @@
       return
     }
   }
-  form.value.storageBlobDTOList = fileList.value
+  form.value.storageBlobDTOS = fileList.value
 
   proxy.$refs.formRef.validate(valid => {
     if (valid) {
diff --git a/src/views/collaborativeApproval/approvalProcess/index.vue b/src/views/collaborativeApproval/approvalProcess/index.vue
index dba6bc1..11a2869 100644
--- a/src/views/collaborativeApproval/approvalProcess/index.vue
+++ b/src/views/collaborativeApproval/approvalProcess/index.vue
@@ -126,20 +126,23 @@
     <!-- 寮圭獥缁勪欢 -->
     <info-form-dia ref="infoFormDia" @close="handleQuery" :approveType="currentApproveType"></info-form-dia>
     <approval-dia ref="approvalDia" @close="handleQuery" :approveType="currentApproveType"></approval-dia>
-    <FileList ref="fileListRef" />
+    <FileList v-if="fileDialogVisible"
+              v-model:visible="fileDialogVisible"
+              record-type="approve_process"
+              :record-id="recordId" />
   </div>
 </template>
 
 <script setup>
-import FileList from "./fileList.vue";
 import { Search, Plus, Delete, Download, RefreshRight, DocumentChecked } from "@element-plus/icons-vue";
-import {onMounted, ref, computed, reactive, toRefs, nextTick, getCurrentInstance} from "vue";
+import {onMounted, ref, computed, reactive, toRefs, nextTick, getCurrentInstance, defineAsyncComponent} from "vue";
 import {ElMessageBox} from "element-plus";
 import { useRoute } from 'vue-router';
 import InfoFormDia from "@/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue";
 import ApprovalDia from "@/views/collaborativeApproval/approvalProcess/components/approvalDia.vue";
 import {approveProcessDelete, approveProcessListPage} from "@/api/collaborativeApproval/approvalProcess.js";
 import useUserStore from "@/store/modules/user";
+const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
 
 const userStore = useUserStore();
 const route = useRoute();
@@ -337,7 +340,7 @@
       name: "闄勪欢",
       type: "text",
       clickFun: (row) => {
-        downLoadFile(row);
+        openFilesFormDia(row);
       },
     });
   }
@@ -371,11 +374,17 @@
   page.current = 1;
   getList();
 };
-const fileListRef = ref(null)
-const downLoadFile = (row) => {
-  fileListRef.value.open(row.commonFileList)
 
+// 鎵撳紑闄勪欢寮圭獥
+const recordId =ref(0)
+const fileDialogVisible = ref(false)
+
+// 鎵撳紑闄勪欢寮规
+const openFilesFormDia = async (row) => {
+  recordId.value = row.id
+  fileDialogVisible.value = true
 }
+
 const pagination = (obj) => {
   page.current = obj.page;
   page.size = obj.limit;
diff --git a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
index 9f509b1..3e7f1ca 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
@@ -26,6 +26,21 @@
         </el-row>
         <el-row>
           <el-col :span="12">
+            <el-form-item label="宸℃椤圭洰" prop="inspectionProject">
+              <el-input v-model="form.inspectionProject" placeholder="璇疯緭鍏ュ贰妫�椤圭洰" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏄惁鍚敤" prop="isEnabled">
+              <el-radio-group v-model="form.isEnabled">
+                <el-radio :value="1">鏄�</el-radio>
+                <el-radio :value="0">鍚�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
             <el-form-item label="澶囨敞" prop="remarks">
               <el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
             </el-form-item>
@@ -118,6 +133,8 @@
     taskName: undefined,
     inspector: '',
     inspectorIds: '',
+    inspectionProject: '',
+    isEnabled: 1,
     remarks: '',
     frequencyType: '',
     frequencyDetail: '',
@@ -245,6 +262,8 @@
     taskName: undefined,
     inspector: '',
     inspectorIds: '',
+    inspectionProject: '',
+    isEnabled: 1,
     remarks: '',
     frequencyType: '',
     frequencyDetail: '',
diff --git a/src/views/equipmentManagement/inspectionManagement/index.vue b/src/views/equipmentManagement/inspectionManagement/index.vue
index 35f82d5..44103ac 100644
--- a/src/views/equipmentManagement/inspectionManagement/index.vue
+++ b/src/views/equipmentManagement/inspectionManagement/index.vue
@@ -70,6 +70,11 @@
                     class="no-data">--</span>
             </div>
           </template>
+          <template #isEnabled="{ row }">
+            <el-tag :type="row.isEnabled === 1 ? 'success' : 'danger'" size="small">
+              {{ row.isEnabled == 1 ? '鏄�' : '鍚�' }}
+            </el-tag>
+          </template>
         </PIMTable>
       </div>
     </el-card>
@@ -126,8 +131,16 @@
   // 鍒楅厤缃�
   const columns = ref([
     { prop: "taskName", label: "宸℃浠诲姟鍚嶇О", minWidth: 160 },
+    { prop: "inspectionProject", label: "宸℃椤圭洰", minWidth: 150 },
     { prop: "remarks", label: "澶囨敞", minWidth: 150 },
     { prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 150, slot: "inspector" },
+    {
+      prop: "isEnabled",
+      label: "鏄惁鍚敤",
+      minWidth: 100,
+      dataType: "slot",
+      slot: "isEnabled"
+    },
     {
       prop: "frequencyType",
       label: "棰戞",
@@ -227,8 +240,10 @@
       operationsArr.value = ["edit"];
     } else if (value === "task") {
       const operationColumn = getOperationColumn(["viewFile"]);
+      // 瀹氭椂浠诲姟璁板綍涓嶅睍绀�"鏄惁鍚敤"鍒�
+      const taskColumns = columns.value.filter(col => col.prop !== "isEnabled");
       tableColumns.value = [
-        ...columns.value,
+        ...taskColumns,
         ...(operationColumn ? [operationColumn] : []),
       ];
       operationsArr.value = ["viewFile"];
diff --git a/src/views/equipmentManagement/measurementEquipment/index.vue b/src/views/equipmentManagement/measurementEquipment/index.vue
index 52c52a1..d2ec2d7 100644
--- a/src/views/equipmentManagement/measurementEquipment/index.vue
+++ b/src/views/equipmentManagement/measurementEquipment/index.vue
@@ -42,6 +42,7 @@
 				:tableLoading="tableLoading"
 				@pagination="pagination"
         :dbRowClick="dbRowClick"
+        :rowClassName="rowClassName"
 			></PIMTable>
 		</div>
 		<form-dia ref="formDia" @close="handleQuery"></form-dia>
@@ -125,22 +126,6 @@
     align:"center"
 	},
   {
-    label: "蹇埌鏈熸彁閱�",
-    prop: "valid",
-    width: 130,
-    align: "center",
-    formatData: (cell) => {
-      if (!cell) return "";
-      const validDate = new Date(cell);
-      const now = new Date();
-      const diffDays = Math.ceil((validDate - now) / (1000 * 60 * 60 * 24));
-      if (diffDays <= 7 && diffDays >= 0) {
-        return "鈿狅笍 " + diffDays + "澶╁悗鍒版湡";
-      }
-      return "";
-    }
-  },
-  {
     label: "鐘舵��",
     prop: "status",
     width: 130,
@@ -197,6 +182,31 @@
 
 const dbRowClick = (row)=>{
   rowClickData.value?.openDialog(row)
+}
+
+// 琛屾牱寮忥細蹇埌鏈燂紙7澶╁唴锛夋垨閫炬湡鏍囩孩
+const rowClassName = ({ row }) => {
+  console.log('rowClassName called:', row);
+  // valid 鏄湁鏁堝ぉ鏁帮紝mostDate 鏄渶鏂版瀹氭棩鏈�
+  if (row.valid && row.mostDate) {
+    const mostDate = new Date(row.mostDate);
+    // 璁$畻鍒版湡鏃ユ湡 = 妫�瀹氭棩鏈� + 鏈夋晥澶╂暟
+    const validDays = parseInt(row.valid) || 0;
+    const expireDate = new Date(mostDate);
+    expireDate.setDate(expireDate.getDate() + validDays);
+    
+    const now = new Date();
+    const diffDays = Math.ceil((expireDate - now) / (1000 * 60 * 60 * 24));
+    console.log('row:', row.code, 'validDays:', validDays, 'expireDate:', expireDate, 'diffDays:', diffDays);
+    // 7澶╁唴鍒版湡鎴栧凡閫炬湡閮芥爣绾�
+    if (diffDays <= 7) {
+      console.log('return warning-row');
+      return 'warning-row';
+    }
+  } else {
+    console.log('row missing valid or mostDate:', row.valid, row.mostDate);
+  }
+  return '';
 }
 
 // 琛ㄦ牸閫夋嫨鏁版嵁
@@ -298,5 +308,13 @@
 </script>
 
 <style scoped>
-
+:deep(.el-table .warning-row) {
+  background-color: #fef0f0 !important;
+}
+:deep(.el-table .warning-row:hover > td) {
+  background-color: #f9d5d5 !important;
+}
+:deep(.el-table .el-table__body tr.warning-row td) {
+  background-color: #fef0f0 !important;
+}
 </style>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/repair/Modal/MaintainModal.vue b/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
index b39ce08..b0b09f0 100644
--- a/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
@@ -16,7 +16,8 @@
       </el-form-item>
       <el-form-item label="缁翠慨鐘舵��">
         <el-select v-model="form.status">
-          <el-option label="寰呴獙鏀�" :value="3"></el-option>
+          <el-option label="寰呮姤淇�" :value="0"></el-option>
+          <el-option label="瀹岀粨" :value="1"></el-option>
           <el-option label="澶辫触" :value="2"></el-option>
         </el-select>
       </el-form-item>
@@ -117,7 +118,7 @@
     data.maintenanceTime 
       ? dayjs(data.maintenanceTime).format("YYYY-MM-DD HH:mm:ss")
       : dayjs().format("YYYY-MM-DD HH:mm:ss");
-  form.status = 3; // 榛樿鐘舵�佷负寰呴獙鏀�
+  form.status = 1; // 榛樿鐘舵�佷负瀹岀粨
   // multiple 閫夋嫨鍣ㄨ姹傛暟缁勶紱鍚庣甯歌繑鍥� "1,2,3"
   if (Array.isArray(data?.sparePartsIds)) {
     form.sparePartsIds = data.sparePartsIds.map((v) => Number(v)).filter((v) => Number.isFinite(v));
diff --git a/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue b/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
new file mode 100644
index 0000000..a835ef4
--- /dev/null
+++ b/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
@@ -0,0 +1,227 @@
+<template>
+  <el-dialog
+    v-model="isShow"
+    title="搴撳瓨璇︽儏"
+    width="90%"
+    top="3vh"
+    class="batch-no-qty-detail-dialog"
+    @close="closeModal"
+  >
+    <div class="detail-content">
+      <div class="detail-table-wrapper">
+        <el-table
+          :data="tableData"
+          border
+          v-loading="tableLoading"
+          style="width: 100%"
+          height="100%"
+        >
+          <el-table-column
+            label="浜у搧鍚嶇О"
+            prop="productName"
+            show-overflow-tooltip
+          />
+          <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
+          <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
+          <el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
+          <el-table-column
+            label="鍚堟牸搴撳瓨鏁伴噺"
+            prop="qualifiedQuantity"
+            show-overflow-tooltip
+          />
+          <el-table-column
+            label="涓嶅悎鏍煎簱瀛樻暟閲�"
+            prop="unQualifiedQuantity"
+            show-overflow-tooltip
+          />
+          <el-table-column
+            label="鍚堟牸鍐荤粨鏁伴噺"
+            prop="qualifiedLockedQuantity"
+            show-overflow-tooltip
+          />
+          <el-table-column
+            label="涓嶅悎鏍煎喕缁撴暟閲�"
+            prop="unQualifiedLockedQuantity"
+            show-overflow-tooltip
+          />
+          <el-table-column
+            label="搴撳瓨棰勮鏁伴噺"
+            prop="warnNum"
+            show-overflow-tooltip
+          />
+          <el-table-column label="澶囨敞" prop="remark" show-overflow-tooltip />
+          <el-table-column
+            label="鏈�杩戞洿鏂版椂闂�"
+            prop="updateTime"
+            show-overflow-tooltip
+          />
+          <el-table-column fixed="right" label="鎿嶄綔" min-width="180" align="center">
+            <template #default="scope">
+              <el-button
+                link
+                type="primary"
+                @click="handleSubtract(scope.row)"
+                :disabled="
+                  (scope.row.qualifiedUnLockedQuantity || 0) +
+                    (scope.row.qualifiedPendingOutQuantity || 0) <=
+                    0 &&
+                  (scope.row.unQualifiedUnLockedQuantity || 0) +
+                    (scope.row.unQualifiedPendingOutQuantity || 0) <=
+                    0
+                "
+                >棰嗙敤</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                v-if="
+                  scope.row.unQualifiedUnLockedQuantity > 0 ||
+                  scope.row.qualifiedUnLockedQuantity > 0
+                "
+                @click="handleFrozen(scope.row)"
+                >鍐荤粨</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                v-if="
+                  scope.row.qualifiedLockedQuantity > 0 ||
+                  scope.row.unQualifiedLockedQuantity > 0
+                "
+                @click="handleThaw(scope.row)"
+                >瑙e喕</el-button
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        layout="total, sizes, prev, pager, next, jumper"
+        :page="page.current"
+        :limit="page.size"
+        @pagination="paginationChange"
+      />
+    </div>
+  </el-dialog>
+</template>
+
+<script setup>
+import pagination from "@/components/PIMTable/Pagination.vue";
+import { computed, reactive, ref, watch } from "vue";
+import { getStockInventoryBatchNoQty } from "@/api/inventoryManagement/stockInventory.js";
+
+const props = defineProps({
+  visible: {
+    type: Boolean,
+    required: true,
+  },
+  record: {
+    type: Object,
+    default: () => ({}),
+  },
+});
+
+const emit = defineEmits(["update:visible", "subtract", "frozen", "thaw"]);
+
+const isShow = computed({
+  get() {
+    return props.visible;
+  },
+  set(val) {
+    emit("update:visible", val);
+  },
+});
+
+const tableData = ref([]);
+const tableLoading = ref(false);
+const total = ref(0);
+const page = reactive({
+  current: 1,
+  size: 20,
+});
+
+const getList = () => {
+  if (!props.record?.productId || !props.record?.productModelId) {
+    tableData.value = [];
+    total.value = 0;
+    return;
+  }
+
+  tableLoading.value = true;
+  getStockInventoryBatchNoQty({
+    current: page.current,
+    size: page.size,
+    productId: props.record.productId,
+    productModelId: props.record.productModelId,
+  })
+    .then((res) => {
+      tableData.value = res.data?.records || [];
+      total.value = res.data?.total || 0;
+    })
+    .finally(() => {
+      tableLoading.value = false;
+    });
+};
+
+const paginationChange = (obj) => {
+  page.current = obj.page;
+  page.size = obj.limit;
+  getList();
+};
+
+const handleSubtract = (row) => {
+  emit("subtract", row);
+};
+
+const handleFrozen = (row) => {
+  emit("frozen", row);
+};
+
+const handleThaw = (row) => {
+  emit("thaw", row);
+};
+
+const closeModal = () => {
+  isShow.value = false;
+  page.current = 1;
+  page.size = 20;
+  tableData.value = [];
+  total.value = 0;
+};
+
+watch(
+  () => props.visible,
+  (visible) => {
+    if (!visible) {
+      return;
+    }
+    page.current = 1;
+    getList();
+  },
+  { immediate: true }
+);
+</script>
+
+<style scoped lang="scss">
+.detail-content {
+  display: flex;
+  flex-direction: column;
+  height: calc(100vh - 170px);
+  min-height: 520px;
+}
+
+.detail-table-wrapper {
+  flex: 1;
+  min-height: 0;
+}
+
+:deep(.batch-no-qty-detail-dialog .el-dialog) {
+  max-width: calc(100vw - 48px);
+}
+
+:deep(.batch-no-qty-detail-dialog .el-dialog__body) {
+  padding-top: 12px;
+}
+</style>
diff --git a/src/views/inventoryManagement/stockManagement/Record.vue b/src/views/inventoryManagement/stockManagement/Record.vue
index 7c0a461..3b532f8 100644
--- a/src/views/inventoryManagement/stockManagement/Record.vue
+++ b/src/views/inventoryManagement/stockManagement/Record.vue
@@ -3,143 +3,233 @@
     <div class="search_form mb10">
       <div>
         <span class="search_title ml10">浜у搧澶х被锛�</span>
-        <el-input v-model="searchForm.productName"
-                  style="width: 240px"
-                  placeholder="璇疯緭鍏�"
-                  clearable/>
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
+        <el-input
+          v-model="searchForm.productName"
+          style="width: 240px"
+          placeholder="璇疯緭鍏�"
+          clearable
+        />
+        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
+          >鎼滅储</el-button
+        >
       </div>
       <div>
-         <el-button type="primary" @click="isShowNewModal = true">鏂板搴撳瓨</el-button>
-        <el-button type="info" plain icon="Upload" @click="isShowImportModal = true">
+        <el-button type="primary" @click="isShowNewModal = true"
+          >鏂板搴撳瓨</el-button
+        >
+        <el-button
+          type="info"
+          plain
+          icon="Upload"
+          @click="isShowImportModal = true"
+        >
           瀵煎叆搴撳瓨
         </el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
       </div>
     </div>
     <div class="table_list">
-      <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
-        :expand-row-keys="expandedRowKeys" :row-key="(row, index) => index" style="width: 100%"
-        :row-class-name="tableRowClassName" height="calc(100vh - 18.5em)">
+      <el-table
+        :data="tableData"
+        border
+        v-loading="tableLoading"
+        @selection-change="handleSelectionChange"
+        :expand-row-keys="expandedRowKeys"
+        :row-key="(row, index) => index"
+        style="width: 100%"
+        :row-class-name="tableRowClassName"
+        height="calc(100vh - 18.5em)"
+      >
         <el-table-column align="center" type="selection" width="55" />
         <el-table-column align="center" label="搴忓彿" type="index" width="60" />
-        <el-table-column label="浜у搧澶х被" prop="productName" show-overflow-tooltip />
+        <el-table-column
+          label="浜у搧鍚嶇О"
+          prop="productName"
+          show-overflow-tooltip
+        />
         <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
         <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
         <el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
-        <el-table-column label="鍚堟牸搴撳瓨鏁伴噺" prop="qualifiedQuantity" show-overflow-tooltip />
-        <el-table-column label="涓嶅悎鏍煎簱瀛樻暟閲�" prop="unQualifiedQuantity" show-overflow-tooltip />
-        <el-table-column label="鍚堟牸鍐荤粨鏁伴噺" prop="qualifiedLockedQuantity" show-overflow-tooltip />
-        <el-table-column label="涓嶅悎鏍煎喕缁撴暟閲�" prop="unQualifiedLockedQuantity" show-overflow-tooltip />
-        <el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum"  show-overflow-tooltip />
-        <el-table-column label="澶囨敞" prop="remark"  show-overflow-tooltip />
-        <el-table-column label="鏈�杩戞洿鏂版椂闂�" prop="updateTime" show-overflow-tooltip />
-        <el-table-column fixed="right" label="鎿嶄綔" min-width="90" align="center">
+        <el-table-column
+          label="鍚堟牸搴撳瓨鏁伴噺"
+          prop="qualifiedQuantity"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="涓嶅悎鏍煎簱瀛樻暟閲�"
+          prop="unQualifiedQuantity"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="鍚堟牸鍐荤粨鏁伴噺"
+          prop="qualifiedLockedQuantity"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="涓嶅悎鏍煎喕缁撴暟閲�"
+          prop="unQualifiedLockedQuantity"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="搴撳瓨棰勮鏁伴噺"
+          prop="warnNum"
+          show-overflow-tooltip
+        />
+        <el-table-column label="澶囨敞" prop="remark" show-overflow-tooltip />
+        <el-table-column
+          label="鏈�杩戞洿鏂版椂闂�"
+          prop="updateTime"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          fixed="right"
+          label="鎿嶄綔"
+          min-width="80"
+          align="center"
+        >
           <template #default="scope">
-            <el-button link type="primary" @click="showSubtractModal(scope.row)" :disabled="((scope.row.qualifiedUnLockedQuantity || 0) + (scope.row.qualifiedPendingOutQuantity || 0) <= 0) && ((scope.row.unQualifiedUnLockedQuantity || 0) + (scope.row.unQualifiedPendingOutQuantity || 0) <= 0)">棰嗙敤</el-button>
-            <el-button link type="primary" v-if="scope.row.unQualifiedUnLockedQuantity > 0 || scope.row.qualifiedUnLockedQuantity > 0" @click="showFrozenModal(scope.row)">鍐荤粨</el-button>
-            <el-button link type="primary" v-if="scope.row.qualifiedLockedQuantity > 0 || scope.row.unQualifiedLockedQuantity > 0" @click="showThawModal(scope.row)">瑙e喕</el-button>
+            <el-button
+              link
+              type="primary"
+              @click="showDetailModal(scope.row)"
+              >璇︽儏</el-button
+            >
           </template>
         </el-table-column>
       </el-table>
-      <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
-        :page="page.current" :limit="page.size" @pagination="paginationChange" />
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        layout="total, sizes, prev, pager, next, jumper"
+        :page="page.current"
+        :limit="page.size"
+        @pagination="paginationChange"
+      />
     </div>
-    <new-stock-inventory v-if="isShowNewModal"
-                 v-model:visible="isShowNewModal"
-                 :top-product-parent-id="props.productId"
-                 @completed="handleQuery" />
+    <batch-no-qty-detail
+      v-if="isShowDetailModal"
+      v-model:visible="isShowDetailModal"
+      :record="record"
+      @subtract="handleDetailSubtract"
+      @frozen="handleDetailFrozen"
+      @thaw="handleDetailThaw"
+    />
+    <new-stock-inventory
+      v-if="isShowNewModal"
+      v-model:visible="isShowNewModal"
+      :top-product-parent-id="props.productId"
+      @completed="handleQuery"
+    />
 
-    <subtract-stock-inventory v-if="isShowSubtractModal"
-                 v-model:visible="isShowSubtractModal"
-                 :record="record"
-                 :type="record.stockType"
-                 @completed="handleQuery" />
+    <subtract-stock-inventory
+      v-if="isShowSubtractModal"
+      v-model:visible="isShowSubtractModal"
+      :record="record"
+      :type="record.stockType"
+      @completed="handleQuery"
+    />
     <!-- 瀵煎叆搴撳瓨-->
-    <import-stock-inventory v-if="isShowImportModal"
-                 v-model:visible="isShowImportModal"
-                 type="qualified"
-                 @uploadSuccess="handleQuery" />
+    <import-stock-inventory
+      v-if="isShowImportModal"
+      v-model:visible="isShowImportModal"
+      type="qualified"
+      @uploadSuccess="handleQuery"
+    />
     <!-- 鍐荤粨/瑙e喕搴撳瓨-->
-    <frozen-and-thaw-stock-inventory v-if="isShowFrozenAndThawModal"
-                 v-model:visible="isShowFrozenAndThawModal"
-                 :record="record"
-                 :operation-type="operationType"
-                 :type="record.stockType"
-                 @completed="handleQuery" />
+    <frozen-and-thaw-stock-inventory
+      v-if="isShowFrozenAndThawModal"
+      v-model:visible="isShowFrozenAndThawModal"
+      :record="record"
+      :operation-type="operationType"
+      :type="record.stockType"
+      @completed="handleQuery"
+    />
   </div>
 </template>
 
 <script setup>
-import pagination from '@/components/PIMTable/Pagination.vue'
-import { ref, reactive, toRefs, onMounted, getCurrentInstance } from 'vue'
-import {ElMessage, ElMessageBox} from "element-plus";
-import {
-  getStockInventoryListPageCombined
-} from "@/api/inventoryManagement/stockInventory.js";
+import pagination from "@/components/PIMTable/Pagination.vue";
+import { ref, reactive, toRefs, onMounted, getCurrentInstance } from "vue";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { getStockInventoryListPageCombined } from "@/api/inventoryManagement/stockInventory.js";
 const props = defineProps({
   productId: {
     type: Number,
     required: true,
-    default: 0
-  }
+    default: 0,
+  },
 });
 
-const NewStockInventory = defineAsyncComponent(() => import("@/views/inventoryManagement/stockManagement/New.vue"));
-const SubtractStockInventory = defineAsyncComponent(() => import("@/views/inventoryManagement/stockManagement/Subtract.vue"));
-const ImportStockInventory = defineAsyncComponent(() => import("@/views/inventoryManagement/stockManagement/Import.vue"));
-const FrozenAndThawStockInventory = defineAsyncComponent(() => import("@/views/inventoryManagement/stockManagement/FrozenAndThaw.vue"));
-const { proxy } = getCurrentInstance()
-const tableData = ref([])
-const selectedRows = ref([])
-const record = ref({})
-const tableLoading = ref(false)
+const NewStockInventory = defineAsyncComponent(() =>
+  import("@/views/inventoryManagement/stockManagement/New.vue")
+);
+const SubtractStockInventory = defineAsyncComponent(() =>
+  import("@/views/inventoryManagement/stockManagement/Subtract.vue")
+);
+const ImportStockInventory = defineAsyncComponent(() =>
+  import("@/views/inventoryManagement/stockManagement/Import.vue")
+);
+const FrozenAndThawStockInventory = defineAsyncComponent(() =>
+  import("@/views/inventoryManagement/stockManagement/FrozenAndThaw.vue")
+);
+const BatchNoQtyDetail = defineAsyncComponent(() =>
+  import("@/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue")
+);
+const { proxy } = getCurrentInstance();
+const tableData = ref([]);
+const selectedRows = ref([]);
+const record = ref({});
+const tableLoading = ref(false);
 const page = reactive({
   current: 1,
   size: 100,
-})
-const total = ref(0)
+});
+const total = ref(0);
 // 鏄惁鏄剧ず鏂板寮规
-const isShowNewModal = ref(false)
+const isShowNewModal = ref(false);
 // 鏄惁鏄剧ず棰嗙敤寮规
-const isShowSubtractModal = ref(false)
+const isShowSubtractModal = ref(false);
 // 鏄惁鏄剧ず鍐荤粨/瑙e喕寮规
-const isShowFrozenAndThawModal = ref(false)
+const isShowFrozenAndThawModal = ref(false);
+// 鏄惁鏄剧ず璇︽儏寮规
+const isShowDetailModal = ref(false);
 // 鎿嶄綔绫诲瀷
-const operationType = ref('frozen')
+const operationType = ref("frozen");
 // 鏄惁鏄剧ず瀵煎叆寮规
-const isShowImportModal = ref(false)
+const isShowImportModal = ref(false);
 const data = reactive({
   searchForm: {
-    productName: '',
+    productName: "",
     topParentProductId: props.productId,
-  }
-})
-const { searchForm } = toRefs(data)
+  },
+});
+const { searchForm } = toRefs(data);
 
 // 鏌ヨ鍒楄〃
 /** 鎼滅储鎸夐挳鎿嶄綔 */
 const handleQuery = () => {
-  page.current = 1
-  getList()
-}
+  page.current = 1;
+  getList();
+};
 const paginationChange = (obj) => {
   page.current = obj.page;
   page.size = obj.limit;
-  getList()
-}
+  getList();
+};
 const getList = () => {
-  tableLoading.value = true
-  getStockInventoryListPageCombined({ ...searchForm.value, ...page }).then(res => {
-    tableLoading.value = false
-    tableData.value = res.data.records
-    total.value = res.data.total
-    // 鏁版嵁鍔犺浇瀹屾垚鍚庢鏌ュ簱瀛�
-    // checkStockAndCreatePurchase();
-  }).catch(() => {
-    tableLoading.value = false
-  })
-}
+  tableLoading.value = true;
+  getStockInventoryListPageCombined({ ...searchForm.value, ...page })
+    .then((res) => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      total.value = res.data.total;
+      // 鏁版嵁鍔犺浇瀹屾垚鍚庢鏌ュ簱瀛�
+      // checkStockAndCreatePurchase();
+    })
+    .catch(() => {
+      tableLoading.value = false;
+    });
+};
 
 const handleFileSuccess = (response) => {
   const { code, msg } = response;
@@ -154,61 +244,89 @@
 
 // 鐐瑰嚮棰嗙敤
 const showSubtractModal = (row) => {
-  record.value = row
-  isShowSubtractModal.value = true
-}
+  record.value = row;
+  isShowSubtractModal.value = true;
+};
+
+// 鐐瑰嚮璇︽儏
+const showDetailModal = (row) => {
+  if (!row?.productId || !row?.productModelId) {
+    proxy.$modal.msgError("褰撳墠鏁版嵁缂哄皯浜у搧ID鎴栬鏍煎瀷鍙稩D");
+    return;
+  }
+  record.value = row;
+  isShowDetailModal.value = true;
+};
+
+const handleDetailSubtract = (row) => {
+  isShowDetailModal.value = false;
+  showSubtractModal(row);
+};
+
+const handleDetailFrozen = (row) => {
+  isShowDetailModal.value = false;
+  showFrozenModal(row);
+};
+
+const handleDetailThaw = (row) => {
+  isShowDetailModal.value = false;
+  showThawModal(row);
+};
 
 // 鐐瑰嚮鍐荤粨
 const showFrozenModal = (row) => {
-  record.value = row
-  isShowFrozenAndThawModal.value = true
-  operationType.value = 'frozen'
-}
+  record.value = row;
+  isShowFrozenAndThawModal.value = true;
+  operationType.value = "frozen";
+};
 
 // 鐐瑰嚮瑙e喕
 const showThawModal = (row) => {
-  record.value = row
-  isShowFrozenAndThawModal.value = true
-  operationType.value = 'thaw'
-}
+  record.value = row;
+  isShowFrozenAndThawModal.value = true;
+  operationType.value = "thaw";
+};
 
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = (selection) => {
   // 杩囨护鎺夊瓙鏁版嵁
-  selectedRows.value = selection.filter(item => item.id);
-  console.log('selection', selectedRows.value)
-}
-const expandedRowKeys = ref([])
+  selectedRows.value = selection.filter((item) => item.id);
+  console.log("selection", selectedRows.value);
+};
+const expandedRowKeys = ref([]);
 
 // 琛ㄦ牸琛岀被鍚�
 const tableRowClassName = ({ row }) => {
   const stock = Number(row?.qualifiedUnLockedQuantity ?? 0);
   const warn = Number(row?.warnNum ?? 0);
   if (!Number.isFinite(stock) || !Number.isFinite(warn)) {
-    return '';
+    return "";
   }
-  return stock < warn ? 'row-low-stock' : '';
+  return stock < warn ? "row-low-stock" : "";
 };
 
 // 瀵煎嚭
 const handleOut = () => {
-  ElMessageBox.confirm(
-    '鏄惁纭瀵煎嚭锛�',
-    '瀵煎嚭', {
-    confirmButtonText: '纭',
-    cancelButtonText: '鍙栨秷',
-    type: 'warning',
-  }
-  ).then(() => {
-    proxy.download("/stockInventory/exportStockInventory", {topParentProductId: props.productId}, '搴撳瓨淇℃伅.xlsx')
-  }).catch(() => {
-    proxy.$modal.msg("宸插彇娑�")
+  ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
   })
-}
+    .then(() => {
+      proxy.download(
+        "/stockInventory/exportStockInventory",
+        { topParentProductId: props.productId },
+        "搴撳瓨淇℃伅.xlsx"
+      );
+    })
+    .catch(() => {
+      proxy.$modal.msg("宸插彇娑�");
+    });
+};
 
 onMounted(() => {
-  getList()
-})
+  getList();
+});
 </script>
 
 <style scoped lang="scss">
diff --git a/src/views/safeProduction/safeWorkApproval/components/infoFormDia.vue b/src/views/safeProduction/safeWorkApproval/components/infoFormDia.vue
index a0146ba..86acdf8 100644
--- a/src/views/safeProduction/safeWorkApproval/components/infoFormDia.vue
+++ b/src/views/safeProduction/safeWorkApproval/components/infoFormDia.vue
@@ -218,7 +218,7 @@
       approveDeptName: "",
       approveReason: "",
       checkResult: "",
-      storageBlobDTOs: [],
+      storageBlobDTOS: [],
       approverList: [], // 鏂板瀛楁锛屽瓨鍌ㄦ墍鏈夎妭鐐圭殑瀹℃壒浜篿d
       startDate: "", // 璇峰亣寮�濮嬫椂闂�
       endDate: "", // 璇峰亣缁撴潫鏃堕棿
@@ -298,7 +298,7 @@
       approveProcessGetInfo({ id: row.approveId, approveReason: "1" }).then(
         res => {
           form.value = { ...res.data };
-          form.value.storageBlobDTOs = res.data.storageBlobVOS;
+          form.value.storageBlobDTOS = res.data.storageBlobVOS;
           // 鍙嶆樉瀹℃壒浜�
           if (res.data && res.data.approveUserIds) {
             const userIds = res.data.approveUserIds.split(",");
@@ -388,7 +388,7 @@
         return;
       }
     }
-    form.value.storageBlobDTOs = fileList.value;
+    form.value.storageBlobDTOS = fileList.value;
     proxy.$refs.formRef.validate(valid => {
       if (valid) {
         if (operationType.value === "add" || currentApproveStatus.value == 3) {
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 775a392..a4ebbdf 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -1578,7 +1578,7 @@
     selectedQuotation.value = null;
     let userLists = await userListNoPage();
     userList.value = userLists.data;
-    listCustomer({ current: -1, size: -1 }).then(res => {
+    listCustomer({ current: -1, size: -1, type: 0 }).then(res => {
       customerOption.value = res.data.records;
     });
     form.value.entryPerson = userStore.id;
@@ -2654,7 +2654,7 @@
 
     // 鍙戣揣鐘舵�佸繀椤绘槸"寰呭彂璐�"鎴�"瀹℃牳鎷掔粷"
     const statusStr = shippingStatus ? String(shippingStatus).trim() : "";
-    return statusStr === "寰呭彂璐�" || statusStr === "瀹℃牳鎷掔粷";
+    return statusStr === "寰呭彂璐�" || statusStr === "瀹℃牳鎷掔粷" || statusStr === "閮ㄥ垎鍙戣揣";
   };
 
   // 鎵撳紑闄勪欢寮圭獥

--
Gitblit v1.9.3