diff --git a/ry-vue3/src/views/manager/Projects.vue b/ry-vue3/src/views/manager/Projects.vue
index ece7eda..c44ff5c 100644
--- a/ry-vue3/src/views/manager/Projects.vue
+++ b/ry-vue3/src/views/manager/Projects.vue
@@ -20,7 +20,23 @@
-
+
+
+
+
+
@@ -304,7 +320,7 @@ const userStore = useUserStore()
const router = useRouter()
const route = useRoute()
-const q = ref({ sponsorAdminUserIds: [], execOrgName: '', projectNo: '', projectName: '', projectForm: '', startTime: '', endTime: '', isFinished: '', isSettled: '', managerScore: '' })
+const q = ref({ sponsorAdminUserIds: [], execAdminUserIds: [], projectNo: '', projectName: '', projectForm: '', startTime: '', endTime: '', isFinished: '', isSettled: '', managerScore: '' })
const rows = ref([])
const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
@@ -354,7 +370,7 @@ async function doDelete(row) {
}
}
-function reset() { q.value = { sponsorAdminUserIds:[], execOrgName:'', projectNo:'', projectName:'', projectForm:'', startTime:'', endTime:'', isFinished:'', isSettled:'', managerScore:'' }; page.pageNum = 1; load() }
+function reset() { q.value = { sponsorAdminUserIds:[], execAdminUserIds:[], projectNo:'', projectName:'', projectForm:'', startTime:'', endTime:'', isFinished:'', isSettled:'', managerScore:'' }; page.pageNum = 1; load() }
// 导出
function exportProjects() { ElMessage.info('导出项目功能开发中') }
@@ -646,6 +662,10 @@ const sponsorOrgOptions = ref([])
const sponsorSearching = ref(false)
let _supporterTimer = null
let _supporterFilterTimer = null
+// 顶部筛选区专用: 与 assignForm.row._options 隔离 (row 级是每行一个 _options)
+const executorOrgOptions = ref([])
+const execSearching = ref(false)
+let _executorFilterTimer = null
// 已分配场次合计 (实时)
@@ -747,6 +767,33 @@ function searchSponsorOrgsForFilter(query) {
}, 200)
}
+// 顶部筛选区远程搜索 (服务机构多选 el-select, 加 loading + 已选项重拉回)
+function searchExecutorOrgsForFilter(query) {
+ if (_executorFilterTimer) clearTimeout(_executorFilterTimer)
+ execSearching.value = true
+ _executorFilterTimer = setTimeout(async () => {
+ try {
+ const params = {}
+ if (query) params.orgName = query
+ const r = await listExecutorOrgs(params)
+ executorOrgOptions.value = r.data || []
+ // 已选项不在结果里时按 userId 单独拉回 (multi-select 必须保证每个已选 tag 都有 label)
+ const ids = q.value.execAdminUserIds || []
+ for (const uid of ids) {
+ if (!executorOrgOptions.value.find(u => u.userId === uid)) {
+ const r2 = await listExecutorOrgs({ userId: uid })
+ const sel = (r2.data || []).find(u => u.userId === uid)
+ if (sel) executorOrgOptions.value = [sel, ...executorOrgOptions.value]
+ }
+ }
+ } catch (e) {
+ executorOrgOptions.value = []
+ } finally {
+ execSearching.value = false
+ }
+ }, 200)
+}
+
// 选中支持方后回填 user_name (缓存到 biz_project.sponsor_admin_user_name)
function onSponsorOrgPick(userId) {
const u = sponsorOrgOptions.value.find(x => x.userId === userId)