# 干部任免上会系统 · 功能审计与修改清单

- 审计日期：2026-10-20
- 审计范围：后台「会议管理」「任免表及考察材料」（含任免文件、批注、批量上传）、PAD 端显示与交互、整体业务流程
- 方式：接口实测 + 页面点击实测 + 数据库核对 + 源码核对（只读，未改动任何功能代码）
- 结论标记：**[实测]** = 实际操作复现；**[代码]** = 源码确认

---

## 一、总体结论

系统"骨架"是通的：建会 → 导入 3.0 任免表 → 上传材料 → 生成加密数据包 → 推到平板 → PAD 查阅，这条主链路能跑通，加密、设备绑定、有效期、水印、批注、.lrmx 导入导出都是真实现。

但存在 **4 类硬伤**，直接影响能不能给业务用：

1. **PAD 端只真实展示了"任免审批表"，考察/汇报/说明/附件全部是写死的示例文本**（数据包内只有材料元数据，没有文件本体）。
2. **会议管理、处室维护、用户管理里有大段"假功能"**：看着能点、提示成功，实际没有落库，刷新即还原。
3. **会议列表的"上会人数 / 材料完整度"是错的**：所有行都显示当前选中会议的数字。
4. **数据一致性缺口**：同一人可被建成两条档案、届次号不校验不查重、状态机可被绕过、删除后无法恢复（回收站不存在）。

---

## 二、P0 —— 阻断业务，建议优先改

| 编号 | 模块 | 问题 | 证据 | 影响 |
|---|---|---|---|---|
| P0-1 | PAD | **考察材料 / 汇报材料 / 说明材料是写死的模板文字**，不是后台上传的文件 | [实测+代码] `renderExam/renderReport/renderNote` 内是固定段落，还带编造的随机数（谈话人数 `18+(id%6)*2`、测评人数 `30+(id%5)*8`、95.6%）；全文件 0 处引用 `materials/fileName/filePath` | 领导在 PAD 上看到的"考察材料"是假内容，与后台上传件不一致，上会决策依据失真 |
| P0-2 | 数据包 | **包内只有材料元数据，没有文件本体** | [实测] 解密后 `materials` 表列为 id/cadreId/type/fileName/pages/version…，无文件内容；包 108KB（60 份材料不可能这么小） | 即使 PAD 想展示也拿不到文件，是 P0-1 的根因 |
| P0-3 | PAD | **附件页签是硬编码 4 条假条目** | [实测] `renderAtt()` 里写死 `姓名_干部任免审批表(3.0).docx · Word·46KB` 等 4 条，不读数据 | 附件材料等于没下发 |
| P0-4 | 会议管理 | **列表"上会人数 / 材料完整度"全部用当前会议数据** | [实测] 切到 192 次后，192/193/194/58/专题会 5 行全部显示"12 人 / 2 人待补件"；代码 `var cnt = CADRES.length`（两个分支相同）、`lack` 也取全局 CADRES | 一眼看不出哪场会材料没备齐，误导上会安排 |
| P0-5 | 任免表及考察材料 | **"删除"是假删除**（删除干部/删除任免文件） | [代码] `doDelCadre` / `doDelDoc` 只改本地数组 + 写一条假日志，无 `apiCall`；提示"软删除，可在回收站恢复" | 用户以为删掉了，刷新全回来；日志也没入库 |
| P0-6 | 处室维护 | **整个模块纯前端**（新增/编辑/启停/删除） | [代码] `saveDept` 中 `apiCall` 出现 0 次，仅改 `DEPTS` 数组 | 改了没用，刷新还原；提示"已同步清理会议配置"也是假的 |
| P0-7 | 用户与登录管理 | **整个模块纯前端**（新增账号/改角色/重置口令/停用/删除） | [代码] 该模块 `apiCall` 出现 0 次 | 无法真正开户、授权、改密 |

---

## 三、P1 —— 功能错误 / 数据错误

| 编号 | 模块 | 问题 | 证据 | 影响 |
|---|---|---|---|---|
| P1-1 | 会议管理 | **届次号标了必填却不校验** | [实测] 届次号留空 + 填名称 → 直接建会成功（生成 `SessionNo=NULL` 的会议，Id=15，已清理） | 出现无届次的会议，名称也对不上 |
| P1-2 | 会议管理 | **届次号 / 会议名不查重** | [实测] 再建"第192次"→ 成功建出第二条同名会议（Id=16，已清理） | 同场会出现多条记录，材料分散 |
| P1-3 | 会议管理 | **状态机可被"编辑会议"绕过** | [实测] 编辑 193 次，把"筹备中"直接改"已归档"→ 成功；而 `/status` 接口有相邻推进校验 | 误操作即锁死（归档后不能再改），且无"撤回归档" |
| P1-4 | 会议管理 | **提示让用"撤回归档"，但系统没有这个功能** | [实测] 归档会议保存时提示"如需修改请先撤回归档"；[代码] 全站无撤销入口 | 死路：归档即不可逆 |
| P1-5 | 全局 | **"回收站"不存在，但 3 处删除提示都说可恢复** | [代码] 无回收站页面、无 restore 接口；会议/任免文件/干部删除提示均写"可在回收站恢复" | 承诺了不存在的功能，误删无法找回 |
| P1-6 | 任免表 | **同一人被建成两条档案** | [实测] 陈晓东 Id=4（1968.09，干部一处）与 Id=16（1968.06，无处分室）并存；因 `.lrmx` 里出生年月与库内不一致且都无身份证号 | 材料分散、上会名单重复、审批表可能看错档案 |
| P1-7 | 任免文件 | **上传时不采集文号/页数** | [实测] 上传弹窗只有"选择文件"，无文号、页数输入；接口支持但前端不传 → 新上传件 `DocNo=NULL`、`Pages=0` | 文件列表文号/页数空，无法与正式发文对应 |
| P1-8 | 材料 | **缺文件的材料仍显示"下载"** | [实测] 郑海燕 考察材料（id=42）、刘志强 汇报材料 status=missing、无文件，列表仍给"下载"，点击 404「该材料尚无文件」；下载文件名也缺扩展名 | 经办人反复点、以为是系统故障 |
| P1-9 | 任免表 | **排序模式不保存** | [代码] 拖拽只重排本地 `CADRES`，无任何保存接口（后端无写 `SortNo` 的端点），但页面提示"该顺序即 PAD 端展示顺序" | 排好的议题顺序刷新即丢，PAD 顺序不会变 |
| P1-10 | 任免表 | **"附件"类材料在后台无入口** | [实测] 材料表 att 类型有 12 条，但页签只有 任免文件/任免表/考察/汇报/说明；`hasAttTab=false` | 12 份附件材料既看不到也传不了 |
| P1-11 | 会议管理 | **"导出清单"是假按钮** | [代码] 点击仅 `toast('演示环境：会议清单已按模板导出')`，不产生文件（处室清单同样） | 需要的会议台账导不出来 |
| P1-12 | PAD | 首页日期 / 水印日期取的是**会议日期**，不是当天 | [实测] 今天 2026-10-20，PAD 首页显示"2026年10月12日"；水印同样用会议日期 | 与你之前"日期要跟电脑一致"的要求不符（需确认口径） |
| P1-13 | PAD | **后台两份 pad.html 不同步**：APK 版有页面内退出弹层，`wwwroot` 版仍是原生 `confirm()` | [代码] APK 版含 `maskExit`（2 处），wwwroot 版 0 处；wwwroot 版 `doExit()` 用 `confirm()` | 后台"预览"里退出行为与真机不一致，后续改动容易只改一份 |

---

## 四、P2 —— 一致性 / 体验 / 可信度

| 编号 | 模块 | 问题 | 证据 |
|---|---|---|---|
| P2-1 | 任免文件 | 删除后**旧版本文件成为磁盘孤儿** | [实测] 删除会议2 的任免文件后，`uploads/docs/2/` 仍残留 1 个旧版文件 |
| P2-2 | 会议管理 | 删除会议**不级联**：材料/名单/任免文件/数据包仍指向该会议；其数据包仍出现在数据包列表 | [代码+数据] DELETE 仅置 `IsDeleted=1` |
| P2-3 | 任免文件 | "已关联 N 人 / 未关联干部"标注在文件名称尾部，横向滚动时会被挤掉 | [实测] 表格 min-width 1180，容器 781，需横向滚动 |
| P2-4 | 会议管理 | 会议状态可选项 7 个平铺，无流程引导（正常应"筹备中→材料已审核→已下发→召开中→结果登记→归档"） | [实测] 下拉直接可选中任意状态 |
| P2-5 | PAD | 已阅回执只能在平板本地记录，需"导出回执→后台导入"才能看到 | [实测] `readreceipts` 仅 4 条，全部 `ImportedBy=系统管理员`（导入件） |
| P2-6 | 全局 | 前端"审计日志"里出现"王科长 / PC-GY-021"这类演示身份（假删除等路径产生） | [代码] `LOGS.unshift` 硬编码 王科长 |
| P2-7 | 材料 | 上传弹窗"下载核对"链接在上传成功后出现，但保存的是"未做扩展名校验"的原始文件名 | [代码] `window.__dl.name = d.fileName` |

---

## 五、业务流程层面值得改的地方

### 1) 主链路目前是断的（最要紧）
现状：后台把考察/汇报/说明/附件的 Word 传上去 → 数据包只带走"元数据" → PAD 用模板文字拼接显示。
**建议二选一（需你定方向）**：

- **方案 A（推荐，工作量中等）**：数据包内嵌材料文件的**转换件**（PDF 或逐页图片），PAD 端用内置查看器翻页。
  - 优点：所见即所传，符合"上会看原件"的要求；离线可用。
  - 代价：包体积变大（12 人×4 类，按 PDF 每份 200KB～1MB 估，包体 10～40MB）；需要服务端做转换（LibreOffice 已在服务器上）。
  - 配套：生成数据包时显示预计体积，超过阈值提示。
- **方案 B（轻）**：PAD 只显示"材料清单+元数据"，正文仍需在会前打印或回后台查阅。
  - 优点：包小、改造成本低。
  - 缺点：不满足"无纸化上会"的初衷。

> 现状（假文本）不能保留——它会让领导看到与档案不一致的内容，这是政治风险。

### 2) 任免文件的"人级关联"已有，但缺校验闭环
已经能：上传/设置人员 → 列表看人 → PAD 标"未列入文件"。
建议补：**生成数据包前做一次"材料齐备度校验"**（有审批表无任免文件、有任免文件无审批表、材料缺文件），不通过则阻断或强提示。

### 3) 干部档案去重规则要收紧
现在按"身份证 → 姓名+出生年月"匹配，无身份证时极易重复建档（已出现陈晓东两条）。
建议：`姓名+出生年月` 命中多条时**不自动新建**，改为弹出"疑似重复，请选择合并到哪条"，并提供"合并档案"功能（材料/简历/家庭/名单合并）。

### 4) 删除与归档要有退路
- 要么真的做回收站（软删可恢复，30 天清理）；
- 要么把提示里"可在回收站恢复"全部删掉，改成"删除不可恢复，请谨慎操作"，并加二次确认（输入会议名/姓名）。
- 归档要有"撤回归档"（仅管理员，留痕）。

### 5) 状态流转收口到状态机
编辑表单里的"会议状态"应只读或只显示当前状态；状态变更统一走 `/status` 接口（已有相邻推进校验）。避免"筹备中→已归档"一把梭。

### 6) 处室与账号模块要么做实、要么先隐藏
这两块现在是演示级，最容易在演示时被点穿。建议：先按"仅展示、不可操作"处理（按钮隐藏或置灰 + 提示"下一阶段开放"），等排期再做真实 CRUD。

---

## 六、PAD 端显示与交互清单（逐项）

| 项 | 现状 | 评价 / 建议 |
|---|---|---|
| 首页（会议名/日期/机密标签） | 显示正常，日期用会议日期 | 日期口径需确认（见 P1-12） |
| 进入系统 → 处室 → 任免文件 | 正常；任免文件按名单现渲染，姓名可点 | 可用；文号/人数已接真实数据 |
| 点姓名 → 任免审批表 | 正常，返回可回原位 | 好用，保留 |
| 任免审批表内容 | 由库内数据现画（含照片、简历、家庭） | 可用；**注意：不是上传的 Word 原件**，与"原件"可能有细微差异（字体/盖章位） |
| 批注信息 | 显示在审批表下方，含关联栏目 | 好用 |
| 字号（标准/大/特大） | 可切换；后台"允许调字号"关闭时按钮隐藏 | 正常 |
| 搜姓名 | 打开搜索弹层 | 建议实测确认是否跨处室（当前看是当前会议全名单） |
| 上一个 / 下一个 | 按上会顺序翻 | 正常；但后台排序不保存（P1-9），顺序实际不可调 |
| 议题顺序页 | 名单列表 | 正常 |
| 考察/汇报/说明页 | **假模板文字** | 必须改（P0-1） |
| 附件页 | **硬编码 4 条** | 必须改（P0-3） |
| 退出 | APK 版有页面内确认；wwwroot 版仍是原生 confirm | 统一成页面内弹层（P1-13） |
| 水印 | 后台可配文本 + 设备号 | 正常；日期口径同上 |
| 数据包缺失/过期/设备不匹配 | 有阻断页（NO_PACKAGE / EXPIRED / 设备不匹配） | 建议再补"包与会议不符"的显式提示（防止推错包） |

---

## 七、需要你先定的 4 个决策点

1. **PAD 材料展示走哪个方案**：A（包内嵌 PDF/图片，所见即所传）还是 B（只显示清单）？→ 决定 P0-1/P0-2 的改法。
2. **回收站做不做**：做（新增模块，工作量中等）／不做（把所有"可恢复"文案改成"不可恢复"+强确认）？
3. **处室维护、用户与登录管理**：本轮做实，还是先隐藏按钮避免演示翻车？
4. **PAD 首页/水印日期**：显示"会议日期"还是"当天日期"？（当前是会议日期）

---

## 八、建议的修改批次（供你勾选）

- **批次 1（先修错，风险低）**：P0-4 列表人数/完整度、P0-5 假删除、P1-1 届次号必填、P1-2 查重、P1-8 缺文件不显示下载、P1-11 导出清单做实、P1-3/4 状态收口与撤回归档（或改文案）、P1-10 附件页签补齐。
- **批次 2（数据质量）**：P1-6 干部去重与合并、P1-9 排序持久化、P1-7 上传采集文号/页数、P2-1/P2-2 孤儿文件与级联。
- **批次 3（PAD 材料展示）**：按你选的 A/B 方案实施 P0-1/P0-2/P0-3，并统一两份 pad.html。
- **批次 4（可选）**：处室维护、用户管理做实；回收站。

---

*本清单仅列出已核实的问题；未做性能压测与并发测试。所有"实测"项均已在系统内复现，测试产生的临时数据已清理（会议 Id=15、16 等）。*
