yyb
2026-05-22 552ec6b7d8ccc56c379da195fc6c9c74312b1070
src/pages/works.vue
@@ -1,42 +1,51 @@
<template>
  <view class="content">
    <!--    <view class="header-section">-->
    <!--      <view class="currentFactory">-->
    <!--        <up-text type="primary"-->
    <!--                 :text="userStore.currentFactoryName"-->
    <!--                 @click="show = true"-->
    <!--                 size="18"-->
    <!--                 class="factoryName"-->
    <!--                 suffixIcon="arrow-right"-->
    <!--                 :iconStyle="iconStyle"></up-text>-->
    <!--      </view>-->
    <!--      <up-picker :show="show"-->
    <!--                 :columns="factoryList"-->
    <!--                 @confirm="changeFactory"-->
    <!--                 @cancel="show = false"></up-picker>-->
    <!--    </view>-->
<!--    <view class="hero-section">-->
<!--      <view class="bg-img">-->
<!--        <view class="hero-content">-->
<!--          &lt;!&ndash; 预留:如后续需要可在此放 logo 或简短提示 &ndash;&gt;-->
<!--        </view>-->
<!--        <view class="hero-wave"></view>-->
<!--      </view>-->
<!--    </view>-->
    <!--      <view class="notice-section">-->
    <!--         <view class="notice">-->
    <!--            <view class="notice-content">-->
    <!--               <view class="notice-left">-->
    <!--                  <text class="notice-status">通知</text>-->
    <!--               </view>-->
    <!--               <view class="notice-separator"></view>-->
    <!--               <view class="notice-right">-->
    <!--                  <text class="notice-label">{{currentStatus}}</text>-->
    <!--                  <text class="notice-text">当日销售设备数:<text class="notice-number">{{number}}<text class="notice-unit">个</text></text></text>-->
    <!--               </view>-->
    <!--            </view>-->
    <!--         </view>-->
    <!--      </view>-->
    <!-- OA办公模块 -->
    <view class="common-module oa-module"
          v-if="hasOaItems">
      <view class="module-header">
        <view class="module-title-container">
          <text class="module-title">OA办公</text>
        </view>
      </view>
      <view class="module-content">
        <up-grid :border="false"
                 col="4">
          <up-grid-item v-for="(item, index) in oaItems"
                        :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="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">
@@ -52,14 +61,38 @@
                        :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 design-module"
          v-if="hasDesignItems">
      <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 designItems"
                        :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 purchase-module"
          v-if="hasPurchaseItems">
      <view class="module-header">
@@ -74,73 +107,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>
    <!-- &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>
            </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>
        </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>
              <image :src="item.icon"
                     class="item-icon"></image>
            </view>
            <text class="item-label">{{item.label}}</text>
          </up-grid-item>
@@ -162,7 +153,8 @@
                        :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>
@@ -184,7 +176,100 @@
                        :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 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>
    <!-- 档案管理模块 -->
    <view class="common-module archive-module"
          v-if="hasArchiveManagementItems">
      <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 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>
@@ -206,13 +291,38 @@
                        :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>
        </up-grid>
      </view>
    </view>
    <DownloadProgressMask />
  </view>
</template>
@@ -220,6 +330,8 @@
  import { ref, onMounted, nextTick, reactive, computed } from "vue";
  import { userLoginFacotryList } from "@/api/login";
  import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
  import DownloadProgressMask from "@/components/DownloadProgressMask.vue";
  import { OA_WORKBENCH_ITEMS } from "@/config/oaWorkbench.js";
  import modal from "@/plugins/modal";
  import useUserStore from "@/store/modules/user";
@@ -245,13 +357,68 @@
      currentStatus.value = statusList[statusIndex];
    }, 3000);
  };
  // 工艺设计功能数据
  const designItems = reactive([
    {
      icon: "/static/images/icon/jichucanshu.svg",
      label: "基础参数",
    },
    {
      icon: "/static/images/icon/gongxuguanli.svg",
      label: "工序管理",
    },
    {
      icon: "/static/images/icon/bom.svg",
      label: "BOM",
    },
    {
      icon: "/static/images/icon/gongyiluxian.svg",
      label: "工艺路线",
    },
  ]);
  // 营销管理功能数据
  const marketingItems = reactive([
    {
      icon: "/static/images/icon/kehudangan.svg",
      label: "客户档案",
    },
    {
      icon: "/static/images/icon/xiaoshoubaojia.svg",
      label: "销售报价",
    },
    {
      icon: "/static/images/icon/xiaoshoutaizhang.svg",
      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: "采购退货",
    },
    {
      icon: "/static/images/icon/gongyingshangdangan.svg",
      label: "供应商档案",
    },
  ]);
  // 财务管理功能数据
  const financeManagementItems = reactive([
    {
      icon: "/static/images/icon/kaipiaodengji.svg",
      label: "开票登记",
@@ -269,18 +436,6 @@
      label: "回款流水",
    },
    {
      icon: "/static/images/icon/kehuwanglai.svg",
      label: "客户往来",
    },
  ]);
  // 采购管理功能数据
  const purchaseItems = reactive([
    {
      icon: "/static/images/icon/caigoutaizhang.svg",
      label: "采购台账",
    },
    {
      icon: "/static/images/icon/laipiaodengji.svg",
      label: "来票登记",
    },
@@ -289,7 +444,7 @@
      label: "来票台账",
    },
    {
      icon: "/static/images/icon/fukuanjingji.svg",
      icon: "/static/images/icon/fukuandengji.svg",
      label: "付款登记",
    },
    {
@@ -297,126 +452,185 @@
      label: "付款流水",
    },
    {
      icon: "/static/images/icon/gongyingshangwanglai.svg",
      label: "供应商往来",
      icon: "/static/images/icon/shouruguanli.svg",
      label: "收入管理",
    },
    {
      icon: "/static/images/icon/zhichuguanli.svg",
      label: "支出管理",
    },
    {
      icon: "/static/images/icon/jiekuanguanli.svg",
      label: "借款管理",
    },
  ]);
  // 档案管理功能数据
  const archiveManagementItems = reactive([
    {
      icon: "/static/images/icon/jieyuedengji.svg",
      label: "借阅登记",
    },
    {
      icon: "/static/images/icon/guihuandengji.svg",
      label: "归还登记",
    },
  ]);
  // 售后服务功能数据
  const afterSalesServiceItems = reactive([
    {
      icon: "/static/images/icon/fankuidengji.svg",
      label: "反馈登记",
    },
    {
      icon: "/static/images/icon/shouhouchuli.svg",
      label: "售后处理",
    },
  ]);
  // 仓储物流功能数据
  const warehouseLogisticsItems = reactive([
    {
      icon: "/static/images/icon/kucunguanli.svg",
      label: "库存管理",
    },
  ]);
  const humanResourcesItems = reactive([
    {
      icon: "/static/images/icon/caigoutaizhang.svg",
      icon: "/static/images/icon/dakaqiandao.svg",
      label: "打卡签到",
    },
    {
      icon: "/static/images/icon/caigoutaizhang.svg",
      icon: "/static/images/icon/renyuanxinzi.svg",
      label: "人员薪资",
    },
    {
      icon: "/static/images/icon/caigoutaizhang.svg",
      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: "出厂检验",
    },
  ]);
  const safetyItems = reactive([
    {
      icon: "/static/images/icon/caigoutaizhang.svg",
      icon: "/static/images/icon/guichengzizhi.svg",
      label: "规程与资质",
    },
    {
      icon: "/static/images/icon/caigoutaizhang.svg",
      icon: "/static/images/icon/weixianyuan.svg",
      label: "危险源台账",
    },
    {
      icon: "/static/images/icon/caigoutaizhang.svg",
      icon: "/static/images/icon/weixianzuoye.svg",
      label: "危险作业审批",
    },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.svg",
      icon: "/static/images/icon/yinhuanpaicha.svg",
      label: "隐患排查上报",
    },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.svg",
      icon: "/static/images/icon/weixianwuliao.svg",
      label: "危险物料管控",
    },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.svg",
      icon: "/static/images/icon/yingjiyuan.svg",
      label: "应急预案查阅",
    },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.svg",
      icon: "/static/images/icon/shigushangbao.svg",
      label: "事故上报记录",
    },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.svg",
      icon: "/static/images/icon/anquanpeixun.svg",
      label: "安全培训考核",
    },
  ]);
  // OA办公功能数据(纯前端配置,不参与后端权限过滤)
  const oaItems = reactive(
    OA_WORKBENCH_ITEMS.map(item => ({ ...item }))
  );
  // 协同办公功能数据
  const collaborationItems = reactive([
    {
      icon: "/static/images/icon/baoxiaoguanli.svg",
      icon: "/static/images/icon/xietongshenpi.svg",
      label: "协同审批",
    },
    {
      icon: "/static/images/icon/huiyiliebiao@2x.svg",
      icon: "/static/images/icon/huiyiguanli.svg",
      label: "会议管理",
    },
    {
      icon: "/static/images/icon/tongzhigonggao@2x.svg",
      icon: "/static/images/icon/tongzhigonggao.svg",
      label: "通知公告",
    },
    {
      icon: "/static/images/icon/zhishiku@2x.svg",
      icon: "/static/images/icon/zhishiku.svg",
      label: "知识库",
    },
    {
      icon: "/static/images/icon/yongyinguanli@2x.svg",
      icon: "/static/images/icon/yongyinguanli.svg",
      label: "用印管理",
    },
    {
      icon: "/static/images/icon/guizhangzhidu@2x.svg",
      icon: "/static/images/icon/guizhangzhidu.svg",
      label: "规章制度",
    },
    {
      icon: "/static/images/icon/kehubaifang@2x.svg",
      icon: "/static/images/icon/kehubaifang.svg",
      label: "客户拜访",
    },
  ]);
  // 生产管控功能数据
  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@2x.svg",
      icon: "/static/images/icon/shengchanjihua.svg",
      label: "主生产计划",
    },
    {
      icon: "/static/images/icon/shengchandingdan.svg",
      label: "生产订单",
    },
    {
      icon: "/static/images/icon/shengchanzhuisu.svg",
      label: "生产追溯",
    },
    {
      icon: "/static/images/icon/shengchanshikuang.svg",
      label: "工序生产实况",
    },
    {
      icon: "/static/images/icon/shengchanpaichan.svg",
      label: "生产排产",
    },
    {
      icon: "/static/images/icon/shengchanbaogong.svg",
      label: "生产报工",
    },
    // {
    //   icon: "/static/images/icon/shengchanhesuan@2x.svg",
    //   label: "生产核算",
    // },
    {
      icon: "/static/images/icon/baogongtaizhang.svg",
      label: "报工台账",
    },
    {
      icon: "/static/images/icon/shengchanhesuan.svg",
      label: "生产核算",
    },
  ]);
  // 设备管理功能数据
@@ -426,30 +640,44 @@
    //    label: '设备台账',
    // },
    {
      icon: "/static/images/icon/shbeibaoxiu@2x.svg",
      icon: "/static/images/icon/yunxingguanli.svg",
      label: "运行管理",
    },
    {
      icon: "/static/images/icon/shbeibaoxiu@2x.svg",
      icon: "/static/images/icon/shebeibaoxiu.svg",
      label: "设备报修",
    },
    {
      icon: "/static/images/icon/shbeibaoyang@2x.svg",
      icon: "/static/images/icon/shebeibaoyang.svg",
      label: "设备保养",
    },
    {
      icon: "/static/images/icon/xunjianshangchuan@2x.svg",
      icon: "/static/images/icon/xunjianshangchuan.svg",
      label: "设备巡检",
    },
  ]);
  // 处理常用功能点击
  const handleCommonItemClick = item => {
    if (item.path) {
      uni.navigateTo({ url: item.path });
      return;
    }
    // 根据不同的功能项进行跳转
    switch (item.label) {
      case "客户档案":
        uni.navigateTo({
          url: "/pages/basicData/customerFile/index",
        });
        break;
      case "销售台账":
        uni.navigateTo({
          url: "/pages/sales/salesAccount/index",
        });
        break;
      case "销售报价":
        uni.navigateTo({
          url: "/pages/sales/salesQuotation/index",
        });
        break;
      case "开票登记":
@@ -502,9 +730,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 "公出管理":
@@ -622,17 +875,47 @@
          url: "/pages/productionManagement/productionDispatching/index",
        });
        break;
      case "工序排产":
      case "工艺路线":
        uni.navigateTo({
          url: "/pages/productionManagement/processScheduling/index",
          url: "/pages/productionManagement/processRoute/index",
        });
        break;
      case "生产工单":
        uni.navigateTo({
          url: "/pages/productionManagement/workOrder/index",
        });
        break;
      case "主生产计划":
        uni.navigateTo({
          url: "/pages/productionManagement/mainProductionPlan/index",
        });
        break;
      case "生产排产":
        uni.navigateTo({
          url: "/pages/productionManagement/productionScheduling/index",
        });
        break;
      case "生产报工":
        getcode();
        break;
      case "报工台账":
        uni.navigateTo({
          url: "/pages/productionManagement/productionReporting/ledger",
        });
        break;
      case "生产核算":
        uni.navigateTo({
          url: "/pages/productionManagement/productionAccounting/index",
        });
        break;
      case "生产追溯":
        uni.navigateTo({
          url: "/pages/productionManagement/productionTraceability/index",
        });
        break;
      case "工序生产实况":
        uni.navigateTo({
          url: "/pages/productionManagement/processStatistics/index",
        });
        break;
      case "设备台账":
@@ -750,6 +1033,46 @@
          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;
      case "借阅登记":
        uni.navigateTo({
          url: "/pages/fileManagement/borrow/index",
        });
        break;
      case "归还登记":
        uni.navigateTo({
          url: "/pages/fileManagement/return/index",
        });
        break;
      case "基础参数":
        uni.navigateTo({
          url: "/pages/productionDesign/basicParameters/index",
        });
        break;
      case "工序管理":
        uni.navigateTo({
          url: "/pages/productionDesign/processManagement/index",
        });
        break;
      case "BOM":
        uni.navigateTo({
          url: "/pages/productionDesign/bom/index",
        });
        break;
      default:
        uni.showToast({
          title: `点击了${item.label}`,
@@ -781,7 +1104,7 @@
        factoryList.value = [];
      });
  }
  const getcode = () => {
  const getcode = async () => {
    uni.scanCode({
      success: async res => {
        // 解析二维码内容
@@ -806,14 +1129,12 @@
              const workData = workRes.data;
              console.log("工单数据:", workData);
              orderRow = JSON.stringify({
                id: workData.id || workOrderId,
                planQuantity: workData.planQuantity - workData.completeQuantity,
                productProcessRouteItemId:
                  workData.productProcessRouteItemId ||
                  workData.产品工艺路线项ID ||
                  "",
              });
              if (workData.endOrder === true) {
                modal.msgError("该订单已结束,无法报工");
                return;
              }
              orderRow = JSON.stringify(workData);
              console.log("构造的orderRow:", orderRow);
            } else {
@@ -921,14 +1242,13 @@
    // 收集所有有权限的菜单标题(根据 meta.title)
    const allowedMenuTitles = new Set();
    const alwaysShowTitles = new Set(["采购退货单", "供应商管理"]);
    const collectMenuTitles = routes => {
      if (!Array.isArray(routes)) return;
      routes.forEach(route => {
        // 收集当前路由的标题
        if (route.meta && route.meta.title) {
          allowedMenuTitles.add(route.meta.title);
        }
        // 递归处理子路由
        if (route.children && route.children.length > 0) {
          collectMenuTitles(route.children);
        }
@@ -936,141 +1256,66 @@
    };
    collectMenuTitles(routers);
    // 过滤营销管理菜单
    const originalMarketing = [
      { icon: "/static/images/icon/xiaoshoutaizhang.svg", label: "销售台账" },
      { icon: "/static/images/icon/kaipiaodengji.svg", label: "开票登记" },
      { icon: "/static/images/icon/kaipiaotaizhang.svg", label: "开票台账" },
      { icon: "/static/images/icon/huikuandengji.svg", label: "回款登记" },
      { icon: "/static/images/icon/huikuanliushui.svg", label: "回款流水" },
      { icon: "/static/images/icon/kehuwanglai.svg", label: "客户往来" },
    ];
    const filteredMarketing = originalMarketing.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    marketingItems.splice(0, marketingItems.length, ...filteredMarketing);
    // 过滤协同办公菜单
    const originalCollaboration = [
      { icon: "/static/images/icon/baoxiaoguanli.svg", label: "协同审批" },
      { icon: "/static/images/icon/huiyiliebiao@2x.svg", label: "会议管理" },
      { icon: "/static/images/icon/tongzhigonggao@2x.svg", label: "通知公告" },
      { icon: "/static/images/icon/zhishiku@2x.svg", label: "知识库" },
      { icon: "/static/images/icon/yongyinguanli@2x.svg", label: "用印管理" },
      { icon: "/static/images/icon/guizhangzhidu@2x.svg", label: "规章制度" },
      { icon: "/static/images/icon/kehubaifang@2x.svg", label: "客户拜访" },
    ];
    const filteredCollaboration = originalCollaboration.filter(item => {
      // 处理标题不完全匹配的情况
      let matched = allowedMenuTitles.has(item.label);
      // 特殊处理:规章制度 -> 规章制度管理
      if (!matched && item.label === "规章制度") {
        matched = allowedMenuTitles.has("规章制度管理");
      }
      return matched;
    });
    collaborationItems.splice(
      0,
      collaborationItems.length,
      ...filteredCollaboration
    );
    // 过滤采购管理菜单
    const originalPurchase = [
      { icon: "/static/images/icon/caigoutaizhang.svg", label: "采购台账" },
      { icon: "/static/images/icon/laipiaodengji.svg", label: "来票登记" },
      { icon: "/static/images/icon/laipiaotaizhang.svg", label: "来票台账" },
      { icon: "/static/images/icon/fukuanjingji.svg", label: "付款登记" },
      { icon: "/static/images/icon/fukuanliushui.svg", label: "付款流水" },
      {
        icon: "/static/images/icon/gongyingshangwanglai@2x.svg",
        label: "供应商往来",
    // 定义菜单配置映射
    const menuMapping = {
      collaboration: {
        target: collaborationItems,
        specialMapping: { 规章制度: "规章制度管理" },
      },
    ];
    const filteredPurchase = originalPurchase.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    purchaseItems.splice(0, purchaseItems.length, ...filteredPurchase);
      purchase: { specialMapping: { 供应商档案: "供应商管理" } },
    };
    console.log(allowedMenuTitles);
    // 通用过滤函数
    const filterArray = (targetArray, specialMapping) => {
      const filtered = targetArray.filter(item => {
        let matched = allowedMenuTitles.has(item.label);
        if (specialMapping && !matched && specialMapping[item.label]) {
          matched = allowedMenuTitles.has(specialMapping[item.label]);
        }
        return matched;
      });
      targetArray.splice(0, targetArray.length, ...filtered);
    };
    // 过滤安全生产菜单
    const originalSafety = [
      { 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/guzhangfenxi@2x.svg", label: "隐患排查上报" },
      { icon: "/static/images/icon/guzhangfenxi@2x.svg", label: "危险物料管控" },
      { icon: "/static/images/icon/guzhangfenxi@2x.svg", label: "应急预案查阅" },
      { icon: "/static/images/icon/guzhangfenxi@2x.svg", label: "事故上报记录" },
      { icon: "/static/images/icon/guzhangfenxi@2x.svg", label: "安全培训考核" },
    ];
    const filteredSafety = originalSafety.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    safetyItems.splice(0, safetyItems.length, ...filteredSafety);
    // 过滤人力资源菜单
    const originalHumanResources = [
      { icon: "/static/images/icon/caigoutaizhang.svg", label: "打卡签到" },
      { icon: "/static/images/icon/caigoutaizhang.svg", label: "人员薪资" },
      { icon: "/static/images/icon/caigoutaizhang.svg", label: "合同管理" },
    ];
    const filteredHumanResources = originalHumanResources.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    humanResourcesItems.splice(
      0,
      humanResourcesItems.length,
      ...filteredHumanResources
    );
    // 过滤质量管理菜单
    const originalQuality = [
      { icon: "/static/images/icon/caigoutaizhang.svg", label: "原材料检验" },
      { icon: "/static/images/icon/caigoutaizhang.svg", label: "过程检验" },
      { icon: "/static/images/icon/caigoutaizhang.svg", label: "出厂检验" },
    ];
    const filteredQuality = originalQuality.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    qualityItems.splice(0, qualityItems.length, ...filteredQuality);
    // 过滤生产管控菜单
    const originalProduction = [
      {
        icon: "/static/images/icon/shengchanbaogong@2x.svg",
        label: "生产报工",
      },
    ];
    const filteredProduction = originalProduction.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    productionItems.splice(0, productionItems.length, ...filteredProduction);
    // 过滤设备管理菜单
    const originalEquipment = [
      { icon: "/static/images/icon/shbeibaoxiu@2x.svg", label: "运行管理" },
      { icon: "/static/images/icon/shbeibaoxiu@2x.svg", label: "设备报修" },
      { icon: "/static/images/icon/shbeibaoyang@2x.svg", label: "设备保养" },
      { icon: "/static/images/icon/xunjianshangchuan@2x.svg", label: "设备巡检" },
    ];
    const filteredEquipment = originalEquipment.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    equipmentItems.splice(0, equipmentItems.length, ...filteredEquipment);
    // 过滤各个模块
    filterArray(marketingItems);
    filterArray(designItems);
    filterArray(purchaseItems, menuMapping.purchase.specialMapping);
    filterArray(financeManagementItems);
    filterArray(collaborationItems, menuMapping.collaboration.specialMapping);
    filterArray(safetyItems);
    filterArray(humanResourcesItems);
    filterArray(warehouseLogisticsItems);
    filterArray(qualityItems);
    filterArray(productionItems);
    filterArray(equipmentItems);
    filterArray(archiveManagementItems);
    filterArray(afterSalesServiceItems);
  };
  // 检查模块是否有菜单项需要显示
  const hasMarketingItems = computed(() => marketingItems.length > 0);
  const hasDesignItems = computed(() => designItems.length > 0);
  const hasPurchaseItems = computed(() => purchaseItems.length > 0);
  const hasFinanceManagementItems = computed(
    () => financeManagementItems.length > 0
  );
  const hasAfterSalesServiceItems = computed(
    () => afterSalesServiceItems.length > 0
  );
  const hasOaItems = computed(() => oaItems.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 hasWarehouseLogisticsItems = computed(
    () => warehouseLogisticsItems.length > 0
  );
  const hasProductionItems = computed(() => productionItems.length > 0);
  const hasEquipmentItems = computed(() => equipmentItems.length > 0);
  const hasArchiveManagementItems = computed(
    () => archiveManagementItems.length > 0
  );
  onMounted(() => {
    // 每次进入首页都强制刷新用户信息和路由权限,不做本地缓存判断
@@ -1437,6 +1682,10 @@
    --module-color: #4caf50;
  }
  .oa-module {
    --module-color: #673ab7;
  }
  .production-module {
    --module-color: #ff9800;
  }
@@ -1679,6 +1928,10 @@
    --module-color: #4caf50;
  }
  .oa-module {
    --module-color: #673ab7;
  }
  .production-module {
    --module-color: #ff9800;
  }
@@ -1754,4 +2007,4 @@
      box-shadow: 0 0.375rem 1.25rem rgba(0, 0, 0, 0.4);
    }
  }
</style>
</style>