From 4d3882045d317ddb3c7416f606ac738ca6ec2c01 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期三, 23 七月 2025 10:21:05 +0800 Subject: [PATCH] 1.生产管理联调 --- src/views/productionManagement/operationScheduling/components/formDia.vue | 268 ++++++++++++++++++++++++++++------------------------ 1 files changed, 144 insertions(+), 124 deletions(-) diff --git a/src/views/productionManagement/operationScheduling/components/formDia.vue b/src/views/productionManagement/operationScheduling/components/formDia.vue index 9e5f1eb..ad37c4b 100644 --- a/src/views/productionManagement/operationScheduling/components/formDia.vue +++ b/src/views/productionManagement/operationScheduling/components/formDia.vue @@ -2,162 +2,182 @@ <div> <el-dialog v-model="dialogFormVisible" - :title="operationType === 'add' ? '鏂板鍏ヨ亴' : '缂栬緫浜哄憳'" + title="宸ュ簭鎺掍骇" width="70%" @close="closeDia" > - <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> - <el-row :gutter="30"> - <el-col :span="12"> - <el-form-item label="椤圭洰鍚嶇О锛�" prop="staffNo"> - <el-input v-model="form.staffNo" placeholder="璇疯緭鍏�" clearable disabled/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浜у搧澶х被锛�" prop="staffNo"> - <el-input v-model="form.staffNo" placeholder="璇疯緭鍏�" clearable disabled/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="30"> - <el-col :span="12"> - <el-form-item label="鎬绘暟閲忥細" prop="staffNo"> - <el-input v-model="form.staffNo" placeholder="璇疯緭鍏�" clearable disabled/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="鏈鎺掍骇鏁伴噺锛�" prop="staffNo"> - <el-input-number - v-model="form.ticketsNum" - placeholder="璇疯緭鍏�" - :min="0" - :step="0.1" - :precision="2" - clearable - style="width: 100%" + <el-button type="primary" @click="addRow" style="margin-bottom: 10px;">鏂板</el-button> + <span style="font-size: 18px;margin-left: 10px">寰呮帓浜ф暟閲忥細{{pendingNum}}</span> + <el-table :data="tableData" border style="width: 100%" :summary-method="summarizeMainTable" show-summary :row-key="row => row.id"> + <el-table-column label="搴忓彿" width="60"> + <template #default="scope"> + {{ scope.$index + 1 }} + </template> + </el-table-column> + <el-table-column label="宸ュ簭" prop="process"> + <template #default="scope"> + <el-select v-model="scope.row.process" placeholder="璇烽�夋嫨" clearable style="width: 100%"> + <el-option + v-for="dict in work_step" + :key="dict.value" + :label="dict.label" + :value="dict.value" /> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="30"> - <el-col :span="12"> - <el-form-item label="鎺掍骇浜猴細" prop="staffName"> - <el-input v-model="form.staffName" placeholder="璇疯緭鍏�" clearable/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="鎺掍骇鏃ユ湡锛�" prop="contractStartTime"> - <el-date-picker - v-model="form.contractStartTime" - type="date" - placeholder="璇烽�夋嫨鏃ユ湡" - value-format="YYYY-MM-DD" - format="YYYY-MM-DD" - clearable - style="width: 100%" - /> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <div class="dialog-footer"> - <el-button type="primary" @click="submitForm">纭</el-button> - <el-button @click="closeDia">鍙栨秷</el-button> - </div> - </template> + </el-select> + </template> + </el-table-column> + <el-table-column label="鍗曚綅" prop="unit"> + <template #default="scope"> + <el-input v-model="scope.row.unit" placeholder="璇疯緭鍏ュ崟浣�" /> + </template> + </el-table-column> + <el-table-column label="鎺掍骇鏁伴噺" width="200" prop="schedulingNum"> + <template #default="scope"> + <el-input-number + v-model="scope.row.schedulingNum" + placeholder="璇疯緭鍏�" + :min="0" + :step="0.1" + :precision="2" + clearable + style="width: 100%" + /> + </template> + </el-table-column> + <el-table-column label="宸ユ椂瀹氶" width="200" prop="workHours"> + <template #default="scope"> + <el-input-number + v-model="scope.row.workHours" + placeholder="璇疯緭鍏�" + :min="0" + :step="0.1" + :precision="2" + clearable + style="width: 100%" + /> + </template> + </el-table-column> + <el-table-column label="鎺掍骇鏃ユ湡" prop="schedulingDate"> + <template #default="scope"> + <el-date-picker v-model="scope.row.schedulingDate" type="date" placeholder="閫夋嫨鏃ユ湡" style="width: 100%;" value-format="YYYY-MM-DD" format="YYYY-MM-DD"/> + </template> + </el-table-column> + <el-table-column label="鎺掍骇浜�" prop="schedulingUserId"> + <template #default="scope"> + <el-select + v-model="scope.row.schedulingUserId" + placeholder="閫夋嫨浜哄憳" + style="width: 100%;" + > + <el-option + v-for="user in userList" + :key="user.userId" + :label="user.nickName" + :value="user.userId" + /> + </el-select> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔" width="80"> + <template #default="scope"> + <el-button type="danger" size="small" @click="removeRow(scope.$index)">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭</el-button> + <el-button @click="closeDia">鍙栨秷</el-button> + </div> + </template> </el-dialog> </div> </template> <script setup> import {ref} from "vue"; -import {getStaffJoinInfo, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js"; +import {userListNoPageByTenantId} from "@/api/system/user.js"; +import {processScheduling} from "@/api/productionManagement/operationScheduling.js"; const { proxy } = getCurrentInstance() +const { work_step } = proxy.useDict("work_step") const emit = defineEmits(['close']) const dialogFormVisible = ref(false); const operationType = ref('') -const data = reactive({ - form: { - staffNo: "", - staffName: "", - sex: "", - nativePlace: "", - postJob: "", - adress: "", - firstStudy: "", - profession: "", - identityCard: "", - age: 0, - phone: "", - emergencyContact: "", - emergencyContactPhone: "", - contractTerm: 0, - contractStartTime: "", - contractEndTime: "", - staffState: "", - }, - rules: { - staffNo: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" },], - staffName: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - sex: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - nativePlace: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - postJob: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - adress: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - firstStudy: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - profession: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - identityCard: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - age: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - phone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - emergencyContact: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - emergencyContactPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - contractTerm: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - contractStartTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - contractEndTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - }, -}); -const { form, rules } = toRefs(data); +const tableData = ref([ + { process: '', schedulingDate: '', schedulingNum: '', schedulingUserId: '', workHours: '', unit: '' } +]); +const unitFromRow = ref(''); +const idFromRow = ref(''); +const pendingNum = ref(''); +const userList = ref([]) // 鎵撳紑寮规 const openDialog = (type, row) => { operationType.value = type; dialogFormVisible.value = true; - if (operationType.value === 'edit') { - getStaffJoinInfo(row.id).then(res => { - form.value = {...res.data} - }) + userListNoPageByTenantId().then((res) => { + userList.value = res.data; + }); + pendingNum.value = row.pendingNum + if (row && row.unit !== undefined) { + unitFromRow.value = row.unit; + idFromRow.value = row.id; + tableData.value.forEach(item => { + item.unit = row.unit; + item.id = row.id; + }); + } else { + unitFromRow.value = ''; } } -// 鎻愪氦浜у搧琛ㄥ崟 const submitForm = () => { - proxy.$refs.formRef.validate(valid => { - if (valid) { - form.value.staffState = 1 - if (operationType.value === "add") { - staffJoinAdd(form.value).then(res => { - proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); - closeDia(); - }) - } else { - staffJoinUpdate(form.value).then(res => { - proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); - closeDia(); - }) - } - } - }) + // 1. 妫�鏌ユ瘡涓�琛屾槸鍚﹀~鍐欏畬鏁� + for (let i = 0; i < tableData.value.length; i++) { + const row = tableData.value[i]; + if ( + !row.process || + !row.schedulingDate || + row.schedulingNum === '' || row.schedulingNum === null || + !row.schedulingUserId || + row.workHours === '' || row.workHours === null || + !row.unit + ) { + proxy.$modal.msgError(`绗�${i + 1}琛屾暟鎹湭濉啓瀹屾暣`); + return; + } + } + // 2. 鍚堣鎺掍骇鏁伴噺 + const totalSchedulingNum = tableData.value.reduce((sum, row) => { + return sum + Number(row.schedulingNum || 0); + }, 0); + if (totalSchedulingNum > Number(pendingNum.value)) { + proxy.$modal.msgError('鎺掍骇鏁伴噺鍚堣涓嶈兘瓒呰繃寰呮帓浜ф暟閲�'); + return; + } + processScheduling(tableData.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeDia(); + }) } - +const summarizeMainTable = (param) => { + return proxy.summarizeTable(param, ['schedulingNum']); +}; // 鍏抽棴寮规 const closeDia = () => { - proxy.resetForm("formRef"); dialogFormVisible.value = false; emit('close') }; defineExpose({ openDialog, }); + +const addRow = () => { + tableData.value.push({ id: idFromRow.value, process: '', unit: unitFromRow.value, schedulingNum: '', workHours: '', schedulingDate: '', schedulingUserId: '' }); +}; +const removeRow = (index) => { + tableData.value.splice(index, 1); +}; </script> <style scoped> -- Gitblit v1.9.3