Commit Graph
7 Commits
Author SHA1 Message Date
郭庆泰andClaude 591a43fe61 feat: 会议提交剩余时间+解冻 + 会务/劳务材料批量下载 + 多角色人员/账号模块完善
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 06:53:18 +08:00
郭庆泰andClaude 904e28710f feat: 生产部署 + 会议全链路 (执行方分配/费用结算/签到脱敏/H5相机)
- 生产 nginx 三路径: ry-vue3 /hg/, ry-h5 /camera/, API /hg-api, .env 分环境
- 签约链接/摄像头 base-url 走 yml, 不再硬编码 /hg 与 localhost
- 新增 biz_project_executor_assign (镜像 sponsor_assign) 执行方项目级分配
- 会议费用后台汇总 FeeCalcScheduler + 结算回写项目金额 + 状态流转调度
- 签到表拍照高斯模糊脱敏 extra_oss_url, 新增 PosterService/StageDeriver
- 清理 biz_support_intent 旧表 (6 Java/XML 删除)
- ry-h5 相机黑屏修复: 显式 video.play() + 动态 apiBase 上传
- 资源: simhei 字体 / logo.png / qrcode_1.png / favicon.ico

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 01:00:09 +08:00
郭庆泰 3c23222841 fix(theme): 修 hover 颜色不正确 - 干掉硬编码老蓝 + fallback 双重失效
核心问题 (按影响面排序):

1. Login.vue: login-btn hover 是硬编码 Tailwind blue-800 #1e40af
   跟主色 #007A95 青蓝完全不同色系, hover 突变
   - 改成 var(--brand-primary-deep) (#004858 暗青蓝)

2. 14 个页面写了 :deep(.el-button--primary:hover) { background:
   var(--brand-primary-deep, var(--brand-primary)) } — 第二参数
   fallback 让 hover 退化成主色 (不变深), 视觉上'按钮没反应'
   - 删第二参数, 直接 var(--brand-primary-deep)

3. AdminLayout: 菜单激活背景硬编码 #1890ff (Ant 老蓝),
   跟青蓝主题对比突兀
   - 改成 var(--brand-primary)

4. 17 处 .breadcrumb a:hover / .hint-link:hover / el-button.is-link:hover
   同样 fallback 双重失效问题, 删 fallback

5. 其余硬编码老蓝 (#1890ff / #409eff) 在:
   - OssFileUploader / OssImageUploader / IdCardUploader (upload hover border)
   - Login.vue (modal-btn, accent-color, user-type-item hover)
   - doctor/Account.vue (breadcrumb link, 章节左边竖线)
   - ManagerProjectsAssign.vue (合同链接)
   - PublicityDetail.vue (ann-menu hover)
   全部换成 var(--brand-primary) / var(--brand-primary-deep)

6. 修 PublicityDetail.vue 注释错误:
   原: // 深色用品牌主色 (#1890ff), ...
   正: 二维码 dark 是 #1f2937 (深灰), 不是主色

总计 24 个文件
grep '#1890ff|#409eff|#096dd9|#0050b3|#1e40af|#1d4ed8' 已 0 命中
2026-08-22 21:22:17 +08:00
郭庆泰andClaude 25ec74114f feat(sponsor/people): 批量删除自我保护 + 批量导入 UI 用 el-upload 对齐其他页面
1. 批量删除主账号自我保护 (防误删):
   - 复选框 :selectable 排除主账号自己 (row.userId === store.user?.userId)
   - 批量删除按钮 :disabled 在包含主账号时置灰 (computed: hasSelfInSelection)
   - onBatchRemove 函数入口再校验一次 (defense in depth)

2. 批量导入 dialog 用 el-upload 对齐 manager/admin/executor:
   - 替换手写 <input type=file> + 浏览/上传 button, 改用标准 el-upload
     (:auto-upload=false :limit=1 :on-change :on-remove)
   - footer 加'开始导入'按钮 (disabled by !importFile)
   - 文件名显示 + 删除按钮 el-upload 自带, 不再手写
   - uploadFile() 改 submitImport(), 语义更准
   - onImport() 开头 clearFiles() 防止关闭再打开时残留

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-18 21:08:01 +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
郭庆泰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
郭庆泰 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