From f383d3f8212e77a45bd6e99b0a4f8b7566f8339c Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期日, 05 七月 2026 11:25:07 +0800
Subject: [PATCH] Merge branch 'dev_NEW_pro' into dev_pro_山西长治
---
src/views/salesManagement/returnOrder/components/formDia.vue | 137 ++++++++++++++++++++++++++++++++++-----------
1 files changed, 102 insertions(+), 35 deletions(-)
diff --git a/src/views/salesManagement/returnOrder/components/formDia.vue b/src/views/salesManagement/returnOrder/components/formDia.vue
index 81d9487..4fc0859 100644
--- a/src/views/salesManagement/returnOrder/components/formDia.vue
+++ b/src/views/salesManagement/returnOrder/components/formDia.vue
@@ -69,6 +69,31 @@
</el-form-item>
</el-col>
<el-col :span="4">
+ <el-form-item label="鍙戣揣绫诲瀷锛�" prop="shippingType">
+ <el-select v-model="form.shippingType" placeholder="璇烽�夋嫨鍙戣揣绫诲瀷" @change="handleShippingTypeChange">
+ <el-option label="璐ц溅" :value="1" />
+ <el-option label="蹇��" :value="2" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="4" v-if="form.shippingType === 1">
+ <el-form-item label="鍙戣揣杞︾墝鍙凤細" prop="truckPlateNo">
+ <el-input v-model="form.truckPlateNo" placeholder="璇疯緭鍏ュ彂璐ц溅鐗屽彿" />
+ </el-form-item>
+ </el-col>
+ <template v-else-if="form.shippingType === 2">
+ <el-col :span="4">
+ <el-form-item label="蹇�掑叕鍙革細" prop="expressCompany">
+ <el-input v-model="form.expressCompany" placeholder="璇疯緭鍏ュ揩閫掑叕鍙�" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item label="蹇�掑崟鍙凤細" prop="expressNo">
+ <el-input v-model="form.expressNo" placeholder="璇疯緭鍏ュ揩閫掑崟鍙�" />
+ </el-form-item>
+ </el-col>
+ </template>
+ <el-col :span="4">
<el-form-item label="閫�娆炬�婚锛�" prop="refundAmount">
<el-input v-model="form.refundAmount" disabled placeholder="鑷姩璁$畻" />
</el-form-item>
@@ -82,32 +107,29 @@
<el-button type="primary" @click="openProductSelection" :disabled="!form.shippingId">娣诲姞浜у搧</el-button>
</div>
<PIMTable :isShowPagination="false" rowKey="id" :column="tableColumn" :tableData="tableData">
- <template #totalReturnNum="{ row }">
- {{ calcAlreadyReturned(row) }}
- </template>
<template #returnQuantity="{ row }">
- <el-input
- v-model="row.returnQuantity"
- style="width:100px"
- placeholder="璇疯緭鍏�"
+ <el-input
+ v-model="row.returnQuantity"
+ style="width:100px"
+ placeholder="璇疯緭鍏�"
type="number"
@input="(val) => handleReturnQuantityChange(val, row)"
/>
</template>
<template #price="{ row }">
- <el-input
- v-model="row.price"
- style="width:100px"
- placeholder="璇疯緭鍏�"
+ <el-input
+ v-model="row.price"
+ style="width:100px"
+ placeholder="璇疯緭鍏�"
type="number"
@input="(val) => handlePriceChange(val, row)"
/>
</template>
<template #amount="{ row }">
- <el-input
- v-model="row.amount"
- style="width:100px"
- placeholder="鑷姩璁$畻"
+ <el-input
+ v-model="row.amount"
+ style="width:100px"
+ placeholder="鑷姩璁$畻"
type="number"
disabled
/>
@@ -119,10 +141,10 @@
</el-select>
</template>
<template #remark="{ row }">
- <el-input
- v-model="row.remark"
- style="width:130px"
- placeholder="璇疯緭鍏�"
+ <el-input
+ v-model="row.remark"
+ style="width:130px"
+ placeholder="璇疯緭鍏�"
/>
</template>
<template #action="{ index }">
@@ -140,9 +162,9 @@
</el-dialog>
<el-dialog v-model="productSelectionVisible" title="閫夋嫨浜у搧" width="70%" append-to-body>
- <el-table
- :data="availableProducts"
- style="width: 100%"
+ <el-table
+ :data="availableProducts"
+ style="width: 100%"
@selection-change="handleSelectionChange"
ref="productTableRef"
row-key="id"
@@ -154,11 +176,9 @@
<el-table-column align="center" prop="specificationModel" label="瑙勬牸鍨嬪彿" />
<el-table-column align="center" prop="unit" label="鍗曚綅" />
<el-table-column align="center" prop="stockOutNum" label="鎬绘暟閲�" />
+ <el-table-column align="center" label="宸查��璐ф暟閲�" prop="totalReturnNum"></el-table-column>
<el-table-column align="center" prop="unQuantity" label="鏈��璐ф暟閲�" />
- <el-table-column align="center" label="宸查��璐ф暟閲�">
- <template #default="{ row }">{{ calcAlreadyReturned(row) }}</template>
- </el-table-column>
-
+ <el-table-column align="center" prop="pendingReturnNum" label="寰呭鐞嗛��璐ф暟閲�" />
</el-table>
<template #footer>
<div class="dialog-footer">
@@ -191,6 +211,10 @@
returnNo: "",
customerId: "",
shippingId: "",
+ shippingType: "",
+ truckPlateNo: "",
+ expressCompany: "",
+ expressNo: "",
projectId: "",
maker: "",
makeTime: "",
@@ -208,6 +232,7 @@
}],
customerId: [{ required: true, message: "璇烽�夋嫨瀹㈡埛", trigger: "change" }],
shippingId: [{ required: true, message: "璇烽�夋嫨鍏宠仈鍑哄簱鍗曞彿", trigger: "change" }],
+ shippingType: [{ required: true, message: "璇烽�夋嫨鍙戣揣绫诲瀷", trigger: "change" }],
}
});
const { form, rules } = toRefs(data);
@@ -226,7 +251,8 @@
{align: "center", label: "瑙勬牸鍨嬪彿", prop: "specificationModel" },
{align: "center", label: "鍗曚綅", prop: "unit", width: 80 },
{align: "center", label: "鎬绘暟閲�", prop: "stockOutNum", width: 120 },
- {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120, dataType: "slot", slot: "totalReturnNum" },
+ {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120 },
+ {align: "center", label: "寰呭鐞嗛��璐ф暟閲�", prop: "pendingReturnNum", width: 120 },
{align: "center", label: "鏈��璐ф暟閲�", prop: "unQuantity", width: 120 },
{align: "center", label: "閫�璐ф暟閲�", prop: "returnQuantity", dataType: "slot", slot: "returnQuantity", width: 120 },
{align: "center", label: "閫�璐т骇鍝佸崟浠�", prop: "price", dataType: "slot", slot: "price", width: 120 },
@@ -495,6 +521,10 @@
returnNo: "",
customerId: "",
shippingId: "",
+ shippingType: "",
+ truckPlateNo: "",
+ expressCompany: "",
+ expressNo: "",
projectId: "",
maker: "",
makeTime: "",
@@ -541,6 +571,11 @@
const payload = { ...form.value, returnSaleProducts };
delete payload.returnNoCheckbox;
if (operationType.value === "add" && form.value.returnNoCheckbox) delete payload.returnNo;
+ if (payload.shippingType !== 1) payload.truckPlateNo = "";
+ if (payload.shippingType !== 2) {
+ payload.expressCompany = "";
+ payload.expressNo = "";
+ }
if (operationType.value === "add") {
returnManagementAdd(payload).then(() => {
proxy.$modal.msgSuccess("鏂板鎴愬姛");
@@ -559,6 +594,22 @@
proxy.resetForm("formRef");
dialogFormVisible.value = false;
emit('close');
+ data.form = {
+ returnNoCheckbox: true,
+ returnNo: "",
+ customerId: "",
+ shippingId: "",
+ shippingType: "",
+ truckPlateNo: "",
+ expressCompany: "",
+ expressNo: "",
+ projectId: "",
+ maker: "",
+ makeTime: "",
+ status: 0,
+ returnReason: "",
+ refundAmount: "",
+ }
};
const initCustomers = async () => {
@@ -595,13 +646,26 @@
formRef.value?.validateField('returnNo');
};
+const handleShippingTypeChange = (val) => {
+ if (val === 1) {
+ form.value.expressCompany = "";
+ form.value.expressNo = "";
+ } else if (val === 2) {
+ form.value.truckPlateNo = "";
+ } else {
+ form.value.truckPlateNo = "";
+ form.value.expressCompany = "";
+ form.value.expressNo = "";
+ }
+};
+
const customerNameChange = async (val, clearDownstream = true) => {
// val is customerId now
if (clearDownstream) {
form.value.shippingId = "";
outboundOptions.value = [];
}
-
+
// Find customer name for getSalesLedger if it requires name
const customer = customerNameOptions.value.find(c => c.id === val);
if (!customer) return;
@@ -609,7 +673,7 @@
// Assuming getSalesLedger takes customerName. If it takes ID, adjust accordingly.
// Previous code used customerName. Let's try passing customerName.
getSalesLedger({
- customerName: customer.label,
+ customerName: customer.label,
}).then(res => {
if(res.code === 200){
outboundOptions.value = res.data.map(item => ({
@@ -626,7 +690,7 @@
if(res.code === 200){
// If backend returns project info, set it
if (res.data.projectId) form.value.projectId = res.data.projectId;
-
+
availableProducts.value = mergeShippingProductLists(res.data);
if (clearTable) tableData.value = [];
}
@@ -634,9 +698,12 @@
const handleReturnQuantityChange = (val, row) => {
if (val === "" || val === null) return;
- const max = row.unQuantity === undefined || row.unQuantity === null ? Infinity : Number(row.unQuantity || 0);
+ const unQuantity = row.unQuantity === undefined || row.unQuantity === null ? Infinity : Number(row.unQuantity || 0);//鏈��璐ф暟閲�
+ const pendingReturnNum = row.pendingReturnNum === undefined || row.pendingReturnNum === null ? Infinity : Number(row.pendingReturnNum || 0);//寰呭鐞嗛��璐ф暟閲�
+ //鏈�澶ч��璐ф暟閲忥紝濡傛灉涓虹紪杈戠姸鎬佸姞涓婂緟澶勭悊閫�璐ф暟閲�
+ const max = operationType.value === 'edit' ? unQuantity + pendingReturnNum : unQuantity
const current = Number(val);
-
+
if (current > max) {
proxy.$nextTick(() => {
row.returnQuantity = max;
@@ -702,7 +769,7 @@
// Removed checkSelectable to allow toggling existing items
const confirmProductSelection = () => {
const newTableData = [];
-
+
selectedProducts.value.forEach(product => {
const existing = tableData.value.find(item => item.id === product.id);
if (existing) {
@@ -710,7 +777,7 @@
} else {
newTableData.push({
...product,
- returnSaleLedgerProductId: product.id,
+ returnSaleLedgerProductId: product.id,
productModelId: product.productModelId,
returnQuantity: 0,
num: 0,
@@ -728,7 +795,7 @@
});
}
});
-
+
tableData.value = newTableData;
productSelectionVisible.value = false;
};
--
Gitblit v1.9.3