提交所有代码

This commit is contained in:
郭庆泰
2026-08-31 19:01:00 +08:00
parent f4d8bc1463
commit a14d95288c
53 changed files with 1356 additions and 286 deletions
+16 -16
View File
@@ -23,8 +23,8 @@
<el-row :gutter="12">
<el-col :span="12">
<el-form-item label="项目负责人">
<el-select v-model="form.leadUserId" placeholder="请选择合规管理员" filterable clearable :filter-method="searchManagers" style="width:100%">
<el-option v-for="u in managerOptions" :key="u.userId"
<el-select v-model="form.leadUserId" placeholder="请选择项目负责人" filterable clearable :filter-method="searchLeaders" style="width:100%">
<el-option v-for="u in leaderOptions" :key="u.userId"
:label="`${u.nickName || u.userName}${u.nickName && u.userName ? ' (' + u.userName + ')' : ''}`" :value="u.userId" />
</el-select>
</el-form-item>
@@ -133,7 +133,7 @@
import { ref, reactive, onMounted } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { bizAdd, bizUpdate, bizGet } from '@/api/public'
import { listExecutor, listManagers } from '@/api/system'
import { listExecutor, listLeaders } from '@/api/system'
import { ElMessage, ElMessageBox } from 'element-plus'
import request from '@/utils/request'
import OssFileUploader from '@/components/OssFileUploader.vue'
@@ -155,13 +155,13 @@ function nowLocalDatetime() {
return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`
}
// 项目负责人候选 (合规管理员, sys_user.role_type='manager')
const managerOptions = ref([])
// 项目负责人候选 (sys_user.role_type='leader')
const leaderOptions = ref([])
let _managerTimer = null
const form = reactive({
projectName: '', projectNo: '', projectForm: '',
// 项目负责人 (sys_user.role_type='manager' 合规管理员, 名称由后端 JOIN 查, 不缓存)
// 项目负责人 (sys_user.role_type='leader', 名称由后端 JOIN 查, 不缓存)
leadUserId: null,
// 是否招标项目 Y/N (默认 N)
isBidProject: 'N',
@@ -267,29 +267,29 @@ async function loadProject() {
}
}
// 加载项目负责人 (合规管理员, sys_user.role_type='manager')
async function loadManagers(query) {
// 加载项目负责人 (sys_user.role_type='leader')
async function loadLeaders(query) {
if (_managerTimer) clearTimeout(_managerTimer)
_managerTimer = setTimeout(async () => {
try {
const params = { pageNum: 1, pageSize: 50 }
if (query) params.userName = query
const r = await listManagers(params)
managerOptions.value = (r.data && r.data.rows) || r.rows || []
const r = await listLeaders(params)
leaderOptions.value = (r.data && r.data.rows) || r.rows || []
// 已选项不在结果里时按 userId 单独拉取并加首位, 避免 el-select 选中后 label 空白
if (form.leadUserId && !managerOptions.value.find(u => u.userId === form.leadUserId)) {
const r2 = await listManagers({ userId: form.leadUserId })
if (form.leadUserId && !leaderOptions.value.find(u => u.userId === form.leadUserId)) {
const r2 = await listLeaders({ userId: form.leadUserId })
const sel = (r2.data && r2.data.rows) || r2.rows || []
if (sel[0]) managerOptions.value = [sel[0], ...managerOptions.value]
if (sel[0]) leaderOptions.value = [sel[0], ...leaderOptions.value]
}
} catch (e) { managerOptions.value = [] }
} catch (e) { leaderOptions.value = [] }
}, 200)
}
function searchManagers(q) { loadManagers(q) }
function searchLeaders(q) { loadLeaders(q) }
onMounted(() => {
loadProject()
loadManagers('')
loadLeaders('')
})
function goBack() {
// 带 _t 强制 Projects.vue watch 触发 reload, 即便路由一样也重载