Commit Graph
208 Commits
Author SHA1 Message Date
郭庆泰andClaude Code 0fb98311ce feat: 项目分配通知支持方主账号 + 结题前置检查未结算会议
#8 项目分配 → 支持方主账号待办通知
- BizProjectController.edit 检测 sponsor_org_id 变更 (null→org / A→B)
  调 BizNotifyService.projectAssignedToSupportOrg 发待办给支持方主账号
  (biz_org.user_id, MAIN sponsor). 去掉支持方 (置 null) 不发.
- BizNotifyService 新增 projectAssignedToSupportOrg, 与既有的
  projectAssignedToSponsor (通知 SUB 监察员) 配套, 共 2 条.

结题前置检查 (manager)
- BizProjectController 新增 GET /business/project/meetingSettlement
  入参 projectIds 逗号分隔, 查还有未结算会议 (is_settled<>1)
  的项目, 仅返回 unsettledCount>0 项.
- BizProjectMapper.checkMeetingSettled (LinkedHashMap, HAVING > 0).
- manager/Projects.vue openClose 先调该端点, 有未结算会议时弹警告
  ElMessageBox.confirm (允许强制结题). 后端失败兜底空数组不阻塞.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-14 22:37:18 +08:00
郭庆泰andClaude Code 91bf0fa3b9 feat: 医院管理模块 (admin 端 CRUD + 导入导出)
- 后端: BizHospital controller/domain/vo/mapper/service + Mapper XML
- 前端: ry-vue3/src/views/admin/Hospital.vue + api/business/hospital.js
- 模块面向 admin 角色, 提供医院主数据维护

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-14 22:37:10 +08:00
郭庆泰 9ea4e18161 fix: 删除公告确认改用 ElMessageBox.confirm
- manager/Projects.vue: 删除空 body 的 el-dialog (header/footer 边框叠成两条线), 改用 ElMessageBox.confirm

- 合并 openDeleteAnnouncement/confirmDeleteAnn 为 deleteAnnouncement, 删无用 ref delAnnModalOpen/delAnnTargetRow
2026-09-13 21:03:10 +08:00
郭庆泰 9dc378974f chore: gitignore 临时测试产物 + Axure 设计源文件
- *.rar / proto/合规系统0904/ (Axure 设计源, 已展平到 proto/html)
- 11.pdf / 11_extracted.txt (发票 OCR 测试临时产物)
2026-09-10 20:52:12 +08:00
郭庆泰 5a0a892574 feat: 邀请函邮件发送 + 首次设密/密码为空 + 姓名单一可信源
邀请发送 (菜单暂隐藏, 待确认参数见 发送邀请-待确认参数.md):
- 后端: BizInvite / BizInviteRecipient + Controller/Service/Mapper/XML
- 邮件: InviteMailSender (spring-boot-starter-mail SMTP) + application*.yml 邮件配置
- 上传进度: UploadProgressRegistry + UploadProgressController
- 前端: InviteList / InviteNew / InviteDetail / InviteView + api/business/invite.js
- 原型: proto/html/components/invite-detail / new-invitation / send-invitation

登录/账号:
- 首次设密: /getInfo 返回 isPasswordEmpty, SysProfileController 密码为空时跳过旧密码校验, ForcePasswordDialog 强制弹窗
- 姓名单一可信源 resolveDisplayName: doctor→biz_expert.name, sponsor/executor→biz_person.name, 其余回退 nick_name
- OA compliance 门禁改为按手机号查 ecology 视图 (不再限定 manager/leader)

其它:
- OSS zip 在线查看 (列清单+取单文件, 公开只读) + SecurityConfig permitAll
- doctor 项目详情 ProjectDetail.vue
- 数据库/测试/设计文档 (md) 入库
2026-09-10 20:40:49 +08:00
郭庆泰 56615f9806 feat: OA(ecology)项目拉取 + 会议邀请函PDF/微信分享 + 参会人/执行意向增强
OA ecology:
- BizEcologyController + EcologyProjectService: 项目编号搜索/详情回填, 负责人静默建档
- ComplianceLoginService: 合规/负责人登录校验 + 视图 role 匹配
- application-prod/test.yml: ecology 只读库数据源

会议邀请函/分享:
- InvitationPdfService + WxShareService: 邀请函 PDF 生成 + 微信分享
- PdfViewer.vue (pdfjs-dist) + MeetingInvitation.vue: PDF 预览 + 邀请函页

参会人/执行意向:
- BizMeetingAttendee*: 参会人模块增强
- BizExecutionIntent*: 执行意向增强

签到/劳务/导入:
- BizSignServiceImpl + SignFill.vue: 签到劳务
- FieldMismatch/ImportMismatch: 导入校验 VO

公示/会议详情:
- PublicityDetail.vue / MeetingDetail.vue 等前端增强

配置:
- test 短信 mock + 供应商/招标接口切生产域名
2026-09-03 20:12:15 +08:00
郭庆泰 beb9799a06 feat: OA(泛微 ecology)登录身份校验 + 公示详情悬浮按钮/PDF缩放
OA 登录校验 (manager/leader 单一可信源 = ecology 合规视图 v_compliance_project_manager):
- ComplianceLoginService: 手机号登录查视图(type=1→manager/type=2→leader), 自动建号 sys_user+biz_person, 角色不匹配软删重建; 密码登录门禁 gateForPasswordLogin
- EcologyDataSourceConfig: 独立只读 JdbcTemplate(ecologyJdbcTemplate) 接泛微库, 不接入主库动态数据源
- SysLoginController: 密码登录前 complianceGate 校验 manager/leader 仍存于视图
- BizAuthController: smsLogin 改走 reconcileForLogin; 发码放行 ecology 视图内未注册手机号
- application*.yml: 新增 spring.datasource.ecology 只读连接(prod/test)
- Login.vue: 登录标题居中微调 + 供应商注册跳生产域名

公示详情 (publicity/:id):
- 右侧悬浮操作按钮从垂直居中改为主区右上(紧贴版心右缘), 中窄屏兜底贴右缘
- PDF 预览 #zoom 由 page-width 改为数值缩放(121), 放大正文占满宽度

文档:
- shouce/ 手册 md 入仓

注: oalogin/ (含 OA 管理员密码的临时笔记) 已加 .gitignore, 不入库
2026-09-01 20:45:15 +08:00
郭庆泰 a14d95288c 提交所有代码 2026-08-31 19:01:00 +08:00
郭庆泰andClaude f4d8bc1463 feat: 项目导出 + 会议跳转 + 机构软删除 + 供应商账号同步
- 项目/项目评价/报名专家 3 类导出, 勾选透传 projectIds
- 项目列表 总场次/已执行/未执行 三列点击跳对应会议列表 (executor 复用后端 role 隔离)
- 机构软删除 + 级联软删机构下账号
- 供应商开放接口账号同步

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-30 10:42:35 +08:00
郭庆泰andClaude 1876601ba7 feat: 会议阶段劳务/会务前缀投影 + 结算前未保存拦截
- 阶段投影: 待审核/审核通过/待整改/待结算 按劳务/会务前缀区分 (前后端镜像)
- 劳务材料提交门槛改为参会人员列表≥1人 (非上传文件)
- sponsor/manager 操作列「审核」「结算」提为直链
- 会议结算时间轴节点: 待结算态显示「补充凭证并结算」
- 结算前检测未保存改动, 弹「保存并结算」拦截

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-29 20:02:33 +08:00
郭庆泰andClaude e47f76478b 批量推送代码
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-29 17:52:05 +08:00
郭庆泰 36528b6e0c 批量推送代码 2026-08-26 23:14:46 +08:00
guoju0808 18f7e93d5b feat: 其他角色首页移动端适配 (doctor/sponsor/executor)
doctor/Home.vue: 完善移动端适配
- 原只有 .cols-row → 1fr 一行规则
- 加 welcome-bar 紧凑 padding (20/24 → 14/16) + flex-wrap
- 加 welcome-text h2 字号 20 → 16, p 13 → 12
- 加 section padding 16/20 → 12/14, section-title 15 → 14
- 加 breadcrumb 字号 13 → 12, .doctor-home padding 16/20 → 12

sponsor/Home.vue: 补 stats-grid-5 媒体规则
- 原只有 stats-grid-3/2 媒体规则, 漏 stats-grid-5
- 加 stats-grid-5 → 2 列 + ≤480px → 1 列
- 加整页 padding 16 → 12, breadcrumb 13 → 12
- 加 stat-card padding 24 → 16/12 + min-height 120 → 90
- 加 stat-label/Value/Desc 字号缩小
- 加 .section padding 20/24 → 14/16

executor/Overview.vue: 补 stats-grid 5 列媒体规则
- 原 5 个 KPI 卡 5 列布局在 mobile 完全挤爆, 但媒体查询里没改 grid-template-columns
- 加 .stats-grid → 2 列 + ≤480px → 1 列
- 加 stat-card padding/min-height 调整
- 加 stat-label/Value 字号缩小
- 加 .section padding 20/24 → 14/16

admin/Workbench.vue: 已三档断点 (1200/768/480), 无需调整
manager/Workbench.vue: 已加 5 → 2 列布局, 无需调整
2026-08-26 12:24:55 +00:00
guoju0808 54bcff9e06 fix: manager/workbench 移动端 5 个 KPI 卡 5 列 → 2 列
原 .stats-grid { grid-template-columns: repeat(5, 1fr) }, 桌面 5 列 OK,
手机端 (375px) 每个卡 75px 宽, 文字/数字严重拥挤.

mobile (≤768px):
- .stats-grid 改为 repeat(2, 1fr) (2 列布局, 2 + 2 + 1, 5 个 KPI 卡合理)
- .stat-card padding 24px → 16px 12px, min-height 120 → 90px
- .stat-label 14px → 12px, margin-bottom 16 → 8px
- .stat-value 32px → 24px (数字依然醒目)
- .section padding 20/24 → 14/16, .section-title 15 → 14px
- .manager-workbench 16 → 12px
- .breadcrumb 13 → 12px

桌面端 0 影响.
2026-08-26 12:22:35 +00:00
guoju0808 646f9195e8 fix: Experts manager 角色操作列宽度 240→130 (只有 2 按钮)
manager 角色操作列只有 2 个按钮 (审核 + 修改; 已拒绝 是条件显示),
240px 太宽, 130px 足够.
2026-08-26 12:21:45 +00:00
guoju0808 3a203f4d48 Revert "fix: Experts 操作列太宽 (admin 320/manager 240 → admin 120+更多/manager 180)"
This reverts commit 161fe98a18.
2026-08-26 12:21:33 +00:00
guoju0808 161fe98a18 fix: Experts 操作列太宽 (admin 320/manager 240 → admin 120+更多/manager 180)
原操作列 1 个 column + :width="isAdmin ? 320 : 240", 5/3 个按钮排成一行
但实际内容仅 ~190/76px, 留白过多; 手机端 240/320 直接挤爆.

改造:
- admin (5 个按钮): '审核' 外置 + '更多▼' 折叠次要 (修改/查看/启用/禁用/已拒绝)
  → width 320 → 120
- manager (≤3 个按钮): 全部外置 (审核/修改/已拒绝)
  → width 240 → 180
- 操作列拆为 v-if=isAdmin / v-else 两个独立 column
- 加 onExpertMore 函数处理更多下拉 command 路由
- 加 ArrowDown icon import
- mobile 操作列进一步紧凑: 字号 11px, padding 0 3px, is-right 缩窄 4px
- 已拒绝 (查意见) 移入更多下拉, 仅 auditStatus=3 时显示

桌面端布局: 操作列从占 ~25% 桌面宽 → 占 ~10%
手机端: 操作列从 320px (撑爆) → 120/180px 紧凑
2026-08-26 12:18:36 +00:00
guoju0808 444272cbba Revert "feat: MeetingDetail 参会人表改用 GrTable + 移除合计行"
This reverts commit 8542d545d5.
2026-08-26 12:16:17 +00:00
guoju0808 8542d545d5 feat: MeetingDetail 参会人表改用 GrTable + 移除合计行
GrTable 增强 (sibling subagent 已完成重构):
- mobile 模式从 el-table expand 行改为 el-descriptions 卡片列表
- 每行一张卡, 显示所有列
- 通过 extractDefaultSlot 抓取自定义 #default slot 的 vnode
- renderTemplate 在 mobile 卡片里渲染原始 vnode (含 maskPhone/maskBankCard/
  maskIdCard/openPreview/el-link/el-tag 等自定义 template)
- 支持无 prop 自定义 template 列在 mobile 正确渲染

MeetingDetail 改动:
- el-table → GrTable (show-summary 移除, 不要合计行)
- 移除 attendeeSummary 函数 (合计不再需要)
- 移除之前 mobile attendee-table 紧凑规则 (mobile 走卡片分支, 不需要)
- v-bind $attrs 透传 v-loading/border/size 给桌面 el-table
- 修复 GrTable 闭合标签 (</el-table> → </GrTable>)

桌面端 el-table 完整渲染不变 (sibling 完整保留透传逻辑)
mobile 端: 每行一张 el-descriptions 卡, 27+ 列全部展示, 自定义 template 正常渲染
2026-08-26 12:14:25 +00:00
guoju0808 2fa91cf770 feat: MeetingDetail 参会人表格移动端适配 (字号 12→11px/padding 紧凑/操作列竖排)
参会人表 27+ 列宽表含大量自定义 template 列 (maskPhone/maskBankCard/
maskIdCard/openPreview 等), 用 GrTable 会丢失自定义渲染.
改为轻量适配:
- 表格整体 font 12 → 11px
- th/td padding 6/4 → 4/3px
- 操作列 row-actions flex row → column (紧凑)
- el-tag 字号 12 → 10px, padding/height 缩窄
- 摘要行 el-table__footer 字号 11px
- 加 class="attendee-table" 用于 scoped 控制

桌面端无影响 (全部在 @media (max-width: 768px) 内)
2026-08-26 12:09:15 +00:00
guoju0808 8067dfd3be feat: MeetingDetail 移动端精细适配 (双栏→单栏/工具栏横滚/时间轴缩窄)
路由 /manager/meetings/view/:meetingId → MeetingDetail.vue (readonly)

之前已有基础 media query (卡片/工具栏/filter-form/表格),
但未针对此页特有结构:
- .cols-row 8fr/2fr 双栏 → 1fr 单栏堆叠
- .info-grid 1fr/1fr 双栏 → 1fr 单栏
- .info-row flex 横排 → 纵向 (label 上, value 下)
- .info-label 110px flex 0 0 → 自适应
- .card padding 20/24 → 14/16
- .page-title 22px → 18px
- .section-title 16px → 15px
- .attendee-toolbar (5 按钮) 横滚
- .attendee-form-2col 双栏 → 单栏
- .file-row 110px 1fr → 单栏 (label 上 value 下)
- .file-label text-align right → left
- .file-hint grid-column 2 → 1
- .fee-summary padding-left 110px → 0
- .tab-actions 横滚 (按钮多)
- .timeline / .audit-sub-timeline 缩窄
- .page-title flex-wrap (返回/操作按钮组)
- .attendee-table-wrap iOS 横滚优化

桌面端无变化 (全部在 @media (max-width: 768px) 内)
2026-08-26 12:03:50 +00:00
guoju0808 d7107436a6 fix: 操作列更多优化 (Plans 3个以内不折叠 / 去掉前面竖线 / hover打开下拉)
1. Plans 操作列只有 3 个按钮 (修改/审核/结算), 不需要更多折叠
   - 还原为直接展示 3 个 el-link
   - 删除 onMorePlan 函数 + ArrowDown import
   - width 120 → 160

2. main.scss .op-dropdown 删除 border-left 竖线分隔
   - 加 cursor: pointer + color: primary + hover 色变浅
   - 加 padding 0 4px 与 el-link 视觉对齐
   - 加 user-select: none 避免点击选中

3. Meetings / Projects el-dropdown trigger: click → hover
   - hover 鼠标进入触发, 离开关闭
   - 更符合操作列多按钮场景的直觉
2026-08-26 12:01:43 +00:00
guoju0808 61303a822b feat: manager/workbench 移动端精细适配 (KPI 2列/单列/role-grid/快捷入口单列)
之前 Workbench 已有基础 media (1200px 5→3列, 768px 5→2列), 但:
- KPI 卡 padding 没缩, 字号没缩
- 双栏内容没堆叠
- 角色卡 padding 没缩
- 快捷入口 8 项还是 2 列, 手机端拥挤
- 超窄屏 (≤480px) 无适配

新增:
≤768px:
- 容器 padding 0 4px
- 面包屑 12px
- KPI 2 列, 数字 30→22px, padding 12px
- content-grid 强制单列
- content-card padding 14/16
- 角色卡 2 列, padding 10/12, 数字 22→18px
- 快捷入口 1 列 (8 项单列更易点)

≤480px:
- KPI 单列, role-grid 单列
- stat-value 20px
- content-card padding 12/14

不影响桌面: 所有规则都在 @media 内
2026-08-26 11:57:13 +00:00
guoju0808 d318e4383f fix: manager/Plans 操作列折叠次要操作 (审核/结算进更多下拉, 操作列 200→120px)
- 外置'修改' (高频)
- 折叠'审核/结算' 到 el-dropdown'更多'
- 操作列 width:200 → 120, 桌面+手机端共享同一模板
- 复用 main.scss 已有的 .op-dropdown + .op-caret 样式
- 禁用条件: 审核仅 planStatus='0' 可点, 结算仅 isSettled!=='Y' 可点 (逻辑移到 dropdown :disabled, 跟原 v-if 行为一致)
2026-08-26 11:50:28 +00:00
guoju0808 8b6a0b4e27 feat: Publicity 公示页移动端适配 (顶栏紧凑 + nav 横滚 + 列表卡片化)
Publicity.vue 是公共项目公示页, 有完整桌面布局 (1354px min-width, 72px 顶栏,
60px padding, 36px nav 间距), 手机端需要专门的 media query 才能正常显示:

≤768px:
- body min-width: 0 (解除桌面 1354 强制)
- 顶栏 72→56px, padding 60→12px
- logo 36→30px, title 16→14px
- nav-list 横向滚动 + gap 36→16px
- 顶栏用户区紧凑 (font 15→13px)
- container padding 收窄 (16/12)
- filter-bar 单列, filter-input 全宽
- 列表项 padding 12px, 字号适配
- 弹窗 width 100vw 全屏化

不影响桌面: 所有规则都在 @media (max-width: 768px) 内

不需要适配的页面 (已 mobile-friendly):
- App.vue / PortalLayout.vue (纯容器)
- views/doctor/SignContract.vue (mobile-first 设计, 固定底栏)
- components/* (11 个组件用 flex + min-width:0, 自动响应)
2026-08-26 11:47:04 +00:00
guoju0808 d26a99f821 feat: 批量 H5 适配 (37 个 form/card 页面加统一移动端规则)
覆盖: Account (4 角色), BizArticleAdmin/Edit, BizSpecialPlanAdmin/Edit,
ExpertDetail, LaborProtocolEdit, Roles, Register 系列 (3), doctor 系列
(Account/Meetings/SignFill/SignSuccess/SubmissionDetail/SubmissionNew),
executor 系列 (Account/NewPerson/Overview/PersonDetail),
executor-people 系列 (PersonDetail/PersonNew),
expert/ExpertNew, manager 系列 (Accounts/ProjectsNew/ManagerProjectsAssign),
meetings 系列 (MeetingDetail 1993L/MeetingNew), messages/Messages,
portal 系列 (Invitation/SupportLetter),
sponsor 系列 (Account/NewPerson/PersonDetail),
sponsor-people 系列 (PersonDetail/PersonNew)

统一规则 (≤768px):
- 卡片 padding 12px, radius 4px
- 工具栏横向滚动 (overflow-x)
- filter-form 保持横向 (label 80px 右对齐 + input 占满)
- 查找/重置按钮垂直堆叠 (block + margin-top 8px)
- 表格字号 12px

不影响桌面端: 所有规则都在 @media (max-width: 768px) 内
2026-08-26 11:46:07 +00:00
guoju0808 bfc801a16a feat: 批量移动端适配 (24 个列表页 + 13 个宽表用 GrTable)
- 给 24 个有 filter-form 但无 media query 的列表页统一加 @media (max-width:768px)
  - 卡片 padding 收窄 (12px, radius 4px)
  - 工具栏横向滚动 (6+ 按钮铺不下)
  - filter-form 保持横向布局 (label 左 80px 右对齐 + input 右占满)
  - 查找/重置按钮垂直堆叠不偏移
  - 表格字号 12px

- 13 个宽表 (≥10 列) 替换为 GrTable 组件:
  - sponsor/Projects, executor/Projects, sponsor/SponsorProjects
  - sponsor/SponsorPeople, expert/Experts, executor/People
  - meetings/Meetings, sponsor/Meetings, executor/Meetings
  - manager/ExecIntent, manager/SupportIntent, manager/Plans
  - admin/Users
  - 每个页面的 mainCols 取业务主键 (项目编号+名称 / 账号+姓名 等)
  - 手机端次要列折叠到展开行, 主列+操作列保留

- 修复 executor/Projects.vue 多行 el-table 标签导致的 GrTable 替换错误

全 95 个 vue 编译 200, 0 错误
2026-08-26 11:43:08 +00:00
guoju0808 614a31c404 fix: 移动端 filter-form 保持横向布局 (label 左 + input 右, 不再上下堆叠) 2026-08-26 11:40:40 +00:00
guoju0808 ce26361b30 fix: 移动端按钮组对齐 (block + margin reset, 查找重置不再偏移) 2026-08-26 11:39:01 +00:00
guoju0808 a0f566eb38 fix: 移动端 filter-form 按钮垂直堆叠 (查找/重置不再叠在一起) 2026-08-26 11:37:20 +00:00
guoju0808 8ac3538341 style: 去除操作列竖线分隔 (padding 6→4px, 节省操作列宽度) 2026-08-26 11:36:06 +00:00
guoju0808 31b3fb504a fix: GrTable 移动端保留操作列 fixed="right" 2026-08-26 11:35:10 +00:00
guoju0808 4de6479be0 fix: GrTable 移动端去除 fixed 方向 (主列+操作列不再 fixed) 2026-08-26 11:34:32 +00:00
guoju0808 0644e26120 feat: GrTable 移动端表格组件 + manager/Projects 试点
业务背景
- 项目里 17+ 列的列表页 (manager/Projects, Meetings, AdminUsers 等) 在手机端只能
  横向滚动, 操作体验差.
- refer/gr-table.vue 是 Vue2 + Vant 组件, Vue3 不能直接用 (componentOptions
  私有 API 已被 Vue3 移除).
- 新建 Vue3 + EP 兼容版本 GrTable, 吸收"主列显示 / 次要列折叠到展开行"思想.

组件设计
- props: data, mainCols (默认 = 第一个 prop + 最后一个 prop), mobileBreakpoint
- 通过 slots.default() 取 vnode, 读 vnode.props.prop/label (Vue3 思路, 替代
  Vue2 componentOptions 私有 API)
- v-bind="\$attrs" 全透传 el-table 原生 props/events
- el-table 引用方法 (clearSelection / toggleRowSelection 等) defineExpose
  暴露

manager/Projects 试点
- 引入 GrTable, :main-cols="['projectNo', 'projectName']"
- 手机端: 只显示项目编号 + 项目名称 + 操作列, 其他 13 列折叠到展开行
- 桌面端: 与原 el-table 完全一致 (所有 17 列)
- 操作列 (label=操作, 无 prop) 自动保留 (因为 shouldRenderColumn 跳过无 prop 列)
2026-08-26 11:32:53 +00:00
guoju0808 02715a1385 fix: main.scss 移动端 el-table 规则 3 个 bug 2026-08-26 11:22:02 +00:00
guoju0808 7cf8c5b660 feat: manager/Projects 移动端适配 (工具栏横滚/筛选栏堆叠) 2026-08-26 11:19:00 +00:00
guoju0808 e5d7d08ec1 feat: PlanEdit 移动端适配 (单列堆叠/label 上对齐/按钮全宽) 2026-08-26 11:17:30 +00:00
guoju0808 a763598637 feat: ManagerProjectDetail 移动端适配 (单列堆叠/表格横滚/按钮全宽) 2026-08-26 11:16:43 +00:00
guoju0808 58f02f1262 fix: AdminLayout 汉堡抽屉蒙层被 aside 遮挡不可点击 2026-08-26 11:15:19 +00:00
郭庆泰 a837e43b53 chore: 新增 refer 参考表格组件
- gr-table.vue: 通用 el-table 封装 (展开详情 + 事件透传)
- gr-table-simple.vue: 简化版表格
- gr-table-plus.vue: 增强版 (筛选框 + 展开详情)
2026-08-26 19:14:34 +08:00
guoju0808 8a08c8378f feat: 全局移动端适配 AdminLayout 汉堡抽屉 + 67 页通用规则 2026-08-26 11:13:12 +00:00
guoju0808 d2fe5a4035 style: 重塑政务风格 + 操作列统一 el-link + 表格紧凑化
业务背景
- ry-vue3 为政务/卫健委风合规管理系统 (医疗机构合规系统), 不要可爱配色、不要插画
- 品牌色: 主色 #15803D (低调深绿) + 次色 #0E7490 (青蓝), 不要蓝色系主色

变更概要
1. 全局地基
   - theme.scss: Element Plus 主色改为 #15803D, slate 9 档, 联动组件库
   - main.scss: 字体/页面骨架/筛选栏/表格/控件/滚动条 全套样式
   - AdminLayout.vue: 政务顶栏 + 浅色侧栏
   - Workbench.vue: 替换原绿底大字卡为 KPI 白底色条 + 快捷入口 + 进度条

2. 表格操作列改造
   - el-button link 全面替换为 el-link (:underline="false" + type="primary/danger")
   - 36 文件 132 处替换, 操作列外加 .table-actions 容器 (内含分隔线)
   - 修复 el-link 不支持的属性 (size="small"/text/loading)

3. 筛选栏
   - 弹性布局 + gap 14px 16px + align-items: flex-start + min-height 32px
   - 删除所有 scoped .filter-form 覆盖 (28 处) 让全局样式生效
   - 控件宽度 180px 统一, 标签 32px 居中, 折行不紧贴

4. 表格紧凑化
   - cell-padding 10px → 6px, 表头高度 36px
   - 行高 ~46px → ~36px, 字号 13px

5. 每页默认 20 条
   - 21 文件 pageSize: 10 → 20

6. meetings 操作列折叠
   - 11 操作 → 外置 3 个主操作 + 1 个"更多" el-dropdown (8 个次操作)
   - width 500px → 260px
   - 配 .op-dropdown / .op-caret 样式 (hover 旋转)
   - 新增 onMoreAction dispatch 函数 (复用原 handler)

7. 操作列文字防拆行
   - .table-actions flex-wrap: nowrap + white-space: nowrap
   - el-link padding 0 8px → 0 6px, flex-shrink: 0

8. 环境配置
   - .env.development: 直连远端 https://risingdoctor.com/hg-api (绕过 vite proxy 卡顿)
   - vite.config.js: proxy fallback 保留
2026-08-26 11:04:15 +00:00
郭庆泰 b0256ccac3 feat: 会议劳务/会务材料分轨审核 + 注册页标题 + 下拉空值修复
会议材料分轨 (material_audit_stage 单轨 → labor/service 双轨):
- biz_meeting: labor_audit_stage/labor_compliance_approved + service_audit_stage/service_compliance_approved 四列替换原单轨两列
- StageDeriver: 单轨状态机(R/N/C0/C1/A) + 角色优先级选代表轨 + 会议物理态取两轨最小进度
- MeetingAuditStageEnum / 前端 meetingStage.js 镜像: 分轨推导 + 颜色跟随角色展示阶段(避免文案与颜色错位)
- BizMeetingController/ServiceImpl/AuditLog + mapper + MeetingStageScheduler 同步分轨字段
- MeetingDetail/Meetings/doctor/executor Meetings/ManagerProjectDetail/ManagerProjectsAssign/PublicityDetail 同步双轨

其它:
- 注册页 (执行单位/专家/支持单位) 加居中页标题
- DoctorDeptSelect/DoctorTitleSelect 空字符串统一 null, 避免挂载必填项飘红
- BizOrgMapper sponsor/executor options 加 status 字段
- sponsor/NewPerson 编辑态 orgName 只读
2026-08-26 18:13:22 +08:00
郭庆泰 b5b3e3a213 feat: 会议批量审核 + 公示按发布时间倒序 + 现场照片 dialog 预览 + 重复报错精确
- 会议列表 manager 批量合规审核 (批量通过/退回, best-effort 逐条回执)
- 公示列表按 publish_time 倒序, 发布/开通写本地 publish_time (修 toISOString UTC 时区 bug)
- 签到表/前全景/后全景「查看照片」改 dialog 预览 (复用 Preview.vue)
- 手机号/用户名重复报错精确提示 (后端 fieldMap + 前端 duplicateTip)
- 医生首页欢迎语改「欢迎使用合规系统」
2026-08-26 00:41:33 +08:00
郭庆泰 ea2024d083 feat: 会议ID应用赋值 + 会议表单/详情优化 + admin工作台统计与用户管理
- meetingId 由 DB 自增改为应用赋值 10 位数字 (yyMMdd + 4 位序列, Redis 按日期计数)
- 会议开始时间不能晚于结束时间校验; 参会人表单身份证附件/角色单独一行
- 会议详情左右列比例 7:3 -> 8:2 (材料审核列收窄)
- admin/workbench 用户总数/角色类型数/各角色分布统计修复 (改用 listByRole 按 role_type 过滤)
- 新增 admin 用户管理接口 + 门户页脚 + H5 签到/上传优化
2026-08-25 23:33:14 +08:00
郭庆泰andClaude 591a43fe61 feat: 会议提交剩余时间+解冻 + 会务/劳务材料批量下载 + 多角色人员/账号模块完善
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 06:53:18 +08:00
郭庆泰 0c882ae846 feat: 本地 Java 发票 OCR + 策划方案多角色开放 + H5 相机脱敏修复
- OCR: 进程内 PaddleOCR ONNX Runtime 识别替代远程 Python 微服务
  (新增 ocr/core/service/config 引擎, 删 OcrClient/OcrConfig, PDF 文本层优先 + QR 快路径)
- 投稿: 项目设计投稿 → 项目策划方案, doctor/executor/sponsor 三角色开放
  (BizProjectPlan 按非 admin/manager 隔离, 复用 Submissions.vue, 设计文件改 OssFileUploader)
- H5: <video> 去掉 autoplay + safePlay 重试, 穿透 uni-app wrapper 找原生 video
- 脱敏: 签到表高斯模糊由横向条带改为全高竖条带 (20%~50% 宽度)
- 域名: ringdoctor.com → risingdoctor.com
2026-08-24 19:23:53 +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
郭庆泰 80a276e661 fix(theme): 4 个亮色 #4da2b5/#4db892/#80bdca/#80ccb1 不适合做背景色
问题: 之前 Element mix(white) 算法在 S=100% 主色 (#007A95)
上生成的中色 (#4da2b5 / #4db892) 跟主色对比度太低,
作 hover-bg / 选中态底色时白字看不清.

新算法: HSL 降饱和 + 提亮度 (色相不变, 灰度提升).
  text    = S-40 L+15  (中蓝可读, 链接用)
  light   = S-65 L+40  (灰中, disabled 浅背景)
  lighter = S-65 L+50  (灰浅, hover-bg / 选中态, **够淡字可读**)
  mix     = S-75 L+60  (近白, focus border)

主色 (#007A95):
  text    #2d9cb4  lighter #b7d6dd
  light   #95c2cc  mix     #dde8ea

次色 (#009963):
  text    #2eb887  lighter #baded1
  light   #98cdba  mix     #dfece7

Element Plus 联动:
  --el-color-primary-light-9 → var(--brand-primary-mix) (近白, 最浅)
  --el-color-success-light-9 → var(--brand-secondary-mix)

theme.js derivePalette 同步改成同算法 (运行时 setBrand 仍正确)
2026-08-22 21:31:08 +08:00
郭庆泰 746e9e01b4 fix(theme): 4 个亮色派生 #49deff/#4dffc0/#06d2ff/#0affa9 改为 Element mix() 算法
之前 HSL +35% 提亮算法生成荧光色 (例 #49deff / #4dffc0),
对政务/严肃网站完全不适用, 跟 Element Plus 默认色系也对不上.

新算法 (浅色) = Element Plus mix(white, base, N*10%):
  --brand-primary-light   = mix 50% white   (背景 / disabled)
  --brand-primary-lighter = mix 70% white   (hover-bg / 选中态)
  --brand-primary-text    = mix 30% white   (链接默认)
  --brand-primary-mix     = mix 80% white   (输入框 focus border)

新色 (全是低饱和度灰蓝/灰绿, 跟 Element 默认同源):
  PRIMARY (#007A95):
    light    #80bdca    lighter #4da2b5
    text     #b3d7df    mix     #3395aa
  SECONDARY (#009963):
    light    #80ccb1    lighter #4db892
    text     #b3e0d0    mix     #33ad82

深色 (deep/darker) 保持 HSL 算法不变 (合理, 政务场景需要深色 hover)

theme.js derivePalette 同步改成双轨: HSL 调深 + Element mix 调浅
2026-08-22 21:26:50 +08:00