 郭庆泰andClaude
|
99b9807270
|
fix(detail): 评分 4 维度改走 /business/project/rate + manager_score 同步回写
P0 #1 修复: 评分之前写到 biz_project (错表), 4 维度 (scoreQuality/Speed/Coordination/Compliance) 实体无字段, mapper 无 <if>, Spring Boot Jackson 默认丢弃未知字段 — 全部失效。
改动:
- 后端 BizProjectController.rate: 同步聚合该项目所有 compliance 评分的 4 维度总分之平均, 写回 biz_project.manager_score (1 位小数, HALF_UP)。复用现有 selectList, 不动 mapper xml。
- 前端 ManagerProjectDetail.submitScore: 改调 POST /business/project/rate, body 用后端字段名 (qualityScore/responseScore/cooperationScore/complianceScore), raterRole='compliance' 跟原型"角色:合规"对齐。加 totalScore<4 校验。
- 附: _self/manager_projects_detail.md 11 章审查报告 (含本修复)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-20 23:59:20 +08:00 |
|
 郭庆泰andClaude
|
79d7849a27
|
feat(projects-assign): P1+P2+P3 修复 (含服务端超额校验)
P1:
- 截止天数 max=100 + min=1 (前端拦超界输入)
- 合同文件区实装 (support/execute_contract_url 走 Preview.vue, 单条模式显示)
P2:
- 可用金额公式实时显示 (总金额×(1-管理费/总金额)-累计劳务-累计会务)
- 服务端二次校验: BizProjectAssignServiceImpl.validateSum 防前端绕过
P3:
- 命名统一: 支持方→支持单位 / 执行方→执行单位
- 行内删除按钮: 仅剩1 行时禁用第一个
- loading 态: el-descriptions + 批量 info-bar 加 v-loading
- 批量模式加载失败提示: failed 数组 + ElMessageBox.alert
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-20 23:31:37 +08:00 |
|
郭庆泰
|
88df386e76
|
fix(projects): selectList 补 managerScore 过滤 (修 §10 #3 P0)
前端评价得分筛选 q.managerScore 之前透传到后端但 mapper 没读, 形同虚设。
在 selectList 加 <if test="managerScore != null">and manager_score = #{managerScore}</if>,
跟 INSERT/UPDATE 同款 BigDecimal null check 风格 (无需 != '')。
EXPLAIN 验证: 12 行数据走 PRIMARY Backward scan, 命中 1 行 manager_score=5。
|
2026-08-20 22:42:30 +08:00 |
|
郭庆泰
|
be1c973366
|
docs+chore(projects): 索引 EXPLAIN 分析 + 修正过时注释
- BizOrgMapper: selectSponsorOrgOptions/selectExecutorOrgOptions 注释
写 "走 idx_org_user_type_name", EXPLAIN 实际命中 idx_org_type_status
(优化器小数据下选小索引), 改为实测索引 + Using where 描述
- manager_projects.md §9.3: biz_project_assign 唯一约束状态标 ✅
(SHOW INDEX 实测有 uk_project_unit, doc 老版本误标 ❌)
- manager_projects.md §9.5: 新增索引分析章节, 记录 8 个关键查询
EXPLAIN 命中 + 已加/评估后未加的索引决策
DB 实际改动 (已落库, 无 .sql 文件):
- ADD INDEX idx_assign_exec_user_project (exec_user_id, project_id)
on biz_project_assign — 服务机机构 EXISTS+IN covering 优化
- DROP 临时测试的 idx_org_type_id — 优化器未采纳, 33 行数据量不值
|
2026-08-20 22:39:34 +08:00 |
|
郭庆泰
|
2b69ef1c92
|
refactor(projects): 彻底删除 BizProject.execOrgName (废弃 @Deprecated 字段)
无外部引用 (前端/Mapper 已迁移完成), 直接清理避免 API 表面残留旧字段
|
2026-08-20 22:37:11 +08:00 |
|
郭庆泰
|
8d50450606
|
feat(projects): 服务机构筛选改 IN 精确查询
- BizProject: 加 List<Long> execAdminUserIds (多选 select IN 透传),
execOrgName 标 @Deprecated (兼容老 API)
- BizProjectMapper: selectList 替换 3 列 OR LIKE (org_name/user_name/nick_name)
→ EXISTS + bpa.exec_user_id IN (精确, 跟 sponsorAdminUserIds 对称)
- BizOrgMapper: selectExecutorOrgOptions 加 LIMIT 5 (跟 sponsor 对齐)
|
2026-08-20 22:30:40 +08:00 |
|
郭庆泰
|
1b35161722
|
feat: 支持单位筛选改 IN 查询 (后端)
BizProject.sponsorOrgName 字段历史上同时承担「查询参数 + 列表展示」两个职责, 现拆开:
- 保留: sponsorOrgName (String), 列表展示, JOIN biz_org 派生
- 新增: sponsorAdminUserIds (List<Long>), 查询参数, IN 多个 user_id
对齐方案 1 设计 (与 DB 列 sponsor_admin_user_id 命名一致, 与 assignForm.sponsorAdminUserId 单数版对齐)。
改动:
- BizProject.java: 加 import java.util.List; 加 List<Long> sponsorAdminUserIds + getter/setter; 改 sponsorOrgName 注释 (不再当查询参数, 只展示)
- BizProjectMapper.xml L167-173: 替换 sponsorOrgName LIKE 块为 sponsorAdminUserIds IN 块 (foreach 展开)
- BizOrgMapper.xml L120: selectSponsorOrgOptions 末尾加 LIMIT 5 (前端多选下拉最多 5 条)
未做:
- 前端 manager/Projects.vue L6 el-input 还在 (下一 commit 切到 el-select multiple)
- 旧的 sponsorOrgName LIKE 块已不存在, 但前端 q.sponsorOrgName 字段也还没改 (prototype 兼容期)
|
2026-08-20 22:19:52 +08:00 |
|
郭庆泰
|
44a020da68
|
feat: 整体废弃 leader 业务角色
leader 角色 (项目负责人) 业务上已不再使用, 整体下线。仅保留 sys_dept.leader 字段 (部门负责人, RuoYi 标准字段, 与角色无关)。
前端清理 (15 文件):
- 路由: 删除 /leader 块 + 4 子路由 (router L56-61)
- 菜单: 删除 AdminLayout 中 leader 菜单 (5 行)
- 视图: 删除整个 views/leader/ 目录 (Home/Projects/Meetings/Account.vue 共 ~32KB)
- Login.vue: 删默认 role='leader', 删 leader 角色选项, 删 autoRole 的 leader 分支, 删 roleHome 的 leader 项
- PortalShell.vue + 5 个 portal/* (Home/Publicity/ArticleView/PublicityDetail/SpecialPlanDetail): admin fallback '/leader/home' → '/admin/workbench', 删 leader 项, 同步更新 admin 入口 (/leader/home → /admin/workbench)
- 5 处 ROLE_LABEL 字典删 leader: '项目负责人' (AdminLayout/Account/Roles/Users/Workbench)
- Roles.vue 注释同步
后端清理 (7 文件):
- BizDashboardController: 删除 /leader dashboard 端点 (整个方法)
- BizPersonController: BUSINESS_MAIN_ROLES 删 leader
- BizExecutorController/BizProjectPlanController/ISysUserService/SysUserExtendVo/SysUser: 注释同步删 leader
测试:
- test_20rounds.py: 删 leader 路由断言 + view_map + role_home + role_view 共 5 处
未做 / 后续:
- DB: sys_user.role_type='leader' 现存账号是测试账号, 用户确认可忽略, 后续手动清理
- 文档: proto/html/leader.html 等原型文件保留 (历史)
- _self/*.md 笔记提及 leader 不动 (笔记)
|
2026-08-20 22:02:24 +08:00 |
|
郭庆泰
|
1e86865a40
|
feat: 合并 admin/manager 重复页 + 公示意向 + 劳务签署
页合并 (admin/manager 共用, route.path 角色感知):
- expert: Experts.vue + ExpertNew.vue (list/new/edit/view 一套)
- sponsor-orgs: SponsorOrgs.vue
- sponsor-people: SponsorPeople.vue + SponsorPersonNew.vue + SponsorPersonDetail.vue
- executor-orgs: ExecutorOrgs.vue
- executor-people: ExecutorPeople.vue + ExecutorPersonNew.vue + ExecutorPersonDetail.vue
- 给 SponsorPeople / ExecutorPeople op 列补上 查看/编辑 按钮 (潜在 bug 修复)
- 详情弹窗统一用 el-descriptions 风格 (替代 admin 旧版 ElMessageBox.alert)
后端:
- BizSignController + BizSignServiceImpl + PdfService (劳务签署 PDF 流程)
- BizPublicityIntentController (公示意向: 支持/执行)
- BizPublicitySupportIntent / BizPublicityExecutionIntent ExportVo
- BizMeetingAttendee 字段合并 (bank_region 替代 bankProvince/bankCity)
- BizExpert 字段合并 (id_card_attachments CSV, bank_region)
- Excel 导入模板精简 (开户行 1 列)
前端:
- doctor/SignFill + SignContract + SignSuccess (劳务签署 3 页流程)
- ImportResultDialog 通用组件
- IdCardUploader 重构 (单 v-model:idCardAttachments, CSV 格式)
- AreaCascader 调整
- Login.vue + AdminLayout.vue + PortalShell.vue + Home.vue 适配
DB: 字段合并 (id_card_front/back → id_card_attachments, bank_province/city → bank_region)
|
2026-08-20 21:02:56 +08:00 |
|
 郭庆泰andClaude
|
e496f34393
|
feat: 多处页面改造 + 新增劳务协议模板配置
主要改动:
- biz_meeting_attendee 中间表 + doctor/expert 角色数据隔离
- biz_meeting_attendee 加 handsign/labor_protocol 字段 (劳务协议改造)
- biz_labor_protocol_template 配置表 + admin 页面 (从 HeguiConstants 迁移)
- biz_expert.expertId 改 Long + IdGenerator 生成 (去自增)
- Login.vue / PublicityDetail.vue / Home.vue 等多处 bug 修复 + UI 改进
- 新增 page-tech-review 报告 3 篇 (_self/*.md)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-19 21:06:49 +08:00 |
|
 郭庆泰andClaude
|
ec4a8aa8f0
|
feat: org disable 整改 + biz_meeting 补字段 + 表格 0/1 显示标准化
1. backend: 禁用主账号 dual-write + 子账号登录校验主账号状态
- BizOrgServiceImpl.toggleStatus: 同步 biz_org.status 与 sys_user.status
- BizOrgController.toggleStatus: 严格校验 '0'/'1'
- BizAuthController.smsLogin 4.5: 子账号校验主账号状态拦截
2. fix: BizMeeting 补 9 个字段 getters/setters
- projectId / projectName / orgName / supervisionOpinion / supervisionBy
- supervisionTime / invitationUrl / scheduleUrl / laborSigned
- 解决 Meetings.vue 修改/复制 projectId 为空的 bug
3. frontend: 0/1 status 标准化显示
- 10 个 Orgs/People 表格 el-tag 由 raw 0/1 改为 正常/禁用
- 4 个 People 页面修复 row.status || '正常' 在 '0' 时不
回退的 bug (字符串 '0' 是 truthy)
- 筛选下拉 / 编辑表单 / onToggleStatus label 全部对齐 0/1 语义
- DB 迁移: 10 行脏数据 (7 正常/合作中 → 0, 3 禁用 → 1)
- 备份表 biz_org_backup_20260819
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-19 00:27:15 +08:00 |
|
郭庆泰
|
14757f359b
|
fix(meetings): selectList 加 7 个筛选 if (P0#1), Date 字段加 @DateTimeFormat 让字符串能 Spring 绑定
|
2026-08-18 23:20:54 +08:00 |
|
郭庆泰
|
ffda9c618e
|
feat(biz_project): 加 create_user_id 列, JOIN biz_person 取创建人姓名
|
2026-08-18 23:00:41 +08:00 |
|
 郭庆泰andClaude
|
66a928a870
|
fix(meeting-new): 落实 manager/meetings/new 审查报告 13 项修复
P0 数据正确性:
- BizMeetingMapper.xml INSERT 扩 20 列 (原只插 meeting_id)
- BizMeetingServiceImpl businessId 兜底生成 (DDL NOT NULL, 前端无字段)
- MeetingNew.vue onMounted 回填 projectId/projectName (原只 projectNo)
P1 核心功能:
- 删 会议ID 输入框 (PK 让用户填错)
- 加 6 个项目只读快照 (el-descriptions, 跟原型对齐)
- 会议名称默认 = 项目名称, 不可修改 (加红字提示 + disabled)
- meetingId String → Long (6 文件: BizMeeting/Mapper/ServiceImpl/Controller/IBizMeetingService/Mapper.xml)
- supervisionTime String → Date + @JsonFormat
P2 体验:
- 面包屑改 项目列表 / 新建会议
- page-sub 显示项目名而非 ID 13
- 当前阶段 el-select 4 → 10 选项
- resultMap/selectFields 补 9 个漏字段 (projectId/projectName/orgName/supervision*/invitation*/schedule*/labor*)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-18 22:33:37 +08:00 |
|
郭庆泰
|
66068c6f57
|
refactor(biz/project): 修实体类型不一致 projectId String→Long + startTime/endTime String→Date
- BizProject.projectId String→Long (9 文件: domain / IBizProjectService / BizProjectServiceImpl /
BizProjectMapper.java+xml / BizProjectController / BizExecutionIntentController /
BizPublicityIntentController / BizPublicController). 删 SnowflakeId.injectIfEmpty
(Long setter 不匹配反射 NoSuchMethodException, biz_project 用 AUTO_INCREMENT 安全)
- BizProject.startTime/endTime String→Date, 加 @JsonFormat yyyy-MM-dd HH:mm:ss (跟 BizMeeting 一致)
- Mapper XML 8 处 <if test='x != null and x != ""'> → <if test='x != null'> (Date 无 isEmpty)
- _self/manager_projects.md: §6.3 + §9.1 标已修, 加修复记录章节
|
2026-08-18 22:03:45 +08:00 |
|
 郭庆泰andClaude
|
e59b512e4b
|
fix(person): 子账号继承主账号 role_type + Login 不再硬编 leader
问题: sponsor 主账号新建的子账号 role_type 没写入,
被 sys_user.role_type DEFAULT 'executor' 覆盖,
导致子账号进入 executor 视角;另外 Login.vue
autoRole/短信登录都硬编 'leader' 兜底, getInfo
失败时静默跳 /leader/home。
修复:
- BizPersonServiceImpl.insert 读主账号 SysUser,
把 mainUser.getRoleType() 写到新子账号
(SysUserMapper.xml insertUser 已支持 role_type 列)
- Login.vue: 短信登录 fallbackRole 改 '',
autoRole 不匹配返回 '', afterLogin 无 role 跳 /login
(不再 fallback /leader/home)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-18 21:35:51 +08:00 |
|
郭庆泰
|
40f296b59d
|
refactor(executor): 对齐 sponsor 人员管理模式 + 修 3 个 bug
后端:
- BizAuthController.registerExecutor step 6 同步建 biz_person (主账号自己=管理员, name=unitName, role='admin', unit_type='executor'), 让"人员管理"能看见自己 (跟 registerSponsor 同模式, 走 BizPersonMapper 直插, 绕过 SUB 子账号逻辑)
- BizPersonMapper.xml selectExecutorList 加 OR u.user_id=主账号 (主账号自己能查到), + countAdminByOrgId (校验公司唯一管理员)
- SysUserMapper.xml 手机号正则 1[3-9] → 1[0-9] (允许 10 开头测试号段, 跟 sponsor 一致)
前端 executor/NewPerson.vue 1:1 对齐 sponsor/NewPerson.vue:
- el-card form-card 包裹 + el-row :gutter=12 两列布局
- 用户名/初始密码 行 (v-if=!isEdit)
- 状态改用 el-radio-group, 值 0=正常 1=禁用
- 修了状态值反向 bug: 原 executor 正常→"1" 禁用→"0" 跟 DB/UserStatus enum 相反, 编辑时反向生效 (BizPersonServiceImpl.insert 硬编码 status='0' 掩盖了 bug)
- role 统一 el-select + admin 选项 :disabled=true (管理员只能注册时建)
- 编辑模式 el-select :disabled=true (不能改角色)
- phone 正则 /^1[0-9]\d{9}$/, userName 3-30 模式, password 6-30, department maxlength=100
- 新建成功 ElMessageBox.alert 展示子账号+密码
- 重复手机号走 warning 黄 (isDuplicateError)
- confirmCancel 取消确认
- loadMyOrg 自动带出主账号公司
前端 executor/People.vue:
- 状态列对齐 sponsor: row.status === '0' ? '正常' : '禁用' (修原 || '正常' fallback bug 导致显示原始 '0' + 颜色永远红的两个 bug)
- 批量导入 完整实装 (原 downloadTemplate/submitImport 都是 stub, 只弹提示):
- downloadTemplate GET /business/person/executorImportTemplate + blob 下载 + 解析 Content-Disposition 文件名
- submitImport POST /business/person/executorImport + FormData + 导入结果 dialog (行号/姓名/手机号/成功+错误信息)
- el-upload 加 :on-change=:on-remove 自管 file, footer 改 "关闭/开始导入" 带 loading/disabled
- 新增 onImport 先 clearFiles 再开 dialog
|
2026-08-18 21:32:10 +08:00 |
|
 郭庆泰andClaude
|
1cba0d4052
|
refactor(person/import): 模板精简到 4 列, 所属公司+角色由后端兜底
BizPersonImportVO.java:
- @Excel 注解砍掉 orgName (所属公司) + role (角色), 字段保留兼容老模板
- 部门/职务 sort 序号重排: 3, 4
- 模板列头从 6 列精简到 4 列: 姓名/手机号/部门/职务
BizPersonController.java doImport:
- 删除 orgName 必填校验 + bizOrgMapper 字符串匹配 orgName → orgId 的旧逻辑
- 删除 p.setOrgId(orgId), 让 BizPersonServiceImpl.insert 按 mainUid + unitType
自动反查主账号 biz_org 兜底 (service 内已有 line 56-70 兜底逻辑)
- p.setRole(row.getRole()) 改成 unitType 写死:
sponsor → 'supervisor' (监察员), executor → 'meetingExecutor' (会议执行)
- 死代码清理: 删除 BizOrg + BizOrgMapper import + @Autowired (controller 内不再使用)
行为变化:
- 老模板 (6 列) 上传不会报错, 多出的 orgName/role 列值被忽略 (setter 保留)
- sponsor/executor 双端受益, 都不再需要 Excel 提供 orgName/role
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-18 21:09:05 +08:00 |
|
 郭庆泰andClaude
|
76dd4d7306
|
feat(sponsor/people): 主账号同步建 biz_person (admin/总负责人), 列表可见 + 操作列对本人隐藏 + 新建下拉不包含 admin
后端:
- BizAuthController.registerSponsor step 6: 为主账号同步建 biz_person
(走 BizPersonMapper 直插, 绕过 BizPersonServiceImpl 创 SUB 子账号的逻辑;
SnowflakeId 注入 personId; department=管理部, position=总负责人, role=admin,
unit_type=sponsor, user_id=主账号自己)
- BizPersonMapper.java + xml 新增 countAdminByOrgId: 校验某 org 下是否已有 admin
(注册场景下天然返回 0, 是给未来 bug 兜底, registerSponsor 暂不调用)
- BizPersonMapper.xml selectSponsorList: WHERE 加 OR u.user_id=#{sponsorOwnerUid},
让主账号自己的 biz_person (parent_user_id=NULL) 也能被自身 list 看到
前端:
- utils/roleMap.js: PERSON_ROLE_LABEL 加 admin:'管理员'
- sponsor/SponsorPeople.vue: 角色列改用 translatePersonRole, tag type 按 role 动态
(admin=warning, supervisor=primary); 操作列本人隐藏 禁用/恢复 + 删除
(v-if=row.userId !== store.user?.userId, 防主账号把自己禁用/误删)
- sponsor/NewPerson.vue: 编辑模式 role=admin 显示静态 el-tag, 新建下拉仍只含 supervisor
- sponsor/PersonDetail.vue: 角色展示同步用 translatePersonRole
- auth/Login.vue + portal/Home.vue: 文案 监察员 → 管理员 (注册即管理员, 可建监察员子账号)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-18 20:46:42 +08:00 |
|
郭庆泰
|
50c2678ec6
|
refactor(executor/people): 加 executorList 兜底, SQL 硬编码 unit_type='executor' (跟 sponsor 同模式)
- mapper BizPersonMapper.xml 新增 selectExecutorList, SQL 内硬编码 unit_type + parent_user_id=当前主账号
- controller 加 GET /business/person/executorList
- service / mapper 接口同步声明 selectExecutorList
- 前端 api/business/person.js 加 listExecutorPerson
- executor/People.vue 改调 listExecutorPerson, 删 bizList + unitType 参数
效果: executor 端人员列表也走专属接口, 前端传 unitType 绕不开 SQL 兜底
|
2026-08-18 01:42:05 +08:00 |
|
郭庆泰
|
8bee167704
|
feat(manager/plans + biz-project): 审核 dialog 项目编号改远程 el-select
后端 (BizProjectController):
- 新增 GET /business/project/projectNoOptions
- 返回 [{projectNo, projectName}], 仅 project_no 非空, 按 projectNo 倒序
- 不加 @PreAuthorize (manager 是业务角色, 与 specialPlan/options 一致)
前端 (manager/Plans.vue):
- 模板: 项目编号 el-input → el-select (filterable, 显示 projectNo / projectName)
- script: 加 projectNoOptions ref + loadProjectNoOptions() 函数
- onAudit: 每次打开 dialog 调 loadProjectNoOptions 拿最新 options
|
2026-08-18 01:08:28 +08:00 |
|
郭庆泰
|
67be5345ad
|
refactor(submissions): 方案A — mapper submitter_name + 页面样式对齐 + 紧急迁移
- mapper: selectFields 加 COALESCE(bp.name, u.user_name), LEFT JOIN biz_person (uk_person_user_id 防笛卡尔积)
- mapper: insert 补 7 字段 (plan_name/plan_direction/plan_category/project_form/design_file_url/is_settled/project_no), plan_name NOT NULL 缺默认
- SQL: 紧急迁移脚本 add submitter_id + idx + biz_person UNIQUE (ALTER, 不 DROP)
- SubmissionNew: page-card + breadcrumb + max-width 1200px, accept=.pdf/.png/.jpg/.jpeg, __silentError 防双 toast
- SubmissionNew: el-upload drag 模式 A (对齐 Meetings.vue, 删 design-uploader 自定义 CSS)
- SubmissionDetail: 删状态/投稿人/投稿时间/审计, 改 Preview 组件展示设计文件
|
2026-08-18 00:51:53 +08:00 |
|
郭庆泰
|
b52a334184
|
chore: biz_org 合并 / BizProject 重构 / 各角色页面调整 (上次重构遗留)
涵盖改动范围:
- 后端 BizOrg / BizProject / BizProjectRating / BizSpecialPlan controller + domain + mapper + service
- 前端 admin (BizSpecialPlanAdmin, ProjectCategory) / executor / leader / manager / sponsor 多页调整
- api/dict.js + AdminLayout.vue 同步
|
2026-08-18 00:30:34 +08:00 |
|
郭庆泰
|
c9fc6ebdb8
|
refactor(doctor/submissions): 合并到 biz_project_plan + 删除 biz_submission 死代码
- /doctor/submissions 改走 biz_project_plan,与 /manager/plans 字段/组件/状态字典完全对齐
- BizProjectPlan 加 submitter_id (BIGINT) + submitter_name (LEFT JOIN 查询字段)
- mapper 改 LEFT JOIN biz_person + sys_user,COALESCE(bp.name, u.user_name) 兜底
- biz_person.user_id 加 UNIQUE 索引 (1:1 LEFT JOIN 无笛卡尔积)
- controller 加 doctor 角色自动过滤: list 按 submitter_id, add/edit 强制 submitter_id
- 删除 7 个 BizSubmission 死代码 (Controller/Service/Mapper/Domain/XML/Enum) + 1 utils
- 路由参数 :subId → :planId (路径名 submission 保留产品文案)
- 新增 migration_submission_to_projectPlan_2026_08_18.sql
|
2026-08-18 00:28:40 +08:00 |
|
郭庆泰
|
b41cf77cac
|
feat(publicity): 公示页支持/执行意向 (匿名提交 + 管理审核)
- 新增 biz_publicity_support_intent / biz_publicity_execution_intent 两张独立表
(与已登录视角的 biz_support_intent / biz_execution_intent 解耦, 避免匿名数据污染强绑表)
- 后端 BizPublicityIntentController: 公开提交 + 公开查重 (按 project_id+phone+source) + 管理 CRUD
已登录直接取 user_id, 未登录但 phone 命中 sys_user 仍自动关联 user_id (不回强制登录)
- /business/publicity/** 加 Spring Security permitAll
- 前端 PublicityDetail.vue: 右侧 2 个意向按钮 (已登录/匿名都弹 dialog 填 5 字段),
已提交状态用 hasPublicityIntent 按 phonenumber 持久化查回
- 重写 manager/SupportIntent.vue + manager/ExecIntent.vue: 列表/筛选/CSV导出/状态变更/批量删除
|
2026-08-17 01:15:16 +08:00 |
|
 郭庆泰andClaude
|
e099211cbd
|
feat(项目管理): 招标字段/负责人/导出/下拉/登录短信 完整链路
后端 (ruoyi-business)
- BizProject: +is_bid_project, +execOrgNames(GROUP_CONCAT派生), +leadUserName
- BizProjectMapper.xml: 上述字段全部贯通 selectFields/insert/update, 列表加 exec_org_names 子查询 + lead_user_name JOIN
- BizSysUserQueryMapper (新): 干净查 sys_user by role_type, 避开 @DataScope 切面污染, 用于项目负责人下拉
- BizOrgMapper.selectExecutorOrgOptions (新): JOIN sys_user (parent_user_id IS NULL) 限定 MAIN 账号, 排除同公司普通员工子账号
- BizOrgController: +/business/org/executorOptions 端点
- BizExecutionIntentController: +exportSignupExperts 端点 (POST /business/executionIntent/export)
- BizSignupExpertExportVo (新): 中文列头 Excel 导出 VO (专家姓名/科室/医院/职称/报名时间/手机号)
- BizProjectAssign / SponsorAssign 重命名 + Service 实现调整
- 删除 sql/ 下所有迁移脚本 (按用户要求不再保存 SQL 文件)
前端 (ry-vue3)
- api/system.js: +listExecutorOrgs 走新接口, listExecutor/listSupporters/listManagers 保持 listByRole 兼容
- views/manager/Projects.vue: 执行方下拉改 label=u.orgName / value=u.userId, 数据源走 listExecutorOrgs
+execOrgNames 列展示 +导出报名专家 dropdown 项 +is_bid_project 表单字段
- views/manager/ProjectsNew.vue + ManagerProjectDetail.vue: +is_bid_project 表单/展示
- views/auth/Login.vue: +手机号验证码登录 tab (复用 SysSmsService, dev 模式 10 开头手机号固定码 1234)
- 路由/布局/角色视角多页面整理 (SponsorOrgs/People/SponsorPersonNew 等)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-17 00:34:13 +08:00 |
|
郭庆泰
|
ccfd03a6eb
|
批量推送
|
2026-08-16 21:24:53 +08:00 |
|
郭庆泰
|
0c093076a4
|
批量推送
|
2026-08-16 13:42:26 +08:00 |
|
郭庆泰
|
c612d4297a
|
feat: 统一角色枚举 (meetingExecutor/supervisor) + 子账号数据隔离 + Login 读取后端 role_type
后端:
- SysUser 加 roleType 字段 (entity + mapper selectUserVo + service 接口/实现)
- SysUserMapper 新增 selectUserIdsByParent (按 parent_user_id 取子账号列表)
- BizPersonController.list 自动注入 MAIN 业务用户可见性: 仅查 user_id IN (子账号列表)
- BizPersonMapper 加 params.subUserIds foreach 过滤
- BizPerson/BizPersonServiceImpl 配合 getParams().put
前端:
- Login.vue 改用后端 sys_user.roleType 替代 username 前缀 autoRole, 修复 exe01 错入 leader 菜单
- utils/roleMap.js 新增: meetingExecutor->会议执行, supervisor->监察员
- executor/People.vue / sponsor/NewPerson.vue / sponsor/Projects.vue / sponsor/SponsorProjects.vue /
manager/ManagerProjectDetail.vue / manager/{Executor,Sponsor}PersonNew.vue /
admin/{Executor,Sponsor}PersonNew.vue 全部改为 enum key
SQL:
- migration_unify_role_type_2026_08_16.sql 清洗 biz_person.role 从中文到 enum key
|
2026-08-16 13:41:42 +08:00 |
|
郭庆泰
|
cf5790229a
|
refactor: 合并 biz_support_unit/biz_execution_unit/biz_service_org 为 biz_org, 删除 2 张孤儿表, 改 biz_person.work_unit → org_id FK
主要改动:
- SQL: biz_support_unit → biz_org, 加 org_type, 加 business_nature; 删 biz_execution_unit, biz_service_org
- SQL: biz_project.support_unit_id/name + service_org_id/name → org_id/name/type
- SQL: biz_meeting.support_unit_name → org_name
- SQL: biz_person.work_unit → org_id (FK)
- 后端: 新 BizOrg entity/mapper/service/controller
- 后端: BizProject/BizMeeting 字段重命名
- 后端: 删 12 个 BizSupportUnit/BizExecutionUnit/BizServiceOrg Java 文件
- 后端: BizPersonImportVO.workUnit → orgName (导入时查 biz_org 取 org_id)
- 后端: BizAuthController.registerExecutor 完整实现 (原 registerSupplier stub)
- 前端: 新 admin/Orgs.vue + manager/Orgs.vue (原 SupportUnits)
- 前端: RegisterExecutor.vue (原 RegisterSupplier, 单页 2 步)
- 前端: sponsor/executor/manager 多个文件 workUnit → orgId/orgName 重命名
- 前端: 统一 supplier → executor, 业务命名 sponsor(赞助方) / executor(执行方=供应商)
- 前端: 全工程 execution → executor (company type / role / person unit_type)
|
2026-08-15 12:41:10 +08:00 |
|