Sistema de gestión de miembros QingSi
GitHub通用会员管理系统 - 适用于美业、美容、美发、美甲、按摩、瑜伽、培训、宠物等行业,收银、会员、预约、报表一站式解决方案。
Ayuda y Soporte: Este proyecto es completamente de código abierto y gratuito. Puedes descargarlo y desplegarlo por tu cuenta. Para desarrollo personalizado o soporte técnico profesional, no dudes en contactarme.
QingSi 会员管理系统
简单高效,管理不用愁,经营更省心
适用于:美业、美容、美发、美甲、按摩、瑜伽、培训、宠物等行业的会员管理系统。
[!TIP] 新版本推荐:MMS · 通用会员管理 SaaS
沿用本项目的全部业务逻辑,使用 Go 后端 + 全新 UI 重构,面向多店 / 多租户 SaaS 场景。 单店本地部署仍推荐继续使用 QingSi;需要云端、多门店、跨平台或更现代化界面的,请移步 MMS。
在线 SaaS 版本即将上线,不方便自行部署的可以直接注册免费使用,敬请关注 MMS 仓库动态。
功能
| 模块 | 功能 |
|---|---|
| 收银台 | 快速结算、多支付方式、会员卡支付、智能多卡组合、价格调整 |
| 会员管理 | 会员档案、办卡充值、余额查询、挂账管理、消费记录 |
| 预约管理 | 用户端在线预约、状态追踪、微信通知推送 |
| 营业报表 | 营业概览、支付统计、项目排行、生日提醒、沉睡会员 |
| 系统设置 | 服务项目、卡类型、员工管理、交易撤销 |
界面预览
收银结算

左侧选会员、加服务,右侧自动按卡折扣计算实付金额并实时预览支付方案。
会员管理

会员档案、卡数量、余额、挂账、注册时间一行看清。

会员详情抽屉:基本信息、会员卡、挂账记录全在一处。
预约排期

按当日 / 当周 / 当月查看预约,状态变更即时生效。
营业报表

营业概览、支付统计、项目排行、生日提醒、沉睡会员、挂账明细,每个 tab 都是独立查询。
系统设置

服务项目、会员卡类型、员工等基础数据集中维护。

撤销日志记录每次退单的余额还原与操作人,含余额快照供审计。
顾客自助预约

通过专属访问码进入,无需登录即可下单预约,店内通过微信公众号收到通知。
登录

支持图形验证码与"信任此设备 7 天免登录"。
技术栈
- 前端:Vue 3 + Element Plus + Vite + Pinia
- 后端:Node.js + Fastify + Prisma
- 数据库:MySQL
- 部署:Docker Compose
快速开始
1. 克隆项目
git clone https://github.com/zhaojiannet/QingSi.git
cd QingSi
2. 配置环境变量
cp backend/app/.env.example backend/app/.env
编辑 backend/app/.env:
JWT_SECRET=your-jwt-secret-here
SESSION_SECRET=your-session-secret-here
ADMIN_USERNAME=admin@yourdomain.com
ADMIN_PASSWORD=your-secure-password-here
DATABASE_URL=mysql://user:password@localhost:3306/database
生成密钥:openssl rand -hex 64
3. 启动服务
docker network create docker-net # 如不存在
docker-compose up -d
4. 访问
品牌定制
编辑 frontend/app/src/config/app.js:
export default {
brandName: '青丝', // 店铺名称
industryType: '美业', // 可选:美业、美容、美发、美甲、按摩、瑜伽、培训、宠物
systemName: '会员管理系统',
slogan: '简单高效,管理不用愁,经营更省心',
logo: '/images/logo.png',
};
行业类型对应背景图:
| industryType | 背景图 |
|---|---|
| 美业 | login_bg01.jpg |
| 美容 | login_bg02.jpg |
| 美发 | login_bg03.jpg |
| 美甲 | login_bg04.jpg |
| 按摩 | login_bg05.jpg |
| 瑜伽 | login_bg06.jpg |
| 培训 | login_bg07.jpg |
| 宠物 | login_bg08.jpg |
图片位于 frontend/app/public/images/ 目录。
微信通知推送
支持通过微信公众号推送预约通知。
配置步骤
申请微信公众号测试号:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo
创建模板消息,内容如下:
姓名:{{name.DATA}}
电话:{{phone.DATA}}
时间:{{time.DATA}}
项目:{{services.DATA}}
员工:{{staff.DATA}}
留言:{{message.DATA}}
注意:不要使用
notes或remark作为字段名,这是微信保留字段,不会显示。
部署 Cloudflare Worker(文件在
cloudflare-workers/目录)配置环境变量:
WXPUSH_URL=https://your-worker.workers.dev/wxsend
WXPUSH_TOKEN=your-api-token
版本升级
已在运行旧版本?详细升级步骤见 docs/UPGRADING.md。 包含 P0 安全修复、数据迁移、Refresh Token 强制下线、回滚预案等。
主要破坏性变更(须按顺序处理)
db push→migrate deploy:docker-compose.yml启动 command 已切换; 开发改 schema 必须先prisma migrate diff生成迁移文件,禁止再用db push- Refresh Token 改 SHA256 入库:升级后 DB 内的旧明文 token 全部失效,
所有用户需重新登录一次(强制清空
RefreshToken表) - 后端时间响应改回 ISO:之前的 onSend hook 把 ISO 时间转成本地化字符串,
已删除。前端在显示层用
Intl.DateTimeFormat({ timeZone })格式化(已自动适配) - Card.id trigger 移除:DB 层的 6 位 ID 检查 trigger 已删除,应用层
validateCardIdFormat接受 6-8 位(历史 6 位保留 + 新生成 8 位)
数据模型变更
| 变更 | 详情 |
|---|---|
新增 TransactionCardLink 表 |
多卡支付的结构化关联(取代 notes 字段 regex 解析) |
Card 删除 2 个单列索引 |
balance 和 isCustomCard(低基数,被复合索引覆盖) |
nanoid 长度 6 → 8 |
新生成 ID 8 位;历史 6 位 ID 完全保留可读可写 |
生产部署
Docker 部署
同"快速开始"。
传统部署(nginx + Node.js)
前端:
cd frontend/app
pnpm install && pnpm build
# 将 dist/ 上传到 nginx 静态目录
后端:
cd backend/app
pnpm install --prod
npx prisma generate
pm2 start src/server.js --name qingsi
nginx 配置:
server {
listen 80;
server_name your-domain.com;
location / {
root /var/www/qingsi/dist;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
开发
docker-compose up # 启动
docker-compose logs -f backend # 查看日志
# 进入容器
docker exec -it qingsi_backend sh
npx prisma studio # 数据库可视化
node init-admin.js # 重置管理员
项目结构
QingSi/
├── backend/app/
│ ├── src/routes/ # API 路由
│ ├── prisma/ # 数据模型
│ └── .env.example
├── frontend/app/
│ └── src/
│ ├── views/ # 页面
│ ├── components/ # 组件
│ └── config/ # 配置
└── docker-compose.yml