From 9c1e0958af114e4ae2bfaaade28d49753268e9f1 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 06 七月 2026 13:54:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_新疆_大罗素马铃薯new' into dev_新疆_大罗素马铃薯new
---
src/views/officeProcessAutomation/AttendManage/compensatory-leave/index.vue | 314 +++++++++++++++++
src/views/customerService/feedbackRegistration/components/formDia.vue | 6
src/views/financialManagement/receivable/salesOut.vue | 2
src/views/salesManagement/receiptPaymentLedger/index.vue | 6
src/views/salesManagement/returnOrder/components/detailDia.vue | 2
src/views/salesManagement/salesLedger/index.vue | 14
src/api/customerService/index.js | 4
src/views/qualityManagement/finalInspection/index.vue | 11
src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue | 5
src/views/salesManagement/returnOrder/index.vue | 7
src/views/productionManagement/workOrderManagement/index.vue | 5
src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue | 4
src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalModuleRegistry.js | 8
src/views/collaborativeApproval/purchaseApproval/index.vue | 4
src/views/salesManagement/returnOrder/components/formDia.vue | 2
src/views/collaborativeApproval/shipmentReview/index.vue | 6
src/views/procurementManagement/purchaseReturnOrder/index.vue | 5
src/api/salesManagement/returnOrder.js | 2
src/views/inventoryManagement/stockManagement/Record.vue | 3
src/views/customerService/afterSalesHandling/index.vue | 4
src/views/inventoryManagement/receiptManagement/Record.vue | 3
src/views/qualityManagement/afterSalesTraceability/index.vue | 8
src/views/inventoryManagement/stockManagement/New.vue | 266 ++++++++++----
src/views/salesManagement/deliveryLedger/index.vue | 37 +
src/views/equipmentManagement/spareParts/index.vue | 32
src/views/reportAnalysis/projectProfit/index.vue | 2
src/views/qualityManagement/finalInspection/components/formDia.vue | 14
src/views/financialManagement/receivable/receipt.vue | 2
src/views/safeProduction/safeWorkApproval/components/approvalDia.vue | 2
src/components/AIChatSidebar/index.vue | 14
src/views/financialManagement/receivable/invoiceApply.vue | 2
src/api/equipmentManagement/ledger.js | 7
src/views/financialManagement/receivable/salesReturn.vue | 2
src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js | 1
src/views/procurementManagement/paymentLedger/index.vue | 3
src/views/procurementManagement/procurementLedger/index.vue | 145 ++++++-
src/api/salesManagement/salesLedger.js | 2
src/views/procurementManagement/receivingManagement/modal/ReceiptForm.vue | 2
doc/20260618_customer_transactions_optimization.md | 4
src/views/productionManagement/productionReporting/index.vue | 2
src/views/personnelManagement/classsSheduling/index.vue | 55 ++
src/views/customerService/feedbackRegistration/index.vue | 4
src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue | 1
src/views/productionManagement/productionOrder/index.vue | 5
src/views/productionPlan/productionPlan/index.vue | 10
doc/20260618_shipping_info_for_return.md | 4
src/views/procurementManagement/receivingManagement/index.vue | 5
src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue | 22 -
48 files changed, 833 insertions(+), 237 deletions(-)
diff --git a/doc/20260618_customer_transactions_optimization.md b/doc/20260618_customer_transactions_optimization.md
index b228183..0636265 100644
--- a/doc/20260618_customer_transactions_optimization.md
+++ b/doc/20260618_customer_transactions_optimization.md
@@ -113,7 +113,7 @@
| 瀛楁 | 绫诲瀷 | 璇存槑 |
|------|------|------|
| salesLedgerId | Long | 閿�鍞彴璐D |
-| salesContractNo | String | 閿�鍞悎鍚屽彿 |
+| salesContractNo | String | 璁㈠崟鍙� |
| productId | Long | 浜у搧ID |
| productName | String | 浜у搧鍚嶇О |
| model | String | 瑙勬牸鍨嬪彿 |
@@ -179,7 +179,7 @@
| 瀛楁 | 绫诲瀷 | 璇存槑 |
|------|------|------|
| salesLedgerId | Long | 閿�鍞彴璐D |
-| salesContractNo | String | 閿�鍞悎鍚屽彿 |
+| salesContractNo | String | 璁㈠崟鍙� |
| shippingId | Long | 鍙戣揣鍗旾D |
| shippingNo | String | 鍙戣揣鍗曞彿 |
| productName | String | 浜у搧鍚嶇О |
diff --git a/doc/20260618_shipping_info_for_return.md b/doc/20260618_shipping_info_for_return.md
index 5568361..4f0d175 100644
--- a/doc/20260618_shipping_info_for_return.md
+++ b/doc/20260618_shipping_info_for_return.md
@@ -27,7 +27,7 @@
|------|------|------|
| shippingId | Long | 鍙戣揣鍗旾D |
| shippingNo | String | 鍙戣揣鍗曞彿 |
-| salesContractNo | String | 閿�鍞悎鍚屽彿 |
+| salesContractNo | String | 璁㈠崟鍙� |
| customerName | String | 瀹㈡埛鍚嶇О |
| productName | String | 浜у搧鍚嶇О |
| model | String | 瑙勬牸鍨嬪彿 |
@@ -257,7 +257,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="閿�鍞悎鍚屽彿">
+ <el-form-item label="璁㈠崟鍙�">
<el-input v-model="form.salesContractNo" disabled />
</el-form-item>
</el-col>
diff --git a/src/api/customerService/index.js b/src/api/customerService/index.js
index 571601a..0dc4292 100644
--- a/src/api/customerService/index.js
+++ b/src/api/customerService/index.js
@@ -111,7 +111,7 @@
})
}
-// 鏍规嵁瀹㈡埛鏌ヨ閿�鍞鍗曞彿
+// 鏍规嵁瀹㈡埛鏌ヨ璁㈠崟鍙峰彿
// afterSalesService/listSalesLedger
export function getSalesLedger(query) {
return request({
@@ -121,7 +121,7 @@
})
}
-// 鏍规嵁閿�鍞鍗曞彿鏌ヨ閿�鍞鍗曡鎯�
+// 鏍规嵁璁㈠崟鍙峰彿鏌ヨ璁㈠崟鍙疯鎯�
// afterSalesService/count
export function getSalesLedgerDetail(query) {
return request({
diff --git a/src/api/equipmentManagement/ledger.js b/src/api/equipmentManagement/ledger.js
index d1b65b0..445d60d 100644
--- a/src/api/equipmentManagement/ledger.js
+++ b/src/api/equipmentManagement/ledger.js
@@ -42,3 +42,10 @@
method: "get",
});
};
+
+export const getIotDeviceList = () => {
+ return request({
+ url: "/device/ledger/iotDeviceList",
+ method: "get",
+ });
+};
diff --git a/src/api/salesManagement/returnOrder.js b/src/api/salesManagement/returnOrder.js
index b809aa7..fccd015 100644
--- a/src/api/salesManagement/returnOrder.js
+++ b/src/api/salesManagement/returnOrder.js
@@ -51,7 +51,7 @@
});
}
-// 閿�鍞��璐�-鏍规嵁鍑哄簱鍗曟煡璇㈤攢鍞鍗曚互鍙婁骇鍝佷俊鎭�
+// 閿�鍞��璐�-鏍规嵁鍑哄簱鍗曟煡璇㈣鍗曞彿浠ュ強浜у搧淇℃伅
// /returnManagement/getByShippingId
export function returnManagementGetByShippingId(query) {
return request({
diff --git a/src/api/salesManagement/salesLedger.js b/src/api/salesManagement/salesLedger.js
index 6548927..4b2c1c3 100644
--- a/src/api/salesManagement/salesLedger.js
+++ b/src/api/salesManagement/salesLedger.js
@@ -101,7 +101,7 @@
});
}
-// 鏍规嵁閿�鍞悎鍚屽彿鏌ヤ骇鍝佷俊鎭�
+// 鏍规嵁璁㈠崟鍙锋煡浜у搧淇℃伅
export function getProductInfoByContractNo(query) {
return request({
url: "/purchase/ledger/getProductBySalesNo",
diff --git a/src/components/AIChatSidebar/index.vue b/src/components/AIChatSidebar/index.vue
index 7b22d7b..5c21d17 100644
--- a/src/components/AIChatSidebar/index.vue
+++ b/src/components/AIChatSidebar/index.vue
@@ -1147,7 +1147,7 @@
collectionStrategy: '鍥炴绛栫暐',
quotationStrategy: '鎶ヤ环绛栫暐',
nextAction: '涓嬩竴姝ュ姩浣�',
- salesContractNo: '閿�鍞悎鍚屽彿',
+ salesContractNo: '璁㈠崟鍙�',
revenue: '鏀跺叆',
materialCost: '鏉愭枡鎴愭湰',
laborCost: '浜哄伐鎴愭湰',
@@ -1188,9 +1188,9 @@
purchaseContractNumber: '閲囪喘鍚堝悓鍙�',
purchaseContractNo: '閲囪喘鍚堝悓鍙�',
purchaseOrderNumber: '閲囪喘鍚堝悓鍙�',
- salesContractNo: '閿�鍞悎鍚屽彿',
- salesContractNumber: '閿�鍞悎鍚屽彿',
- salesOrderNumber: '閿�鍞悎鍚屽彿',
+ salesContractNo: '璁㈠崟鍙�',
+ salesContractNumber: '璁㈠崟鍙�',
+ salesOrderNumber: '璁㈠崟鍙�',
salesContractNoId: '閿�鍞悎鍚孖D',
approveUserIds: '瀹℃壒鐢ㄦ埛ID鍒楄〃',
entryDateStart: '褰曞叆寮�濮嬫棩鏈�',
@@ -1253,9 +1253,9 @@
閲囪喘鍚堝悓鍙�: 'purchaseContractNumber',
閲囪喘鍗曞彿: 'purchaseContractNumber',
閲囪喘璁㈠崟鍙�: 'purchaseContractNumber',
- 閿�鍞悎鍚屽彿: 'salesContractNo',
- 閿�鍞崟鍙�: 'salesContractNo',
- 閿�鍞鍗曞彿: 'salesContractNo',
+ 璁㈠崟鍙�: 'salesContractNo',
+ 璁㈠崟鍙�: 'salesContractNo',
+ 璁㈠崟鍙峰彿: 'salesContractNo',
閿�鍞悎鍚孖D: 'salesContractNoId',
瀹℃壒鐢ㄦ埛ID鍒楄〃: 'approveUserIds',
褰曞叆寮�濮嬫棩鏈�: 'entryDateStart',
diff --git a/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
index 0605fe5..78680c4 100644
--- a/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
+++ b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
@@ -128,7 +128,7 @@
<el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{ currentPurchase.purchaseContractNumber }}</el-descriptions-item>
<el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{ currentPurchase.supplierName }}</el-descriptions-item>
<el-descriptions-item label="椤圭洰鍚嶇О">{{ currentPurchase.projectName }}</el-descriptions-item>
- <el-descriptions-item label="閿�鍞悎鍚屽彿">{{ currentPurchase.salesContractNo }}</el-descriptions-item>
+ <el-descriptions-item label="璁㈠崟鍙�">{{ currentPurchase.salesContractNo }}</el-descriptions-item>
<el-descriptions-item label="绛捐鏃ユ湡">{{ currentPurchase.executionDate }}</el-descriptions-item>
<el-descriptions-item label="褰曞叆鏃ユ湡">{{ currentPurchase.entryDate }}</el-descriptions-item>
<el-descriptions-item label="浠樻鏂瑰紡">{{ currentPurchase.paymentMethod }}</el-descriptions-item>
@@ -186,7 +186,7 @@
<template v-else>
<el-descriptions :column="2"
border>
- <el-descriptions-item label="閿�鍞鍗�">{{ currentDelivery.shippingInfo.salesContractNo || '--' }}</el-descriptions-item>
+ <el-descriptions-item label="璁㈠崟鍙�">{{ currentDelivery.shippingInfo.salesContractNo || '--' }}</el-descriptions-item>
<el-descriptions-item label="鍙戣揣璁㈠崟鍙�">{{ currentDelivery.shippingInfo.shippingNo || '--' }}</el-descriptions-item>
<el-descriptions-item label="瀹㈡埛鍚嶇О">{{ currentDelivery.shippingInfo.customerName || '--' }}</el-descriptions-item>
<el-descriptions-item label="鍙戣揣绫诲瀷">{{ currentDelivery.shippingInfo.type || '--' }}</el-descriptions-item>
diff --git a/src/views/collaborativeApproval/purchaseApproval/index.vue b/src/views/collaborativeApproval/purchaseApproval/index.vue
index bdd4182..3a07436 100644
--- a/src/views/collaborativeApproval/purchaseApproval/index.vue
+++ b/src/views/collaborativeApproval/purchaseApproval/index.vue
@@ -19,7 +19,7 @@
clearable
:prefix-icon="Search" />
</el-form-item>
- <el-form-item label="閿�鍞悎鍚屽彿锛�">
+ <el-form-item label="璁㈠崟鍙凤細">
<el-input v-model="searchForm.salesContractNo"
placeholder="璇疯緭鍏�"
clearable
@@ -101,7 +101,7 @@
prop="purchaseContractNumber"
width="200"
show-overflow-tooltip />
- <el-table-column label="閿�鍞悎鍚屽彿"
+ <el-table-column label="璁㈠崟鍙�"
prop="salesContractNo"
width="200"
show-overflow-tooltip />
diff --git a/src/views/collaborativeApproval/shipmentReview/index.vue b/src/views/collaborativeApproval/shipmentReview/index.vue
index ac2b790..c8ab5d8 100644
--- a/src/views/collaborativeApproval/shipmentReview/index.vue
+++ b/src/views/collaborativeApproval/shipmentReview/index.vue
@@ -2,11 +2,11 @@
<div class="app-container">
<div class="search_form">
<div>
- <span class="search_title">閿�鍞悎鍚屽彿锛�</span>
+ <span class="search_title">璁㈠崟鍙凤細</span>
<el-input
v-model="searchForm.salesContractNo"
style="width: 240px"
- placeholder="璇疯緭鍏ラ攢鍞悎鍚屽彿鎼滅储"
+ placeholder="璇疯緭鍏ヨ鍗曞彿鎼滅储"
@change="handleQuery"
clearable
:prefix-icon="Search"
@@ -110,7 +110,7 @@
},
},
{
- label: "閿�鍞悎鍚屽彿",
+ label: "璁㈠崟鍙�",
prop: "salesContractNo",
width: 170
},
diff --git a/src/views/customerService/afterSalesHandling/index.vue b/src/views/customerService/afterSalesHandling/index.vue
index a42337d..c2f84dd 100644
--- a/src/views/customerService/afterSalesHandling/index.vue
+++ b/src/views/customerService/afterSalesHandling/index.vue
@@ -67,7 +67,7 @@
<el-form-item>
<el-input
v-model="searchForm.orderNo"
- placeholder="璇疯緭鍏ラ攢鍞崟鍙�"
+ placeholder="璇疯緭鍏ヨ鍗曞彿"
clearable
/>
</el-form-item>
@@ -146,7 +146,7 @@
align: "center"
},
{
- label: "閿�鍞崟鍙�",
+ label: "璁㈠崟鍙�",
prop:"salesContractNo",
width: 150,
align: "center"
diff --git a/src/views/customerService/feedbackRegistration/components/formDia.vue b/src/views/customerService/feedbackRegistration/components/formDia.vue
index d0ba87b..280f2a1 100644
--- a/src/views/customerService/feedbackRegistration/components/formDia.vue
+++ b/src/views/customerService/feedbackRegistration/components/formDia.vue
@@ -38,7 +38,7 @@
</el-form-item>
</el-col>
<el-col :span="4">
- <el-form-item label="鍏宠仈閿�鍞崟鍙凤細"
+ <el-form-item label="鍏宠仈璁㈠崟鍙凤細"
prop="salesContractNo">
<el-select v-model="form.salesContractNo"
@change="associatedSalesOrderNumberChange"
@@ -231,8 +231,8 @@
dataType: "slot",
slot: "shippingStatus",
},
- { label: "蹇�掑叕鍙�", prop: "expressCompany", width: 140 },
- { label: "蹇�掑崟鍙�", prop: "expressNumber", width: 160 },
+ // { label: "蹇�掑叕鍙�", prop: "expressCompany", width: 140 },
+ // { label: "蹇�掑崟鍙�", prop: "expressNumber", width: 160 },
{
label: "鍙戣揣杞︾墝",
prop: "shippingCarNumber",
diff --git a/src/views/customerService/feedbackRegistration/index.vue b/src/views/customerService/feedbackRegistration/index.vue
index bdec0f2..1df1c3e 100644
--- a/src/views/customerService/feedbackRegistration/index.vue
+++ b/src/views/customerService/feedbackRegistration/index.vue
@@ -67,7 +67,7 @@
<el-col :span="4">
<el-form-item>
<el-input v-model="searchForm.orderNo"
- placeholder="璇疯緭鍏ラ攢鍞崟鍙�"
+ placeholder="璇疯緭鍏ヨ鍗曞彿"
clearable />
</el-form-item>
</el-col>
@@ -182,7 +182,7 @@
align: "center",
},
{
- label: "閿�鍞崟鍙�",
+ label: "璁㈠崟鍙�",
prop: "salesContractNo",
width: 150,
align: "center",
diff --git a/src/views/equipmentManagement/spareParts/index.vue b/src/views/equipmentManagement/spareParts/index.vue
index a060a85..da77df5 100644
--- a/src/views/equipmentManagement/spareParts/index.vue
+++ b/src/views/equipmentManagement/spareParts/index.vue
@@ -241,26 +241,26 @@
slot: "status",
dataType: "slot",
},
- {
- label: "浠锋牸",
- prop: "price",
- },
+ // {
+ // label: "浠锋牸",
+ // prop: "price",
+ // },
{
label: "鏁伴噺",
prop: "quantity",
},
- {
- label: "搴撳瓨棰勮鏁伴噺",
- prop: "warnNum",
- },
- {
- label: "棰勮閫氱煡浜�",
- prop: "notifyPersonName",
- },
- {
- label: "鎻忚堪",
- prop: "description",
- },
+ // {
+ // label: "搴撳瓨棰勮鏁伴噺",
+ // prop: "warnNum",
+ // },
+ // {
+ // label: "棰勮閫氱煡浜�",
+ // prop: "notifyPersonName",
+ // },
+ // {
+ // label: "鎻忚堪",
+ // prop: "description",
+ // },
{
label: "鎿嶄綔",
prop: "operation",
diff --git a/src/views/financialManagement/receivable/invoiceApply.vue b/src/views/financialManagement/receivable/invoiceApply.vue
index 528c887..41f8c70 100644
--- a/src/views/financialManagement/receivable/invoiceApply.vue
+++ b/src/views/financialManagement/receivable/invoiceApply.vue
@@ -240,7 +240,7 @@
<el-table-column prop="customerName" label="瀹㈡埛鍚嶇О" min-width="120" show-overflow-tooltip />
<el-table-column prop="productName" label="浜у搧鍚嶇О" min-width="120" show-overflow-tooltip />
<el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" min-width="140" show-overflow-tooltip />
- <el-table-column prop="salesContractNo" label="閿�鍞悎鍚屽彿" min-width="140" show-overflow-tooltip />
+ <el-table-column prop="salesContractNo" label="璁㈠崟鍙�" min-width="140" show-overflow-tooltip />
<el-table-column prop="shippingNo" label="鍙戣揣鍗曞彿" min-width="130" show-overflow-tooltip />
<el-table-column prop="shippingDate" label="鍙戣揣鏃ユ湡" width="110" align="center" />
<el-table-column prop="outboundAmount" label="鍑哄簱閲戦" width="110" align="right">
diff --git a/src/views/financialManagement/receivable/receipt.vue b/src/views/financialManagement/receivable/receipt.vue
index 3b200c8..693d25c 100644
--- a/src/views/financialManagement/receivable/receipt.vue
+++ b/src/views/financialManagement/receivable/receipt.vue
@@ -257,7 +257,7 @@
min-width="140"
show-overflow-tooltip />
<el-table-column prop="salesContractNo"
- label="閿�鍞悎鍚屽彿"
+ label="璁㈠崟鍙�"
min-width="140"
show-overflow-tooltip />
<el-table-column prop="shippingNo"
diff --git a/src/views/financialManagement/receivable/salesOut.vue b/src/views/financialManagement/receivable/salesOut.vue
index 0e24b37..2b0b66b 100644
--- a/src/views/financialManagement/receivable/salesOut.vue
+++ b/src/views/financialManagement/receivable/salesOut.vue
@@ -96,7 +96,7 @@
}),
},
{ label: "鍙戣揣缂栧彿", prop: "shippingNo", minWidth: "140" },
- { label: "閿�鍞鍗曞彿", prop: "salesContractNo", minWidth: "150" },
+ { label: "璁㈠崟鍙峰彿", prop: "salesContractNo", minWidth: "150" },
];
const dataList = ref([]);
diff --git a/src/views/financialManagement/receivable/salesReturn.vue b/src/views/financialManagement/receivable/salesReturn.vue
index f57f4ab..eada751 100644
--- a/src/views/financialManagement/receivable/salesReturn.vue
+++ b/src/views/financialManagement/receivable/salesReturn.vue
@@ -87,7 +87,7 @@
: Number(val).toLocaleString("zh-CN", { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
},
{ label: "閫�璐у師鍥�", prop: "returnReason", minWidth: "150", showOverflowTooltip: true },
- { label: "閿�鍞鍗曞彿", prop: "salesContractNo", minWidth: "150" },
+ { label: "璁㈠崟鍙峰彿", prop: "salesContractNo", minWidth: "150" },
];
const dataList = ref([]);
diff --git a/src/views/inventoryManagement/receiptManagement/Record.vue b/src/views/inventoryManagement/receiptManagement/Record.vue
index de2b2f0..c89b6fe 100644
--- a/src/views/inventoryManagement/receiptManagement/Record.vue
+++ b/src/views/inventoryManagement/receiptManagement/Record.vue
@@ -122,6 +122,9 @@
<el-table-column label="鍗曚綅"
prop="unit"
show-overflow-tooltip />
+ <el-table-column label="搴撲綅"
+ prop="warehouse"
+ show-overflow-tooltip />
<el-table-column label="鍏ュ簱鏁伴噺"
prop="stockInNum"
show-overflow-tooltip />
diff --git a/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue b/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
index a835ef4..f37c639 100644
--- a/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
+++ b/src/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue
@@ -24,6 +24,7 @@
<el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
<el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
<el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
+ <el-table-column label="搴撲綅" prop="warehouse" show-overflow-tooltip />
<el-table-column
label="鍚堟牸搴撳瓨鏁伴噺"
prop="qualifiedQuantity"
diff --git a/src/views/inventoryManagement/stockManagement/New.vue b/src/views/inventoryManagement/stockManagement/New.vue
index d49fc5a..ee03f68 100644
--- a/src/views/inventoryManagement/stockManagement/New.vue
+++ b/src/views/inventoryManagement/stockManagement/New.vue
@@ -8,77 +8,147 @@
:model="formState"
label-position="top"
ref="formRef">
- <el-form-item label="浜у搧鍚嶇О"
- prop="productModelId"
- :rules="[
- {
- required: true,
- message: '璇烽�夋嫨浜у搧',
- trigger: 'change',
- }
- ]">
- <el-button type="primary"
- @click="showProductSelectDialog = true">
- {{ formState.productName ? formState.productName : '閫夋嫨浜у搧' }}
- </el-button>
- </el-form-item>
- <el-form-item label="瑙勬牸"
- prop="productModelName">
- <el-input v-model="formState.productModelName"
- disabled />
- </el-form-item>
- <el-form-item label="鍗曚綅"
- prop="unit">
- <el-input v-model="formState.unit"
- disabled />
- </el-form-item>
- <el-form-item label="搴撳瓨绫诲瀷"
- prop="type"
- :rules="[
- {
- required: true,
- message: '璇烽�夋嫨搴撳瓨绫诲瀷',
- trigger: 'change',
- }
- ]">
- <el-select v-model="formState.type"
- placeholder="璇烽�夋嫨搴撳瓨绫诲瀷">
- <el-option label="鍚堟牸搴撳瓨"
- value="qualified" />
- <el-option label="涓嶅悎鏍煎簱瀛�"
- value="unqualified" />
- </el-select>
- </el-form-item>
- <el-form-item label="搴撳瓨鏁伴噺"
- prop="qualitity">
- <el-input-number v-model="formState.qualitity"
- :step="1"
- :min="1"
- style="width: 100%" />
- </el-form-item>
- <el-form-item label="鎵瑰彿"
- prop="batchNo">
- <el-input v-model="formState.batchNo"
- placeholder="璇疯緭鍏ユ壒鍙�" />
- </el-form-item>
- <el-form-item v-if="formState.type === 'qualified'"
- label="搴撳瓨棰勮鏁伴噺"
- prop="warnNum">
- <el-input-number v-model="formState.warnNum"
- :step="1"
- :min="0"
- :max="formState.qualitity"
- style="width: 100%" />
- </el-form-item>
- <el-form-item label="鍏ュ簱鏃堕棿"
- prop="createTime">
- <el-date-picker v-model="formState.createTime"
- type="datetime"
- placeholder="璇烽�夋嫨鍏ュ簱鏃堕棿"
- value-format="YYYY-MM-DD HH:mm:ss"
- format="YYYY-MM-DD HH:mm:ss"
- style="width: 100%" />
- </el-form-item>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="浜у搧鍚嶇О"
+ prop="productModelId"
+ :rules="[
+ {
+ required: true,
+ message: '璇烽�夋嫨浜у搧',
+ trigger: 'change',
+ }
+ ]">
+ <el-button type="primary"
+ @click="showProductSelectDialog = true">
+ {{ formState.productName ? formState.productName : '閫夋嫨浜у搧' }}
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瑙勬牸"
+ prop="productModelName">
+ <el-input v-model="formState.productModelName"
+ disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍗曚綅"
+ prop="unit">
+ <el-input v-model="formState.unit"
+ disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="搴撳瓨绫诲瀷"
+ prop="type"
+ :rules="[
+ {
+ required: true,
+ message: '璇烽�夋嫨搴撳瓨绫诲瀷',
+ trigger: 'change',
+ }
+ ]">
+ <el-select v-model="formState.type"
+ placeholder="璇烽�夋嫨搴撳瓨绫诲瀷">
+ <el-option label="鍚堟牸搴撳瓨"
+ value="qualified" />
+ <el-option label="涓嶅悎鏍煎簱瀛�"
+ value="unqualified" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="搴撳瓨鏁伴噺"
+ prop="qualitity">
+ <el-input-number v-model="formState.qualitity"
+ :step="1"
+ :min="1"
+ style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎵瑰彿"
+ prop="batchNo">
+ <el-input v-model="formState.batchNo"
+ placeholder="璇疯緭鍏ユ壒鍙�" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍏ュ簱鏃堕棿"
+ prop="createTime">
+ <el-date-picker v-model="formState.createTime"
+ type="datetime"
+ placeholder="璇烽�夋嫨鍏ュ簱鏃堕棿"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item v-if="formState.type === 'qualified'"
+ label="搴撳瓨棰勮鏁伴噺"
+ prop="warnNum">
+ <el-input-number v-model="formState.warnNum"
+ :step="1"
+ :min="0"
+ :max="formState.qualitity"
+ style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鏄惁璐ㄦ"
+ prop="needInspect">
+ <el-switch v-model="formState.needInspect"
+ active-text="闇�瑕佽川妫�"
+ inactive-text="鐩存帴鍏ュ簱" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item v-if="formState.needInspect"
+ label="璐ㄦ绫诲瀷"
+ prop="inspectType">
+ <el-radio-group v-model="formState.inspectType">
+ <el-radio :value="0">鍘熸潗鏂欐楠�</el-radio>
+ <el-radio :value="1">杩囩▼妫�楠�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="閫夋嫨璁惧"
+ prop="deviceId">
+ <el-select v-model="formState.deviceId"
+ placeholder="璇烽�夋嫨璁惧"
+ filterable
+ clearable
+ style="width: 100%"
+ @change="handleDeviceChange">
+ <el-option v-for="device in iotDeviceList"
+ :key="device.id"
+ :label="device.deviceName"
+ :value="device.id" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="搴撲綅"
+ prop="warehouse">
+ <el-input v-model="formState.warehouse"
+ placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄨ幏鍙�"
+ disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
<el-form-item label="澶囨敞"
prop="remark">
<el-input v-model="formState.remark"
@@ -102,10 +172,11 @@
</template>
<script setup>
- import { ref, computed, watch, getCurrentInstance } from "vue";
+ import { ref, computed, watch, getCurrentInstance, onMounted } from "vue";
import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
import { addStockInRecordOnly } from "@/api/inventoryManagement/stockInventory.js";
import { createStockUnInventory } from "@/api/inventoryManagement/stockUninventory.js";
+ import { getIotDeviceList as getIotDeviceListApi } from "@/api/equipmentManagement/ledger.js";
const props = defineProps({
visible: {
@@ -134,7 +205,14 @@
warnNum: 0,
createTime: "",
remark: "",
+ needInspect: false,
+ inspectType: 0,
+ deviceId: "",
+ warehouse: "",
});
+
+ // IoT璁惧鍒楄〃
+ const iotDeviceList = ref([]);
const isShow = computed({
get() {
@@ -173,6 +251,10 @@
warnNum: 0,
createTime: "",
remark: "",
+ needInspect: false,
+ inspectType: 0,
+ deviceId: "",
+ warehouse: "",
};
isShow.value = false;
};
@@ -192,6 +274,32 @@
}
};
+ // 鑾峰彇IoT璁惧鍒楄〃
+ const getIotDeviceList = async () => {
+ try {
+ const res = await getIotDeviceListApi();
+ if (res.data) {
+ iotDeviceList.value = res.data;
+ }
+ } catch (error) {
+ console.error("鑾峰彇IoT璁惧鍒楄〃澶辫触:", error);
+ }
+ };
+
+ // 璁惧閫夋嫨鍙樻洿鏃讹紝鑷姩濉厖搴撲綅
+ const handleDeviceChange = (deviceId) => {
+ const device = iotDeviceList.value.find(d => d.id === deviceId);
+ if (device) {
+ formState.value.warehouse = device.storageLocation || '';
+ } else {
+ formState.value.warehouse = '';
+ }
+ };
+
+ onMounted(() => {
+ getIotDeviceList();
+ });
+
const handleSubmit = () => {
proxy.$refs["formRef"].validate(valid => {
if (valid) {
@@ -204,17 +312,21 @@
proxy.$modal.msgError("璇烽�夋嫨瑙勬牸");
return;
}
+ // 鏋勫缓璇锋眰鍙傛暟
+ const params = {
+ ...formState.value,
+ // 濡傛灉涓嶉渶瑕佽川妫�锛屼笉浼� inspectType
+ inspectType: formState.value.needInspect ? formState.value.inspectType : undefined,
+ };
if (formState.value.type === "qualified") {
- addStockInRecordOnly(formState.value).then(res => {
- // 鍏抽棴妯℃�佹
+ addStockInRecordOnly(params).then(res => {
isShow.value = false;
- // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
emit("completed");
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
});
} else {
- formState.value.warnNum = 0;
- createStockUnInventory(formState.value).then(res => {
+ params.warnNum = 0;
+ createStockUnInventory(params).then(res => {
// 鍏抽棴妯℃�佹
isShow.value = false;
// 鍛婄煡鐖剁粍浠跺凡瀹屾垚
diff --git a/src/views/inventoryManagement/stockManagement/Record.vue b/src/views/inventoryManagement/stockManagement/Record.vue
index 1263dad..b25c570 100644
--- a/src/views/inventoryManagement/stockManagement/Record.vue
+++ b/src/views/inventoryManagement/stockManagement/Record.vue
@@ -87,6 +87,9 @@
<el-table-column label="鎵瑰彿"
prop="batchNo"
show-overflow-tooltip />
+ <el-table-column label="搴撲綅"
+ prop="warehouse"
+ show-overflow-tooltip />
<el-table-column label="鐗╄仈璁惧"
prop="warehouse"
show-overflow-tooltip
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
index 9689be8..d71941a 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
@@ -60,7 +60,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="閿�鍞鍗�">{{
+ <el-descriptions-item label="璁㈠崟鍙�">{{
detailData.shippingInfo.salesContractNo || "--"
}}</el-descriptions-item>
<el-descriptions-item label="鍑哄簱鎵瑰彿">{{
@@ -142,7 +142,7 @@
<el-descriptions-item label="椤圭洰鍚嶇О">{{
detailData.projectName || "--"
}}</el-descriptions-item>
- <el-descriptions-item label="閿�鍞悎鍚屽彿">{{
+ <el-descriptions-item label="璁㈠崟鍙�">{{
detailData.salesContractNo || "--"
}}</el-descriptions-item>
<el-descriptions-item label="绛捐鏃ユ湡">{{
@@ -167,6 +167,7 @@
<el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" />
<el-table-column prop="unit" label="鍗曚綅" />
<el-table-column prop="quantity" label="鏁伴噺" />
+ <el-table-column prop="storageLocation" label="搴撲綅" />
<el-table-column prop="taxInclusiveUnitPrice" label="鍚◣鍗曚环">
<template #default="scope"
>楼{{
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalModuleRegistry.js b/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalModuleRegistry.js
index fd56eca..dbc4c31 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalModuleRegistry.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalModuleRegistry.js
@@ -8,6 +8,7 @@
RESIGN: "resign",
WORK_HANDOVER: "work_handover",
LEAVE: "leave",
+ COMPENSATORY: "compensatory",
OVERTIME: "overtime",
TRAVEL_REIMBURSE: "travel_reimburse",
COST_REIMBURSE: "cost_reimburse",
@@ -20,6 +21,7 @@
[APPROVAL_MODULE_KEYS.TRANSFER]: 11,
[APPROVAL_MODULE_KEYS.WORK_HANDOVER]: 13,
[APPROVAL_MODULE_KEYS.LEAVE]: 14,
+ [APPROVAL_MODULE_KEYS.COMPENSATORY]: 19,
[APPROVAL_MODULE_KEYS.OVERTIME]: 15,
[APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE]: 16,
[APPROVAL_MODULE_KEYS.COST_REIMBURSE]: 17,
@@ -57,6 +59,12 @@
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.LEAVE],
typeLabels: ["璇峰亣", "璇峰亣鐢宠", "璇峰亣瀹℃壒"],
},
+ [APPROVAL_MODULE_KEYS.COMPENSATORY]: {
+ label: "璋冧紤鐢宠",
+ approvalType: "compensatory",
+ businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.COMPENSATORY],
+ typeLabels: ["璋冧紤", "璋冧紤鐢宠", "璋冧紤瀹℃壒"],
+ },
[APPROVAL_MODULE_KEYS.OVERTIME]: {
label: "鍔犵彮鐢宠",
approvalType: "overtime",
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue b/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
index d094c13..4830157 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
@@ -167,26 +167,6 @@
</el-row>
- <el-form-item label="妯℃澘璇存槑">
-
- <el-input
-
- v-model="form.description"
-
- type="textarea"
-
- :rows="2"
-
- placeholder="绠�瑕佽鏄庤妯℃澘鐨勯�傜敤鍦烘櫙"
-
- maxlength="200"
-
- show-word-limit
-
- />
-
- </el-form-item>
-
<el-form-item label="濉姤閰嶇疆">
<FormConfigEditor
@@ -259,8 +239,6 @@
</el-tag>
</el-descriptions-item>
-
- <el-descriptions-item label="璇存槑" :span="2">{{ detailRow.description || "鈥�" }}</el-descriptions-item>
<el-descriptions-item label="濉姤鎻愮ず" :span="2">
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js b/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
index 8622e8b..6883cfd 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
@@ -94,7 +94,6 @@
align: "center",
formatData: (v) => templateTypeLabel(v),
},
- { label: "璇存槑", prop: "description", minWidth: 160, showOverflowTooltip: true },
{
label: "鑺傜偣鏁�",
prop: "flowNodes",
diff --git a/src/views/officeProcessAutomation/AttendManage/compensatory-leave/index.vue b/src/views/officeProcessAutomation/AttendManage/compensatory-leave/index.vue
new file mode 100644
index 0000000..5eea7a3
--- /dev/null
+++ b/src/views/officeProcessAutomation/AttendManage/compensatory-leave/index.vue
@@ -0,0 +1,314 @@
+<!--OA妯″潡锛氳皟浼戠敵璇�-->
+<template>
+ <div class="app-container">
+ <div class="search_form mb20">
+ <div>
+ <span class="search_title">瀹℃壒鍗曞彿锛�</span>
+ <el-input
+ v-model="searchForm.instanceNo"
+ style="width: 220px"
+ placeholder="璇疯緭鍏ュ鎵瑰崟鍙�"
+ clearable
+ @keyup.enter="onSearch"
+ />
+ <span class="search_title" style="margin-left: 12px">鐢宠浜猴細</span>
+ <el-input
+ v-model="searchForm.applicantKeyword"
+ style="width: 220px"
+ placeholder="濮撳悕鎴栫紪鍙�"
+ clearable
+ :prefix-icon="Search"
+ @keyup.enter="onSearch"
+ />
+ <el-button type="primary" style="margin-left: 10px" @click="onSearch">鎼滅储</el-button>
+ <el-button @click="resetSearch">閲嶇疆</el-button>
+ </div>
+ <div>
+ <el-button type="primary" @click="openAddWithTemplate">鏂板璋冧紤鐢宠</el-button>
+ </div>
+ </div>
+ <div class="table_list">
+ <PIMTable
+ rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :page="page"
+ :isSelection="false"
+ :tableLoading="tableLoading"
+ @pagination="onPagination"
+ :total="page.total"
+ />
+ </div>
+
+ <ApprovalInstanceSubmitDialog
+ v-model="submitDialog.visible"
+ :title="submitDialogTitle"
+ :form="submitForm"
+ :rules="submitFormRules"
+ :fields="submitFormFields"
+ :active-template="activeTemplate"
+ :user-options="flowUserOptions"
+ :is-edit="isSubmitEdit"
+ :saving="submitSaving"
+ :form-ref="submitFormRef"
+ flow-attachments-only
+ @submit="onSubmit"
+ >
+ <template #before="{ form, fields }">
+ <FormPayloadFields :fields="displayTemplateFields(fields)" :form-payload="form.formPayload" />
+ <el-row :gutter="24">
+ <el-col :span="12">
+ <el-form-item label="璋冧紤浣欓" prop="compensatoryBalanceHours">
+ <el-input-number
+ v-model="form.compensatoryBalanceHours"
+ :min="0"
+ :max="9999"
+ :precision="2"
+ :step="1"
+ controls-position="right"
+ placeholder="灏忔椂"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璋冧紤鏃堕暱">
+ <el-input :model-value="compensatoryDurationDisplay(form)" readonly placeholder="鏍规嵁妯℃澘涓皟浼戞椂闂磋嚜鍔ㄨ绠�">
+ <template #append>灏忔椂</template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </template>
+ </ApprovalInstanceSubmitDialog>
+
+ <ApprovalTemplateBindDialog
+ v-model:visible="templateBindVisible"
+ :module-key="APPROVAL_MODULE_KEYS.COMPENSATORY"
+ skip-form-confirm
+ @confirm="onTemplateBound"
+ @closed="onTemplateBindClosed"
+ />
+
+ <ApprovalInstanceDetailDialog
+ v-model="detailDialog.visible"
+ title="璋冧紤鐢宠璇︽儏"
+ :row="detailRow"
+ @edit="openEditFromDetail"
+ />
+ </div>
+</template>
+
+<script setup>
+import { Search } from "@element-plus/icons-vue";
+import dayjs from "dayjs";
+import { userListNoPageByTenantId } from "@/api/system/user.js";
+import { ElMessage } from "element-plus";
+import { computed, onMounted, reactive, ref, watch } from "vue";
+import FormPayloadFields from "../../ApproveManage/approve-list/components/FormPayloadFields.vue";
+import ApprovalInstanceDetailDialog from "../../ApproveManage/approve-shared/components/ApprovalInstanceDetailDialog.vue";
+import ApprovalInstanceSubmitDialog from "../../ApproveManage/approve-shared/components/ApprovalInstanceSubmitDialog.vue";
+import ApprovalTemplateBindDialog from "../../ApproveManage/approve-shared/components/ApprovalTemplateBindDialog.vue";
+import { buildInstanceTableColumns } from "../../ApproveManage/approve-shared/approvalInstanceFormConfigTable.js";
+import { APPROVAL_MODULE_KEYS } from "../../ApproveManage/approve-shared/approvalModuleRegistry.js";
+import { useApprovalInstanceModule } from "../../ApproveManage/approve-shared/useApprovalInstanceModule.js";
+import { useFlowUserOptions } from "../../ApproveManage/approve-shared/useFlowUserOptions.js";
+import { SELECT_OPTION_SOURCE } from "../../ApproveManage/approve-template/selectOptionSource.js";
+
+function isCompensatoryBalanceField(field) {
+ const label = String(field?.label || "");
+ return label.includes("璋冧紤浣欓") || field?.key === "compensatoryBalanceHours";
+}
+
+function isCompensatoryDurationField(field) {
+ const label = String(field?.label || "");
+ return label.includes("璋冧紤鏃堕暱") || field?.key === "compensatoryDurationHours";
+}
+
+function displayTemplateFields(fields = []) {
+ return (fields || []).filter((f) => !isCompensatoryBalanceField(f) && !isCompensatoryDurationField(f));
+}
+
+function findCompensatoryTimeTemplateField(fields = []) {
+ return (
+ fields.find((f) => f?.type === "datetimerange" && String(f?.label || "").includes("璋冧紤鏃堕棿")) ||
+ fields.find((f) => f?.type === "datetimerange" && f?.key === "dateRange") ||
+ fields.find((f) => f?.type === "datetimerange") ||
+ null
+ );
+}
+
+function findApplicantTemplateField(fields = []) {
+ return (
+ fields.find((f) => String(f?.label || "").includes("鐢宠浜�")) ||
+ fields.find((f) => f?.type === "select" && f?.optionSource === SELECT_OPTION_SOURCE.USER) ||
+ null
+ );
+}
+
+function resolveCompensatoryTimeRange(payload, compensatoryTimeField) {
+ if (!compensatoryTimeField?.key) return { start: "", end: "" };
+ const val = payload?.[compensatoryTimeField.key];
+ if (!Array.isArray(val) || val.length < 2) return { start: "", end: "" };
+ return { start: val[0] || "", end: val[1] || "" };
+}
+
+function computeCompensatoryHours(startStr, endStr) {
+ if (!startStr || !endStr) return null;
+ const t0 = dayjs(startStr);
+ const t1 = dayjs(endStr);
+ if (!t0.isValid() || !t1.isValid() || !t1.isAfter(t0)) return null;
+ const hours = t1.diff(t0, "millisecond") / (60 * 60 * 1000);
+ return Math.round(hours * 100) / 100;
+}
+
+function compensatoryDurationDisplay(form) {
+ const compensatoryTimeField = findCompensatoryTimeTemplateField(form.formFieldDefs);
+ const { start, end } = resolveCompensatoryTimeRange(form.formPayload, compensatoryTimeField);
+ const h = computeCompensatoryHours(start, end);
+ return h == null ? "" : String(h);
+}
+
+const searchForm = reactive({
+ instanceNo: "",
+ applicantKeyword: "",
+});
+
+function validateCompensatoryBeforeSave() {
+ const compensatoryTimeField = findCompensatoryTimeTemplateField(submitForm.formFieldDefs);
+ const { start, end } = resolveCompensatoryTimeRange(submitForm.formPayload, compensatoryTimeField);
+ if (computeCompensatoryHours(start, end) == null) {
+ ElMessage.warning("璇锋鏌ユā鏉夸腑鐨勮皟浼戞椂闂达紝缁撴潫鏃堕棿椤绘櫄浜庡紑濮嬫椂闂�");
+ throw new Error("invalid compensatory time");
+ }
+}
+
+const mod = useApprovalInstanceModule({
+ moduleKey: APPROVAL_MODULE_KEYS.COMPENSATORY,
+ beforeSave: validateCompensatoryBeforeSave,
+ extraFormRules: {
+ compensatoryBalanceHours: [{ required: true, message: "璇峰~鍐欒皟浼戜綑棰�", trigger: "blur" }],
+ },
+});
+
+const {
+ tableData,
+ tableLoading,
+ page,
+ detailDialog,
+ detailRow,
+ submitDialog,
+ submitEditRow,
+ submitForm,
+ submitFormRef,
+ submitSaving,
+ isSubmitEdit,
+ activeTemplate,
+ submitFormFields,
+ submitFormRules,
+ submitDialogTitle,
+ templateBindVisible,
+ handleQuery,
+ initModuleList,
+ pagination,
+ openAddWithTemplate,
+ onTemplateBound,
+ onTemplateBindClosed,
+ openEditFromDetail,
+ submitInstanceForm,
+ buildTableActions,
+} = mod;
+
+const { flowUserOptions, loadFlowUsers } = useFlowUserOptions();
+const allUsersCache = ref([]);
+
+const applicantTemplateField = computed(() =>
+ findApplicantTemplateField(submitForm.formFieldDefs)
+);
+
+function unwrapArray(payload) {
+ if (Array.isArray(payload)) return payload;
+ if (payload && Array.isArray(payload.data)) return payload.data;
+ return [];
+}
+
+async function loadUserPool() {
+ try {
+ const res = await userListNoPageByTenantId();
+ allUsersCache.value = unwrapArray(res);
+ } catch {
+ allUsersCache.value = [];
+ }
+}
+
+watch(
+ () => submitDialog.visible,
+ (v) => {
+ if (!v) return;
+ if (submitForm.compensatoryBalanceHours == null && isSubmitEdit.value) {
+ submitForm.compensatoryBalanceHours =
+ submitEditRow.value?.formPayload?.compensatoryBalanceHours ??
+ submitEditRow.value?.compensatoryBalanceHours;
+ }
+ if (submitForm.compensatoryBalanceHours == null && !isSubmitEdit.value) {
+ submitForm.compensatoryBalanceHours = undefined;
+ }
+ }
+);
+
+watch(
+ () => {
+ const key = applicantTemplateField.value?.key;
+ return key ? submitForm.formPayload[key] : undefined;
+ },
+ async (uid) => {
+ if (!applicantTemplateField.value || !uid) return;
+ if (!allUsersCache.value.length) await loadUserPool();
+ }
+);
+
+const tableColumn = buildInstanceTableColumns(tableData, buildTableActions, {
+ moduleKey: APPROVAL_MODULE_KEYS.COMPENSATORY,
+});
+
+function onSearch() {
+ handleQuery(searchForm);
+}
+
+function resetSearch() {
+ searchForm.instanceNo = "";
+ searchForm.applicantKeyword = "";
+ onSearch();
+}
+
+function onPagination(obj) {
+ pagination(obj, searchForm);
+}
+
+async function onSubmit() {
+ const ok = await submitInstanceForm({ skipValidate: true });
+ if (ok) ElMessage.success(isSubmitEdit.value ? "淇敼鎴愬姛" : "鎻愪氦鎴愬姛");
+}
+
+onMounted(async () => {
+ loadFlowUsers();
+ await initModuleList(searchForm);
+});
+</script>
+
+<style scoped>
+.mb20 {
+ margin-bottom: 20px;
+}
+.search_form {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between;
+ gap: 12px;
+}
+.search_title {
+ font-size: 14px;
+ color: var(--el-text-color-regular);
+}
+</style>
diff --git a/src/views/personnelManagement/classsSheduling/index.vue b/src/views/personnelManagement/classsSheduling/index.vue
index 140ffba..8b88c92 100644
--- a/src/views/personnelManagement/classsSheduling/index.vue
+++ b/src/views/personnelManagement/classsSheduling/index.vue
@@ -101,14 +101,16 @@
</div>
<div class="user-details">
<h4 class="user-name">{{ item.name }}</h4>
- <!-- <div class="user-stats">
- <span class="stat-item">鏃�:{{ item.day0 }}</span>
- <span class="stat-item">涓�:{{ item.day1 }}</span>
- <span class="stat-item">澶�:{{ item.day2 }}</span>
- <span class="stat-item">浼�:{{ item.day3 }}</span>
- <span class="stat-item">鍋�:{{ item.day4 }}</span>
- <span class="stat-item">宸�:{{ item.day6 }}</span>
- </div> -->
+ <div class="user-stats">
+ <span v-if="item.monthlyAttendance?.['浼戞伅']" class="stat-item stat-rest">浼�:{{ item.monthlyAttendance['浼戞伅'] }}</span>
+ <el-tooltip v-if="item.holidayDates?.length > 0" placement="top">
+ <template #content>
+ <div>璇峰亣鏃ユ湡锛�</div>
+ <div v-for="date in item.holidayDates" :key="date">{{ date }}</div>
+ </template>
+ <span class="stat-item stat-holiday">鍋�:{{ item.holidayDates.length }}</span>
+ </el-tooltip>
+ </div>
<div class="user-total">
<span class="total-label">鍚堣鍑哄嫟:</span>
<span class="total-value">{{ item.monthlyAttendance.totalAttendance }}澶�</span>
@@ -153,6 +155,7 @@
'shift-box-leave': m.shift === '璇峰亣',
'shift-box-other': m.shift === '澶�11',
'shift-box-business': m.shift === '澶�12',
+ 'holiday-cell': m.isHoliday,
}">
<span class="shift-text">{{ getShiftNameByValue(m.shift) || '鈥�' }}</span>
</div>
@@ -1280,4 +1283,40 @@
margin-bottom: 8px;
margin-top: 12px;
}
+
+ /* 璇峰亣浼戞伅鏃ユ湡鐗规畩鏍峰紡 */
+ .holiday-cell {
+ background-color: #fff3cd !important;
+ color: #856404 !important;
+ border: 1px solid #ffc107 !important;
+ }
+
+ /* 鐢ㄦ埛缁熻鍖哄煙 */
+ .user-stats {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+ margin-bottom: 4px;
+ }
+
+ .stat-item {
+ font-size: 12px;
+ color: #666;
+ padding-right: 4px;
+ }
+
+ .stat-rest {
+ color: #10b981;
+ background-color: rgba(16, 185, 129, 0.1);
+ padding: 1px 6px;
+ border-radius: 10px;
+ }
+
+ .stat-holiday {
+ color: #f59e0b;
+ background-color: rgba(245, 158, 11, 0.1);
+ padding: 1px 6px;
+ border-radius: 10px;
+ cursor: pointer;
+ }
</style>
diff --git a/src/views/procurementManagement/paymentLedger/index.vue b/src/views/procurementManagement/paymentLedger/index.vue
index 8ec0dd9..d42c93c 100644
--- a/src/views/procurementManagement/paymentLedger/index.vue
+++ b/src/views/procurementManagement/paymentLedger/index.vue
@@ -84,6 +84,9 @@
<el-table-column label="閲囪喘鍚堝悓鍙�"
prop="purchaseContractNumber"
show-overflow-tooltip/>
+ <el-table-column label="閲囪喘鎬诲悎鍚屽彿"
+ prop="masterContractNo"
+ show-overflow-tooltip/>
<el-table-column label="椤圭洰鍚嶇О"
prop="projectName"
show-overflow-tooltip/>
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 83089cf..47ec1e4 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -27,13 +27,13 @@
clearable
:prefix-icon="Search" />
</el-form-item>
- <el-form-item label="閿�鍞悎鍚屽彿锛�">
- <el-input v-model="searchForm.salesContractNo"
- placeholder="璇疯緭鍏�"
- clearable
- prefix-icon="Search"
- @change="handleQuery" />
- </el-form-item>
+<!-- <el-form-item label="璁㈠崟鍙凤細">-->
+<!-- <el-input v-model="searchForm.salesContractNo"-->
+<!-- placeholder="璇疯緭鍏�"-->
+<!-- clearable-->
+<!-- prefix-icon="Search"-->
+<!-- @change="handleQuery" />-->
+<!-- </el-form-item>-->
<el-form-item label="椤圭洰鍚嶇О锛�">
<el-input v-model="searchForm.projectName"
placeholder="璇疯緭鍏�"
@@ -217,10 +217,10 @@
prop="purchaseContractNumber"
width="160"
show-overflow-tooltip />
- <el-table-column label="閿�鍞悎鍚屽彿"
- prop="salesContractNo"
- width="160"
- show-overflow-tooltip />
+<!-- <el-table-column label="璁㈠崟鍙�"-->
+<!-- prop="salesContractNo"-->
+<!-- width="160"-->
+<!-- show-overflow-tooltip />-->
<el-table-column label="渚涘簲鍟嗗悕绉�"
prop="supplierName"
width="160"
@@ -324,21 +324,21 @@
clearable />
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�"
- prop="salesLedgerId">
- <el-select v-model="form.salesLedgerId"
- placeholder="璇烽�夋嫨"
- filterable
- clearable
- @change="salesLedgerChange">
- <el-option v-for="item in salesContractList"
- :key="item.id"
- :label="item.salesContractNo"
- :value="item.id" />
- </el-select>
- </el-form-item>
- </el-col>
+<!-- <el-col :span="12">-->
+<!-- <el-form-item label="璁㈠崟鍙凤細"-->
+<!-- prop="salesLedgerId">-->
+<!-- <el-select v-model="form.salesLedgerId"-->
+<!-- placeholder="璇烽�夋嫨"-->
+<!-- filterable-->
+<!-- clearable-->
+<!-- @change="salesLedgerChange">-->
+<!-- <el-option v-for="item in salesContractList"-->
+<!-- :key="item.id"-->
+<!-- :label="item.salesContractNo"-->
+<!-- :value="item.id" />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
</el-row>
<el-row :gutter="30">
<el-col :span="12">
@@ -585,6 +585,35 @@
<el-tag v-else :type="scope.row.isChecked ? 'success' : 'info'">
{{ scope.row.isChecked ? '鏄�' : '鍚�' }}
</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="閫夋嫨璁惧"
+ prop="deviceId"
+ width="150">
+ <template #default="scope">
+ <span v-if="scope.row.productType === 2">--</span>
+ <el-select v-else
+ v-model="scope.row.deviceId"
+ placeholder="璇烽�夋嫨璁惧"
+ filterable
+ clearable
+ @change="handleDeviceChange(scope.row, scope.$index)">
+ <el-option v-for="device in iotDeviceList"
+ :key="device.id"
+ :label="device.deviceName"
+ :value="device.id" />
+ </el-select>
+ </template>
+ </el-table-column>
+ <el-table-column label="搴撲綅"
+ prop="storageLocation"
+ width="120">
+ <template #default="scope">
+ <span v-if="scope.row.productType === 2">--</span>
+ <el-input v-else
+ v-model="scope.row.storageLocation"
+ placeholder="鑷姩鑾峰彇"
+ disabled />
</template>
</el-table-column>
<el-table-column label="鍏ュ簱瀹℃牳鐘舵��"
@@ -853,6 +882,32 @@
</el-row>
<el-row :gutter="30" v-if="productForm.productType !== 2">
<el-col :span="12">
+ <el-form-item label="閫夋嫨璁惧锛�"
+ prop="deviceId">
+ <el-select v-model="productForm.deviceId"
+ placeholder="璇烽�夋嫨璁惧"
+ filterable
+ clearable
+ style="width: 100%"
+ @change="handleProductDeviceChange">
+ <el-option v-for="device in iotDeviceList"
+ :key="device.id"
+ :label="device.deviceName"
+ :value="device.id" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="搴撲綅锛�"
+ prop="storageLocation">
+ <el-input v-model="productForm.storageLocation"
+ placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄨ幏鍙�"
+ disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30" v-if="productForm.productType !== 2">
+ <el-col :span="12">
<el-form-item label="鏄惁璐ㄦ锛�"
prop="isChecked">
<el-radio-group v-model="productForm.isChecked">
@@ -950,6 +1005,7 @@
const salesContractList = ref([]);
const supplierList = ref([]);
const contractList = ref([]); // 渚涘簲鍟嗗悎鍚屽垪琛�
+ const iotDeviceList = ref([]); // IoT璁惧鍒楄〃
const contractFileDialogVisible = ref(false);
const contractFileList = ref([]);
const tableLoading = ref(false);
@@ -965,6 +1021,7 @@
import { modelList, productTreeList } from "@/api/basicData/product.js";
import { getSparePartsList } from "@/api/equipmentManagement/spareParts.js";
import { getSupplierContractList, getSupplierContractFilesByNo } from "@/api/basicData/supplierContract.js";
+ import { getIotDeviceList as getIotDeviceListApi } from "@/api/equipmentManagement/ledger.js";
import dayjs from "dayjs";
import FileUpload from "@/components/AttachmentUpload/file/index.vue";
@@ -1185,6 +1242,8 @@
invoiceType: "",
warnNum: "",
isChecked: false,
+ deviceId: "",
+ storageLocation: "",
},
productRules: {
productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
@@ -2284,6 +2343,39 @@
}
};
+ // 鑾峰彇IoT璁惧鍒楄〃
+ // 鑾峰彇IoT璁惧鍒楄〃
+ const getIotDeviceList = async () => {
+ try {
+ const res = await getIotDeviceListApi();
+ if (res.data) {
+ iotDeviceList.value = res.data;
+ }
+ } catch (error) {
+ console.error("鑾峰彇IoT璁惧鍒楄〃澶辫触:", error);
+ }
+ };
+
+ // 璁惧閫夋嫨鍙樻洿鏃讹紝鑷姩濉厖搴撲綅
+ const handleDeviceChange = (row, index) => {
+ const device = iotDeviceList.value.find(d => d.id === row.deviceId);
+ if (device) {
+ row.storageLocation = device.storageLocation || '';
+ } else {
+ row.storageLocation = '';
+ }
+ };
+
+ // 浜у搧寮圭獥涓澶囬�夋嫨鍙樻洿鏃讹紝鑷姩濉厖搴撲綅
+ const handleProductDeviceChange = (deviceId) => {
+ const device = iotDeviceList.value.find(d => d.id === deviceId);
+ if (device) {
+ productForm.value.storageLocation = device.storageLocation || '';
+ } else {
+ productForm.value.storageLocation = '';
+ }
+ };
+
// 鏍煎紡鍖栨枃浠跺ぇ灏�
const formatFileSize = (bytes) => {
if (!bytes) return '0 B';
@@ -2296,6 +2388,7 @@
onMounted(() => {
getList();
getTemplateList();
+ getIotDeviceList();
});
</script>
diff --git a/src/views/procurementManagement/purchaseReturnOrder/index.vue b/src/views/procurementManagement/purchaseReturnOrder/index.vue
index 018f8e3..3b3dd90 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/index.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/index.vue
@@ -275,6 +275,11 @@
width: 160,
},
{
+ label: "閲囪喘鎬诲悎鍚屽彿",
+ prop: "masterContractNo",
+ width: 160,
+ },
+ {
label: "鍒朵綔鏃ユ湡",
prop: "preparedAt",
width: 130,
diff --git a/src/views/procurementManagement/receivingManagement/index.vue b/src/views/procurementManagement/receivingManagement/index.vue
index a0d54a5..c53915c 100644
--- a/src/views/procurementManagement/receivingManagement/index.vue
+++ b/src/views/procurementManagement/receivingManagement/index.vue
@@ -21,7 +21,7 @@
@change="handleQuery"
/>
</el-form-item>
- <el-form-item label="閿�鍞悎鍚屽彿锛�">
+ <el-form-item label="璁㈠崟鍙凤細">
<el-input
v-model="searchForm.salesContractNo"
placeholder="璇疯緭鍏�"
@@ -92,7 +92,8 @@
</el-table-column>
<el-table-column align="center" label="搴忓彿" type="index" width="60" />
<el-table-column label="閲囪喘鍚堝悓鍙�" prop="purchaseContractNumber" width="160" show-overflow-tooltip />
- <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" width="160" show-overflow-tooltip />
+ <el-table-column label="閲囪喘鎬诲悎鍚屽彿" prop="masterContractNo" width="160" show-overflow-tooltip />
+ <el-table-column label="璁㈠崟鍙�" prop="salesContractNo" width="160" show-overflow-tooltip />
<el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="160" show-overflow-tooltip />
<el-table-column label="椤圭洰鍚嶇О" prop="projectName" width="320" show-overflow-tooltip />
<el-table-column label="鏀惰揣鐘舵��" prop="status" width="100" show-overflow-tooltip>
diff --git a/src/views/procurementManagement/receivingManagement/modal/ReceiptForm.vue b/src/views/procurementManagement/receivingManagement/modal/ReceiptForm.vue
index 345431c..fc2e702 100644
--- a/src/views/procurementManagement/receivingManagement/modal/ReceiptForm.vue
+++ b/src/views/procurementManagement/receivingManagement/modal/ReceiptForm.vue
@@ -16,7 +16,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�">
+ <el-form-item label="璁㈠崟鍙凤細">
<el-input :model-value="detailData.salesContractNo || ''" disabled />
</el-form-item>
</el-col>
diff --git a/src/views/productionManagement/productionOrder/index.vue b/src/views/productionManagement/productionOrder/index.vue
index 9c7682b..eef215f 100644
--- a/src/views/productionManagement/productionOrder/index.vue
+++ b/src/views/productionManagement/productionOrder/index.vue
@@ -278,6 +278,11 @@
prop: "npsNo",
width: "150px",
},
+ {
+ label: "閿�鍞�诲悎鍚屽彿",
+ prop: "masterContractNo",
+ width: "150px",
+ },
// 1.寰呭紑濮嬨��2.杩涜涓��3.宸插畬鎴愩��4.宸插彇娑堛��5.宸茬粨鏉�
{
label: "鐘舵��",
diff --git a/src/views/productionManagement/productionReporting/index.vue b/src/views/productionManagement/productionReporting/index.vue
index f4e9deb..c671ea7 100644
--- a/src/views/productionManagement/productionReporting/index.vue
+++ b/src/views/productionManagement/productionReporting/index.vue
@@ -202,7 +202,7 @@
width: 120,
},
{
- label: "閿�鍞悎鍚屽彿",
+ label: "璁㈠崟鍙�",
prop: "salesContractNo",
width: 120,
},
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index 8bc6dc2..efe231b 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -302,6 +302,11 @@
width: "140",
},
{
+ label: "閿�鍞�诲悎鍚屽彿",
+ prop: "masterContractNo",
+ width: "140",
+ },
+ {
label: "浜у搧鍚嶇О",
prop: "productName",
width: "140",
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index fe4dd7c..6ad0505 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -13,7 +13,7 @@
style="width: 160px;"
@keyup.enter="handleQuery" />
</el-form-item>
- <el-form-item label="閿�鍞悎鍚屽彿:"
+ <el-form-item label="璁㈠崟鍙�:"
prop="salesContractNo">
<el-input v-model="searchForm.salesContractNo"
placeholder="璇疯緭鍏�"
@@ -318,13 +318,17 @@
},
},
{
- label: "閿�鍞悎鍚屽彿",
+ label: "璁㈠崟鍙�",
prop: "salesContractNo",
width: "200px",
dataType: "slot",
slot: "salesContractNo",
},
-
+ {
+ label: "閿�鍞�诲悎鍚屽彿",
+ prop: "masterContractNo",
+ width: "150px",
+ },
{
label: "浜у搧鍚嶇О",
prop: "productName",
diff --git a/src/views/qualityManagement/afterSalesTraceability/index.vue b/src/views/qualityManagement/afterSalesTraceability/index.vue
index 8cd4856..b58011c 100644
--- a/src/views/qualityManagement/afterSalesTraceability/index.vue
+++ b/src/views/qualityManagement/afterSalesTraceability/index.vue
@@ -116,7 +116,7 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="搴忓彿" type="index" width="55" align="center" />
- <el-table-column label="閿�鍞悎鍚屽彿" prop="contractNo" width="160" />
+ <el-table-column label="璁㈠崟鍙�" prop="contractNo" width="160" />
<el-table-column label="浜у搧缂栧彿" prop="productCode" width="140" />
<el-table-column label="浜у搧鍨嬪彿" prop="productModel" width="140" />
<el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" width="160" />
@@ -172,10 +172,10 @@
>
<el-row>
<el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿" prop="contractNo">
+ <el-form-item label="璁㈠崟鍙�" prop="contractNo">
<el-input
v-model="form.contractNo"
- placeholder="璇烽�夋嫨鍏宠仈閿�鍞悎鍚屽彿"
+ placeholder="璇烽�夋嫨鍏宠仈璁㈠崟鍙�"
/>
</el-form-item>
</el-col>
@@ -387,7 +387,7 @@
},
rules: {
contractNo: [
- { required: true, message: "閿�鍞悎鍚屽彿涓嶈兘涓虹┖", trigger: "blur" },
+ { required: true, message: "璁㈠崟鍙蜂笉鑳戒负绌�", trigger: "blur" },
],
productCode: [
{ required: true, message: "浜у搧缂栧彿涓嶈兘涓虹┖", trigger: "blur" },
diff --git a/src/views/qualityManagement/finalInspection/components/formDia.vue b/src/views/qualityManagement/finalInspection/components/formDia.vue
index b315c93..e0abbd6 100644
--- a/src/views/qualityManagement/finalInspection/components/formDia.vue
+++ b/src/views/qualityManagement/finalInspection/components/formDia.vue
@@ -9,10 +9,10 @@
<el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="閿�鍞鍗曪細" prop="salesLedgerId">
+ <el-form-item label="璁㈠崟鍙凤細" prop="salesLedgerId">
<el-select
v-model="form.salesLedgerId"
- placeholder="璇烽�夋嫨閿�鍞鍗�"
+ placeholder="璇烽�夋嫨璁㈠崟鍙�"
clearable
filterable
:disabled="isViewMode"
@@ -330,7 +330,7 @@
const currentProductId = ref(0);
const testStandardOptions = ref([]); // 鎸囨爣閫夋嫨涓嬫媺妗嗘暟鎹�
const modelOptions = ref([]);
-const salesLedgerOptions = ref([]); // 閿�鍞鍗曚笅鎷夋鏁版嵁
+const salesLedgerOptions = ref([]); // 璁㈠崟鍙蜂笅鎷夋鏁版嵁
// 鎵撳紑寮规
const openDialog = async (type, row) => {
@@ -471,12 +471,12 @@
form.value.unit = modelOptions.value.find(item => item.id == value)?.unit || '';
}
-// 閿�鍞鍗曢�夋嫨鍙樺寲澶勭悊
+// 璁㈠崟鍙烽�夋嫨鍙樺寲澶勭悊
const handleSalesLedgerChange = async (value) => {
const selectedItem = salesLedgerOptions.value.find(item => item.id == value);
if (selectedItem) {
form.value.salesContractNo = selectedItem.salesContractNo || '';
- // 鏍规嵁閿�鍞鍗旾D鏌ヨ浜у搧淇℃伅锛屽彧璧嬪�兼暟閲�
+ // 鏍规嵁璁㈠崟鍙稩D鏌ヨ浜у搧淇℃伅锛屽彧璧嬪�兼暟閲�
try {
const res = await productList({ salesLedgerId: value, type: 1 });
const productData = res.data && res.data.length > 0 ? res.data[0] : null;
@@ -486,8 +486,8 @@
calcSampleQuantity();
}
} catch (e) {
- console.error('鏌ヨ閿�鍞鍗曚骇鍝佷俊鎭け璐�', e);
- proxy.$modal.msgError('鏌ヨ閿�鍞鍗曚骇鍝佷俊鎭け璐�');
+ console.error('鏌ヨ璁㈠崟鍙蜂骇鍝佷俊鎭け璐�', e);
+ proxy.$modal.msgError('鏌ヨ璁㈠崟鍙蜂骇鍝佷俊鎭け璐�');
}
} else {
form.value.salesContractNo = '';
diff --git a/src/views/qualityManagement/finalInspection/index.vue b/src/views/qualityManagement/finalInspection/index.vue
index c4c33fb..a78f97c 100644
--- a/src/views/qualityManagement/finalInspection/index.vue
+++ b/src/views/qualityManagement/finalInspection/index.vue
@@ -26,11 +26,11 @@
</el-form-item>
</el-col>
<el-col :span="6">
- <el-form-item label="閿�鍞崟鍙�"
+ <el-form-item label="璁㈠崟鍙�"
prop="salesContractNo">
<el-input v-model="searchForm.salesContractNo"
style="width: 240px"
- placeholder="璇疯緭鍏ラ攢鍞崟鍙锋悳绱�"
+ placeholder="璇疯緭鍏ヨ鍗曞彿鎼滅储"
clearable />
</el-form-item>
</el-col>
@@ -154,11 +154,16 @@
width: 120,
},
{
- label: "閿�鍞崟鍙�",
+ label: "璁㈠崟鍙�",
prop: "salesContractNo",
width: 120,
},
{
+ label: "閿�鍞�诲悎鍚屽彿",
+ prop: "masterContractNo",
+ width: 120,
+ },
+ {
label: "妫�楠屽憳",
prop: "checkName",
},
diff --git a/src/views/reportAnalysis/projectProfit/index.vue b/src/views/reportAnalysis/projectProfit/index.vue
index f61cbe5..990e4be 100644
--- a/src/views/reportAnalysis/projectProfit/index.vue
+++ b/src/views/reportAnalysis/projectProfit/index.vue
@@ -57,7 +57,7 @@
},
[
{
- label: "閿�鍞悎鍚屽彿",
+ label: "璁㈠崟鍙�",
align: "center",
prop: "customerContractNo",
},
diff --git a/src/views/safeProduction/safeWorkApproval/components/approvalDia.vue b/src/views/safeProduction/safeWorkApproval/components/approvalDia.vue
index 8d40a2e..8e5a93e 100644
--- a/src/views/safeProduction/safeWorkApproval/components/approvalDia.vue
+++ b/src/views/safeProduction/safeWorkApproval/components/approvalDia.vue
@@ -157,7 +157,7 @@
<el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{ currentPurchase.purchaseContractNumber }}</el-descriptions-item>
<el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{ currentPurchase.supplierName }}</el-descriptions-item>
<el-descriptions-item label="椤圭洰鍚嶇О">{{ currentPurchase.projectName }}</el-descriptions-item>
- <el-descriptions-item label="閿�鍞悎鍚屽彿">{{ currentPurchase.salesContractNo }}</el-descriptions-item>
+ <el-descriptions-item label="璁㈠崟鍙�">{{ currentPurchase.salesContractNo }}</el-descriptions-item>
<el-descriptions-item label="绛捐鏃ユ湡">{{ currentPurchase.executionDate }}</el-descriptions-item>
<el-descriptions-item label="褰曞叆鏃ユ湡">{{ currentPurchase.entryDate }}</el-descriptions-item>
<el-descriptions-item label="浠樻鏂瑰紡">{{ currentPurchase.paymentMethod }}</el-descriptions-item>
diff --git a/src/views/salesManagement/deliveryLedger/index.vue b/src/views/salesManagement/deliveryLedger/index.vue
index f8f1539..080ae20 100644
--- a/src/views/salesManagement/deliveryLedger/index.vue
+++ b/src/views/salesManagement/deliveryLedger/index.vue
@@ -2,7 +2,7 @@
<div class="app-container">
<div class="search_form">
<el-form :model="searchForm" :inline="true">
- <el-form-item label="閿�鍞鍗曞彿锛�">
+ <el-form-item label="璁㈠崟鍙峰彿锛�">
<el-input
v-model="searchForm.salesContractNo"
placeholder="璇疯緭鍏�"
@@ -57,8 +57,13 @@
<el-table-column align="center" type="selection" width="55" />
<el-table-column align="center" label="搴忓彿" type="index" width="60" />
<el-table-column
- label="閿�鍞鍗�"
+ label="璁㈠崟鍙�"
prop="salesContractNo"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="閿�鍞�诲悎鍚屽彿"
+ prop="masterContractNo"
show-overflow-tooltip
/>
<el-table-column
@@ -101,16 +106,16 @@
prop="shippingCarNumber"
show-overflow-tooltip
/>
- <el-table-column
- label="蹇�掑叕鍙�"
- prop="expressCompany"
- show-overflow-tooltip
- />
- <el-table-column
- label="蹇�掑崟鍙�"
- prop="expressNumber"
- show-overflow-tooltip
- />
+<!-- <el-table-column-->
+<!-- label="蹇�掑叕鍙�"-->
+<!-- prop="expressCompany"-->
+<!-- show-overflow-tooltip-->
+<!-- />-->
+<!-- <el-table-column-->
+<!-- label="蹇�掑崟鍙�"-->
+<!-- prop="expressNumber"-->
+<!-- show-overflow-tooltip-->
+<!-- />-->
<el-table-column
label="瀹℃牳鐘舵��"
prop="status"
@@ -287,7 +292,7 @@
>
<div v-if="detailRow" class="detail-wrapper">
<el-descriptions :column="2" border>
- <el-descriptions-item label="閿�鍞鍗�">{{
+ <el-descriptions-item label="璁㈠崟鍙�">{{
detailRow.salesContractNo || "--"
}}</el-descriptions-item>
<el-descriptions-item label="鍙戣揣璁㈠崟鍙�">{{
@@ -403,7 +408,7 @@
const dialogFormVisible = ref(false);
const data = reactive({
searchForm: {
- salesContractNo: "", // 閿�鍞鍗曞彿
+ salesContractNo: "", // 璁㈠崟鍙峰彿
shippingCarNumber: "", // 杞︾墝鍙�
expressNumber: "", // 蹇�掑崟鍙�
},
@@ -421,7 +426,7 @@
},
rules: {
salesContractNo: [
- { required: true, message: "璇烽�夋嫨閿�鍞鍗�", trigger: "change" },
+ { required: true, message: "璇烽�夋嫨璁㈠崟鍙�", trigger: "change" },
],
customerName: [
{ required: true, message: "璇疯緭鍏ュ鎴峰悕绉�", trigger: "blur" },
@@ -474,7 +479,7 @@
});
};
-// 閿�鍞鍗曞彉鍖栨椂鑷姩濉厖瀹㈡埛鍚嶇О
+// 璁㈠崟鍙峰彉鍖栨椂鑷姩濉厖瀹㈡埛鍚嶇О
const handleSalesOrderChange = (value) => {
const selectedOrder = salesOrderOptions.value.find(
(item) => item.salesContractNo === value
diff --git a/src/views/salesManagement/receiptPaymentLedger/index.vue b/src/views/salesManagement/receiptPaymentLedger/index.vue
index ec81d9a..4c55846 100644
--- a/src/views/salesManagement/receiptPaymentLedger/index.vue
+++ b/src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -95,10 +95,14 @@
label="搴忓彿"
type="index"
width="60" />
- <el-table-column label="閿�鍞鍗�"
+ <el-table-column label="璁㈠崟鍙�"
prop="salesContractNo"
show-overflow-tooltip
width="150" />
+ <el-table-column label="閿�鍞�诲悎鍚屽彿"
+ prop="masterContractNo"
+ show-overflow-tooltip
+ width="150" />
<!-- <el-table-column label="鍙戣揣璁㈠崟鍙�"
prop="shippingNo"
show-overflow-tooltip
diff --git a/src/views/salesManagement/returnOrder/components/detailDia.vue b/src/views/salesManagement/returnOrder/components/detailDia.vue
index 586e5c1..ee94764 100644
--- a/src/views/salesManagement/returnOrder/components/detailDia.vue
+++ b/src/views/salesManagement/returnOrder/components/detailDia.vue
@@ -8,7 +8,7 @@
<el-tag :type="getStatusType(detail.status)">{{ getStatusText(detail.status) }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="瀹㈡埛鍚嶇О">{{ detail.customerName }}</el-descriptions-item>
- <el-descriptions-item label="閿�鍞崟鍙�">{{ detail.salesContractNo }}</el-descriptions-item>
+ <el-descriptions-item label="璁㈠崟鍙�">{{ detail.salesContractNo }}</el-descriptions-item>
<el-descriptions-item label="涓氬姟鍛�">{{ detail.salesman }}</el-descriptions-item>
<el-descriptions-item label="鍏宠仈鎵瑰彿">{{ detail.shippingNo }}</el-descriptions-item>
<!-- <el-descriptions-item label="椤圭洰鍚嶇О">{{ detail.projectName }}</el-descriptions-item> -->
diff --git a/src/views/salesManagement/returnOrder/components/formDia.vue b/src/views/salesManagement/returnOrder/components/formDia.vue
index 802407c..f8e0eb0 100644
--- a/src/views/salesManagement/returnOrder/components/formDia.vue
+++ b/src/views/salesManagement/returnOrder/components/formDia.vue
@@ -120,7 +120,7 @@
</el-form-item>
</el-col>
<el-col :span="4">
- <el-form-item label="閿�鍞悎鍚屽彿锛�">
+ <el-form-item label="璁㈠崟鍙凤細">
<el-input v-model="form.salesContractNo" disabled placeholder="--" />
</el-form-item>
</el-col>
diff --git a/src/views/salesManagement/returnOrder/index.vue b/src/views/salesManagement/returnOrder/index.vue
index 99fa334..9ef90b8 100644
--- a/src/views/salesManagement/returnOrder/index.vue
+++ b/src/views/salesManagement/returnOrder/index.vue
@@ -8,8 +8,8 @@
<el-form-item label="瀹㈡埛鍚嶇О">
<el-input v-model="searchForm.customerName" placeholder="瀹㈡埛鍚嶇О" clearable />
</el-form-item>
- <el-form-item label="閿�鍞崟鍙�">
- <el-input v-model="searchForm.salesContractNo" placeholder="閿�鍞崟鍙�" clearable />
+ <el-form-item label="璁㈠崟鍙�">
+ <el-input v-model="searchForm.salesContractNo" placeholder="璁㈠崟鍙�" clearable />
</el-form-item>
<el-form-item label="鍏宠仈鎵瑰彿">
<el-input v-model="searchForm.shippingNo" placeholder="鍏宠仈鎵瑰彿" clearable />
@@ -122,7 +122,8 @@
{ label: "閫�璐х姸鎬�", prop: "returnStatus", minWidth: 100, dataType: "slot", slot: "returnStatus" },
{ label: "鍒跺崟鏃堕棿", prop: "makeTime", minWidth: 170 },
{ label: "瀹㈡埛鍚嶇О", prop: "customerName", minWidth: 220 },
- { label: "閿�鍞崟鍙�", prop: "salesContractNo", minWidth: 160 },
+ { label: "璁㈠崟鍙�", prop: "salesContractNo", minWidth: 160 },
+ { label: "閿�鍞�诲悎鍚屽彿", prop: "masterContractNo", minWidth: 160 },
{ label: "涓氬姟鍛�", prop: "salesman", minWidth: 120 },
{ label: "鍏宠仈鎵瑰彿", prop: "shippingNo", minWidth: 170 },
{ label: "椤圭洰鍚嶇О", prop: "projectName", minWidth: 180 },
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index bbeef59..83a0597 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -20,7 +20,7 @@
@change="handleQuery"
/>
</el-form-item>
- <el-form-item label="閿�鍞悎鍚屽彿锛�">
+ <el-form-item label="璁㈠崟鍙凤細">
<el-input
v-model="searchForm.salesContractNo"
placeholder="璇疯緭鍏�"
@@ -198,7 +198,7 @@
show-overflow-tooltip
/>
<el-table-column
- label="閿�鍞悎鍚屽彿"
+ label="璁㈠崟鍙�"
prop="salesContractNo"
width="180"
show-overflow-tooltip
@@ -349,7 +349,7 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
+ <el-form-item label="璁㈠崟鍙凤細" prop="salesContractNo">
<div
style="
display: flex;
@@ -1863,7 +1863,7 @@
form.value.executionDate = getCurrentDate();
// 鍒涘缓鏃堕棿榛樿涓哄綋澶�
form.value.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
- // 榛樿鑷姩鐢熸垚閿�鍞悎鍚屽彿
+ // 榛樿鑷姩鐢熸垚璁㈠崟鍙�
form.value.autoGenerateContractNo = true;
} else {
currentId.value = row.id;
@@ -2220,7 +2220,7 @@
return status === "宸插彂璐�" || status === "瀹℃牳閫氳繃";
};
-/** 鍒ゆ柇閿�鍞鍗曚笅鏄惁瀛樺湪宸插彂璐�/鍙戣揣瀹屾垚鐨勪骇鍝侊紙涓嶅彲鍒犻櫎锛� */
+/** 鍒ゆ柇璁㈠崟鍙蜂笅鏄惁瀛樺湪宸插彂璐�/鍙戣揣瀹屾垚鐨勪骇鍝侊紙涓嶅彲鍒犻櫎锛� */
const hasShippedProducts = (products) => {
if (!products || !products.length) return false;
return products.some((p) => {
@@ -2249,7 +2249,7 @@
}
const ids = selectedRows.value.map((item) => item.id);
- // 妫�鏌ユ槸鍚︽湁宸茶繘琛屽彂璐ф垨鍙戣揣瀹屾垚鐨勯攢鍞鍗曪紝鑻ユ湁鍒欎笉鍏佽鍒犻櫎
+ // 妫�鏌ユ槸鍚︽湁宸茶繘琛屽彂璐ф垨鍙戣揣瀹屾垚鐨勮鍗曞彿锛岃嫢鏈夊垯涓嶅厑璁稿垹闄�
const cannotDeleteNames = [];
for (const row of selectedRows.value) {
let products =
@@ -2268,7 +2268,7 @@
}
if (cannotDeleteNames.length > 0) {
proxy.$modal.msgWarning(
- "宸茶繘琛屽彂璐ф垨鍙戣揣瀹屾垚鐨勯攢鍞鍗曚笉鑳藉垹闄わ細" + cannotDeleteNames.join("銆�")
+ "宸茶繘琛屽彂璐ф垨鍙戣揣瀹屾垚鐨勮鍗曞彿涓嶈兘鍒犻櫎锛�" + cannotDeleteNames.join("銆�")
);
return;
}
--
Gitblit v1.9.3