From 3682ad63b5bdb47228325dea1efe2bb9069254a5 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期一, 11 五月 2026 15:53:18 +0800
Subject: [PATCH] 合格出库扫销售二维码进行发货

---
 src/pages/sales/salesAccount/index.vue |  181 ++-------------------------------------------
 1 files changed, 9 insertions(+), 172 deletions(-)

diff --git a/src/pages/sales/salesAccount/index.vue b/src/pages/sales/salesAccount/index.vue
index 3834435..2e1b083 100644
--- a/src/pages/sales/salesAccount/index.vue
+++ b/src/pages/sales/salesAccount/index.vue
@@ -137,11 +137,14 @@
 <script setup>
   import { ref } from "vue";
   import { onShow } from "@dcloudio/uni-app";
+  import { ledgerListPage, delLedger, productList } from "@/api/salesManagement/salesLedger";
   import {
-    ledgerListPage,
-    delLedger,
-    productList,
-  } from "@/api/salesManagement/salesLedger";
+    hasShippedProducts,
+    getLedgerShippingLabel,
+    getLedgerShippingTagType,
+    canLedgerShip,
+    executeSalesLedgerShip,
+  } from "@/utils/salesLedgerShip";
   import useUserStore from "@/store/modules/user";
   import PageHeader from "@/components/PageHeader.vue";
   const userStore = useUserStore();
@@ -161,173 +164,7 @@
   // 閿�鍞彴璐︽暟鎹�
   const ledgerList = ref([]);
 
-  // 鍒ゆ柇鏄惁瀛樺湪宸插彂璐�/鍙戣揣瀹屾垚鐨勪骇鍝�
-  const hasShippedProducts = products => {
-    if (!products || products.length === 0) return false;
-    return products.some(p => {
-      const statusCode = normalizeShippingStatusToCode(p.deliveryStatus ?? p.shippingStatus);
-      const statusStr = (p.shippingStatus ?? "").toString().trim();
-      // 鏈夊彂璐ф棩鏈�/杞︾墝鍙凤紝鎴栫姸鎬佹槑纭负鈥滃凡鍙戣揣/鍙戣揣瀹屾垚鈥濊涓哄凡鍙戣揣
-      return (
-        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",
-      });
-    }
-  };
+  const handleShip = item => executeSalesLedgerShip(item);
 
   // 杩斿洖涓婁竴椤�
   const goBack = () => {
@@ -374,7 +211,7 @@
 
     if (hasShippedProducts(products)) {
       uni.showToast({
-        title: "宸插彂璐�/鍙戣揣瀹屾垚鐨勯攢鍞鍗曚笉鑳藉垹闄�",
+        title: "宸插彂璐с�侀儴鍒嗗彂璐ф垨宸叉湁鍙戣揣璁板綍鐨勯攢鍞鍗曚笉鑳藉垹闄�",
         icon: "none",
       });
       return;

--
Gitblit v1.9.3