模块化单体:**Spring Boot 3 + MyBatis-Plus + Sa-Token**,管理前端 Vue3 + Vite + Element Plus。数据库脚本在 backend/src/main/resources/db/migration/,**需自行在 MySQL 中按 V1、V2… 顺序手动执行**。小程序端由其他团队对接 /api 契约。
appointment)sa-token.alone-redis,默认库索引 1)会话与 token 持久化走 sa-token-alone-redis,与业务侧将来可能使用的 spring.data.redis 互不影响。
| 环境变量 | 说明 | 默认 |
|---|---|---|
SATOKEN_REDIS_HOST |
Redis 地址 | 127.0.0.1 |
SATOKEN_REDIS_PORT |
端口 | 6379 |
SATOKEN_REDIS_PASSWORD |
密码(无则留空) | 空 |
SATOKEN_REDIS_DATABASE |
逻辑库(建议单独给 token) | 1 |
本地可执行:docker compose up -d redis(见仓库根目录 docker-compose.yml)。
cd backend
# 修改 src/main/resources/application.yml 中数据源
# 首次部署请在库 appointment 中手动执行 db/migration 下 SQL(按版本号顺序)
mvn spring-boot:run
http://localhost:8080/apihttp://localhost:8080/swagger-ui/index.html| 端 | 路径前缀 | 认证方式 | 说明 |
|---|---|---|---|
| 平台管理后台 | /api/auth/login、除 /api/mini/** 外的受保护接口 |
sys_user 用户名+密码(BCrypt) |
与小程序密码**不共用** |
| 微信小程序 | /api/mini/auth/login、/api/mini/** |
wx.login 的 js_code + 手机号按钮的 phoneCode → 服务端 code2session、**access_token**、**getuserphonenumber** |
分 访客 / 员工(loginIntent);WECHAT_MINI_STUB=false 且配置 app-id/secret 时走真微信 |
mp_user 中写入 user_type=EMPLOYEE、**dept_id**、**dept_leader_flag**(0/1,是否部门负责人)及与微信一致的手机号;与 sys_user 无任何绑定(由运维 SQL 或后续管理功能维护)。loginIntent=VISITOR 时若无记录会自动注册为访客。Authorization,但**不可混用**(分别由 StpUtil 与 StpLogic("mini") 校验)。小程序登录请求体示例:{ "wxCode": "<wx.login>", "phoneCode": "<getPhoneNumber 回调 e.detail.code>", "loginIntent": "VISITOR" }。
V1__init.sql 等脚本中的种子数据)| 用户 | 密码 | 说明 |
|---|---|---|
| admin | password | 管理员 |
| handler | password | 经办人(一级审批) |
| leader | password | 部门负责人(二级)+ 经办角色 |
密码哈希为常见测试值(
password),**生产环境必须重置**。
cd frontend-admin
npm install
npm run dev
浏览器访问 http://localhost:5173,登录后走 Vite 代理调用后端。
com.sinata.appointment*ApplicationService,审批编排见 ApprovalEngineServiceResult / ResultUtil;实体基类:BaseEntity