diff --git a/CLAUDE.md b/CLAUDE.md index ad024d8..1c6d440 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,3 +9,26 @@ - 墨刀导入兼容约束(禁止外部引用、简洁DOM、内联SVG) 每次生成或修改 HTML 原型文件前,必须先确认符合上述约束。 + +# 模块文档规范 + +每个一级功能模块目录下必须创建 `doc/` 子目录,维护以下两个文档: + +## doc/CHANGELOG.md(变更记录) + +- 记录该模块原型的所有变更,按时间倒序排列 +- 每条记录包含:变更日期、变更类型(init/feat/fix/refactor)、涉及文件列表及具体变更说明 +- **每次提交代码前,必须自动整理本次变更内容并追加到对应模块的 `doc/CHANGELOG.md` 中** + +## doc/PRD.md(产品需求文档) + +- 作为该模块的产品需求说明,面向研发人员,简洁为主 +- 每次新增或修改原型页面后,必须同步更新 `doc/PRD.md` 中对应的内容 +- 文档结构要求: + - **模块概述**:简述模块功能,附页面导航结构树 + 状态流转图(Mermaid) + - **页面清单**:列出所有页面和弹窗 + - **逐页说明**:每个页面/弹窗从几个维度描述: + - 功能说明:页面用途和核心元素 + - 业务规则:数据逻辑、状态流转、约束条件 + - 交互说明:以文字列表形式描述各元素的交互行为和跳转目标,跳转目标使用中文页面名称(如"跳转到专家主页"),不使用文件名 + - 表单字段表:如若存在表单提交的页面以表格列出字段名、类型、必填、规则 diff --git a/employee-app/health-consult/doc/CHANGELOG.md b/employee-app/health-consult/doc/CHANGELOG.md new file mode 100644 index 0000000..6905d33 --- /dev/null +++ b/employee-app/health-consult/doc/CHANGELOG.md @@ -0,0 +1,43 @@ +# 健康咨询 - 变更记录 + +> 本文档记录「健康咨询」模块原型的所有变更,按时间倒序排列。 + +--- + +## [2026-04-09] fix: 修复返回键路由问题,新增科室/疾病专家数量展示 + +**涉及文件(7个):** +- `find-expert.html` — 科室二级分类新增专家数量角标,疾病列表新增专家数量展示 +- `expert-profile.html` — 修复返回按钮路由逻辑,根据 `?from` 参数精确返回来源页 +- `expert-list.html` — 修复返回按钮跳转路径 +- `index.html` — 优化专家卡片跳转携带来源参数 +- `rate-doctor.html` — 修复返回按钮路由,支持 `?from=text-chat` 参数 +- `record-detail.html` — 修复对话入口跳转路径 +- `text-chat.html` — 修复结束咨询后跳转路径 + +--- + +## [2026-04-08] init: 健康咨询模块初始化 + +**新增文件(18个):** + +| 文件 | 说明 | +|------|------| +| `index.html` | 模块首页:功能入口 + 推荐专家 | +| `find-expert.html` | 找专家:按医院/科室/疾病三维度查找 | +| `expert-list.html` | 专家列表:分类下的专家列表,支持排序和搜索 | +| `expert-profile.html` | 专家主页:个人资料 + 咨询入口 | +| `expert-reviews.html` | 用户评价:评分统计 + 评价列表 | +| `hospital-detail.html` | 医院详情:医院信息 + 本院专家 | +| `my-records.html` | 我的咨询:图文/视频咨询记录列表 | +| `record-detail.html` | 咨询详情:单条记录详情 + 继续咨询 | +| `text-chat.html` | 图文咨询:实时聊天界面 | +| `assistant-chat.html` | AI 小助手:智能问诊对话 | +| `video-booking.html` | 视频预约:选择日期时段 | +| `video-success.html` | 预约成功:预约结果展示 | +| `rate-doctor.html` | 评价医生:星级评分 + 文字评价 | +| `consult-notice-dialog.html` | 弹窗 - 咨询须知 | +| `end-consult-dialog.html` | 弹窗 - 结束咨询确认 | +| `select-person-dialog.html` | 弹窗 - 选择/新增咨询人 | +| `select-report-dialog.html` | 弹窗 - 选择体检报告 | +| `rate-dialog.html` | 弹窗 - 评价医生 | diff --git a/employee-app/health-consult/doc/PRD.md b/employee-app/health-consult/doc/PRD.md new file mode 100644 index 0000000..e25f632 --- /dev/null +++ b/employee-app/health-consult/doc/PRD.md @@ -0,0 +1,451 @@ +# 健康咨询 - 产品需求文档(PRD) + +> **所属端**:员工端 APP +> **模块路径**:`employee-app/health-consult/` +> **最后更新**:2026-04-09 + +--- + +## 一、模块概述 + +为油田员工提供在线健康咨询服务,支持 **AI 智能问诊**、**图文咨询**、**视频咨询** 三种形式。员工可按医院、科室、疾病维度查找专家,发起咨询并管理历史记录。 + +### 页面导航结构 + +``` +健康咨询首页 +├── 找专家 +│ ├── [按医院] → 医院详情 → 专家主页 +│ ├── [按科室] → 专家列表 → 专家主页 +│ └── [按疾病] → 专家列表 → 专家主页 +├── AI 小助手 +└── 我的咨询 → 咨询详情 → 图文咨询聊天 + +专家主页 +├── [图文咨询] → 咨询须知弹窗 → 图文咨询聊天 → 结束咨询确认弹窗 → 评价医生 +├── [视频咨询] → 咨询须知弹窗 → 视频咨询预约 → 预约成功 +└── 查看全部评价 → 用户评价列表 +``` + +### 咨询状态流转 + +```mermaid +stateDiagram-v2 + [*] --> 进行中: 发起图文咨询 + [*] --> 待开始: 预约视频咨询 + 待开始 --> 进行中: 到达预约时间 + 进行中 --> 已完成: 结束咨询 + 已完成 --> 已评价: 提交评价 +``` + +### 页面清单 + +| # | 文件 | 类型 | 说明 | +|---|------|------|------| +| 1 | `index.html` | 页面 | 模块首页 | +| 2 | `find-expert.html` | 页面 | 找专家(搜索 + 分类) | +| 3 | `expert-list.html` | 页面 | 专家列表 | +| 4 | `expert-profile.html` | 页面 | 专家主页 | +| 5 | `expert-reviews.html` | 页面 | 用户评价列表 | +| 6 | `hospital-detail.html` | 页面 | 医院详情 | +| 7 | `my-records.html` | 页面 | 我的咨询记录 | +| 8 | `record-detail.html` | 页面 | 咨询详情 | +| 9 | `text-chat.html` | 页面 | 图文咨询聊天 | +| 10 | `assistant-chat.html` | 页面 | AI 小助手聊天 | +| 11 | `video-booking.html` | 页面 | 视频咨询预约 | +| 12 | `video-success.html` | 页面 | 预约成功 | +| 13 | `rate-doctor.html` | 页面 | 评价医生 | +| 14 | `consult-notice-dialog.html` | 弹窗 | 咨询须知 | +| 15 | `end-consult-dialog.html` | 弹窗 | 结束咨询确认 | +| 16 | `select-person-dialog.html` | 弹窗 | 选择/新增咨询人 | +| 17 | `select-report-dialog.html` | 弹窗 | 选择体检报告 | +| 18 | `rate-dialog.html` | 弹窗 | 评价医生(弹窗版) | + +--- + +## 二、页面详细说明 + +### 2.1 模块首页(index.html) + +**功能说明** + +模块入口页,提供三大功能快捷入口(找专家、AI 小助手、我的咨询)和推荐专家列表。专家卡片展示姓名、职称、医院科室、擅长标签、评分、咨询次数、回复率。 + +**业务规则** + +- 推荐专家由后端根据评分、咨询量等维度综合排序 +- 每张专家卡片展示不超过 3 个擅长标签 + +**交互说明** + +- 点击「找专家」跳转到找专家页 +- 点击「AI 小助手」跳转到 AI 小助手聊天页 +- 点击「我的咨询」跳转到我的咨询记录页 +- 点击「查看全部」跳转到找专家页 +- 点击专家卡片或卡片上的「咨询」按钮,跳转到专家主页 +- 导航栏返回 → 员工端首页 + +--- + +### 2.2 找专家(find-expert.html) + +**功能说明** + +三维度查找专家:按医院、按科室、按疾病。顶部搜索栏支持关键词模糊搜索。 + +- **全部医院**:医院卡片列表,展示名称、等级、距离、专家数、地址 +- **全部科室**:左侧一级分类 + 右侧二级科室网格,每项展示科室名和专家数 +- **全部疾病**:横向分类 Tab + 疾病列表,每项展示疾病名和专家数 + +**业务规则** + +- 搜索基于 ElasticSearch 模糊匹配,可搜医院、科室、疾病、医生姓名 +- 科室体系:6 个一级分类(内科、外科、妇产科、儿科、眼耳鼻喉、皮肤科),每级含多个二级科室 +- 疾病体系:6 大类(心血管、内分泌、骨骼肌肉、神经系统、消化系统、呼吸系统) +- 医院距离基于用户当前定位计算 + +**交互说明** + +- 顶部 Tab 切换「全部医院 / 全部科室 / 全部疾病」三个面板 +- 点击医院卡片跳转到医院详情页 +- 科室面板:点击左侧一级分类联动切换右侧二级科室;点击二级科室项跳转到专家列表页 +- 疾病面板:点击横向分类 Tab 切换疾病列表;点击疾病项跳转到专家列表页 +- 导航栏返回 → 健康咨询首页 + +--- + +### 2.3 专家列表(expert-list.html) + +**功能说明** + +展示特定分类(科室/疾病)下的专家列表。头部展示分类名称和专家总数。支持排序(好评优先 / 热度优先 / 回复率)和按姓名搜索过滤。 + +**业务规则** + +- 默认按好评优先排序 +- 搜索为前端实时过滤,匹配医生姓名 +- 无结果时展示空状态提示 + +**交互说明** + +- 点击排序按钮切换排序方式,高亮当前选中项 +- 搜索输入框输入关键词实时过滤卡片列表 +- 点击专家卡片跳转到专家主页 +- 导航栏返回 → 找专家页 + +--- + +### 2.4 专家主页(expert-profile.html) + +**功能说明** + +专家个人详情页。展示头像、姓名、职称、科室、所属医院,统计数据(综合评价、24h 回复率、总咨询量),医生简介、擅长方向标签,以及最新 3 条用户评价。提供图文咨询和视频咨询两个入口。 + +**业务规则** + +- 点击任一咨询按钮,先弹出「咨询须知」弹窗,用户点击「同意并开始咨询」后才进入对应流程 +- 图文咨询确认后直接进入聊天;视频咨询确认后进入预约选时 +- 返回按钮根据来源页精确返回(从首页进入则返回首页,从专家列表进入则返回专家列表,其他情况返回上一页) + +**交互说明** + +- 点击「图文咨询」→ 弹出咨询须知弹窗 → 确认后跳转到图文咨询聊天页 +- 点击「视频咨询」→ 弹出咨询须知弹窗 → 确认后跳转到视频咨询预约页 +- 点击「查看全部评价」跳转到用户评价列表页 +- 点击分享按钮调用系统分享 +- 导航栏返回 → 精确返回来源页 + +--- + +### 2.5 用户评价列表(expert-reviews.html) + +**功能说明** + +展示专家的完整评价数据。顶部为评分统计卡片:综合评分、5 星~1 星分布进度条、三维度评分(专业性 / 回复速度 / 服务态度)。下方为评价列表,每条含用户头像、姓名、日期、星级、评价文字、评价标签。 + +**业务规则** + +- 评价按时间倒序排列 +- 评价标签由系统预设:专业、耐心、回复及时、负责任、个性化、实用 + +**交互说明** + +- 导航栏返回 → 专家主页 + +--- + +### 2.6 医院详情(hospital-detail.html) + +**功能说明** + +展示医院信息(实景图、名称、等级、地址、距离、导航按钮)、医院简介(支持展开/收起),以及本院专家列表(排序 + 搜索,逻辑同专家列表页)。 + +**业务规则** + +- 导航按钮调用地图导航(原型仅模拟提示) +- 简介默认收起,超长文本截断 + +**交互说明** + +- 点击导航按钮提示"正在为您导航..."(原型演示) +- 点击展开/收起按钮切换简介文本显示 +- 排序按钮切换专家列表排序方式 +- 点击专家卡片跳转到专家主页 +- 导航栏返回 → 找专家页 + +--- + +### 2.7 我的咨询(my-records.html) + +**功能说明** + +展示用户的所有咨询记录。通过 Tab 栏切换「图文咨询 / 视频咨询」。记录卡片展示医生头像、姓名、科室、状态标签、咨询人、消息摘要、时间。 + +**业务规则** + +- 咨询状态及对应样式:`进行中`(蓝色)、`已完成`(绿色)、`待开始`(橙色) +- 已完成的图文咨询如已评价则显示"已评价"标记 +- 视频咨询 `待开始` 状态显示预约时间,`已完成` 显示通话时长 + +**交互说明** + +- Tab 栏切换图文/视频记录列表 +- 点击记录卡片跳转到咨询详情页 +- 导航栏返回 → 健康咨询首页 + +--- + +### 2.8 咨询详情(record-detail.html) + +**功能说明** + +展示单条咨询记录详情:医生信息栏 + 状态标签、咨询信息(类型、时间、状态、时长)、对话入口卡片、底部"继续咨询"按钮。 + +**业务规则** + +- 仅「进行中」状态显示"继续咨询"按钮 +- 进行中的咨询时长显示 `-` + +**交互说明** + +- 点击对话入口卡片或「继续咨询」按钮,跳转到图文咨询聊天页 +- 导航栏返回 → 我的咨询记录页 + +--- + +### 2.9 图文咨询聊天(text-chat.html) + +**功能说明** + +与医生的实时图文聊天界面。聊天头部展示医生头像、姓名、在线状态和「结束咨询」按钮。底部输入区含 + 按钮(展开功能面板)、消息输入框、发送按钮。功能面板提供 5 项操作:图片、拍摄、体检报告、选择档案、结束咨询。 + +**业务规则** + +- 图文咨询有效期为 24 小时 +- 消息发送后 HTML 转义防 XSS +- 结束咨询需通过二次确认弹窗 +- 本页无导航栏返回按钮,只能通过结束咨询离开 + +**交互说明** + +- 点击发送按钮或按 Enter 发送消息,追加到消息列表 +- 点击 + 按钮展开/收起功能面板 +- 功能面板点击「体检报告」打开选择体检报告弹窗 +- 功能面板点击「选择档案」打开选择咨询人弹窗 +- 点击头部「结束咨询」按钮或功能面板中的「结束咨询」,弹出结束咨询确认弹窗,确认后跳转到评价医生页 + +--- + +### 2.10 AI 小助手(assistant-chat.html) + +**功能说明** + +AI 智能问诊聊天界面。头部展示机器人头像和"健康小助手"。底部输入区含 + 按钮、消息输入框、发送按钮。功能面板提供 4 项操作:图片、拍摄、体检报告、选择档案。 + +**业务规则** + +- AI 回复为系统自动生成,不可人工干预 +- 不替代专业医生诊断,仅作初步健康咨询参考 + +**交互说明** + +- 点击发送按钮发送消息,AI 自动回复 +- 点击 + 按钮展开/收起功能面板 +- 导航栏返回 → 健康咨询首页 + +--- + +### 2.11 视频咨询预约(video-booking.html) + +**功能说明** + +视频咨询预约页面。展示医生信息卡片和预约须知提示。提供日期横向选择器(未来 6 天)和时段网格(上午 6 个 / 下午 6 个),底部确认栏显示已选时段和「立即预约」按钮。 + +**业务规则** + +- 已约满时段置灰不可选,显示"约满"标记 +- 可用时段显示剩余号源数 +- 必须同时选择日期和时段才能提交预约 +- 视频咨询不收取额外费用,如停诊将短信通知 + +**交互说明** + +- 点击日期切换选中日期,时段状态随之更新 +- 点击可用时段高亮选中,底部确认栏同步更新 +- 点击「立即预约」跳转到预约成功页 +- 导航栏返回 → 专家主页 + +--- + +### 2.12 预约成功(video-success.html) + +**功能说明** + +视频咨询预约成功结果页。展示成功图标、提示文案(提前 15 分钟推送提醒)、预约信息卡片(医生、医院、科室、类型、时间、费用),以及两个操作按钮。 + +**业务规则** + +- 无导航栏返回按钮,仅通过底部按钮离开 +- 费用信息以蓝色高亮显示 + +**交互说明** + +- 点击「查看我的咨询」跳转到我的咨询记录页 +- 点击「返回首页」跳转到健康咨询首页 + +--- + +### 2.13 评价医生(rate-doctor.html) + +**功能说明** + +咨询结束后对医生进行评价。展示医生信息和"本次咨询已结束"提示,提供星级评分和文字评价输入。 + +**业务规则** + +- 默认 5 星,可下调 +- 文字评价为选填 +- 提交后跳转到我的咨询记录页 +- 返回按钮精确返回来源页(从聊天页进入则返回聊天页,其他情况返回我的咨询记录页) + +**交互说明** + +- 点击星级图标切换评分 +- 点击「提交评价」提交并跳转到我的咨询记录页 +- 导航栏返回 → 精确返回来源页 + +#### 评价表单字段 + +| 字段 | 类型 | 必填 | 规则 | +|------|------|------|------| +| 星级评分 | 星级选择(1~5) | 是 | 默认 5 星 | +| 评价内容 | 多行文本 | 否 | 无字数限制 | + +--- + +## 三、弹窗说明 + +### 3.1 咨询须知弹窗(consult-notice-dialog.html) + +**功能说明** + +发起咨询前的告知弹窗,底部滑出样式。所有咨询入口(图文/视频)必须先展示此弹窗,用户同意后才能进入实际咨询流程。 + +**须知内容:** +1. 本平台提供在线健康咨询服务,不替代线下就医 +2. 请如实描述症状和病史,以便医生准确判断 +3. 医生将在 24 小时内回复(图文)/ 按预约时间进行(视频) +4. 如遇紧急情况,请立即拨打 120 + +**交互说明** + +- 点击「取消」关闭弹窗,回到专家主页 +- 点击「同意并开始咨询」:图文咨询跳转到图文咨询聊天页,视频咨询跳转到视频咨询预约页 +- 点击遮罩层关闭弹窗 + +--- + +### 3.2 结束咨询确认弹窗(end-consult-dialog.html) + +**功能说明** + +结束图文咨询的二次确认弹窗,底部滑出样式。提示文案:「确认结束本次咨询吗?结束后将跳转至评价页面。」 + +**交互说明** + +- 点击「继续咨询」关闭弹窗 +- 点击「确认结束」跳转到评价医生页 + +--- + +### 3.3 选择咨询人弹窗(select-person-dialog.html) + +**功能说明** + +选择已有咨询人或新增咨询人,底部全屏滑出。包含两个视图切换: + +- **列表视图**:展示已有咨询人卡片(本人 + 家属),点击选中 +- **新增表单**:录入新咨询人的基本信息、生活习惯、身体情况 + +**交互说明** + +- 点击咨询人卡片选中并关闭弹窗 +- 点击「新增咨询人」按钮切换到新增表单视图 +- 表单内点击返回按钮回到列表视图 +- 点击「保存」保存新咨询人并回到列表 +- 点击关闭按钮关闭弹窗 + +#### 新增咨询人表单字段 + +| 字段 | 类型 | 必填 | 规则 | +|------|------|------|------| +| 姓名 | 文本 | 是 | — | +| 性别 | 按钮组单选 | 是 | 男 / 女 | +| 出生日期 | 日期选择 | 是 | 不晚于当天 | +| 与本人关系 | 文本 | 是 | 如:配偶、父亲等 | +| 是否吸烟 | 按钮组单选 | 否 | 否 / 偶尔 / 是 | +| 是否饮酒 | 按钮组单选 | 否 | 否 / 偶尔 / 是 | +| 饮食喜好 | 按钮组单选 | 否 | 清淡 / 均衡 / 偏油腻 / 偏辛辣 | +| 睡眠质量 | 按钮组单选 | 否 | 良好 / 一般 / 较差 | +| 身高 | 数字(cm) | 否 | 正数 | +| 体重 | 数字(kg) | 否 | 正数 | +| 过敏史 | 文本 | 否 | 如:青霉素过敏 | +| 遗传史 | 文本 | 否 | 如:高血压家族史 | +| 既往史 | 文本 | 否 | 如:2020 年阑尾炎手术 | +| 其他疾病 | 文本 | 否 | 如:慢性胃炎 | + +--- + +### 3.4 选择体检报告弹窗(select-report-dialog.html) + +**功能说明** + +从历史体检报告中选择发送给医生,底部全屏滑出。展示报告卡片列表,每张含报告标题、日期、来源医院和「发送」按钮。 + +**业务规则** + +- 已发送的报告按钮变为"已发送"(绿色),不可重复发送 +- 报告数据来自健康体检模块 + +**交互说明** + +- 点击「发送」发送报告给医生,按钮变为"已发送" +- 点击关闭按钮关闭弹窗 + +--- + +### 3.5 评价医生弹窗(rate-dialog.html) + +**功能说明** + +弹窗形式的评价功能,底部滑出样式。与评价医生页功能相同,展示形式不同。 + +**业务规则** + +- 必须选择星级才能提交,否则弹出提示 +- 文字评价选填 + +**交互说明** + +- 点击「取消」关闭弹窗 +- 点击「提交评价」校验评分 → 提交 → 关闭弹窗 diff --git a/index.html b/index.html index 82bf4be..3a8012e 100644 --- a/index.html +++ b/index.html @@ -105,6 +105,37 @@ body { background: var(--background); font-family: -apple-system, BlinkMacSystem .page-popover__item svg { flex-shrink: 0; } .page-popover__item--dialog { color: #ad4e00; } .page-popover__item--dialog:hover { background: #fff7e6; color: #ad4e00; } + +/* ===== 卡片底部 PRD 链接 ===== */ +.module-card__footer { display: flex; justify-content: flex-start; margin-top: 10px; } +.module-card__prd { font-size: 12px; color: var(--primary); cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: var(--radius-sm); transition: all .15s; } +.module-card__prd:hover { background: var(--primary-light); color: var(--primary-dark); } +.module-card__prd svg { flex-shrink: 0; } + +/* ===== PRD Tab 页 ===== */ +.prd-page__global { margin-bottom: 28px; } +.prd-global-card { background: linear-gradient(135deg, #f6ffed 0%, #e6f7ff 100%); border: 1.5px solid var(--green-border); border-radius: var(--radius-lg); padding: 20px 24px; cursor: pointer; transition: all .25s; display: flex; align-items: center; gap: 16px; } +.prd-global-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } +.prd-global-card__icon { width: 44px; height: 44px; border-radius: 12px; background: linear-gradient(135deg, var(--primary), #4facfe); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } +.prd-global-card__info { flex: 1; } +.prd-global-card__title { font-size: 16px; font-weight: 700; color: var(--text-primary); } +.prd-global-card__desc { font-size: 13px; color: var(--text-secondary); margin-top: 4px; } +.prd-section { margin-bottom: 28px; } +.prd-section__title { font-size: 15px; font-weight: 600; color: var(--text-primary); margin-bottom: 14px; padding: 6px 16px; background: var(--card-bg); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); display: inline-flex; align-items: center; gap: 8px; } +.prd-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 14px; } +.prd-item { background: var(--card-bg); border: 1.5px solid var(--border); border-radius: var(--radius-md); padding: 16px 18px; cursor: pointer; transition: all .2s; display: flex; align-items: center; gap: 12px; } +.prd-item:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); border-color: var(--primary); } +.prd-item--disabled { opacity: 0.45; cursor: default; border-style: dashed; } +.prd-item--disabled:hover { box-shadow: none; transform: none; border-color: var(--border); } +.prd-item__icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 18px; } +.prd-item__icon--ready { background: var(--green-light); color: #389e0d; } +.prd-item__icon--empty { background: #f5f5f5; color: #bbb; } +.prd-item__info { flex: 1; min-width: 0; } +.prd-item__name { font-size: 14px; font-weight: 600; color: var(--text-primary); } +.prd-item__path { font-size: 11px; color: var(--text-placeholder); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.prd-item__status { font-size: 11px; padding: 2px 8px; border-radius: 10px; font-weight: 600; flex-shrink: 0; } +.prd-item__status--ready { background: var(--green-light); color: #389e0d; border: 1px solid var(--green-border); } +.prd-item__status--empty { background: #fffbe6; color: #d48806; border: 1px solid #ffe58f; }
@@ -127,6 +158,8 @@ const ICONS = { page: '', dialog: '', empty: '', + prd: '', + prdSmall: '', role: { expert:'👨⚕', assistant:'🤖', operator:'📋', worker:'👷', onsite:'🏥', admin:'⚙', shared:'🔗' } }; @@ -161,7 +194,7 @@ const SITE_MAP = [ { name:'心脑血管病预防', dir:'employee-app/cardiovascular', pages:[] }, { name:'糖尿病预防', dir:'employee-app/diabetes', pages:[] }, { name:'癌症预防', dir:'employee-app/cancer', pages:[] }, - { name:'健康咨询', dir:'employee-app/health-consult', pages:[ + { name:'健康咨询', dir:'employee-app/health-consult', prd:'employee-app/health-consult/doc/PRD.md', pages:[ { file:'index.html', label:'咨询首页' }, { file:'expert-list.html', label:'专家列表' }, { file:'expert-profile.html', label:'专家主页' }, { file:'find-expert.html', label:'找专家' }, { file:'text-chat.html', label:'图文咨询' }, { file:'video-booking.html', label:'视频预约' }, @@ -251,9 +284,13 @@ function countPages(t) { /* Tab 导航 */ const tabNav = document.getElementById('tab-nav'); const tabContents = document.getElementById('tab-contents'); +const totalTabs = SITE_MAP.length + 1; /* +1 for PRD tab */ SITE_MAP.forEach((t, i) => { tabNav.innerHTML += `