yyb
8 天以前 a30370cd7080d432462ab5aa5986ac10dadf852f
src/views/equipmentManagement/upkeep/Form/PlanModal.vue
@@ -2,12 +2,12 @@
  <FormDialog
    v-model="visible"
    :title="id ? '编辑设备保养计划' : '新增设备保养计划'"
    width="640px"
    width="680px"
    @confirm="sendForm"
    @cancel="handleCancel"
    @close="handleClose"
  >
    <el-form :model="form" label-width="100px">
    <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
      <el-form-item label="设备名称">
        <el-select
          v-model="form.deviceLedgerId"
@@ -32,19 +32,44 @@
          disabled
        />
      </el-form-item>
      <el-form-item label="保养项目">
        <el-input
          v-model="form.maintenanceLocation"
          type="textarea"
          :rows="3"
          placeholder="请输入保养项目"
        />
      </el-form-item>
      <el-form-item label="录入人">
        <el-input
          :model-value="registrantDisplayName"
          disabled
          placeholder="当前登录用户"
        />
      </el-form-item>
      <el-form-item label="保养人" prop="maintenancePerson">
        <el-select
          v-model="form.maintenancePerson"
          filterable
          default-first-option
          :reserve-keyword="false"
          placeholder="请选择保养人"
          style="width: 100%"
        >
          <el-option
            v-for="item in userList"
            :key="'mp-' + item.userId"
            :label="item.nickName"
            :value="item.userId"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="保养部位" prop="maintenanceLocation">
        <el-input
          v-model="form.maintenanceLocation"
          type="textarea"
          :rows="3"
          placeholder="请输入保养部位"
        />
      </el-form-item>
      <el-form-item label="保养项目" prop="maintenanceItems">
        <el-input
          v-model="form.maintenanceItems"
          type="textarea"
          :rows="3"
          placeholder="请输入保养项目"
        />
      </el-form-item>
      <el-form-item v-if="id" label="保修状态">
@@ -98,7 +123,8 @@
import { Plus } from "@element-plus/icons-vue";
import useFormData from "@/hooks/useFormData";
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
import { computed, onMounted, ref } from "vue";
import { userListNoPageByTenantId } from "@/api/system/user.js";
import { computed, nextTick, onMounted, ref, unref } from "vue";
import dayjs from "dayjs";
import useUserStore from "@/store/modules/user.js";
import request from "@/utils/request";
@@ -119,6 +145,14 @@
  () => userStore.nickName || userStore.name || "当前登录用户"
);
const formRef = ref();
const rules = {
  maintenancePerson: [{ required: true, message: "请选择保养人", trigger: "change" }],
  maintenanceLocation: [{ required: true, message: "请输入保养部位", trigger: "blur" }],
  maintenanceItems: [{ required: true, message: "请输入保养项目", trigger: "blur" }],
};
const syncCreateUserFromLogin = () => {
  if (userStore.id != null && userStore.id !== "") {
    form.createUser = userStore.id;
@@ -130,9 +164,16 @@
const loading = ref(false);
const deviceOptions = ref([]);
const userList = ref([]);
const loadDeviceName = async () => {
  const { data } = await getDeviceLedger();
  deviceOptions.value = data;
};
const loadUserList = async () => {
  const res = await userListNoPageByTenantId();
  userList.value = res.data || [];
};
const { form, resetForm } = useFormData({
@@ -140,7 +181,9 @@
  deviceName: undefined,
  deviceModel: undefined,
  maintenanceLocation: undefined,
  maintenanceItems: undefined,
  maintenancePlanTime: undefined,
  maintenancePerson: undefined,
  createUser: undefined,
  status: 0,
});
@@ -265,19 +308,49 @@
  form.deviceName = data.deviceName;
  form.deviceModel = data.deviceModel;
  form.maintenanceLocation = data.maintenanceLocation;
  form.maintenanceItems = data.maintenanceItems;
  form.status = data.status;
  syncCreateUserFromLogin();
  if (data.maintenancePersonId) {
    form.maintenancePerson = data.maintenancePersonId;
  } else if (data.maintenancePerson) {
    const matched = userList.value.find(
      (u) => u.nickName === data.maintenancePerson
    );
    if (matched) {
      form.maintenancePerson = matched.userId;
    }
  }
  form.maintenancePlanTime = dayjs(data.maintenancePlanTime).format(
    "YYYY-MM-DD HH:mm:ss"
  );
};
const buildSubmitPayload = () => {
  const payload = { ...form };
  const maintenancePersonUserId = form.maintenancePerson;
  if (maintenancePersonUserId) {
    const maintainer = userList.value.find(
      (u) => String(u.userId) === String(maintenancePersonUserId)
    );
    if (maintainer) {
      payload.maintenancePersonId = maintainer.userId;
      payload.maintenancePerson = maintainer.nickName;
    }
  }
  return payload;
};
onMounted(() => {
  loadDeviceName();
  loadUserList();
});
const openEdit = async (editId) => {
  resetAttachmentState();
  if (!userList.value.length) {
    await loadUserList();
  }
  const { data } = await getUpkeepById(editId);
  id.value = editId;
  visible.value = true;
@@ -288,17 +361,20 @@
const sendForm = async () => {
  syncCreateUserFromLogin();
  const valid = await formRef.value?.validate().catch(() => false);
  if (!valid) return;
  loading.value = true;
  try {
    const payload = buildSubmitPayload();
    if (id.value) {
      const { code } = await editUpkeep({ id: unref(id), ...form });
      const { code } = await editUpkeep({ id: unref(id), ...payload });
      if (code == 200) {
        ElMessage.success("编辑计划成功");
        visible.value = false;
        emits("ok");
      }
    } else {
      const res = await addUpkeep(form);
      const res = await addUpkeep(payload);
      if (res.code == 200) {
        const planId = res.data?.id;
        if (planId) {
@@ -331,6 +407,9 @@
  resetForm();
  resetAttachmentState();
  syncCreateUserFromLogin();
  if (userStore.id != null && userStore.id !== "") {
    form.maintenancePerson = userStore.id;
  }
  visible.value = true;
};