From 95fce9ecb77e9615df925eee143ce34647c694ce Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 16 四月 2026 17:20:22 +0800
Subject: [PATCH] 扫码出库和扫码入库功能开发

---
 src/pages/works.vue |  479 +++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 363 insertions(+), 116 deletions(-)

diff --git a/src/pages/works.vue b/src/pages/works.vue
index 333eaf5..9ddae95 100644
--- a/src/pages/works.vue
+++ b/src/pages/works.vue
@@ -1,5 +1,28 @@
 <template>
   <view class="content">
+    <!-- 鍗忓悓鍔炲叕妯″潡 -->
+    <view class="common-module collaboration-module"
+          v-if="hasCollaborationItems">
+      <view class="module-header">
+        <view class="module-title-container">
+          <text class="module-title">鍗忓悓鍔炲叕</text>
+        </view>
+      </view>
+      <view class="module-content">
+        <up-grid :border="false"
+                 col="4">
+          <up-grid-item v-for="(item, index) in collaborationItems"
+                        :key="index"
+                        @click="handleCommonItemClick(item)">
+            <view class="icon-container">
+              <image :src="item.icon"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+        </up-grid>
+      </view>
+    </view>
     <!-- 钀ラ攢绠$悊妯″潡 -->
     <view class="common-module marketing-module"
           v-if="hasMarketingItems">
@@ -15,14 +38,15 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
         </up-grid>
       </view>
     </view>
-    <!--    &lt;!&ndash; 閲囪喘绠$悊妯″潡 &ndash;&gt;-->
+    <!-- 閲囪喘绠$悊妯″潡 -->
     <view class="common-module purchase-module"
           v-if="hasPurchaseItems">
       <view class="module-header">
@@ -37,80 +61,52 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
         </up-grid>
       </view>
     </view>
-    <!-- &lt;!&ndash; 鍗忓悓鍔炲叕妯″潡 &ndash;&gt; -->
-    <view class="common-module collaboration-module"
-          v-if="hasCollaborationItems">
+    <!-- 浠撳偍鐗╂祦妯″潡 -->
+    <view class="common-module warehouse-logistics-module"
+          v-if="hasWarehouseLogisticsItems">
       <view class="module-header">
         <view class="module-title-container">
-          <text class="module-title">鍗忓悓鍔炲叕</text>
+          <text class="module-title">浠撳偍鐗╂祦</text>
         </view>
       </view>
       <view class="module-content">
         <up-grid :border="false"
                  col="4">
-          <up-grid-item v-for="(item, index) in collaborationItems"
+          <up-grid-item v-for="(item, index) in warehouseLogisticsItems"
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+          <up-grid-item @click="jumpUrl('/pages/inventoryManagement/scanIn/index')">
+            <view class="icon-container">
+              <image src="/static/images/icon/xiaoshoutaizhang.svg"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">鎵爜鍏ュ簱</text>
+          </up-grid-item>
+          <up-grid-item @click="jumpUrl('/pages/inventoryManagement/scanOut/index')">
+            <view class="icon-container">
+              <image src="/static/images/icon/xiaoshoutaizhang.svg"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">鎵爜鍑哄簱</text>
           </up-grid-item>
         </up-grid>
       </view>
     </view>
-    <!-- 瀹夊叏鐢熶骇妯″潡 -->
-    <view class="common-module collaboration-module"
-          v-if="hasSafetyItems">
-      <view class="module-header">
-        <view class="module-title-container">
-          <text class="module-title">瀹夊叏鐢熶骇</text>
-        </view>
-      </view>
-      <view class="module-content">
-        <up-grid :border="false"
-                 col="4">
-          <up-grid-item v-for="(item, index) in safetyItems"
-                        :key="index"
-                        @click="handleCommonItemClick(item)">
-            <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
-            </view>
-            <text class="item-label">{{item.label}}</text>
-          </up-grid-item>
-        </up-grid>
-      </view>
-    </view>
-    <!-- 璐ㄩ噺绠$悊妯″潡 -->
-    <view class="common-module collaboration-module"
-          v-if="hasQualityItems">
-      <view class="module-header">
-        <view class="module-title-container">
-          <text class="module-title">璐ㄩ噺绠$悊</text>
-        </view>
-      </view>
-      <view class="module-content">
-        <up-grid :border="false"
-                 col="4">
-          <up-grid-item v-for="(item, index) in qualityItems"
-                        :key="index"
-                        @click="handleCommonItemClick(item)">
-            <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
-            </view>
-            <text class="item-label">{{item.label}}</text>
-          </up-grid-item>
-        </up-grid>
-      </view>
-    </view>
-    <!-- 浜哄姏璧勬簮妯″潡 -->
+    <!-- 浜哄姏璧勬簮妯″潡锛堝凡娉ㄩ噴锛�
     <view class="common-module collaboration-module"
           v-if="hasHumanResourcesItems">
       <view class="module-header">
@@ -132,7 +128,8 @@
         </up-grid>
       </view>
     </view>
-    <!-- 鐢熶骇绠℃帶妯″潡 -->
+    -->
+    <!-- 鐢熶骇绠℃帶妯″潡锛堝凡娉ㄩ噴锛�
     <view class="common-module equipment-module"
           v-if="hasProductionItems">
       <view class="module-header">
@@ -154,6 +151,99 @@
         </up-grid>
       </view>
     </view>
+    -->
+    <!-- 璐㈠姟绠$悊妯″潡 -->
+    <view class="common-module finance-module"
+          v-if="hasFinanceManagementItems">
+      <view class="module-header">
+        <view class="module-title-container">
+          <text class="module-title">璐㈠姟绠$悊</text>
+        </view>
+      </view>
+      <view class="module-content">
+        <up-grid :border="false"
+                 col="4">
+          <up-grid-item v-for="(item, index) in financeManagementItems"
+                        :key="index"
+                        @click="handleCommonItemClick(item)">
+            <view class="icon-container">
+              <image :src="item.icon"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+        </up-grid>
+      </view>
+    </view>
+    <!-- 妗f绠$悊妯″潡 -->
+    <view class="common-module archive-module"
+          v-if="hasArchiveManagementItems">
+      <view class="module-header">
+        <view class="module-title-container">
+          <text class="module-title">妗f绠$悊</text>
+        </view>
+      </view>
+      <view class="module-content">
+        <up-grid :border="false"
+                 col="4">
+          <up-grid-item v-for="(item, index) in archiveManagementItems"
+                        :key="index"
+                        @click="handleCommonItemClick(item)">
+            <view class="icon-container">
+              <image :src="item.icon"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+        </up-grid>
+      </view>
+    </view>
+    <!-- 鍞悗鏈嶅姟妯″潡 -->
+    <view class="common-module after-sales-module"
+          v-if="hasAfterSalesServiceItems">
+      <view class="module-header">
+        <view class="module-title-container">
+          <text class="module-title">鍞悗鏈嶅姟</text>
+        </view>
+      </view>
+      <view class="module-content">
+        <up-grid :border="false"
+                 col="4">
+          <up-grid-item v-for="(item, index) in afterSalesServiceItems"
+                        :key="index"
+                        @click="handleCommonItemClick(item)">
+            <view class="icon-container">
+              <image :src="item.icon"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+        </up-grid>
+      </view>
+    </view>
+    <!-- 璐ㄩ噺绠$悊妯″潡 -->
+    <view class="common-module collaboration-module"
+          v-if="hasQualityItems">
+      <view class="module-header">
+        <view class="module-title-container">
+          <text class="module-title">璐ㄩ噺绠$悊</text>
+        </view>
+      </view>
+      <view class="module-content">
+        <up-grid :border="false"
+                 col="4">
+          <up-grid-item v-for="(item, index) in qualityItems"
+                        :key="index"
+                        @click="handleCommonItemClick(item)">
+            <view class="icon-container">
+              <image :src="item.icon"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+        </up-grid>
+      </view>
+    </view>
     <!-- 璁惧绠$悊妯″潡 -->
     <view class="common-module equipment-module"
           v-if="hasEquipmentItems">
@@ -169,7 +259,31 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+        </up-grid>
+      </view>
+    </view>
+    <!-- 瀹夊叏鐢熶骇妯″潡 -->
+    <view class="common-module collaboration-module"
+          v-if="hasSafetyItems">
+      <view class="module-header">
+        <view class="module-title-container">
+          <text class="module-title">瀹夊叏鐢熶骇</text>
+        </view>
+      </view>
+      <view class="module-content">
+        <up-grid :border="false"
+                 col="4">
+          <up-grid-item v-for="(item, index) in safetyItems"
+                        :key="index"
+                        @click="handleCommonItemClick(item)">
+            <view class="icon-container">
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -216,6 +330,30 @@
       label: "閿�鍞彴璐�",
     },
     {
+      icon: "/static/images/icon/kehuwanglai.svg",
+      label: "瀹㈡埛寰�鏉�",
+    },
+  ]);
+
+  // 閲囪喘绠$悊鍔熻兘鏁版嵁
+  const purchaseItems = reactive([
+    {
+      icon: "/static/images/icon/caigoutaizhang.svg",
+      label: "閲囪喘鍙拌处",
+    },
+    {
+      icon: "/static/images/icon/gongyingshangwanglai.svg",
+      label: "渚涘簲鍟嗗線鏉�",
+    },
+    {
+      icon: "/static/images/icon/caigouguanli.svg",
+      label: "閲囪喘閫�璐�",
+    },
+  ]);
+
+  // 璐㈠姟绠$悊鍔熻兘鏁版嵁
+  const financeManagementItems = reactive([
+    {
       icon: "/static/images/icon/kaipiaodengji.svg",
       label: "寮�绁ㄧ櫥璁�",
     },
@@ -230,18 +368,6 @@
     {
       icon: "/static/images/icon/huikuanliushui.svg",
       label: "鍥炴娴佹按",
-    },
-    {
-      icon: "/static/images/icon/kehuwanglai.svg",
-      label: "瀹㈡埛寰�鏉�",
-    },
-  ]);
-
-  // 閲囪喘绠$悊鍔熻兘鏁版嵁
-  const purchaseItems = reactive([
-    {
-      icon: "/static/images/icon/caigoutaizhang.svg",
-      label: "閲囪喘鍙拌处",
     },
     {
       icon: "/static/images/icon/laipiaodengji.svg",
@@ -260,35 +386,74 @@
       label: "浠樻娴佹按",
     },
     {
-      icon: "/static/images/icon/gongyingshangwanglai.svg",
-      label: "渚涘簲鍟嗗線鏉�",
+      icon: "/static/images/icon/huikuandengji.svg",
+      label: "鏀跺叆绠$悊",
+    },
+    {
+      icon: "/static/images/icon/fukuandengji.svg",
+      label: "鏀嚭绠$悊",
+    },
+    {
+      icon: "/static/images/icon/huikuanliushui.svg",
+      label: "鍊熸绠$悊",
     },
   ]);
-  const humanResourcesItems = reactive([
+
+  // 妗f绠$悊鍔熻兘鏁版嵁
+  const archiveManagementItems = reactive([
     {
-      icon: "/static/images/icon/caigoutaizhang.svg",
-      label: "鎵撳崱绛惧埌",
-    },
-    {
-      icon: "/static/images/icon/caigoutaizhang.svg",
-      label: "浜哄憳钖祫",
-    },
-    {
-      icon: "/static/images/icon/caigoutaizhang.svg",
-      label: "鍚堝悓绠$悊",
+      icon: "/static/images/icon/gongchuguanli.svg",
+      label: "渚涘簲鍟嗘。妗�",
     },
   ]);
+
+  // 鍞悗鏈嶅姟鍔熻兘鏁版嵁
+  const afterSalesServiceItems = reactive([
+    {
+      icon: "/static/images/icon/xiaoshoutaizhang.svg",
+      label: "鍙嶉鐧昏",
+    },
+    {
+      icon: "/static/images/icon/caigouguanli.svg",
+      label: "鍞悗澶勭悊",
+    },
+  ]);
+
+  // 浠撳偍鐗╂祦鍔熻兘鏁版嵁
+  const warehouseLogisticsItems = reactive([
+    {
+      icon: "/static/images/icon/xiaoshoutaizhang.svg",
+      label: "搴撳瓨绠$悊",
+    },
+  ]);
+
+  // 浜哄姏璧勬簮妯″潡锛堝凡娉ㄩ噴锛�
+  const humanResourcesItems = reactive([]);
+  // const humanResourcesItems = reactive([
+  //   {
+  //     icon: "/static/images/icon/dakaqiandao.svg",
+  //     label: "鎵撳崱绛惧埌",
+  //   },
+  //   {
+  //     icon: "/static/images/icon/renyuanxinzi.svg",
+  //     label: "浜哄憳钖祫",
+  //   },
+  //   {
+  //     icon: "/static/images/icon/hetongguanli.svg",
+  //     label: "鍚堝悓绠$悊",
+  //   },
+  // ]);
   const qualityItems = reactive([
     {
-      icon: "/static/images/icon/caigoutaizhang.svg",
+      icon: "/static/images/icon/yuancailiaojianyan.svg",
       label: "鍘熸潗鏂欐楠�",
     },
     {
-      icon: "/static/images/icon/caigoutaizhang.svg",
+      icon: "/static/images/icon/guochengjianyan.svg",
       label: "杩囩▼妫�楠�",
     },
     {
-      icon: "/static/images/icon/caigoutaizhang.svg",
+      icon: "/static/images/icon/chuchangjianyan.svg",
       label: "鍑哄巶妫�楠�",
     },
   ]);
@@ -358,36 +523,42 @@
     },
   ]);
 
-  // 鐢熶骇绠℃帶鍔熻兘鏁版嵁
-  const productionItems = reactive([
-    // {
-    //   icon: "/static/images/icon/shengchandingdan@2x.svg",
-    //   label: "鐢熶骇璁㈠崟",
-    // },
-    // {
-    //   icon: "/static/images/icon/shengchanpaigong@2x.svg",
-    //   label: "鐢熶骇娲惧伐",
-    // },
-    // {
-    //   icon: "/static/images/icon/shengchanpaichan@2x.svg",
-    //   label: "宸ュ簭鎺掍骇",
-    // },
-    {
-      icon: "/static/images/icon/shengchanbaogong.svg",
-      label: "鐢熶骇鎶ュ伐",
-    },
-    // {
-    //   icon: "/static/images/icon/shengchanhesuan@2x.svg",
-    //   label: "鐢熶骇鏍哥畻",
-    // },
-  ]);
+  // 鐢熶骇绠℃帶妯″潡锛堝凡娉ㄩ噴锛�
+  const productionItems = reactive([]);
+  // // 鐢熶骇绠℃帶鍔熻兘鏁版嵁
+  // const productionItems = reactive([
+  //   {
+  //     icon: "/static/images/icon/shengchandingdan@2x.svg",
+  //     label: "鐢熶骇璁㈠崟",
+  //   },
+  //   {
+  //     icon: "/static/images/icon/shengchanpaigong@2x.svg",
+  //     label: "鐢熶骇娲惧伐",
+  //   },
+  //   {
+  //     icon: "/static/images/icon/shengchanpaichan@2x.svg",
+  //     label: "宸ュ簭鎺掍骇",
+  //   },
+  //   {
+  //     icon: "/static/images/icon/shengchanbaogong.svg",
+  //     label: "鐢熶骇鎶ュ伐",
+  //   },
+  //   {
+  //     icon: "/static/images/icon/shengchanbaogong.svg",
+  //     label: "鐢熶骇宸ュ崟",
+  //   },
+  //   {
+  //     icon: "/static/images/icon/shengchanhesuan@2x.svg",
+  //     label: "鐢熶骇鏍哥畻",
+  //   },
+  // ]);
 
   // 璁惧绠$悊鍔熻兘鏁版嵁
   const equipmentItems = reactive([
-    // {
-    // 	icon: '/static/images/icon/shebeitaizhang@2x.svg',
-    // 	label: '璁惧鍙拌处',
-    // },
+    {
+      icon: "/static/images/icon/shengchanbaogong.svg",
+      label: "璁惧鍙拌处",
+    },
     {
       icon: "/static/images/icon/yunxingguanli.svg",
       label: "杩愯绠$悊",
@@ -465,9 +636,34 @@
           url: "/pages/procurementManagement/receiptPaymentHistory/index",
         });
         break;
+      case "鏀跺叆绠$悊":
+        uni.navigateTo({
+          url: "/pages/financialManagement/revenueManagement/index",
+        });
+        break;
+      case "鏀嚭绠$悊":
+        uni.navigateTo({
+          url: "/pages/financialManagement/expenseManagement/index",
+        });
+        break;
+      case "鍊熸绠$悊":
+        uni.navigateTo({
+          url: "/pages/financialManagement/loanManagement/index",
+        });
+        break;
       case "渚涘簲鍟嗗線鏉�":
         uni.navigateTo({
           url: "/pages/procurementManagement/paymentLedger/index",
+        });
+        break;
+      case "閲囪喘閫�璐�":
+        uni.navigateTo({
+          url: "/pages/procurementManagement/purchaseReturnOrder/index",
+        });
+        break;
+      case "渚涘簲鍟嗘。妗�":
+        uni.navigateTo({
+          url: "/pages/basicData/supplierManage/index",
         });
         break;
       case "鍏嚭绠$悊":
@@ -588,6 +784,11 @@
       case "宸ュ簭鎺掍骇":
         uni.navigateTo({
           url: "/pages/productionManagement/processScheduling/index",
+        });
+        break;
+      case "鐢熶骇宸ュ崟":
+        uni.navigateTo({
+          url: "/pages/productionManagement/workOrder/index",
         });
         break;
       case "鐢熶骇鎶ュ伐":
@@ -713,12 +914,32 @@
           url: "/pages/qualityManagement/finalInspection/index",
         });
         break;
+      case "搴撳瓨绠$悊":
+        uni.navigateTo({
+          url: "/pages/inventoryManagement/stockManagement/index",
+        });
+        break;
+      case "鍙嶉鐧昏":
+        uni.navigateTo({
+          url: "/pages/customerService/feedbackRegistration/index",
+        });
+        break;
+      case "鍞悗澶勭悊":
+        uni.navigateTo({
+          url: "/pages/customerService/afterSalesHandling/index",
+        });
+        break;
       default:
         uni.showToast({
           title: `鐐瑰嚮浜�${item.label}`,
           icon: "none",
         });
     }
+  };
+  const jumpUrl = url => {
+    uni.navigateTo({
+      url: url,
+    });
   };
 
   // 鍒涘缓瀵瑰瓙缁勪欢鐨勫紩鐢�
@@ -884,6 +1105,7 @@
 
     // 鏀堕泦鎵�鏈夋湁鏉冮檺鐨勮彍鍗曟爣棰橈紙鏍规嵁 meta.title锛�
     const allowedMenuTitles = new Set();
+    const alwaysShowTitles = new Set(["閲囪喘閫�璐у崟", "渚涘簲鍟嗙鐞�"]);
     const collectMenuTitles = routes => {
       if (!Array.isArray(routes)) return;
       routes.forEach(route => {
@@ -899,9 +1121,16 @@
 
     // 瀹氫箟鑿滃崟閰嶇疆鏄犲皠
     const menuMapping = {
-      collaboration: { target: collaborationItems, specialMapping: { "瑙勭珷鍒跺害": "瑙勭珷鍒跺害绠$悊" } },
+      collaboration: {
+        target: collaborationItems,
+        specialMapping: { 瑙勭珷鍒跺害: "瑙勭珷鍒跺害绠$悊" },
+      },
+      archiveManagement: {
+        target: archiveManagementItems,
+        specialMapping: { 渚涘簲鍟嗘。妗�: "渚涘簲鍟嗙鐞�" },
+      },
     };
-
+    console.log(allowedMenuTitles);
     // 閫氱敤杩囨护鍑芥暟
     const filterArray = (targetArray, specialMapping) => {
       const filtered = targetArray.filter(item => {
@@ -917,9 +1146,15 @@
     // 杩囨护鍚勪釜妯″潡
     filterArray(marketingItems);
     filterArray(purchaseItems);
+    filterArray(financeManagementItems);
+    filterArray(
+      archiveManagementItems,
+      menuMapping.archiveManagement.specialMapping
+    );
     filterArray(collaborationItems, menuMapping.collaboration.specialMapping);
     filterArray(safetyItems);
     filterArray(humanResourcesItems);
+    filterArray(warehouseLogisticsItems);
     filterArray(qualityItems);
     filterArray(productionItems);
     filterArray(equipmentItems);
@@ -928,11 +1163,23 @@
   // 妫�鏌ユā鍧楁槸鍚︽湁鑿滃崟椤归渶瑕佹樉绀�
   const hasMarketingItems = computed(() => marketingItems.length > 0);
   const hasPurchaseItems = computed(() => purchaseItems.length > 0);
+  const hasFinanceManagementItems = computed(
+    () => financeManagementItems.length > 0
+  );
+  const hasArchiveManagementItems = computed(
+    () => archiveManagementItems.length > 0
+  );
+  const hasAfterSalesServiceItems = computed(
+    () => afterSalesServiceItems.length > 0
+  );
   const hasCollaborationItems = computed(() => collaborationItems.length > 0);
   const hasSafetyItems = computed(() => safetyItems.length > 0);
   const hasQualityItems = computed(() => qualityItems.length > 0);
-  const hasHumanResourcesItems = computed(() => humanResourcesItems.length > 0);
-  const hasProductionItems = computed(() => productionItems.length > 0);
+  // const hasHumanResourcesItems = computed(() => humanResourcesItems.length > 0);
+  const hasWarehouseLogisticsItems = computed(
+    () => warehouseLogisticsItems.length > 0
+  );
+  // const hasProductionItems = computed(() => productionItems.length > 0);
   const hasEquipmentItems = computed(() => equipmentItems.length > 0);
 
   onMounted(() => {
@@ -1617,4 +1864,4 @@
       box-shadow: 0 0.375rem 1.25rem rgba(0, 0, 0, 0.4);
     }
   }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3