From 9b60b7f29cd78eef58dee03f265828f08d5b2726 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=90=B4=E7=BA=A2=E5=85=B5?= <374362909@qq.com>
Date: Sun, 15 Mar 2026 17:29:31 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8B=9B=E6=A0=87=E6=96=87=E4=BB=B6=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../purchasingrequisition/bidfile-audit.vue | 124 +++++++++++++-----
1 file changed, 92 insertions(+), 32 deletions(-)
diff --git a/src/views/purchase/purchasingrequisition/bidfile-audit.vue b/src/views/purchase/purchasingrequisition/bidfile-audit.vue
index 6bbee4a..e43a639 100644
--- a/src/views/purchase/purchasingrequisition/bidfile-audit.vue
+++ b/src/views/purchase/purchasingrequisition/bidfile-audit.vue
@@ -202,13 +202,28 @@
-
+
+ v-for="item in representorOptions"
+ :key="item.teacherNo"
+ :label="(item.commonDeptName ? item.commonDeptName + ' - ' : '') + (item.realName || item.name) + ' (' + item.teacherNo + ')'"
+ :value="item.teacherNo"
+ >
+ {{ item.commonDeptName ? item.commonDeptName + ' - ' : '' }}{{ item.realName || item.name }}
+ {{ item.teacherNo }}
+
@@ -216,18 +231,27 @@
+ v-for="item in candidatesOptions"
+ :key="item.teacherNo"
+ :label="(item.commonDeptName ? item.commonDeptName + ' - ' : '') + (item.realName || item.name) + ' (' + item.teacherNo + ')'"
+ :value="item.teacherNo"
+ >
+ {{ item.commonDeptName ? item.commonDeptName + ' - ' : '' }}{{ item.realName || item.name }}
+ {{ item.teacherNo }}
+
('');
// 部门参与人选择相关(部门负责人审核时使用)
const representorSelectMode = ref<'designate' | 'random'>('designate');
-const deptMembers = ref([]);
-const deptMembersLoading = ref(false);
+const representorOptions = ref([]);
+const representorLoading = ref(false);
const selectedRepresentor = ref('');
+const candidatesOptions = ref([]);
+const candidatesLoading = ref(false);
const randomCandidates = ref([]);
const currentRepresentor = ref(null);
const representorType = ref('purchase_rep');
@@ -698,19 +724,59 @@ const registerFlowCallbacks = () => {
// ==================== 部门参与人选择 ====================
-const loadDeptMembers = async () => {
- if (!showRepresentorSection.value) return;
-
+const searchRepresentor = async (query: string) => {
+ if (!query) {
+ representorOptions.value = [];
+ return;
+ }
+ representorLoading.value = true;
try {
- deptMembersLoading.value = true;
- const res = await getDeptMembers();
- if (res.code === 0 && res.data) {
- deptMembers.value = res.data;
- }
- } catch (e: any) {
- ElMessage.error(e?.msg || '加载部门人员失败');
+ const res = await searchTeachers(query);
+ representorOptions.value = res?.data || [];
+ } catch (_) {
+ representorOptions.value = [];
} finally {
- deptMembersLoading.value = false;
+ representorLoading.value = false;
+ }
+};
+
+const onRepresentorChange = (teacherNo: string) => {
+ if (!teacherNo) {
+ selectedRepresentor.value = '';
+ }
+};
+
+const searchCandidates = async (query: string) => {
+ if (!query) {
+ candidatesOptions.value = [];
+ return;
+ }
+ candidatesLoading.value = true;
+ try {
+ const res = await searchTeachers(query);
+ candidatesOptions.value = res?.data || [];
+ } catch (_) {
+ candidatesOptions.value = [];
+ } finally {
+ candidatesLoading.value = false;
+ }
+};
+
+const onCandidatesChange = (teacherNos: string[]) => {
+ // 保留已选中的选项,防止清空搜索时选项丢失
+ const selectedMap = new Map();
+ randomCandidates.value.forEach((no) => {
+ const existing = candidatesOptions.value.find((item) => item.teacherNo === no);
+ if (existing) {
+ selectedMap.set(no, existing);
+ }
+ });
+ // 如果新选中的选项中有不在当前选项列表中的,需要从之前的结果中找
+ if (teacherNos.length > 0 && currentRepresentor.value) {
+ const currentNo = currentRepresentor.value.teacherNo;
+ if (teacherNos.includes(currentNo)) {
+ selectedMap.set(currentNo, currentRepresentor.value);
+ }
}
};
@@ -744,9 +810,6 @@ onMounted(async () => {
if (isAgent.value) {
await loadRequirementFiles();
}
- if (showRepresentorSection.value) {
- await loadDeptMembers();
- }
registerFlowCallbacks();
});
@@ -759,9 +822,6 @@ watch(
if (isAgent.value) {
await loadRequirementFiles();
}
- if (showRepresentorSection.value) {
- await loadDeptMembers();
- }
registerFlowCallbacks();
}
},