This commit is contained in:
2025-09-11 14:12:22 +08:00
parent 35ebacc326
commit 36bd470611
3 changed files with 60 additions and 55 deletions

View File

@@ -248,49 +248,49 @@ export default {
methods: {
async initProjects() {
try {
let options = []
// 并行获取:管理员可见项目 + 我参与的模块聚合项目,取并集,避免有时显示有时不显示
const tasks = []
if (this.isProjectAdmin) {
// 管理员/项目管理员:读取全部可管理项目
const { rows } = await listProject({ pageNum: 1, pageSize: 9999 })
options = rows || []
} else if (this.isNormalUser) {
// 普通用户:从“我的模块”汇总所属项目
const { rows } = await getMyModules({ pageNum: 1, pageSize: 9999 })
const map = new Map()
;(rows || []).forEach(m => {
if (m.projectId && m.projectName && !map.has(m.projectId)) {
map.set(m.projectId, { projectId: m.projectId, projectName: m.projectName })
}
})
options = Array.from(map.values())
tasks.push(listProject({ pageNum: 1, pageSize: 9999 }))
} else {
// 也许用户具备项目管理员角色但权限范围有限,这里仍保留 getMyModules 以保证兜底
tasks.push(Promise.resolve({ rows: [] }))
}
// 兼容:若管理员接口无数据,则回退到“我的模块”聚合
if ((!options || options.length === 0)) {
const { rows } = await getMyModules({ pageNum: 1, pageSize: 9999 })
const map = new Map()
;(rows || []).forEach(m => {
if (m.projectId && m.projectName && !map.has(m.projectId)) {
map.set(m.projectId, { projectId: m.projectId, projectName: m.projectName })
}
})
options = Array.from(map.values())
}
// 如果路由带有项目上下文,但下拉没有,补入一项,避免空列表
if ((this.currentContext.projectId && this.currentContext.projectName) && !options.some(p => String(p.projectId) === String(this.currentContext.projectId))) {
options.unshift({ projectId: this.currentContext.projectId, projectName: this.currentContext.projectName })
}
this.projectOptions = options
tasks.push(getMyModules({ pageNum: 1, pageSize: 9999 }))
// 预选项目(优先使用路由上下文),并联动加载模块下拉
if (!this.upload.meta.projectId) {
if (this.currentContext.projectId) {
this.upload.meta.projectId = this.currentContext.projectId
} else if (this.projectOptions && this.projectOptions.length > 0) {
this.upload.meta.projectId = this.projectOptions[0].projectId
}
const [projRes, myModRes] = await Promise.all(tasks)
const map = new Map()
// 管理员项目
if (projRes && Array.isArray(projRes.rows)) {
projRes.rows.forEach(p => {
if (p.projectId && !map.has(p.projectId)) {
map.set(p.projectId, { projectId: p.projectId, projectName: p.projectName || (`项目#${p.projectId}`) })
}
})
}
// 我参与的模块所在项目
if (myModRes && Array.isArray(myModRes.rows)) {
myModRes.rows.forEach(m => {
if (m.projectId && !map.has(m.projectId)) {
map.set(m.projectId, { projectId: m.projectId, projectName: m.projectName || (`项目#${m.projectId}`) })
}
})
}
// 路由上下文一定补入
if (this.currentContext.projectId && !map.has(this.currentContext.projectId)) {
map.set(this.currentContext.projectId, { projectId: this.currentContext.projectId, projectName: this.currentContext.projectName || (`项目#${this.currentContext.projectId}`) })
}
this.projectOptions = Array.from(map.values())
// 如果之前没选过,按上下文预选
if (!this.upload.meta.projectId && this.currentContext.projectId) {
this.upload.meta.projectId = this.currentContext.projectId
}
if (this.upload.meta.projectId) {
await this.handleProjectChange(this.upload.meta.projectId)
} else {
this.moduleOptions = []
this.upload.meta.moduleId = null
}
} catch (e) {
this.projectOptions = []
@@ -400,10 +400,8 @@ export default {
} else {
this.uploadTitle = "上传文档";
}
// 确保项目选项已加载再设置默认值避免首次显示为纯ID
if (!this.projectOptions || this.projectOptions.length === 0) {
await this.initProjects()
}
// 每次打开均刷新一次项目集合,避免角色/指派变更导致的偶发不显示
await this.initProjects()
// 预选:优先使用路由上下文;否则选第一项
if (this.currentContext.projectId) {
this.upload.meta.projectId = this.currentContext.projectId
@@ -411,13 +409,7 @@ export default {
// 默认不选任何项目避免显示成固定ID
this.upload.meta.projectId = null
}
if (this.upload.meta.projectId) {
await this.handleProjectChange(this.upload.meta.projectId)
} else {
// 无默认项目时清空模块下拉
this.moduleOptions = []
this.upload.meta.moduleId = null
}
// initProjects 内已处理联动
this.uploadOpen = true;
},
/** 下载按钮操作 */