From 80fea9ca648dcebc3b44fa068c927fa67dafb7fb Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期三, 29 四月 2026 10:27:41 +0800
Subject: [PATCH] fix(workOrder): 修正工单报告数量计算逻辑
---
src/views/productionManagement/workOrder/index.vue | 107 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 81 insertions(+), 26 deletions(-)
diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index 6a9eed8..7fcdab2 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -326,11 +326,11 @@
</template>
</el-dialog>
<el-dialog v-model="scheduleDialogVisible"
- :title="`鐢熶骇鎺掍骇(宸ュ崟缂栧彿:${currentReportRowData?.workOrderNo || '-'})`"
+ :title="scheduleDialogTitle"
width="1000px"
:close-on-click-modal="false">
<div class="schedule-panel">
- <el-row style="margin-bottom: 12px;">
+ <el-row v-if="!isScheduleHistoryMode" style="margin-bottom: 12px;">
<el-col>
<el-button type="primary" plain :disabled="scheduleLoading || scheduleSaving" @click="addScheduleRow">
鏂板涓�琛�
@@ -347,7 +347,7 @@
filterable
clearable
style="width: 100%"
- :disabled="scheduleSaving"
+ :disabled="scheduleSaving || isScheduleHistoryMode"
@change="val => handleScheduleDeviceChange(val, row)"
>
<el-option
@@ -362,7 +362,18 @@
<el-table-column label="鏈涓婃満浜�" min-width="220">
<template #default="{ row }">
+ <div v-if="isScheduleHistoryMode" class="schedule-user-tags">
+ <el-tag
+ v-for="(userId, index) in row.userIds"
+ :key="`${userId}-${index}`"
+ type="primary"
+ >
+ {{ resolveScheduleUserName(userId) }}
+ </el-tag>
+ <span v-if="!row.userIds?.length">-</span>
+ </div>
<el-select
+ v-else
v-model="row.userIds"
placeholder="璇烽�夋嫨涓婃満浜�"
filterable
@@ -392,12 +403,12 @@
format="YYYY-MM-DD HH:mm:ss"
placeholder="璇烽�夋嫨涓婃満鏃堕棿"
style="width: 100%"
- :disabled="scheduleSaving"
+ :disabled="scheduleSaving || isScheduleHistoryMode"
/>
</template>
</el-table-column>
- <el-table-column label="鎿嶄綔" width="110" align="center">
+ <el-table-column v-if="!isScheduleHistoryMode" label="鎿嶄綔" width="110" align="center">
<template #default="{ row }">
<el-button
link
@@ -413,7 +424,7 @@
</el-table>
<Pagination
- v-show="schedulePage.total > 0"
+ v-show="isScheduleHistoryMode && schedulePage.total > 0"
style="margin-top: 12px"
:total="schedulePage.total"
:page="schedulePage.current"
@@ -424,8 +435,13 @@
<template #footer>
<span class="dialog-footer">
- <el-button type="primary" :loading="scheduleSaving" @click="handleSaveSchedule">淇濆瓨鎺掍骇</el-button>
- <el-button :disabled="scheduleSaving" @click="scheduleDialogVisible = false">鍙栨秷</el-button>
+ <template v-if="isScheduleHistoryMode">
+ <el-button @click="scheduleDialogVisible = false">鍏抽棴</el-button>
+ </template>
+ <template v-else>
+ <el-button type="primary" :loading="scheduleSaving" @click="handleSaveSchedule">淇濆瓨鎺掍骇</el-button>
+ <el-button :disabled="scheduleSaving" @click="scheduleDialogVisible = false">鍙栨秷</el-button>
+ </template>
</span>
</template>
</el-dialog>
@@ -623,17 +639,12 @@
return;
}
- const first = scheduleRows.value[0] || {};
- const deviceId = first.deviceId || currentReportRowData.value?.deviceId || "";
- const userOptions = deviceId ? buildScheduleUserOptionsByDeviceId(deviceId) : [...baseScheduleUsers.value];
- const defaultUserId = userOptions[0]?.userId ? String(userOptions[0].userId) : "";
-
scheduleRows.value.push(
createScheduleRow({
id: "",
- deviceId,
- deviceName: first.deviceName || currentReportRowData.value?.deviceName || "",
- userIds: defaultUserId ? [defaultUserId] : [],
+ deviceId:"",
+ deviceName:"",
+ userIds: [],
startTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
})
);
@@ -645,7 +656,7 @@
if (!workOrderRow?.id) {
schedulePage.current = 1;
schedulePage.total = 0;
- scheduleRows.value = [createScheduleRow({})];
+ scheduleRows.value = [];
return;
}
@@ -672,11 +683,11 @@
}
const rows = records.map(record => mapMachineRecordToScheduleRow(record));
- scheduleRows.value = rows.length > 0 ? rows : [createScheduleRow({})];
+ scheduleRows.value = rows;
} catch (error) {
console.error("鑾峰彇鎺掍骇璁板綍澶辫触", error);
schedulePage.total = 0;
- scheduleRows.value = [createScheduleRow({})];
+ scheduleRows.value = [];
ElMessage.error("鑾峰彇鎺掍骇璁板綍澶辫触");
} finally {
scheduleLoading.value = false;
@@ -684,12 +695,12 @@
};
const removeScheduleRow = async (row) => {
- if (!row) return;
+ if (!row || isScheduleHistoryMode.value) return;
if (!row.id) {
scheduleRows.value = scheduleRows.value.filter((item) => item !== row);
if (!scheduleRows.value.length) {
- scheduleRows.value = [createScheduleRow({})];
+ addScheduleRow();
}
return;
}
@@ -740,6 +751,7 @@
};
const handleSchedulePagination = ({page, limit}) => {
+ if (!isScheduleHistoryMode.value) return;
schedulePage.current = page;
schedulePage.size = limit;
refreshScheduleRows();
@@ -818,6 +830,12 @@
return (schedulePage.current - 1) * schedulePage.size + index + 1;
};
+const scheduleDialogMode = ref("create");
+const isScheduleHistoryMode = computed(() => scheduleDialogMode.value === "history");
+const scheduleDialogTitle = computed(() =>
+ `${isScheduleHistoryMode.value ? "鎺掍骇璁板綍" : "鐢熶骇鎺掍骇"}(宸ュ崟缂栧彿:${currentReportRowData.value?.workOrderNo || "-"})`
+);
+
const mapMachineRecordToScheduleRow = (record) => {
const id = record?.id ?? "";
const deviceId = record?.machineId ?? record?.deviceId ?? "";
@@ -863,11 +881,29 @@
);
};
+const resetCreateScheduleRows = () => {
+ schedulePage.current = 1;
+ schedulePage.total = 0;
+ scheduleRows.value = [];
+ addScheduleRow();
+};
+
const openScheduleDialog = async (row) => {
+ scheduleDialogMode.value = "create";
+ currentReportRowData.value = row;
+ baseScheduleUsers.value = buildBaseScheduleUsersByRow(row);
+ userTemp.value = [...baseScheduleUsers.value];
+ scheduleDialogVisible.value = true;
+ resetCreateScheduleRows();
+};
+
+const openHistoryTimelineDialog = async (row) => {
+ scheduleDialogMode.value = "history";
currentReportRowData.value = row;
baseScheduleUsers.value = buildBaseScheduleUsersByRow(row);
userTemp.value = [...baseScheduleUsers.value];
schedulePage.current = 1;
+ schedulePage.total = 0;
scheduleRows.value = [];
scheduleDialogVisible.value = true;
@@ -875,6 +911,7 @@
};
const handleSaveSchedule = async () => {
+ if (isScheduleHistoryMode.value) return;
if (scheduleSaving.value) return;
if (!validateScheduleRows()) return;
@@ -899,7 +936,7 @@
}
proxy.$modal.msgSuccess("鎺掍骇宸蹭繚瀛�");
- await refreshScheduleRows();
+ resetCreateScheduleRows();
getList();
} catch (error) {
console.error("淇濆瓨鎺掍骇澶辫触", error);
@@ -981,7 +1018,7 @@
},
{
label: "鎿嶄綔",
- width: "200",
+ width: "220",
align: "center",
dataType: "action",
fixed: "right",
@@ -1010,7 +1047,7 @@
showReportDialog(row);
},
// 鐢ㄦ埛褰撳墠id
- disabled: row => row.completeQuantity !==0 ||
+ disabled: row => row.completeQuantity >= row.planQuantity ||
!isCurrentUserInUserIds(row)
},
{
@@ -1023,6 +1060,17 @@
openScheduleDialog(row);
},
disabled: row => !row.canSchedule || row.completeQuantity >= row.planQuantity
+ },
+ {
+ name: "鎺掍骇璁板綍",
+ clickFun: row => {
+ if (!row.canSchedule) {
+ ElMessage.warning("褰撳墠鐢ㄦ埛涓嶅湪璇ュ伐搴忎汉鍛樹腑锛屼笉鑳芥煡鐪嬫帓浜ц褰�");
+ return;
+ }
+ openHistoryTimelineDialog(row);
+ },
+ disabled: row => !row.canSchedule
}
// {
// name:"瀹℃牳",
@@ -1387,12 +1435,11 @@
currentReportRowData.value = row;
reportForm.planQuantity = row.planQuantity - row.completeQuantity;
- reportForm.quantity = row.planQuantity !== undefined && row.planQuantity !== null ? row.planQuantity : null;
+ reportForm.quantity = row.planQuantity - row.completeQuantity;
reportForm.productProcessRouteItemId = row.productProcessRouteItemId;
reportForm.workOrderId = row.id;
reportForm.reportWork = row.reportWork;
reportForm.productMainId = row.productMainId;
- reportForm.planQuantity = row.planQuantity;
reportForm.startTime = "";
reportForm.endTime = "";
reportForm.replenishQty = 0;
@@ -1649,6 +1696,14 @@
justify-content: flex-start;
}
}
+
+.schedule-user-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ min-height: 32px;
+ align-items: center;
+}
</style>
<style lang="scss">
--
Gitblit v1.9.3