<template>
|
<FormDialog
|
v-model="visible"
|
:title="id ? '编辑设备保养计划' : '新增设备保养计划'"
|
width="500px"
|
@confirm="sendForm"
|
@cancel="handleCancel"
|
@close="handleClose"
|
>
|
<el-form :model="form" label-width="100px">
|
<el-form-item label="设备名称">
|
<el-select
|
v-model="form.deviceLedgerId"
|
@change="setDeviceModel"
|
placeholder="请选择设备"
|
filterable
|
default-first-option
|
:reserve-keyword="false"
|
>
|
<el-option
|
v-for="(item, index) in deviceOptions"
|
:key="index"
|
:label="item.deviceName"
|
:value="item.id"
|
></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="规格型号">
|
<el-input
|
v-model="form.deviceModel"
|
placeholder="请输入规格型号"
|
disabled
|
/>
|
</el-form-item>
|
<el-form-item label="录入人">
|
<el-select
|
v-model="form.createUser"
|
placeholder="请选择"
|
filterable
|
default-first-option
|
:reserve-keyword="false"
|
clearable
|
>
|
<el-option
|
v-for="item in userList"
|
:key="item.userId"
|
:label="item.nickName"
|
:value="item.userId"
|
/>
|
</el-select>
|
</el-form-item>
|
<el-form-item v-if="id" label="保修状态">
|
<el-select v-model="form.status">
|
<el-option label="待保修" :value="0"></el-option>
|
<el-option label="完结" :value="1"></el-option>
|
<el-option label="失败" :value="2"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="计划保养日期">
|
<el-date-picker
|
style="width: 100%"
|
v-model="form.maintenancePlanTime"
|
format="YYYY-MM-DD"
|
value-format="YYYY-MM-DD HH:mm:ss"
|
type="date"
|
placeholder="请选择计划保养日期日期"
|
clearable
|
/>
|
</el-form-item>
|
</el-form>
|
</FormDialog>
|
</template>
|
|
<script setup>
|
import FormDialog from "@/components/Dialog/FormDialog.vue";
|
import {
|
addUpkeep,
|
editUpkeep,
|
getUpkeepById,
|
} from "@/api/equipmentManagement/upkeep";
|
import { ElMessage } from "element-plus";
|
import useFormData from "@/hooks/useFormData";
|
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
|
import { onMounted } from "vue";
|
import dayjs from "dayjs";
|
import { userListNoPage } from "@/api/system/user.js";
|
|
defineOptions({
|
name: "设备保养新增计划",
|
});
|
|
const emits = defineEmits(["ok"]);
|
|
const id = ref();
|
const visible = ref(false);
|
const loading = ref(false);
|
|
const deviceOptions = ref([]);
|
const loadDeviceName = async () => {
|
const { data } = await getDeviceLedger();
|
deviceOptions.value = data;
|
};
|
|
const { form, resetForm } = useFormData({
|
deviceLedgerId: undefined, // 设备Id
|
deviceName: undefined, // 设备名称
|
deviceModel: undefined, // 规格型号
|
maintenancePlanTime: undefined, // 计划保养日期
|
createUser: undefined, // 录入人
|
status: 0, //保修状态
|
});
|
|
const setDeviceModel = (deviceId) => {
|
const option = deviceOptions.value.find((item) => item.id === deviceId);
|
form.deviceModel = option.deviceModel;
|
};
|
|
/**
|
* @desc 设置表单内容
|
* @param data 设备信息
|
*/
|
const setForm = (data) => {
|
form.deviceLedgerId = data.deviceLedgerId;
|
form.deviceName = data.deviceName;
|
form.deviceModel = data.deviceModel;
|
form.createUser = Number(data.createUser);
|
form.status = data.status;
|
form.maintenancePlanTime = dayjs(data.maintenancePlanTime).format(
|
"YYYY-MM-DD HH:mm:ss"
|
);
|
};
|
|
// 用户列表
|
const userList = ref([]);
|
|
onMounted(() => {
|
loadDeviceName();
|
userListNoPage().then((res) => {
|
userList.value = res.data;
|
});
|
});
|
|
const openEdit = async (editId) => {
|
const { data } = await getUpkeepById(editId);
|
id.value = editId;
|
visible.value = true;
|
await nextTick();
|
setForm(data);
|
};
|
|
const sendForm = async () => {
|
loading.value = true;
|
try {
|
const { code } = id.value
|
? await editUpkeep({ id: unref(id), ...form })
|
: await addUpkeep(form);
|
if (code == 200) {
|
ElMessage.success(`${id.value ? "编辑" : "新增"}计划成功`);
|
visible.value = false;
|
emits("ok");
|
}
|
} finally {
|
loading.value = false;
|
}
|
};
|
|
const handleCancel = () => {
|
resetForm();
|
visible.value = false;
|
};
|
|
const handleClose = () => {
|
resetForm();
|
visible.value = false;
|
};
|
|
const openModal = () => {
|
id.value = undefined;
|
visible.value = true;
|
};
|
|
defineExpose({
|
openModal,
|
openEdit,
|
});
|
</script>
|
|
<style lang="scss" scoped></style>
|