src/views/equipmentManagement/repair/Form/MaintainForm.vue
ÎļþÒÑɾ³ý src/views/equipmentManagement/repair/Form/RepairForm.vue
ÎļþÒÑɾ³ý src/views/equipmentManagement/repair/Modal/MaintainModal.vue
@@ -1,53 +1,108 @@ <template> <el-dialog v-model="visible" :title="modalOptions.title" direction="ltr" draggable> <MaintainForm ref="maintainFormRef" /> <template #footer> <el-button type="primary" @click="sendForm" :loading="loading"> {{ modalOptions.confirmText }} </el-button> <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button> </template> </el-dialog> <FormDialog v-model="visible" :title="'设å¤ç»´ä¿®'" width="500px" @confirm="sendForm" @cancel="handleCancel" @close="handleClose" > <el-form :model="form" label-width="80px"> <el-form-item label="维修人"> <el-input v-model="form.maintenanceName" placeholder="请è¾å ¥ç»´ä¿®äºº" /> </el-form-item> <el-form-item label="ç»´ä¿®ç»æ"> <el-input v-model="form.maintenanceResult" placeholder="请è¾å ¥ç»´ä¿®ç»æ" /> </el-form-item> <el-form-item 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 v-model="form.maintenanceTime" placeholder="è¯·éæ©ç»´ä¿®æ¥æ" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" clearable style="width: 100%" /> </el-form-item> </el-form> </FormDialog> </template> <script setup> import { useModal } from "@/hooks/useModal"; import MaintainForm from "../Form/MaintainForm.vue"; import FormDialog from "@/components/Dialog/FormDialog.vue"; import { addMaintain } from "@/api/equipmentManagement/repair"; import useFormData from "@/hooks/useFormData"; import useUserStore from "@/store/modules/user"; import dayjs from "dayjs"; import { ElMessage } from "element-plus"; defineOptions({ name: "ç»´ä¿®æ¨¡ææ¡", }); const maintainFormRef = ref(); const emits = defineEmits(["ok"]); const { id, visible, loading, openModal, modalOptions, handleConfirm, closeModal, } = useModal({ title: "设å¤ç»´ä¿®" }); // ä¿åæ¥ä¿®è®°å½çid const repairId = ref(); const visible = ref(false); const loading = ref(false); const userStore = useUserStore(); const { form, resetForm } = useFormData({ maintenanceName: undefined, // ç»´ä¿®åç§° maintenanceResult: undefined, // ç»´ä¿®ç»æ maintenanceTime: undefined, // ç»´ä¿®æ¥æ status: 0, }); const setForm = (data) => { form.maintenanceName = data.maintenanceName ?? userStore.nickName; form.maintenanceResult = data.maintenanceResult; form.maintenanceTime = data.maintenanceTime ? dayjs(data.maintenanceTime).format("YYYY-MM-DD HH:mm:ss") : dayjs().format("YYYY-MM-DD HH:mm:ss"); form.status = 1; // é»è®¤ç¶æä¸ºå®ç» }; const sendForm = async () => { loading.value = true; const form = await maintainFormRef.value.getForm(); const { code } = await addMaintain({ id: id.value, ...form }); try { const { code } = await addMaintain({ id: repairId.value, ...form }); if (code == 200) { ElMessage.success("ç»´ä¿®æå"); emits("ok"); maintainFormRef.value.resetForm(); closeModal(); resetForm(); visible.value = false; } } finally { loading.value = false; } }; const handleCancel = () => { resetForm(); visible.value = false; }; const handleClose = () => { resetForm(); visible.value = false; }; const open = async (id, row) => { openModal(id); repairId.value = id; // ä¿åæ¥ä¿®è®°å½çid visible.value = true; await nextTick(); maintainFormRef.value.setForm(row); setForm(row); }; defineExpose({ src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -1,24 +1,93 @@ <template> <el-dialog v-model="visible" :title="modalOptions.title" @close="close" draggable> <RepairForm ref="repairFormRef" :id="id" /> <template #footer> <el-button type="primary" @click="sendForm" :loading="loading"> {{ modalOptions.confirmText }} </el-button> <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button> </template> </el-dialog> <FormDialog v-model="visible" :title="id ? 'ç¼è¾è®¾å¤æ¥ä¿®' : 'æ°å¢è®¾å¤æ¥ä¿®'" width="800px" @confirm="sendForm" @cancel="handleCancel" @close="handleClose" > <el-form :model="form" label-width="100px"> <el-row> <el-col :span="12"> <el-form-item label="设å¤åç§°"> <el-select v-model="form.deviceLedgerId" @change="setDeviceModel" filterable> <el-option v-for="(item, index) in deviceOptions" :key="index" :label="item.deviceName" :value="item.id" ></el-option> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="è§æ ¼åå·"> <el-input v-model="form.deviceModel" placeholder="请è¾å ¥è§æ ¼åå·" disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="æ¥ä¿®æ¥æ"> <el-date-picker v-model="form.repairTime" placeholder="è¯·éæ©æ¥ä¿®æ¥æ" format="YYYY-MM-DD" value-format="YYYY-MM-DD" type="date" clearable style="width: 100%" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="æ¥ä¿®äºº"> <el-input v-model="form.repairName" placeholder="请è¾å ¥æ¥ä¿®äºº" /> </el-form-item> </el-col> </el-row> <el-row v-if="id"> <el-col :span="12"> <el-form-item 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-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="æ éç°è±¡"> <el-input v-model="form.remark" :rows="2" type="textarea" placeholder="请è¾å ¥æ éç°è±¡" /> </el-form-item> </el-col> </el-row> </el-form> </FormDialog> </template> <script setup> import { useModal } from "@/hooks/useModal"; import RepairForm from "../Form/RepairForm.vue"; import FormDialog from "@/components/Dialog/FormDialog.vue"; import { addRepair, editRepair, getRepairById, } from "@/api/equipmentManagement/repair"; import { ElMessage } from "element-plus"; import dayjs from "dayjs"; import useFormData from "@/hooks/useFormData"; import { getDeviceLedger } from "@/api/equipmentManagement/ledger"; import useUserStore from "@/store/modules/user"; defineOptions({ name: "è®¾å¤æ¥ä¿®å¼¹çª", @@ -26,48 +95,83 @@ const emits = defineEmits(["ok"]); const repairFormRef = ref(); const { id, visible, loading, openModal, modalOptions, handleConfirm, closeModal, } = useModal({ title: "è®¾å¤æ¥ä¿®" }); const id = ref(); const visible = ref(false); const loading = ref(false); const userStore = useUserStore(); const deviceOptions = ref([]); const loadDeviceName = async () => { const { data } = await getDeviceLedger(); deviceOptions.value = data; }; const { form, resetForm } = useFormData({ deviceLedgerId: undefined, // 设å¤Id deviceName: undefined, // 设å¤åç§° deviceModel: undefined, // è§æ ¼åå· repairTime: dayjs().format("YYYY-MM-DD"), // æ¥ä¿®æ¥æï¼é»è®¤å½å¤© repairName: userStore.nickName, // æ¥ä¿®äºº remark: undefined, // æ éç°è±¡ status: 0, // æ¥ä¿®ç¶æ }); const setDeviceModel = (deviceId) => { const option = deviceOptions.value.find((item) => item.id === deviceId); form.deviceModel = option.deviceModel; }; const setForm = (data) => { form.deviceLedgerId = data.deviceLedgerId; form.deviceName = data.deviceName; form.deviceModel = data.deviceModel; form.repairTime = data.repairTime; form.repairName = data.repairName; form.remark = data.remark; form.status = data.status; }; const sendForm = async () => { loading.value = true; const form = await repairFormRef.value.getForm(); try { const { code } = id.value ? await editRepair({ id: unref(id), ...form }) : await addRepair(form); if (code == 200) { ElMessage.success(`${id ? "ç¼è¾" : "æ°å¢"}æ¥ä¿®æå`); closeModal(); 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 openAdd = async () => { openModal(); id.value = undefined; visible.value = true; await nextTick(); await repairFormRef.value.loadDeviceName(); await loadDeviceName(); }; const openEdit = async (id) => { const { data } = await getRepairById(id); openModal(id); const openEdit = async (editId) => { const { data } = await getRepairById(editId); id.value = editId; visible.value = true; await nextTick(); await repairFormRef.value.loadDeviceName(); await repairFormRef.value.setForm(data); }; const close = () => { repairFormRef.value.resetForm(); closeModal(); await loadDeviceName(); setForm(data); }; defineExpose({ @@ -75,3 +179,5 @@ openEdit, }); </script> <style lang="scss" scoped></style> src/views/equipmentManagement/repair/index.vue
@@ -68,14 +68,6 @@ <div class="actions"> <el-text class="mx-1" size="large">è®¾å¤æ¥ä¿®</el-text> <div> <el-button type="primary" icon="Plus" :disabled="multipleList.length !== 1" @click="addMaintain" > æ°å¢ç»´ä¿® </el-button> <el-button type="success" icon="Van" @click="addRepair"> æ°å¢æ¥ä¿® </el-button> @@ -85,7 +77,7 @@ <el-button type="danger" icon="Delete" :disabled="multipleList.length <= 0" :disabled="multipleList.length <= 0 || hasFinishedStatus" @click="delRepairByIds(multipleList.map((item) => item.id))" > æ¹éå é¤ @@ -113,16 +105,24 @@ <template #operation="{ row }"> <el-button type="primary" text icon="editPen" link :disabled="row.status === 1" @click="editRepair(row.id)" > ç¼è¾ </el-button> <el-button type="success" link :disabled="row.status === 1" @click="addMaintain(row)" > ç»´ä¿® </el-button> <el-button type="danger" text icon="delete" link :disabled="row.status === 1" @click="delRepairByIds(row.id)" > å é¤ @@ -138,7 +138,7 @@ <script setup> import { usePaginationApi } from "@/hooks/usePaginationApi"; import { getRepairPage, delRepair } from "@/api/equipmentManagement/repair"; import { onMounted, getCurrentInstance } from "vue"; import { onMounted, getCurrentInstance, computed } from "vue"; import RepairModal from "./Modal/RepairModal.vue"; import { ElMessageBox, ElMessage } from "element-plus"; import dayjs from "dayjs"; @@ -258,6 +258,11 @@ multipleList.value = selectionList; }; // æ£æ¥éä¸çè®°å½ä¸æ¯å¦æå®ç»ç¶æç const hasFinishedStatus = computed(() => { return multipleList.value.some(item => item.status === 1) }) // æ°å¢æ¥ä¿® const addRepair = () => { repairModalRef.value.openAdd(); @@ -269,8 +274,7 @@ }; // æ°å¢ç»´ä¿® const addMaintain = () => { const row = multipleList.value[0]; const addMaintain = (row) => { maintainModalRef.value.open(row.id, row); }; @@ -282,6 +286,18 @@ // åè¡å é¤ const delRepairByIds = async (ids) => { // æ£æ¥æ¯å¦æå®ç»ç¶æçè®°å½ const idsArray = Array.isArray(ids) ? ids : [ids]; const hasFinished = idsArray.some(id => { const record = dataList.value.find(item => item.id === id); return record && record.status === 1; }); if (hasFinished) { ElMessage.warning('ä¸è½å é¤ç¶æä¸ºå®ç»çè®°å½'); return; } ElMessageBox.confirm("确认å 餿¥ä¿®æ°æ®, æ¤æä½ä¸å¯é?", "è¦å", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue
ÎļþÒÑɾ³ý src/views/equipmentManagement/upkeep/Form/MaintenanceModal.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,123 @@ <template> <FormDialog v-model="visible" :title="'设å¤ä¿å »'" width="500px" @confirm="sendForm" @cancel="handleCancel" @close="handleClose" > <el-form :model="form" label-width="100px"> <el-form-item label="å®é ä¿å »äºº"> <el-input v-model="form.maintenanceActuallyName" placeholder="请è¾å ¥å®é ä¿å »äºº" ></el-input> </el-form-item> <el-form-item label="å®é ä¿å »æ¥æ"> <el-date-picker v-model="form.maintenanceActuallyTime" placeholder="è¯·éæ©å®é ä¿å »æ¥æ" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" clearable style="width: 100%" /> </el-form-item> <el-form-item 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-input v-model="form.maintenanceResult" placeholder="请è¾å ¥ä¿å »ç»æ" type="text" /> </el-form-item> </el-form> </FormDialog> </template> <script setup> import FormDialog from "@/components/Dialog/FormDialog.vue"; import { addMaintenance } from "@/api/equipmentManagement/upkeep"; import useFormData from "@/hooks/useFormData"; import dayjs from "dayjs"; import useUserStore from "@/store/modules/user"; import { ElMessage } from "element-plus"; defineOptions({ name: "ä¿å »æ¨¡ææ¡", }); const emits = defineEmits(["ok"]); // ä¿å计åä¿å »è®°å½çid const planId = ref(); const visible = ref(false); const loading = ref(false); const userStore = useUserStore(); const { form, resetForm } = useFormData({ maintenanceActuallyName: undefined, // å®é ä¿å »äºº maintenanceActuallyTime: undefined, // å®é ä¿å »æ¥æ maintenanceResult: undefined, // ä¿å »ç»æ status: 0, // ä¿å »ç¶æ }); const setForm = (data) => { form.maintenanceActuallyName = data.maintenanceActuallyName ?? userStore.nickName; form.maintenanceActuallyTime = data.maintenanceActuallyTime ? dayjs(data.maintenanceActuallyTime).format("YYYY-MM-DD HH:mm:ss") : dayjs().format("YYYY-MM-DD HH:mm:ss"); form.maintenanceResult = data.maintenanceResult; form.status = 1; // é»è®¤ç¶æä¸ºå®ç» }; /** * @desc ä¿åä¿å » */ const sendForm = async () => { loading.value = true; try { const { code } = await addMaintenance({ id: planId.value, ...form }); if (code == 200) { ElMessage.success("ä¿å »æå"); emits("ok"); resetForm(); visible.value = false; } } finally { loading.value = false; } }; const handleCancel = () => { resetForm(); visible.value = false; }; const handleClose = () => { resetForm(); visible.value = false; }; const open = async (id, row) => { planId.value = id; // ä¿å计åä¿å »è®°å½çid visible.value = true; await nextTick(); setForm(row); }; defineExpose({ open, }); </script> <style lang="scss" scoped></style> src/views/equipmentManagement/upkeep/Form/PlanForm.vue
ÎļþÒÑɾ³ý src/views/equipmentManagement/upkeep/Form/PlanModal.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,188 @@ <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> src/views/equipmentManagement/upkeep/Form/formDia.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,304 @@ <template> <FormDialog v-model="dialogVisitable" :title="operationType === 'add' ? 'æ°å¢ä¿å »ä»»å¡' : 'ç¼è¾ä¿å »ä»»å¡'" width="800px" :operation-type="operationType" @confirm="submitForm" @cancel="cancel" @close="cancel" > <el-form ref="formRef" :model="form" :rules="rules" label-width="120px"> <el-row> <el-col :span="12"> <el-form-item label="设å¤åç§°" prop="taskId"> <el-select v-model="form.taskId" @change="setDeviceModel" filterable> <el-option v-for="(item, index) in deviceOptions" :key="index" :label="item.deviceName" :value="item.id" ></el-option> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="è§æ ¼åå·"> <el-input v-model="form.deviceModel" placeholder="请è¾å ¥è§æ ¼åå·" disabled /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> <el-form-item label="å½å ¥äºº" prop="inspector"> <el-select v-model="form.inspector" filterable default-first-option :reserve-keyword="false" placeholder="è¯·éæ©" clearable > <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ç»è®°æ¶é´" prop="registrationDate"> <el-date-picker v-model="form.registrationDate" type="date" placeholder="éæ©ç»è®°æ¥æ" format="YYYY-MM-DD" value-format="YYYY-MM-DD" style="width: 100%" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> <el-form-item label="ä»»å¡é¢ç" prop="frequencyType"> <el-select v-model="form.frequencyType" placeholder="è¯·éæ©" clearable> <el-option label="æ¯æ¥" value="DAILY"/> <el-option label="æ¯å¨" value="WEEKLY"/> <el-option label="æ¯æ" value="MONTHLY"/> <el-option label="å£åº¦" value="QUARTERLY"/> </el-select> </el-form-item> </el-col> <el-col :span="12" v-if="form.frequencyType === 'DAILY' && form.frequencyType"> <el-form-item label="æ¥æ" prop="frequencyDetail"> <el-time-picker v-model="form.frequencyDetail" placeholder="éæ©æ¶é´" format="HH:mm" value-format="HH:mm" /> </el-form-item> </el-col> <el-col :span="12" v-if="form.frequencyType === 'WEEKLY' && form.frequencyType"> <el-form-item label="æ¥æ" prop="frequencyDetail"> <el-select v-model="form.week" placeholder="è¯·éæ©" clearable style="width: 50%"> <el-option label="å¨ä¸" value="MON"/> <el-option label="å¨äº" value="TUE"/> <el-option label="å¨ä¸" value="WED"/> <el-option label="å¨å" value="THU"/> <el-option label="å¨äº" value="FRI"/> <el-option label="å¨å " value="SAT"/> <el-option label="卿¥" value="SUN"/> </el-select> <el-time-picker v-model="form.time" placeholder="éæ©æ¶é´" format="HH:mm" value-format="HH:mm" style="width: 50%"/> </el-form-item> </el-col> <el-col :span="12" v-if="form.frequencyType === 'MONTHLY' && form.frequencyType"> <el-form-item label="æ¥æ" prop="frequencyDetail"> <el-date-picker v-model="form.frequencyDetail" type="datetime" clearable placeholder="éæ©å¼å§æ¥æ" format="DD,HH:mm" value-format="DD,HH:mm" /> </el-form-item> </el-col> <el-col :span="12" v-if="form.frequencyType === 'QUARTERLY' && form.frequencyType"> <el-form-item label="æ¥æ" prop="frequencyDetail"> <el-date-picker v-model="form.frequencyDetail" type="datetime" clearable placeholder="éæ©å¼å§æ¥æ" format="MM,DD,HH:mm" value-format="MM,DD,HH:mm" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> <el-form-item label="夿³¨" prop="remarks"> <el-input v-model="form.remarks" placeholder="请è¾å ¥å¤æ³¨" type="textarea" /> </el-form-item> </el-col> </el-row> </el-form> </FormDialog> </template> <script setup> import FormDialog from "@/components/Dialog/FormDialog.vue"; import { reactive, ref, getCurrentInstance, toRefs } from "vue"; import {userListNoPageByTenantId} from "@/api/system/user.js"; import { getDeviceLedger } from "@/api/equipmentManagement/ledger"; import { deviceMaintenanceTaskAdd, deviceMaintenanceTaskEdit } from "@/api/equipmentManagement/upkeep"; import { getCurrentDate } from "@/utils/index.js"; import useUserStore from "@/store/modules/user.js"; const { proxy } = getCurrentInstance() const emit = defineEmits() const dialogVisitable = ref(false); const operationType = ref('add'); const deviceOptions = ref([]); const userStore = useUserStore(); const data = reactive({ form: { taskId: undefined, taskName: undefined, // å½å ¥äººï¼åéä¸ä¸ªç¨æ· id inspector: undefined, remarks: '', frequencyType: '', frequencyDetail: '', week: '', time: '', deviceModel: undefined, // è§æ ¼åå· registrationDate: '' }, rules: { taskId: [{ required: true, message: "è¯·éæ©è®¾å¤", trigger: "change" },], inspector: [{ required: true, message: "è¯·éæ©å½å ¥äºº", trigger: "blur" },], registrationDate: [{ required: true, message: "è¯·éæ©ç»è®°æ¶é´", trigger: "change" }] } }) const { form, rules } = toRefs(data) const userList = ref([]) const loadDeviceName = async () => { const { data } = await getDeviceLedger(); deviceOptions.value = data; }; // éæ©è®¾å¤æ¶ï¼å填设å¤åç§°(taskName)åè§æ ¼åå·(deviceModel) const setDeviceModel = (id) => { const option = deviceOptions.value.find((item) => item.id === id); if (option) { form.value.taskId = option.id; form.value.taskName = option.deviceName; form.value.deviceModel = option.deviceModel; } } // æå¼å¼¹æ¡ const openDialog = async (type, row) => { dialogVisitable.value = true operationType.value = type // é置表å resetForm(); // å è½½ç¨æ·å表 userListNoPageByTenantId().then((res) => { userList.value = res.data; }); // å 载设å¤å表 await loadDeviceName(); if (type === 'edit' && row) { form.value = { ...row } // ç¼è¾æ¶ç¨æ¥å£è¿åç registrantId åæ¾å½å ¥äºº if (row.registrantId) { form.value.inspector = row.registrantId } // 妿æè®¾å¤IDï¼èªå¨è®¾ç½®è®¾å¤ä¿¡æ¯ if (form.value.taskId) { setDeviceModel(form.value.taskId); } } else if (type === 'add') { // æ°å¢æ¶è®¾ç½®ç»è®°æ¥æä¸ºå½å¤© form.value.registrationDate = getCurrentDate(); // æ°å¢æ¶è®¾ç½®å½å ¥äººä¸ºå½åç»å½è´¦æ· form.value.inspector = userStore.id; } } // å ³éå¯¹è¯æ¡ const cancel = () => { resetForm() dialogVisitable.value = false emit('closeDia') } // é置表å彿° const resetForm = () => { if (proxy.$refs.formRef) { proxy.$refs.formRef.resetFields() } // éç½®è¡¨åæ°æ®ç¡®ä¿è®¾å¤ä¿¡æ¯æ£ç¡®éç½® form.value = { taskId: undefined, taskName: undefined, inspector: undefined, inspector: undefined, remarks: '', frequencyType: '', frequencyDetail: '', week: '', time: '', deviceModel: undefined, registrationDate: '' } } // æäº¤è¡¨å const submitForm = () => { proxy.$refs["formRef"].validate(async valid => { if (valid) { try { const payload = { ...form.value } // ä¸åååç«¯ä¼ ä¿å »äººå段ï¼ä» ä½¿ç¨æ¥å£è¦æ±ç registrant / registrantId // æ ¹æ®éæ©ç"å½å ¥äºº"设置 registrant / registrantId if (payload.inspector) { const selectedUser = userList.value.find( (u) => String(u.userId) === String(payload.inspector) ) if (selectedUser) { payload.registrantId = selectedUser.userId payload.registrant = selectedUser.nickName } } delete payload.inspector delete payload.inspectorIds if (payload.frequencyType === 'WEEKLY') { let frequencyDetail = '' frequencyDetail = payload.week + ',' + payload.time payload.frequencyDetail = frequencyDetail } // å½å ¥æ¥æï¼ç´æ¥ä½¿ç¨è¡¨åéç registrationDate åæ®µ // ä¸äºé»è®¤ç¶æå段 if (payload.status === undefined || payload.status === null || payload.status === '') { payload.status = '0' // é»è®¤ç¶æï¼å¯æå®é æä¸¾è°æ´ } payload.active = true payload.deleted = 0 if (operationType.value === 'edit') { await deviceMaintenanceTaskEdit(payload) } else { await deviceMaintenanceTaskAdd(payload) } cancel() proxy.$modal.msgSuccess('æäº¤æå') } catch (error) { proxy.$modal.msgError('æäº¤å¤±è´¥ï¼è¯·éè¯') } } }) } defineExpose({ openDialog }) </script> <style scoped> </style> src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue
ÎļþÒÑɾ³ý src/views/equipmentManagement/upkeep/Modal/PlanModal.vue
ÎļþÒÑɾ³ý src/views/equipmentManagement/upkeep/Modal/formDia.vue
ÎļþÒÑɾ³ý src/views/equipmentManagement/upkeep/index.vue
@@ -64,16 +64,14 @@ <template #operation="{ row }"> <el-button type="primary" text icon="editPen" link @click="editScheduledTask(row)" > ç¼è¾ </el-button> <el-button type="danger" text icon="delete" link @click="delScheduledTaskByIds(row.id)" > å é¤ @@ -135,14 +133,6 @@ <div class="actions"> <el-text class="mx-1" size="large">ä»»å¡è®°å½</el-text> <div> <el-button type="primary" icon="Plus" :disabled="multipleList.length !== 1" @click="addMaintain" > æ°å¢ä¿å » </el-button> <el-button type="success" icon="Van" @click="addPlan"> æ°å¢è®¡å </el-button> @@ -152,7 +142,7 @@ <el-button type="danger" icon="Delete" :disabled="multipleList.length <= 0" :disabled="multipleList.length <= 0 || hasFinishedStatus" @click="delRepairByIds(multipleList.map((item) => item.id))" > æ¹éå é¤ @@ -183,16 +173,24 @@ <template #operation="{ row }"> <el-button type="primary" text icon="editPen" link :disabled="row.status === 1" @click="editPlan(row.id)" > ç¼è¾ </el-button> <el-button type="success" link :disabled="row.status === 1" @click="addMaintain(row)" > ä¿å » </el-button> <el-button type="danger" text icon="delete" link :disabled="row.status === 1" @click="delRepairByIds(row.id)" > å é¤ @@ -209,12 +207,12 @@ </template> <script setup> import { ref, onMounted, reactive, getCurrentInstance, nextTick } from 'vue' import { ref, onMounted, reactive, getCurrentInstance, nextTick, computed } from 'vue' import { Search } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import PlanModal from './Modal/PlanModal.vue' import MaintenanceModal from './Modal/MaintenanceModal.vue' import FormDia from './Modal/formDia.vue' import PlanModal from './Form/PlanModal.vue' import MaintenanceModal from './Form/MaintenanceModal.vue' import FormDia from './Form/formDia.vue' import { getUpkeepPage, delUpkeep, @@ -494,14 +492,18 @@ multipleList.value = selection } // æ£æ¥éä¸çè®°å½ä¸æ¯å¦æå®ç»ç¶æç const hasFinishedStatus = computed(() => { return multipleList.value.some(item => item.status === 1) }) const changePage = (page) => { pagination.value.currentPage = page.page pagination.value.pageSize = page.limit getTableData() } const addMaintain = () => { const row = multipleList.value[0] const addMaintain = (row) => { maintainModalRef.value.open(row.id, row) } @@ -514,6 +516,13 @@ } const delRepairByIds = async (ids) => { // æ£æ¥æ¯å¦æå®ç»ç¶æçè®°å½ const hasFinished = multipleList.value.some(item => item.status === 1) if (hasFinished) { ElMessage.warning('ä¸è½å é¤ç¶æä¸ºå®ç»çè®°å½') return } try { await ElMessageBox.confirm('确认å é¤ä¿å »æ°æ®, æ¤æä½ä¸å¯é?', 'è¦å', { confirmButtonText: 'ç¡®å®',