feat: 通用授权后台、离线证、Waffo 支付页与仪表盘加强
支持多产品计划展示、LICOFF 离线签发、支付独立配置与调试,以及分析看板;同步更新 README 与集成文档。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
0966375076
commit
8cc2c83f9d
41 files changed
+3177
-332
No files matched your search
@@ -1,117 +1,91 @@
|
||||
# opsx-licence
|
||||
|
||||
许可证(License)管理服务器 Web 版 —— 基于 Go (Gin) + Vue 3 的单体全栈应用。
|
||||
通用许可证(License)管理服务器 —— Go (Gin) + Vue 3 单体全栈,面向 Web / PC / 移动等多端产品。
|
||||
|
||||
## 项目简介
|
||||
线上示例:https://l123.91ai.io/
|
||||
|
||||
opsx-licence 是一个统一的授权验证与管理服务,提供许可证的生成、验证、激活、机器绑定、心跳等核心能力,并支持产品定价、订单购买、防重复购买与支付回调。
|
||||
## 能力概览
|
||||
|
||||
技术栈与工程结构参考 [opsx-web-lite](../opsx-web-lite),业务领域参考 Licence 服务器 Web版。
|
||||
| 模块 | 说明 |
|
||||
|------|------|
|
||||
| 产品 / 计划 / 客户 | 多产品 SKU;计划显示「体验 / 包年 / 永久」并带所属产品 |
|
||||
| 在线 License | `LIC-…`,座位激活、心跳、吊销 |
|
||||
| 离线 License | `LICOFF-…`,绑 device_id,最长 365 天,**不可续期(到期重签)** |
|
||||
| 订单 / Waffo | create-session + webhook 对账;管理端「支付」页配置与调试 |
|
||||
| 仪表盘 | 总数 / 过期 / 在线设备 / 增长 / 收入 / 产品与地理·平台分布 |
|
||||
|
||||
详细模型见 [docs/licensing-model.md](docs/licensing-model.md);Waffo 闭环见 [docs/waffo-integration.md](docs/waffo-integration.md)。
|
||||
|
||||
## 技术栈
|
||||
|
||||
### 后端
|
||||
- **语言/框架**:Go 1.24 + Gin
|
||||
- **ORM**:GORM(默认 SQLite,支持 MySQL / PostgreSQL)
|
||||
- **认证**:JWT(HS256)+ bcrypt
|
||||
- **架构**:4 层分层(controller → service → dto → model),按业务域分包
|
||||
|
||||
### 前端
|
||||
- **框架**:Vue 3.4 + Vite
|
||||
- **UI**:Element Plus
|
||||
- **状态/路由**:Pinia + Vue Router 4
|
||||
- **图表**:ECharts
|
||||
|
||||
### 部署
|
||||
- 单二进制:前端通过 `//go:embed` 打包进 Go 二进制,一个文件即可部署
|
||||
- **后端**:Go 1.24 + Gin + GORM(默认 SQLite,可 MySQL / PostgreSQL)
|
||||
- **前端**:Vue 3.4 + Vite + Element Plus + ECharts(`//go:embed` 打进单二进制)
|
||||
- **认证**:JWT + bcrypt
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 环境要求
|
||||
- Go >= 1.24
|
||||
- Node.js >= 20
|
||||
- CGO(SQLite 驱动需要,macOS 自带 gcc)
|
||||
|
||||
### 一键启动(开发模式)
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
./run.sh start
|
||||
./run.sh start # 开发:前端 :5181,后端 :9001
|
||||
# 默认账号 admin / admin(生产请改密码)
|
||||
```
|
||||
|
||||
- 前端:http://localhost:5181
|
||||
- 后端:http://localhost:9001
|
||||
- 默认账号:`admin` / `admin`
|
||||
|
||||
### Docker 部署(生产推荐)
|
||||
### Docker(生产推荐)
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# 修改 JWT_SECRET、Waffo 等
|
||||
./run.sh docker up # 等价于 docker compose up -d --build
|
||||
# 配置 JWT_SECRET、Waffo、OFFLINE_LICENSE_SEED 等
|
||||
./run.sh docker up # 或 ./run.sh docker rebuild
|
||||
./run.sh docker logs
|
||||
./run.sh docker down
|
||||
```
|
||||
|
||||
- 访问:http://localhost:9001(管理后台 + `/api`)
|
||||
- 数据卷:`licence_data` → 容器内 `/data/db.sqlite3`
|
||||
- 数据卷:`licence_data` → `/data/db.sqlite3`
|
||||
|
||||
### 构建单二进制
|
||||
### 单二进制
|
||||
|
||||
```bash
|
||||
./run.sh build
|
||||
./run.sh binary start
|
||||
./run.sh build && ./run.sh binary start
|
||||
```
|
||||
|
||||
## 管理端菜单
|
||||
|
||||
- **授权管理**:产品、客户、在线 License、离线 License
|
||||
- **定价与订单**:定价计划、订单
|
||||
- **支付**:Waffo 集成(商户 / Store / 可扩展 Product ID 映射 / 测试连接)
|
||||
- **审计与设置**:操作日志、系统设置
|
||||
|
||||
## 客户端契约(公开 API)
|
||||
|
||||
前缀 `/api/v1`(无需管理 JWT):
|
||||
|
||||
- `POST /license/activate|verify|deactivate|heartbeat`
|
||||
- `POST /checkout`、`POST /orders`、`POST /purchase/claim`
|
||||
- `POST /webhooks/waffo`、`GET /purchase/success`
|
||||
|
||||
桌面端默认 API Base:`https://l123.91ai.io/api`(可用 `OPSX_LICENSE_API_BASE` 覆盖)。
|
||||
|
||||
## 常用命令
|
||||
|
||||
| 命令 | 说明 |
|
||||
|---|---|
|
||||
| `make dev` / `./run.sh start` | 启动前后端开发服务 |
|
||||
| `make build` / `./run.sh build` | 构建嵌入前端的单二进制 |
|
||||
| `./run.sh stop` | 停止服务 |
|
||||
| `./run.sh status` | 查看服务状态 |
|
||||
| `make clean` | 清理构建产物 |
|
||||
|------|------|
|
||||
| `./run.sh start` / `make dev` | 开发模式 |
|
||||
| `./run.sh build` / `make build` | 构建嵌入前端的二进制 |
|
||||
| `./run.sh docker rebuild` | 重建并滚动升级容器 |
|
||||
| `./run.sh stop` / `status` | 停止 / 查看状态 |
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
opsx-licence/
|
||||
├── backend/ # Go 后端
|
||||
│ ├── main.go # 入口
|
||||
│ ├── embed.go # 前端嵌入
|
||||
│ ├── config/ # 配置
|
||||
│ ├── database/ # 数据库初始化 + 种子数据
|
||||
│ ├── middleware/ # 中间件(auth / cors)
|
||||
│ ├── router/ # 路由
|
||||
│ ├── utils/ # 工具(jwt / password)
|
||||
│ └── internal/ # 业务分层
|
||||
│ ├── controller/ # HTTP 处理层
|
||||
│ ├── service/ # 业务逻辑层
|
||||
│ ├── dto/ # 请求/响应结构
|
||||
│ └── model/ # 数据模型
|
||||
├── frontend/ # Vue 前端
|
||||
│ └── src/
|
||||
│ ├── api/ # 接口封装
|
||||
│ ├── stores/ # Pinia 状态
|
||||
│ ├── router/ # 路由
|
||||
│ ├── layouts/ # 布局
|
||||
│ └── views/ # 页面
|
||||
├── Makefile
|
||||
├── run.sh # 启动脚本
|
||||
├── backend/ # Go API + embed 前端
|
||||
├── frontend/ # Vue 管理后台
|
||||
├── docs/ # 授权模型 / Waffo 集成说明
|
||||
├── docker-compose.yml
|
||||
├── run.sh
|
||||
└── .env.example
|
||||
```
|
||||
|
||||
## 业务域(规划)
|
||||
|
||||
| 模块 | 说明 | 状态 |
|
||||
|---|---|---|
|
||||
| 认证 (Auth) | 管理员登录、JWT | ✅ |
|
||||
| 核心授权 | 产品 / 客户 / License / 激活 | 🚧 规划中 |
|
||||
| 定价订单 | Plan / Order / 支付网关 | 🚧 规划中 |
|
||||
| 防重复购买 | 客户权益 / 幂等回调 | 🚧 规划中 |
|
||||
| 分析审计 | Dashboard / Analytics / AuditLog | 🚧 规划中 |
|
||||
|
||||
## 作者
|
||||
|
||||
Logan.Li
|
||||
Reference in new issue
Block a user