From b8ee898cfa6e3fe1e26930604b53696ba7b6003a Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 03 七月 2026 13:01:53 +0800
Subject: [PATCH] 销售退货新增页面基本信息加上发货类型下拉框,可选货车或者快递。货车 展示发货车牌号,选择快递则展示快递公司,快递单号。对应的列表也要加上相应的字段,采购退货也是一样加下

---
 src/views/salesManagement/returnOrder/components/formDia.vue   |   56 +++++++++++
 src/views/salesManagement/returnOrder/components/detailDia.vue |   12 ++
 src/views/procurementManagement/purchaseReturnOrder/New.vue    |   78 +++++++++++++++
 src/views/procurementManagement/purchaseReturnOrder/index.vue  |   38 +++++++
 src/views/salesManagement/returnOrder/index.vue                |   16 +++
 src/views/financialManagement/payable/purchaseReturn.vue       |   24 ++++
 src/views/financialManagement/receivable/salesReturn.vue       |   24 ++++
 7 files changed, 246 insertions(+), 2 deletions(-)

diff --git a/src/views/financialManagement/payable/purchaseReturn.vue b/src/views/financialManagement/payable/purchaseReturn.vue
index 4171df2..5c274ac 100644
--- a/src/views/financialManagement/payable/purchaseReturn.vue
+++ b/src/views/financialManagement/payable/purchaseReturn.vue
@@ -85,6 +85,30 @@
   { label: "閫�璐у崟鍙�", prop: "returnNo", minWidth: "150" },
   { label: "渚涘簲鍟�", prop: "supplierName", minWidth: "180" },
   { label: "鍏宠仈鍏ュ簱鍗曞彿", prop: "inboundBatches", minWidth: "150" },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    minWidth: "110",
+    formatData: (val) => ({ 1: "璐ц溅", 2: "蹇��" }[String(val)] || "--"),
+  },
+  {
+    label: "鍙戣揣杞︾墝鍙�",
+    prop: "truckPlateNo",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "1" ? row?.truckPlateNo || "--" : "--"),
+  },
+  {
+    label: "蹇�掑叕鍙�",
+    prop: "expressCompany",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressCompany || "--" : "--"),
+  },
+  {
+    label: "蹇�掑崟鍙�",
+    prop: "expressNo",
+    minWidth: "150",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressNo || "--" : "--"),
+  },
   { label: "閫�璐ф棩鏈�", prop: "preparedAt", minWidth: "170" },
   {
     label: "閫�娆炬�婚",
diff --git a/src/views/financialManagement/receivable/salesReturn.vue b/src/views/financialManagement/receivable/salesReturn.vue
index afe363c..85153bf 100644
--- a/src/views/financialManagement/receivable/salesReturn.vue
+++ b/src/views/financialManagement/receivable/salesReturn.vue
@@ -77,6 +77,30 @@
   { label: "閫�璐у崟鍙�", prop: "returnNo", minWidth: "150" },
   { label: "瀹㈡埛鍚嶇О", prop: "customerName", minWidth: "180" },
   { label: "鍏宠仈鍙戣揣鍗曞彿", prop: "shippingNo", minWidth: "150" },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    minWidth: "110",
+    formatData: (val) => ({ 1: "璐ц溅", 2: "蹇��" }[String(val)] || "--"),
+  },
+  {
+    label: "鍙戣揣杞︾墝鍙�",
+    prop: "truckPlateNo",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "1" ? row?.truckPlateNo || "--" : "--"),
+  },
+  {
+    label: "蹇�掑叕鍙�",
+    prop: "expressCompany",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressCompany || "--" : "--"),
+  },
+  {
+    label: "蹇�掑崟鍙�",
+    prop: "expressNo",
+    minWidth: "150",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressNo || "--" : "--"),
+  },
   { label: "閫�璐ф棩鏈�", prop: "makeTime", minWidth: "170" },
   {
     label: "閫�娆炬�婚",
diff --git a/src/views/procurementManagement/purchaseReturnOrder/New.vue b/src/views/procurementManagement/purchaseReturnOrder/New.vue
index 0453310..186a552 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/New.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/New.vue
@@ -58,6 +58,63 @@
         </el-form-item>
 
         <el-form-item
+            label="鍙戣揣绫诲瀷"
+            prop="shippingType"
+            :rules="[
+                {
+                  required: true,
+                  message: '璇烽�夋嫨鍙戣揣绫诲瀷',
+                  trigger: 'change',
+                }
+              ]"
+        >
+          <el-select
+              v-model="formState.shippingType"
+              placeholder="璇烽�夋嫨鍙戣揣绫诲瀷"
+              style="width: 240px"
+              @change="handleShippingTypeChange"
+          >
+            <el-option label="璐ц溅" :value="1" />
+            <el-option label="蹇��" :value="2" />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+            v-if="formState.shippingType === 1"
+            label="鍙戣揣杞︾墝鍙�"
+            prop="truckPlateNo"
+        >
+          <el-input
+              v-model="formState.truckPlateNo"
+              placeholder="璇疯緭鍏ュ彂璐ц溅鐗屽彿"
+              style="width: 240px"
+          />
+        </el-form-item>
+
+        <template v-else-if="formState.shippingType === 2">
+          <el-form-item
+              label="蹇�掑叕鍙�"
+              prop="expressCompany"
+          >
+            <el-input
+                v-model="formState.expressCompany"
+                placeholder="璇疯緭鍏ュ揩閫掑叕鍙�"
+                style="width: 240px"
+            />
+          </el-form-item>
+          <el-form-item
+              label="蹇�掑崟鍙�"
+              prop="expressNo"
+          >
+            <el-input
+                v-model="formState.expressNo"
+                placeholder="璇疯緭鍏ュ揩閫掑崟鍙�"
+                style="width: 240px"
+            />
+          </el-form-item>
+        </template>
+
+        <el-form-item
             label="渚涘簲鍟嗗悕绉�"
             prop="supplierId"
             :rules="[
@@ -458,6 +515,10 @@
   no: '',
   isDefaultNo: true,
   returnType: 0,
+  shippingType: undefined,
+  truckPlateNo: '',
+  expressCompany: '',
+  expressNo: '',
   incomeType: undefined,
   remark: '',
   supplierId: undefined,
@@ -503,6 +564,19 @@
 const purchaseLedgerOptions = ref([])
 // 鏄惁灞曠ず浜у搧鍒楄〃鏁版嵁
 const isShowProductsModal = ref(false)
+
+const handleShippingTypeChange = (val) => {
+  if (val === 1) {
+    formState.value.expressCompany = '';
+    formState.value.expressNo = '';
+  } else if (val === 2) {
+    formState.value.truckPlateNo = '';
+  } else {
+    formState.value.truckPlateNo = '';
+    formState.value.expressCompany = '';
+    formState.value.expressNo = '';
+  }
+};
 
 const isShow = computed({
   get() {
@@ -576,6 +650,10 @@
 }
 
 const closeModal = () => {
+  formState.value.shippingType = undefined;
+  formState.value.truckPlateNo = '';
+  formState.value.expressCompany = '';
+  formState.value.expressNo = '';
   isShow.value = false;
 };
 
diff --git a/src/views/procurementManagement/purchaseReturnOrder/index.vue b/src/views/procurementManagement/purchaseReturnOrder/index.vue
index df2c137..fbb5414 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/index.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/index.vue
@@ -89,6 +89,20 @@
           <el-descriptions-item label="閫�鏂欎汉">{{
             detailData.returnUserName || "--"
           }}</el-descriptions-item>
+          <el-descriptions-item label="鍙戣揣绫诲瀷">{{
+            getShippingTypeLabel(detailData.shippingType)
+          }}</el-descriptions-item>
+          <el-descriptions-item v-if="String(detailData.shippingType) === '1'" label="鍙戣揣杞︾墝鍙�">{{
+            detailData.truckPlateNo || "--"
+          }}</el-descriptions-item>
+          <template v-else-if="String(detailData.shippingType) === '2'">
+            <el-descriptions-item label="蹇�掑叕鍙�">{{
+              detailData.expressCompany || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑崟鍙�">{{
+              detailData.expressNo || "--"
+            }}</el-descriptions-item>
+          </template>
           <el-descriptions-item label="鏁村崟鎶樻墸棰�">{{
             formatAmount(detailData.totalDiscountAmount)
           }}</el-descriptions-item>
@@ -290,6 +304,15 @@
     prop: "returnUserName",
     width: 110,
   },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    width: 100,
+    formatData: (val) => getShippingTypeLabel(val),
+  },
+  { label: "鍙戣揣杞︾墝鍙�", prop: "truckPlateDisplay", width: 140 },
+  { label: "蹇�掑叕鍙�", prop: "expressCompanyDisplay", width: 140 },
+  { label: "蹇�掑崟鍙�", prop: "expressNoDisplay", width: 150 },
 
   {
     label: "鏁村崟鎶樻墸棰�",
@@ -423,7 +446,12 @@
   findPurchaseReturnOrderListPage({ ...searchForm.value, ...page })
     .then((res) => {
       tableLoading.value = false;
-      tableData.value = res.data.records;
+      tableData.value = (res.data.records || []).map((row) => ({
+        ...row,
+        truckPlateDisplay: String(row?.shippingType) === "1" ? (row?.truckPlateNo || "--") : "--",
+        expressCompanyDisplay: String(row?.shippingType) === "2" ? (row?.expressCompany || "--") : "--",
+        expressNoDisplay: String(row?.shippingType) === "2" ? (row?.expressNo || "--") : "--",
+      }));
       page.total = res.data.total;
     })
     .catch(() => {
@@ -451,6 +479,14 @@
   );
 };
 
+const getShippingTypeLabel = (value) => {
+  const shippingTypeMap = {
+    1: "璐ц溅",
+    2: "蹇��",
+  };
+  return shippingTypeMap[String(value)] || shippingTypeMap[value] || "--";
+};
+
 const formatAmount = (value) => {
   if (value === null || value === undefined || value === "") {
     return "--";
diff --git a/src/views/salesManagement/returnOrder/components/detailDia.vue b/src/views/salesManagement/returnOrder/components/detailDia.vue
index 60b485b..a09149f 100644
--- a/src/views/salesManagement/returnOrder/components/detailDia.vue
+++ b/src/views/salesManagement/returnOrder/components/detailDia.vue
@@ -11,6 +11,12 @@
         <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="鍙戣揣绫诲瀷">{{ getShippingTypeText(detail.shippingType) }}</el-descriptions-item>
+        <el-descriptions-item v-if="String(detail.shippingType) === '1'" label="鍙戣揣杞︾墝鍙�">{{ detail.truckPlateNo || "--" }}</el-descriptions-item>
+        <template v-else-if="String(detail.shippingType) === '2'">
+          <el-descriptions-item label="蹇�掑叕鍙�">{{ detail.expressCompany || "--" }}</el-descriptions-item>
+          <el-descriptions-item label="蹇�掑崟鍙�">{{ detail.expressNo || "--" }}</el-descriptions-item>
+        </template>
         <!-- <el-descriptions-item label="椤圭洰鍚嶇О">{{ detail.projectName }}</el-descriptions-item> -->
         <el-descriptions-item label="鍒跺崟浜�">{{ detail.maker }}</el-descriptions-item>
         <el-descriptions-item label="鍒跺崟鏃堕棿">{{ detail.makeTime }}</el-descriptions-item>
@@ -41,6 +47,10 @@
 const detail = ref({});
 const tableData = ref([]);
 const availableProducts = ref([]);
+const shippingTypeMap = {
+  1: "璐ц溅",
+  2: "蹇��",
+};
 
 const sameKey = (a, b) => a != null && b != null && String(a) === String(b);
 
@@ -111,6 +121,8 @@
   return Math.max(total - un, 0);
 };
 
+const getShippingTypeText = (value) => shippingTypeMap[String(value)] || shippingTypeMap[value] || "--";
+
 /** 璇︽儏琛ㄧ敤 productName / model锛涘悎骞舵椂鍕胯绌轰覆鐩栨帀鍑哄簱琛屽瓧娈� */
 const mergeDetailProductRow = (product, normalized) => {
   const row = { ...product, ...normalized };
diff --git a/src/views/salesManagement/returnOrder/components/formDia.vue b/src/views/salesManagement/returnOrder/components/formDia.vue
index 40c98dc..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>
@@ -186,6 +211,10 @@
     returnNo: "",
     customerId: "",
     shippingId: "",
+    shippingType: "",
+    truckPlateNo: "",
+    expressCompany: "",
+    expressNo: "",
     projectId: "",
     maker: "",
     makeTime: "",
@@ -203,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);
@@ -491,6 +521,10 @@
       returnNo: "",
       customerId: "",
       shippingId: "",
+      shippingType: "",
+      truckPlateNo: "",
+      expressCompany: "",
+      expressNo: "",
       projectId: "",
       maker: "",
       makeTime: "",
@@ -537,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("鏂板鎴愬姛");
@@ -560,6 +599,10 @@
         returnNo: "",
         customerId: "",
         shippingId: "",
+        shippingType: "",
+        truckPlateNo: "",
+        expressCompany: "",
+        expressNo: "",
         projectId: "",
         maker: "",
         makeTime: "",
@@ -603,6 +646,19 @@
   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) {
diff --git a/src/views/salesManagement/returnOrder/index.vue b/src/views/salesManagement/returnOrder/index.vue
index e190901..1bcda4d 100644
--- a/src/views/salesManagement/returnOrder/index.vue
+++ b/src/views/salesManagement/returnOrder/index.vue
@@ -123,6 +123,15 @@
   { label: "閿�鍞崟鍙�", prop: "salesContractNo", minWidth: 160 },
   { label: "涓氬姟鍛�", prop: "salesman", minWidth: 120 },
   { label: "鍏宠仈鍙戣揣鍗曞彿", prop: "shippingNo", minWidth: 170 },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    minWidth: 100,
+    formatData: (val) => ({ 1: "璐ц溅", 2: "蹇��" }[String(val)] || "--"),
+  },
+  { label: "鍙戣揣杞︾墝鍙�", prop: "truckPlateDisplay", minWidth: 140 },
+  { label: "蹇�掑叕鍙�", prop: "expressCompanyDisplay", minWidth: 140 },
+  { label: "蹇�掑崟鍙�", prop: "expressNoDisplay", minWidth: 150 },
   { label: "椤圭洰鍚嶇О", prop: "projectName", minWidth: 180 },
   { label: "鍒跺崟浜�", prop: "maker", minWidth: 120 },
   {
@@ -168,7 +177,12 @@
   tableLoading.value = true;
   returnManagementList({ ...searchForm.value, ...page }).then(res => {
     tableLoading.value = false;
-    tableData.value = res?.data?.records || [];
+    tableData.value = (res?.data?.records || []).map((row) => ({
+      ...row,
+      truckPlateDisplay: String(row?.shippingType) === "1" ? (row?.truckPlateNo || "--") : "--",
+      expressCompanyDisplay: String(row?.shippingType) === "2" ? (row?.expressCompany || "--") : "--",
+      expressNoDisplay: String(row?.shippingType) === "2" ? (row?.expressNo || "--") : "--",
+    }));
     page.total = res?.data?.total || 0;
   }).finally(() => tableLoading.value = false);
 };

--
Gitblit v1.9.3