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