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