gaoluyang
2026-05-20 de4ac959d99138074276563d6d4ca44d76b17705
src/pages/works.vue
@@ -15,7 +15,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>
@@ -37,7 +38,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 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>
@@ -59,7 +84,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>
@@ -81,7 +107,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>
@@ -125,7 +152,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>
@@ -147,7 +175,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>
@@ -191,7 +220,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>
@@ -213,7 +243,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>
@@ -249,16 +280,13 @@
<script setup>
  import { ref, onMounted, nextTick, reactive, computed } from "vue";
  import { onShow } from "@dcloudio/uni-app";
  import { userLoginFacotryList } from "@/api/login";
  import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
  import { createVersionUpgradeChecker } from "@/utils/versionUpgrade";
  import DownloadProgressMask from "@/components/DownloadProgressMask.vue";
  import modal from "@/plugins/modal";
  import useUserStore from "@/store/modules/user";
  const userStore = useUserStore();
  const { triggerVersionCheck } = createVersionUpgradeChecker({ logPrefix: "[version-works]" });
  const show = ref(false);
  const factoryList = ref([]);
  const factoryListTem = ref([]);
@@ -280,12 +308,31 @@
      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: "客户档案(私海)",
      label: "客户档案",
    },
    {
      icon: "/static/images/icon/xiaoshoubaojia.svg",
@@ -312,12 +359,12 @@
      label: "供应商往来",
    },
    {
      icon: "/static/images/icon/gongyingshangdangan.svg",
      label: "供应商档案",
    },
    {
      icon: "/static/images/icon/caigouguanli.svg",
      label: "采购退货",
    },
    {
      icon: "/static/images/icon/gongyingshangdangan.svg",
      label: "供应商档案",
    },
  ]);
@@ -369,6 +416,18 @@
    },
  ]);
  // 档案管理功能数据
  const archiveManagementItems = reactive([
    {
      icon: "/static/images/icon/jieyuedengji.svg",
      label: "借阅登记",
    },
    {
      icon: "/static/images/icon/guihuandengji.svg",
      label: "归还登记",
    },
  ]);
  // 售后服务功能数据
  const afterSalesServiceItems = reactive([
    {
@@ -384,7 +443,7 @@
  // 仓储物流功能数据
  const warehouseLogisticsItems = reactive([
    {
      icon: "/static/images/icon/xiaoshoutaizhang.svg",
      icon: "/static/images/icon/kucunguanli.svg",
      label: "库存管理",
    },
  ]);
@@ -485,30 +544,39 @@
  // 生产管控功能数据
  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/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/shengchanbaogong.svg",
      label: "生产工单",
      icon: "/static/images/icon/baogongtaizhang.svg",
      label: "报工台账",
    },
    // {
    //   icon: "/static/images/icon/shengchanhesuan@2x.svg",
    //   label: "生产核算",
    // },
    {
      icon: "/static/images/icon/shengchanhesuan.svg",
      label: "生产核算",
    },
  ]);
  // 设备管理功能数据
@@ -539,7 +607,7 @@
  const handleCommonItemClick = item => {
    // 根据不同的功能项进行跳转
    switch (item.label) {
      case "客户档案(私海)":
      case "客户档案":
        uni.navigateTo({
          url: "/pages/basicData/customerFile/index",
        });
@@ -749,9 +817,9 @@
          url: "/pages/productionManagement/productionDispatching/index",
        });
        break;
      case "工序排产":
      case "工艺路线":
        uni.navigateTo({
          url: "/pages/productionManagement/processScheduling/index",
          url: "/pages/productionManagement/processRoute/index",
        });
        break;
      case "生产工单":
@@ -759,12 +827,37 @@
          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 "设备台账":
@@ -897,6 +990,31 @@
          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}`,
@@ -928,7 +1046,7 @@
        factoryList.value = [];
      });
  }
  const getcode = () => {
  const getcode = async () => {
    uni.scanCode({
      success: async res => {
        // 解析二维码内容
@@ -953,14 +1071,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 {
@@ -1084,10 +1200,13 @@
    // 定义菜单配置映射
    const menuMapping = {
      purchase: { target: purchaseItems, specialMapping: { "供应商档案": "供应商管理" } },
      collaboration: { target: collaborationItems, specialMapping: { "规章制度": "规章制度管理" } },
      collaboration: {
        target: collaborationItems,
        specialMapping: { 规章制度: "规章制度管理" },
      },
      purchase: { specialMapping: { 供应商档案: "供应商管理" } },
    };
    console.log(allowedMenuTitles)
    console.log(allowedMenuTitles);
    // 通用过滤函数
    const filterArray = (targetArray, specialMapping) => {
      const filtered = targetArray.filter(item => {
@@ -1102,6 +1221,7 @@
    // 过滤各个模块
    filterArray(marketingItems);
    filterArray(designItems);
    filterArray(purchaseItems, menuMapping.purchase.specialMapping);
    filterArray(financeManagementItems);
    filterArray(collaborationItems, menuMapping.collaboration.specialMapping);
@@ -1111,23 +1231,34 @@
    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 hasFinanceManagementItems = computed(
    () => financeManagementItems.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 hasWarehouseLogisticsItems = computed(() => warehouseLogisticsItems.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(() => {
    triggerVersionCheck("onMounted");
    // 每次进入首页都强制刷新用户信息和路由权限,不做本地缓存判断
    userStore.getInfo().then(() => {
      userStore
@@ -1142,10 +1273,6 @@
    getUserLoginFacotryList();
    // 启动通知状态定时器
    startStatusTimer();
  });
  onShow(() => {
    triggerVersionCheck("onShow");
  });
</script>