项目概览
前端技术栈
ArkTS (TypeScript 严格子集) + @ohos/axios HTTP 库 + @ohos.data.preferences 持久化 + AppStorage 全局状态管理
后端技术栈
Spring Boot 3 + JWT 鉴权 + MySQL 8.0,7 张数据表,260 名医生,139 个科室,支持 RESTful API
核心功能
登录注册 · 10大科室浏览 · 7天排班预约挂号 · 就诊人管理(含身份证校验) · 挂号记录 · AI 管家流式对话
前端项目详解
📂 项目文件结构(共 33 个 .ets 源文件)
🎨 ArkTS 装饰器与核心概念
Model 数据层
models/ChatMessage.ets + models/UISpec.ets — 定义消息、卡片等核心数据结构。ChatMessage 用 @Observed 装饰实现响应式
View 视图层
pages/ + components/ — 13 个页面 + 11 个组件。用 struct + build() 描述 UI,用 .链式方法 设置样式属性
Service 服务层
services/ — 6 个服务文件处理所有业务逻辑:AI配置、流式请求、上下文构建、API桥接、历史存储、内容解析
架构与页面导航流程
AI 管家 · 小医 — 核心架构
LLMService — SSE 流式请求
使用 HarmonyOS http.requestInStream() 向 AI 服务发送 OpenAI 兼容的 /chat/completions 请求。通过 on('dataReceive') 事件逐行接收增量数据,实现打字机效果
StreamParser — 状态机解析
在 TEXT 和 UI 两种模式之间切换。检测 ```ui / ```json 代码块边界,智能提取 JSON(支持括号匹配、字符串转义处理),跨 chunk 边界安全
DynamicCard — 卡片分发
根据 spec.type 自动渲染:info_card(信息展示)→ dept_picker(科室胶囊)→ doctor_list(医生列表)→ appointment_form(挂号表单)→ quick_replies(快捷回复)
KeeperBridge — API 桥接
卡片操作事件 → 后端 API 的桥接层。dispatch() 根据 action 类型(pickDept/pickDoctor/submitAppointment)分发到对应方法,调后端接口并返回结果
KeeperContext — 上下文构建
加载 139 个科室知识 → 注入当前日期/用户档案/就诊人列表 → 预查匹配科室的医生排班 → 拼成结构化文本,注入 AI 的 system prompt 中
KeeperStore — 历史持久化
按用户名(手机号)隔离存储。退出登录清空当前用户历史,重新登录恢复。不同用户互不干扰。streaming 中的消息不保存
快速入门
1. 安装 DevEco Studio
从华为开发者官网下载。安装时选择 API 23 (HarmonyOS 6.1) 的 SDK
2. 打开项目
DevEco Studio → Open → 选择项目文件夹 → File → Sync Now 同步 ohpm 依赖(自动安装 @ohos/axios)
3. 连接设备
模拟器:Device Manager → 创建 API 23 模拟器。真机:USB 连接 + 开发者模式 + 签名配置
4. 首次运行验证
Run → 首页显示轮播 → 挂号Tab查看科室 → 注册账号 → 添加就诊人 → 挂号全流程
后端 API 参考
| 方法 | 端点 | 认证 | 说明 | 前端调用位置 |
|---|---|---|---|---|
| POST | /customer/login | 无 | 登录,返回 JWT token | LoginPage.ets |
| POST | /customer/add | 无 | 注册新用户 | RegisterPage.ets |
| GET | /visitor/list | Token | 获取就诊人列表 | PatientListPage / MedicalRecordPage |
| POST | /visitor/add | Token | 添加就诊人 | PatientEditPage.ets |
| GET | /employee/list?deptId=&week= | Token | 某科室某工作日医生列表 | RegisterAppointmentPage / KeeperBridge |
| GET | /employee/getByIdWithScheduling/{id} | Token | 医生详情 + weekRule 排班 | AppointmentDetailPage.ets |
| POST | /registerW/add | Token | 提交挂号(date/time/empId/vId/price) | AppointmentDetailPage / KeeperBridge |
| GET | /registerW/list | Token | 挂号记录列表 | MedicalRecordPage / KeeperBridge |
| DELETE | /registerW/delete/{id} | Token | 取消/删除挂号 | MedicalRecordPage.ets |
英语词汇速查
- API
- Application Programming Interface → 应用程序编程接口,后端提供的 URL 地址
- async / await
- asynchronous=异步的 → async 标记函数可用 await,await 暂停等待异步操作完成
- axios
- axis=轴 → 基于 Promise 的 HTTP 客户端,用于向后端发送 GET/POST/DELETE 请求
- Column / Row
- column=列→垂直排列子元素 / row=行→水平排列子元素
- interface
- interface=接口 → TypeScript 类型定义,约束对象的数据结构形状
- JWT
- JSON Web Token → JSON 格式的加密身份令牌,登录成功后由后端签发
- LLM
- Large Language Model → 大语言模型,如 DeepSeek、GPT,用于 AI 对话
- preferences
- preference=偏好 → 轻量级键值对磁盘存储,类似 Web 的 localStorage
- Promise
- promise=承诺 → 表示一个尚未完成的异步操作,用 .then() 或 await 获取结果
- Record<K,V>
- record=记录 → TypeScript 内置类型,表示键类型为 K、值类型为 V 的对象
- router
- route=路由 → 页面跳转控制器,pushUrl(打开) / back(返回) / getParams(获取参数)
- SSE
- Server-Sent Events → 服务器向客户端单向推送数据流的技术
- Stack
- stack=堆叠 → 子元素层叠排列,后面的盖在前面上面
- struct
- structure=结构体 → ArkTS 中用 struct 定义组件(比 class 更轻量、适合 UI)
- token
- token=令牌 → 登录后服务器返回的身份凭证,每次请求需在 Header 携带
- trim()
- trim=修剪 → 去除字符串首尾的空白字符(空格、制表符、换行等)
🚀 准备开始了吗?
用 DevEco Studio 打开项目,Sync 依赖,Run 起来即可体验完整的鸿蒙云医院功能