From 63edbcb5f7e9b413f38e2e4e7f3ce43aa80013b7 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期一, 27 四月 2026 14:27:00 +0800
Subject: [PATCH] 新增工作订单管理界面行样式和报告时长字段,优化表格显示
---
src/views/productionManagement/workOrderManagement/index.vue | 173 +++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 125 insertions(+), 48 deletions(-)
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index dc6a8b6..2adaa22 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -24,11 +24,18 @@
:tableData="tableData"
:page="page"
:tableLoading="tableLoading"
+ :row-class-name="tableRowClassName"
@pagination="pagination">
<template #completionStatus="{ row }">
<el-progress :percentage="toProgressPercentage(row?.completionStatus)"
:color="progressColor(toProgressPercentage(row?.completionStatus))"
:status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" />
+ </template>
+ <template #todayReportState="{ row }">
+ {{ formatTodayReportState(row?.todayReportState) }}
+ </template>
+ <template #totalReportDurationMinutes="{ row }">
+ {{ formatDurationHours(row?.totalReportDurationMinutes) }}
</template>
</PIMTable>
</div>
@@ -111,7 +118,7 @@
<!-- 鎶ュ伐寮圭獥 -->
<el-dialog v-model="reportDialogVisible"
- title="鎶ュ伐"
+ :title="reportDialogTitle"
width="500px">
<el-form ref="reportFormRef"
:model="reportForm"
@@ -122,7 +129,8 @@
readonly
style="width: 300px" />
</el-form-item>
- <el-form-item label="鏈鐢熶骇鏁伴噺"
+ <el-form-item v-if="currentReportState !== 1"
+ label="鏈鐢熶骇鏁伴噺"
prop="quantity">
<el-input v-model.number="reportForm.quantity"
type="number"
@@ -132,7 +140,8 @@
placeholder="璇疯緭鍏ユ湰娆$敓浜ф暟閲�"
@input="handleQuantityInput" />
</el-form-item>
- <el-form-item label="鎶ュ簾鏁伴噺"
+ <el-form-item v-if="currentReportState !== 1"
+ label="鎶ュ簾鏁伴噺"
prop="scrapQty">
<el-input v-model.number="reportForm.scrapQty"
type="number"
@@ -177,6 +186,7 @@
productWorkOrderPage,
addProductMain,
downProductWorkOrder,
+ reportState,
} from "@/api/productionManagement/workOrder.js";
import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js";
import QRCode from "qrcode";
@@ -235,9 +245,23 @@
width: "140",
},
{
- label: "璁″垝宸ユ椂(灏忔椂)",
- prop: "plannedWorkHours",
+ label: "浠婃棩鎶ュ伐鐘舵��",
+ prop: "todayReportState",
+ dataType: "slot",
+ slot: "todayReportState",
width: "140",
+ },
+ {
+ label: "璁″垝宸ユ椂(灏忔椂)",
+ prop: "salaryQuota",
+ width: "140",
+ },
+ {
+ label: "绯荤粺鏍哥畻鏃堕棿(灏忔椂)",
+ prop: "totalReportDurationMinutes",
+ dataType: "slot",
+ slot: "totalReportDurationMinutes",
+ width: "160",
},
{
label: "璁″垝寮�濮嬫椂闂�",
@@ -296,6 +320,8 @@
const transferCardQrUrl = ref("");
const transferCardRowData = ref(null);
const reportDialogVisible = ref(false);
+ const currentReportState = ref(2);
+ const reportDialogTitle = ref("鎶ュ伐");
const workOrderFilesRef = ref(null);
const reportFormRef = ref(null);
const userOptions = ref([]);
@@ -428,6 +454,25 @@
if (p < 80) return "#409eff";
return "#67c23a";
};
+ const formatTodayReportState = val => {
+ const state = Number(val);
+ if (state === 1) return "鏈紑濮�";
+ if (state === 2) return "宸插紑濮�";
+ if (state === 3) return "宸茬粨鏉�";
+ return "-";
+ };
+ const formatDurationHours = val => {
+ const minutes = Number(val);
+ if (!Number.isFinite(minutes) || minutes < 0) return "-";
+ return (minutes / 60).toFixed(2);
+ };
+ const tableRowClassName = ({ row }) => {
+ const state = Number(row?.todayReportState);
+ if (state === 1) return "today-report-not-started";
+ if (state === 2) return "today-report-started";
+ if (state === 3) return "today-report-ended";
+ return "";
+ };
// 鏌ヨ鍒楄〃
/** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -444,7 +489,7 @@
const getList = () => {
tableLoading.value = true;
- const params = { ...searchForm.value, ...page };
+ const params = { ...searchForm.value, ...page, type: 2 };
productWorkOrderPage(params)
.then(res => {
tableLoading.value = false;
@@ -524,7 +569,7 @@
workOrderFilesRef.value?.openDialog(row);
};
- const showReportDialog = row => {
+ const showReportDialog = async row => {
currentReportRowData.value = row;
reportForm.planQuantity = row.planQuantity;
reportForm.quantity =
@@ -538,6 +583,23 @@
nextTick(() => {
reportFormRef.value?.clearValidate();
});
+ try {
+ const reportStateRes = await reportState({
+ workOrderId: row.id,
+ productProcessRouteItemId: row.productProcessRouteItemId,
+ });
+ const state = reportStateRes?.data?.state;
+ currentReportState.value = state === 1 ? 1 : 2;
+ reportDialogTitle.value = currentReportState.value === 1 ? "寮�濮嬫姤宸�" : "缁撴潫鎶ュ伐";
+ if (currentReportState.value === 1) {
+ reportForm.quantity = null;
+ reportForm.scrapQty = null;
+ }
+ } catch (error) {
+ currentReportState.value = 2;
+ reportDialogTitle.value = "缁撴潫鎶ュ伐";
+ console.error("鑾峰彇鎶ュ伐鐘舵�佸け璐�", error);
+ }
// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅锛岃缃负榛樿閫変腑
getUserProfile()
.then(res => {
@@ -566,48 +628,52 @@
return;
}
- // 楠岃瘉鏈鐢熶骇鏁伴噺
- if (
- reportForm.quantity === null ||
- reportForm.quantity === undefined ||
- reportForm.quantity === ""
- ) {
- ElMessageBox.alert("璇疯緭鍏ユ湰娆$敓浜ф暟閲�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- return;
- }
+ let quantity = 0;
+ let scrapQty = 0;
+ if (currentReportState.value !== 1) {
+ // 楠岃瘉鏈鐢熶骇鏁伴噺
+ if (
+ reportForm.quantity === null ||
+ reportForm.quantity === undefined ||
+ reportForm.quantity === ""
+ ) {
+ ElMessageBox.alert("璇疯緭鍏ユ湰娆$敓浜ф暟閲�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ });
+ return;
+ }
- const quantity = Number(reportForm.quantity);
+ quantity = Number(reportForm.quantity);
- if (isNaN(quantity) || quantity <= 0) {
- ElMessageBox.alert("鏈鐢熶骇鏁伴噺蹇呴』澶т簬0", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- return;
- }
+ if (isNaN(quantity) || quantity <= 0) {
+ ElMessageBox.alert("鏈鐢熶骇鏁伴噺蹇呴』澶т簬0", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ });
+ return;
+ }
- if (quantity > reportForm.planQuantity) {
- ElMessageBox.alert("鏈鐢熶骇鏁伴噺涓嶈兘瓒呰繃寰呯敓浜ф暟閲�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- return;
- }
+ if (quantity > reportForm.planQuantity) {
+ ElMessageBox.alert("鏈鐢熶骇鏁伴噺涓嶈兘瓒呰繃寰呯敓浜ф暟閲�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ });
+ return;
+ }
- // 楠岃瘉鎶ュ簾鏁伴噺
- const scrapQty = Number(reportForm.scrapQty);
- if (!isNaN(scrapQty) && scrapQty < 0) {
- ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘灏忎簬0", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- return;
- }
+ // 楠岃瘉鎶ュ簾鏁伴噺
+ scrapQty = Number(reportForm.scrapQty);
+ if (!isNaN(scrapQty) && scrapQty < 0) {
+ ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘灏忎簬0", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ });
+ return;
+ }
- if (!isNaN(scrapQty) && scrapQty > quantity) {
- ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘澶т簬鏈鐢熶骇鏁伴噺", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- return;
+ if (!isNaN(scrapQty) && scrapQty > quantity) {
+ ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘澶т簬鏈鐢熶骇鏁伴噺", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ });
+ return;
+ }
}
const params = {
@@ -623,14 +689,13 @@
addProductMain(params)
.then(res => {
- proxy.$modal.msgSuccess("鎶ュ伐鎴愬姛");
+ proxy.$modal.msgSuccess(
+ currentReportState.value === 1 ? "寮�濮嬫姤宸ユ垚鍔�" : "缁撴潫鎶ュ伐鎴愬姛"
+ );
reportDialogVisible.value = false;
getList();
})
.catch(() => {
- ElMessageBox.alert("鎶ュ伐澶辫触", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
});
});
};
@@ -710,6 +775,18 @@
text-align: center;
margin-top: 20px;
}
+
+ :deep(.el-table .today-report-not-started > td) {
+ background-color: #fff7e6 !important;
+ }
+
+ :deep(.el-table .today-report-started > td) {
+ background-color: #ecf5ff !important;
+ }
+
+ :deep(.el-table .today-report-ended > td) {
+ background-color: #f0f9eb !important;
+ }
</style>
<style lang="scss">
--
Gitblit v1.9.3