fix(meetings): 恢复会议ID filter (原型有), 第?期 改 el-input-number

This commit is contained in:
郭庆泰
2026-08-18 23:27:17 +08:00
parent c91272a05f
commit bae9fa6a6f
2 changed files with 26 additions and 7 deletions
+21 -3
View File
@@ -43,6 +43,23 @@
| ⚠️ 发现数据不一致 (本轮不修, 仅记录) | DB 实际 current_stage 值是: 0/已结算/已结题/待整改/待监管/监管通过 (6 种); DDL 注释写 7 种 (未执行/执行中/监管通过/待整改/待结算/已结算/已结题); 前端 select 是 4 种 (未执行/执行中/已执行/已完结) — **三者全不一致**! 用户即使 mapper 修了, 也筛不到任何 stage 因为 select 选项不在 DB 实际数据中. 待 P1#7 一并修. |
| 前端不动 | `q` 的 8 项字段保持原样 (空字符串 / Long / Date 都有), Spring 默认 Converter 会把空字符串绑成 null, mapper `<if>` 跳过, 行为正确 |
### 第五轮: 恢复会议ID + 第?期 filter (commit pending)
> **修订**: 第四轮前后我曾误以为 `会议ID` / `第?期` 是用户新增字段不在原型, 一度删除. **用户澄清两个字段原型中都有, 必须保留**. 此轮修复:
> - `Meetings.vue:8` 恢复 `<el-form-item label="会议ID">` (el-input, q.meetingId, 精确匹配 meeting_id PK)
> - `Meetings.vue:10` 恢复 `<el-form-item label="第?期">` (**el-input-number, 不是 el-input** — 跟用户原话 "应该是 el-input-number" 对齐)
> - `Meetings.vue:142-145` `q` reactive 加回 `meetingId:''` + `periodNo:''` 字段
> - `Meetings.vue:206-209` `reset()` 加回 `meetingId:''` + `periodNo:''`
> - `BizMeetingMapper.xml:41, 43` mapper `<if>` 块本就有, 这次没动 (第三轮已加)
| 验证 | 结果 |
|---|---|
| `q.meetingId = '14'` → 后端 `meeting_id = 14` | ✅ 1 行 (DB 实测) |
| `q.periodNo = 1` → 后端 `period_no = 1` | ✅ 1 行 (DB 实测) |
| 留空 (q.meetingId='', q.periodNo='') → 后端 null, mapper `<if>` 跳过 | ✅ 不影响其他筛选 |
| el-input-number `:min="0" :precision="0"` | ✅ 输入非整数会被自动纠正; 留空显示空 (Spring 收到 null) |
| §10 #2 / #11 同步更新 | #2 (删 filter) ❌ → ✅ 加回保留; #11 (改 el-input-number) ✅ 本轮同时修 |
---
## 0. 4 跳定位 (铁律: 不按名字猜)
@@ -387,7 +404,7 @@ CREATE TABLE `biz_meeting` (
| # | 问题 | 文件 | 修复建议 | 严重度 |
|---|---|---|---|---|
| 1 | **所有筛选不生效** (7 项) — mapper `<where>` 空 | `BizMeetingMapper.xml:39-40` | 加 8 个 `<if>` 条件: project_no LIKE, meeting_name LIKE, period_no =, project_form =, current_stage =, start_time >=, end_time <=, business_id = (如果还用 meetingId filter, 应改成业务字段) | ~~**P0**~~ ✅ 第六轮修 (commit 14757f3) |
| 2 | **`meetingId` 列让用户看/筛 PK** | `Meetings.vue:8, 49` | 删 filter (q.meetingId + 字段) + 删 el-table-column | **P0** |
| 2 | **`meetingId` 列让用户看/筛 PK** | `Meetings.vue:8, 49` | ~~删 filter~~**用户澄清原型中有, 保留 filter + 列** (本轮加回) | ~~**P0**~~ ✅ 加回保留 |
| 3 | **`onCopy` bug** — PUT 0 行 + 误报成功 | `Meetings.vue:254-263` + `submitEdit()` | `onCopy` 改走 `bizAdd('meeting', { ...不带 meetingId })`; submitEdit 改成 `if (editForm.meetingId) bizUpdate else bizAdd`, 或拆成两个 dialog | **P0** ✅ 第二轮修 |
| 4 | **3 处缺 `__silentError`** (双 toast) | `Meetings.vue:235, 247, 272` | bizUpdate 调用加 `{ __silentError: true }`, catch 里手动 `ElMessage.error(e?.msg \|\| '...')` | **P0** ✅ 第二轮同commit修 |
| 5 | **实体无 `remark` 字段** — 前端 3 处 silent fail | `BizMeeting.java` + `BizMeetingMapper.xml` UPDATE | 加 `private String remark` + getter/setter + mapper UPDATE 加 `<if test="remark != null">remark = #{remark},</if>` + INSERT 加 `<if test="remark != null and remark != ''">remark,</if>`; 或前端 3 处全删 (业务可能不需要) | **P0** |
@@ -396,7 +413,7 @@ CREATE TABLE `biz_meeting` (
| 8 | **详情 dialog 缺字段** (create_time / org_name / supervision_* / labor_signed / invitation_url / schedule_url) | `Meetings.vue:91-103` | el-descriptions 加 5-8 行; URL 字段加 `<a :href>` 链接 | **P1** |
| 9 | **`totalPeriods` 永远 1** — MeetingNew.vue 没让填 | `MeetingNew.vue` (新建表单) | MeetingNew.vue 加"总期数"字段 (用户填, INSERT 时一起写); 列表列保留 | **P1** |
| 10 | **批量提交无事务/无批量 endpoint** | `Meetings.vue:271-273` | 后端加 `PUT /business/meeting/batch?ids=...` + `@Transactional`; 前端 for 循环改成单次调用 | **P2** |
| 11 | **filter 第?期 type=el-input 应是 el-input-number** | `Meetings.vue:10` | 改 `<el-input-number v-model="q.periodNo" :min="1" />` | **P2** |
| 11 | **filter 第?期 type=el-input 应是 el-input-number** | `Meetings.vue:10` | 改 `<el-input-number v-model="q.periodNo" :min="0" :precision="0" />` | ~~**P2**~~ ✅ 第五轮同 commit 修 |
| 12 | **filter 8 项挤一行** (屏幕窄乱) | `Meetings.vue:6-37` | 拆 2 行, 或 grid-template-columns: repeat(4, 1fr) | **P2** |
| 13 | **状态回滚无校验** (任何 stage → "执行中") | `Meetings.vue:244-251` | 加 if (currentStage === '未执行') 才能提交, 否则 ElMessageBox 提示 | **P2** |
| 14 | **数据隔离缺失** (selectList 无 lead_user_id 过滤) | `BizMeetingMapper.xml:37-42` | 加 `<if test="params.leadUserId != null">and project_id in (select project_id from biz_project where lead_user_id = #{params.leadUserId})</if>` (需要后端传入当前 user_id) | **P2** (生产前必修) |
@@ -450,4 +467,5 @@ CREATE TABLE `biz_meeting` (
- 第四轮 (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
- 第五轮 — Meetings.vue 批量按钮去 plain (commit 6774c44): disabled 顺色修 + 提示 margin-left:auto
- 第五轮 (续) — Meetings.vue 恢复会议ID + 第?期 filter (commit pending): 误删 2 个 filter 后用户澄清加回, 第?期同步改 el-input-number
+5 -4
View File
@@ -5,8 +5,9 @@
<!-- ========== 筛选区 ( People.vue 风格一致) ========== -->
<el-form inline :model="q" class="filter-form">
<el-form-item label="项目编号"><el-input v-model="q.projectNo" placeholder="" clearable style="width:140px" /></el-form-item>
<el-form-item label="会议ID"><el-input v-model="q.meetingId" placeholder="" clearable style="width:140px" /></el-form-item>
<el-form-item label="会议名称"><el-input v-model="q.meetingName" placeholder="" clearable style="width:160px" /></el-form-item>
<el-form-item label="第?期"><el-input v-model="q.periodNo" placeholder="" clearable style="width:80px" /></el-form-item>
<el-form-item label="第?期"><el-input-number v-model="q.periodNo" :min="0" :precision="0" style="width:140px" /></el-form-item>
<el-form-item label="会议时间">
<el-date-picker v-model="q.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" style="width:170px" />
<span class="date-sep"></span>
@@ -136,9 +137,9 @@ import { ref, reactive, onMounted } from 'vue'
import { bizList, bizUpdate, bizAdd } from '@/api/public'
import { ElMessage, ElMessageBox } from 'element-plus'
// ========== 筛选 (按实际 7 项: 项目编号/会议名称/第期/会议时间/项目形式/当前阶段/备注) ==========
// ========== 筛选 (按实际 8 项: 项目编号/会议ID/会议名称/第?期/会议时间/项目形式/当前阶段/备注) ==========
const q = ref({
projectNo: '', meetingName: '', periodNo: '',
projectNo: '', meetingId: '', meetingName: '', periodNo: '',
projectForm: '', currentStage: '', remark: '',
startTime: '', endTime: ''
})
@@ -202,7 +203,7 @@ async function load() {
}
function reset() {
q.value = {
projectNo:'', meetingName:'', periodNo:'',
projectNo:'', meetingId:'', meetingName:'', periodNo:'',
projectForm:'', currentStage:'', remark:'',
startTime:'', endTime:''
}