系统架构
技术栈
蝉印诊所管家采用前后端分离的现代化架构,使用业界主流的技术栈构建。
后端技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| PHP | 8.4+ | 核心编程语言 |
| Laravel | 12.x | PHP Web 应用框架 |
| MySQL | 8.0+ | 关系型数据库 |
| Redis | 7.0+ | 缓存和会话存储 |
| JWT | - | API 认证机制 |
前端技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Vue | 3.4+ | 渐进式 JavaScript 框架 |
| TypeScript | 5.3+ | JavaScript 的超集 |
| Vite | 5.0+ | 前端构建工具 |
| Element Plus | 2.8+ | Vue 3 组件库 |
| Pinia | 2.1+ | Vue 状态管理 |
架构设计
整体架构图
┌─────────────────────────────────────────────────────────┐
│ 前端应用层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 管理后台 │ │ 移动端 H5 │ │ 小程序 │ │ 第三方集成││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────────────┘
│ HTTPS/REST API
┌─────────────────────────────────────────────────────────┐
│ API 网关层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 认证鉴权 │ │ 限流控制 │ │ 日志追踪 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ 业务服务层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 客户管理 │ │ 预约系统 │ │ ERP 管理 │ │ 数据分析 ││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘│
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ 权限管理 │ │ 消息通知 │ │ 文件存储 │ │ 第三方 API││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ 数据持久层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ MySQL │ │ Redis │ │ OSS │ │ Queue ││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘│
└─────────────────────────────────────────────────────────┘多租户架构
系统采用共享数据库 + 租户隔离的多租户架构模式:
PHP
// 所有业务表都包含 tenant_id 字段
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('tenant_id')->index();
$table->string('name');
// ... 其他字段
$table->timestamps();
$table->foreign('tenant_id')
->references('id')
->on('tenants')
->onDelete('cascade');
});租户隔离机制:
- 全局 Scope 自动过滤租户数据
- 中间件验证租户权限
- 租户级别的配置隔离
- 独立的数据备份和恢复
目录结构
后端目录结构
yiliaocrm-api/
├── app/
│ ├── Http/
│ │ ├── Controllers/ # 控制器
│ │ ├── Middleware/ # 中间件
│ │ └── Requests/ # 表单验证
│ ├── Models/ # 数据模型
│ ├── Services/ # 业务逻辑层
│ ├── Repositories/ # 数据访问层
│ └── Exceptions/ # 异常处理
├── config/ # 配置文件
├── database/
│ ├── migrations/ # 数据库迁移
│ ├── seeders/ # 数据填充
│ └── factories/ # 模型工厂
├── routes/
│ ├── api.PHP # API 路由
│ └── web.PHP # Web 路由
├── storage/ # 存储目录
├── tests/ # 测试文件
└── composer.json # 依赖管理前端目录结构
yiliaocrm-admin/
├── src/
│ ├── api/ # API 接口
│ ├── assets/ # 静态资源
│ ├── components/ # 公共组件
│ ├── composables/ # 组合式函数
│ ├── layouts/ # 布局组件
│ ├── router/ # 路由配置
│ ├── stores/ # 状态管理
│ ├── styles/ # 样式文件
│ ├── utils/ # 工具函数
│ ├── views/ # 页面组件
│ ├── App.Vue # 根组件
│ └── main.ts # 入口文件
├── public/ # 公共资源
├── package.json # 依赖管理
└── vite.config.ts # Vite 配置核心模块
1. 认证授权模块
- JWT Token 认证:无状态的 API 认证
- RBAC 权限模型:角色 - 权限 - 资源三层模型
- 多因素认证:支持短信、邮箱验证码
- 单点登录:支持 OAuth2.0 第三方登录
2. 客户管理模块
- 客户信息管理:完整的客户档案
- 客户分组标签:灵活的分类体系
- 跟进记录:完整的沟通历史
- 客户画像:数据驱动的用户洞察
3. 预约系统模块
- 预约排程:智能时间管理
- 自动提醒:短信 / 微信 / 邮件通知
- 爽约管理:黑名单和信用评分
- 资源调度:医生、房间、设备统一管理
4. ERP 管理模块
- 库存管理:进销存一体化
- 财务管理:收支账目清晰
- 报表分析:多维度数据分析
- 供应链管理:供应商和采购管理
数据库设计
核心表结构
sql
-- 租户表
tenants
- id
- name
- domain
- config (JSON)
- status
- expired_at
-- 用户表
users
- id
- tenant_id
- username
- email
- phone
- password
- status
-- 客户表
customers
- id
- tenant_id
- name
- phone
- email
- source
- tags (JSON)
- profile (JSON)
-- 预约表
appointments
- id
- tenant_id
- customer_id
- service_id
- doctor_id
- scheduled_at
- status
- notes详细的数据库设计请参考 数据库设计文档。
性能优化
数据库优化
- 索引优化:为常用查询字段添加索引
- 查询优化:使用 Eager Loading 减少 N+1 查询
- 分表分库:大表水平分割
- 读写分离:主从复制提高读性能
缓存策略
PHP
// Redis 缓存示例
Cache::remember('customer_stats', 3600, function () {
return DB::table('customers')
->selectRaw('COUNT(*) as total, status')
->groupBy('status')
->get();
});前端优化
- 路由懒加载:按需加载页面组件
- 组件缓存:使用 keep-alive 缓存组件
- 图片优化:懒加载和 WebP 格式
- CDN 加速:静态资源 CDN 分发
安全机制
API 安全
- HTTPS 加密:全站 HTTPS 传输
- 请求签名:防止篡改和重放攻击
- 频率限制:防止 API 滥用
- SQL 注入防护:参数化查询
数据安全
- 敏感数据加密:手机号、身份证加密存储
- 访问控制:细粒度的权限控制
- 操作日志:完整的审计追踪
- 数据备份:定期自动备份
扩展性
插件机制
系统支持通过插件扩展功能:
PHP
// 插件示例
class WechatPlugin implements PluginInterface
{
public function boot()
{
// 注册路由、服务等
}
public function install()
{
// 执行安装逻辑
}
}API 开放平台
提供标准的 REST API 供第三方集成:
- API 文档:完整的 OpenAPI/Swagger 文档
- SDK 支持:PHP、JavaScript、Python SDK
- Webhook:事件驱动的数据同步
- OAuth2:标准的授权流程