From ad3ecc9167a5f837e0a6292d8e697b799eb6bfc2 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 17 四月 2026 15:57:31 +0800
Subject: [PATCH] 发货审批人列表来源修改

---
 src/pages/sales/salesAccount/index.vue |  219 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 195 insertions(+), 24 deletions(-)

diff --git a/src/pages/sales/salesAccount/index.vue b/src/pages/sales/salesAccount/index.vue
index 60ec732..3834435 100644
--- a/src/pages/sales/salesAccount/index.vue
+++ b/src/pages/sales/salesAccount/index.vue
@@ -26,7 +26,8 @@
           v-if="ledgerList.length > 0">
       <view v-for="(item, index) in ledgerList"
             :key="index">
-        <view class="ledger-item">
+        <view class="ledger-item"
+              @click="openOut(item)">
           <view class="item-header">
             <view class="item-left">
               <view class="document-icon">
@@ -66,6 +67,13 @@
               <text class="detail-label">绛捐鏃ユ湡</text>
               <text class="detail-value">{{ item.executionDate }}</text>
             </view>
+            <view class="detail-row">
+              <text class="detail-label">鍙戣揣鐘舵��</text>
+              <u-tag size="mini"
+                     :type="getLedgerShippingTagType(item)">{{
+                getLedgerShippingLabel(item)
+              }}</u-tag>
+            </view>
             <up-divider></up-divider>
             <view class="detail-info">
               <view class="detail-row">
@@ -80,25 +88,33 @@
             <up-divider></up-divider>
             <view class="detail-buttons">
               <u-button class="detail-button"
-                      size="small"
-                      type="primary"
-                      @click.stop="handleInfo('edit', item)">
-              缂栬緫
-            </u-button>
+                        size="small"
+                        type="primary"
+                        plain
+                        :disabled="!canLedgerShip(item)"
+                        @click.stop="handleShip(item)">
+                鍙戣揣
+              </u-button>
+              <!-- <u-button class="detail-button"
+                        size="small"
+                        type="primary"
+                        @click.stop="handleInfo('edit', item)">
+                缂栬緫
+              </u-button>
               <u-button class="detail-button"
-                      size="small"
-                      type="primary"
-                      plain
-                      @click.stop="openOut(item)">
-              鍙戣揣鐘舵��
-            </u-button>
-            <u-button class="detail-button"
-                      size="small"
-                      type="error"
-                      plain
-                      @click.stop="handleDelete(item)">
-              鍒犻櫎
-            </u-button>
+                        size="small"
+                        type="primary"
+                        plain
+                        @click.stop="openOut(item)">
+                鍙戣揣鐘舵��
+              </u-button> -->
+              <!-- <u-button class="detail-button"
+                        size="small"
+                        type="error"
+                        plain
+                        @click.stop="handleDelete(item)">
+                鍒犻櫎
+              </u-button> -->
             </view>
           </view>
         </view>
@@ -109,12 +125,12 @@
       <text>鏆傛棤閿�鍞彴璐︽暟鎹�</text>
     </view>
     <!-- 娴姩鎿嶄綔鎸夐挳 -->
-    <view class="fab-button"
+    <!-- <view class="fab-button"
           @click="handleInfo('add')">
       <up-icon name="plus"
                size="24"
                color="#ffffff"></up-icon>
-    </view>
+    </view> -->
   </view>
 </template>
 
@@ -149,14 +165,168 @@
   const hasShippedProducts = products => {
     if (!products || products.length === 0) return false;
     return products.some(p => {
-      const statusStr = (p.shippingStatus ?? "").toString();
-      // 鍖呭惈鈥滃彂璐р�濇垨鏈夊彂璐ф棩鏈�/杞︾墝鍙疯涓哄凡鍙戣揣
+      const statusCode = normalizeShippingStatusToCode(p.deliveryStatus ?? p.shippingStatus);
+      const statusStr = (p.shippingStatus ?? "").toString().trim();
+      // 鏈夊彂璐ф棩鏈�/杞︾墝鍙凤紝鎴栫姸鎬佹槑纭负鈥滃凡鍙戣揣/鍙戣揣瀹屾垚鈥濊涓哄凡鍙戣揣
       return (
-        statusStr.includes("鍙戣揣") ||
+        statusCode === 5 ||
+        statusStr === "宸插彂璐�" ||
+        statusStr === "鍙戣揣瀹屾垚" ||
+        statusStr === "宸插畬鎴愬彂璐�" ||
         !!p.shippingDate ||
         !!p.shippingCarNumber
       );
     });
+  };
+
+  // 鍙拌处鍙戣揣鐘舵�侊細1-鏈彂璐э紝2-瀹℃壒涓紝3-瀹℃壒涓嶉�氳繃锛�4-瀹℃壒閫氳繃锛�5-宸插彂璐э紙涓庡悗绔灇涓惧榻愶紝鍏煎澶氱瀛楁鍚嶏級
+  const LEDGER_SHIPPING_LABELS = {
+    1: "鏈彂璐�",
+    2: "瀹℃壒涓�",
+    3: "瀹℃壒涓嶉�氳繃",
+    4: "瀹℃壒閫氳繃",
+    5: "宸插彂璐�",
+  };
+
+  const normalizeShippingStatusToCode = v => {
+    if (v === null || v === undefined || v === "") return 1;
+    const n = Number(v);
+    if (!Number.isNaN(n) && n >= 1 && n <= 5) return n;
+    const s = String(v).trim();
+    const textMap = {
+      鏈彂璐�: 1,
+      寰呭彂璐�: 1,
+      瀹℃壒涓�: 2,
+      瀹℃牳涓�: 2,
+      寰呭鏍�: 2,
+      瀹℃壒涓嶉�氳繃: 3,
+      瀹℃牳鎷掔粷: 3,
+      瀹℃壒閫氳繃: 4,
+      瀹℃牳閫氳繃: 4,
+      宸插彂璐�: 5,
+      鍙戣揣瀹屾垚: 5,
+      宸插畬鎴愬彂璐�: 5,
+    };
+    return textMap[s] ?? 1;
+  };
+
+  const getLedgerShippingStatusCode = item => {
+    if (!item) return 1;
+    const raw =
+      item.deliveryStatus ??
+      item.shippingApprovalStatus ??
+      item.shipmentApproveStatus ??
+      item.ledgerShippingStatus;
+    if (raw !== null && raw !== undefined && raw !== "") {
+      return normalizeShippingStatusToCode(raw);
+    }
+    if (item.shippingStatus !== null && item.shippingStatus !== undefined && item.shippingStatus !== "") {
+      return normalizeShippingStatusToCode(item.shippingStatus);
+    }
+    return 1;
+  };
+
+  const getLedgerShippingLabel = item =>
+    LEDGER_SHIPPING_LABELS[getLedgerShippingStatusCode(item)] ?? "鏈彂璐�";
+
+  const getLedgerShippingTagType = item => {
+    const t = { 1: "info", 2: "warning", 3: "error", 4: "primary", 5: "success" };
+    return t[getLedgerShippingStatusCode(item)] ?? "info";
+  };
+
+  const canLedgerShip = item => {
+    const c = getLedgerShippingStatusCode(item);
+    return c === 1 || c === 3;
+  };
+
+  /**
+   * 鍒ゆ柇鏄惁鍙互鍙戣揣
+   * 鍙湁鍦ㄤ骇鍝佺姸鎬佹槸鍏呰冻锛屽彂璐х姸鎬佹槸寰呭彂璐у拰瀹℃牳鎷掔粷鐨勬椂鍊欐墠鍙互鍙戣揣
+   * @param row 琛屾暟鎹�
+   */
+  const canShip = row => {
+    if (!row) return false;
+
+    // 浜у搧鐘舵�佸繀椤绘槸鍏呰冻锛坅pproveStatus === 1锛�
+    if (row.approveStatus !== 1) return false;
+
+    // 濡傛灉宸插彂璐э紙鏈夊彂璐ф棩鏈熸垨杞︾墝鍙凤級锛屼笉鑳藉啀娆″彂璐�
+    if (row.shippingDate || row.shippingCarNumber) return false;
+
+    // 濡傛灉鍚庣杩斿洖浜嗗彂璐х姸鎬侊紙deliveryStatus锛夛紝宸插彂璐у垯绂佹鍐嶆鍙戣揣
+    const deliveryStatus = row.deliveryStatus;
+    if (deliveryStatus !== null && deliveryStatus !== undefined && String(deliveryStatus).trim() !== "") {
+      const code = normalizeShippingStatusToCode(deliveryStatus);
+      if (code === 5) return false;
+    }
+
+    // 鍙戣揣鐘舵�佸繀椤绘槸"寰呭彂璐�"鎴�"瀹℃牳鎷掔粷"
+    const statusStr = row.shippingStatus ? String(row.shippingStatus).trim() : "";
+    return statusStr === "寰呭彂璐�" || statusStr === "瀹℃牳鎷掔粷";
+  };
+
+  const productLabel = row => {
+    if (!row) return "浜у搧";
+    const parts = [row.productCategory, row.floorCode, row.specificationModel].filter(Boolean);
+    return parts.length ? parts.join(" / ") : (row.productName || row.goodsName || "浜у搧");
+  };
+
+  const handleShip = async item => {
+    if (!canLedgerShip(item)) {
+      uni.showToast({
+        title: "浠呮湭鍙戣揣鎴栧鎵逛笉閫氳繃鏃跺彲鍙戣揣",
+        icon: "none",
+      });
+      return;
+    }
+    if (!item?.id) return;
+    showLoadingToast("鍔犺浇涓�...");
+    try {
+      const res = await productList({ salesLedgerId: item.id, type: 1 });
+      const products = res.data || res.records || [];
+      closeToast();
+      if (!products.length) {
+        uni.showToast({
+          title: "娌℃湁浜у搧鏁版嵁",
+          icon: "none",
+        });
+        return;
+      }
+
+      // 鍏堟鏌ユ槸鍚﹀瓨鍦ㄢ�滀笉瓒斥�濈殑浜у搧锛氭湁涓�涓笉瓒冲氨绂佹鍙戣揣骞舵彁绀�
+      const insufficient = products.filter(p => p?.approveStatus !== 1);
+      if (insufficient.length) {
+        const names = insufficient.slice(0, 3).map(productLabel).join("銆�");
+        uni.showToast({
+          title: `瀛樺湪搴撳瓨涓嶈冻浜у搧锛�${names}${insufficient.length > 3 ? "鈥�" : ""}`,
+          icon: "none",
+          duration: 2500,
+        });
+        return;
+      }
+
+      // 鍏ㄩ儴鍏呰冻鍚庯紝鍐嶇瓫閫夊彲鍙戣揣浜у搧锛堜粎寰呭彂璐�/瀹℃牳鎷掔粷锛�
+      const row = products.find(p => canShip(p));
+      if (!row) {
+        uni.showToast({
+          title: "娌℃湁鍙彂璐х殑浜у搧锛堜粎寰呭彂璐�/瀹℃牳鎷掔粷鍙彂璐э級",
+          icon: "none",
+          duration: 2500,
+        });
+        return;
+      }
+
+      uni.setStorageSync("goOutData", JSON.stringify(row));
+      uni.navigateTo({
+        url: "/pages/sales/salesAccount/goOut",
+      });
+    } catch (e) {
+      closeToast();
+      uni.showToast({
+        title: "鍔犺浇浜у搧澶辫触",
+        icon: "none",
+      });
+    }
   };
 
   // 杩斿洖涓婁竴椤�
@@ -240,6 +410,7 @@
     try {
       // 璁剧疆鎿嶄綔绫诲瀷
       uni.setStorageSync("operationType", type);
+      uni.removeStorageSync("editData");
 
       // 濡傛灉鏄煡鐪嬫垨缂栬緫鎿嶄綔
       if (type !== "add") {

--
Gitblit v1.9.3