3.8 KiB
处方 AI 一致度可见范围:后台实现
日期:2026-10-17。范围仅后台新文件与本报告、验证截图;没有修改 server/ 或桌面 app/,没有提交、发布或连接生产接口。已读根 AGENTS.md,当前工作区无 .trellis/。
交付文件
admin/src/views/setting/prescription_ai_visibility/index.vue:独立配置页面,沿用现有 Element Plus 设置表单与底部保存栏。admin/src/api/setting/prescription_ai_visibility.ts:专用 capabilities、配置读取/保存、角色与用户选项接口及类型;对配置响应进行运行时校验。admin/tests/prescription-ai-visibility.test.cjs:8 项 Node 测试,编译真实 Vue SFC、运行真实 setup 状态,并模拟 API;不调用真实后端。artifacts/prescription-ai-visibility-admin-local.png:本地模拟浏览器截图。
行为
角色多选可搜索名称;用户多选标签包含姓名与账号,因此均可搜索。选项完全来自 tcm.prescriptionAi/visibilityOptions,不额外请求角色列表或管理员列表接口。当前已配置但不在活跃选项中的 ID 以明确占位标签保留;只有用户显式移除后保存才取消该项。
页面明确说明:角色或指定用户任一命中即可;两份名单均为空时所有账号(包括 root)均隐藏一致度、逐味对照与一致度统计;root 可管理策略,但管理权限不自动赋予查看权。AI 报告继续按原有权限开放,已有报告不受影响,原有患者/处方数据范围继续适用。
先读取 capabilities.can_manage_visibility,只有严格为 true 才读取配置与选项。两者全部成功后才填入并启用表单;首次失败不展示空表单,重新加载失败保留既有选择并禁用保存。保存期间禁用输入、重载及重复提交;失败保留当前选择并给出重试/重新读取提示;成功应用后端返回的规范化名单。配置响应缺字段、含非数字/非正整数 ID 等异常会拒绝,不会降级成可保存的空策略。
后端菜单需指向 setting/prescription_ai_visibility/index,管理权限为 tcm.prescriptionAi/manageVisibility;菜单迁移及服务端自鉴权由后端任务实现。
验证
node --test tests/prescription-ai-visibility.test.cjs:8/8 通过。覆盖固定接口契约、配置坏响应、pending/失败禁止保存、选项失败不部分覆盖策略、缺失 ID 保留、姓名账号标签、空名单与规范化回显、防重复提交、保存失败保留、管理与查看能力分离、真实模板编译。- 对新增 API、Vue 页面、测试执行 Prettier
--check:通过。 - 针对新增 API 与页面的临时
vue-tsc项目(严格模板,使用真实 Element Plus/Vue 类型,隔离 request/feedback 的外部依赖):通过,无类型错误。 - 全后台
vue-tsc --noEmit --pretty false --incremental false --composite false:退出 2,报告 61 项新文件范围外的错误;没有错误涉及prescription_ai_visibility。完整日志位于%TEMP%/zyt-prescription-ai-visibility-vue-tsc.log。本任务没有扩大修改范围修复这些错误。 - 独立
127.0.0.1:5568Vite 浏览器模拟,使用真实新页面、Element Plus、后台样式与 FooterBtns;所有 API 均映射到本地假数据模块,没有加载主应用或真实网络请求。确认成功读取、缺失 ID 标签、账号li.assistant搜索、保存 pending 禁用、保存成功提示、加载失败禁用保存、保存失败保留修改、空名单警示及无管理权限状态。
未运行 npm run build,避免其自带 release 脚本;实际 Vite 浏览器编译已成功。临时验证 harness 位于忽略的 admin/node_modules/.cache/prescription-ai-visibility/,不属于业务交付。
