ZN
98 分钟以前 c4f935e060c15e3c7fd56d75a5274b69f45abeb8
src/pages/index.vue
@@ -212,6 +212,81 @@
        </up-grid>
      </view>
    </view>
    <!-- 仓储物流模块 -->
    <view class="common-module warehouse-logistics-module"
          v-if="hasWarehouseLogisticsItems">
      <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 warehouseLogisticsItems"
                        :key="index"
                        @click="handleCommonItemClick(item)">
            <view class="icon-container"
                  :style="{ background: item.bgColor }">
              <up-icon :name="item.icon"
                       :size="58"
                       color="#ffffff"></up-icon>
            </view>
            <text class="item-label">{{item.label}}</text>
          </up-grid-item>
        </up-grid>
      </view>
    </view>
    <!-- 耗材物料模块 -->
    <view class="common-module material-module"
          v-if="hasMaterialItems">
      <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 materialItems"
                        :key="index"
                        @click="handleCommonItemClick(item)">
            <view class="icon-container"
                  :style="{ background: item.bgColor }">
              <up-icon :name="item.icon"
                       :size="58"
                       color="#ffffff"></up-icon>
            </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"
                  :style="{ background: item.bgColor }">
              <up-icon :name="item.icon"
                       :size="58"
                       color="#ffffff"></up-icon>
            </view>
            <text class="item-label">{{item.label}}</text>
          </up-grid-item>
        </up-grid>
      </view>
    </view>
  </view>
</template>
@@ -309,6 +384,10 @@
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "人员薪资",
    },
    {
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "合同管理",
    },
  ]);
  const safetyItems = reactive([
    {
@@ -323,10 +402,10 @@
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "危险作业审批",
    },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.png",
      label: "隐患排查上报",
    },
    // {
    //   icon: "/static/images/icon/guzhangfenxi@2x.png",
    //   label: "隐患排查上报",
    // },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.png",
      label: "危险物料管控",
@@ -335,13 +414,29 @@
      icon: "/static/images/icon/guzhangfenxi@2x.png",
      label: "应急预案查阅",
    },
    // {
    //   icon: "/static/images/icon/guzhangfenxi@2x.png",
    //   label: "事故上报记录",
    // },
    // {
    //   icon: "/static/images/icon/guzhangfenxi@2x.png",
    //   label: "安全培训考核",
    // },
  ]);
  // 质量管理
  const qualityItems = reactive([
    {
      icon: "/static/images/icon/guzhangfenxi@2x.png",
      label: "事故上报记录",
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "原材料检验",
    },
    {
      icon: "/static/images/icon/guzhangfenxi@2x.png",
      label: "安全培训考核",
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "过程检验",
    },
    {
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "出厂检验",
    },
  ]);
  // 协同办公功能数据
@@ -350,10 +445,10 @@
      icon: "/static/images/icon/baoxiaoguanli.png",
      label: "协同审批",
    },
    {
      icon: "/static/images/icon/huiyiliebiao@2x.png",
      label: "会议管理",
    },
    // {
    //   icon: "/static/images/icon/huiyiliebiao@2x.png",
    //   label: "会议管理",
    // },
    {
      icon: "/static/images/icon/tongzhigonggao@2x.png",
      label: "通知公告",
@@ -362,18 +457,18 @@
      icon: "/static/images/icon/zhishiku@2x.png",
      label: "知识库",
    },
    {
      icon: "/static/images/icon/yongyinguanli@2x.png",
      label: "用印管理",
    },
    // {
    //   icon: "/static/images/icon/yongyinguanli@2x.png",
    //   label: "用印管理",
    // },
    {
      icon: "/static/images/icon/guizhangzhidu@2x.png",
      label: "规章制度",
    },
    {
      icon: "/static/images/icon/kehubaifang@2x.png",
      label: "客户拜访",
    },
    // {
    //   icon: "/static/images/icon/kehubaifang@2x.png",
    //   label: "客户拜访",
    // },
  ]);
  // 生产管控功能数据
@@ -393,10 +488,14 @@
    //   label: "工序排产",
    //   bgColor: "#E91E63",
    // },
    // {
    //   icon: "/static/images/icon/shengchanbaogong@2x.png",
    //   label: "生产报工",
    //   bgColor: "#673AB7",
    // },
    {
      icon: "/static/images/icon/shengchanbaogong@2x.png",
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "生产报工",
      bgColor: "#673AB7",
    },
    // {
    //   icon: "/static/images/icon/shengchanhesuan@2x.png",
@@ -425,7 +524,54 @@
    },
    {
      icon: "/static/images/icon/xunjianshangchuan@2x.png",
      label: "巡检上传",
      label: "巡检任务",
    },
    {
      icon: "/static/images/icon/xunjianshangchuan@2x.png",
      label: "巡检管理",
    },
  ]);
  // 仓储物流功能数据
  const warehouseLogisticsItems = reactive([
    {
      icon: "/static/images/icon/shengchanhesuan@2x.png",
      label: "入库管理",
    },
    {
      icon: "/static/images/icon/shebeitaizhang@2x.png",
      label: "出库台账",
    },
    {
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "库存管理",
    },
    {
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "库存报表",
    },
  ]);
  // 耗材物料功能数据
  const materialItems = reactive([
    {
      icon: "/static/images/icon/shengchanhesuan@2x.png",
      label: "入库管理",
      module: "material",
    },
    {
      icon: "/static/images/icon/shebeitaizhang@2x.png",
      label: "出库台账",
      module: "material",
    },
    {
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "库存管理",
      module: "material",
    },
    {
      icon: "/static/images/icon/caigoutaizhang@2x.png",
      label: "库存报表",
      module: "material",
    },
  ]);
@@ -613,8 +759,13 @@
          url: "/pages/productionManagement/processScheduling/index",
        });
        break;
      // case "生产报工":
      //   getcode();
      //   break;
      case "生产报工":
        getcode();
        uni.navigateTo({
          url: "/pages/productionManagement/workOrder/index",
        });
        break;
      case "生产核算":
        uni.navigateTo({
@@ -636,14 +787,24 @@
          url: "/pages/equipmentManagement/repair/index",
        });
        break;
      case "设备保养任务":
        uni.navigateTo({
          url: "/pages/equipmentManagement/upkeepTask/index",
        });
        break;
      case "设备保养":
        uni.navigateTo({
          url: "/pages/equipmentManagement/upkeep/index",
        });
        break;
      case "巡检上传":
      case "巡检管理":
        uni.navigateTo({
          url: "/pages/inspectionUpload/index",
        });
        break;
      case "巡检任务":
        uni.navigateTo({
          url: "/pages/inspectionManagement/index",
        });
        break;
      case "分析追溯":
@@ -714,6 +875,93 @@
      case "人员薪资":
        uni.navigateTo({
          url: "/pages/humanResources/monthlyStatistics/index",
        });
        break;
      case "合同管理":
        uni.navigateTo({
          url: "/pages/humanResources/contractManagement/index",
        });
        break;
      case "入库管理":
        uni.navigateTo({
          url:
            item.module === "material"
              ? "/pages/consumablesLogistics/receiptManagement/index"
              : "/pages/inventoryManagement/receiptManagement/index",
        });
        break;
      case "出库台账":
        uni.navigateTo({
          url:
            item.module === "material"
              ? "/pages/consumablesLogistics/dispatchLog/index"
              : "/pages/inventoryManagement/dispatchLog/index",
        });
        break;
      case "库存管理":
        uni.navigateTo({
          url:
            item.module === "material"
              ? "/pages/consumablesLogistics/stockManagement/index"
              : "/pages/inventoryManagement/stockManagement/index",
        });
        break;
      case "库存报表":
        uni.navigateTo({
          url:
            item.module === "material"
              ? "/pages/consumablesLogistics/stockReport/index"
              : "/pages/inventoryManagement/stockReport/index",
        });
        break;
        case "原材料检验":
        uni.navigateTo({
          url: "/pages/qualityManagement/materialInspection/index",
        });
        break;
      case "过程检验":
        uni.navigateTo({
          url: "/pages/qualityManagement/processInspection/index",
        });
        break;
      case "出厂检验":
        uni.navigateTo({
          url: "/pages/qualityManagement/finalInspection/index",
        });
        break;
      case "检测项维护":
        uni.navigateTo({
          url: "/pages/qualityManagement/InspectItem/index",
        });
        break;
      case "指标维护":
        uni.navigateTo({
          url: "/pages/qualityManagement/metricMaintenance/index",
        });
        break;
      case "指标绑定":
        uni.navigateTo({
          url: "/pages/qualityManagement/metricBinding/index",
        });
        break;
      case "不合格品管理":
        uni.navigateTo({
          url: "/pages/qualityManagement/nonconformingManagement/index",
        });
        break;
      case "原材料":
        uni.navigateTo({
          url: "/pages/qualityManagement/rawMaterial/index",
        });
        break;
      case "近效期退货":
        uni.navigateTo({
          url: "/pages/qualityManagement/nearExpiryReturn/index",
        });
        break;
      case "质量看板":
        uni.navigateTo({
          url: "/pages/qualityManagement/visualization/qualityDashboard",
        });
        break;
      default:
@@ -958,6 +1206,42 @@
    });
    purchaseItems.splice(0, purchaseItems.length, ...filteredPurchase);
    // 过滤质量管理菜单
    const originalQuality = [
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "原材料检验" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "过程检验" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "出厂检验" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "检测项维护" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "指标维护" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "指标绑定" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "不合格品管理" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "原材料" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "近效期退货" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "质量看板" },
    ];
    const hasAllowedTitleLike = label => {
      if (allowedMenuTitles.has(label)) return true;
      return Array.from(allowedMenuTitles).some(
        title =>
          typeof title === "string" &&
          (title.includes(label) || label.includes(title))
      );
    };
    const filteredQuality = originalQuality.filter(item => {
      return hasAllowedTitleLike(item.label);
    });
    const hasQualityModulePermission = Array.from(allowedMenuTitles).some(
      title =>
        typeof title === "string" &&
        (title.includes("质量") || title.includes("检验"))
    );
    const finalQualityItems = filteredQuality.length
      ? filteredQuality
      : hasQualityModulePermission
      ? originalQuality
      : [];
    qualityItems.splice(0, qualityItems.length, ...finalQualityItems);
    // 过滤安全生产菜单
    const originalSafety = [
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "规程与资质" },
@@ -981,6 +1265,7 @@
    const originalHumanResources = [
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "打卡签到" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "人员薪资" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "合同管理" },
    ];
    const filteredHumanResources = originalHumanResources.filter(item => {
      return allowedMenuTitles.has(item.label);
@@ -993,10 +1278,14 @@
    // 过滤生产管控菜单
    const originalProduction = [
      // {
      //   icon: "/static/images/icon/shengchanbaogong@2x.png",
      //   label: "生产报工",
      //   bgColor: "#673AB7",
      // },
      {
        icon: "/static/images/icon/shengchanbaogong@2x.png",
        icon: "/static/images/icon/caigoutaizhang@2x.png",
        label: "生产报工",
        bgColor: "#673AB7",
      },
    ];
    const filteredProduction = originalProduction.filter(item => {
@@ -1008,13 +1297,80 @@
    const originalEquipment = [
      { icon: "/static/images/icon/shbeibaoxiu@2x.png", label: "运行管理" },
      { icon: "/static/images/icon/shbeibaoxiu@2x.png", label: "设备报修" },
      { icon: "/static/images/icon/shbeibaoyang@2x.png", label: "设备保养任务" },
      { icon: "/static/images/icon/shbeibaoyang@2x.png", label: "设备保养" },
      { icon: "/static/images/icon/xunjianshangchuan@2x.png", label: "巡检上传" },
      { icon: "/static/images/icon/xunjianshangchuan@2x.png", label: "巡检任务" },
      { icon: "/static/images/icon/xunjianshangchuan@2x.png", label: "巡检管理" },
    ];
    const filteredEquipment = originalEquipment.filter(item => {
      return allowedMenuTitles.has(item.label);
    });
    if (filteredEquipment.some(i => i.label === "设备保养")) {
      const upkeepTask = originalEquipment.find(i => i.label === "设备保养任务");
      if (upkeepTask && !filteredEquipment.some(i => i.label === "设备保养任务")) {
        const upkeepIndex = filteredEquipment.findIndex(i => i.label === "设备保养");
        filteredEquipment.splice(upkeepIndex, 0, upkeepTask);
      }
    }
    if (filteredEquipment.some(i => i.label === "巡检管理")) {
      const task = originalEquipment.find(i => i.label === "巡检任务");
      if (task && !filteredEquipment.some(i => i.label === "巡检任务")) {
        const manageIndex = filteredEquipment.findIndex(i => i.label === "巡检管理");
        filteredEquipment.splice(manageIndex, 0, task);
      }
    }
    equipmentItems.splice(0, equipmentItems.length, ...filteredEquipment);
    // 过滤仓储物流菜单
    const originalWarehouseLogistics = [
      {
        icon: "/static/images/icon/shengchanhesuan@2x.png",
        label: "入库管理",
        module: "warehouse",
      },
      {
        icon: "/static/images/icon/shebeitaizhang@2x.png",
        label: "出库台账",
        module: "warehouse",
      },
      {
        icon: "/static/images/icon/guzhangfenxi@2x.png",
        label: "库存管理",
        module: "warehouse",
      },
      {
        icon: "/static/images/icon/caigoutaizhang@2x.png",
        label: "库存报表",
        module: "warehouse",
      },
    ];
    const filteredWarehouseLogistics = originalWarehouseLogistics.filter(
      item => allowedMenuTitles.has(item.label)
    );
    warehouseLogisticsItems.splice(
      0,
      warehouseLogisticsItems.length,
      ...filteredWarehouseLogistics
    );
    // 过滤耗材物料菜单
    const materialCandidates = label => {
      const list = [label, `耗材${label}`];
      if (label.endsWith("管理")) {
        list.push(`耗材${label.replace("管理", "")}`);
      }
      return list;
    };
    const originalMaterial = [
      { icon: "/static/images/icon/shengchanhesuan@2x.png", label: "入库管理", module: "material" },
      { icon: "/static/images/icon/shebeitaizhang@2x.png", label: "出库台账", module: "material" },
      { icon: "/static/images/icon/guzhangfenxi@2x.png", label: "库存管理", module: "material" },
      { icon: "/static/images/icon/caigoutaizhang@2x.png", label: "库存报表", module: "material" },
    ];
    const filteredMaterial = originalMaterial.filter(item => {
      return materialCandidates(item.label).some(t => allowedMenuTitles.has(t));
    });
    materialItems.splice(0, materialItems.length, ...filteredMaterial);
  };
  // 检查模块是否有菜单项需要显示
@@ -1022,9 +1378,14 @@
  const hasPurchaseItems = computed(() => purchaseItems.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 hasEquipmentItems = computed(() => equipmentItems.length > 0);
  const hasWarehouseLogisticsItems = computed(
    () => warehouseLogisticsItems.length > 0
  );
  const hasMaterialItems = computed(() => materialItems.length > 0);
  onMounted(() => {
    // 每次进入首页都强制刷新用户信息和路由权限,不做本地缓存判断
@@ -1773,4 +2134,4 @@
      box-shadow: 0 0.375rem 1.25rem rgba(0, 0, 0, 0.4);
    }
  }
</style>
</style>