From 25372b64f4ac756bd44cc730af87b1c46e6b9f77 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 18 五月 2026 14:18:57 +0800
Subject: [PATCH] fix: 维修人改为可输入和下拉

---
 src/views/equipmentManagement/repair/Modal/MaintainModal.vue |   41 ++++++++++++++++++--
 src/views/equipmentManagement/repair/Modal/RepairModal.vue   |    6 ++-
 src/views/equipmentManagement/repair/index.vue               |   17 +++++++-
 3 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/src/views/equipmentManagement/repair/Modal/MaintainModal.vue b/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
index ed09da9..6908865 100644
--- a/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
+++ b/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;
   }
diff --git a/src/views/equipmentManagement/repair/Modal/RepairModal.vue b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
index ab64cbf..8b11db6 100644
--- a/src/views/equipmentManagement/repair/Modal/RepairModal.vue
+++ b/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;
diff --git a/src/views/equipmentManagement/repair/index.vue b/src/views/equipmentManagement/repair/index.vue
index 3f48df5..c65ffee 100644
--- a/src/views/equipmentManagement/repair/index.vue
+++ b/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>
 

--
Gitblit v1.9.3