周宾
2025-12-08 4da40604690325917d208e386e3add022f181147
src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -1,23 +1,70 @@
<template>
  <el-dialog v-model="visible" :title="modalOptions.title" @close="close">
    <RepairForm ref="repairFormRef" />
    <el-form :model="form" :rules="rules" ref="formRef" label-width="100px">
      <el-row>
        <el-col :span="12">
          <el-form-item label="设备名称" prop="deviceLedgerId">
            <el-select v-model="form.deviceLedgerId" filterable allow-create default-first-option @change="setDeviceModel">
              <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="报修日期" prop="repairTime">
            <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="报修人" prop="repairName">
            <el-input v-model="form.repairName" placeholder="请输入报修人" />
          </el-form-item>
        </el-col>
        <el-col :span="24">
          <el-form-item label="故障现象" prop="remark">
            <el-input v-model="form.remark" :rows="2" type="textarea" placeholder="请输入故障现象" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <template #footer>
         <el-button type="primary" @click="sendForm" :loading="loading">
            {{ modalOptions.confirmText }}
         </el-button>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
      <el-button type="primary" @click="sendForm" :loading="loading">
        {{ modalOptions.confirmText }}
      </el-button>
    </template>
  </el-dialog>
</template>
<script setup>
import { ref, nextTick } from "vue";
import { useModal } from "@/hooks/useModal";
import RepairForm from "../Form/RepairForm.vue";
import useFormData from "@/hooks/useFormData";
import useUserStore from "@/store/modules/user";
import {
  addRepair,
  editRepair,
  getRepairById,
} from "@/api/equipmentManagement/repair";
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
import { ElMessage } from "element-plus";
defineOptions({
@@ -25,8 +72,6 @@
});
const emits = defineEmits(["ok"]);
const repairFormRef = ref();
const {
  id,
  visible,
@@ -37,34 +82,82 @@
  closeModal,
} = useModal({ title: "设备报修" });
const sendForm = async () => {
  loading.value = true;
  const form = await repairFormRef.value.getForm();
  const { code } = id.value
    ? await editRepair({ id: unref(id), ...form })
    : await addRepair(form);
  if (code == 200) {
    ElMessage.success(`${id ? "编辑" : "新增"}报修成功`);
    closeModal();
    emits("ok");
  }
  loading.value = false;
const userStore = useUserStore();
const deviceOptions = ref([]);
const formRef = ref();
const { form, resetForm } = useFormData({
  deviceLedgerId: undefined, // 设备Id
  deviceName: undefined, // 设备名称
  deviceModel: undefined, // 规格型号
  repairTime: undefined, // 报修日期
  repairName: userStore.nickName, // 报修人
  remark: undefined, // 故障现象
});
const rules = {
  deviceLedgerId: [{ required: true, message: "请选择设备名称", trigger: "change" }],
  repairTime: [{ required: true, message: "请选择报修日期", trigger: "change" }],
  repairName: [{ required: true, message: "请输入报修人", trigger: "blur" }],
  remark: [{ required: true, message: "请输入故障现象", trigger: "blur" }],
};
const openEdit = async (id) => {
  const { data } = await getRepairById(id);
  openModal(id);
const loadDeviceName = async () => {
  const { data } = await getDeviceLedger();
  deviceOptions.value = data;
};
const setDeviceModel = (id) => {
  const option = deviceOptions.value.find((item) => item.id === id);
  form.deviceModel = option ? option.deviceModel : undefined;
};
const setForm = (data) => {
  form.deviceLedgerId = data.deviceLedgerId;
  form.deviceName = data.deviceName;
  form.deviceModel = data.deviceModel;
  form.repairTime = data.repairTime;
  form.repairName = data.repairName ?? userStore.nickName;
  form.remark = data.remark;
};
const sendForm = async () => {
  await formRef.value.validate(async (valid) => {
    if (!valid) return;
    loading.value = true;
    const payload = { ...form };
    const { code } = id.value
      ? await editRepair({ id: id.value, ...payload })
      : await addRepair(payload);
    if (code == 200) {
      ElMessage.success(`${id.value ? "编辑" : "新增"}报修成功`);
      closeModal();
      emits("ok");
    }
    loading.value = false;
  });
};
const openAdd = async () => {
  openModal();
  await nextTick();
  await repairFormRef.value.setForm(data);
  await loadDeviceName();
};
const openEdit = async (editId) => {
  const { data } = await getRepairById(editId);
  openModal(editId);
  await nextTick();
  await loadDeviceName();
  setForm(data);
};
const close = () => {
  repairFormRef.value.resetForm();
  resetForm();
  closeModal();
};
defineExpose({
  openModal,
  openAdd,
  openEdit,
});
</script>