From 1cdf9630e1f3c7040b9fd8be71d92ab946c1cdd6 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 08 六月 2026 10:34:16 +0800
Subject: [PATCH] Merge branch 'dev_NEW_pro' of http://114.132.189.42:9002/r/product-inventory-management into dev_宁夏_万通新型

---
 src/views/procurementManagement/qualityInspection/index.vue                                    |   16 
 multiple/config.json                                                                           |   85 +++++
 src/views/procurementManagement/purchaseOrder/index.vue                                        |   15 
 multiple/assets/favicon/XLGSfavicon.ico                                                        |    0 
 src/api/procurementManagement/procurementLedger.js                                             |   70 ++-
 src/views/basicData/parameterMaintenance/index.vue                                             |   14 
 multiple/assets/favicon/QFSWfavicon.ico                                                        |    0 
 src/views/salesManagement/salesLedger/index.vue                                                |   26 
 multiple/assets/favicon/RFSYfavicon.ico                                                        |    0 
 src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue |  123 +++++++
 src/views/productManagement/productIdentifier/index.vue                                        |   11 
 src/views/collaborativeApproval/sealManagement/index.vue                                       |   94 +++--
 multiple/assets/logo/DCHXLogo.png                                                              |    0 
 multiple/assets/logo/ZDJCLogo.png                                                              |    0 
 src/views/procurementManagement/procurementPlan/index.vue                                      |   13 
 multiple/assets/logo/QFSWLogo.png                                                              |    0 
 src/views/financialManagement/assets/intangibleAssets.vue                                      |   11 
 multiple/assets/favicon/RFSYLogo.png                                                           |    0 
 src/views/safeProduction/safetyTrainingAssessment/index.vue                                    |   11 
 src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/DetailPanel.vue  |    4 
 src/layout/components/Sidebar/SidebarItem.vue                                                  |  107 +++--
 multiple/assets/logo/YSSLogo.png                                                               |    0 
 multiple/assets/favicon/DCHXfavicon.ico                                                        |    0 
 multiple/assets/favicon/ZDJCfavicon.ico                                                        |    0 
 multiple/assets/logo/XHKSLogo.png                                                              |    0 
 src/views/officeProcessAutomation/ApproveManage/approve-list/index.vue                         |    7 
 multiple/assets/favicon/HTHBfavicon.ico                                                        |    0 
 src/assets/styles/sidebar.scss                                                                 |   37 +-
 multiple/assets/logo/LSYLogo.png                                                               |    0 
 src/views/financialManagement/receivable/receipt.vue                                           |   12 
 multiple/assets/favicon/XHKSfavicon.ico                                                        |    0 
 src/views/financialManagement/receivable/invoiceApply.vue                                      |   12 
 multiple/assets/favicon/LSYfavicon.ico                                                         |    0 
 multiple/assets/logo/HTHBLogo.png                                                              |    0 
 src/views/financialManagement/assets/fixedAssets.vue                                           |   11 
 src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js         |   15 
 src/views/financialManagement/payable/paymentApply.vue                                         |   22 +
 src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js                 |   78 ++++
 src/views/procurementManagement/procurementLedger/index.vue                                    |   35 ++
 src/views/productionPlan/productionPlan/index.vue                                              |   22 +
 multiple/assets/logo/XLGSLogo.png                                                              |    0 
 src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js           |    3 
 multiple/assets/favicon/YSSfavicon.ico                                                         |    0 
 multiple/assets/logo/RFSYLogo.png                                                              |    0 
 src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue                     |   73 +++-
 45 files changed, 720 insertions(+), 207 deletions(-)

diff --git a/multiple/assets/favicon/DCHXfavicon.ico b/multiple/assets/favicon/DCHXfavicon.ico
new file mode 100644
index 0000000..e99ff53
--- /dev/null
+++ b/multiple/assets/favicon/DCHXfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/HTHBfavicon.ico b/multiple/assets/favicon/HTHBfavicon.ico
new file mode 100644
index 0000000..01a5e9a
--- /dev/null
+++ b/multiple/assets/favicon/HTHBfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/LSYfavicon.ico b/multiple/assets/favicon/LSYfavicon.ico
new file mode 100644
index 0000000..8710d1a
--- /dev/null
+++ b/multiple/assets/favicon/LSYfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/QFSWfavicon.ico b/multiple/assets/favicon/QFSWfavicon.ico
new file mode 100644
index 0000000..79ac2a8
--- /dev/null
+++ b/multiple/assets/favicon/QFSWfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/RFSYLogo.png b/multiple/assets/favicon/RFSYLogo.png
new file mode 100644
index 0000000..d9eaab1
--- /dev/null
+++ b/multiple/assets/favicon/RFSYLogo.png
Binary files differ
diff --git a/multiple/assets/favicon/RFSYfavicon.ico b/multiple/assets/favicon/RFSYfavicon.ico
new file mode 100644
index 0000000..ef5b5d3
--- /dev/null
+++ b/multiple/assets/favicon/RFSYfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/XHKSfavicon.ico b/multiple/assets/favicon/XHKSfavicon.ico
new file mode 100644
index 0000000..01a1259
--- /dev/null
+++ b/multiple/assets/favicon/XHKSfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/XLGSfavicon.ico b/multiple/assets/favicon/XLGSfavicon.ico
new file mode 100644
index 0000000..75963b9
--- /dev/null
+++ b/multiple/assets/favicon/XLGSfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/YSSfavicon.ico b/multiple/assets/favicon/YSSfavicon.ico
new file mode 100644
index 0000000..924e94a
--- /dev/null
+++ b/multiple/assets/favicon/YSSfavicon.ico
Binary files differ
diff --git a/multiple/assets/favicon/ZDJCfavicon.ico b/multiple/assets/favicon/ZDJCfavicon.ico
new file mode 100644
index 0000000..ca5d236
--- /dev/null
+++ b/multiple/assets/favicon/ZDJCfavicon.ico
Binary files differ
diff --git a/multiple/assets/logo/DCHXLogo.png b/multiple/assets/logo/DCHXLogo.png
new file mode 100644
index 0000000..da7d2f2
--- /dev/null
+++ b/multiple/assets/logo/DCHXLogo.png
Binary files differ
diff --git a/multiple/assets/logo/HTHBLogo.png b/multiple/assets/logo/HTHBLogo.png
new file mode 100644
index 0000000..2106015
--- /dev/null
+++ b/multiple/assets/logo/HTHBLogo.png
Binary files differ
diff --git a/multiple/assets/logo/LSYLogo.png b/multiple/assets/logo/LSYLogo.png
new file mode 100644
index 0000000..a4eeb9b
--- /dev/null
+++ b/multiple/assets/logo/LSYLogo.png
Binary files differ
diff --git a/multiple/assets/logo/QFSWLogo.png b/multiple/assets/logo/QFSWLogo.png
new file mode 100644
index 0000000..e1db2cc
--- /dev/null
+++ b/multiple/assets/logo/QFSWLogo.png
Binary files differ
diff --git a/multiple/assets/logo/RFSYLogo.png b/multiple/assets/logo/RFSYLogo.png
new file mode 100644
index 0000000..d9eaab1
--- /dev/null
+++ b/multiple/assets/logo/RFSYLogo.png
Binary files differ
diff --git a/multiple/assets/logo/XHKSLogo.png b/multiple/assets/logo/XHKSLogo.png
new file mode 100644
index 0000000..c09746f
--- /dev/null
+++ b/multiple/assets/logo/XHKSLogo.png
Binary files differ
diff --git a/multiple/assets/logo/XLGSLogo.png b/multiple/assets/logo/XLGSLogo.png
new file mode 100644
index 0000000..a787fd2
--- /dev/null
+++ b/multiple/assets/logo/XLGSLogo.png
Binary files differ
diff --git a/multiple/assets/logo/YSSLogo.png b/multiple/assets/logo/YSSLogo.png
new file mode 100644
index 0000000..260cffd
--- /dev/null
+++ b/multiple/assets/logo/YSSLogo.png
Binary files differ
diff --git a/multiple/assets/logo/ZDJCLogo.png b/multiple/assets/logo/ZDJCLogo.png
new file mode 100644
index 0000000..4fe753c
--- /dev/null
+++ b/multiple/assets/logo/ZDJCLogo.png
Binary files differ
diff --git a/multiple/config.json b/multiple/config.json
index c5c07f9..776957e 100644
--- a/multiple/config.json
+++ b/multiple/config.json
@@ -87,6 +87,15 @@
     "logo": "logo/CKGMLogo.png",
     "favicon": "favicon/CKGMfavicon.ico"
   },
+  "RFSY": {
+    "env": {
+      "VITE_APP_TITLE": "鐟炰赴鐩涗笟绠$悊绯荤粺",
+      "VITE_BASE_API": "http://1.15.17.182:9076",
+      "VITE_JAVA_API": "http://1.15.17.182:9075"
+    },
+    "logo": "logo/RFSYLogo.png",
+    "favicon": "favicon/RFSYfavicon.ico"
+  },
   "ZQSY": {
     "env": {
       "VITE_APP_TITLE": "娉芥穱瀹炰笟",
@@ -159,6 +168,62 @@
     "logo": "logo/XCDQLogo.png",
     "favicon": "favicon/XCDQfavicon.ico"
   },
+  "XHKS": {
+    "env": {
+      "VITE_APP_TITLE": "閼摟鐭垮北绠$悊绯荤粺",
+      "VITE_BASE_API": "http://36.133.45.183:9078",
+      "VITE_JAVA_API": "http://36.133.45.183:9077"
+    },
+    "logo": "logo/XHKSLogo.png",
+    "favicon": "favicon/XHKSfavicon.ico"
+  },
+  "QFSW": {
+    "env": {
+      "VITE_APP_TITLE": "涔句赴鐢熺墿绠$悊绯荤粺",
+      "VITE_BASE_API": "http://36.133.45.183:9080",
+      "VITE_JAVA_API": "http://36.133.45.183:9079"
+    },
+    "logo": "logo/QFSWLogo.png",
+    "favicon": "favicon/QFSWfavicon.ico"
+  },
+  "ZDJC": {
+    "env": {
+      "VITE_APP_TITLE": "姝e痉鏂板瀷寤烘潗绠$悊绯荤粺",
+      "VITE_BASE_API": "http://36.133.45.183:9082",
+      "VITE_JAVA_API": "http://36.133.45.183:9081"
+    },
+    "logo": "logo/ZDJCLogo.png",
+    "favicon": "favicon/ZDJCfavicon.ico"
+  },
+
+  "LSY": {
+    "env": {
+      "VITE_APP_TITLE": "灞辫タ鏋楁槆鐒卞伐璐告湁闄愬叕鍙�",
+      "VITE_BASE_API": "http://36.133.45.183:9084",
+      "VITE_JAVA_API": "http://36.133.45.183:9083"
+    },
+    "logo": "logo/LSYLogo.png",
+    "favicon": "favicon/LSYfavicon.ico"
+  },
+  "HTHB": {
+    "env": {
+      "VITE_APP_TITLE": "灞辫タ瀹忚吘鏂板瀷鐜繚绉戞妧鏈夐檺璐d换鍏徃",
+      "VITE_BASE_API": "http://36.133.45.183:9090",
+      "VITE_JAVA_API": "http://36.133.45.183:9089"
+    },
+    "logo": "logo/HTHBLogo.png",
+    "favicon": "favicon/HTHBfavicon.ico"
+  },
+  "YSS": {
+    "env": {
+      "VITE_APP_TITLE": "灞辫タ缇跨鏅熷啘鐢熺墿绉戞妧鍙戝睍鏈夐檺鍏徃",
+      "VITE_BASE_API": "http://36.133.45.183:9086",
+      "VITE_JAVA_API": "http://36.133.45.183:9085"
+    },
+    "logo": "logo/YSSLogo.png",
+    "favicon": "favicon/YSSfavicon.ico"
+  },
+
   "KYHG": {
     "env": {
       "VITE_APP_TITLE": "灞辫タ鍧ゆ簮鍖栧伐鏈夐檺鍏徃",
@@ -177,6 +242,24 @@
     "logo": "logo/JXSMLogo.png",
     "favicon": "favicon/JXSMico.ico"
   },
+  "DCHX": {
+    "env": {
+      "VITE_APP_TITLE": "灞辫タ澶ф垚鍖栫氦鑲′唤鏈夐檺鍏徃",
+      "VITE_BASE_API": "http://36.134.76.148:9088",
+      "VITE_JAVA_API": "http://36.134.76.148:9087"
+    },
+    "logo": "logo/DCHXLogo.png",
+    "favicon": "favicon/DCHXfavicon.ico"
+  },
+  "XLGS": {
+    "env": {
+      "VITE_APP_TITLE": "闀挎不甯傞懌娴緵姘磋澶囨湁闄愬叕鍙�",
+      "VITE_BASE_API": "http://36.134.76.148:9092",
+      "VITE_JAVA_API": "http://36.134.76.148:9091"
+    },
+    "logo": "logo/XLGSLogo.png",
+    "favicon": "favicon/XLGSfavicon.ico"
+  },
   "logo": "/src/assets/logo/logo.png",
   "favicon": "/public/favicon.ico"
-}
\ No newline at end of file
+}
diff --git a/src/api/procurementManagement/procurementLedger.js b/src/api/procurementManagement/procurementLedger.js
index 49416d2..88f4ce0 100644
--- a/src/api/procurementManagement/procurementLedger.js
+++ b/src/api/procurementManagement/procurementLedger.js
@@ -74,53 +74,61 @@
   });
 }
 export function updateApprovalStatus(query) {
-    return request({
-        url: "/purchase/ledger/updateApprovalStatus",
-        method: "post",
-        data: query,
-    });
+  return request({
+    url: "/purchase/ledger/updateApprovalStatus",
+    method: "post",
+    data: query,
+  });
 }
 
 // 淇濆瓨閲囪喘妯℃澘
 export function addPurchaseTemplate(data) {
-    return request({
-        url: "/purchaseLedgerTemplate/add",
-        method: "post",
-        data: data,
-    });
+  return request({
+    url: "/purchaseLedgerTemplate/add",
+    method: "post",
+    data: data,
+  });
 }
 
 // 淇敼閲囪喘妯℃澘
 export function updatePurchaseTemplate(data) {
-    return request({
-        url: "/purchaseLedgerTemplate/update",
-        method: "post",
-        data: data,
-    });
+  return request({
+    url: "/purchaseLedgerTemplate/update",
+    method: "post",
+    data: data,
+  });
 }
 
 // 鏌ヨ閲囪喘妯℃澘
 export function getPurchaseTemplateList(query) {
-    return request({
-        url: "/purchase/ledger/getPurchaseTemplateList",
-        method: "get",
-        params: query,
-    });
+  return request({
+    url: "/purchase/ledger/getPurchaseTemplateList",
+    method: "get",
+    params: query,
+  });
 }
 
 // 鍒犻櫎閲囪喘妯℃澘
 export function delPurchaseTemplate(id) {
-    return request({
-        url: "/purchaseLedgerTemplate/delete",
-        method: "delete",
-        data: id,
-    });
+  return request({
+    url: "/purchaseLedgerTemplate/delete",
+    method: "delete",
+    data: id,
+  });
 }
 // 鏌ヨ閲囪喘璇︽儏
 export function getPurchaseByCode(id) {
-    return request({
-        url: "/purchase/ledger/getPurchaseByCode",
-        method: "get",
-        params: id,
-    });
-}
\ No newline at end of file
+  return request({
+    url: "/purchase/ledger/getPurchaseByCode",
+    method: "get",
+    params: id,
+  });
+}
+
+export function batchGeneratePurchaseInboundSteps(query) {
+  return request({
+    url: "/purchase/ledger/batchInsertPurchaseSteps",
+    method: "post",
+    data: query,
+  });
+}
diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss
index 685a0eb..5da0e59 100644
--- a/src/assets/styles/sidebar.scss
+++ b/src/assets/styles/sidebar.scss
@@ -216,33 +216,38 @@
     & .nest-menu .el-sub-menu > .el-sub-menu__title,
     & .el-sub-menu .el-menu-item {
       min-width: 0 !important;
-      width: calc(100% - 24px) !important;
-      margin: 0 12px 8px !important;
-      height: 46px;
-      line-height: 46px;
-      padding-left: 14px !important;
-      padding-right: 14px !important;
-      border-radius: 12px;
+      width: calc(100% - 32px) !important;
+      margin: 0 16px 6px !important;
+      height: 40px;
+      line-height: 40px;
+      padding-left: 12px !important;
+      padding-right: 12px !important;
+      border-radius: 8px;
       transition: all 0.24s ease;
       color: var(--sidebar-text);
-      border: 1px solid rgba(255, 255, 255, 0.06) !important;
-      background: linear-gradient(128deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.01));
+      border: none !important;
+      background: transparent;
+      font-size: 13px;
 
       &:hover {
-        background: linear-gradient(128deg, rgba(var(--el-color-primary-rgb, 37, 99, 235), 0.24), rgba(var(--el-color-primary-rgb, 37, 99, 235), 0.07)) !important;
-        border-color: rgba(var(--el-color-primary-rgb, 37, 99, 235), 0.3) !important;
-        transform: translateX(2px);
+        background: rgba(var(--el-color-primary-rgb, 37, 99, 235), 0.12) !important;
+        transform: translateX(4px);
       }
 
       &.is-active {
-        background: var(--menu-active-bg, linear-gradient(135deg, var(--el-color-primary), var(--el-color-primary-light-3))) !important;
-        background-size: 180% 180%;
+        background: rgba(var(--el-color-primary-rgb, 37, 99, 235), 0.85) !important;
         color: #fff !important;
         font-weight: 500;
-        box-shadow: var(--menu-active-glow, 0 10px 24px rgba(var(--el-color-primary-rgb, 37, 99, 235), 0.34));
-        animation: sidebarActiveFlow 4.6s ease infinite;
+        box-shadow: 0 4px 12px rgba(var(--el-color-primary-rgb, 37, 99, 235), 0.25);
       }
     }
+
+    // 瀛愯彍鍗曞鍣ㄦ牱寮� - 澧炲姞缂╄繘鍜岃瑙夊眰娆�
+    & .el-sub-menu .el-menu {
+      padding: 4px 0 8px;
+      margin-left: 8px;
+      border-left: 2px solid rgba(255, 255, 255, 0.08);
+    }
   }
 
   .hideSidebar {
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
index 003b489..3712c68 100644
--- a/src/layout/components/Sidebar/SidebarItem.vue
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -102,57 +102,70 @@
 </script>
 
 <style lang="scss" scoped>
-.sidebar-item-wrapper {
-  :deep(.menu-icon) {
-    width: 26px;
-    height: 26px;
-    margin-right: 12px;
-    display: inline-flex;
-    align-items: center;
-    justify-content: center;
-    flex-shrink: 0;
-    transition: color 0.2s ease;
-    color: var(--sidebar-text);
-    opacity: 0.88;
-  }
-  
-  :deep(.el-menu-item:hover .menu-icon),
-  :deep(.el-sub-menu__title:hover .menu-icon) {
-    color: #ffffff;
-    opacity: 1;
-  }
+.sidebar-item-wrapper {
+  :deep(.menu-icon) {
+    width: 26px;
+    height: 26px;
+    margin-right: 12px;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    flex-shrink: 0;
+    transition: color 0.2s ease;
+    color: var(--sidebar-text);
+    opacity: 0.88;
+  }
+  
+  :deep(.el-menu-item:hover .menu-icon),
+  :deep(.el-sub-menu__title:hover .menu-icon) {
+    color: #ffffff;
+    opacity: 1;
+  }
   
   :deep(.el-menu-item.is-active .menu-icon) {
     color: var(--menu-active-text) !important;
     opacity: 1;
   }
   
-  :deep(.menu-title) {
-    font-weight: 500;
-    transition: color 0.2s ease;
-    color: var(--sidebar-text);
-    opacity: 0.82;
-  }
-  
-  :deep(.el-menu-item:hover .menu-title),
-  :deep(.el-sub-menu__title:hover .menu-title) {
-    color: #ffffff;
-    opacity: 1;
-  }
-  
-  :deep(.el-menu-item.is-active .menu-title) {
-    color: var(--menu-active-text) !important;
-    opacity: 1;
-  }
-  
-  :deep(.nest-menu) {
-    .menu-icon {
-      width: 22px;
-      height: 22px;
-      margin-right: 10px;
-    }
-    
-    .menu-title { font-size: 13px; }
-  }
-}
+  :deep(.menu-title) {
+    font-weight: 500;
+    transition: color 0.2s ease;
+    color: var(--sidebar-text);
+    opacity: 0.82;
+  }
+  
+  :deep(.el-menu-item:hover .menu-title),
+  :deep(.el-sub-menu__title:hover .menu-title) {
+    color: #ffffff;
+    opacity: 1;
+  }
+  
+  :deep(.el-menu-item.is-active .menu-title) {
+    color: var(--menu-active-text) !important;
+    opacity: 1;
+  }
+  
+  :deep(.nest-menu) {
+    .menu-icon {
+      width: 18px;
+      height: 18px;
+      margin-right: 8px;
+      opacity: 0.7;
+    }
+    
+    .menu-title { 
+      font-size: 13px;
+      opacity: 0.85;
+    }
+    
+    .el-menu-item.is-active {
+      .menu-icon {
+        opacity: 1;
+      }
+      .menu-title {
+        opacity: 1;
+      }
+    }
+  }
+}
 </style>
diff --git a/src/views/basicData/parameterMaintenance/index.vue b/src/views/basicData/parameterMaintenance/index.vue
index bd73467..38ddd4f 100644
--- a/src/views/basicData/parameterMaintenance/index.vue
+++ b/src/views/basicData/parameterMaintenance/index.vue
@@ -84,7 +84,7 @@
         </el-form-item> -->
         <el-form-item label="鍒涘缓鏃堕棿"
                       prop="createTime">
-          <el-date-picker v-model="formData.createTime"
+          <el-date-picker v-model="formCreateTimeDate"
                           type="date"
                           placeholder="閫夋嫨鏃ユ湡"
                           value-format="YYYY-MM-DD"
@@ -215,7 +215,8 @@
 </template>
 
 <script setup>
-  import { onMounted, ref, reactive } from "vue";
+  import { onMounted, ref, reactive, computed } from "vue";
+  import dayjs from "dayjs";
   import {
     parameterListPage,
     addParameter,
@@ -369,6 +370,12 @@
         },
       },
     ],
+  });
+  const formCreateTimeDate = computed({
+    get: () => (formData.createTime ? String(formData.createTime).split(" ")[0] : ""),
+    set: (value) => {
+      formData.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+    },
   });
   // const productTypes = ref([]);
   const isEdit = ref(false);
@@ -528,7 +535,7 @@
     formData.unit = "";
     formData.remark = "";
     formData.isRequired = 0;
-    formData.createTime = new Date().toISOString().split("T")[0];
+    formData.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
     dialogVisible.value = true;
   };
 
@@ -547,6 +554,7 @@
     formData.remark = row.remark || "";
     formData.paramFormat = row.paramFormat || "";
     formData.isRequired = row.isRequired || 0;
+    formData.createTime = row.createTime || "";
     dialogVisible.value = true;
   };
 
diff --git a/src/views/collaborativeApproval/sealManagement/index.vue b/src/views/collaborativeApproval/sealManagement/index.vue
index 9d68848..a06f6d5 100644
--- a/src/views/collaborativeApproval/sealManagement/index.vue
+++ b/src/views/collaborativeApproval/sealManagement/index.vue
@@ -7,7 +7,6 @@
         </div>
       </template>
 
-      
    <!-- 鐢ㄥ嵃鐢宠绠$悊 -->
         <div class="tab-content">
             <el-row :gutter="20" class="mb-20 ">
@@ -45,7 +44,7 @@
               :isShowPagination="true"
               @pagination="paginationChange"
             />
-        </div> 
+        </div>
     </el-card>
 
     <!-- 鐢ㄥ嵃鐢宠瀵硅瘽妗� -->
@@ -177,6 +176,7 @@
 const sealFormRef = ref()
 const userList = ref([])
 const sealForm = reactive({
+  id: null,
   applicationNum: '',
   title: '',
   sealType: '',
@@ -241,9 +241,9 @@
 
 // 鐢ㄥ嵃鐢宠琛ㄦ牸鍒楅厤缃紙闇�鍦� getStatusText/getSealTypeText 绛変箣鍚庡畾涔夛級
 const sealTableColumn = ref([
-  { label: '鐢宠缂栧彿', prop: 'applicationNum',},
+  { label: '鐢宠缂栧彿', prop: 'applicationNum' },
   { label: '鐢宠鏍囬', prop: 'title', showOverflowTooltip: true },
-  { label: '鐢宠浜�', prop: 'createUserName', },
+  { label: '鐢宠浜�', prop: 'createUserName' },
   { label: '鎵�灞為儴闂�', prop: 'department', width: 150 },
   {
     label: '鐢ㄥ嵃绫诲瀷',
@@ -261,34 +261,38 @@
     formatData: (v) => getStatusText(v),
     formatType: (v) => getStatusType(v)
   },
+  { label: '瀹℃壒浜�', prop: 'approveUserName', width: 100 },
   {
     dataType: 'action',
     label: '鎿嶄綔',
-    width: 200,
+    width: 250,
     fixed: 'right',
     align: 'center',
     operation: [
       {
         name: '瀹℃壒',
         clickFun: (row) => approveSeal(row),
-        showHide: (row) => row.status === 'pending'
+        showHide: (row) => row.status === 'pending' && Number(userStore.id) === row.approveUserId
       },
       {
         name: '鎷掔粷',
         clickFun: (row) => rejectSeal(row),
-        showHide: (row) => row.status === 'pending'
+        showHide: (row) => row.status === 'pending' && Number(userStore.id) === row.approveUserId
       },
-			{ name: '璇︽儏', clickFun: (row) => viewSealDetail(row) }
+      {
+        name: '閲嶆柊鐢宠',
+        clickFun: (row) => reapplySeal(row),
+        showHide: (row) => row.status === 'rejected' && Number(userStore.id) === row.createUser
+      },
+      { name: '璇︽儏', clickFun: (row) => viewSealDetail(row) }
     ]
   }
 ])
 
 // 鎼滅储鍗扮珷鐢宠
 const searchSealApplications = () => {
-  page.current=1
+  page.current = 1
   getSealApplicationList()
-
-  // ElMessage.success('鎼滅储瀹屾垚')
 }
 // 閲嶇疆鍗扮珷鐢宠鎼滅储
 const resetSealSearch = () => {
@@ -297,37 +301,58 @@
   sealSearchForm.applicationNum = ''
   searchSealApplications()
 }
+
+// 閲嶆柊鐢宠鐢ㄥ嵃
+const reapplySeal = (row) => {
+  // 棰勫~琛ㄥ崟鏁版嵁
+  Object.assign(sealForm, {
+    id: row.id,
+    applicationNum: row.applicationNum,
+    title: row.title,
+    sealType: row.sealType,
+    reason: row.reason,
+    approveUserId: row.approveUserId,
+    urgency: row.urgency || 'normal',
+    status: 'pending',
+    storageBlobDTOs: row.storageBlobVOList || []
+  })
+  showSealApplyDialog.value = true
+}
+
 // 鎻愪氦鐢ㄥ嵃鐢宠
 const submitSealApplication = async () => {
   try {
     await sealFormRef.value.validate()
-    addSealApplication(sealForm).then(res => {
-      if(res.code == 200){
-        ElMessage.success('鐢宠鎻愪氦鎴愬姛')
+    const request = sealForm.id ? updateSealApplication : addSealApplication
+    request(sealForm).then(res => {
+      if (res.code == 200) {
+        ElMessage.success(sealForm.id ? '閲嶆柊鐢宠鎴愬姛' : '鐢宠鎻愪氦鎴愬姛')
         closeSealApplyDialog()
         getSealApplicationList()
         Object.assign(sealForm, {
-        applicationNum: '',
-        title: '',
-        sealType: '',
-        reason: '',
-        approveUserId: '',
-        urgency: 'normal',
-        status: 'pending',
-        storageBlobDTOs: []
-      })
+          id: null,
+          applicationNum: '',
+          title: '',
+          sealType: '',
+          reason: '',
+          approveUserId: '',
+          urgency: 'normal',
+          status: 'pending',
+          storageBlobDTOs: []
+        })
       }
     }).catch(err => {
       console.log(err.msg)
     })
-  
   } catch (error) {
   }
 }
+
 // 鍏抽棴鐢ㄥ嵃鐢宠瀵硅瘽妗�
 const closeSealApplyDialog = () => {
   // 娓呯┖琛ㄥ崟鏁版嵁
   Object.assign(sealForm, {
+    id: null,
     applicationNum: '',
     title: '',
     sealType: '',
@@ -383,7 +408,7 @@
   }).then(() => {
     row.status = 'approved'
     updateSealApplication(row).then(res => {
-      if(res.code == 200){
+      if (res.code == 200) {
         ElMessage.success('瀹℃壒閫氳繃')
         getSealApplicationList()
       }
@@ -399,8 +424,9 @@
     inputErrorMessage: '鎷掔粷鍘熷洜涓嶈兘涓虹┖'
   }).then(({ value }) => {
     row.status = 'rejected'
+    row.reason = value
     updateSealApplication(row).then(res => {
-      if(res.code == 200){
+      if (res.code == 200) {
         ElMessage.success('宸叉嫆缁濈敵璇�')
         getSealApplicationList()
       }
@@ -418,13 +444,13 @@
 const getSealApplicationList = async () => {
   tableLoading.value = true
   listSealApplication(page, sealSearchForm)
-  .then(res => {
-    sealApplications.value = res.data.records
-    page.total = res.data.total
-    tableLoading.value = false
-  }).catch(err => {
-    tableLoading.value = false
-  })
+    .then(res => {
+      sealApplications.value = res.data.records
+      page.total = res.data.total
+      tableLoading.value = false
+    }).catch(err => {
+      tableLoading.value = false
+    })
 }
 // 鍒嗛〉鍙樺寲澶勭悊
 const paginationChange = (obj) => {
@@ -491,4 +517,4 @@
 .attachment-table {
   border-radius: 4px;
 }
-</style>
+</style>
\ No newline at end of file
diff --git a/src/views/financialManagement/assets/fixedAssets.vue b/src/views/financialManagement/assets/fixedAssets.vue
index de0f8c8..95eb017 100644
--- a/src/views/financialManagement/assets/fixedAssets.vue
+++ b/src/views/financialManagement/assets/fixedAssets.vue
@@ -178,7 +178,7 @@
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
-              <el-date-picker v-model="form.createTime" type="date" placeholder="閫夋嫨鏃ユ湡" value-format="YYYY-MM-DD" style="width: 100%;" />
+              <el-date-picker v-model="createTimeDate" type="date" placeholder="閫夋嫨鏃ユ湡" value-format="YYYY-MM-DD" style="width: 100%;" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -196,6 +196,7 @@
 
 <script setup>
 import { ref, reactive, onMounted, computed } from "vue";
+import dayjs from "dayjs";
 import { ElMessage, ElMessageBox } from "element-plus";
 import FormDialog from "@/components/Dialog/FormDialog.vue";
 import {
@@ -270,6 +271,12 @@
 
 const form = reactive({
   ...createDefaultForm(),
+});
+const createTimeDate = computed({
+  get: () => (form.createTime ? String(form.createTime).split(" ")[0] : ""),
+  set: (value) => {
+    form.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+  },
 });
 
 const rules = {
@@ -371,7 +378,7 @@
   dialogTitle.value = "鏂板鍥哄畾璧勪骇";
   Object.assign(form, createDefaultForm(), {
     purchaseDate: new Date().toISOString().split('T')[0],
-    createTime: new Date().toISOString().split('T')[0],
+    createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
   });
   dialogVisible.value = true;
 };
diff --git a/src/views/financialManagement/assets/intangibleAssets.vue b/src/views/financialManagement/assets/intangibleAssets.vue
index 167ae6b..9aef2bf 100644
--- a/src/views/financialManagement/assets/intangibleAssets.vue
+++ b/src/views/financialManagement/assets/intangibleAssets.vue
@@ -168,7 +168,7 @@
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
-              <el-date-picker v-model="form.createTime" type="date" placeholder="閫夋嫨鏃ユ湡" value-format="YYYY-MM-DD" style="width: 100%;" />
+              <el-date-picker v-model="createTimeDate" type="date" placeholder="閫夋嫨鏃ユ湡" value-format="YYYY-MM-DD" style="width: 100%;" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -189,6 +189,7 @@
 
 <script setup>
 import { ref, reactive, onMounted, computed } from "vue";
+import dayjs from "dayjs";
 import { ElMessage, ElMessageBox } from "element-plus";
 import FormDialog from "@/components/Dialog/FormDialog.vue";
 import {
@@ -262,6 +263,12 @@
 
 const form = reactive({
   ...createDefaultForm(),
+});
+const createTimeDate = computed({
+  get: () => (form.createTime ? String(form.createTime).split(" ")[0] : ""),
+  set: (value) => {
+    form.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+  },
 });
 
 const rules = {
@@ -369,7 +376,7 @@
   dialogTitle.value = "鏂板鏃犲舰璧勪骇";
   Object.assign(form, createDefaultForm(), {
     acquisitionDate: new Date().toISOString().split('T')[0],
-    createTime: new Date().toISOString().split('T')[0],
+    createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
   });
   dialogVisible.value = true;
 };
diff --git a/src/views/financialManagement/payable/paymentApply.vue b/src/views/financialManagement/payable/paymentApply.vue
index b83eb58..e34793f 100644
--- a/src/views/financialManagement/payable/paymentApply.vue
+++ b/src/views/financialManagement/payable/paymentApply.vue
@@ -160,7 +160,7 @@
           <el-col :span="12">
             <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
               <el-date-picker
-                v-model="form.createTime"
+                v-model="formCreateTimeDate"
                 type="date"
                 placeholder="閫夋嫨鏃ユ湡"
                 value-format="YYYY-MM-DD"
@@ -260,7 +260,7 @@
           <el-col :span="12">
             <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
               <el-date-picker
-                v-model="paymentForm.createTime"
+                v-model="paymentFormCreateTimeDate"
                 type="date"
                 placeholder="閫夋嫨鏃ユ湡"
                 value-format="YYYY-MM-DD"
@@ -353,6 +353,7 @@
 
 <script setup>
 import { ref, reactive, computed, onMounted, nextTick, getCurrentInstance } from "vue";
+import dayjs from "dayjs";
 import { ElMessage, ElMessageBox } from "element-plus";
 import FormDialog from "@/components/Dialog/FormDialog.vue";
 import { getOptions } from "@/api/procurementManagement/procurementLedger.js";
@@ -454,6 +455,18 @@
   inboundBatches: "",
   status: 0,
   createTime: "",
+});
+const formCreateTimeDate = computed({
+  get: () => (form.createTime ? String(form.createTime).split(" ")[0] : ""),
+  set: (value) => {
+    form.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+  },
+});
+const paymentFormCreateTimeDate = computed({
+  get: () => (paymentForm.createTime ? String(paymentForm.createTime).split(" ")[0] : ""),
+  set: (value) => {
+    paymentForm.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+  },
 });
 
 const rules = {
@@ -620,6 +633,7 @@
     remark: form.remark || "",
     status: 0,
     paymentAmount: form.paymentAmount,
+    createTime: form.createTime,
   };
   if (forUpdate) {
     payload.id = currentId.value;
@@ -730,7 +744,7 @@
     stockInRecordIds: [],
     inboundBatches: "",
     status: 0,
-    createTime: new Date().toISOString().split("T")[0],
+    createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
   });
   inboundBatchList.value = [];
   inboundBatchOptions.value = [];
@@ -809,7 +823,7 @@
     bankAccount: row.bankAccountNum ?? row.bankAccount ?? "",
     bankName: row.bankAccountName ?? row.bankName ?? "",
     remark: "",
-    createTime: new Date().toISOString().split("T")[0],
+    createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
   });
   paymentDialogVisible.value = true;
   nextTick(() => {
diff --git a/src/views/financialManagement/receivable/invoiceApply.vue b/src/views/financialManagement/receivable/invoiceApply.vue
index d5ab6dc..85f30b2 100644
--- a/src/views/financialManagement/receivable/invoiceApply.vue
+++ b/src/views/financialManagement/receivable/invoiceApply.vue
@@ -193,7 +193,7 @@
           <el-col :span="12">
             <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
               <el-date-picker
-                v-model="form.createTime"
+                v-model="formCreateTimeDate"
                 type="date"
                 placeholder="閫夋嫨鏃ユ湡"
                 value-format="YYYY-MM-DD"
@@ -267,6 +267,7 @@
 
 <script setup>
 import { ref, reactive, computed, onMounted, nextTick, getCurrentInstance, defineAsyncComponent } from "vue";
+import dayjs from "dayjs";
 import { ElMessage, ElMessageBox } from "element-plus";
 import FormDialog from "@/components/Dialog/FormDialog.vue";
 import { listCustomer } from "@/api/basicData/customer.js";
@@ -540,6 +541,12 @@
   remark: "",
   createTime: "",
 });
+const formCreateTimeDate = computed({
+  get: () => (form.createTime ? String(form.createTime).split(" ")[0] : ""),
+  set: (value) => {
+    form.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+  },
+});
 
 const rules = {
   customerId: [{ required: true, message: "璇烽�夋嫨瀹㈡埛", trigger: "change" }],
@@ -721,6 +728,7 @@
     status: normalizeStatus(row.status ?? row.auditStatus),
     outboundBatchNos,
     outboundBatches: formatOutboundBatches(row.outboundBatches),
+    createTime: row.createTime ?? "",
   });
 };
 
@@ -739,7 +747,7 @@
     applyDate: new Date().toISOString().split("T")[0],
     content: "",
     remark: "",
-    createTime: new Date().toISOString().split("T")[0],
+    createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
   });
   outboundBatchList.value = [];
   outboundBatchOptions.value = [];
diff --git a/src/views/financialManagement/receivable/receipt.vue b/src/views/financialManagement/receivable/receipt.vue
index 1c84594..ae7a763 100644
--- a/src/views/financialManagement/receivable/receipt.vue
+++ b/src/views/financialManagement/receivable/receipt.vue
@@ -196,7 +196,7 @@
           <el-col :span="12">
             <el-form-item label="鍒涘缓鏃堕棿"
                           prop="createTime">
-              <el-date-picker v-model="form.createTime"
+              <el-date-picker v-model="formCreateTimeDate"
                               type="date"
                               placeholder="閫夋嫨鏃ユ湡"
                               value-format="YYYY-MM-DD"
@@ -299,6 +299,7 @@
     nextTick,
     getCurrentInstance,
   } from "vue";
+  import dayjs from "dayjs";
   import { ElMessage, ElMessageBox } from "element-plus";
   import FormDialog from "@/components/Dialog/FormDialog.vue";
   import { listCustomer } from "@/api/basicData/customer.js";
@@ -391,6 +392,12 @@
     outboundBatches: "",
     remark: "",
     createTime: "",
+  });
+  const formCreateTimeDate = computed({
+    get: () => (form.createTime ? String(form.createTime).split(" ")[0] : ""),
+    set: (value) => {
+      form.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+    },
   });
 
   const rules = {
@@ -691,6 +698,7 @@
       stockOutRecordIds,
       outboundBatches: formatOutboundBatches(row.outboundBatches),
       remark: row.remark ?? "",
+      createTime: row.createTime ?? "",
     });
   };
 
@@ -767,7 +775,7 @@
       stockOutRecordIds: [],
       outboundBatches: "",
       remark: "",
-      createTime: new Date().toISOString().split("T")[0],
+      createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
     });
     outboundBatchList.value = [];
     outboundBatchOptions.value = [];
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js b/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
index 3251f0c..e2f1e45 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
@@ -457,6 +457,9 @@
     currentNodeIndex: 0,
     approvalRecords,
     rejectReason: approvalRecords.find(r => r.result === "rejected")?.opinion || "",
+    purchaseContractNumber: row.purchaseContractNumber || "",
+    quotationNo: row.quotationNo || "",
+    shippingNo: row.shippingNo || "",
   };
 }
 
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
index 721a5c2..b9eb42f 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
@@ -35,9 +35,116 @@
     </div>
     <div class="detail-block">
       <div class="detail-block-title">濉姤鍐呭</div>
-      <FormPayloadFields :fields="formResolved.fields"
+      <!-- 榛樿琛ㄥ崟灞曠ず -->
+      <FormPayloadFields v-if="!isSpecialApprovalType"
+                         :fields="formResolved.fields"
                          :form-payload="formResolved.formPayload"
                          readonly />
+      
+      <!-- 鍙戣揣瀹℃壒璇︽儏 -->
+      <template v-else-if="row.businessType === 7">
+        <div v-if="detailData.shippingInfo" class="shipment-detail">
+          <el-divider content-position="left">鍙戣揣璇︽儏</el-divider>
+          <el-descriptions :column="2" border>
+            <el-descriptions-item label="閿�鍞鍗�">{{ detailData.shippingInfo.salesContractNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣璁㈠崟鍙�">{{ detailData.shippingInfo.shippingNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ detailData.shippingInfo.customerName || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣绫诲瀷">{{ detailData.shippingInfo.type || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣鏃ユ湡">{{ detailData.shippingInfo.shippingDateDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="瀹℃牳鐘舵��">{{ detailData.shippingInfo.status || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣杞︾墝鍙�">{{ detailData.shippingInfo.shippingCarNumber || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑叕鍙�">{{ detailData.shippingInfo.expressCompany || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{ detailData.shippingInfo.expressNumber || "--" }}</el-descriptions-item>
+          </el-descriptions>
+          <div v-if="detailData.shippingProductDetailDtoList.length" style="margin-top: 20px;">
+            <h4>浜у搧鏄庣粏</h4>
+            <el-table :data="detailData.shippingProductDetailDtoList"
+                      border
+                      size="small"
+                      style="width: 100%">
+              <el-table-column label="鎵瑰彿" prop="batchNo" min-width="160" show-overflow-tooltip />
+              <el-table-column label="浜у搧鍚嶇О" prop="productName" min-width="160" show-overflow-tooltip />
+              <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" min-width="160" show-overflow-tooltip />
+              <el-table-column label="鍙戣揣鏁伴噺" prop="deliveryQuantity" min-width="120" align="center" />
+            </el-table>
+          </div>
+        </div>
+      </template>
+      
+      <!-- 閲囪喘瀹℃壒璇︽儏 -->
+      <template v-else-if="row.businessType === 5">
+        <div v-if="detailData" class="procurement-detail">
+          <el-divider content-position="left">閲囪喘璇︽儏</el-divider>
+          <el-descriptions :column="2" border>
+            <el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{ detailData.purchaseContractNumber || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{ detailData.supplierName || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="椤圭洰鍚嶇О">{{ detailData.projectName || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="閿�鍞悎鍚屽彿">{{ detailData.salesContractNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="绛捐鏃ユ湡">{{ detailData.executionDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="褰曞叆鏃ユ湡">{{ detailData.entryDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="浠樻鏂瑰紡">{{ detailData.paymentMethod || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍚堝悓閲戦" :span="2">
+              <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">
+                楼{{ Number(detailData.contractAmount ?? 0).toFixed(2) }}
+              </span>
+            </el-descriptions-item>
+          </el-descriptions>
+          <div v-if="detailData.productData.length" style="margin-top: 20px;">
+            <h4>浜у搧鏄庣粏</h4>
+            <el-table :data="detailData.productData"
+                      border
+                      style="width: 100%">
+              <el-table-column prop="productCategory" label="浜у搧鍚嶇О" />
+              <el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" />
+              <el-table-column prop="unit" label="鍗曚綅" />
+              <el-table-column prop="quantity" label="鏁伴噺" />
+              <el-table-column prop="taxInclusiveUnitPrice" label="鍚◣鍗曚环">
+                <template #default="scope">楼{{ Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2) }}</template>
+              </el-table-column>
+              <el-table-column prop="taxInclusiveTotalPrice" label="鍚◣鎬讳环">
+                <template #default="scope">楼{{ Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2) }}</template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+      </template>
+      
+      <!-- 鎶ヤ环瀹℃壒璇︽儏 -->
+      <template v-else-if="row.businessType === 6">
+        <div v-if="detailData" class="quotation-detail">
+          <el-divider content-position="left">鎶ヤ环璇︽儏</el-divider>
+          <el-descriptions :column="2" border>
+            <el-descriptions-item label="鎶ヤ环鍗曞彿">{{ detailData.quotationNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ detailData.customer || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="涓氬姟鍛�">{{ detailData.salesperson || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鎶ヤ环鏃ユ湡">{{ detailData.quotationDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鏈夋晥鏈熻嚦">{{ detailData.validDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="浠樻鏂瑰紡">{{ detailData.paymentMethod || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鎶ヤ环鎬婚" :span="2">
+              <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">
+                楼{{ Number(detailData.totalAmount ?? 0).toFixed(2) }}
+              </span>
+            </el-descriptions-item>
+          </el-descriptions>
+          <div v-if="detailData.products.length" style="margin-top: 20px;">
+            <h4>浜у搧鏄庣粏</h4>
+            <el-table :data="detailData.products"
+                      border
+                      style="width: 100%">
+              <el-table-column prop="product" label="浜у搧鍚嶇О" />
+              <el-table-column prop="specification" label="瑙勬牸鍨嬪彿" />
+              <el-table-column prop="unit" label="鍗曚綅" />
+              <el-table-column prop="unitPrice" label="鍗曚环">
+                <template #default="scope">楼{{ Number(scope.row.unitPrice ?? 0).toFixed(2) }}</template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div v-if="detailData.remark" style="margin-top: 20px;">
+            <h4>澶囨敞</h4>
+            <p>{{ detailData.remark }}</p>
+          </div>
+        </div>
+      </template>
     </div>
     <div v-if="attachmentList.length"
          class="detail-block">
@@ -86,9 +193,21 @@
 
   const props = defineProps({
     row: { type: Object, default: () => ({}) },
+    detailData: { type: Object, default: () => ({}) },
   });
 
   const formResolved = computed(() => resolveInstanceFormFields(props.row));
+
+
+  // 鏄惁涓虹壒娈婂鎵圭被鍨嬶紙閲囪喘銆佸彂璐с�佹姤浠凤級
+  const isSpecialApprovalType = computed(() => {
+    return [5, 7, 6].includes(props.row.businessType);
+  });
+
+  // 璇︽儏鏁版嵁锛堢洿鎺ヤ娇鐢ㄤ紶鍏ョ殑 detail-data 鍙傛暟锛�
+  const detailData = computed(() => {
+    return props.detailData || {};
+  });
 
   const attachmentList = computed(() => {
     const list = props.row.storageBlobVOList || props.row.storageBlobDTOs || [];
@@ -164,4 +283,4 @@
     align-items: center;
     flex-shrink: 0;
   }
-</style>
+</style>
\ No newline at end of file
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/index.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/index.vue
index bbfa56a..4a9cf29 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/index.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/index.vue
@@ -172,7 +172,7 @@
       class="approve-detail-dialog"
     >
       <div class="approve-detail-body">
-        <ApproveDetailPanel :row="detailRow" />
+        <ApproveDetailPanel :row="detailRow" :detail-data="detailData" />
         <div class="detail-block">
           <div class="detail-block-title">
             瀹℃壒娴佺▼锛坽{ detailRow.tasks?.length || detailRow.flowNodes?.length || 0 }} 椤癸級
@@ -290,7 +290,7 @@
       destroy-on-close
       @closed="approveOpinion = ''"
     >
-      <ApproveDetailPanel :row="approveDialog.row" />
+      <ApproveDetailPanel :row="approveDialog.row" :detail-data="detailData" />
       <div class="detail-block mt16">
         <div class="detail-block-title">
           瀹℃壒娴佺▼锛坽{ approveDialog.row?.tasks?.length || approveDialog.row?.flowNodes?.length || 0 }} 椤癸級
@@ -369,6 +369,7 @@
   tableColumn,
   detailDialog,
   detailRow,
+  detailData,
   reimburseDialog,
   approveDialog,
   approveOpinion,
@@ -610,4 +611,4 @@
   border-left: 3px solid var(--el-color-primary);
   line-height: 1.4;
 }
-</style>
+</style>
\ No newline at end of file
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js b/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
index 67b9213..3f0e99c 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
@@ -10,6 +10,9 @@
   saveApprovalInstance,
   updateApprovalInstance,
 } from "@/api/officeProcessAutomation/approvalInstance.js";
+import { getQuotationList } from "@/api/salesManagement/salesQuotation.js";
+import { getPurchaseByCode } from "@/api/procurementManagement/procurementLedger.js";
+import { getDeliveryDetailByShippingNo } from "@/api/salesManagement/deliveryLedger.js";
 import useUserStore from "@/store/modules/user";
 import { Search } from "@element-plus/icons-vue";
 import { ElMessage, ElMessageBox } from "element-plus";
@@ -77,6 +80,7 @@
 
   const detailDialog = reactive({ visible: false });
   const detailRow = ref({});
+  const detailData = ref({});
 
   const approveDialog = reactive({ visible: false, row: null });
   const approveOpinion = ref("");
@@ -135,7 +139,7 @@
   }));
 
   const tableColumn = ref([
-    { label: "鐢宠浜虹紪鍙�", prop: "applicantNo", width: 110 },
+    // { label: "鐢宠浜虹紪鍙�", prop: "applicantNo", width: 110 },
     { label: "鐢宠浜哄悕绉�", prop: "applicantName", minWidth: 100 },
     { label: "妯℃澘绫诲瀷", prop: "businessName", minWidth: 120 },
     {
@@ -220,7 +224,7 @@
         fetchBusinessTypeOptions(),
         listApprovalTemplate(TEMPLATE_TYPE_CUSTOM),
       ]);
-      submitBusinessTypeOptions.value = typeOptions;
+      submitBusinessTypeOptions.value = typeOptions.filter((x) => ![5, 6, 7].includes(x.value));
       allSubmitTemplates.value = unwrapTemplateList(customRes)
         .filter((row) => mapEnabledFromApi(row.enabled))
         .map(mapSubmitTemplateCard);
@@ -288,11 +292,46 @@
       await openReimburseDetail(row, "detail");
       return;
     }
+    
     detailRow.value = { ...row };
+    // 鎶ヤ环瀹℃壒锛氱敤瀹℃壒浜嬬敱瀛楁鎵胯浇鐨�"鎶ヤ环鍗曞彿"鍘绘煡鎶ヤ环鍒楄〃
+    if (row.businessType === 6) {
+      const quotationNo = row?.quotationNo;
+      if (quotationNo) {
+        const res = await getQuotationList({ quotationNo });
+        const records = res?.data?.records || [];
+        detailData.value = records[0] || {};
+      }
+    }
+    
+    // 閲囪喘瀹℃壒锛氱敤瀹℃壒浜嬬敱瀛楁鎵胯浇鐨�"閲囪喘鍚堝悓鍙�"鍘绘煡閲囪喘璇︽儏
+    else if (row.businessType === 5) {
+      const purchaseContractNumber = row?.purchaseContractNumber;
+      if (purchaseContractNumber) {
+        const res = await getPurchaseByCode({ purchaseContractNumber });
+        detailData.value = res || {};
+      }
+    }
+    
+    // 鍙戣揣瀹℃壒锛氱敤瀹℃壒浜嬬敱瀛楁鎵胯浇鐨�"鍙戣揣鍗曞彿"鍘绘煡鍙戣揣璇︽儏
+    else if (row.businessType === 7) {
+      const shippingNo = row?.shippingNo;
+      if (shippingNo) {
+        const res = await getDeliveryDetailByShippingNo({ shippingNo });
+        detailData.value = res?.data || res || {};
+      }
+    }
+    
+    // 鍏朵粬瀹℃壒绫诲瀷
+    else {
+      detailData.value = {};
+    }
+    
     detailDialog.visible = true;
   }
 
   async function openApprove(row) {
+
     if (inferReimburseModuleKeyFromInstance(row)) {
       approveOpinion.value = "";
       await openReimburseDetail(row, "approve");
@@ -300,6 +339,38 @@
     }
     approveDialog.row = { ...row };
     approveOpinion.value = "";
+    // 鎶ヤ环瀹℃壒锛氱敤瀹℃壒浜嬬敱瀛楁鎵胯浇鐨�"鎶ヤ环鍗曞彿"鍘绘煡鎶ヤ环鍒楄〃
+    if (row.businessType === 6) {
+      const quotationNo = row?.quotationNo;
+      if (quotationNo) {
+        const res = await getQuotationList({ quotationNo });
+        const records = res?.data?.records || [];
+        detailData.value = records[0] || {};
+      }
+    }
+
+    // 閲囪喘瀹℃壒锛氱敤瀹℃壒浜嬬敱瀛楁鎵胯浇鐨�"閲囪喘鍚堝悓鍙�"鍘绘煡閲囪喘璇︽儏
+    else if (row.businessType === 5) {
+      const purchaseContractNumber = row?.purchaseContractNumber;
+      if (purchaseContractNumber) {
+        const res = await getPurchaseByCode({ purchaseContractNumber });
+        detailData.value = res || {};
+      }
+    }
+
+    // 鍙戣揣瀹℃壒锛氱敤瀹℃壒浜嬬敱瀛楁鎵胯浇鐨�"鍙戣揣鍗曞彿"鍘绘煡鍙戣揣璇︽儏
+    else if (row.businessType === 7) {
+      const shippingNo = row?.shippingNo;
+      if (shippingNo) {
+        const res = await getDeliveryDetailByShippingNo({ shippingNo });
+        detailData.value = res?.data || res || {};
+      }
+    }
+
+    // 鍏朵粬瀹℃壒绫诲瀷
+    else {
+      detailData.value = {};
+    }
     approveDialog.visible = true;
   }
 
@@ -586,6 +657,7 @@
     tableColumn,
     detailDialog,
     detailRow,
+    detailData,
     reimburseDialog,
     approveDialog,
     approveOpinion,
@@ -625,4 +697,4 @@
     openApprove,
     fetchApprovalList,
   };
-}
+}
\ No newline at end of file
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue b/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
index d094c13..0a495c6 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
@@ -380,23 +380,18 @@
 
       <template v-if="detailAttachments.length">
 
-        <el-tag
-
-          v-for="(f, i) in detailAttachments"
-
-          :key="i"
-
-          class="detail-attachment-tag"
-
-          type="info"
-
-          effect="plain"
-
-        >
-
-          {{ attachmentDisplayName(f) }}
-
-        </el-tag>
+        <div class="detail-attachment-list">
+          <div
+            v-for="(f, i) in detailAttachments"
+            :key="i"
+            class="detail-attachment-item"
+            @click="openAttachmentFile(f)"
+          >
+            <el-icon class="attachment-icon"><Document /></el-icon>
+            <span class="attachment-name">{{ attachmentDisplayName(f) }}</span>
+            <el-icon class="attachment-download"><Download /></el-icon>
+          </div>
+        </div>
 
       </template>
 
@@ -422,7 +417,7 @@
 
 <script setup>
 
-import { ArrowRight, Plus, RefreshRight } from "@element-plus/icons-vue";
+import { ArrowRight, Document, Download, Plus, RefreshRight } from "@element-plus/icons-vue";
 
 import { ElMessage } from "element-plus";
 
@@ -525,6 +520,14 @@
 
 }
 
+function openAttachmentFile(file) {
+  const url = file?.url || file?.previewURL || file?.downloadURL || file?.previewUrl || "";
+  if (url) {
+    window.open(url, "_blank");
+  } else {
+    ElMessage.warning("鏃犳硶鎵撳紑璇ラ檮浠�");
+  }
+}
 
 
 function unwrapArray(payload) {
@@ -795,10 +798,40 @@
 
 }
 
-.detail-attachment-tag {
+.detail-attachment-list {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 8px;
+}
 
-  margin: 0 8px 8px 0;
+.detail-attachment-item {
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  padding: 8px 12px;
+  background: var(--el-fill-color-light);
+  border-radius: 6px;
+  cursor: pointer;
+  transition: background 0.2s;
+}
 
+.detail-attachment-item:hover {
+  background: var(--el-fill-color);
+}
+
+.attachment-icon {
+  font-size: 16px;
+  color: var(--el-text-color-regular);
+}
+
+.attachment-name {
+  font-size: 14px;
+  color: var(--el-text-color-primary);
+}
+
+.attachment-download {
+  font-size: 14px;
+  color: var(--el-text-color-secondary);
 }
 
 .text-muted {
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js b/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
index 61aa6c0..79e96bc 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
@@ -214,10 +214,21 @@
     });
   }
 
-  function openFormDialog(mode, row) {
+  async function openFormDialog(mode, row) {
     formDialog.mode = mode;
     formDialog.title = mode === "add" ? "鏂板缓瀹℃壒妯℃澘" : "缂栬緫瀹℃壒妯℃澘";
-    resetForm(mode === "edit" ? row : null);
+    if (mode === "edit" && row?.id) {
+      // 缂栬緫鏃跺厛鏌ヨ璇︽儏鑾峰彇瀹屾暣鏁版嵁锛堝寘鍚檮浠讹級
+      try {
+        const res = await getApprovalTemplateDetail(row.id);
+        const detailData = mapTemplateFromApi(unwrapTemplateDetail(res));
+        resetForm(detailData);
+      } catch {
+        resetForm(row);
+      }
+    } else {
+      resetForm(mode === "edit" ? row : null);
+    }
     formDialog.visible = true;
   }
 
diff --git a/src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/DetailPanel.vue b/src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/DetailPanel.vue
index 2c1d8a4..df8cf8e 100644
--- a/src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/DetailPanel.vue
+++ b/src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/DetailPanel.vue
@@ -33,7 +33,7 @@
     <el-table-column type="index" label="搴忓彿" width="55" align="center" />
     <el-table-column prop="invoiceDate" label="鍙戠エ鏃ユ湡" width="120" />
     <el-table-column label="璐圭敤绉戠洰" width="100">
-      <template #default="{ row: d }">{{ expenseSubjectLabel(d.expenseSubject) }}</template>
+      <template #default="{ row: d }">{{ d.expenseCategory || "鈥�" }}</template>
     </el-table-column>
     <el-table-column prop="amount" label="閲戦" width="100" />
     <el-table-column prop="description" label="鎻忚堪" min-width="140" show-overflow-tooltip />
@@ -51,7 +51,7 @@
 
 <script setup>
 import { computed } from "vue";
-import { expenseSubjectLabel, statusLabel, statusTagType } from "../travelReimburseUtils.js";
+import { statusLabel, statusTagType } from "../travelReimburseUtils.js";
 
 const props = defineProps({
   row: { type: Object, default: () => ({}) },
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 3994855..0193f54 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -66,6 +66,9 @@
     </div>
     <div class="table_list">
       <div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
+        <el-button type="success"
+                   plain
+                   @click="handleBatchGenerate">鎵归噺鐢熸垚鏁版嵁</el-button>
         <el-button type="primary"
                    @click="openForm('add')">鏂板鍙拌处</el-button>
         <el-button type="primary"
@@ -806,6 +809,7 @@
     getOptions,
     getPurchaseTemplateList,
     delPurchaseTemplate,
+    batchGeneratePurchaseInboundSteps,
   } from "@/api/procurementManagement/procurementLedger.js";
   import { addSutockIn } from "@/api/inventoryManagement/stockIn.js";
   import useFormData from "@/hooks/useFormData.js";
@@ -1918,6 +1922,37 @@
       });
   };
 
+  const handleBatchGenerate = async () => {
+    if (selectedRows.value.length === 0) {
+      proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+      return;
+    }
+    const ids = selectedRows.value.map((item) => item.id);
+    
+    ElMessageBox.confirm("纭鎵归噺鐢熸垚鏁版嵁锛�", "鎵归噺鐢熸垚", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "info",
+    })
+      .then(() => {
+        proxy.$modal.loading("姝e湪鎵归噺鐢熸垚鏁版嵁锛岃绋嶅��...");
+        batchGeneratePurchaseInboundSteps({ ids })
+          .then((res) => {
+            proxy.$modal.msgSuccess("鎵归噺鐢熸垚鎴愬姛");
+            getList();
+          })
+          .catch(() => {
+            proxy.$modal.msgError("鎵归噺鐢熸垚澶辫触");
+          })
+          .finally(() => {
+            proxy.$modal.closeLoading();
+          });
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
+
   // 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
   function getCurrentDate() {
     const today = new Date();
diff --git a/src/views/procurementManagement/procurementPlan/index.vue b/src/views/procurementManagement/procurementPlan/index.vue
index 5be6ffe..ba9a38c 100644
--- a/src/views/procurementManagement/procurementPlan/index.vue
+++ b/src/views/procurementManagement/procurementPlan/index.vue
@@ -183,7 +183,7 @@
               </el-col>
               <el-col :span="12">
                 <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
-                  <el-date-picker v-model="formData.createTime"
+                  <el-date-picker v-model="formCreateTimeDate"
                                   type="date"
                                   placeholder="閫夋嫨鏃ユ湡"
                                   value-format="YYYY-MM-DD"
@@ -377,7 +377,8 @@
 
 <script setup>
   import FormDialog from "@/components/Dialog/FormDialog.vue";
-  import { ref, reactive, onMounted, getCurrentInstance } from "vue";
+  import { ref, reactive, onMounted, getCurrentInstance, computed } from "vue";
+  import dayjs from "dayjs";
   import { ElMessage, ElMessageBox } from "element-plus";
   import { Search, Refresh, Plus, Download } from "@element-plus/icons-vue";
   import {
@@ -432,6 +433,12 @@
     summaryMaterial: false,
     summaryAuxAttributes: false,
     summaryDemandDate: false,
+  });
+  const formCreateTimeDate = computed({
+    get: () => (formData.createTime ? String(formData.createTime).split(" ")[0] : ""),
+    set: (value) => {
+      formData.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+    },
   });
 
   // 褰撳墠婵�娲荤殑鏍囩椤�
@@ -510,7 +517,7 @@
   const handleAdd = () => {
     dialogType.value = "add";
     resetForm();
-    formData.createTime = new Date().toISOString().split("T")[0];
+    formData.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
     dialogVisible.value = true;
   };
 
diff --git a/src/views/procurementManagement/purchaseOrder/index.vue b/src/views/procurementManagement/purchaseOrder/index.vue
index 71d6caa..4f9812f 100644
--- a/src/views/procurementManagement/purchaseOrder/index.vue
+++ b/src/views/procurementManagement/purchaseOrder/index.vue
@@ -57,7 +57,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="鍒涘缓鏃堕棿">
-          <el-date-picker v-model="formData.createTime"
+          <el-date-picker v-model="formCreateTimeDate"
                           type="date"
                           placeholder="閫夋嫨鏃ユ湡"
                           value-format="YYYY-MM-DD"
@@ -73,7 +73,8 @@
 
 <script setup>
 import FormDialog from '@/components/Dialog/FormDialog.vue';
-import { ref, reactive } from 'vue'
+import { ref, reactive, computed } from 'vue'
+import dayjs from 'dayjs'
 import { ElMessage, ElMessageBox } from 'element-plus'
 
 const loading = ref(false)
@@ -90,6 +91,12 @@
   supplierName: '',
   remark: '',
   createTime: ''
+})
+const formCreateTimeDate = computed({
+  get: () => (formData.createTime ? String(formData.createTime).split(' ')[0] : ''),
+  set: (value) => {
+    formData.createTime = value ? `${value} ${dayjs().format('HH:mm:ss')}` : ''
+  }
 })
 
 const mockData = [
@@ -130,9 +137,9 @@
 const openDialog = (type, row = {}) => {
   dialogType.value = type
   if (type === 'edit' && row.id) {
-    Object.assign(formData, { supplierName: row.supplierName, remark: row.remark })
+    Object.assign(formData, { supplierName: row.supplierName, remark: row.remark, createTime: row.createTime || '' })
   } else {
-    Object.assign(formData, { supplierName: '', remark: '', createTime: new Date().toISOString().split('T')[0] })
+    Object.assign(formData, { supplierName: '', remark: '', createTime: dayjs().format('YYYY-MM-DD HH:mm:ss') })
   }
   dialogVisible.value = true
 }
diff --git a/src/views/procurementManagement/qualityInspection/index.vue b/src/views/procurementManagement/qualityInspection/index.vue
index fde8c68..aee1d99 100644
--- a/src/views/procurementManagement/qualityInspection/index.vue
+++ b/src/views/procurementManagement/qualityInspection/index.vue
@@ -119,7 +119,7 @@
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="鍒涘缓鏃堕棿">
-              <el-date-picker v-model="formData.createTime"
+              <el-date-picker v-model="formCreateTimeDate"
                               type="date"
                               placeholder="閫夋嫨鏃ユ湡"
                               value-format="YYYY-MM-DD"
@@ -138,7 +138,8 @@
 
 <script setup>
 import FormDialog from '@/components/Dialog/FormDialog.vue';
-import { ref, reactive } from 'vue'
+import { ref, reactive, computed } from 'vue'
+import dayjs from 'dayjs'
 import { ElMessage, ElMessageBox } from 'element-plus'
 
 const loading = ref(false)
@@ -158,6 +159,12 @@
   inspector: '',
   remark: '',
   createTime: ''
+})
+const formCreateTimeDate = computed({
+  get: () => (formData.createTime ? String(formData.createTime).split(' ')[0] : ''),
+  set: (value) => {
+    formData.createTime = value ? `${value} ${dayjs().format('HH:mm:ss')}` : ''
+  }
 })
 
 const mockData = [
@@ -203,7 +210,8 @@
       arrivalNo: row.arrivalNo, 
       supplierName: row.supplierName, 
       inspector: row.inspector,
-      remark: row.remark 
+      remark: row.remark,
+      createTime: row.createTime || ''
     })
   } else {
     Object.assign(formData, {
@@ -212,7 +220,7 @@
       products: [],
       inspector: '',
       remark: '',
-      createTime: new Date().toISOString().split('T')[0]
+      createTime: dayjs().format('YYYY-MM-DD HH:mm:ss')
     })
   }
   dialogVisible.value = true
diff --git a/src/views/productManagement/productIdentifier/index.vue b/src/views/productManagement/productIdentifier/index.vue
index 2eceb31..d638e7a 100644
--- a/src/views/productManagement/productIdentifier/index.vue
+++ b/src/views/productManagement/productIdentifier/index.vue
@@ -240,7 +240,7 @@
           <span>{{ currentProduct.identifierType }}</span>
         </el-form-item>
         <el-form-item label="鍒涘缓鏃堕棿">
-          <el-date-picker v-model="createTime"
+          <el-date-picker v-model="createTimeDate"
                           type="date"
                           placeholder="閫夋嫨鏃ユ湡"
                           value-format="YYYY-MM-DD"
@@ -363,6 +363,7 @@
 
 <script setup>
   import { ref, reactive, computed } from "vue";
+  import dayjs from "dayjs";
   import { ElMessage, ElMessageBox } from "element-plus";
   import { Plus, Search, Loading, Download } from "@element-plus/icons-vue";
   import Pagination from "@/components/PIMTable/Pagination.vue";
@@ -449,7 +450,13 @@
   const generateQuantity = ref(1);
   const codeRule = ref("");
   const customPrefix = ref("");
-  const createTime = ref(new Date().toISOString().split('T')[0]);
+  const createTime = ref(dayjs().format("YYYY-MM-DD HH:mm:ss"));
+  const createTimeDate = computed({
+    get: () => (createTime.value ? String(createTime.value).split(" ")[0] : ""),
+    set: (value) => {
+      createTime.value = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+    },
+  });
   const newBatchNo = ref("");
   const reassignReason = ref("");
   const formRef = ref();
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 78d9870..fd6c1a3 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -140,7 +140,7 @@
                            style="width: 100%" />
         </el-form-item>
         <el-form-item label="鍒涘缓鏃堕棿">
-          <el-date-picker v-model="mergeForm.createTime"
+          <el-date-picker v-model="mergeCreateTimeDate"
                           type="date"
                           value-format="YYYY-MM-DD"
                           style="width: 100%" />
@@ -235,7 +235,7 @@
         </el-form-item>
         <el-form-item label="鍒涘缓鏃堕棿"
                       prop="createTime">
-          <el-date-picker v-model="form.createTime"
+          <el-date-picker v-model="formCreateTimeDate"
                           type="date"
                           value-format="YYYY-MM-DD"
                           style="width: 100%"
@@ -444,7 +444,7 @@
               Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0);
             mergeForm.planCompleteTime = row.requiredDate || "";
             mergeForm.productId = row.productId || "";
-            mergeForm.createTime = new Date().toISOString().split("T")[0];
+            mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
             mergeForm.ids = [row.id];
             sumAssignedQuantity.value =
               Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0);
@@ -490,6 +490,12 @@
     productId: "",
     createTime: "",
   });
+  const mergeCreateTimeDate = computed({
+    get: () => (mergeForm.createTime ? String(mergeForm.createTime).split(" ")[0] : ""),
+    set: (value) => {
+      mergeForm.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+    },
+  });
 
   // 瀵煎叆鐩稿叧
   const importDialogRef = ref(null);
@@ -520,6 +526,12 @@
     promisedDeliveryDate: "",
     remark: "",
     createTime: "",
+  });
+  const formCreateTimeDate = computed({
+    get: () => (form.createTime ? String(form.createTime).split(" ")[0] : ""),
+    set: (value) => {
+      form.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+    },
   });
   const rules = reactive({
     productId: [{ required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" }],
@@ -763,6 +775,7 @@
     mergeForm.totalAssignedQuantity = totalAssignedQuantity;
     mergeForm.planCompleteTime = firstRow.requiredDate || "";
     mergeForm.productId = firstRow.productId || "";
+    mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
     mergeForm.ids = selectedRows.value.map(row => row.id);
 
     // 鎵撳紑寮圭獥
@@ -906,7 +919,7 @@
       requiredDate: "",
       promisedDeliveryDate: "",
       remark: "",
-      createTime: new Date().toISOString().split("T")[0],
+      createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
     });
     dialogVisible.value = true;
     fetchProductOptions();
@@ -927,6 +940,7 @@
       requiredDate: row.requiredDate || "",
       promisedDeliveryDate: row.promisedDeliveryDate || "",
       remark: row.remark || "",
+      createTime: row.createTime || "",
     });
     dialogVisible.value = true;
     fetchProductOptions();
diff --git a/src/views/safeProduction/safetyTrainingAssessment/index.vue b/src/views/safeProduction/safetyTrainingAssessment/index.vue
index ff09589..38c2172 100644
--- a/src/views/safeProduction/safetyTrainingAssessment/index.vue
+++ b/src/views/safeProduction/safetyTrainingAssessment/index.vue
@@ -85,7 +85,7 @@
             <el-form-item label="鍒涘缓鏃堕棿"
                           prop="createTime">
               <el-date-picker style="width: 100%"
-                              v-model="form.createTime"
+                              v-model="formCreateTimeDate"
                               value-format="YYYY-MM-DD"
                               format="YYYY-MM-DD"
                               type="date"
@@ -466,6 +466,12 @@
     dialogType: "add",
     viewDialogVisible: false,
     currentKnowledge: {},
+  });
+  const formCreateTimeDate = computed({
+    get: () => (form.value.createTime ? String(form.value.createTime).split(" ")[0] : ""),
+    set: (value) => {
+      form.value.createTime = value ? `${value} ${dayjs().format("HH:mm:ss")}` : "";
+    },
   });
 
   const {
@@ -1040,7 +1046,7 @@
         trainingMode: "", // 鍩硅鏂瑰紡
         placeTraining: "", // 鍩硅鍦扮偣
         classHour: "", // 璇炬椂
-        createTime: new Date().toISOString().split("T")[0], // 鍒涘缓鏃堕棿
+        createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 鍒涘缓鏃堕棿
       });
     } else if (type === "edit" && row) {
       dialogTitle.value = "缂栬緫鍩硅";
@@ -1058,6 +1064,7 @@
         trainingMode: row.trainingMode, // 鍩硅鏂瑰紡
         placeTraining: row.placeTraining, // 鍩硅鍦扮偣
         classHour: row.classHour, // 璇炬椂
+        createTime: row.createTime || "", // 鍒涘缓鏃堕棿
       });
     }
     dialogVisible.value = true;
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 4c13d3d..5c643d7 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -117,6 +117,11 @@
                   </el-tag>
                 </template>
               </el-table-column>
+              <el-table-column label="瀹℃壒涓暟閲�" width="120" align="center">
+                <template #default="scope">
+                  <span>{{ scope.row.pendingApprovalQuantity || 0 }}</span>
+                </template>
+              </el-table-column>
               <el-table-column
                 label="蹇�掑叕鍙�"
                 prop="expressCompany"
@@ -1749,7 +1754,7 @@
     // 绛捐鏃ユ湡榛樿涓哄綋澶�
     form.value.executionDate = getCurrentDate();
     // 鍒涘缓鏃堕棿榛樿涓哄綋澶�
-    form.value.createTime = getCurrentDate();
+    form.value.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
     // 榛樿鑷姩鐢熸垚閿�鍞悎鍚屽彿
     form.value.autoGenerateContractNo = true;
   } else {
@@ -2155,7 +2160,7 @@
 };
 
 // 鎵撳嵃鍔熻兘
-const handlePrint = async () => {
+  const handlePrint = async () => {
   if (selectedRows.value.length === 0) {
     proxy.$modal.msgWarning("璇烽�夋嫨瑕佹墦鍗扮殑鏁版嵁");
     return;
@@ -2512,11 +2517,7 @@
 // 鏍煎紡鍖栨棩鏈�
 const formatDate = (dateString) => {
   if (!dateString) return getCurrentDate();
-  const date = new Date(dateString);
-  const year = date.getFullYear();
-  const month = String(date.getMonth() + 1).padStart(2, "0");
-  const day = String(date.getDate()).padStart(2, "0");
-  return `${year}/${month}/${day}`;
+  return dayjs(dateString).format("YYYY/MM/DD HH:mm:ss");
 };
 // 鏍煎紡鍖栨棩鏈熸椂闂�
 const formatDateTime = (date) => {
@@ -2803,7 +2804,7 @@
 
 /**
  * 鍒ゆ柇鏄惁鍙互鍙戣揣
- * 鍙湁鍦ㄤ骇鍝佺姸鎬佹槸鍏呰冻锛屽彂璐х姸鎬佹槸寰呭彂璐у拰瀹℃牳鎷掔粷鐨勬椂鍊欐墠鍙互鍙戣揣
+ * 鍙湁鍦ㄤ骇鍝佺姸鎬佹槸鍏呰冻锛屽彂璐х姸鎬佹槸寰呭彂璐с�佸鎵逛腑銆佸鏍告嫆缁濄�侀儴鍒嗗彂璐х殑鏃跺�欐墠鍙互鍙戣揣
  * @param row 琛屾暟鎹�
  */
 const canShip = (row) => {
@@ -2815,15 +2816,16 @@
   // 鑾峰彇鍙戣揣鐘舵��
   const shippingStatus = row.shippingStatus;
 
-  // 濡傛灉宸插彂璐э紙鏈夊彂璐ф棩鏈熸垨杞︾墝鍙凤級锛屼笉鑳藉啀娆″彂璐�
+  // 濡傛灉宸插彂璐э紝涓嶈兘鍐嶆鍙戣揣
   if (shippingStatus === "宸插彂璐�") {
     return false;
   }
 
-  // 鍙戣揣鐘舵�佸繀椤绘槸"寰呭彂璐�"鎴�"瀹℃牳鎷掔粷"
+  // 鍙戣揣鐘舵�佸繀椤绘槸"寰呭彂璐�"銆�"瀹℃壒涓�"銆�"瀹℃牳鎷掔粷"鎴�"閮ㄥ垎鍙戣揣"
   const statusStr = shippingStatus ? String(shippingStatus).trim() : "";
   return (
     statusStr === "寰呭彂璐�" ||
+    statusStr === "瀹℃壒涓�" ||
     statusStr === "瀹℃牳鎷掔粷" ||
     statusStr === "閮ㄥ垎鍙戣揣"
   );
@@ -2844,7 +2846,7 @@
   // 妫�鏌ユ槸鍚﹀彲浠ュ彂璐�
   if (!canShip(row)) {
     proxy.$modal.msgWarning(
-      "鍙湁鍦ㄤ骇鍝佺姸鎬佹槸鍏呰冻锛屽彂璐х姸鎬佹槸寰呭彂璐ф垨瀹℃牳鎷掔粷鐨勬椂鍊欐墠鍙互鍙戣揣"
+      "鍙湁鍦ㄤ骇鍝佺姸鎬佹槸鍏呰冻锛屽彂璐х姸鎬佹槸寰呭彂璐с�佸鎵逛腑銆佸鏍告嫆缁濇垨閮ㄥ垎鍙戣揣鐨勬椂鍊欐墠鍙互鍙戣揣"
     );
     return;
   }
@@ -3179,4 +3181,4 @@
     page-break-after: avoid;
   }
 }
-</style>
+</style>
\ No newline at end of file

--
Gitblit v1.9.3