| src/views/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/finalInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/processInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/rawMaterialInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/views/index.vue
@@ -214,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"> @@ -232,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"> @@ -278,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"> @@ -449,7 +449,6 @@ }); const realtimeBoardData = ref({ deviceOee: { value: 0, compareYesterday: 0 }, orderAchievementRate: { value: 0, compareYesterday: 0 }, defectRate: { value: 0, compareYesterday: 0 }, }); @@ -883,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: "订单达成率", @@ -906,7 +894,7 @@ display: `${orderAchievement.toFixed(2)}%`, delta: getCompareText(orderCompare), trend: getCompareTrend(orderCompare), color: "#31d2ff", color: "#2d8cff", }, { key: "defect", @@ -1205,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), @@ -1220,7 +1204,6 @@ }; } catch { realtimeBoardData.value = { deviceOee: { value: 0, compareYesterday: 0 }, orderAchievementRate: { value: 0, compareYesterday: 0 }, defectRate: { value: 0, compareYesterday: 0 }, }; @@ -1396,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, () => { @@ -2094,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; } @@ -2102,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; } @@ -2432,7 +2427,7 @@ } .realtime-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr)); } .quality-cards { src/views/qualityManagement/finalInspection/components/formDia.vue
@@ -209,11 +209,11 @@ const n = Number(fromApi); if (!Number.isNaN(n)) return n; } const quantity = Number(form.value.quantity); const qualified = Number(form.value.qualifiedQuantity); if (!quantity || Number.isNaN(quantity)) return null; const qualifiedNum = Number.isNaN(qualified) ? 0 : qualified; return (qualifiedNum / quantity) * 100; const qualified = Number(form.value.qualifiedQuantity) || 0; const unqualified = Number(form.value.unqualifiedQuantity) || 0; const total = qualified + unqualified; if (!total || total === 0) return null; return (qualified / total) * 100; }); const passRateDisplayText = computed(() => { @@ -296,8 +296,8 @@ if (operationType.value === 'edit' || operationType.value === 'view') { // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; // 先设置表单数据,但暂时清空 testStandardId,等选项加载完成后再设置 form.value = {...row, testStandardId: ''} const { passRate, ...rowWithoutPassRate } = row; form.value = { ...rowWithoutPassRate, testStandardId: '' }; currentProductId.value = row.productId || 0 // 清空验证状态,避免数据加载过程中的校验闪烁 nextTick(() => { src/views/qualityManagement/processInspection/components/formDia.vue
@@ -268,11 +268,11 @@ const n = Number(fromApi); if (!Number.isNaN(n)) return n; } const quantity = Number(form.value.quantity); const qualified = Number(form.value.qualifiedQuantity); if (!quantity || Number.isNaN(quantity)) return null; const qualifiedNum = Number.isNaN(qualified) ? 0 : qualified; return (qualifiedNum / quantity) * 100; const qualified = Number(form.value.qualifiedQuantity) || 0; const unqualified = Number(form.value.unqualifiedQuantity) || 0; const total = qualified + unqualified; if (!total || total === 0) return null; return (qualified / total) * 100; }); const passRateDisplayText = computed(() => { @@ -367,8 +367,8 @@ if (operationType.value === "edit" || operationType.value === "view") { // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; // 先设置表单数据,但暂时清空 testStandardId,等选项加载完成后再设置 form.value = { ...row, testStandardId: "" }; const { passRate, ...rowWithoutPassRate } = row; form.value = { ...rowWithoutPassRate, testStandardId: "" }; currentProductId.value = row.productId || 0; // 关键:编辑时加载规格型号下拉选项,才能反显 productModelId if (currentProductId.value) { src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -249,11 +249,11 @@ const n = Number(fromApi); if (!Number.isNaN(n)) return n; } const quantity = Number(form.value.quantity); const qualified = Number(form.value.qualifiedQuantity); if (!quantity || Number.isNaN(quantity)) return null; const qualifiedNum = Number.isNaN(qualified) ? 0 : qualified; return (qualifiedNum / quantity) * 100; const qualified = Number(form.value.qualifiedQuantity) || 0; const unqualified = Number(form.value.unqualifiedQuantity) || 0; const total = qualified + unqualified; if (!total || total === 0) return null; return (qualified / total) * 100; }); const passRateDisplayText = computed(() => { @@ -315,7 +315,8 @@ if (operationType.value === 'edit' || operationType.value === 'view') { // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; form.value = {...row} const { passRate, ...rowWithoutPassRate } = row; form.value = { ...rowWithoutPassRate, testStandardId: "" }; currentProductId.value = row.productId || 0 // 关键:编辑时加载规格型号下拉选项,才能反显 productModelId if (currentProductId.value) {