Skip to content

系统架构

技术栈

蝉印诊所管家采用前后端分离的现代化架构,使用业界主流的技术栈构建。

后端技术栈

技术版本说明
PHP8.4+核心编程语言
Laravel12.xPHP Web 应用框架
MySQL8.0+关系型数据库
Redis7.0+缓存和会话存储
JWT-API 认证机制

前端技术栈

技术版本说明
Vue3.4+渐进式 JavaScript 框架
TypeScript5.3+JavaScript 的超集
Vite5.0+前端构建工具
Element Plus2.8+Vue 3 组件库
Pinia2.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:标准的授权流程

相关文档

最后更新于: