From 264dd309646fd10d81a348011f38f63c7beb2898 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 06 五月 2026 17:38:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_NEW_pro' into dev_NEW_pro

---
 src/views/salesManagement/deliveryLedger/index.vue |  103 ++++++++++++++
 multiple/config.json                               |    9 +
 multiple/assets/favicon/SDJCfavicon.ico            |    0 
 multiple/assets/logo/SDJCLogo.png                  |    0 
 src/api/salesManagement/deliveryLedger.js          |    7 +
 src/router/index.js                                |  250 +++++++++++++++++-----------------
 6 files changed, 241 insertions(+), 128 deletions(-)

diff --git a/multiple/assets/favicon/SDJCfavicon.ico b/multiple/assets/favicon/SDJCfavicon.ico
new file mode 100644
index 0000000..5e80af3
--- /dev/null
+++ b/multiple/assets/favicon/SDJCfavicon.ico
Binary files differ
diff --git a/multiple/assets/logo/SDJCLogo.png b/multiple/assets/logo/SDJCLogo.png
new file mode 100644
index 0000000..139e398
--- /dev/null
+++ b/multiple/assets/logo/SDJCLogo.png
Binary files differ
diff --git a/multiple/config.json b/multiple/config.json
index c67f836..318b235 100644
--- a/multiple/config.json
+++ b/multiple/config.json
@@ -15,6 +15,15 @@
     "logo": "logo/Logo.png",
     "favicon": "favicon/favicon.ico"
   },
+  "SDJC": {
+    "env": {
+      "VITE_APP_TITLE": "榛庡煄鍘胯儨寰峰缓鏉愭湁闄愬叕鍙�",
+      "VITE_BASE_API": "http://36.138.236.153:9000",
+      "VITE_JAVA_API": "http://36.138.236.153:9001"
+    },
+    "logo": "logo/SDJCLogo.png",
+    "favicon": "favicon/SDJCfavicon.ico"
+  },
   "logo": "/src/assets/logo/logo.png",
   "favicon": "/public/favicon.ico"
 }
diff --git a/src/api/salesManagement/deliveryLedger.js b/src/api/salesManagement/deliveryLedger.js
index 4be5829..b85582c 100644
--- a/src/api/salesManagement/deliveryLedger.js
+++ b/src/api/salesManagement/deliveryLedger.js
@@ -11,6 +11,13 @@
 }
 
 // 淇敼鍙戣揣鍙拌处
+export function getDeliveryDetail(id) {
+  return request({
+    url: `/shippingInfo/getDateil/${id}`,
+    method: "get",
+  });
+}
+
 export function addOrUpdateDeliveryLedger(query) {
   return request({
     url: "/shippingInfo/update",
diff --git a/src/router/index.js b/src/router/index.js
index c9b163c..2bb5586 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -48,19 +48,19 @@
     hidden: true,
   },
   // 绯荤粺鏋舵瀯鍥�
-  {
-    path: "/system-architecture",
-    component: Layout,
-    redirect: "/system-architecture/index",
-    children: [
-      {
-        path: "index",
-        component: () => import("@/views/systemArchitecture/index.vue"),
-        name: "SystemArchitecture",
-        meta: { title: "绯荤粺鏋舵瀯鍥�", icon: "tree" },
-      },
-    ],
-  },
+  // {
+  //   path: "/system-architecture",
+  //   component: Layout,
+  //   redirect: "/system-architecture/index",
+  //   children: [
+  //     {
+  //       path: "index",
+  //       component: () => import("@/views/systemArchitecture/index.vue"),
+  //       name: "SystemArchitecture",
+  //       meta: { title: "绯荤粺鏋舵瀯鍥�", icon: "tree" },
+  //     },
+  //   ],
+  // },
   {
     path: "/:pathMatch(.*)*",
     component: () => import("@/views/error/404"),
@@ -134,118 +134,118 @@
     ],
   },
   // 璐㈠姟绠$悊妯″潡璺敱
-  {
-    path: "/financial",
-    component: Layout,
-    hidden: false,
-    redirect: "/financial/general-ledger",
-    alwaysShow: true,
-    meta: { title: "璐㈠姟绠$悊", icon: "money" },
-    children: [
-      {
-        path: "general-ledger",
-        component: () => import("@/views/financialManagement/generalLedger/index.vue"),
-        name: "GeneralLedger",
-        meta: { title: "鎬诲笎绉戠洰" },
-      },
-      {
-        path: "sales-out",
-        component: () => import("@/views/financialManagement/receivable/salesOut.vue"),
-        name: "SalesOut",
-        meta: { title: "閿�鍞嚭搴�" },
-      },
-      {
-        path: "sales-return",
-        component: () => import("@/views/financialManagement/receivable/salesReturn.vue"),
-        name: "SalesReturn",
-        meta: { title: "閿�鍞��璐�" },
-      },
-      {
-        path: "receivable-reconciliation",
-        component: () => import("@/views/financialManagement/receivable/reconciliation.vue"),
-        name: "ReceivableReconciliation",
-        meta: { title: "搴旀敹瀵硅处" },
-      },
-      {
-        path: "invoice-apply",
-        component: () => import("@/views/financialManagement/receivable/invoiceApply.vue"),
-        name: "InvoiceApply",
-        meta: { title: "寮�绁ㄧ敵璇�" },
-      },
-      {
-        path: "output-invoice",
-        component: () => import("@/views/financialManagement/receivable/outputInvoice.vue"),
-        name: "OutputInvoice",
-        meta: { title: "閿�椤瑰彂绁�" },
-      },
-      {
-        path: "receipt",
-        component: () => import("@/views/financialManagement/receivable/receipt.vue"),
-        name: "Receipt",
-        meta: { title: "鏀舵鍗�" },
-      },
-      {
-        path: "purchase-in",
-        component: () => import("@/views/financialManagement/payable/purchaseIn.vue"),
-        name: "PurchaseIn",
-        meta: { title: "閲囪喘鍏ュ簱" },
-      },
-      {
-        path: "payable-reconciliation",
-        component: () => import("@/views/financialManagement/payable/reconciliation.vue"),
-        name: "PayableReconciliation",
-        meta: { title: "搴斾粯瀵硅处" },
-      },
-      {
-        path: "input-invoice",
-        component: () => import("@/views/financialManagement/payable/input-invoice.vue"),
-        name: "InputInvoice",
-        meta: { title: "杩涢」鍙戠エ" },
-      },
-      {
-        path: "payment-apply",
-        component: () => import("@/views/financialManagement/payable/paymentApply.vue"),
-        name: "PaymentApply",
-        meta: { title: "浠樻鐢宠" },
-      },
-      {
-        path: "payment",
-        component: () => import("@/views/financialManagement/payable/payment.vue"),
-        name: "Payment",
-        meta: { title: "浠樻鍗�" },
-      },
-      {
-        path: "fixed-assets",
-        component: () => import("@/views/financialManagement/assets/fixedAssets.vue"),
-        name: "FixedAssets",
-        meta: { title: "鍥哄畾璧勪骇" },
-      },
-      {
-        path: "intangible-assets",
-        component: () => import("@/views/financialManagement/assets/intangibleAssets.vue"),
-        name: "IntangibleAssets",
-        meta: { title: "鏃犲舰璧勪骇" },
-      },
-      {
-        path: "voucher",
-        component: () => import("@/views/financialManagement/voucher/index.vue"),
-        name: "Voucher",
-        meta: { title: "鍑瘉" },
-      },
-      {
-        path: "voucher-general-ledger",
-        component: () => import("@/views/financialManagement/voucher/generalLedger.vue"),
-        name: "VoucherGeneralLedger",
-        meta: { title: "绉戠洰鎬诲笎" },
-      },
-      {
-        path: "voucher-detail-ledger",
-        component: () => import("@/views/financialManagement/voucher/detailLedger.vue"),
-        name: "VoucherDetailLedger",
-        meta: { title: "绉戠洰鏄庣粏甯�" },
-      },
-    ],
-  },
+  // {
+  //   path: "/financial",
+  //   component: Layout,
+  //   hidden: false,
+  //   redirect: "/financial/general-ledger",
+  //   alwaysShow: true,
+  //   meta: { title: "璐㈠姟绠$悊", icon: "money" },
+  //   children: [
+  //     {
+  //       path: "general-ledger",
+  //       component: () => import("@/views/financialManagement/generalLedger/index.vue"),
+  //       name: "GeneralLedger",
+  //       meta: { title: "鎬诲笎绉戠洰" },
+  //     },
+  //     {
+  //       path: "sales-out",
+  //       component: () => import("@/views/financialManagement/receivable/salesOut.vue"),
+  //       name: "SalesOut",
+  //       meta: { title: "閿�鍞嚭搴�" },
+  //     },
+  //     {
+  //       path: "sales-return",
+  //       component: () => import("@/views/financialManagement/receivable/salesReturn.vue"),
+  //       name: "SalesReturn",
+  //       meta: { title: "閿�鍞��璐�" },
+  //     },
+  //     {
+  //       path: "receivable-reconciliation",
+  //       component: () => import("@/views/financialManagement/receivable/reconciliation.vue"),
+  //       name: "ReceivableReconciliation",
+  //       meta: { title: "搴旀敹瀵硅处" },
+  //     },
+  //     {
+  //       path: "invoice-apply",
+  //       component: () => import("@/views/financialManagement/receivable/invoiceApply.vue"),
+  //       name: "InvoiceApply",
+  //       meta: { title: "寮�绁ㄧ敵璇�" },
+  //     },
+  //     {
+  //       path: "output-invoice",
+  //       component: () => import("@/views/financialManagement/receivable/outputInvoice.vue"),
+  //       name: "OutputInvoice",
+  //       meta: { title: "閿�椤瑰彂绁�" },
+  //     },
+  //     {
+  //       path: "receipt",
+  //       component: () => import("@/views/financialManagement/receivable/receipt.vue"),
+  //       name: "Receipt",
+  //       meta: { title: "鏀舵鍗�" },
+  //     },
+  //     {
+  //       path: "purchase-in",
+  //       component: () => import("@/views/financialManagement/payable/purchaseIn.vue"),
+  //       name: "PurchaseIn",
+  //       meta: { title: "閲囪喘鍏ュ簱" },
+  //     },
+  //     {
+  //       path: "payable-reconciliation",
+  //       component: () => import("@/views/financialManagement/payable/reconciliation.vue"),
+  //       name: "PayableReconciliation",
+  //       meta: { title: "搴斾粯瀵硅处" },
+  //     },
+  //     {
+  //       path: "input-invoice",
+  //       component: () => import("@/views/financialManagement/payable/input-invoice.vue"),
+  //       name: "InputInvoice",
+  //       meta: { title: "杩涢」鍙戠エ" },
+  //     },
+  //     {
+  //       path: "payment-apply",
+  //       component: () => import("@/views/financialManagement/payable/paymentApply.vue"),
+  //       name: "PaymentApply",
+  //       meta: { title: "浠樻鐢宠" },
+  //     },
+  //     {
+  //       path: "payment",
+  //       component: () => import("@/views/financialManagement/payable/payment.vue"),
+  //       name: "Payment",
+  //       meta: { title: "浠樻鍗�" },
+  //     },
+  //     {
+  //       path: "fixed-assets",
+  //       component: () => import("@/views/financialManagement/assets/fixedAssets.vue"),
+  //       name: "FixedAssets",
+  //       meta: { title: "鍥哄畾璧勪骇" },
+  //     },
+  //     {
+  //       path: "intangible-assets",
+  //       component: () => import("@/views/financialManagement/assets/intangibleAssets.vue"),
+  //       name: "IntangibleAssets",
+  //       meta: { title: "鏃犲舰璧勪骇" },
+  //     },
+  //     {
+  //       path: "voucher",
+  //       component: () => import("@/views/financialManagement/voucher/index.vue"),
+  //       name: "Voucher",
+  //       meta: { title: "鍑瘉" },
+  //     },
+  //     {
+  //       path: "voucher-general-ledger",
+  //       component: () => import("@/views/financialManagement/voucher/generalLedger.vue"),
+  //       name: "VoucherGeneralLedger",
+  //       meta: { title: "绉戠洰鎬诲笎" },
+  //     },
+  //     {
+  //       path: "voucher-detail-ledger",
+  //       component: () => import("@/views/financialManagement/voucher/detailLedger.vue"),
+  //       name: "VoucherDetailLedger",
+  //       meta: { title: "绉戠洰鏄庣粏甯�" },
+  //     },
+  //   ],
+  // },
 ];
 
 // 鍔ㄦ�佽矾鐢憋紝鍩轰簬鐢ㄦ埛鏉冮檺鍔ㄦ�佸幓鍔犺浇
diff --git a/src/views/salesManagement/deliveryLedger/index.vue b/src/views/salesManagement/deliveryLedger/index.vue
index 8305e8b..d7f47dd 100644
--- a/src/views/salesManagement/deliveryLedger/index.vue
+++ b/src/views/salesManagement/deliveryLedger/index.vue
@@ -174,6 +174,28 @@
           <el-descriptions-item label="蹇�掑叕鍙�">{{ detailRow.expressCompany || '--' }}</el-descriptions-item>
           <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{ detailRow.expressNumber || '--' }}</el-descriptions-item>
         </el-descriptions>
+        <el-table :data="getDeliveryProductInfoList()"
+                  border
+                  size="small"
+                  class="delivery-product-table"
+                  style="width: 100%; margin-top: 16px;">
+          <el-table-column label="鎵瑰彿"
+                           prop="batchNo"
+                           min-width="160"
+                           show-overflow-tooltip/>
+          <el-table-column label="浜у搧鍚嶇О"
+                           prop="productName"
+                           min-width="160"
+                           show-overflow-tooltip/>
+          <el-table-column label="瑙勬牸鍨嬪彿"
+                           prop="specificationModel"
+                           min-width="160"
+                           show-overflow-tooltip/>
+          <el-table-column label="鍙戣揣鏁伴噺"
+                           prop="deliveryQuantity"
+                           min-width="120"
+                           align="center"/>
+        </el-table>
         <ImagePreview :file-list="detailRow.storageBlobVOs || []" />
       </div>
       <template #footer>
@@ -192,7 +214,9 @@
 import {getCurrentDate} from "@/utils/index.js";
 import {
   deliveryLedgerListPage,
-  delDeliveryLedger, deductStock,
+  delDeliveryLedger,
+  deductStock,
+  getDeliveryDetail,
 } from "@/api/salesManagement/deliveryLedger.js";
 import {delLedgerFile} from "@/api/salesManagement/salesLedger.js";
 import ImageUpload from "@/components/AttachmentUpload/image/index.vue";
@@ -213,6 +237,7 @@
 // 璇︽儏寮规
 const detailDialogVisible = ref(false);
 const detailRow = ref(null);
+const detailProductList = ref([]);
 
 // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
 const operationType = ref("");
@@ -320,14 +345,86 @@
 };
 
 // 鎵撳紑璇︽儏寮规
-const openDetail = (row) => {
+const openDetail = async (row) => {
   detailRow.value = row || null;
-  const list = Array.isArray(row?.commonFileList) ? row.commonFileList : [];
+  detailProductList.value = [];
   detailDialogVisible.value = true;
+  if (!row?.id) return;
+  try {
+    const res = await getDeliveryDetail(row.id);
+    const detailData = res?.data;
+    detailRow.value = {
+      ...row,
+      ...(Array.isArray(detailData) ? {} : detailData || {}),
+    };
+    detailProductList.value = resolveDeliveryDetailList(detailData);
+  } catch (error) {
+    proxy.$modal.msgError("鍔犺浇鍙戣揣鍙拌处璇︽儏澶辫触");
+  }
+};
+const resolveDeliveryDetailList = data => {
+  if (Array.isArray(data)) return data;
+  if (!data || typeof data !== "object") return [];
+  return [
+    data.batchNoDetailList,
+    data.batchNoList,
+    data.shippingBatchList,
+    data.shippingInfoDetailList,
+    data.detailList,
+    data.batchDetailList,
+    data.rows,
+    data.records,
+    data.list,
+    data.data,
+  ].find(value => Array.isArray(value) && value.length) || [];
+};
+const getDeliveryProductInfoList = () => {
+  const row = detailRow.value;
+  if (!row) return [];
+  const normalizeBatchNoList = value => {
+    if (Array.isArray(value)) return value;
+    if (typeof value === "string" && value.includes(",")) {
+      return value.split(",").map(item => item.trim()).filter(Boolean);
+    }
+    return value ? [value] : [];
+  };
+  const detailList = detailProductList.value.length ? detailProductList.value : [
+    row.batchNoDetailList,
+    row.batchNoList,
+    row.shippingBatchList,
+    row.shippingInfoDetailList,
+    row.detailList,
+    row.batchDetailList,
+  ].find(value => Array.isArray(value) && value.length);
+  const batchNoList = normalizeBatchNoList(row.batchNo);
+  const toTableRow = (item = {}) => ({
+    batchNo:
+        typeof item === "string" || typeof item === "number"
+            ? item
+            : item.batchNo ?? item.batchNumber ?? row.batchNo ?? "--",
+    productName: item.productName ?? row.productName ?? "--",
+    specificationModel:
+        item.specificationModel ?? item.model ?? row.specificationModel ?? "--",
+    deliveryQuantity:
+        item.deliveryQuantity ??
+        item.quantity ??
+        item.shippingQuantity ??
+        row.deliveryQuantity ??
+        row.quantity ??
+        "--",
+  });
+  if (detailList?.length) {
+    return detailList.map(toTableRow);
+  }
+  if (batchNoList.length) {
+    return batchNoList.map(batchNo => toTableRow({batchNo}));
+  }
+  return [toTableRow()];
 };
 const closeDetail = () => {
   detailDialogVisible.value = false;
   detailRow.value = null;
+  detailProductList.value = [];
 };
 
 // 鎻愪氦琛ㄥ崟

--
Gitblit v1.9.3