6.9 KiB
6.9 KiB
医生功能实现总结
功能概述
实现了小程序首页医生展示功能,包括:
- 古典卷轴风格幻灯片
- 动态医生列表展示(从后端API获取)
- 医生卡片点击跳转到挂号页面
后端实现
1. 医生逻辑层 (DoctorLogic)
文件: server/app/api/logic/DoctorLogic.php
功能:
getDoctorList()- 获取医生列表,支持分页和搜索getDoctorDetail()- 获取单个医生详情getDoctorRoster()- 获取医生排班信息
数据来源: zyt_admin 表(role_id = 1 的医生)
返回字段:
[
'id' => 医生ID,
'name' => 医生名字,
'account' => 医生账号,
'avatar' => 医生头像URL,
'mobile' => 医生手机,
'email' => 医生邮箱,
'specialty' => 专科,
'title' => 职位,
'rating' => 评分
]
2. 医生控制器 (DoctorController)
文件: server/app/api/controller/DoctorController.php
API端点:
GET /api/doctor/lists- 获取医生列表GET /api/doctor/detail- 获取医生详情GET /api/doctor/roster- 获取医生排班
无需登录的端点: lists, detail
前端实现
1. API 服务层
文件: TUICallKit-Vue3/utils/api.js
功能:
- 统一的API请求管理
- 自动添加认证token
- 错误处理
使用示例:
import { doctorApi } from '@/utils/api'
// 获取医生列表
const response = await doctorApi.getDoctorList({
page_no: 1,
page_size: 10
})
2. 首页组件
文件: TUICallKit-Vue3/pages/index/index.vue
功能:
- 古典卷轴风格幻灯片(自动轮播)
- 医生列表展示(动态加载)
- 医生卡片交互(点击跳转)
样式特点:
- 金色卷轴装饰(#d4af37)
- 渐变背景效果
- 响应式布局
- 医生卡片网格展示(2列)
数据库表结构
zyt_admin 表(医生数据来源)
CREATE TABLE `zyt_admin` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) NOT NULL COMMENT '管理员名称',
`account` varchar(50) NOT NULL COMMENT '管理员账号',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像',
`mobile` varchar(20) DEFAULT NULL COMMENT '手机号',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`role_id` int(11) DEFAULT NULL COMMENT '角色ID(1=医生)',
`disable` tinyint(1) DEFAULT '0' COMMENT '是否禁用(0=否,1=是)',
`create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
`update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
`delete_time` int(10) unsigned DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_role_id` (`role_id`),
KEY `idx_disable` (`disable`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';
la_doctor_roster 表(医生排班)
CREATE TABLE `la_doctor_roster` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`doctor_id` int(11) NOT NULL COMMENT '医生ID',
`date` date NOT NULL COMMENT '日期',
`period` varchar(20) NOT NULL COMMENT '时段(morning/afternoon)',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(1-出诊 2-停诊 3-休息 4-请假)',
`quota` int(11) DEFAULT '0' COMMENT '号源数',
`max_patients` int(11) DEFAULT '0' COMMENT '最大接诊数',
`create_time` int(11) NOT NULL COMMENT '创建时间',
`update_time` int(11) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_doctor_date_period` (`doctor_id`,`date`,`period`),
KEY `idx_date` (`date`),
KEY `idx_doctor` (`doctor_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='医生排班表';
配置说明
后端配置
- 确保
zyt_admin表中有医生记录(role_id = 1) - 医生的
disable字段应为 0 - 医生的
avatar字段应包含完整的URL或相对路径
前端配置
- 创建
.env文件(参考.env.example):
VUE_APP_API_URL=http://your-api-domain/api
- 或在
utils/api.js中直接修改API_BASE_URL
使用流程
1. 后端准备
# 确保医生数据已添加到 zyt_admin 表
# 示例SQL:
INSERT INTO zyt_admin (name, account, avatar, mobile, email, role_id, disable, create_time)
VALUES ('张医生', 'doctor1', 'http://example.com/avatar.jpg', '13800138000', 'doctor@example.com', 1, 0, UNIX_TIMESTAMP());
2. 前端使用
首页会自动:
- 加载医生列表
- 展示医生卡片
- 支持点击跳转到挂号页面
测试
运行测试脚本
php server/test_doctor_api.php
手动测试
- 获取医生列表:
GET http://localhost:8000/api/doctor/lists?page_no=1&page_size=10
- 获取医生详情:
GET http://localhost:8000/api/doctor/detail?id=1
- 获取医生排班:
GET http://localhost:8000/api/doctor/roster?doctor_id=1&date=2024-03-11
扩展功能
1. 添加医生专科和职位
修改 DoctorLogic.php:
// 从科室表获取专科
$doctor['specialty'] = Dept::find($doctor['dept_id'])->name ?? '医生';
// 从职位表获取职位
$doctor['title'] = Jobs::find($doctor['jobs_id'])->name ?? '医生';
2. 添加医生评分
// 从评价表计算平均评分
$doctor['rating'] = DoctorRating::where('doctor_id', $doctor['id'])
->avg('rating') ?? '4.8';
3. 添加医生简介
// 从医生表获取简介
$doctor['introduction'] = DoctorInfo::where('doctor_id', $doctor['id'])
->value('introduction') ?? '';
4. 添加在线状态
// 检查医生是否在线
$doctor['is_online'] = DoctorSession::where('doctor_id', $doctor['id'])
->where('expire_time', '>', time())
->exists();
常见问题
Q: 医生列表为空?
A:
- 检查
zyt_admin表中是否有role_id = 1的记录 - 检查医生的
disable字段是否为 0 - 检查API是否正确返回数据
Q: 头像无法显示?
A:
- 确保
avatar字段包含完整的URL - 检查图片服务器是否可访问
- 检查CORS配置
Q: 如何修改医生信息?
A:
- 在后台管理系统中编辑医生信息
- 或直接修改
zyt_admin表
Q: 如何添加新医生?
A:
- 在后台管理系统中创建新管理员
- 设置
role_id = 1(医生角色) - 设置
disable = 0(启用)
相关文件清单
后端文件
server/app/api/logic/DoctorLogic.php- 医生逻辑层server/app/api/controller/DoctorController.php- 医生控制器server/test_doctor_api.php- API测试脚本
前端文件
TUICallKit-Vue3/utils/api.js- API服务层TUICallKit-Vue3/pages/index/index.vue- 首页组件TUICallKit-Vue3/.env.example- 环境配置示例
文档文件
DOCTOR_API_GUIDE.md- API接口文档DOCTOR_FEATURE_IMPLEMENTATION.md- 本文件
下一步
- 根据实际需求扩展医生信息字段
- 添加医生搜索和筛选功能
- 实现医生评价和评分系统
- 添加医生在线状态显示
- 实现医生排班查询功能