From fa652918dd80558deafeb55790228adf9240eae1 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 13 三月 2026 16:54:48 +0800
Subject: [PATCH] 军泰伟业 1.产品数据添加导入功能,规格型号添加产品类型字段

---
 src/views/salesManagement/returnOrder/components/detailDia.vue |  146 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 146 insertions(+), 0 deletions(-)

diff --git a/src/views/salesManagement/returnOrder/components/detailDia.vue b/src/views/salesManagement/returnOrder/components/detailDia.vue
new file mode 100644
index 0000000..9ff4e89
--- /dev/null
+++ b/src/views/salesManagement/returnOrder/components/detailDia.vue
@@ -0,0 +1,146 @@
+<template>
+  <el-dialog v-model="dialogVisible" title="閫�璐у崟璇︽儏" width="90%" @close="closeDia">
+    <div v-loading="loading">
+      <span class="descriptions">鍩烘湰淇℃伅</span>
+      <el-descriptions :column="4" border>
+        <el-descriptions-item label="閫�璐у崟鍙�">{{ detail.returnNo }}</el-descriptions-item>
+        <el-descriptions-item label="鍗曟嵁鐘舵��">
+          <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.salesman }}</el-descriptions-item>
+        <el-descriptions-item label="鍏宠仈鍑哄簱鍗曞彿">{{ detail.shippingNo }}</el-descriptions-item>
+        <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>
+        <el-descriptions-item label="閫�璐у師鍥�">{{ detail.returnReason }}</el-descriptions-item>
+        <el-descriptions-item label="閫�娆炬�婚">{{ detail.refundAmount }}</el-descriptions-item>
+      </el-descriptions>
+
+      <div style="padding-top: 20px">
+        <span class="descriptions">浜у搧鍒楄〃</span>
+        <PIMTable :isShowPagination="false" rowKey="id" :column="tableColumn" :tableData="tableData" />
+      </div>
+    </div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="closeDia">鍏抽棴</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup>
+import { ref } from "vue";
+import { returnManagementGetById, returnManagementGetByShippingId } from "@/api/salesManagement/returnOrder.js";
+
+const dialogVisible = ref(false);
+const loading = ref(false);
+const detail = ref({});
+const tableData = ref([]);
+const availableProducts = ref([]);
+
+const tableColumn = [
+  {align: "center", label: "浜у搧澶х被", prop: "productCategory"},
+  {align: "center", label: "瑙勬牸鍨嬪彿", prop: "specificationModel"},
+  {align: "center", label: "鍗曚綅", prop: "unit", width: 80},
+  {align: "center", label: "鎬绘暟閲�", prop: "quantity", width: 120},
+  {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120},
+  {align: "center", label: "鏈��璐ф暟閲�", prop: "unQuantity", width: 120},
+  {align: "center", label: "閫�璐ф暟閲�", prop: "returnQuantity", width: 120},
+  {align: "center", label: "閫�璐т骇鍝佸崟浠�", prop: "price", width: 120},
+  {align: "center", label: "閫�璐т骇鍝侀噾棰�", prop: "amount", width: 120},
+  {align: "center", label: "鏄惁鏈夎川閲忛棶棰�", prop: "isQuality", width: 140, formatData: (v) => ({ "1": "鏄�", "2": "鍚�" }[String(v)] ?? v)},
+  {align: "center", label: "澶囨敞", prop: "remark", width: 150},
+];
+
+const getStatusType = (status) => {
+  const statusMap = {
+    0: "warning",
+    1: "success"
+  };
+  return statusMap[status] || "info";
+};
+
+const getStatusText = (status) => {
+  const statusMap = {
+    0: "寰呭鐞�",
+    1: "宸插鐞�"
+  };
+  return statusMap[status] || "鏈煡";
+};
+
+const openDialog = async (row) => {
+  if (!row?.id) return;
+  dialogVisible.value = true;
+  loading.value = true;
+  try {
+    const res = await returnManagementGetById({ returnManagementId: row.id });
+    detail.value = res?.data ?? res ?? {};
+    
+    if (detail.value.shippingId) {
+      const productRes = await returnManagementGetByShippingId({ shippingId: detail.value.shippingId });
+      if (productRes.code === 200) {
+        availableProducts.value = productRes.data.productDtoData || [];
+      }
+    }
+    
+    const list =
+      detail.value?.returnSaleProducts ||
+        detail.value?.returnSaleProductList ||
+        detail.value?.returnSaleProductDtoData ||
+        [];
+    
+    tableData.value = Array.isArray(list) ? list.map(raw => {
+      const productId = raw?.returnSaleLedgerProductId ?? raw?.saleLedgerProductId ?? raw?.id;
+      const product = availableProducts.value.find((p) => p.id === productId);
+      const normalized = {
+        ...raw,
+        id: productId,
+        returnQuantity: Number(raw?.num ?? raw?.returnQuantity ?? 0),
+        price: Number(raw?.taxInclusiveUnitPrice ?? raw?.price ?? 0),
+        amount: Number(raw?.amount ?? 0).toFixed(2),
+        isQuality: raw?.isQuality ?? 2,
+        remark: raw?.remark ?? "",
+      };
+      return product ? { ...product, ...normalized } : normalized;
+    }) : [];
+  } catch (e) {
+    console.error("Failed to load detail", e);
+  } finally {
+    loading.value = false;
+  }
+};
+
+const closeDia = () => {
+  dialogVisible.value = false;
+  detail.value = {};
+  tableData.value = [];
+  availableProducts.value = [];
+};
+
+defineExpose({ openDialog });
+</script>
+
+<style scoped lang="scss">
+.descriptions {
+  margin-bottom: 20px;
+  display: inline-block;
+  font-size: 1rem;
+  font-weight: 600;
+  padding-left: 12px;
+  position: relative;
+}
+.descriptions::before {
+  content: "";
+  position: absolute;
+  left: 0;
+  top: 50%;
+  transform: translateY(-50%);
+  width: 4px;
+  height: 1rem;
+  background-color: #002FA7;
+  border-radius: 2px;
+}
+</style>

--
Gitblit v1.9.3