Files
zyt/artifacts/im-account-filter/appointment-filter.md
T
2026-09-09 15:47:48 +08:00

2.0 KiB

挂号列表按类型筛选

变更

  • 仅在截图对应的 admin/src/views/consumer/prescription/guahao.vue 筛选区新增“挂号类型”下拉:全部、视频问诊、图文问诊。
  • 类型通过现有查询和分页请求提交;点击“查询”回到第一页,“重置”同时清除类型及原有筛选条件。
  • server/app/adminapi/lists/doctor/AppointmentLists.php 新增共享 applyAppointmentTypeFilter,列表、总数、状态 Tab 角标均应用相同类型过滤。计数不依赖先执行列表。
  • 全部、未传参数及 null 表示不按类型限制,保留历史电话等记录。视频筛选包括明确视频类型及按 AppointmentTypeEnum::normalizeStored 规则默认成视频的历史 null、空串、纯空白值。图文筛选仅匹配明确图文记录。
  • 非法筛选值(未知值、电话、错误大小写、带空格值、数字、布尔值、数组等)返回空结果及零计数,不默认成视频。存储的未知类型也不会由于 MySQL 默认大小写不敏感比较被当成视频。

验证

D:/web/zyt/admin 运行:

node --test tests/appointment-type-filter.test.cjs
8 tests passed; 0 failures
  • server/tests/AppointmentTypeFilterSqlFixture.php 使用实际 AppointmentLists 和 ThinkPHP MySQL SQL builder 生成列表、count、状态分组 SQL。数据库连接方法被替换为抛错,测试不能连接业务库。
  • 测试在 Node 内存 SQLite 中执行生成的查询,仅将 MySQL BINARY 比较转换为 SQLite 等价的显式二进制排序。覆盖历史空值、未知/电话类型、软删除诊单、非法输入、类型与状态/医生/患者条件组合、分页及计数一致性。
  • 实际 Vue setup 与实际 usePaging 验证选择类型后查询的请求参数、回到第一页以及重置行为;SFC 脚本与模板编译通过。
  • PHP 语法检查及 git diff --check 通过。

未访问真实数据库或外部服务,未提交代码。前序挂号类型及 IM 聊天修改均保留;未修改其他界面或 app/.trellis/ 不存在。