From 077ab59c700b85efdd057265bf752ad5942395b2 Mon Sep 17 00:00:00 2001
From: ZN <zhang_12370@163.com>
Date: 星期二, 17 三月 2026 17:36:13 +0800
Subject: [PATCH] feat(quality): 新增质量管理模块的API接口和移动端页面
---
src/pages/index.vue | 419 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 390 insertions(+), 29 deletions(-)
diff --git a/src/pages/index.vue b/src/pages/index.vue
index 1b20903..5e09c1d 100644
--- a/src/pages/index.vue
+++ b/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>
\ No newline at end of file
+</style>
--
Gitblit v1.9.3