<template>
|
<div>
|
<el-dialog
|
v-model="dialogFormVisible"
|
title="工序排产"
|
width="70%"
|
@close="closeDia"
|
>
|
<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-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 {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 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;
|
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 = () => {
|
// 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 = () => {
|
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>
|
|
</style>
|