docs(manager_meetings): 第三轮修复记录 (style-alignment + 批量按钮去 plain), §9/§10/§11 同步, 待修复表新增 #18-#20

This commit is contained in:
郭庆泰
2026-08-18 23:17:53 +08:00
parent 6774c44429
commit e644e0897f
+44 -18
View File
@@ -23,6 +23,16 @@
| 附带: editForm 补 `projectId` / `projectNo` / `projectName` / `currentStage` (复制需要) | `Meetings.vue:222-231` 加 4 字段; onEdit/onCopy 都从 row 回填 |
| 后端核对 | `POST /business/meeting` 已存在 (BizMeetingController.add:36-40); Mapper INSERT (BizMeetingMapper.xml:43-87) 已覆盖所有字段; Spring Boot 默认 `fail-on-unknown=false`, 前端发的 `remark` 字段被静默忽略, 不报错; `meetingId` 走 AUTO_INCREMENT; `create_by/create_time/update_by/update_time` 由 MyBatis-Plus MetaObjectHandler 自动填充; **后端零改动** ✅ |
### 第三轮: style-alignment + 批量提交按钮去 plain (commits `6d4f1e6` + `6774c44`)
| 问题 | 修复 |
|---|---|
| **批量提交按钮 disabled 顺色** (`type="primary" plain`) — outlined primary 在 disabled 状态下文字极淡灰色, 跟透明背景对比度低, 看不清 | `Meetings.vue:41` 去掉 `plain` 属性; 现 `<el-button type="primary" :disabled="!selectedIds.length">批量提交</el-button>` — disabled 状态浅蓝底 + 白字, 一眼可识别 |
| **"已选 X 条" 提示紧贴按钮左边** — 应推到 batch-bar 最右侧 (跟 People.vue 风格一致) | `Meetings.vue:324 .filter-tip { ... margin-left: auto; }` |
| `<span style="margin:0 4px">至</span>` — 残留 inline style | `Meetings.vue:13``<span class="date-sep">至</span>`; `Meetings.vue:325` 新增 `.date-sep { margin: 0 4px; color: #606266; }` |
| `.batch-bar` 属性顺序跟 People.vue 不一致 | `Meetings.vue:323` 改成 `margin-bottom: 12px; display: flex; gap: 8px; align-items: center;` (margin 提前) |
| 自查 (style-alignment 验证清单) | ✅ 1 层 page-card / ✅ breadcrumb / ✅ 无 desc / ✅ 无 h2 page-title / ✅ filter-form/batch-bar/pager 三 class / ✅ 蓝色全用 `var(--brand-primary)`#1890ff / ✅ 边框全 #f0f0f0#ebeef5 / ✅ 无 `:deep(.el-button--primary)` 大段覆盖 / ✅ el-pagination 在 .pager / ✅ el-form-item label 无冒号 / ✅ `<script>` 业务逻辑 100% 保留 (load/reset/view/edit/sub/copy/submit/batch 全在) |
---
## 0. 4 跳定位 (铁律: 不按名字猜)
@@ -31,7 +41,7 @@
|---|---|---|
| ① 角色菜单 | `ry-vue3/src/layout/AdminLayout.vue:99` | `path: '/manager/meetings', title: '会议管理'` ✓ |
| ② 路由 | `ry-vue3/src/router/index.js:69-70` | `name: 'manager-meetings', component: () => import('@/views/manager/Meetings.vue')` ✓ |
| ③ 组件 | `ry-vue3/src/views/manager/Meetings.vue` (306 行) | 列表 + 筛选 + 批量提交 + 查看/修改/提交/复制 |
| ③ 组件 | `ry-vue3/src/views/manager/Meetings.vue` (343 行) | 列表 + 筛选 + 批量提交 + 查看/修改/提交/复制 |
| ④ 原型 | `proto/html/components/meetings.html` | "我参与的会议" 7 列表格 + 4 项筛选 (项目编号/会议名称/当前阶段/签署状态) |
---
@@ -46,7 +56,7 @@
| 查看详情 (弹窗) | `onView(row)``el-dialog` (只读 el-descriptions) | 复用列表返回的 row, 不额外请求 | `biz_meeting` |
| 修改会议 (弹窗) | `onEdit(row)``submitEdit()` | `PUT /business/meeting` (BizMeetingController:42-46) | `biz_meeting` |
| 提交 (单条) | `onSubmit(row)` → 弹 confirm → bizUpdate | `PUT /business/meeting` (BizMeetingController:42-46) | `biz_meeting` (current_stage 改 "执行中") |
| 复制 (单条) | `onCopy(row)` → 打开 editForm (meetingId='') → submitEdit | `PUT /business/meeting` ❌ 应 `POST /business/meeting` | `biz_meeting` |
| 复制 (单条) | `onCopy(row)` → 打开 editForm (`editMode='copy'`) → submitEdit 走 bizAdd | `POST /business/meeting` ✅ 第二轮修 | `biz_meeting` |
| 批量提交 (逐条) | `onBatchSubmit()` → for 循环 bizUpdate | 同上 × N 次 | `biz_meeting` |
### 1.2 可见性 (三层隔离)
@@ -160,26 +170,28 @@ order by meeting_id desc
| 查看 | `onView(row)` | (无, 用列表 row 数据) | 弹 detailOpen dialog | — | ❌ 原型无 (原型点会议名跳转 meeting-detail.html) |
| 修改 | `onEdit(row)``submitEdit()` | `PUT /business/meeting` | UPDATE biz_meeting SET meeting_name?, project_form?, start_time?, end_time?, total_periods?, remark? WHERE meeting_id=? | `biz_meeting` (6 字段) | ❌ 原型无 |
| 提交 | `onSubmit(row)` | `PUT /business/meeting` | UPDATE biz_meeting SET current_stage='执行中' WHERE meeting_id=? | `biz_meeting.current_stage` | ❌ 原型无 |
| 复制 | `onCopy(row)``submitEdit()` | `PUT /business/meeting` ❌ 应 POST | UPDATE WHERE meeting_id='' ❌ 0 rows affected | (无变化) | ❌ 原型无 |
| 复制 | `onCopy(row)``submitEdit()` (走 `bizAdd`) | `POST /business/meeting` ✅ 第二轮修 | INSERT biz_meeting (...) VALUES (...); meetingId AUTO_INCREMENT, businessId 兜底 | `biz_meeting` (新行) | ❌ 原型无 |
**真实落点**:
- "提交": 直接改 `current_stage = '执行中'`, 没有任何业务校验 (例如只能从未执行→执行中). 也不写日志 (`biz_meeting_log` 等不存在).
- "修改": 改 6 字段, 但 start_time/end_time/total_periods 没校验 (MeetingNew 的校验规则未共享).
**核心 bug #2** (`onCopy`): `Meetings.vue:254-263`
**核心 bug #2** (`onCopy`) — 第二轮已修 ✅: `Meetings.vue:282-299 onCopy`
```js
function onCopy(row) {
editMode.value = 'copy' // ← 标志为复制模式
Object.assign(editForm, {
meetingId: '', // ← 空字符串
meetingId: '', // ← 空字符串 (复制时不要传, 走 AUTO_INCREMENT)
meetingName: (row.meetingName || '') + ' 副本',
projectId: row.projectId ?? null,
...
})
editOpen.value = true
}
```
`submitEdit()` 内部 `await bizUpdate('meeting', { ...editForm })``PUT /business/meeting``meetingId=''` → UPDATE WHERE meeting_id='' → 0 行受影响 → 返回 `toAjax(0)` → 200 OK, 前端弹 "修改成功" → **实际未创建副本**
`submitEdit()` `editMode` 分支: copy 走 `bizAdd('meeting', payload, { __silentError: true })` (删 meetingId), edit 走 `bizUpdate`。第二轮回滚/回退风险已消除: 后端零改动, 前端分支
---
@@ -335,17 +347,25 @@ CREATE TABLE `biz_meeting` (
### 9.3 业务闭环检查
- `onCopy` 实际是 INSERT (新建副本), 但走 bizUpdate → 0 行受影响 + 误报"修改成功"
- 提交/批量提交无业务校验 (任何状态都能转 "执行中", 包括"已完结" → "执行中" 的状态回滚)
- 修改 dialog 无任何校验 (start_time > end_time 不报, meetingName 空不报)
- 修改 dialog 改 6 字段, 但 mapper UPDATE 只 6 个 `<if>` (跟前端一致 ✅), 但 **缺 `remark` `<if>`** (实体无此字段)
- `onCopy` 已走 `bizAdd` (第二轮修) — 现在正确创建副本
- ⚠️ 提交/批量提交无业务校验 (任何状态都能转 "执行中", 包括"已完结" → "执行中" 的状态回滚) — 未修
- ⚠️ 修改 dialog 无任何校验 (start_time > end_time 不报, meetingName 空不报) — 未修
- ⚠️ 修改 dialog 改 6 字段, 但 mapper UPDATE 只 6 个 `<if>` (跟前端一致 ✅), 但 **缺 `remark` `<if>`** (实体无此字段) — 未修
### 9.4 双 toast bug (跨页面通用)
### 9.4 双 toast bug (跨页面通用) ✅ 第二轮已修
- `submitEdit` / `onSubmit` / `onBatchSubmit` 都未传 `{ __silentError: true }`
- `MeetingNew.vue` 之前同款 bug (修过)
- `submitEdit` / `onSubmit` / `onBatchSubmit` 三处 `bizUpdate`/`bizAdd` 都加 `{ __silentError: true }`
- catch 统一 `ElMessage.error(e?.msg || '...')`, 拦截器不再自动 toast
-`MeetingNew.vue` 之前同款 bug 一起消除 ✅
### 9.5 数据隔离缺失
### 9.5 UI 顺色 / 样式问题 ✅ 第三轮已修
- ✅ 批量提交按钮 `type="primary" plain` disabled 时文字顺色 — 已去 `plain`
- ✅ "已选 X 条" 紧贴按钮左边 — 已 `margin-left: auto` 推右
-`<span style="margin:0 4px">至</span>` inline style — 已抽 `.date-sep` class
-`.batch-bar` 属性顺序 — 已跟 People.vue 对齐
### 9.6 数据隔离缺失
- `BizMeetingMapper.xml:37-42 selectList``@DataScope` 或 manager 端限制
- 当前 7 行数据无风险, 但生产环境 manager 应该只看自己 lead_user_id 的项目关联的会议 (应通过 `biz_project.lead_user_id` 过滤)
@@ -373,13 +393,16 @@ CREATE TABLE `biz_meeting` (
| 15 | **filter 缺"签署状态"** (原型有, 实体有 labor_signed) | `Meetings.vue` filter 加 | 加 `<el-select v-model="q.laborSigned">` 2 option | **P2** |
| 16 | **筛选后端需补索引** (idx_project_no + idx_meeting_name) | `biz_meeting` table | `ALTER TABLE biz_meeting ADD KEY idx_project_no (project_no), ADD KEY idx_meeting_name (meeting_name);` | **P3** (小数据量暂可) |
| 17 | **实体 periodNo/totalPeriods Long vs int** | `BizMeeting.java` | 改 int, MyBatis INSERT 不需要 Long 转换 | **P3** |
| 18 | **批量提交按钮 plain + disabled 顺色** | `Meetings.vue:41` | 去掉 `plain` 属性 | ~~**P2**~~ ✅ 第三轮修 (commit 6774c44) |
| 19 | **"已选 X 条" 紧贴按钮左边** | `Meetings.vue:324` | `.filter-tip { margin-left: auto }` | ~~**P2**~~ ✅ 第三轮同 commit 修 |
| 20 | **inline style `margin:0 4px` 残留** ("至") | `Meetings.vue:13` | 抽 `.date-sep` class | ~~**P3**~~ ✅ 第三轮修 (commit 6d4f1e6) |
---
## 11. 引用清单
### 前端
- `ry-vue3/src/views/manager/Meetings.vue` (306 行) — 本审查目标
- `ry-vue3/src/views/manager/Meetings.vue` (343 行) — 本审查目标
- `ry-vue3/src/views/manager/MeetingNew.vue` — 新建会议独立页 (共享 BizMeeting)
- `ry-vue3/src/layout/AdminLayout.vue:99` — manager 菜单项 "会议管理"
- `ry-vue3/src/router/index.js:69-70``/manager/meetings` 路由
@@ -410,8 +433,11 @@ CREATE TABLE `biz_meeting` (
- `biz_project` — 12 行 (含最近 `ALTER TABLE ADD COLUMN create_user_id bigint`, commit ffda9c6)
- `biz_person` — JOIN 取姓名 (create_user_id → biz_person.user_id → biz_person.name)
### 历史修复 (跨 session)
- 第一轮 (manager_meeting_new.md commit 66a928a): 13 项 DB + 类型修复
### 历史修复 (跨 session, 本页相关)
- 第一轮 (manager_meeting_new.md commit 66a928a): 13 项 DB + 类型修复 (影响共享 BizMeeting)
- 第二轮 (manager_meeting_new.md commit 4fbfcbf + 8f62f65 + 518da05 + 29a4b02 + 379cf22 + ac31387): MeetingNew.vue 原型 1:1 重写 + 风格统一 + 双 toast 修复
- 第三轮 (commit ffda9c6): biz_project 加 create_user_id
- 第三轮 (commit ffda9c6): biz_project 加 create_user_id (影响跨表)
- 第四轮 (commit a081da8): MeetingNew.vue "期数" 文案改 "请填写第几期"
- 第五轮 — Meetings.vue 第一波修复 (commit 08d81e9): onCopy 改 bizAdd + 三处 __silentError
- 第五轮 — Meetings.vue style-alignment (commit 6d4f1e6): 删 inline margin, batch-bar 顺序对齐, 加 .date-sep
- 第五轮 — Meetings.vue 批量按钮去 plain (commit 6774c44): disabled 顺色修 + 提示 margin-left:auto