From 7827df82ee26fbc8298a8da3f40ce6330054c842 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期三, 03 六月 2026 16:43:12 +0800
Subject: [PATCH] 报工可手动输入功能完善

---
 src/views/productionManagement/workOrder/index.vue |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index 18ece60..9c62a41 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -233,6 +233,7 @@
             <el-form-item label="鐝粍淇℃伅"
                           prop="teamList">
               <el-select v-model="reportForm.teamList"
+                         ref="teamSelectRef"
                          multiple
                          filterable
                          allow-create
@@ -242,8 +243,8 @@
                          value-key="userName"
                          placeholder="璇烽�夋嫨鎴栬緭鍏ョ彮缁勬垚鍛�"
                          @change="handleTeamListChange">
-                <el-option v-for="user in reportForm.userIdsList"
-                           :key="user.userId"
+                <el-option v-for="user in teamSelectOptions"
+                           :key="user.userId || `custom-${user.nickName}`"
                            :label="user.nickName"
                            :value="{ userId: user.userId, userName: user.nickName }" />
               </el-select>
@@ -505,6 +506,7 @@
   const currentUserId = ref("");
   const deviceOptions = ref([]);
   const currentUserName = ref("");
+  const teamSelectRef = ref(null);
 
   const ensureCurrentUser = async () => {
     if (currentUserId.value) return;
@@ -1216,6 +1218,29 @@
     teamList: [],
     deviceId: null,
   });
+  const teamSelectOptions = computed(() => {
+    const base =
+      Array.isArray(reportForm.userIdsList) && reportForm.userIdsList.length > 0
+        ? reportForm.userIdsList.map(u => ({
+            userId: String(u.userId ?? ""),
+            nickName: String(u.nickName ?? "").trim(),
+          }))
+        : [];
+    const baseNameSet = new Set(base.map(u => u.nickName));
+    const selected = Array.isArray(reportForm.teamList)
+      ? reportForm.teamList
+      : [];
+    const extraNames = selected
+      .map(item => {
+        if (typeof item === "string") return String(item).trim();
+        const name = item?.userName ?? item?.nickName ?? "";
+        return String(name).trim();
+      })
+      .filter(Boolean)
+      .filter(name => !baseNameSet.has(name));
+    const extras = extraNames.map(name => ({ userId: "", nickName: name }));
+    return [...base, ...extras];
+  });
   function removeLastFour(str) {
     if (!str) return ""; // 绌哄�间繚鎶�
     return str.toString().slice(0, -4); // 鏍稿績锛氭埅鍙� 0 鍒� 鍊掓暟绗�4浣�
@@ -1675,13 +1700,39 @@
 
   const handleTeamListChange = val => {
     if (!Array.isArray(val)) return;
-    if (!val.some(item => typeof item === "string")) return;
-    reportForm.teamList = val.map(item => {
+    let hasString = false;
+    const newList = val.map(item => {
       if (typeof item === "string") {
+        hasString = true;
         return { userName: item };
       }
       return item;
     });
+
+    if (hasString) {
+      reportForm.teamList = newList;
+    }
+
+    // 瑙e喅 allow-create 鍦� multiple 妯″紡涓嬭緭鍏ユ鍐呭涓嶈嚜鍔ㄦ竻绌虹殑闂
+    setTimeout(() => {
+      if (teamSelectRef.value) {
+        // 1. 娓呴櫎鍐呴儴 query 鐘舵��
+        teamSelectRef.value.query = "";
+        if (teamSelectRef.value.states) {
+          teamSelectRef.value.states.query = "";
+          teamSelectRef.value.states.inputValue = "";
+        }
+        // 2. 寮哄埗娓呴櫎 DOM 杈撳叆妗嗙殑鍊�
+        const input = teamSelectRef.value.$el?.querySelector("input");
+        if (input) {
+          input.value = "";
+        }
+        // 3. 閽堝鏌愪簺鐗堟湰锛岄噸缃�変腑鏍囩鐨勫唴閮ㄥ亸绉伙紙闃叉杈撳叆妗嗚鎸ゅ崰锛�
+        if (typeof teamSelectRef.value.resetInputState === "function") {
+          teamSelectRef.value.resetInputState();
+        }
+      }
+    }, 50);
   };
   // 瀹℃牳浜�
   const handleReviewerIdChange = userId => {

--
Gitblit v1.9.3