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