From dacc95761cf7090c628fc37a5d4f8bb825ccbbb0 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期六, 16 五月 2026 15:41:45 +0800
Subject: [PATCH] 企业新闻和通知公告
---
src/views/productionManagement/workOrderManagement/index.vue | 134 ++++++++++++++++++++++++++++++++------------
1 files changed, 98 insertions(+), 36 deletions(-)
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index 95fb703..119bd9e 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -1,6 +1,6 @@
<template>
<div class="app-container">
- <div class="search_form">
+ <div class="search_form mb20">
<div class="search-row">
<div class="search-item">
<span class="search_title">宸ュ崟缂栧彿锛�</span>
@@ -13,7 +13,7 @@
</div>
<div class="search-item">
<span class="search_title">鐢熶骇璁㈠崟鍙凤細</span>
- <el-input v-model="searchForm.productOrderNpsNo"
+ <el-input v-model="searchForm.npsNo"
style="width: 240px"
placeholder="璇疯緭鍏�"
@change="handleQuery"
@@ -128,14 +128,14 @@
readonly
style="width: 300px" />
</el-form-item>
- <el-form-item label="鏈鐢熶骇鏁伴噺"
+ <el-form-item label="鐢熶骇鍚堟牸鏁伴噺"
prop="quantity">
<el-input v-model.number="reportForm.quantity"
type="number"
- min="1"
+ min="0"
step="1"
style="width: 300px"
- placeholder="璇疯緭鍏ユ湰娆$敓浜ф暟閲�"
+ placeholder="璇疯緭鍏ョ敓浜у悎鏍兼暟閲�"
@input="handleQuantityInput" />
</el-form-item>
<el-form-item label="鎶ュ簾鏁伴噺"
@@ -160,6 +160,17 @@
:label="user.nickName"
:value="user.userId" />
</el-select>
+ </el-form-item>
+ <!-- 宸ユ椂 -->
+ <el-form-item label="宸ユ椂"
+ v-if="currentReportRowData?.type == 0"
+ prop="workHour">
+ <el-input v-model.number="reportForm.workHour"
+ type="number"
+ min="0"
+ style="width: 280px"
+ placeholder="璇疯緭鍏ュ伐鏃�" /><span style="margin-left:10px"
+ class="param-unit">h</span>
</el-form-item>
<div v-if="params.length > 0"
class="param-grid"
@@ -242,7 +253,11 @@
<MaterialDialog v-model="materialDialogVisible"
:row-data="currentMaterialOrderRow"
@refresh="getList" />
- <FilesDia ref="workOrderFilesRef" />
+ <FileList v-if="fileDialogVisible"
+ v-model:visible="fileDialogVisible"
+ :editable="!currentWorkOrderRow?.endOrder"
+ :record-type="'production_operation_task'"
+ :record-id="currentWorkOrderId" />
</div>
</template>
@@ -255,14 +270,20 @@
addProductMain,
downProductWorkOrder,
} from "@/api/productionManagement/workOrder.js";
+ import { listMaterialPickingDetail } from "@/api/productionManagement/productionOrder.js";
import { findProcessParamListOrder } from "@/api/productionManagement/productProcessRoute.js";
import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js";
import { getDicts } from "@/api/system/dict/data";
import QRCode from "qrcode";
import { getCurrentInstance, reactive, toRefs } from "vue";
- import FilesDia from "./components/filesDia.vue";
import MaterialDialog from "./components/MaterialDialog.vue";
+ const FileList = defineAsyncComponent(() =>
+ import("@/components/Dialog/FileList.vue")
+ );
+
+ import useUserStore from "@/store/modules/user";
const { proxy } = getCurrentInstance();
+ const userStore = useUserStore();
const tableColumn = ref([
{
@@ -365,12 +386,27 @@
clickFun: row => {
showReportDialog(row);
},
- disabled: row => row.planQuantity <= 0,
+ showHide: row => !row.endOrder,
+ disabled: row => {
+ if (row.planQuantity <= 0) return true;
+ if (!row.userIds) return false;
+ try {
+ const userIds =
+ typeof row.userIds === "string"
+ ? JSON.parse(row.userIds)
+ : row.userIds;
+ if (Array.isArray(userIds)) {
+ return !userIds.some(id => String(id) === String(userStore.id));
+ }
+ return true;
+ } catch (e) {
+ return true;
+ }
+ },
},
],
},
]);
-
const tableData = ref([]);
const tableLoading = ref(false);
const transferCardVisible = ref(false);
@@ -378,7 +414,8 @@
const transferCardQrUrl = ref("");
const transferCardRowData = ref(null);
const reportDialogVisible = ref(false);
- const workOrderFilesRef = ref(null);
+ const fileDialogVisible = ref(false);
+ const currentWorkOrderId = ref(null);
const reportFormRef = ref(null);
const userOptions = ref([]);
const reportForm = reactive({
@@ -393,6 +430,7 @@
productMainId: null,
productionOrderRoutingOperationId: "",
productionOrderId: "",
+ workHour: 0,
paramGroups: {},
});
@@ -400,16 +438,16 @@
const dictOptions = ref({});
const paramLoading = ref(false);
- // 鏈鐢熶骇鏁伴噺楠岃瘉瑙勫垯
+ // 鐢熶骇鍚堟牸鏁伴噺楠岃瘉瑙勫垯
const validateQuantity = (rule, value, callback) => {
if (value === null || value === undefined || value === "") {
- callback(new Error("璇疯緭鍏ユ湰娆$敓浜ф暟閲�"));
+ callback(new Error("璇疯緭鍏ョ敓浜у悎鏍兼暟閲�"));
return;
}
const num = Number(value);
// 鏁存暟涓斿ぇ浜庣瓑浜�1
- if (isNaN(num) || !Number.isInteger(num) || num < 1) {
- callback(new Error("鏈鐢熶骇鏁伴噺蹇呴』澶т簬绛変簬1"));
+ if (isNaN(num) || !Number.isInteger(num) || num < 0) {
+ callback(new Error("鐢熶骇鍚堟牸鏁伴噺蹇呴』澶т簬绛変簬0"));
return;
}
callback();
@@ -436,7 +474,7 @@
scrapQty: [{ validator: validateScrapQty, trigger: "blur" }],
};
- // 澶勭悊鏈鐢熶骇鏁伴噺杈撳叆锛岄檺鍒跺繀椤诲ぇ浜庣瓑浜�1
+ // 澶勭悊鐢熶骇鍚堟牸鏁伴噺杈撳叆锛岄檺鍒跺繀椤诲ぇ浜庣瓑浜�0
const handleQuantityInput = value => {
if (value === "" || value === null || value === undefined) {
reportForm.quantity = null;
@@ -447,7 +485,7 @@
return;
}
// 濡傛灉灏忎簬1锛屾竻闄�
- if (num < 1) {
+ if (num < 0) {
reportForm.quantity = null;
return;
}
@@ -455,7 +493,7 @@
if (!Number.isInteger(num)) {
const intValue = Math.floor(num);
// 濡傛灉鍙栨暣鍚庡皬浜�1锛屾竻闄�
- if (intValue < 1) {
+ if (intValue < 0) {
reportForm.quantity = null;
return;
}
@@ -502,7 +540,7 @@
const data = reactive({
searchForm: {
workOrderNo: "",
- productOrderNpsNo: "",
+ npsNo: "",
},
});
const { searchForm } = toRefs(data);
@@ -611,12 +649,29 @@
const printTransferCard = () => {
window.print();
};
+ const currentWorkOrderRow = ref(null);
const openWorkOrderFiles = row => {
- workOrderFilesRef.value?.openDialog(row);
+ currentWorkOrderId.value = row.id;
+ currentWorkOrderRow.value = row;
+ fileDialogVisible.value = true;
};
- const showReportDialog = row => {
+ const showReportDialog = async row => {
+ if (row.productionOrderId) {
+ try {
+ const res = await listMaterialPickingDetail(row.productionOrderId);
+ const records = Array.isArray(res.data)
+ ? res.data
+ : res.data?.records || [];
+ if (res.code === 200 && records.length === 0) {
+ proxy.$modal.msgError("鏈鏂欐棤娉曟姤宸�");
+ return;
+ }
+ } catch (error) {
+ console.error("鏌ヨ棰嗘枡璇︽儏澶辫触:", error);
+ }
+ }
currentReportRowData.value = row;
reportForm.planQuantity = row.planQuantity;
reportForm.quantity =
@@ -630,6 +685,11 @@
reportForm.productionOrderRoutingOperationId =
row.productionOrderRoutingOperationId;
reportForm.productionOrderId = row.productionOrderId;
+ if (row.type == 0) {
+ reportForm.workHour = row.workHour || 0;
+ } else {
+ reportForm.workHour = 0;
+ }
nextTick(() => {
reportFormRef.value?.clearValidate();
if (row.productionOrderRoutingOperationId && row.productionOrderId) {
@@ -668,13 +728,13 @@
return;
}
- // 楠岃瘉鏈鐢熶骇鏁伴噺
+ // 楠岃瘉鐢熶骇鍚堟牸鏁伴噺
if (
reportForm.quantity === null ||
reportForm.quantity === undefined ||
reportForm.quantity === ""
) {
- ElMessageBox.alert("璇疯緭鍏ユ湰娆$敓浜ф暟閲�", "鎻愮ず", {
+ ElMessageBox.alert("璇疯緭鍏ョ敓浜у悎鏍兼暟閲�", "鎻愮ず", {
confirmButtonText: "纭畾",
});
return;
@@ -682,19 +742,19 @@
const quantity = Number(reportForm.quantity);
- if (isNaN(quantity) || quantity <= 0) {
- ElMessageBox.alert("鏈鐢熶骇鏁伴噺蹇呴』澶т簬0", "鎻愮ず", {
+ 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);
@@ -705,12 +765,12 @@
return;
}
- if (!isNaN(scrapQty) && scrapQty > quantity) {
- ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘澶т簬鏈鐢熶骇鏁伴噺", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- return;
- }
+ // if (!isNaN(scrapQty) && scrapQty > quantity) {
+ // ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘澶т簬鏈鐢熶骇鏁伴噺", "鎻愮ず", {
+ // confirmButtonText: "纭畾",
+ // });
+ // return;
+ // }
const productionOperationParamList = params.value.map(param => ({
...param,
@@ -729,6 +789,7 @@
productionOrderRoutingOperationId:
reportForm.productionOrderRoutingOperationId,
productionOrderId: reportForm.productionOrderId,
+ workHour: reportForm.workHour,
productionOperationParamList: productionOperationParamList,
};
@@ -797,6 +858,7 @@
};
onMounted(() => {
+ userStore.getInfo();
getList();
// 鑾峰彇鐢ㄦ埛鍒楄〃
userListNoPageByTenantId().then(res => {
--
Gitblit v1.9.3