<template>
|
<div>
|
<el-dialog
|
v-model="isShow"
|
title="编辑部件"
|
width="760"
|
@close="closeModal"
|
>
|
<el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
|
<el-row :gutter="16">
|
<el-col :span="12">
|
<el-form-item
|
label="部件名称"
|
prop="name"
|
:rules="[
|
{
|
required: true,
|
message: '请输入部件名称',
|
}
|
]"
|
>
|
<el-input v-model="formState.name" placeholder="请输入部件名称" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="部件编号" prop="no">
|
<el-input v-model="formState.no" placeholder="请输入部件编号" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item
|
label="部件类型"
|
prop="type"
|
:rules="[
|
{
|
required: true,
|
message: '请选择部件类型',
|
}
|
]"
|
>
|
<el-select v-model="formState.type" placeholder="请选择部件类型">
|
<el-option label="加工" :value="1" />
|
<el-option label="刮板冷芯制作" :value="2" />
|
<el-option label="管路组对" :value="3" />
|
<el-option label="罐体连接及调试" :value="4" />
|
<el-option label="测试打压" :value="5" />
|
<el-option label="其他" :value="6" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item
|
label="计划工时(小时)"
|
prop="salaryQuota"
|
:rules="[
|
{ validator: validateNonNegativeSalaryQuota, trigger: ['blur', 'change'] }
|
]"
|
>
|
<el-input v-model="formState.salaryQuota" type="number" :step="0.001" :min="0" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="计划人员" prop="plannerId">
|
<el-select
|
v-model="formState.plannerId"
|
placeholder="请选择计划人员"
|
clearable
|
filterable
|
style="width: 100%"
|
@change="handlePlannerChange"
|
>
|
<el-option
|
v-for="item in plannerOptions"
|
:key="item.userId"
|
:label="item.nickName"
|
:value="item.userId"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="计划执行人员" prop="executorId">
|
<el-select
|
v-model="formState.executorId"
|
placeholder="请选择计划执行人员"
|
clearable
|
filterable
|
style="width: 100%"
|
@change="handleExecutorChange"
|
>
|
<el-option
|
v-for="item in plannerOptions"
|
:key="item.userId"
|
:label="item.nickName"
|
:value="item.userId"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="是否质检" prop="isQuality">
|
<el-switch v-model="formState.isQuality" :active-value="true" inactive-value="false"/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="24">
|
<el-form-item label="备注" prop="remark">
|
<el-input v-model="formState.remark" type="textarea" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<template #footer>
|
<div class="dialog-footer">
|
<el-button type="primary" @click="handleSubmit">确认</el-button>
|
<el-button @click="closeModal">取消</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script setup>
|
import { ref, computed, getCurrentInstance, watch, onMounted } from "vue";
|
import {update} from "@/api/productionManagement/productionProcess.js";
|
import { userListNoPageByTenantId } from "@/api/system/user.js";
|
|
const props = defineProps({
|
visible: {
|
type: Boolean,
|
required: true,
|
},
|
|
record: {
|
type: Object,
|
required: true,
|
}
|
});
|
|
const emit = defineEmits(['update:visible', 'completed']);
|
|
// 响应式数据(替代选项式的 data)
|
const formState = ref({
|
id: props.record.id,
|
name: props.record.name,
|
type: props.record.type,
|
no: props.record.no,
|
remark: props.record.remark,
|
salaryQuota: props.record.salaryQuota,
|
plannerId: props.record.plannerId,
|
plannerName: props.record.plannerName,
|
executorId: props.record.executorId,
|
executorName: props.record.executorName,
|
isQuality: props.record.isQuality,
|
});
|
const plannerOptions = ref([]);
|
|
const isShow = computed({
|
get() {
|
return props.visible;
|
},
|
set(val) {
|
emit('update:visible', val);
|
},
|
});
|
|
// 监听 record 变化,更新表单数据
|
watch(() => props.record, (newRecord) => {
|
if (newRecord && isShow.value) {
|
formState.value = {
|
id: newRecord.id,
|
name: newRecord.name || '',
|
type: newRecord.type,
|
no: newRecord.no || '',
|
remark: newRecord.remark || '',
|
salaryQuota: newRecord.salaryQuota || '',
|
plannerId: newRecord.plannerId,
|
plannerName: newRecord.plannerName || '',
|
executorId: newRecord.executorId,
|
executorName: newRecord.executorName || '',
|
isQuality: props.record.isQuality,
|
};
|
}
|
}, { immediate: true, deep: true });
|
|
// 监听弹窗打开,重新初始化表单数据
|
watch(() => props.visible, (visible) => {
|
if (visible && props.record) {
|
formState.value = {
|
id: props.record.id,
|
name: props.record.name || '',
|
type: props.record.type,
|
no: props.record.no || '',
|
remark: props.record.remark || '',
|
salaryQuota: props.record.salaryQuota || '',
|
plannerId: props.record.plannerId,
|
plannerName: props.record.plannerName || '',
|
executorId: props.record.executorId,
|
executorName: props.record.executorName || '',
|
isQuality: props.record.isQuality,
|
};
|
}
|
});
|
|
let { proxy } = getCurrentInstance()
|
|
const validateNonNegativeSalaryQuota = (rule, value, callback) => {
|
if (value === '' || value === null || value === undefined) {
|
callback(new Error('请输入计划工时'));
|
return;
|
}
|
const num = Number(value);
|
if (Number.isNaN(num) || num < 0) {
|
callback(new Error('计划工时不能小于0'));
|
return;
|
}
|
callback();
|
};
|
|
const getPlannerOptions = async () => {
|
try {
|
const res = await userListNoPageByTenantId();
|
plannerOptions.value = res?.data || [];
|
if (!formState.value.plannerId && formState.value.plannerName) {
|
const selectedUser = plannerOptions.value.find(item => item.nickName === formState.value.plannerName);
|
formState.value.plannerId = selectedUser?.userId;
|
}
|
} catch (e) {
|
plannerOptions.value = [];
|
}
|
};
|
|
const handlePlannerChange = value => {
|
const selectedUser = plannerOptions.value.find(item => String(item.userId) === String(value));
|
formState.value.plannerName = selectedUser?.nickName || '';
|
};
|
|
const handleExecutorChange = value => {
|
const selectedUser = plannerOptions.value.find(item => String(item.userId) === String(value));
|
formState.value.executorName = selectedUser?.nickName || '';
|
};
|
|
const closeModal = () => {
|
isShow.value = false;
|
};
|
|
const handleSubmit = () => {
|
proxy.$refs["formRef"].validate(valid => {
|
if (valid) {
|
update(formState.value).then(res => {
|
// 关闭模态框
|
isShow.value = false;
|
// 告知父组件已完成
|
emit('completed');
|
proxy.$modal.msgSuccess("提交成功");
|
})
|
}
|
})
|
};
|
|
onMounted(() => {
|
getPlannerOptions();
|
});
|
|
defineExpose({
|
closeModal,
|
handleSubmit,
|
isShow,
|
});
|
</script>
|