Files
guoju0808/测试用例.md
郭庆泰 5a0a892574 feat: 邀请函邮件发送 + 首次设密/密码为空 + 姓名单一可信源
邀请发送 (菜单暂隐藏, 待确认参数见 发送邀请-待确认参数.md):
- 后端: BizInvite / BizInviteRecipient + Controller/Service/Mapper/XML
- 邮件: InviteMailSender (spring-boot-starter-mail SMTP) + application*.yml 邮件配置
- 上传进度: UploadProgressRegistry + UploadProgressController
- 前端: InviteList / InviteNew / InviteDetail / InviteView + api/business/invite.js
- 原型: proto/html/components/invite-detail / new-invitation / send-invitation

登录/账号:
- 首次设密: /getInfo 返回 isPasswordEmpty, SysProfileController 密码为空时跳过旧密码校验, ForcePasswordDialog 强制弹窗
- 姓名单一可信源 resolveDisplayName: doctor→biz_expert.name, sponsor/executor→biz_person.name, 其余回退 nick_name
- OA compliance 门禁改为按手机号查 ecology 视图 (不再限定 manager/leader)

其它:
- OSS zip 在线查看 (列清单+取单文件, 公开只读) + SecurityConfig permitAll
- doctor 项目详情 ProjectDetail.vue
- 数据库/测试/设计文档 (md) 入库
2026-09-10 20:40:49 +08:00

836 lines
46 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试用例(内部)V3.0
> 版本:V3.0(逐条对齐 `ry-vue3` 真实 `.vue` 源码:入口=真实菜单/路由,操作=真实按钮/表单字段,预期=真实校验文案/Toast)
> 配套文档:《测试设计方案 V2.0》《详细设计方案 V2.0》
> 测试方式:**黑盒操作 ry-vue3 前端界面**(浏览器点菜单、填表单、看右上角红/绿提示、看列表变化),不调接口、不写 SQL。
---
## 0. 执行前必读
### 0.1 测试方式
- 全程在**浏览器**操作 `ry-vue3` 前端。所有「入口」均为真实侧栏菜单或门户链接;所有「操作」均为页面上真实存在的按钮/输入框。
- 后端校验失败时,右上角弹出红色 `ElMessage`(或 `ElNotification`),文案即「预期」中括号内字符串(**逐字核对**)。
- 前端表单校验在**点保存/提交时**触发,红框 + 字段下方红字提示;本用例中的校验文案均来自各 `.vue``rules`
- 成功操作通常弹绿色提示 + 列表自动刷新;多步流程用「步骤 → 预期」表达。
- 「落库结果」统一转为**界面可观察现象**(如:该账号再次登录被拦、列表多一行、状态标签变化、角标 +1),测试人员无需连数据库。
### 0.2 测试账号(界面登录:手机验证码登录,测试验证码 123456)
登录页两种模式:`账号密码登录` / `手机验证码登录`,本系统业务账号统一走 **手机验证码登录**
| 编号 | 角色 | 登录手机号 | 验证码 | 登录后进入 |
|---|---|---|---|---|
| U01 | 后台管理员 | 13800000000 | 123456 | `/admin/workbench` 工作台 |
| U02 | 合规经理 | 13800000002 | 123456 | `/manager/workbench` 工作台 |
| U03 | 医生(已通过) | 13800000001 | 123456 | `/doctor/home` 首页 |
| U04 | 医生(待审核) | 13800000003 | 123456 | 无法登录(被拦) |
| U05 | 执行方主账号 | 13800000010 | 123456 | `/executor/overview` 首页 |
| U06 | 执行方子账号 | 13800000011 | 123456 | `/executor/overview` 首页 |
| U07 | 支持方主账号 | 13800000020 | 123456 | `/sponsor/home` 首页 |
| U08 | 支持方子账号 | 13800000021 | 123456 | `/sponsor/home` 首页 |
| U09 | 项目负责人 | 13800000030 | 123456 | `/leader/home` 首页 |
### 0.3 业务数据(测试前已备好)
| 数据 | 关键状态 |
|---|---|
| 机构 SO1 | 支持方机构(正常) |
| 执行单位 EU1 | 执行单位 |
| 项目 P1 | 编号 P202609001,创建人 U02,共 10 场,起止 2026-09-01 ~ 09-30,已发布 |
| 项目 P3 | 编号 P202609003,已结题(见 §0.5 风险) |
| 会议 M1 | 属 P1 第 1 期,未执行 |
| 会议 M2 | 属 P1 第 2 期,已执行,劳务/会务已通过,已传凭证 |
| 会议 M3 | 属 P1 第 3 期,已冻结 |
| 专家 E1 | 王医生,13800000001 |
### 0.4 通用界面约定
- **提示位置**:右上角浮层。红色=失败、绿色=成功、黄色=警告。
- **列表页**:顶部「查询/重置」+ 工具栏按钮(按钮可见性随角色变化);无权限按钮**隐藏**。
- **详情页**:项目详情、会议详情为多卡片/多标签页(劳务材料 / 会务材料 / 劳务凭证 / 会务凭证)。
- **表单校验**:前端 `rules` 校验先于后端,字段下方红字;后端业务校验失败弹右上角红条。
- **消息中心**:右上角铃铛角标显示未读数;新消息推送弹绿色通知「您有新的通知」。
- **权限 vs 状态两类断言**:无权角色能测的是「**入口不存在**(菜单/按钮隐藏)」,不是「点击后报错」——按钮看不到就点不了。因此后端角色校验文案(如「只有管理员可删除会议」)**不作为界面预期**;只有「入口对当前角色可见、但因业务状态失败」的文案(如「会议尚未结算, 不能完结」)才作为预期。凡角色越权,用例只断言「无入口 / 有权角色可操作」。
### 0.5 已知缺陷风险(执行时先记录,不修)
- **已结题项目「不能分配」可能失效**:代码里结题判定一处按 `'Y'`、一处按 `'1'` 不一致。
- 表现:把 P3 置为结题后,经理在「项目分配」里仍可能给 P3 分配成功。
- 涉及用例 TC-PROJECT-005,执行时记录「实际是否拦截」,作为缺陷候选上报。
- **意向审核列被隐藏**`支持意向`/`执行意向` 列表的「审核状态」「操作(通过/拒绝/删除)」列当前 `v-if="false"` 不渲染,仅能查看 + 导出(见 TC-INTENT-004)。
---
## 1. 登录与注册(AUTH
### TC-AUTH-001 已注册手机号发码成功
- **优先级**P0
- **入口**:门户登录页(`#/login`)→ 切到「手机验证码登录」
- **操作**:输入手机号 13800000001 → 点「获取验证码」
- **预期**:按钮进入倒计时显示「60s 后重试」,绿色提示「验证码已发送」
### TC-AUTH-002 手机号格式错误不发码
- **优先级**P1
- **操作**:输入 `123` → 点「获取验证码」
- **预期**:黄色提示「请输入正确的手机号」,不发码
### TC-AUTH-003 未注册手机号不发码
- **优先级**P1
- **操作**:输入 19900000000 → 点「获取验证码」
- **预期**:红色提示「该手机号未注册, 请先注册账号」
### TC-AUTH-004 短信验证码登录成功(医生)
- **优先级**P0
- **前置**U03
- **操作**:输入 13800000001 + 验证码 123456 → 点「登录」
- **预期**:绿色提示「欢迎,王医生」,跳转 `/doctor/home`;右上角用户名为医生姓名
### TC-AUTH-005 验证码错误 / 过期
- **优先级**P1
- **操作**:发码后输入错误验证码 `000000` → 登录
- **预期**:红色提示以「验证码错误或已过期: 」开头,停留登录页
### TC-AUTH-006 待审核医生登录拦截
- **优先级**P0
- **前置**U04
- **操作**:用 13800000003 + 123456 登录
- **预期**:红色提示「您的信息正在审核中」,不进入后台
### TC-AUTH-007 停用账号登录拦截
- **优先级**P1
- **前置**:管理员先把某账号停用
- **操作**:该账号登录
- **预期**:红色提示「账号已被停用」
### TC-AUTH-008 删除账号登录拦截
- **优先级**P1
- **前置**:管理员删除某账号
- **操作**:该账号登录
- **预期**:红色提示「账号已被删除」
### TC-AUTH-009 子账号主账号异常登录拦截
- **优先级**P1
- **前置**:U06(子账号)的主账号 U05 被删除或停用
- **操作**U06 登录
- **预期**:主账号被删 → 「所属主账号不存在, 请联系管理员」;主账号停用 → 「您所属的机构已禁用」
### TC-AUTH-010 医生自助注册(待审核)
- **优先级**P0
- **入口**:登录页「新用户注册」→ 注册类别弹窗选「项目参与专家」→ 进入「专家注册」页(`#/register-expert`
- **操作**:填姓名/工作单位/科室/职称/手机号/验证码/密码/确认密码,上传执业证书与职称证明,勾选「我已阅读并同意《用户协议》和《隐私政策》」→ 点「同意协议并注册」
- **预期**:绿色提示「注册成功」,页面切换为成功页(`注册成功` / `请等待管理员审核,审核通过后即可登录`);用该手机号登录被拦「您的信息正在审核中」
### TC-AUTH-011 医生注册必填校验
- **优先级**P1
- **操作**:在「专家注册」页逐项清空/填错后提交
- **预期**:逐项红字提示——姓名空「请输入姓名」、单位空「请输入工作单位」、科室「请选择科室」、职称「请选择职称」、手机号「请输入手机号码」/「手机号格式错误」、验证码空「请输入短信验证码」、密码「请输入登录密码」/「密码长度 6-20 位」、确认密码「请再次输入登录密码」/「两次密码不一致」、执业证书「请上传执业证书/证明」、职称证明「请上传职称证明」;发码时手机号错「请先输入正确的手机号」;手机号已注册「该手机号已注册,请直接登录」
### TC-AUTH-012 执行方注册
- **优先级**P0
- **入口**:登录页「新用户注册」→ 选「项目执行单位(供应商)」
- **操作**:观察跳转行为
- **预期**:跳转到外部供应商注册系统(`https://zbsupplier.guojustar.com/`),不在本系统内注册。
- 备注:独立路由 `#/register-executor` 仍存在,若直接访问,字段为 用户名/企业名称/企业性质(私营/国营/中外合资/外资/其他)/手机号/验证码/密码/确认密码,提交成功绿色「注册成功」
### TC-AUTH-013 执行方注册校验
- **优先级**P1
- **操作**:直接访问 `#/register-executor` 逐项触发
- **预期**:用户名「请输入登录用户名」/「用户名长度 4-20 位」/「只能包含字母/数字/下划线」、企业名称「请输入企业名称」、企业性质「请选择企业性质」、手机号「手机号格式错误」、密码「密码长度 6-20 位」、确认密码「两次密码输入不一致」;用户名占用「登录账号已存在」、手机号已注册「该手机号已注册,请直接登录」
### TC-AUTH-014 支持方注册(选企业)
- **优先级**P0
- **入口**:登录页「新用户注册」→ 选「项目支持单位」→ 进入「支持方注册」页(`#/register-sponsor`
- **操作**:企业名称下拉远程搜索选择 SO1 → 填联系人姓名/手机号/验证码/密码/确认密码 → 勾选协议 →「同意协议并注册」
- **预期**:绿色提示「注册成功」;该账号登录进入 `/sponsor/home`(子账号视角)
### TC-AUTH-015 支持方注册校验
- **优先级**P1
- **操作**:注册页逐项触发
- **预期**:用户名「请输入登录用户名」/「用户名长度 4-20 位」/「只能包含字母/数字/下划线」、企业未选「请选择企业」、联系人空「请输入联系人姓名」、手机号「手机号格式错误」、密码「密码长度 6-20 位」、确认密码「两次密码输入不一致」
### TC-AUTH-016 支持方注册下拉选项
- **优先级**P2
- **操作**:注册页企业名称下拉,输入关键字远程搜索
- **预期**:按关键字返回可注册的支持方企业,选中后回填
---
## 2. 专家管理(EXPERT
### TC-EXPERT-001 管理员建档专家(默认通过)
- **优先级**P0
- **入口**:U01 登录 →「专家管理」→「新建专家」(`#/admin/experts/new`
- **操作**:填姓名/手机号/工作单位/科室/职称 → 点「保存」
- **预期**:弹「创建成功」账号信息框(`专家账号已创建 账号:… 初始密码:…`)+ 绿色「新建成功」;列表新增;该专家手机号可直接登录(默认已通过)
### TC-EXPERT-002 专家启用/停用
- **优先级**P1
- **前置**E1 存在
- **操作**:U01「专家管理」→ E1 行「禁用」
- **预期**:绿色「已禁用」;该专家手机号登录被拦「账号已被停用」;再点「恢复」→ 绿色「已恢复」,可登录
### TC-EXPERT-003 专家编辑(不丢 expert_id
- **优先级**P0
- **前置**E1 存在
- **操作**:E1 行「修改」→ 改科室 → 保存
- **预期**:绿色「修改成功」,详情/列表科室更新;该专家仍能正常登录、再次编辑不报错
### TC-EXPERT-004 专家审核(manager
- **优先级**P1
- **入口**:U02 登录 →「专家审核」→ 某待审核专家行「审核」
- **操作**:审核弹窗选「通过」/「拒绝」→ 点「确认」
- **预期**:绿色「审核通过」/「已拒绝」;「通过」后该专家可登录;已拒绝的可点行内「已拒绝」查看拒绝意见(`拒绝时间:… 审批人:… 拒绝意见:…`
### TC-EXPERT-005 专家导入
- **优先级**P2
- **操作**:专家列表「批量导入」→「下载模板」(`专家批量导入模板.xlsx`)→ 填数据上传
- **预期**:导入结果提示成功/失败条数与原因;无文件/异常时「导入失败, 返回数据异常」或「上传失败, 请重试」
---
## 3. 机构与人员(ORG / PERSON
### TC-ORG-001 支持单位管理列表
- **优先级**P1
- **入口**:U01 登录 →「支持单位管理」
- **操作**:查看列表,按「单位名称」「税号/统一社会信用代码」「合作状态(正常/禁用)」筛选
- **预期**:显示支持方机构列表(单位名称/单位地址/税号/合作状态/创建日期/联系人/联系电话),搜索正常
### TC-ORG-002 机构停用同步主账号
- **优先级**P0
- **前置**SO1 主账号 U07 可登录
- **操作**:U01「支持单位管理」→ SO1 行「禁用」→ 确认弹窗「确定要禁用「SO1」吗? 禁用后该企业主账号无法登录, 企业下子账号也将被拦截」→ 确定 → 用 U07 登录
- **预期**:绿色「已禁用」;U07 登录被拦「您所属的机构已禁用」;点「恢复」→ 绿色「已恢复」,U07 可登录
### TC-ORG-003 机构导入
- **优先级**P2
- **操作**:支持单位列表「批量导入」→「下载模板」→ 上传
- **预期**:导入结果提示成功/失败条数与原因
### TC-PERSON-001 新建人员(支持方)
- **优先级**P0
- **入口**:U01「支持单位下人员」→「新建人员」
- **操作**:填用户名/姓名/手机号/所属公司/部门/职务 → 保存
- **预期**:绿色「新建成功,默认密码 123456」;该手机号可用默认密码 123456 登录
### TC-PERSON-002 人员列表显示登录账号
- **优先级**P1
- **入口**:U07 登录 →「人员管理」
- **操作**:查看列表
- **预期**:每行显示「账号」列(登录账号),未绑账号的为空
### TC-PERSON-003 更换机构管理员
- **优先级**P1
- **入口**:U01 → 支持单位下人员
- **操作**:对某子账号行「管理员」开关设为开启 → 确认弹窗「确定将「X」设为该机构管理员吗?」
- **预期**:绿色「已更换管理员」;该人员晋升为机构主账号,原主账号降级;已为主账号时点开关提示「已是该机构管理员」
### TC-PERSON-004 重置人员密码
- **优先级**P1
- **操作**:人员行「更多」→「重置密码」→ 确认弹窗「确定重置「X」的登录密码为默认 123456 吗?」
- **预期**:绿色「已重置为 123456」;该人员可用 123456 登录
### TC-PERSON-005 人员导入(含邮箱校验)
- **优先级**P2
- **入口**:执行单位下人员 / 执行方人员管理 →「批量导入」
- **操作**:下载模板,某行留空邮箱后上传
- **预期**:该行标记失败「邮箱不能为空」(或结果弹窗显示失败原因),其余行正常导入
---
## 4. 项目(PROJECT
### TC-PROJECT-001 manager 项目列表隔离
- **优先级**P0
- **入口**:U02 登录 →「项目管理」
- **操作**:查看列表
- **预期**:只显示 U02 自己创建的项目,不出现他人项目
### TC-PROJECT-002 sponsor 主/子账号隔离
- **优先级**P0
- **入口**:U07 登录 →「项目管理」(`/sponsor/projects`);U08 登录 →「我的项目」(`/sponsor/my-projects`
- **操作**:各自查看
- **预期**:U07(主账号)看到本机构全部项目;U08(子账号)只看到分配给自己监察的项目
### TC-PROJECT-003 executor 主/子账号隔离
- **优先级**P0
- **入口**:U05、U06 分别登录 →「项目列表」
- **操作**:各自查看
- **预期**:U05 看到本执行单位全部项目;U06 只看到分配到执行人自己的项目(子账号隐藏「项目分配」按钮与「分配」链接)
### TC-PROJECT-004 项目删除仅 admin
- **优先级**P0
- **操作**
1. U02「项目管理」某项目行「更多」→ 无「删除项目」入口
2. U01 同一项目「更多」→「删除项目」→ 确认弹窗「确认删除项目"X"?」→ 确定
- **预期**:经理不可删(无入口);管理员删除绿色「已删除」,列表消失(软删)
### TC-PROJECT-005 已结题项目不能分配
- **优先级**P0
- **前置**P3 已结题
- **操作**:U02「项目管理」→ P3 行「分配」
- **预期**:红色提示「已结题项目不能分配」
- **⚠️ 风险**:见 §0.5,可能不拦截、分配成功。记录实际结果。
### TC-PROJECT-006 项目分配必填/越界校验
- **优先级**P1
- **操作**:U02「项目分配」弹窗:不加执行方直接保存;填负场次/负金额;场次超总场次
- **预期**:分别提示「请至少选择 1 个执行方并填写场次」「场次不能为负数, 请调整」「金额不能为负数, 请调整」「已分配 X 场, 超过项目总场次 N, 请调整」「已分配 ¥X, 超过项目总金额 ¥N, 请调整」
### TC-PROJECT-007 批量分配结果统计
- **优先级**P1
- **操作**:批量分配弹窗填 2 条有效 + 1 条超限 → 保存
- **预期**:弹「分配结果」框显示「批量分配: 成功 N/总数」及失败明细;全部成功则绿色「批量分配成功 (N/M)」
### TC-PROJECT-008 评分入口角色限制
- **优先级**P0
- **操作**
1. U03(医生)查看项目列表 / 详情
2. U02(经理)查看项目列表 / 详情
- **预期**:U03 无「评分 / 批量评分」入口;U02 有评分入口(见 TC-PROJECT-009
### TC-PROJECT-009 评分聚合与校验
- **优先级**P1
- **操作**:U02「批量评分」→ 4 维度(履约质量/时效响应/配合度/合规安全)填 1~5 → 确定
- **预期**:维度越界提示「履约质量必须是 1~5 的数字」等;成功绿色「已批量评分 N/M 个项目」或「评分完成,平均分:X」;详情「执行单位评分详情」显示平均分
### TC-PROJECT-010 删除公告权限
- **优先级**P1
- **操作**
1. U02 某项目「更多」→「删除公告」→ 确认弹窗「您确定要删除公告吗?删除后无法恢复」→ 确定
2. U03 查看同一项目
- **预期**:U02 绿色「已删除项目 X 的公告」;U03 无「删除公告」入口
### TC-PROJECT-011 报名专家导出权限
- **优先级**P2
- **操作**
1. U01/U02 点「已报名专家导出」
2. U03/U05/U07 查看项目列表
- **预期**:U01/U02 绿色「导出成功」并下载 xlsxU03/U05/U07 无该按钮
---
## 5. 会议(MEETING
> 建会入口:项目列表某行「建会」→ 带 `?projectId=` 进入新建会议页;项目信息为**只读快照**,无「选项目」下拉。
### TC-MEETING-001 新建会议页项目只读快照
- **优先级**P0
- **入口**:U02「项目管理」→ P1 行「建会」
- **操作**:观察页面
- **预期**:显示项目编号/项目名称/支持单位/总场次/项目创建人/项目创建时间等只读信息;无「选项目」下拉;会议名称/期数/起止时间/地点/备注可编辑
### TC-MEETING-002 期数校验
- **优先级**P0
- **前置**P1 总场次 10 场
- **操作**:新建会议清空期数→保存;期数填 0→保存;期数填 11→保存
- **预期**:分别提示「请填写期数」「期数必须为正整数」「期数不能高于总场次/总期数 (共 10 场)」
### TC-MEETING-003 建会时间越界
- **优先级**P1
- **操作**:新建会议,开始时间早于项目开始 / 结束时间晚于项目结束 / 开始晚于结束 → 保存
- **预期**:分别提示「会议开始时间不能早于项目开始时间」「会议结束时间不能晚于项目结束时间」「会议开始时间不能晚于会议结束时间」;不选时间「请选择会议开始时间」「请选择会议结束时间」;地点空「请填写会议地点」
### TC-MEETING-004 新建/修改/复制会议成功
- **优先级**P0
- **操作**:填合法期数/时间/地点 → 保存;编辑后保存;复制后保存
- **预期**:分别绿色「会议创建成功」(跳会议列表)/「修改成功」/「复制成功」
### TC-MEETING-005 删除会议权限
- **优先级**P0
- **操作**
1. U02 会议列表某行「更多」→「删除」→ 确认弹窗「确认删除会议「M1」?」→ 确定
2. U05(执行方)登录查看会议列表 → 某行「更多」
- **预期**:U02 绿色「已删除」;U05 的「更多」里**没有「删除」项**(入口隐藏)
### TC-MEETING-006 提交材料——非执行方无入口
- **优先级**P0
- **操作**
1. U02 打开 M1 详情
2. U05 打开同一 M1 详情
- **预期**:U02 页面**无「提交劳务 / 提交会务 / 提交全部」按钮**(对非执行方隐藏);U05 页面**有提交按钮**(后续校验见 TC-MEETING-007/008/009
### TC-MEETING-007 提交材料——未执行拦截
- **优先级**P0
- **前置**M1 未执行
- **操作**:U05 打开 M1 详情 →「提交材料」
- **预期**:红色提示「会议尚未执行, 不能提交材料」
### TC-MEETING-008 提交材料——已冻结拦截
- **优先级**P0
- **前置**M3 已冻结
- **操作**:U05 打开 M3 详情 →「提交材料」
- **预期**:红色提示「会议已冻结, 不能提交材料」
### TC-MEETING-009 提交材料类型/内容校验
- **优先级**P1
- **前置**M1 已执行
- **操作**:U05 提交材料,逐项触发
- **预期**:无材料轨「无可提交的材料轨」/「请选择要提交的材料类型」;无参会人提交劳务「请先添加参会人员 (劳务材料)」;无会务材料「会务材料至少上传一条」
### TC-MEETING-010 提交材料成功
- **优先级**P0
- **前置**:M1 已执行、有参会人、已传会务材料
- **操作**:U05 勾选劳务+会务 →「提交全部」
- **预期**:绿色「材料已提交, 待合规审核」,详情页两轨状态变为「待审核」;有未保存上传时先弹「检测到尚未保存的上传内容,是否先保存再提交?」
### TC-MEETING-011 合规审核——意见必填与入口
- **优先级**P0
- **操作**
1. U03 打开 M1 详情
2. U02 打开 M1 详情 → 审核时选「拒绝」但不填意见
- **预期**:U03 页面无「通过 / 拒绝」审核入口(只读);U02 有审核入口,选「拒绝」不填意见 → 红色「拒绝时意见不能为空」
### TC-MEETING-012 合规审核越序拦截
- **优先级**P1
- **前置**M1 劳务轨未提交
- **操作**:U02 对 M1 劳务轨点「通过」
- **预期**:红色提示「当前阶段不允许合规审核」
### TC-MEETING-013 合规审核通过
- **优先级**P0
- **前置**M1 劳务轨已提交
- **操作**:U02 勾选劳务轨 → 填意见 →「通过」
- **预期**:绿色「审核完成」,劳务轨转为待支持方审(详情时间轴更新)
### TC-MEETING-014 批量合规审核
- **优先级**P1
- **前置**:M1、M2 均在合规审中
- **操作**:U02 会议列表勾选 M1、M2 →「批量审核」→ 选「通过」→ 填意见 → 确定
- **预期**:绿色「批量审核完成, 成功 2 个」;选「退回」不填意见提示「退回时意见不能为空」
### TC-MEETING-015 支持方监察——非监察员只读
- **优先级**P0
- **操作**
1. U07(非本项目监察员)打开 M1 详情
2. U08(本项目监察员)打开 M1 详情
- **预期**:U07 无「通过 / 拒绝」监察入口,操作区只读;U08 有监察入口(可操作,见 TC-MEETING-016
### TC-MEETING-016 支持方审核通过
- **优先级**P0
- **前置**:M1 劳务轨已合规通过,U08 为监察员
- **操作**:U08 打开 M1 详情 → 勾选劳务轨 →「通过」→ 填监管意见
- **预期**:绿色「审核完成」,劳务轨状态变为「已通过」,时间轴展示监管意见
---
## 6. 参会人(ATTENDEE
### TC-ATTENDEE-001 邀请函打开即报名
- **优先级**P0
- **前置**:医生 U03 收到 M1 参会邀请(站内信带邀请链接)
- **操作**:点邀请链接打开「会议邀请函」页(`/doctor/invitation/:attendeeId`
- **预期**:正常展示邀请函(称谓「尊敬的 王医生:」+ 正文 + 落款「北京整合医学学会」);该医生在「我报名的项目」里出现该项目
### TC-ATTENDEE-002 邀请函越权/无效拦截
- **优先级**P1
- **操作**:用非本人参会链接、或无效参会链接,在浏览器打开邀请函页
- **预期**:红色提示加载失败,无法查看邀请函内容
### TC-ATTENDEE-003 新增参会人(含手机号回填)
- **优先级**P0
- **入口**:U02 打开 M1 详情 → 劳务材料 tab →「+ 新增参会人」
- **操作**:填手机号后点放大镜 → 回填专家信息(「已回填专家信息」);补全必填字段 → 保存
- **预期**:绿色「已添加」,列表新增该参会人;手机号空「请先输入手机号」、格式错「手机号格式不正确」、查无「未找到该手机号对应的专家」
### TC-ATTENDEE-004 新增参会人必填校验
- **优先级**P1
- **操作**:新增参会人弹窗逐项清空提交
- **预期**:手机号「请填写联系方式」、姓名「请填写姓名」、医院「请填写医院」、身份证「请填写身份证号」/「身份证号应为18位(末位可为X)」、身份证附件「请上传身份证附件」、科室「请选择科室」、职称「请选择职称」、银行「请填写银行」、银行卡号「请填写银行卡号码」、开户行「请填写开户行」、账户名称「请填写账户名称」、开户行地址「请填写开户行地址」、银行详细地址「请填写银行详细地址」、角色「请选择角色」、应发金额「请填写应发金额」、个税「请填写个税税金」、增值税「请填写增值税附加」、实发金额「请填写实发金额」
### TC-ATTENDEE-005 参会人 diff 预检
- **优先级**P1
- **前置**:某参会人信息与专家档案不一致
- **操作**:编辑该参会人 → 保存
- **预期**:弹「检测到与专家档案不一致」二次确认框(确认提交/返回修改),确认后才落库;保存成功绿色「已保存」
### TC-ATTENDEE-006 劳务已提交后不可改参会人
- **优先级**P0
- **前置**M1 劳务轨已提交
- **操作**:尝试编辑/删除参会人
- **预期**:红色提示「劳务已提交, 不能修改参会人」或操作按钮禁用
### TC-ATTENDEE-007 参会人导入 dry-run / force
- **优先级**P2
- **操作**:参会人 tab「批量导入」→ 选择文件(未选文件「请先选择要导入的文件」)→ 上传
- **预期**:先 dry-run,无冲突直接入库;有冲突弹「检测到与专家档案不一致」确认 → 确认后落库并显示成功/失败明细
### TC-ATTENDEE-008 sponsor 参会人脱敏
- **优先级**P0
- **入口**:U08 打开 M1 详情 → 参会人
- **操作**:查看列表
- **预期**:姓名/手机号/银行卡/身份证打码(如「李*明」「138****0005」「6222********0000」「110101********1234」);操作区只读;电子签到表可点「脱敏预览」(无数据时「暂无可预览的脱敏数据」)
---
## 7. 材料与凭证(MATERIAL
### TC-MATERIAL-001 凭证上传权限
- **优先级**P0
- **操作**
1. U03 打开会议详情
2. U02 打开会议详情 → 劳务凭证 / 会务凭证 → 上传凭证
- **预期**:U03 无凭证上传入口(只读);U02 上传成功绿色「保存成功」
### TC-MATERIAL-002 会务/劳务打包下载权限
- **优先级**P1
- **操作**
1. U03 查看会议详情/列表
2. U02 对无会务材料的会议点「会务下载」;对有材料的会议点「会务下载 / 劳务下载」
- **预期**:U03 无「会务下载 / 劳务下载」入口;U02 无材料时提示「该会议暂无可下载的会务材料/劳务材料」,有材料时下载 zip 成功
### TC-MATERIAL-003 会务材料目录模板 + 打包上传
- **优先级**P2
- **操作**:详情会务材料 tab「下载目录」→ 按目录放材料 → 压缩 → 上传
- **预期**:上传后进度轮询(「服务器处理中 x/y」),完成绿色「已回填 N 类会务材料」;目录结构不对「未在 zip 中找到会务材料目录, 请按下载模板的目录结构放置文件」
### TC-MATERIAL-004 扫码拍照回传
- **优先级**P1
- **前置**:用 ry-h5 手机端扫码拍签到表/全景照
- **操作**:手机拍照 → 自动回传
- **预期**:会议详情材料区出现对应照片记录;异常「非法的拍照类型」「缺少照片 URL」
---
## 8. 费用与结算(SETTLE
### TC-SETTLE-001 费用未汇总完成不能结算
- **优先级**P0
- **前置**:M2 两轨已通过、凭证已传,但费用汇总中
- **操作**:U01 打开 M2 详情 →「结算」
- **预期**:红色「会议费用尚未汇总完成,无法结算」
### TC-SETTLE-002 结算前置校验
- **优先级**P0
- **前置**M2(逐项制造缺失)
- **操作**:U01 打开 M2 详情,逐项触发「结算」
- **预期**:只通过一轨「劳务与会务材料都审核通过后才能结算」;已结算「会议已结算」;无凭证「请先上传劳务凭证与会务凭证」;只缺劳务「请先上传劳务凭证」;只缺会务「请先上传会务凭证」
### TC-SETTLE-003 结算成功
- **优先级**P0
- **前置**M2 满足全部前置
- **操作**:U01 对 M2「结算」→ 确认弹窗「确认结算? 结算前请确保已上传劳务/会务付款凭证。」→ 确定
- **预期**:绿色「已结算」,会议状态变为已结算
### TC-SETTLE-004 完结校验
- **优先级**P1
- **操作**:U01 对未结算会议点「完结」;对已完结会议再点「完结」;对合法会议点「完结」→ 确认「确认完结? 完结后会议流程终止」
- **预期**:红色「会议尚未结算, 不能完结」/「会议已完结」;合法完结绿色「已完结」
### TC-SETTLE-005 解冻校验
- **优先级**P1
- **操作**:U01 对未冻结会议点「解冻」;对已冻结的 M3 点「解冻」→ 确认「确认解冻会议「M3」? 解冻后提交截止时间将重新计算。」
- **预期**:红色「会议未冻结, 无需解冻」;M3 解冻绿色「已解冻」,状态解除冻结
### TC-SETTLE-006 审核轨迹
- **优先级**P2
- **操作**:M1 详情查看右侧「材料审核时间轴」
- **预期**:按 会议已执行 → 执行方提交材料 → 合规审核 → 监察意见 → 会议结算 → 会议完结 展示各阶段状态与意见
---
## 9. 电子签(SIGN
### TC-SIGN-001 医生签署劳务协议完整流程
- **优先级**P0
- **入口**:医生 U03 首页「待签署的协议」区(仅审核通过显示)→ 扫二维码或复制链接 → 手机端打开「填写劳务信息」页
- **操作**
1. 填 姓名/工作单位/科室/账户名称(持卡人姓名)/身份证号/银行卡号/银行名称/开户行(支行)/身份证附件/劳务形式 → 点「下一步」
2. 签署页点签名区「点击此处确认签名」→ 底部 Drawer 手写签名 →「确认」→「提交」
- **预期**
- 未上传身份证附件 → 黄色「请上传身份证正反面」
- 提交劳务信息 → 绿色「已保存, 即将进入签署页」跳签署页
- 未签名直接提交 → 黄色「请先签名」
- 提交成功 → 跳「签字成功」页(`签字成功 / 劳务协议已生成`),该条从待签署列表消失
- **备注**:未受邀时显示「您暂未被邀请,请联系执会人员」
---
## 10. 策划方案(PLAN
### TC-PLAN-001 投稿角色数据隔离
- **优先级**P0
- **入口**:U03 登录 →「我的项目策划方案」
- **操作**:查看列表
- **预期**:只显示自己投稿的方案
### TC-PLAN-002 新建投稿
- **优先级**P0
- **操作**:「新建投稿」→ 填策划方案名称/项目方向/项目形式/项目类别/设计文件/备注 → 保存或「保存并提交」
- **预期**:必填校验「请输入策划方案名称」「请选择项目方向」「请选择项目形式」「请选择项目类别」「请上传设计文件」;保存绿色「新建成功」,保存并提交绿色「已保存并提交审核」;sponsor 新建时无「保存并提交」按钮
### TC-PLAN-003 提交/批量提交投稿
- **优先级**P0
- **操作**:单条点「提交」;批量勾选后「批量提交」
- **预期**:单条确认「确定要提交投稿「X」吗?提交后将进入审核流程」→ 绿色「已提交,等待审核」;批量确认「确定要批量提交选中的 N 条投稿吗?」→ 绿色「已提交 N 条」;未勾选「请先勾选要提交的投稿」;待审核/通过态不可再提交(无提交按钮)
### TC-PLAN-004 管理端审核/结算
- **优先级**P1
- **入口**:U02 登录 →「策划方案管理」
- **操作**:待审核方案点「审核」→ 选「通过/退回」→ 确认;已通过方案点「结算」
- **预期**:审核通过需填项目编号(空则「请填写项目编号」);绿色「已通过」/「已退回」;结算确认「您确定要结算吗?」→ 绿色「已结算」;批量退回「批量退回 N/M 条」、批量结算「批量结算 N/M 条」
---
## 11. 消息中心(MSG
### TC-MSG-001 我的消息列表与未读
- **优先级**P1
- **操作**:任意角色点右上角铃铛 /「消息通知」菜单
- **预期**:显示消息列表(分类标签 + 标题 + 摘要 + 时间)+ 未读圆点;有未读时顶部显示「全部已读」
### TC-MSG-002 全部已读
- **优先级**P1
- **操作**:点「全部已读」
- **预期**:静默完成,未读圆点消失、铃铛角标清零(无 Toast);失败红色「全部已读失败, 请重试」
### TC-MSG-003 单条已读(点击即读)
- **优先级**P1
- **操作**:点击某条未读消息
- **预期**:打开详情弹窗(标题「消息详情」或消息标题),该条未读圆点消失、角标自动减一(静默无 Toast)
### TC-MSG-004 消息详情与链接
- **优先级**P1
- **操作**:打开一条含链接的消息详情
- **预期**:显示二维码 + 「打开链接」「复制链接」;复制成功绿色「链接已复制」;类型为会议邀请的消息直接跳「会议邀请函」页
### TC-MSG-005 管理员发送校验
- **优先级**P1
- **入口**:U01「消息通知」→「发送」
- **操作**:不填接收人 / 不填标题 → 发送
- **预期**:红色「接收人不能为空」/「标题不能为空」;合法发送成功
### TC-MSG-006 SSE 推送与角标
- **优先级**P1
- **操作**:U03 登录保持在线;管理员给 U03 发一条消息
- **预期**:U03 右上角弹绿色通知「您有新的通知」(`共 N 条未读` / `点击右上角铃铛查看详情`),铃铛角标 +1,消息列表静默刷新;U03 自己点「全部已读」→ 不弹通知、角标清零
### TC-MSG-007 消息归属
- **优先级**P1
- **操作**:U02 与 U03 分别登录 → 打开「消息通知」列表
- **预期**:U02 列表只出现发给 U02 的消息,看不到 U03 的消息;U03 同理(相互隔离)
---
## 12. 公示意向(INTENT
### TC-INTENT-001 公示页匿名意向
- **优先级**P1
- **入口**:门户「项目公示」→ 某公示详情
- **操作**:点「公益支持」→ 弹匿名意向框填 姓名/手机号/工作单位(部门/职务选填)→「提交意向」;点「项目执行申请」同理
- **预期**:分别绿色「已记录您的支持意向」「已记录您的执行意向」;两类意向分别记录、互不混入登录用户数据
### TC-INTENT-002 意向必填校验
- **优先级**P1
- **操作**:公示详情提交意向时逐项清空
- **预期**:姓名「请输入姓名」、手机号「请输入手机号」、工作单位「请输入工作单位名称」
### TC-INTENT-003 重复意向拦截
- **优先级**P1
- **操作**:同一手机号再次提交
- **预期**:红色「您已提交过该意向」
### TC-INTENT-004 意向管理列表
- **优先级**P2
- **入口**:U02 →「支持意向」/「执行意向」
- **操作**:查看、筛选、导出
- **预期**:列表列「项目编号 / 意向项目名称 / 姓名 / 工作单位 / 部门 / 职务 / 手机号 / 账号状态(存在/不存在) / 创建时间」;导出绿色「导出成功」;「审核状态」「操作」列当前被隐藏(记录,见 §0.5)
---
## 13. 执行意向报名(EXEC-INTENT
### TC-EXECINTENT-001 医生报名项目
- **优先级**P0
- **入口**:U03 登录 → 公示详情「立即报名」(或「我报名的项目」入口)
- **操作**:点「立即报名」
- **预期**:绿色「报名成功」,项目出现在「我报名的项目」列表;未登录点报名提示「请先登录系统」
### TC-EXECINTENT-002 重复报名拦截
- **优先级**P1
- **操作**:U03 对已报名项目,在公示详情查看报名按钮;在「我报名的项目」列表确认该项目已存在
- **预期**:公示详情报名按钮不再可点(显示「已报名」或隐藏报名入口);「我报名的项目」列表中该项目已存在
### TC-EXECINTENT-003 报名参数异常
- **优先级**P1
- **操作**:通过异常链接/参数报名(缺项目、项目不存在)
- **预期**:红色「项目ID缺失,无法报名」/「项目ID不能为空」/「项目ID格式错误」
---
## 14. 公示门户(PUBLIC
### TC-PUBLIC-001 平台协议文章
- **优先级**P1
- **入口**:门户注册/登录页底部「《用户协议》」「《隐私政策》」
- **操作**:点开(`#/article/agreement` / `#/article/privacy`
- **预期**:正常展示文章内容与「最后更新」时间
### TC-PUBLIC-002 专项计划公开详情
- **优先级**P1
- **入口**:门户首页「八大专项计划」卡片 →「查看详情」(`#/special-plan/:id`
- **操作**:未登录点开;已登录点开;点一个不存在的链接
- **预期**:未登录跳登录页(登录后回跳);已登录正常展示;不存在红色「专项计划不存在」
### TC-PUBLIC-003 招标公告
- **优先级**P1
- **操作**:公示详情(招标项目)点「查看招标公告」;无项目编号时;无公告时
- **预期**:正常展示;缺编号红色「缺少项目编号」;无公告红色「未查到该项目的招标公告」
### TC-PUBLIC-004 支持函 / 邀请函公开查看
- **优先级**P1
- **入口**:门户「支持函」「邀请函」列表页
- **操作**:点开详情 / 预览 / 模板 / QR / 分享
- **预期**:正常展示盖章文档、模板、二维码、分享链接
---
## 15. 忘记密码(FORGOT
### TC-FORGOT-001 忘记密码发码
- **优先级**P0
- **入口**:登录页「忘记密码」弹窗
- **操作**:输错格式手机号 → 发码;输未注册手机号 → 发码;输已注册手机号 → 发码
- **预期**:分别黄色「请输入正确的手机号」、红色「该手机号未注册, 请先注册账号」、绿色「验证码已发送」
### TC-FORGOT-002 重置密码校验
- **优先级**P1
- **操作**:重置弹窗逐项触发
- **预期**:手机号错「请输入正确的手机号」、验证码空「请输入短信验证码」、密码短「密码长度 6-20 位」、两次不一致「两次密码输入不一致」、未注册「该手机号未注册」
### TC-FORGOT-003 重置成功
- **优先级**P0
- **操作**:填新密码 → 提交
- **预期**:绿色「密码重置成功, 请用新密码登录」;用新密码可登录;失败「密码重置失败」
---
## 16. 后台统计 / 仪表盘(DASHBOARD
### TC-DASH-001 经理工作台统计
- **优先级**P1
- **入口**:U02 登录 →「工作台」
- **操作**:查看 5 张统计卡片
- **预期**:「项目总数量」「已结算数量」「已结题数量」「已执行会议」「未执行会议」数字正确;点击卡片跳转对应列表并带筛选
### TC-DASH-002 各角色统计口径
- **优先级**P1
- **操作**:分别查看 admin/manager/executor/sponsor/leader 工作台统计卡片
- **预期**
- admin`系统用户总数 / 角色类型数 / 项目总数量 / 已结题项目 / 会议总数量` +「快捷入口」8 项
- doctor 首页:欢迎栏「下午好,X专家」+「待签署的协议」区(仅审核通过显示)
- manager/sponsor/leader:已执行会议口径 `currentStageNotIn=NOT_STARTED,IN_PROGRESS`
- executor:已执行会议口径 `currentStage=RUNNING`(与其他角色不一致,记录)
---
## 17. 字典管理(DICT
### TC-DICT-001 科室管理
- **优先级**P1
- **入口**:U01 →「科室管理」
- **操作**:新增科室留空名称 → 保存;删除某科室
- **预期**:黄色「请输入科室名称」;删除确认「确定删除科室"X"? 该操作不可恢复」→ 绿色「删除成功」;停用/启用绿色「已停用」/「已启用」
### TC-DICT-002 职称管理
- **优先级**P1
- **入口**:U01 →「职称管理」
- **操作**:新增留空名称
- **预期**:黄色「请输入职称名称」;删除确认「确定删除职称"X"? 该操作不可恢复」
### TC-DICT-003 写操作 admin-only
- **优先级**P0
- **操作**U02 登录查看菜单
- **预期**:无「科室管理」「职称管理」「项目类别管理」菜单入口(仅 admin);下拉选择(专家/参会人表单)读取开放
---
## 18. 后台配置(ADMIN-CONFIG
### TC-CFG-001 后台建用户权限
- **优先级**P0
- **入口**:U01 →「用户管理」→「新建用户」
- **操作**
1. U02 登录查看侧栏菜单
2. U01 新建用户逐项留空/填错
- **预期**:U02 无「用户管理」菜单;U01 依次提示「请选择角色」「请填写登录账号」「请填写密码」「请填写单位名称」「请选择所属单位」「请填写姓名」;账号非法「登录账号需 4-20 位字母/数字/下划线」、重复「登录账号已存在」/「手机号已存在」/「邮箱已存在」;新建成功绿色「新建成功」
### TC-CFG-002 专项计划管理
- **优先级**P1
- **入口**:U01 →「专项计划管理」
- **操作**:新增/编辑/删除;查看门户
- **预期**:编辑字段 标题/内容类型(富文本/上传文件)/正文或文件/排序/状态;校验「请输入标题」「请输入正文」「请上传文件」;删除确认「确认删除「X」?」→「已删除」;启用项在门户「专项计划」可见
### TC-CFG-003 劳务协议模板默认唯一
- **优先级**P1
- **入口**:U01 →「劳务协议配置」
- **操作**:新建模板并「设为默认」→ 再设另一条为默认;尝试删除默认模板
- **预期**:「设为默认」确认「确认将"X"设为默认模板? 其他默认模板将自动取消」→ 绿色「已设为默认」;任意时刻仅一条默认;删除默认模板黄色「默认模板不能删除, 请先取消默认」;编辑字段 模板名「请输入模板名」、模板内容「请输入模板内容」
### TC-CFG-004 协议文章管理
- **优先级**P2
- **入口**:U01 →「协议管理」
- **操作**:编辑文章 标题/类型/状态/正文
- **预期**:校验「请输入标题」「请输入正文」;编辑时类型不可改;发布后门户 `#/article/agreement|privacy` 可见;无新增/删除按钮
---
## 19. 执行方 / 人员下拉(EXECUTOR / DROPDOWN
### TC-DROPDOWN-001 项目分配下拉只出主账号/执行单位
- **优先级**P0
- **入口**:U02「项目分配」→ 执行单位下拉
- **操作**:点开执行单位下拉
- **预期**:选项 label=单位名称(value=orgId),不含该单位下员工子账号;执行方侧「分配执行人」下拉仅列出执行人员(主账号标记「(管理员)」且 disabled)
### TC-DROPDOWN-002 下拉模糊 / 精确搜索
- **优先级**P1
- **操作**:支持单位/执行单位下拉输入关键字筛选
- **预期**:按名称远程模糊匹配并回填
---
## 20. OA 集成(ECOLOGY
### TC-ECOLOGY-001 生态项目搜索
- **优先级**P2
- **入口**:项目新建/编辑页「项目编号」下拉
- **操作**:输入项目编号关键字搜索
- **预期**:返回泛微生态项目(`编号(名称)`),选中后回填项目名称等信息;异常红色「项目编号不能为空」「ecology 中未找到该项目编号」「ecology 数据源不可用」
---
## 附:用例统计与准出
- 总用例数:约 **100+ 条**,覆盖 **20 个功能模块**(按界面入口组织)。
- 覆盖角色:admin / manager / doctor / executor / sponsor / leader / 门户匿名。
- 准出:P0 全 PassP1 Pass ≥ 98%;已知差异/风险项全部登记(§0.5 is_finished 结题缺陷、意向审核列隐藏、executor 已执行会议口径差异)。
- 每条 Fail 需附:操作路径 + 截图(含红/绿提示文案)+ 预期文案 + 实际文案。
---
## 附 B:功能覆盖对照
| 功能模块 | 界面入口 | 状态 |
|---|---|---|
| 登录/注册/忘记密码 | 门户登录页、专家/执行方/支持方注册页 | ✅ |
| 专家管理/审核 | 专家管理、专家审核 | ✅ |
| 支持/执行单位管理 | 支持单位管理、执行单位管理 | ✅ |
| 支持/执行单位人员 | 支持单位下人员、执行单位下人员、人员管理 | ✅ |
| 项目管理/分配/评分/导出 | 项目管理、项目分配、项目详情 | ✅ |
| 会议管理/审核/结算/冻结 | 会议管理、会议详情 | ✅ |
| 参会人/签署/邀请 | 会议详情-参会人、医生签署流程 | ✅ |
| 材料/凭证/打包下载 | 会议详情-材料 | ✅ |
| 公示门户/意向/支持函/邀请函 | 门户项目公示、公示详情 | ✅ |
| 策划方案 | 我的项目策划方案、策划方案管理 | ✅ |
| 消息中心/SSE | 消息通知、右上角铃铛 | ✅ |
| 仪表盘统计 | 各角色工作台/首页 | ✅ |
| 字典/专项计划/协议/劳务协议模板 | 科室/职称/专项计划/协议/劳务协议配置 | ✅ |
| 执行方下拉 | 项目分配弹窗 | ✅ |
| OA 生态项目 | 项目编辑关联 | ✅ |
| 平台基础设施(OSS/摄像头/验证码/通用) | 附件上传、图形验证码 | 按需冒烟 |
> 说明:测试人员全程**只在浏览器操作 ry-vue3 界面**完成上述用例;「预期」为界面上弹出的红/绿/黄提示文案(逐字核对)。