gongchunyi
8 天以前 25372b64f4ac756bd44cc730af87b1c46e6b9f77
fix: 维修人改为可输入和下拉
已修改3个文件
64 ■■■■ 文件已修改
src/views/equipmentManagement/repair/Modal/MaintainModal.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/Modal/RepairModal.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/index.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/Modal/MaintainModal.vue
@@ -10,10 +10,19 @@
  >
    <el-form ref="formRef" :model="form" :rules="rules" label-width="90px">
      <el-form-item label="维修人" prop="maintenanceName">
        <el-input v-model="form.maintenanceName" disabled placeholder="报修时指定的维修人" />
        <el-input
          v-model="form.maintenanceName"
          :placeholder="isEditableMaintenanceName ? '请输入维修人姓名' : '报修时指定的维修人'"
          :disabled="!isEditableMaintenanceName"
        />
      </el-form-item>
      <el-form-item label="维修结果" prop="maintenanceResult">
        <el-input v-model="form.maintenanceResult" placeholder="请输入维修结果" />
        <el-input
          v-model="form.maintenanceResult"
          type="textarea"
          :autosize="{ minRows: 2, maxRows: 6 }"
          placeholder="请输入维修结果"
        />
      </el-form-item>
      <el-form-item label="维修状态" prop="status">
        <el-select v-model="form.status" style="width: 100%">
@@ -57,11 +66,13 @@
</template>
<script setup>
import { computed } from "vue";
import FormDialog from "@/components/Dialog/FormDialog.vue";
import { addMaintain, uploadRepairFile } from "@/api/equipmentManagement/repair";
import { REPAIR_FILE_TYPE_MAINTAIN } from "@/api/equipmentManagement/repairFileType.js";
import useFormData from "@/hooks/useFormData";
import useUserStore from "@/store/modules/user";
import { userListNoPage } from "@/api/system/user.js";
import dayjs from "dayjs";
import { ElMessage } from "element-plus";
import { UploadFilled } from "@element-plus/icons-vue";
@@ -80,6 +91,23 @@
const ATTACH_MAX_MB = 50;
const userStore = useUserStore();
const systemUserNames = ref([]);
const isSystemUser = (name) => {
  return systemUserNames.value.includes(name);
};
//  维修人是否可编辑:外部人员时可以编辑修改
const isEditableMaintenanceName = computed(() => {
  const name = form.maintenanceName;
  if (!name) return false;
  return !isSystemUser(name);
});
const loadSystemUsers = async () => {
  const res = await userListNoPage();
  systemUserNames.value = (res?.data || []).map((u) => u.nickName);
};
const rules = {
  maintenanceName: [{ required: true, message: "请选择维修人", trigger: "change" }],
@@ -141,7 +169,9 @@
const sendForm = async () => {
  const valid = await formRef.value?.validate().catch(() => false);
  if (!valid) return;
  if (form.maintenanceName !== userStore.nickName) {
  const maintenanceName = form.maintenanceName;
  // 如果维修人是系统用户且非当前用户,禁止提交
  if (isSystemUser(maintenanceName) && maintenanceName !== userStore.nickName) {
    ElMessage.warning("仅指定的维修人可进行维修");
    return;
  }
@@ -183,8 +213,11 @@
  clearAttachmentQueue();
  visible.value = true;
  await nextTick();
  await loadSystemUsers();
  setForm(row);
  if (row?.maintenanceName && row.maintenanceName !== userStore.nickName) {
  const maintenanceName = row?.maintenanceName;
  // 如果维修人是系统用户且非当前用户,禁止操作
  if (isSystemUser(maintenanceName) && maintenanceName !== userStore.nickName) {
    ElMessage.warning("仅指定的维修人可进行维修");
    visible.value = false;
  }
src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -74,8 +74,10 @@
          <el-form-item label="维修人" required>
            <el-select
              v-model="form.maintenanceName"
              placeholder="请选择维修人"
              placeholder="请选择或输入维修人"
              filterable
              allow-create
              default-first-option
              clearable
              style="width: 100%"
            >
@@ -351,7 +353,7 @@
    return;
  }
  if (!form.maintenanceName) {
    ElMessage.warning("请选择维修人");
    ElMessage.warning("请选择或输入维修人");
    return;
  }
  loading.value = true;
src/views/equipmentManagement/repair/index.vue
@@ -242,6 +242,7 @@
import RepairDetailModal from "./Modal/RepairDetailModal.vue";
import { getToken } from "@/utils/auth";
import useUserStore from "@/store/modules/user";
import { userListNoPage } from "@/api/system/user.js";
import {
  REPAIR_FILE_TYPE_PROBLEM,
  isProblemRepairFile,
@@ -261,6 +262,14 @@
const acceptanceModalRef = ref();
const repairDetailModalRef = ref();
const userStore = useUserStore();
const systemUserNames = ref([]);
const loadSystemUsers = async () => {
  const res = await userListNoPage();
  systemUserNames.value = (res?.data || []).map((u) => u.nickName);
};
const isSystemUser = (name) => systemUserNames.value.includes(name);
// 表格多选框选中项
const multipleList = ref([]);
@@ -424,11 +433,14 @@
const isCurrentUser = (name) => !!name && name === userStore.nickName;
const canEdit = (row) => row.status === 0;
/** 仅报修时指定的维修人可维修 */
//  仅报修时指定的维修人或外部人员时由报修人提交维修
const canMaintain = (row) => {
  if (row.status !== 0) return false;
  if (!row.maintenanceName) return false;
  return isCurrentUser(row.maintenanceName);
  if (isSystemUser(row.maintenanceName)) {
    return isCurrentUser(row.maintenanceName);
  }
  return true;
};
const canDelete = (row) => row.status === 0;
/** 仅报修时指定的验收人可验收 */
@@ -645,6 +657,7 @@
onMounted(() => {
  getTableData();
  loadSystemUsers();
});
</script>