Commit Graph
117 Commits
Author SHA1 Message Date
郭庆泰andClaude edfaf4e7f5 fix(detail): 删 Write 残留的 </content> </invoke> 标签 (Vite 解析报错)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 00:03:31 +08:00
郭庆泰andClaude 8ff87c6845 refactor(detail): 项目详情页改为只读, 移除所有增/删/编辑操作
按用户意图: 本页面 = 详情页 = 只读查看。

移除:
- 角色劳务: 行删除按钮 + + 增加角色按钮 + addRoleRow/removeRoleRowAt 函数
- 监督员: 行删除按钮 + + 增加监督员按钮 + openAddMonitor/confirmAddMonitor/removeMonitorAt + 候选人 dialog
- 已发布公告: 发布/刷新/删除按钮 + openUpload/submitAnnouncement/deleteAnnouncement + upload dialog
- 项目评价: 点击编辑 dialog + openScoreDialog/submitScore + score dialog
- 未使用的 state: scoreForm/scoreDims/totalScore/uploadForm/announceTypes/newMonitor/monitorCandidates/submitting

保留:
- 4 个区块只读展示 (项目信息 / 角色劳务 / 监督员 / 公告列表)
- 公告 Preview 组件 (查看附件)
- goBack / goEdit 导航 (供面包屑和后续编辑页跳转)
- loadProject / loadAnnouncements 数据加载

业务去向 (本任务范围外):
- 评分编辑 → /manager/projects/edit/:projectId (ProjectsNew.vue)
- 角色劳务 / 监督员编辑 → 同上
- 公告发布 → 后续需新增专门管理页

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 00:02:38 +08:00
郭庆泰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 25be0d5d89 style(detail): page-card max-width 1200px 居左
- 跟 ManagerProjectsAssign 一致, 详情/表单页统一 1200px 上限
- 默认 block 元素左对齐, 无需 margin: 0 auto

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:49:54 +08:00
郭庆泰andClaude c2030b1564 style(detail): 统一章节标题 class + 改红字提示为灰字 (对齐 ProjectsNew)
- 3 处 .section-title → .new-card-title (项目信息已用, 现在全页统一)
- 2 处 .hint-red → .hint-text (灰字 #909399, 跟 ProjectsNew 一致)
- 删 .section-title / .hint-red 冗余样式块
- 加 .hint-text 样式 (1:1 抄 ProjectsNew L378-380)
- 业务逻辑 0 改动

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:49:20 +08:00
郭庆泰andClaude 13c4bd4e76 fix(assign): 提交截止(天) 单条模式回填, 批量模式显示空
- loadSingleProject: 回填 assignForm.deadlineDays = Number(p.submitDeadlineDays || 30)
- resetAssignForm: 批量模式 deadlineDays = null (显示空), 单条默认 30
- loadBatchProjects: 保持不回填 (N 项目共用空值, 沿用初始状态)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:43:34 +08:00
郭庆泰andClaude d1c755971d docs: 加 _self/manager_projects_assign.md + manager_projects 修复记录
- manager_projects_assign.md: 新增 11 章端到端审查报告 (4 跳定位 + Entity 一致性 + 索引 + 原型对比 + 待修复 16 条)
- manager_projects.md: 修复记录表加 2026-08-20 P1/P2/P3 修复条目 (与上面 commit 一致)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:31:41 +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
郭庆泰andClaude bf1b4a3010 fix(projects-assign): el-descriptions v-if 条件改为仅 !batchMode
原 v-if="!batchMode && currentProject" 会因为 currentProject.value 异步未赋值或 ref unwrap 时机问题, 导致 el-descriptions 整块不渲染; 而 info-bar 用可选链 + || '-' 不受影响。

修复:
- v-if 简化为 v-if="!batchMode"
- 6 个字段访问统一用 currentProject?.xx || '-' (兜底)
- 这样单条模式一定渲染 el-descriptions 框架, 数据未加载完时显示 -

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:11:55 +08:00
郭庆泰andClaude 5e688f17b1 feat(projects-assign): 上半部分展示项目核心属性 (单条模式)
6 字段 3 列 el-descriptions 只读展示:
  - 项目编号 / 项目名称 / 项目形式
  - 总场次 / 总金额 / 管理费及税金
批量模式不展示 (各项目字段独立, 不适合合并展示)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:06:30 +08:00
郭庆泰andClaude 7f4c66e147 style(projects-assign): 限宽 1200px 改为靠左 (去掉 margin auto)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:04:51 +08:00
郭庆泰andClaude e3289a3bfc style(projects-assign): page-card 限宽 1200px 居中
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:04:37 +08:00
郭庆泰andClaude 3240590f40 refactor(projects): assign + assign-batch 合并为单路由, 子页面 v-if 区分
- router 删 /assign-batch 路由, 仅保留 /assign (单条/批量都走)
- Projects.vue openAssign() 2 个 push 路径统一为 /manager/projects/assign
- 子页面面包屑加 v-if 批量模式 tag (橙色 badge 标识)
- 单/批模式区分完全靠 query.projectId vs query.projectIds + 子页面内 v-if/v-else 区块 (info-bar / 实时校验栏)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:03:43 +08:00
郭庆泰andClaude 36b62a26b9 refactor(projects): 项目分配 dialog 拆为独立子页面
- 新增 ManagerProjectsAssign.vue (单条/批量共用, 通过 route.query.projectId/projectIds 区分)
- router 加 2 个路由 /manager/projects/assign 和 /assign-batch
- Projects.vue 移除项目分配 dialog (template + 9 个 state/computed/function)
- Projects.vue 两个入口 (toolbar 项目分配 + 行内项目分配) 改为 router.push
- 顶部筛选区的 searchSponsorOrgsForFilter / searchExecutorOrgsForFilter 保留 (跟子页面解耦)
- 功能 1:1 不变: 支持方 / 实时校验 / 执行方分配 / 总场次超量校验 / 提交截止天数

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 23:02:08 +08:00
郭庆泰 25cec1e404 docs(projects): 删除误标的 P0 #1 #2 + 相关错误标注
- §1.1 L47 删除公告: 简化 5 个 URL + is_published='0' → 3 个 URL
- §5.3 L164 开通单条: 删 "⚠️ 字段写错了" + "但实现不对" 标记
- §5.3 L165 删除公告: 简化 5 个 URL + is_published → 3 个 URL
- §9.1 L273-277: 删除 5 行死字段表 (noticeUrl/scheduleUrl/isPublished/publishTime/announcementType)
- §9.1 L283: 删除"修订标记"段落 + "后果"说明
- §9.1 L369: 删除"🔴 严重冗余"bullet
- §10 L430-431: 删除待修复 #1 + #2
2026-08-20 22:50:36 +08:00
郭庆泰 84f7aa56d2 docs(projects): managerScore 过滤 P0 修复同步 (88df386)
- §修复记录 加 2026-08-20 条目 (managerScore + commit SHA)
- §2 筛选项表:  未生效 → line 188 manager_score = ? (BigDecimal)
- §2 后跟的 ⚠️ 重要 bug 提示 →  已修 + 注明 selectSponsor/ExecutorList 故意不加
- §8.1 过滤功能差异表: 🐛 后端已生效
- §10 待修复 #3: 标记 ~~删除线~~ + 已修
2026-08-20 22:43:04 +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
郭庆泰 b4acd72084 docs(projects): 服务机构筛选改多选 el-select 同步
- §2 筛选项表: 服务机构行镜像支持单位 (el-select multiple+remote, execAdminUserIds, EXISTS+IN, executorOptions)
- §9 字段映射表: execOrgName 标 @Deprecated, 加 execAdminUserIds (查询参数)
2026-08-20 22:32:47 +08:00
郭庆泰 e462eeaa09 feat(projects): 服务机构筛选改多选 remote el-select (前端)
- 服务机构 el-input → 多选 remote el-select (跟 sponsor 镜像)
- q.execOrgName → q.execAdminUserIds (List<Long>)
- 新增 executorOrgOptions / execSearching / _executorFilterTimer
- 新增 searchExecutorOrgsForFilter (200ms debounce + 已选 userId 重拉回保证 label)
2026-08-20 22:31:52 +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
郭庆泰 9d2ed60a32 docs: manager_projects.md 字段映射表同步
支持单位筛选 UI 切换为 el-select 多选, 文档同步:
- 控件: el-input → el-select (multiple+remote)
- v-model: q.sponsorOrgName → q.sponsorAdminUserIds (List<Long>)
- 后端 SQL: 旧 LIKE 块 → 新的 IN foreach 块
- 选项来源: 空 → /business/org/sponsorOptions (LIMIT 5)

未做:
- L145 (列表展示列) / L269 (派生字段) / L373 (派生字段列表) 提及 sponsorOrgName 不动 — 展示字段保留
- _self/manager_meeting_new.md (3 处) 提及 sponsorOrgName 不动 — 展示字段保留
2026-08-20 22:21:12 +08:00
郭庆泰 c85370d925 feat: 支持单位筛选改 el-select 多选 (前端)
manager/Projects.vue 顶部筛选区的「支持单位」从 el-input 升级为 el-select multiple + 远程搜索。

改动:
- L6: el-input → el-select (multiple + filterable + remote + clearable + collapse-tags + collapse-tags-tooltip)
  - v-model: q.sponsorOrgName (string) → q.sponsorAdminUserIds (number[])
  - remote-method: searchSponsorOrgsForFilter (新增)
  - loading: sponsorSearching (新增)
  - width: 260px (比输入框宽, 容纳标签)
- L291: q ref 字段重命名 + 改类型
- L341: reset() 同步
- 新增: sponsorSearching ref (loading 指示)
- 新增: _supporterFilterTimer (filter 防抖, 与 assignForm 的 _supporterTimer 分离)
- 新增: searchSponsorOrgsForFilter(query) — 复用 listSponsorOrgs + sponsorOrgOptions
  - 200ms debounce
  - 已选项不在结果里时按 userId 单独拉回 (multi-select 必须保证每个 tag 都有 label)

未做 / 后续:
- 执行方 (execOrgName) 同样可改多选, 沿用本次模式即可, 暂不动
- q.sponsorOrgName 字段已从源消失, 注释提到「sponsorOrgName」的 _self/manager_projects.md 待同步 (下一 commit)
2026-08-20 22:20:53 +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
郭庆泰 af1ee0a5f7 style: /admin/users 角色/状态下拉宽度 140px
之前两个 select 没有显式 width, 跟着 el-select 默认走, 视觉上比旁边的输入框窄, 看着不平衡。

参考项目惯例 (SponsorOrgs/ExecutorOrs/BizSpecialPlanAdmin 等) 统一用 140px。
2026-08-20 21:47:50 +08:00
郭庆泰 7ad6b3ddbe feat: /admin/users 新增删除按钮
admin 用户管理此前只有编辑/停用, 没有删除入口 (但后端 DELETE /system/user/{userIds} 一直存在, @PreAuthorize('system:user:remove'))。

改动:
- 操作列新增「删除」按钮 (danger, link 风格, 与编辑/停用风格一致)
- 操作列宽度 180 → 240 容纳 3 个按钮
- 删除自己时禁用 (前端 UX 防护, 后端亦会 reject: ArrayUtils.contains(userIds, getUserId()))
- 二次确认框: 提示用户名/姓名 + 「删除后无法恢复, 关联数据将受影响」, type='error', 红色「确认删除」按钮
- 后端: DELETE /system/user/{userId} (RuoYi 标准 /{userIds} 路径, 单 ID 即可)

权限: admin 角色默认拥有 system:user:remove (RuoYi 默认 admin 配), 验证通过后即生效。
2026-08-20 21:46:47 +08:00
郭庆泰 8c9fe1cd04 feat: 删除 admin 会议全览菜单 + 死页面 admin/Meetings.vue
admin 账号不关注会议, 移除 admin 视角的会议入口。

清理:
- router L29: 删除 admin-meetings 路由
- AdminLayout L78: 删除「会议全览」菜单项
- 删除 ry-vue3/src/views/admin/Meetings.vue (~95 行死页面, 同 admin/Projects.vue 一样是早期未完成桩)

Calendar icon 仍由 leader/manager/doctor/executor/sponsor 角色使用, 保留 import。
2026-08-20 21:43:07 +08:00
郭庆泰 06c0a0e523 feat: admin/Projects.vue 桩合并到 manager/Projects.vue
admin 的 Projects.vue 原本是未完成桩 (91 行, 5 列只读, 无操作), 实质上是 manager 的 Projects.vue (874 行全功能) 的早期开始但没收尾。

合并方案 (最小动刀):
- router L28: admin-projects 组件由 @/views/admin/Projects.vue 改为 @/views/manager/Projects.vue
  注意: admin 路由 meta.title 由 '项目全览' 一并改为 '项目管理', 与 manager 文案统一
- AdminLayout L77: 菜单标题 '项目全览' → '项目管理' (与 router 同步)
- 删除 ry-vue3/src/views/admin/Projects.vue

admin 角色登录后看到的项目页 = manager 的全功能页 (新建/编辑/分配/评分/批量/导出/结题/开通/删除公告), 一步到位, 后续不用再分叉。

未做 / 后续:
- admin 角色缺 /projects/new /projects/edit/:id /projects/detail/:id 路由, 想新建/编辑/查看会 404 (当前 manager 专属)
- 后端权限校验 (例如 /business/project/rate) 是否对 admin 开放待确认
2026-08-20 21:41:18 +08:00
郭庆泰 31588f259b chore: 删除死页面 admin/manager Orgs.vue (公司管理)
两个 Orgs.vue 是早期未按 orgType 拆分前的合集视图, 已被 sponsor-orgs + executor-orgs 替代。无菜单入口, 只能通过 URL 直接访问, 功能冗余。

清理:
- 删 admin/Orgs.vue + manager/Orgs.vue
- 删 router admin-orgs + manager-orgs 两条路由
- 共 -4 处, 0 引用风险
2026-08-20 21:10:42 +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 3198c408b7 feat: 劳务协议编辑改独立页 + 去 el-card 圆角框
- 新增 LaborProtocolEdit.vue (独立页, 新建/编辑复用, 跟 ExpertNew.vue 风格一致)
- 加路由 /admin/labor-protocol/new 和 /admin/labor-protocol/edit/:id
- LaborProtocol.vue 删 el-dialog + 改为 router.push 跳转
- 新增 .form-card.nested { border: none; box-shadow: none; } 去 el-card 圆角框
- 新增 _self/admin_labor_protocol.md 审查报告

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-19 21:17: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
郭庆泰 9f132d4f86 fix(meetings): copy 模式 reset periodNo, 清 meetingId 防走错分支; goBack 按 mode 区分回上游 (new→projects, edit/copy→meetings) 2026-08-18 23:45:45 +08:00
郭庆泰 8fd7eaeb5a fix(meetings): 还原 MeetingNew.vue 到 a081da8 模板结构 (左6+右5, 无项目形式/总期数), 保留 3 模式逻辑 2026-08-18 23:45:08 +08:00
郭庆泰 ba34f04432 fix(meetings): 调表单右列顺序 (会议名称→项目形式→期数→总期数→开始→结束→备注), 备注跨双列, form 字段顺序同步 2026-08-18 23:41:41 +08:00
郭庆泰 936256df2b fix(meetings): 修上轮重命名 projectId→urlProjectId 后没同步 onMounted new 分支, 导致建会流程空跑 2026-08-18 23:40:57 +08:00
郭庆泰 1e4546d791 fix(meetings): 修改/复制 URL 带 projectId 让左列快照立刻加载; meeting 冗余字段兜底防 project_id 为 NULL 2026-08-18 23:38:28 +08:00
郭庆泰 f2830196a1 refactor(meetings): 修改/复制跳独立页 /manager/meetings/new?meetingId=xxx[&mode=copy], 移除列表页 edit dialog 2026-08-18 23:36:08 +08:00
郭庆泰 580410f70f docs(manager_meetings): 重写, 按 skill 标准 11 章走, 修复记录归附录 2026-08-18 23:31:09 +08:00
郭庆泰 bae9fa6a6f fix(meetings): 恢复会议ID filter (原型有), 第?期 改 el-input-number 2026-08-18 23:27:17 +08:00
郭庆泰 c91272a05f fix(meetings): 删会议ID 筛选框 (P0#2), 保留列 (用户未要求删) 2026-08-18 23:23:35 +08:00
郭庆泰 af4373b2dd docs(manager_meetings): 第四轮修复记录 (P0#1 mapper 筛选), 待修复表 #1, 记 DB stage 数据不一致 2026-08-18 23:21:21 +08:00
郭庆泰 14757f359b fix(meetings): selectList 加 7 个筛选 if (P0#1), Date 字段加 @DateTimeFormat 让字符串能 Spring 绑定 2026-08-18 23:20:54 +08:00
郭庆泰 e644e0897f docs(manager_meetings): 第三轮修复记录 (style-alignment + 批量按钮去 plain), §9/§10/§11 同步, 待修复表新增 #18-#20 2026-08-18 23:17:53 +08:00
郭庆泰 6774c44429 fix(meetings): 批量提交按钮去 plain (disabled 顺色), 提示推最右 2026-08-18 23:15:57 +08:00
郭庆泰 6d4f1e66d4 style(meetings): 对齐 People.vue — 删 inline margin, batch-bar 顺序对齐, 加 .date-sep 2026-08-18 23:13:56 +08:00
郭庆泰 869f7de1bc docs(manager_meetings): 第二轮修复记录 (onCopy 走 bizAdd + 双 toast 修), 待修复表 P0#3/#4 标 2026-08-18 23:10:09 +08:00