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 |
|
郭庆泰
|
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 |
|
郭庆泰
|
d9316e87d0
|
feat(ry-h5): logo 改为项目根 logo.png, 加 favicon
- ry-h5/static/logo.png 72x72 占位图 → 776x776 项目 logo
- ry-h5/index.html 加 <link rel='icon' type='image/png' href='/static/logo.png'>
- 代码里现无 logo 引用 (POC 只有相机页), 但文件统一品牌
|
2026-08-22 20:56:48 +08:00 |
|
郭庆泰
|
cec39554ee
|
style(portal+login): 7 个 logo 占位符 '医' 换为 logo.png 图片
- components/PortalShell.vue (navbar + footer, 共享给 3 个注册页)
- views/portal/Home.vue (navbar + footer)
- views/portal/ArticleView.vue (navbar + footer)
- views/portal/SpecialPlanDetail.vue (navbar + footer)
- views/portal/Publicity.vue (navbar + footer)
- views/portal/PublicityDetail.vue (navbar + footer)
- views/auth/Login.vue (登录页 logo)
每个 .logo-icon / .footer-logo-icon:
HTML: <div class='logo-icon'>医</div> → 含 <img src='/logo.png'>
CSS: 删 background/color/font-size/font-weight (字标样式)
改 overflow:hidden + object-fit:contain (图片容器)
全站 '医' 字符占位符清零.
|
2026-08-22 20:54:45 +08:00 |
|
郭庆泰
|
5b54e84c4d
|
style(layout): 侧栏 logo 占位符 '医' 换成 logo.png 图片
- aside-logo 内 <div class='logo-icon'> 字符占位符 → <img src='/logo.png'>
- .logo-icon 改成 img 容器样式 (44x44, object-fit: contain)
- 删 logo-sub 'BAHIM 工作台' (与角色名重复)
- 浏览器 favicon 保持 logo.png (上一 commit)
|
2026-08-22 20:50:43 +08:00 |
|
郭庆泰
|
93133c2707
|
feat(favicon): 网站图标改为 logo.png
- ry-vue3/public/logo.png 从项目根 logo.png 拷入 (776x776 PNG)
- index.html head 加 <link rel='icon' type='image/png' href='/logo.png' />
- 浏览器 tab/书签/PWA 都用这个 logo
侧栏 logo 区 (AdminLayout 的 aside-logo 当前是 BAHIM 工作台 文字)
未改, 等用户确认.
|
2026-08-22 20:48:53 +08:00 |
|
郭庆泰
|
884eadcd8e
|
feat(theme): 加 --brand-secondary 翠绿 #009963 (双品牌色系)
- theme.scss 加 7 个 --brand-secondary-* 派生色 (HSL 算法)
- 绑定 Element Plus --el-color-success* (绿=成功语义)
- theme.js derivePalette 重构成通用函数 (base, prefix), 加 setBrandSecondary / applyStoredBrands
- main.js 启动改调 applyStoredBrands, 主色+次色一起从 localStorage 恢复
主色 primary (青蓝 #007A95) / 次色 secondary (翠绿 #009963)
改 theme.scss :root 两个变量即可全局换色.
|
2026-08-22 20:46:28 +08:00 |
|
郭庆泰
|
e5fb015cd8
|
feat(theme): 主色从深海军蓝 #1E3A8A 改为青蓝 #007A95
改动 theme.scss :root 7 个 CSS 变量:
- --brand-primary #1E3A8A → #007A95 (青蓝/cyan)
- --brand-primary-deep #152a66 → #004858
- --brand-primary-darker #0d1d4d → #002129
- --brand-primary-light #3a55a3 → #00acd2
- --brand-primary-lighter #c1cbe6 → #49deff
- --brand-primary-text #4f6dbf → #06d2ff
- --brand-primary-mix #8e9ad1 → #7ce7ff
派生色算法 (theme.js derivePalette):
- deep/darker: lightness -12 / -22
- light: lightness +12
- lighter: lightness +35
- text: lightness +22
- mix: lightness +45
新色 HSL: H=191° S=100% L=29% (青蓝范围)
派生色按 HSL lightness 算法重算, 跟 theme.js derivePalette() 一致.
业务代码全部用 var(--brand-primary) 变量, 无任何硬编码
(上个 commit cd01550 已清理), 换色自动全局生效.
Element Plus 联动变量 (--el-color-primary 等) 通过 main.js 同步, 也跟着换.
|
2026-08-22 20:40:54 +08:00 |
|
郭庆泰
|
cd01550d80
|
refactor(style): 全部硬编码 #1E3A8A 替换为 var(--brand-primary)
为支持全局换色 (theme.scss :root 改 1 行即换主色), 把所有业务代码里
硬编码主色清理掉, 改用 CSS 变量.
扫描结果 (grep -ri '#1[Ee]3[Aa]8[Aa]' src/):
- theme.scss:21 定义本身 → 保留
- theme.js:7-8 JSDoc 注释示例 → 保留
- 其它 19 处业务硬编码 → 全部替换
替换明细:
- auth/Login.vue 13 处 (login-tabs/bg/color/border/btn/links)
- manager/Workbench.vue 2 处 (stat-card bg + border, 跟上个 commit 对齐)
- sponsor/SponsorProjects.vue 1 处 (var(--brand-primary, #1E3A8A) fallback → 裸变量, SKILL 禁 fallback)
- doctor/SignContract.vue 1 处 (同上)
rgb(30,58,138) / rgba(30,58,138,X) 形式: 0 处.
效果: 改 theme.scss :root --brand-primary 一行, 全项目颜色自动跟随.
派生色 (deep/darker/light/lighter/text/mix) 已在 theme.scss 内 HEX→HSL 自动算, 不需手动改.
|
2026-08-22 20:36:47 +08:00 |
|
郭庆泰
|
976178c3f1
|
fix(admin/workbench): stat-card 改单色 var(--brand-primary), 跟 manager/Workbench 一致
上次 0f124de commit 用了 linear-gradient + 蓝色阴影, 跟项目其它 workbench 不一致.
按用户要求:
- 背景: linear-gradient → var(--brand-primary) 单色 (不用渐变)
- 边框: 删 → 加 1px solid var(--brand-primary) (单色, 跟 manager 同款)
- hover: translateY + box-shadow → opacity .9 + translateY(-2px) (manager 同款)
- label 颜色: rgba(255,255,255,0.75) → rgba(255,255,255,0.85) (跟 manager 一致)
现在 admin/manager 两个 workbench 的 stat-card 视觉完全一致, 都用系统主色变量.
|
2026-08-22 20:32:29 +08:00 |
|
郭庆泰
|
0f124dea61
|
style(admin/workbench): 上方 5 个 KPI stat-card 改为深色底白字
改动 (仅 CSS, 业务逻辑 100% 保留):
- .stat-card 背景: #fff → linear-gradient var(--brand-primary) → var(--brand-primary-deep)
- .stat-card 边框: 1px solid #f0f0f0 → 删 (深色底不需要边框)
- .stat-card 文字: inherit → #fff (白字)
- .stat-card hover: border-color 变化 → translateY(-2px) + 蓝色阴影上浮
- .stat-label 颜色: #8c8c8c → rgba(255,255,255,0.75) (白字次级)
- .stat-value 渐变文字 hack → 直接 color: #fff (去掉 -webkit-background-clip/text-fill-color)
视觉效果: 5 个 KPI 卡变深海军蓝渐变方块, 白字 + 半透明 label, 鼠标 hover 上浮 2px
不变: 模板/grid 布局/点击跳转逻辑/data load 函数 都不动
|
2026-08-22 20:31:41 +08:00 |
|
郭庆泰
|
5409b7f815
|
feat(RichEditor): 富文本编辑器支持 OSS 图片上传
原 customUpload: () => {} 是空函数, 工具栏点图片/粘贴图片/拖拽图片都无效.
参考 hwt-web/wang-editor4.vue 的思路, 但用项目已有的 /common/oss/sign 签名 + utils/oss.uploadToOss,
不在前端硬编码 accessKey (hwt-web 那种写法有 key 泄露风险).
新行为:
- 工具栏点 '图片' → 选本地 → uploadToO Oss → insertFn(url) 插入 OSS URL
- 粘贴图片 (Ctrl+V) → 同上
- 拖拽图片 → 同上
- 非图片文件 → ElMessage.warning '只支持图片文件'
- >5MB → ElMessage.warning '图片大小不能超过 5MB'
- 上传失败 → ElMessage.error
文件存到 OSS 'ry8080/rich-editor/' 目录.
适用场景:
- BizArticleEdit (协议管理)
- BizSpecialPlanEdit (专项计划管理)
- 其它用 <RichEditor> 的页面立即获得上传能力
业务逻辑 100% 保留: toolbarConfig excludeKeys (排除视频), placeholder, v-model 双向绑定, change emit 都不动.
|
2026-08-22 20:28:28 +08:00 |
|
郭庆泰
|
6710c459ce
|
style(special-plan): 对齐 BizSpecialPlanEdit 到 People.vue 风格 (form 页)
改动 (仅 UI/CSS, 业务逻辑 100% 保留):
- 删 <div class="header"> 返回按钮 + 大标题 → 改用 <div class="breadcrumb">
首页 / 网站管理 / 专项计划管理 / {{isEdit ? '编辑' : '新建'}}
- form-actions 改用 <el-form-item class="form-actions"> 包裹 (隐藏 label, 顶部
border-top 分割线, 按钮左对齐)
- 取消按钮 @click="$router.back()" 改 router.push('/admin/special-plan')
避免外链直接进编辑页时 back 跳出 SPA
- 删未用 import { ArrowLeft } (返回按钮已删)
- page-card 加 background/border/padding/max-width 1200px (form 页标准, 居左不居中)
- 加 .breadcrumb / .form-actions CSS (跟 MeetingNew.vue / ProjectsNew.vue 同款)
不动的:
- isEdit computed / loadDetail / save / onTypeChange handler
- 表单字段定义 / 校验逻辑
- RichEditor / OssFileUploader 用法
|
2026-08-22 20:26:05 +08:00 |
|
郭庆泰
|
e2df096f33
|
fix(meetings): 删 MeetingNew 死代码 import (useUserStore 实际未用, 路径错)
commit 996ac13 加了 import { useUserStore } from '@/store/modules/user'
+ const userStore = useUserStore(), 但:
- 实际 userStore 在文件里完全没被引用 (roleSegment 直接走 route.path.split('/'))
- import 路径错了: 真实路径是 @/store/user, 不是 @/store/modules/user
(src/store/ 下只有 user.js, 没有 modules/ 子目录)
上次 commit e68476e 把 MeetingNew 挪到 views/meetings/ 后, Vite import-analysis
触发解析错误: '@/store/modules/user does the file exist?'
修法: 直接删 import + userStore 声明 (本来就没用).
roleSegment/isAdmin 仍然从 route.path 算, 不依赖 store.
为什么 996ac13 时没暴露:
- 用户没在那个 commit 后跑过 npm run dev
- e68476e 的 git mv 让 vite 重新分析 import, 才报出来
|
2026-08-22 20:23:46 +08:00 |
|
郭庆泰
|
e68476eeeb
|
refactor(meetings): MeetingDetail + MeetingNew 挪到公共目录 views/meetings/
会议管理 3 个公共组件统一放在 views/meetings/ 下:
- Meetings.vue (列表, 上轮 Option C 已挪)
- MeetingDetail.vue ← 本次挪
- MeetingNew.vue ← 本次挪
理由:
- 3 个组件都是 admin/manager 共用 (路由前缀对称指过去)
- 目录名 'meetings' 精确表达 '会议公共组件' 语义
- 避免 grep 'manager/Meeting*' 误以为是 manager 专属
router/index.js 4 个 import 路径同步更新:
- admin-meetings-detail / admin-meetings-new
- manager-meetings-detail / manager-meetings-new
git mv 保留文件历史 (rename detection), 无新增代码逻辑改动.
|
2026-08-22 20:22:46 +08:00 |
|
郭庆泰
|
996ac13994
|
refactor(meetings): MeetingNew admin/manager 双前缀路由 (admin 不用 /manager 路径)
把 'admin 用 manager 前缀 URL' 这个跨角色硬编码改对称.
router:
- 新增 admin-meetings-new → manager/MeetingNew.vue (公共页)
MeetingNew.vue goBack():
- new 模式: admin 跳 /admin/projects, manager 跳 /manager/projects (用 projectsBase computed)
- edit/copy 模式: admin 跳 /admin/meetings, manager 跳 /manager/meetings (用 meetingsBase computed)
- roleSegment / isAdmin 从 route.path.split('/')[1] 计算, 不依赖 userStore
meetings/Meetings.vue onEdit/onCopy:
- 引入 newRouteName computed (isAdmin ? 'admin-meetings-new' : 'manager-meetings-new')
- router.push({ name: newRouteName.value, query: {...} })
效果:
- admin 点 '新建/修改/复制' → URL 是 /admin/meetings/new, 不再跨到 /manager/meetings/new
- admin 取消保存 → 回 /admin/meetings (列表) 或 /admin/projects (新建上游)
- manager 行为不变
|
2026-08-22 20:21:01 +08:00 |
|
郭庆泰
|
62a855e562
|
refactor(meetings): admin/manager 会议管理合并为 1 文件双路由 (Option C)
把 admin/AdminMeetings.vue (212 行) + manager/Meetings.vue (262 行) 合并到
新位置 views/meetings/Meetings.vue (~265 行), 双路由指向同一组件.
角色感知实现 (route.path.split('/')[1] 算 roleSegment):
- 面包屑: admin 显示 '首页 / 项目管理 / 会议管理', manager 显示 '首页 / 会议管理'
- 详情跳转: admin 跳 /admin/meetings/detail/X, manager 跳 /manager/meetings/detail/X
- 修改/复制: 双角色都跳 manager-meetings-new (跨角色 URL, MeetingNew.vue 公共页)
admin 自动获得 manager 全部权限 (5 操作按钮 + 批量提交 + 备注筛选 +
详细删除确认文案), 跟 'admin 应该拥有全部权限' 的产品语义对齐.
净收益:
- 代码 -474/+265 = -209 行 (-44%)
- 真相源从 2 文件变 1 文件, 后续新增功能只改 1 处
- 物理消除 admin/manager 功能集漂移风险
|
2026-08-22 20:18:08 +08:00 |
|
郭庆泰
|
2eb2d1a43b
|
feat(front): 项目/会议管理 admin 端补齐 + 删除按钮 + 级联 UI + 角色劳务组件
admin 会议管理:
- 新建 admin/AdminMeetings.vue (查看/删除/批量删除, 面包屑 首页/项目管理/会议管理)
- AdminLayout.vue 加 /admin/meetings 菜单
- router/index.js 加 admin-meetings + admin-meetings-detail 路由
- MeetingDetail.vue admin 删除按钮改 admin+manager 双角色可触发 (onAdminDelete 跳回按角色)
manager 会议管理:
- Meetings.vue 加批量删除 + 删除按钮 + 删除确认文案 (6 张表级联)
- MeetingDetail.vue 删除按钮 v-if 改 canDeleteMeeting = isAdmin || isManager
manager 项目管理:
- Projects.vue 加批量删除 + 删除项 + doDelete 改走 cascade (5 张项目表 + 会议链)
- ProjectsNew.vue style-alignment: page-card 居左 (max-width 1200px, 无 margin auto), form-actions 包在 el-form 内
- Projects.vue + Meetings.vue + AdminMeetings.vue 删页内冗余删除提示
store + 组件:
- store/user.js 加 isAdmin getter
- components/ProjectRoleSelect.vue 新建 (项目级角色劳务下拉, 接 roleLabor)
|
2026-08-22 20:16:46 +08:00 |
|
郭庆泰
|
0eb5da6ea8
|
feat(biz_project+meeting): 项目+会议软删除级联, admin/manager 双角色可删
biz_project* 5 表级联 (project/plan/assign/sponsor_assign/rating) + 会议链
biz_meeting* 6 表级联 admin-only → admin/manager 可删
DB:
- 5 ALTER TABLE 加 is_deleted TINYINT DEFAULT 0 NOT NULL (biz_project/plan/assign/sponsor_assign/rating)
- biz_meeting* 6 表已有 is_deleted 列 (上轮已 ALTER)
Domain (10 文件):
- 5 个 biz_project* 加 isDeleted 字段
- 6 个 biz_meeting* 加 isDeleted 字段
- (audit_log 列名特殊: 使用 deleted 字段存操作类型, 不冲突)
Mapper 接口 (10 文件):
- 5 个 project mapper 加 softDeleteByProjectId / softDeleteByProjectNo
- 5 个 meeting mapper 加 softDeleteByMeetingId
- BizMeetingMapper 加 selectIdListByProjectId (级联调用)
Mapper XML (10 文件):
- 所有 SELECT 加 is_deleted=0 过滤 (含 JOIN 子查询)
- 加 softDeleteByXxx UPDATE (10 处)
- BizMeetingMapper.xml 的 plan LEFT JOIN 加 proj.is_deleted=0 防悬挂
Service (3 文件):
- IBizProjectService.softDeleteCascade/Batch (含会议链调用)
- IBizMeetingService.softDeleteCascade/Batch
- BizProjectServiceImpl / BizMeetingServiceImpl @Transactional(rollbackFor=Exception.class)
Controller (2 文件):
- BizProjectController.DELETE 改 admin+manager 可删
- BizMeetingController.DELETE 改 admin+manager 可删 (放宽权限)
|
2026-08-22 20:16:40 +08:00 |
|
郭庆泰
|
da46a45682
|
feat(select): DoctorDeptSelect / DoctorTitleSelect 加 "其他" 逃生口 (虚拟项 + 下方 input + 自动回填识别)
|
2026-08-22 16:56:37 +08:00 |
|
郭庆泰
|
2bc2b7f36b
|
feat(detail): 参会人 dialog 科室/职称 改用 DoctorDeptSelect / DoctorTitleSelect (与专家页对齐规范下拉)
|
2026-08-22 16:50:58 +08:00 |
|
郭庆泰
|
67fc425639
|
style(detail): 参会人 dialog 改 2 列布局 (760px grid 1fr 1fr) + close-on-click-modal=false 防误触关闭
|
2026-08-22 16:48:24 +08:00 |
|
郭庆泰
|
42cce867e3
|
style(import): Excel 模板列重命名 (姓名->医生, 手机号->联系电话, 工作单位->医院), 医生放最前
|
2026-08-22 16:43:48 +08:00 |
|
郭庆泰
|
64698fd022
|
fix(attendee): HttpServletResponse 改用 jakarta (Spring Boot 3 / Jakarta EE)
|
2026-08-22 16:39:11 +08:00 |
|
郭庆泰
|
0dafb47e7d
|
feat(attendee): Excel 批量导入 (后端 /importData + /importTemplate + 5邀请差集推送, 前端 dialog-upload 套用 dialog-import SKILL)
|
2026-08-22 16:35:50 +08:00 |
|
郭庆泰
|
da7c19af6c
|
feat(detail): 参会人表新增 增值税及附加/摘要/现场照片 3 列 + 劳务协议展示, 角色=劳务形式, 费项改名 应发金额/个税税金/实发金额
|
2026-08-22 16:27:54 +08:00 |
|
郭庆泰
|
2ae4cd3ea5
|
fix(detail): 参会人表撑爆 grid 修复 (left-col min-width:0 + wrap div overflow-x:auto)
|
2026-08-22 16:20:45 +08:00 |
|
郭庆泰
|
0fbe99eb1d
|
style(detail): 网格比例改 7fr 3fr (会议信息 70%, 审核双栏 30%), 内层 1fr 1fr 各占 15%
|
2026-08-22 16:18:25 +08:00 |
|
郭庆泰
|
50bcb13861
|
style(detail): 移除材料管理卡片固定宽度, 跟 会议基本信息 一样宽 (跟 left-col 2fr 网格槽)
|
2026-08-22 16:17:07 +08:00 |
|
郭庆泰
|
2a4d3ae87f
|
style(detail): 测试 材料管理 卡片固定宽度 800px, 观察表格 100% 跟随效果
|
2026-08-22 16:16:06 +08:00 |
|
郭庆泰
|
6b3e5fc9f7
|
style(detail): 参会人表宽度改回 width:100% 跟随 left-col 网格槽
|
2026-08-22 16:15:07 +08:00 |
|
郭庆泰
|
ae5c2a19d9
|
refactor(detail): 参会人表改为 style="width: 800px" 直接限宽, 移除 wrap div
|
2026-08-22 16:12:05 +08:00 |
|
郭庆泰
|
82a61963e7
|
style(detail): 参会人表 5 列 min-width 100→90, 减少总宽 ~50px
|
2026-08-22 16:10:11 +08:00 |
|
郭庆泰
|
6983368386
|
fix(detail): 参会人表外层加 overflow-x:auto, 防 13 列撑爆左侧网格
|
2026-08-22 16:09:15 +08:00 |
|