From 7726b6cdab80596d2e2f7dd3fe1ec3dfbdeee155 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期五, 12 六月 2026 09:42:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_pro_河南鹤壁
---
src/views/index.vue | 125 ++++++++++++++++++++++++++++-------------
1 files changed, 84 insertions(+), 41 deletions(-)
diff --git a/src/views/index.vue b/src/views/index.vue
index 3176042..c6fa35e 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -113,10 +113,11 @@
<div class="panel-title-row">
<div class="panel-title">鐢熶骇璁㈠崟杩涘害</div>
<el-radio-group v-model="orderFilter" size="small">
- <el-radio-button label="all">鍏ㄩ儴({{ orderProgressMeta.total }})</el-radio-button>
- <el-radio-button label="inProgress">杩涜涓�({{ orderProgressMeta.inProgressCount }})</el-radio-button>
- <el-radio-button label="completed">宸插畬鎴�({{ orderProgressMeta.completedCount }})</el-radio-button>
- <el-radio-button label="paused">宸叉殏鍋�({{ orderProgressMeta.pausedCount }})</el-radio-button>
+ <el-radio-button :value="'all'">鍏ㄩ儴({{ orderProgressMeta.total }})</el-radio-button>
+ <el-radio-button :value="'waiting'">寰呭紑濮�({{ orderProgressMeta.waitingCount }})</el-radio-button>
+ <el-radio-button :value="'inProgress'">杩涜涓�({{ orderProgressMeta.inProgressCount }})</el-radio-button>
+ <el-radio-button :value="'completed'">宸插畬鎴�({{ orderProgressMeta.completedCount }})</el-radio-button>
+ <el-radio-button :value="'paused'">宸叉殏鍋�({{ orderProgressMeta.pausedCount }})</el-radio-button>
</el-radio-group>
</div>
<el-table :data="filteredOrders" stripe>
@@ -213,7 +214,7 @@
<div v-if="visiblePanels.todo" class="cockpit-panel todo-panel">
<div class="panel-title-row">
<div class="panel-title">寰呭姙浜嬮」</div>
- <span class="panel-more">鏇村</span>
+ <span class="panel-more" @click="goToApprovalProcess">鏇村</span>
</div>
<ul class="todo-list" v-if="todoList.length > 0">
<li v-for="item in todoList" :key="item.id" class="todo-item">
@@ -231,7 +232,7 @@
<div v-if="visiblePanels.realtime" class="cockpit-panel realtime-panel">
<div class="panel-title-row">
<div class="panel-title">鐢熶骇瀹炴椂鐪嬫澘</div>
- <span class="panel-more">鏇村</span>
+ <span class="panel-more" @click="goToProductionOrder">鏇村</span>
</div>
<div class="realtime-grid">
<div class="realtime-item" v-for="item in realtimeBoard" :key="item.key">
@@ -277,7 +278,7 @@
<div v-if="visiblePanels.plan" class="cockpit-panel plan-panel">
<div class="panel-title-row">
<div class="panel-title">浠婃棩鐢熶骇璁″垝</div>
- <span class="panel-more">{{ todayPlanTotal }}椤�</span>
+ <span class="panel-more" @click="goToProductionPlan">{{ todayPlanTotal }}椤�</span>
</div>
<ul class="plan-list">
<li v-for="item in todayPlanList" :key="item.orderNo" class="plan-item">
@@ -319,7 +320,7 @@
<div class="process-selection-wrapper">
<el-checkbox-group v-model="tempProcessIds">
<div class="process-grid">
- <el-checkbox v-for="item in processOptions" :key="item.id" :label="item.id" border>
+ <el-checkbox v-for="item in processOptions" :key="item.id" :value="item.id" border>
{{ item.name }}
</el-checkbox>
</div>
@@ -448,16 +449,18 @@
});
const realtimeBoardData = ref({
- deviceOee: { value: 0, compareYesterday: 0 },
orderAchievementRate: { value: 0, compareYesterday: 0 },
defectRate: { value: 0, compareYesterday: 0 },
});
const orderProgressMeta = ref({
+ status: "all",
tab: "all",
+ bizDate: null,
total: 0,
pageNum: 1,
pageSize: 10,
+ waitingCount: 0,
inProgressCount: 0,
completedCount: 0,
pausedCount: 0,
@@ -832,8 +835,36 @@
const productionOrders = ref([]);
+const orderFilterOptions = ["all", "waiting", "inProgress", "completed", "paused"];
+const orderFilterAliasMap = {
+ 1: "waiting",
+ 2: "inProgress",
+ 3: "completed",
+ 4: "paused",
+};
const orderFilter = ref("all");
const filteredOrders = computed(() => productionOrders.value);
+
+const normalizeOrderFilter = (value, fallback = "all") => {
+ const safeFallback = orderFilterOptions.includes(fallback) ? fallback : "all";
+ const text = String(value ?? "").trim();
+ if (orderFilterAliasMap[text]) {
+ return orderFilterAliasMap[text];
+ }
+ return orderFilterOptions.includes(text) ? text : safeFallback;
+};
+
+const parseCount = (value) => {
+ if (value === null || value === undefined || value === "") return null;
+ const num = Number(value);
+ return Number.isFinite(num) ? num : null;
+};
+
+const resolveProgressCount = (rawValue, currentStatus, targetStatus, total) => {
+ const count = parseCount(rawValue);
+ if (count !== null) return count;
+ return currentStatus === targetStatus ? total : 0;
+};
const getCompareTrend = (value) => {
const num = Number(value || 0);
@@ -851,22 +882,11 @@
};
const realtimeBoard = computed(() => {
- const oee = Number(realtimeBoardData.value.deviceOee?.value || 0);
const orderAchievement = Number(realtimeBoardData.value.orderAchievementRate?.value || 0);
const defectRate = Number(realtimeBoardData.value.defectRate?.value || 0);
- const oeeCompare = Number(realtimeBoardData.value.deviceOee?.compareYesterday || 0);
const orderCompare = Number(realtimeBoardData.value.orderAchievementRate?.compareYesterday || 0);
const defectCompare = Number(realtimeBoardData.value.defectRate?.compareYesterday || 0);
return [
- {
- key: "oee",
- label: "璁惧 OEE",
- percent: clampPercent(oee),
- display: `${oee.toFixed(2)}%`,
- delta: getCompareText(oeeCompare),
- trend: getCompareTrend(oeeCompare),
- color: "#2d8cff",
- },
{
key: "order",
label: "璁㈠崟杈炬垚鐜�",
@@ -874,7 +894,7 @@
display: `${orderAchievement.toFixed(2)}%`,
delta: getCompareText(orderCompare),
trend: getCompareTrend(orderCompare),
- color: "#31d2ff",
+ color: "#2d8cff",
},
{
key: "defect",
@@ -1173,10 +1193,6 @@
const res = await productionRealtimeBoard();
const data = res?.data || {};
realtimeBoardData.value = {
- deviceOee: {
- value: Number(data.deviceOee?.value || 0),
- compareYesterday: Number(data.deviceOee?.compareYesterday || 0),
- },
orderAchievementRate: {
value: Number(data.orderAchievementRate?.value || 0),
compareYesterday: Number(data.orderAchievementRate?.compareYesterday || 0),
@@ -1188,7 +1204,6 @@
};
} catch {
realtimeBoardData.value = {
- deviceOee: { value: 0, compareYesterday: 0 },
orderAchievementRate: { value: 0, compareYesterday: 0 },
defectRate: { value: 0, compareYesterday: 0 },
};
@@ -1198,27 +1213,36 @@
const refreshProductionOrderProgress = async () => {
try {
const res = await productionOrderProgress({
+ status: orderFilter.value,
tab: orderFilter.value,
pageNum: 1,
pageSize: 10,
});
const data = res?.data || {};
+ const statusValue = normalizeOrderFilter(data.status, orderFilter.value);
+ const total = Number(data.total || 0);
orderProgressMeta.value = {
+ status: statusValue,
tab: data.tab || orderFilter.value,
- total: Number(data.total || 0),
+ bizDate: data.bizDate || null,
+ total,
pageNum: Number(data.pageNum || 1),
pageSize: Number(data.pageSize || 10),
- inProgressCount: Number(data.inProgressCount || 0),
- completedCount: Number(data.completedCount || 0),
- pausedCount: Number(data.pausedCount || 0),
+ waitingCount: resolveProgressCount(data.waitingCount, statusValue, "waiting", total),
+ inProgressCount: resolveProgressCount(data.inProgressCount, statusValue, "inProgress", total),
+ completedCount: resolveProgressCount(data.completedCount, statusValue, "completed", total),
+ pausedCount: resolveProgressCount(data.pausedCount, statusValue, "paused", total),
};
productionOrders.value = (data.records || []).map(mapOrderProgressRecord);
} catch {
orderProgressMeta.value = {
+ status: orderFilter.value,
tab: orderFilter.value,
+ bizDate: null,
total: 0,
pageNum: 1,
pageSize: 10,
+ waitingCount: 0,
inProgressCount: 0,
completedCount: 0,
pausedCount: 0,
@@ -1229,7 +1253,10 @@
const refreshTodayProductionPlan = async () => {
try {
- const res = await todayProductionPlan({ limit: 4 });
+ const res = await todayProductionPlan({
+ limit: 4,
+ planDate: nowDate.value,
+ });
const data = res?.data || {};
todayPlanTotal.value = Number(data.total || 0);
todayPlanList.value = (data.records || []).map(mapTodayPlanRecord);
@@ -1263,9 +1290,12 @@
const statisticsReceivable = async () => {
const res = await statisticsReceivablePayable({ type: 1 });
+ const data = res?.data || {};
+ const payableMoney = Number(data.payableMoney ?? 0);
+ const receivableMoney = Number(data.receivableMoney ?? 0);
barSeries.value[0].data = [
- { value: res.data.payableMoney, itemStyle: { color: barColors2[0] } },
- { value: res.data.receivableMoney, itemStyle: { color: barColors2[1] } },
+ { value: payableMoney, itemStyle: { color: barColors2[0] } },
+ { value: receivableMoney, itemStyle: { color: barColors2[1] } },
];
};
@@ -1275,15 +1305,16 @@
barSeries1.value[0].data = [];
barSeries1.value[1].data = [];
barSeries1.value[2].data = [];
- (res.data.item || []).forEach((item) => {
+ const data = res.data || {};
+ (data.item || []).forEach((item) => {
xAxis1.value[0].data.push(item.date);
barSeries1.value[0].data.push(item.supplierNum);
barSeries1.value[1].data.push(item.processNum);
barSeries1.value[2].data.push(item.factoryNum);
});
- qualityStatisticsObject.value.supplierNum = res.data.supplierNum;
- qualityStatisticsObject.value.processNum = res.data.processNum;
- qualityStatisticsObject.value.factoryNum = res.data.factoryNum;
+ qualityStatisticsObject.value.supplierNum = data.supplierNum || 0;
+ qualityStatisticsObject.value.processNum = data.processNum || 0;
+ qualityStatisticsObject.value.factoryNum = data.factoryNum || 0;
};
const getAmountHalfYearNum = async () => {
@@ -1348,6 +1379,18 @@
const goToQuick = (path) => {
if (!path) return;
router.push(path).catch(() => {});
+};
+
+const goToProductionOrder = () => {
+ router.push('/productionManagement/productionOrder').catch(() => {});
+};
+
+const goToApprovalProcess = () => {
+ router.push('/collaborativeApproval/approvalProcess').catch(() => {});
+};
+
+const goToProductionPlan = () => {
+ router.push('/productionManagement/productionPlan').catch(() => {});
};
watch(orderFilter, () => {
@@ -2046,7 +2089,7 @@
.realtime-grid {
margin-top: 10px;
display: grid;
- grid-template-columns: repeat(3, minmax(0, 1fr));
+ grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
@@ -2054,12 +2097,12 @@
border: 1px solid rgba(148, 163, 184, 0.2);
border-radius: 12px;
background: #f8fbff;
- padding: 10px 8px;
+ padding: 16px 12px;
text-align: center;
}
.realtime-value {
- font-size: 26px;
+ font-size: 32px;
color: #0f172a;
font-weight: 700;
}
@@ -2384,7 +2427,7 @@
}
.realtime-grid {
- grid-template-columns: repeat(3, minmax(0, 1fr));
+ grid-template-columns: repeat(2, minmax(0, 1fr));
}
.quality-cards {
--
Gitblit v1.9.3