From 36bd470611d9dd01096446d1412facd29ea76099 Mon Sep 17 00:00:00 2001 From: Quella <2892744389@qq.com> Date: Thu, 11 Sep 2025 14:12:22 +0800 Subject: [PATCH] update --- .../src/main/resources/application-druid.yml | 2 +- .../mapper/models/BizModuleMapper.xml | 25 ++++-- ruoyi-ui/src/views/project/doc/index.vue | 88 +++++++++---------- 3 files changed, 60 insertions(+), 55 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 215efd2..8ac5e23 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -6,7 +6,7 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://127.0.0.1:3306/managersystem?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://127.0.0.1:n3306/managersystem?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: Wxit11335577 # 从库数据源 diff --git a/ruoyi-admin/src/main/resources/mapper/models/BizModuleMapper.xml b/ruoyi-admin/src/main/resources/mapper/models/BizModuleMapper.xml index ec114b5..5ae35cf 100644 --- a/ruoyi-admin/src/main/resources/mapper/models/BizModuleMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/models/BizModuleMapper.xml @@ -34,8 +34,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" p.project_name from biz_module m left join biz_project p on m.project_id = p.project_id - left join sys_user u1 on u1.user_id = CAST(m.assignee AS UNSIGNED) - left join sys_user u2 on u2.user_name = m.assignee + left join sys_user u1 on (m.assignee REGEXP '^[0-9]+$') and u1.user_id = CAST(m.assignee AS UNSIGNED) + left join sys_user u2 on (NOT (m.assignee REGEXP '^[0-9]+$')) and u2.user_name = m.assignee - where module_id = #{moduleId} + where m.module_id = #{moduleId} + limit 1 @@ -157,8 +170,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" p.project_name from biz_module m left join biz_project p on m.project_id = p.project_id - left join sys_user u1 on u1.user_id = CAST(m.assignee AS UNSIGNED) - left join sys_user u2 on u2.user_name = m.assignee + left join sys_user u1 on (m.assignee REGEXP '^[0-9]+$') and u1.user_id = CAST(m.assignee AS UNSIGNED) + left join sys_user u2 on (NOT (m.assignee REGEXP '^[0-9]+$')) and u2.user_name = m.assignee where m.designated_user = #{userId} and m.del_flag = '0' order by m.create_time desc diff --git a/ruoyi-ui/src/views/project/doc/index.vue b/ruoyi-ui/src/views/project/doc/index.vue index a6d2e27..88e8f8a 100644 --- a/ruoyi-ui/src/views/project/doc/index.vue +++ b/ruoyi-ui/src/views/project/doc/index.vue @@ -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; }, /** 下载按钮操作 */