refactor(backend): 更新数据库配置并迁移至MySQL,优化文档和技术栈描述
This commit is contained in:
@@ -4,8 +4,12 @@ PORT=3000
|
||||
HOST=0.0.0.0
|
||||
|
||||
# 数据库配置
|
||||
MONGODB_URI=mongodb://localhost:27017/jiebanke
|
||||
MONGODB_URI_TEST=mongodb://localhost:27017/jiebanke_test
|
||||
DB_HOST=localhost
|
||||
DB_PORT=3306
|
||||
DB_USER=root
|
||||
DB_PASSWORD=your-mysql-password
|
||||
DB_NAME=jiebandata
|
||||
DB_NAME_TEST=jiebandata_test
|
||||
|
||||
# JWT配置
|
||||
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
|
||||
@@ -30,6 +34,11 @@ REDIS_HOST=localhost
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# MySQL连接池配置
|
||||
DB_CONNECTION_LIMIT=10
|
||||
DB_CHARSET=utf8mb4
|
||||
DB_TIMEZONE=+08:00
|
||||
|
||||
# 第三方API配置
|
||||
MAP_API_KEY=your-map-api-key
|
||||
SMS_API_KEY=your-sms-api-key
|
||||
|
||||
@@ -6,12 +6,15 @@ const config = {
|
||||
// 开发环境
|
||||
development: {
|
||||
port: process.env.PORT || 3100,
|
||||
mongodb: {
|
||||
uri: process.env.MONGODB_URI || 'mongodb://localhost:27017/jiebanke_dev',
|
||||
options: {
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true
|
||||
}
|
||||
mysql: {
|
||||
host: process.env.DB_HOST || '192.168.0.240',
|
||||
port: process.env.DB_PORT || 3306,
|
||||
user: process.env.DB_USER || 'root',
|
||||
password: process.env.DB_PASSWORD || 'aiotAiot123!',
|
||||
database: process.env.DB_NAME || 'jiebandata',
|
||||
connectionLimit: 10,
|
||||
charset: 'utf8mb4',
|
||||
timezone: '+08:00'
|
||||
},
|
||||
jwt: {
|
||||
secret: process.env.JWT_SECRET || 'dev-jwt-secret-key-2024',
|
||||
@@ -36,12 +39,15 @@ const config = {
|
||||
// 测试环境
|
||||
test: {
|
||||
port: process.env.PORT || 3100,
|
||||
mongodb: {
|
||||
uri: process.env.MONGODB_URI || 'mongodb://localhost:27017/jiebanke_test',
|
||||
options: {
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true
|
||||
}
|
||||
mysql: {
|
||||
host: process.env.DB_HOST || '192.168.0.240',
|
||||
port: process.env.DB_PORT || 3306,
|
||||
user: process.env.DB_USER || 'root',
|
||||
password: process.env.DB_PASSWORD || 'aiotAiot123!',
|
||||
database: process.env.DB_NAME || 'jiebandata_test',
|
||||
connectionLimit: 5,
|
||||
charset: 'utf8mb4',
|
||||
timezone: '+08:00'
|
||||
},
|
||||
jwt: {
|
||||
secret: process.env.JWT_SECRET || 'test-jwt-secret-key-2024',
|
||||
@@ -57,12 +63,15 @@ const config = {
|
||||
// 生产环境
|
||||
production: {
|
||||
port: process.env.PORT || 3100,
|
||||
mongodb: {
|
||||
uri: process.env.MONGODB_URI,
|
||||
options: {
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true
|
||||
}
|
||||
mysql: {
|
||||
host: process.env.DB_HOST || '129.211.213.226',
|
||||
port: process.env.DB_PORT || 9527,
|
||||
user: process.env.DB_USER || 'root',
|
||||
password: process.env.DB_PASSWORD || 'aiotAiot123!',
|
||||
database: process.env.DB_NAME || 'jiebandata',
|
||||
connectionLimit: 20,
|
||||
charset: 'utf8mb4',
|
||||
timezone: '+08:00'
|
||||
},
|
||||
jwt: {
|
||||
secret: process.env.JWT_SECRET,
|
||||
|
||||
@@ -8,7 +8,10 @@
|
||||
"dev": "nodemon src/server.js",
|
||||
"test": "jest",
|
||||
"lint": "eslint src/**/*.js",
|
||||
"migrate": "node src/utils/migrate.js"
|
||||
"migrate": "node src/utils/migrate.js",
|
||||
"init-test-data": "node scripts/init-test-data.js",
|
||||
"test-api": "node scripts/test-api-endpoints.js",
|
||||
"test-db": "node scripts/test-database-connection.js"
|
||||
},
|
||||
"keywords": [
|
||||
"mini-program",
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
const mysql = require('mysql2/promise');
|
||||
const config = require('./env');
|
||||
|
||||
// 数据库配置
|
||||
const dbConfig = {
|
||||
host: process.env.DB_HOST || '129.211.213.226',
|
||||
port: process.env.DB_PORT || 9527,
|
||||
user: process.env.DB_USER || 'root',
|
||||
password: process.env.DB_PASSWORD || 'aiotAiot123!',
|
||||
password: process.env.DB_PASSWORD || 'Aiot123',
|
||||
database: process.env.DB_NAME || 'jiebandata',
|
||||
connectionLimit: 10,
|
||||
charset: 'utf8mb4',
|
||||
timezone: '+08:00',
|
||||
connectionLimit: process.env.DB_CONNECTION_LIMIT || 10,
|
||||
charset: process.env.DB_CHARSET || 'utf8mb4',
|
||||
timezone: process.env.DB_TIMEZONE || '+08:00',
|
||||
// 连接池配置
|
||||
waitForConnections: true,
|
||||
queueLimit: 0,
|
||||
// 超时配置
|
||||
connectTimeout: 10000, // 10秒连接超时
|
||||
acquireTimeout: 10000, // 10秒获取连接超时
|
||||
timeout: 10000 // 10秒查询超时
|
||||
connectTimeout: 10000 // 10秒连接超时
|
||||
};
|
||||
|
||||
// 创建连接池
|
||||
|
||||
@@ -43,34 +43,34 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
## 📋 核心接口
|
||||
|
||||
### 用户认证
|
||||
- `POST /auth/register` - 用户注册
|
||||
- `POST /auth/login` - 用户登录
|
||||
- `POST /auth/wechat-login` - 微信登录
|
||||
- `GET /auth/me` - 获取当前用户信息
|
||||
- `POST /api/v1/auth/register` - 用户注册
|
||||
- `POST /api/v1/auth/login` - 用户登录
|
||||
- `POST /api/v1/auth/wechat-login` - 微信登录
|
||||
- `GET /api/v1/auth/me` - 获取当前用户信息
|
||||
|
||||
### 旅行服务
|
||||
- `POST /travel/plans` - 创建旅行计划
|
||||
- `GET /travel/plans` - 获取旅行计划列表
|
||||
- `GET /travel/matches` - 匹配旅行伙伴
|
||||
- `POST /api/v1/travel/plans` - 创建旅行计划
|
||||
- `GET /api/v1/travel/plans` - 获取旅行计划列表
|
||||
- `GET /api/v1/travel/matches` - 匹配旅行伙伴
|
||||
|
||||
### 动物认领
|
||||
- `GET /animals` - 获取可认领动物列表
|
||||
- `POST /animals/{id}/claim` - 认领动物
|
||||
- `GET /animals/claims` - 获取认领记录
|
||||
- `GET /api/v1/animals` - 获取可认领动物列表
|
||||
- `POST /api/v1/animals/{id}/claim` - 认领动物
|
||||
- `GET /api/v1/animals/claims` - 获取认领记录
|
||||
|
||||
### 商家服务
|
||||
- `POST /merchants/register` - 商家注册
|
||||
- `POST /merchants/products` - 发布商品/服务
|
||||
- `GET /merchants/orders` - 获取商家订单
|
||||
- `POST /api/v1/merchants/register` - 商家注册
|
||||
- `POST /api/v1/merchants/products` - 发布商品/服务
|
||||
- `GET /api/v1/merchants/orders` - 获取商家订单
|
||||
|
||||
### 推广奖励
|
||||
- `GET /promotion/link` - 获取推广链接
|
||||
- `GET /promotion/stats` - 获取推广数据
|
||||
- `POST /promotion/withdraw` - 申请提现
|
||||
- `GET /api/v1/promotion/link` - 获取推广链接
|
||||
- `GET /api/v1/promotion/stats` - 获取推广数据
|
||||
- `POST /api/v1/promotion/withdraw` - 申请提现
|
||||
|
||||
### 官网接口
|
||||
- `POST /website/merchant/apply` - 提交商家入驻申请
|
||||
- `GET /website/cases` - 获取成功案例列表
|
||||
- `POST /api/v1/website/merchant/apply` - 提交商家入驻申请
|
||||
- `GET /api/v1/website/cases` - 获取成功案例列表
|
||||
|
||||
## 🎯 响应格式
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
## 2. 系统架构
|
||||
|
||||
### 2.1 技术栈
|
||||
- **前端**: Vue 3 + TypeScript + Element Plus
|
||||
- **后端**: Spring Boot + MySQL + Redis
|
||||
- **前端**: Vue 3 + TypeScript + Ant Design Vue
|
||||
- **后端**: Node.js + Express + MySQL + Redis
|
||||
- **认证**: JWT + RBAC权限控制
|
||||
- **部署**: Docker + Nginx
|
||||
|
||||
|
||||
@@ -2,12 +2,16 @@
|
||||
|
||||
## 基础信息
|
||||
|
||||
**Base URL**: `http://localhost:3000/api/v1`
|
||||
**Base URL**: `http://localhost:3100/api/v1`
|
||||
|
||||
**认证方式**: Bearer Token (JWT)
|
||||
|
||||
**响应格式**: JSON
|
||||
|
||||
**API版本**: v1
|
||||
|
||||
**开发状态**: 开发中
|
||||
|
||||
## 响应格式
|
||||
|
||||
### 成功响应
|
||||
@@ -34,6 +38,19 @@
|
||||
}
|
||||
```
|
||||
|
||||
## 通用状态码
|
||||
|
||||
| 状态码 | 说明 |
|
||||
|--------|------|
|
||||
| 200 | 请求成功 |
|
||||
| 201 | 创建成功 |
|
||||
| 400 | 请求参数错误 |
|
||||
| 401 | 未授权访问 |
|
||||
| 403 | 权限不足 |
|
||||
| 404 | 资源不存在 |
|
||||
| 429 | 请求过于频繁 |
|
||||
| 500 | 服务器内部错误 |
|
||||
|
||||
## 认证接口
|
||||
|
||||
### 1. 用户注册
|
||||
@@ -94,26 +111,6 @@
|
||||
}
|
||||
```
|
||||
|
||||
### 2.1 微信登录
|
||||
|
||||
**Endpoint**: `POST /auth/wechat-login`
|
||||
|
||||
**描述**: 微信授权登录
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"code": "string, required, 微信授权码",
|
||||
"userInfo": {
|
||||
"nickName": "string, optional, 微信昵称",
|
||||
"avatarUrl": "string, optional, 微信头像",
|
||||
"gender": "number, optional, 性别(0:未知,1:男,2:女)"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应**: 同登录接口
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
@@ -139,7 +136,83 @@
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 微信登录
|
||||
### 3. 获取当前用户信息
|
||||
|
||||
**Endpoint**: `GET /auth/me`
|
||||
|
||||
**认证**: 需要Bearer Token
|
||||
|
||||
**描述**: 获取当前登录用户信息
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"data": {
|
||||
"user": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"points": 1000,
|
||||
"level": 3,
|
||||
"balance": 500.00,
|
||||
"travel_count": 5,
|
||||
"animal_adopt_count": 2,
|
||||
"flower_order_count": 3,
|
||||
"status": "active",
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"updated_at": "2025-01-01T00:00:00.000Z",
|
||||
"last_login_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 更新用户信息
|
||||
|
||||
**Endpoint**: `PUT /auth/profile`
|
||||
|
||||
**认证**: 需要Bearer Token
|
||||
|
||||
**描述**: 更新用户个人信息
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"nickname": "string, optional, 昵称",
|
||||
"avatar": "string, optional, 头像URL",
|
||||
"gender": "string, optional, 性别(male/female/other)",
|
||||
"birthday": "string, optional, 生日(YYYY-MM-DD)"
|
||||
}
|
||||
```
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "用户信息更新成功",
|
||||
"data": {
|
||||
"user": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "新昵称",
|
||||
"avatar": "https://example.com/new-avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"updated_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 微信登录
|
||||
|
||||
**Endpoint**: `POST /auth/wechat-login`
|
||||
|
||||
@@ -157,7 +230,28 @@
|
||||
}
|
||||
```
|
||||
|
||||
**响应**: 同登录接口
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "微信登录成功",
|
||||
"data": {
|
||||
"user": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"points": 100,
|
||||
"level": 2,
|
||||
"status": "active",
|
||||
"last_login_at": "2025-01-01T00:00:00.000Z"
|
||||
},
|
||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 获取当前用户信息
|
||||
|
||||
@@ -197,21 +291,21 @@
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 更新用户信息
|
||||
### 6. 更新用户信息
|
||||
|
||||
## 管理员接口
|
||||
**Endpoint**: `PUT /auth/profile`
|
||||
|
||||
### 6. 管理员登录
|
||||
**认证**: 需要Bearer Token
|
||||
|
||||
**Endpoint**: `POST /auth/admin/login`
|
||||
|
||||
**描述**: 管理员登录获取访问令牌
|
||||
**描述**: 更新用户个人信息
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"username": "string, required, 管理员用户名",
|
||||
"password": "string, required, 密码"
|
||||
"nickname": "string, optional, 昵称",
|
||||
"avatar": "string, optional, 头像URL",
|
||||
"gender": "string, optional, 性别(male/female/other)",
|
||||
"birthday": "string, optional, 生日(YYYY-MM-DD)"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -220,36 +314,215 @@
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "登录成功",
|
||||
"message": "用户信息更新成功",
|
||||
"data": {
|
||||
"user": {
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"email": "admin@jiebanke.com",
|
||||
"real_name": "管理员",
|
||||
"avatar": "",
|
||||
"status": "active",
|
||||
"last_login_at": "2025-01-01T00:00:00.000Z"
|
||||
},
|
||||
"roles": [
|
||||
"username": "testuser",
|
||||
"nickname": "新昵称",
|
||||
"avatar": "https://example.com/new-avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"updated_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 用户服务接口
|
||||
|
||||
### 1. 获取用户列表
|
||||
|
||||
**Endpoint**: `GET /users`
|
||||
|
||||
**认证**: 需要Bearer Token
|
||||
|
||||
**描述**: 获取用户列表(管理员权限)
|
||||
|
||||
**查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `username` (可选): 用户名模糊搜索
|
||||
- `status` (可选): 状态过滤
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"data": {
|
||||
"users": [
|
||||
{
|
||||
"id": 2,
|
||||
"name": "admin",
|
||||
"description": "普通管理员"
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"points": 100,
|
||||
"level": 2,
|
||||
"status": "active",
|
||||
"created_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"permissions": [
|
||||
"user:manage",
|
||||
"content:review",
|
||||
"content:publish",
|
||||
"data:view",
|
||||
"data:export"
|
||||
],
|
||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
"pagination": {
|
||||
"total": 100,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 获取用户详情
|
||||
|
||||
**Endpoint**: `GET /users/{id}`
|
||||
|
||||
**认证**: 需要Bearer Token
|
||||
|
||||
**描述**: 获取指定用户的详细信息
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"data": {
|
||||
"user": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"points": 1000,
|
||||
"level": 3,
|
||||
"balance": 500.00,
|
||||
"travel_count": 5,
|
||||
"animal_adopt_count": 2,
|
||||
"flower_order_count": 3,
|
||||
"status": "active",
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"updated_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 8. 管理员接口
|
||||
|
||||
### 8.1 管理员登录
|
||||
- **Endpoint**: POST /api/v1/admin/login
|
||||
- **认证要求**: 无
|
||||
- **描述**: 管理员登录系统
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"username": "admin",
|
||||
"password": "password123"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "登录成功",
|
||||
"data": {
|
||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
"admin": {
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"email": "admin@example.com",
|
||||
"nickname": "超级管理员",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"role": "super_admin",
|
||||
"status": 1,
|
||||
"last_login": "2024-01-15T10:30:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8.2 获取管理员信息
|
||||
- **Endpoint**: GET /api/v1/admin/profile
|
||||
- **认证要求**: Bearer Token
|
||||
- **描述**: 获取当前登录管理员信息
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"email": "admin@example.com",
|
||||
"nickname": "超级管理员",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"role": "super_admin",
|
||||
"status": 1,
|
||||
"last_login": "2024-01-15T10:30:00.000Z",
|
||||
"created_at": "2024-01-01T00:00:00.000Z",
|
||||
"updated_at": "2024-01-15T10:30:00.000Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8.3 更新管理员信息
|
||||
- **Endpoint**: PUT /api/v1/admin/profile
|
||||
- **认证要求**: Bearer Token
|
||||
- **描述**: 更新当前登录管理员信息
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"nickname": "新昵称",
|
||||
"email": "newemail@example.com",
|
||||
"avatar": "https://example.com/new-avatar.jpg"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "更新成功",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"email": "newemail@example.com",
|
||||
"nickname": "新昵称",
|
||||
"avatar": "https://example.com/new-avatar.jpg",
|
||||
"role": "super_admin",
|
||||
"status": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8.4 修改密码
|
||||
- **Endpoint**: PUT /api/v1/admin/password
|
||||
- **认证要求**: Bearer Token
|
||||
- **描述**: 修改当前登录管理员密码
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"old_password": "oldpassword123",
|
||||
"new_password": "newpassword456"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "密码修改成功"
|
||||
}
|
||||
```
|
||||
|
||||
### 7. 获取管理员信息
|
||||
|
||||
**Endpoint**: `GET /auth/admin/me`
|
||||
@@ -293,26 +566,23 @@
|
||||
}
|
||||
```
|
||||
|
||||
### 8. 用户管理接口
|
||||
### 9. 用户管理接口
|
||||
|
||||
#### 8.1 获取用户列表
|
||||
|
||||
**Endpoint**: `GET /admin/users`
|
||||
|
||||
**认证**: 需要Bearer Token,需要user:manage权限
|
||||
|
||||
**查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `username` (可选): 用户名模糊搜索
|
||||
- `user_type` (可选): 用户类型过滤
|
||||
- `status` (可选): 状态过滤
|
||||
|
||||
**响应**:
|
||||
#### 9.1 获取用户列表
|
||||
- **Endpoint**: GET /api/v1/users
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `username` (可选): 用户名模糊搜索
|
||||
- `user_type` (可选): 用户类型过滤
|
||||
- `status` (可选): 状态过滤
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"users": [
|
||||
{
|
||||
@@ -339,20 +609,43 @@
|
||||
}
|
||||
```
|
||||
|
||||
#### 8.2 更新用户状态
|
||||
|
||||
**Endpoint**: `PUT /admin/users/{id}/status`
|
||||
|
||||
**认证**: 需要Bearer Token,需要user:manage权限
|
||||
|
||||
**请求体**:
|
||||
#### 9.2 获取用户详情
|
||||
- **Endpoint**: GET /api/v1/users/{id}
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"status": "string, required, 状态(active/inactive)"
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"user": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"user_type": "farmer",
|
||||
"status": "active",
|
||||
"points": 100,
|
||||
"level": 2,
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"last_login_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应**:
|
||||
#### 9.3 更新用户状态
|
||||
- **Endpoint**: PUT /api/v1/users/{id}/status
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"status": "active"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
@@ -361,25 +654,173 @@
|
||||
}
|
||||
```
|
||||
|
||||
### 9. 内容管理接口
|
||||
|
||||
#### 9.1 获取内容列表
|
||||
|
||||
**Endpoint**: `GET /admin/contents`
|
||||
|
||||
**认证**: 需要Bearer Token,需要content:review权限
|
||||
|
||||
**查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `type` (可选): 内容类型
|
||||
- `status` (可选): 审核状态
|
||||
|
||||
**响应**:
|
||||
#### 9.4 删除用户
|
||||
- **Endpoint**: DELETE /api/v1/users/{id}
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "用户删除成功"
|
||||
}
|
||||
```
|
||||
|
||||
### 10. 系统管理接口
|
||||
|
||||
#### 10.1 获取系统信息
|
||||
- **Endpoint**: GET /api/v1/admin/system/info
|
||||
- **认证要求**: Bearer Token,需要system:view权限
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"system": {
|
||||
"version": "1.0.0",
|
||||
"node_version": "v18.17.0",
|
||||
"platform": "linux",
|
||||
"arch": "x64",
|
||||
"uptime": 123456,
|
||||
"memory_usage": {
|
||||
"total": 17179869184,
|
||||
"used": 8589934592,
|
||||
"free": 8589934592
|
||||
},
|
||||
"cpu_usage": 25.5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 10.2 获取系统服务列表
|
||||
- **Endpoint**: GET /api/v1/admin/system/services
|
||||
- **认证要求**: Bearer Token,需要system:manage权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `type` (可选): 服务类型(database/cache/mq)
|
||||
- `status` (可选): 服务状态(running/stopped)
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"services": [
|
||||
{
|
||||
"id": "mysql",
|
||||
"name": "MySQL数据库",
|
||||
"type": "database",
|
||||
"status": "running",
|
||||
"host": "localhost",
|
||||
"port": 3306,
|
||||
"description": "主数据库服务",
|
||||
"created_at": "2024-01-01T00:00:00.000Z",
|
||||
"updated_at": "2024-01-15T10:30:00.000Z"
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 5,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 10.3 更新服务状态
|
||||
- **Endpoint**: PUT /api/v1/admin/system/services/{id}/status
|
||||
- **认证要求**: Bearer Token,需要system:manage权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"status": "stopped"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "服务状态更新成功"
|
||||
}
|
||||
```
|
||||
|
||||
#### 10.4 获取系统配置
|
||||
- **Endpoint**: GET /api/v1/admin/system/configs
|
||||
- **认证要求**: Bearer Token,需要system:config权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `group` (可选): 配置分组
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"configs": [
|
||||
{
|
||||
"id": "site_name",
|
||||
"name": "网站名称",
|
||||
"value": "结伴客",
|
||||
"type": "string",
|
||||
"group": "basic",
|
||||
"description": "网站显示名称",
|
||||
"created_at": "2024-01-01T00:00:00.000Z",
|
||||
"updated_at": "2024-01-15T10:30:00.000Z"
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 10,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 10.5 更新系统配置
|
||||
- **Endpoint**: PUT /api/v1/admin/system/configs/{id}
|
||||
- **认证要求**: Bearer Token,需要system:config权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"value": "新网站名称"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "配置更新成功"
|
||||
}
|
||||
```
|
||||
|
||||
### 11. 内容管理接口
|
||||
|
||||
#### 11.1 获取内容列表
|
||||
- **Endpoint**: GET /admin/contents
|
||||
- **认证要求**: Bearer Token,需要content:review权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `type` (可选): 内容类型
|
||||
- `status` (可选): 审核状态
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"contents": [
|
||||
{
|
||||
|
||||
@@ -4,35 +4,100 @@
|
||||
|
||||
### 1.1 架构图
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "客户端层"
|
||||
A[微信小程序 uni-app]
|
||||
B[后台管理系统 Vue 3 + Ant Design]
|
||||
C[官网系统 HTML5 + Bootstrap]
|
||||
end
|
||||
|
||||
subgraph "接入层"
|
||||
D[Express API Gateway]
|
||||
end
|
||||
|
||||
subgraph "应用服务层"
|
||||
E[认证服务]
|
||||
F[用户服务]
|
||||
G[旅行服务]
|
||||
H[动物服务]
|
||||
I[订单服务]
|
||||
J[管理员服务]
|
||||
end
|
||||
|
||||
subgraph "基础设施层"
|
||||
K[MySQL 数据库]
|
||||
L[Redis 缓存]
|
||||
M[RabbitMQ 消息队列]
|
||||
N[文件存储]
|
||||
end
|
||||
|
||||
subgraph "监控运维层"
|
||||
O[Swagger API 文档]
|
||||
P[Winston 日志系统]
|
||||
Q[健康检查监控]
|
||||
end
|
||||
|
||||
A --> D
|
||||
B --> D
|
||||
C --> D
|
||||
D --> E
|
||||
D --> F
|
||||
D --> G
|
||||
D --> H
|
||||
D --> I
|
||||
D --> J
|
||||
|
||||
E --> K
|
||||
F --> K
|
||||
G --> K
|
||||
H --> K
|
||||
I --> K
|
||||
J --> K
|
||||
|
||||
E --> L
|
||||
F --> L
|
||||
G --> L
|
||||
|
||||
I --> M
|
||||
|
||||
E --> N
|
||||
F --> N
|
||||
H --> N
|
||||
|
||||
D --> O
|
||||
D --> P
|
||||
D --> Q
|
||||
```
|
||||
|
||||
**系统架构层次说明:**
|
||||
|
||||
**1. 客户端层**
|
||||
- **微信小程序**: 基于uni-app开发,提供用户端功能
|
||||
- **后台管理系统**: 基于Vue.js 3 + Ant Design开发,提供管理功能
|
||||
- **后台管理系统**: 基于Vue.js 3 + TypeScript + Ant Design Vue + Pinia开发,提供管理功能
|
||||
- **官网系统**: 基于HTML5 + Bootstrap开发,提供企业宣传功能
|
||||
|
||||
**2. 接入层**
|
||||
- **API网关**: 基于Nginx + Node.js,提供统一的API接入和路由分发
|
||||
- **API网关**: 基于Express.js框架,提供统一的API接入、路由分发、安全防护和请求处理,所有API路径前缀为`/api/v1`
|
||||
|
||||
**3. 应用服务层**
|
||||
- **认证服务**: 用户身份认证和权限管理
|
||||
- **用户服务**: 用户信息管理和个人中心功能
|
||||
- **旅行服务**: 旅行计划创建、查询和匹配功能
|
||||
- **动物服务**: 动物信息管理和认领功能
|
||||
- **商家服务**: 商家认证、商品和服务管理
|
||||
- **支付服务**: 支付处理和交易管理
|
||||
- **推广服务**: 推广活动和奖励管理
|
||||
- **认证服务**: 用户身份认证、JWT令牌管理和权限控制
|
||||
- **用户服务**: 用户信息管理、个人中心功能和用户统计
|
||||
- **旅行服务**: 旅行计划创建、查询、匹配和管理功能
|
||||
- **动物服务**: 动物信息管理、认领流程和动物统计
|
||||
- **订单服务**: 订单创建、支付处理和交易管理
|
||||
- **管理员服务**: 管理员权限管理和系统配置
|
||||
|
||||
**4. 基础设施层**
|
||||
- **MySQL数据库**: 主从复制架构,存储核心业务数据
|
||||
- **Redis缓存**: 集群模式,提供高性能缓存服务
|
||||
- **RabbitMQ消息队列**: 异步消息处理和解耦
|
||||
- **对象存储**: 腾讯云COS,存储图片和文件资源
|
||||
- **MySQL数据库**: 单实例架构,存储核心业务数据,使用连接池优化性能(测试环境: 192.168.0.240:3306,生产环境: 129.211.213.226:9527)
|
||||
- **Redis缓存**: 单实例模式,提供会话管理和数据缓存服务
|
||||
- **RabbitMQ消息队列**: 异步消息处理和解耦(待实现)
|
||||
- **文件存储**: 本地文件系统,存储用户上传的图片和文件资源
|
||||
|
||||
**5. 监控运维层**
|
||||
- **监控系统**: Prometheus + Grafana,系统性能监控
|
||||
- **日志系统**: ELK Stack,日志收集和分析
|
||||
- **CI/CD**: Jenkins + Docker,持续集成和部署
|
||||
- **Swagger API文档**: 自动生成的API接口文档
|
||||
- **Winston日志系统**: 结构化日志记录和分析
|
||||
- **健康检查监控**: 系统状态监控和性能统计
|
||||
|
||||
**架构连接关系:**
|
||||
- 所有客户端通过API网关访问后端服务
|
||||
@@ -274,52 +339,36 @@
|
||||
## 2. 技术栈选型
|
||||
|
||||
### 2.1 后端技术栈
|
||||
API服务: Node.js + Express.js + TypeScript + RESTful API
|
||||
数据库: MySQL 8.0 (包含RBAC权限管理表结构)
|
||||
缓存系统: Redis Cluster
|
||||
消息队列: RabbitMQ(用于异步处理)
|
||||
文件存储: 腾讯云对象存储
|
||||
实时通信: WebSocket(用于实时通知和聊天功能)
|
||||
API文档: Swagger + OpenAPI 3.0
|
||||
权限管理: JWT + RBAC (基于角色的访问控制)
|
||||
### 2.2 前端技术栈
|
||||
|
||||
#### 微信小程序技术栈
|
||||
- **开发框架**: uni-app
|
||||
- **开发语言**: JavaScript/TypeScript
|
||||
- **UI框架**: WeUI
|
||||
- **状态管理**: Redux
|
||||
- **构建工具**: Webpack
|
||||
- **包管理**: npm/yarn
|
||||
| 技术组件 | 版本 | 用途 | 选型理由 |
|
||||
|---------|------|------|----------|
|
||||
| Node.js | >=16.0.0 | 运行时环境 | 高性能、异步I/O、丰富的生态系统 |
|
||||
| Express.js | ^4.18.2 | Web框架 | 轻量级、灵活、中间件生态丰富 |
|
||||
| MySQL2 | ^3.14.3 | 数据库驱动 | 支持Promise、连接池、性能优化 |
|
||||
| JWT | ^9.0.2 | 身份认证 | 无状态、安全、易于分布式部署 |
|
||||
| bcryptjs | ^2.4.3 | 密码加密 | 安全性高、性能适中 |
|
||||
| Redis | ^5.8.2 | 缓存/会话 | 内存存储、高性能、支持数据结构 |
|
||||
| RabbitMQ | ^0.10.9 | 消息队列 | 异步处理、系统解耦(待实现) |
|
||||
| Swagger | ^6.2.8 | API文档 | 自动化文档、接口测试 |
|
||||
| Winston | ^3.11.0 | 日志系统 | 结构化日志、多传输方式 |
|
||||
|
||||
#### 后台管理系统技术栈 (Vue.js 3 + TypeScript + Ant Design Vue + Pinia)
|
||||
- **核心框架**: Vue.js 3.3.0 (Composition API + `<script setup>`语法)
|
||||
- **开发语言**: TypeScript 5.0.0 (严格模式 + 完整类型系统)
|
||||
- **UI组件库**: Ant Design Vue 4.0.0 (企业级UI设计规范)
|
||||
- **状态管理**: Pinia 2.1.0 (轻量级、类型安全的Vue状态管理)
|
||||
- **路由管理**: Vue Router 4.x (支持TypeScript的类型安全路由)
|
||||
- **构建工具**: Vite 4.x (快速的开发服务器和热重载)
|
||||
- **包管理**: npm/yarn
|
||||
- **代码规范**: ESLint + Prettier (统一的代码风格和质量)
|
||||
- **测试框架**: Vitest + Vue Test Utils (单元测试和组件测试)
|
||||
### 2.2 安全防护
|
||||
|
||||
### 2.3 官网技术栈
|
||||
- 核心技术:HTML5 + Bootstrap
|
||||
- 开发语言:JavaScript
|
||||
- 构建工具:Webpack
|
||||
- 包管理:npm/yarn
|
||||
| 安全组件 | 版本 | 防护类型 |
|
||||
|----------|------|----------|
|
||||
| Helmet | ^7.1.0 | 安全头部 |
|
||||
| express-rate-limit | ^7.1.5 | 请求限流 |
|
||||
| xss-clean | ^0.1.4 | XSS防护 |
|
||||
| hpp | ^0.2.3 | 参数污染防护 |
|
||||
| express-mongo-sanitize | ^2.2.0 | NoSQL注入防护 |
|
||||
|
||||
### 2.3 数据库选型
|
||||
- 主数据库:MySQL 5.7
|
||||
- 权限管理:RBAC模型 (包含roles、permissions、role_permissions、user_roles表)
|
||||
### 2.3 前端技术栈
|
||||
|
||||
### 2.4 缓存选型
|
||||
- 分布式缓存:Redis Cluster
|
||||
- 本地缓存:Node.js内置缓存
|
||||
|
||||
### 2.5 消息队列选型
|
||||
- 消息中间件:RabbitMQ
|
||||
- 实时消息推送:WebSocket
|
||||
| 项目 | 技术栈 | 状态 |
|
||||
|------|--------|------|
|
||||
| 微信小程序 | uni-app + Vue 2 | 开发中 |
|
||||
| 后台管理系统 | Vue 3 + TypeScript + Ant Design Vue + Pinia | 开发中 |
|
||||
| 官网系统 | HTML5 + Bootstrap + JavaScript | 待开发 |
|
||||
|
||||
### 2.6 选型理由与对比分析
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
- **用户名**: root
|
||||
- **密码**: aiotAiot123!
|
||||
- **数据库**: jiebandata
|
||||
|
||||
**注意**: 管理员默认账号为 admin,默认密码为 admin123
|
||||
## 1. 数据库设计
|
||||
|
||||
### 1.1 ER图
|
||||
|
||||
@@ -148,10 +148,10 @@
|
||||
### 2.2 前端开发工时
|
||||
|
||||
#### 2.2.1 基础框架搭建 (10人日)
|
||||
- 微信小程序基础框架搭建: 4人日
|
||||
- 微信小程序基础框架搭建 (uni-app): 4人日
|
||||
- UI组件库集成: 2人日
|
||||
- 状态管理配置: 2人日
|
||||
- 网络请求封装: 2人日
|
||||
- 状态管理配置 (Pinia): 2人日
|
||||
- 网络请求封装 (axios): 2人日
|
||||
|
||||
#### 2.2.2 用户端功能开发 (25人日)
|
||||
- 用户登录/注册页面: 3人日
|
||||
@@ -169,7 +169,7 @@
|
||||
- 评价管理页面: 3人日
|
||||
|
||||
#### 2.2.4 管理员后台功能开发 (25人日)
|
||||
- 管理员登录页面: 2人日
|
||||
- 管理员登录页面 (Vue 3 + Ant Design): 2人日
|
||||
- 用户管理页面: 5人日
|
||||
- 内容管理页面: 5人日
|
||||
- 数据统计页面: 6人日
|
||||
|
||||
@@ -96,8 +96,8 @@
|
||||
#### 商家用户功能
|
||||
- 通过官网了解平台商业模式和收益机制
|
||||
- 查看商家合作政策和入驻流程
|
||||
- 在线提交商家入驻申请
|
||||
- 查看商家成功案例和收益数据
|
||||
- 在线提交商家入驻申请(API: POST /api/v1/website/merchant/apply)
|
||||
- 查看商家成功案例和收益数据(API: GET /api/v1/website/cases)
|
||||
|
||||
## 3. 用户故事
|
||||
|
||||
|
||||
@@ -177,14 +177,14 @@ async function initializeDatabase(config) {
|
||||
`, '插入示例管理员数据');
|
||||
|
||||
// 验证数据插入
|
||||
const [users] = await new Promise((resolve, reject) => {
|
||||
const usersResult = await new Promise((resolve, reject) => {
|
||||
connection.query('SELECT COUNT(*) as count FROM users', (err, results) => {
|
||||
if (err) reject(err);
|
||||
else resolve(results);
|
||||
});
|
||||
});
|
||||
|
||||
console.log(`✅ 数据库初始化完成!用户表中有 ${users[0].count} 条记录`);
|
||||
console.log(`✅ 数据库初始化完成!用户表中有 ${usersResult[0].count} 条记录`);
|
||||
|
||||
return { success: true, message: '数据库初始化成功' };
|
||||
|
||||
@@ -202,31 +202,17 @@ async function main() {
|
||||
console.log('🎯 结伴客系统数据库初始化工具');
|
||||
console.log('='.repeat(60));
|
||||
|
||||
const results = [];
|
||||
|
||||
for (const config of configs) {
|
||||
const result = await initializeDatabase(config);
|
||||
results.push({
|
||||
environment: config.name,
|
||||
success: result.success,
|
||||
message: result.message || result.error
|
||||
});
|
||||
console.log('\n' + '='.repeat(60));
|
||||
// 直接使用生产环境配置
|
||||
const config = configs[1]; // 生产环境配置
|
||||
const result = await initializeDatabase(config);
|
||||
if (result.success) {
|
||||
console.log('\n🎉 数据库初始化成功!');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
// 输出汇总结果
|
||||
console.log('📋 初始化结果汇总:');
|
||||
results.forEach(result => {
|
||||
console.log(`${result.environment}: ${result.success ? '✅ 成功' : '❌ 失败'} - ${result.message}`);
|
||||
});
|
||||
|
||||
// 检查是否所有环境都成功
|
||||
const allSuccess = results.every(result => result.success);
|
||||
if (allSuccess) {
|
||||
console.log('\n🎉 所有环境数据库初始化成功!');
|
||||
} else {
|
||||
console.log('\n⚠️ 部分环境初始化失败,请检查网络连接和数据库权限');
|
||||
}
|
||||
console.log('\n' + '='.repeat(60));
|
||||
console.log('❌ 数据库初始化失败,请检查网络连接和数据库配置');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// 运行初始化
|
||||
|
||||
@@ -12,19 +12,21 @@
|
||||
"build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@dcloudio/uni-app": "^3.4.19",
|
||||
"@dcloudio/uni-components": "^3.4.19",
|
||||
"@dcloudio/uni-h5": "^3.4.19",
|
||||
"@dcloudio/uni-mp-weixin": "^3.4.19",
|
||||
"@dcloudio/uni-app": "3.0.0-alpha-4080120250820001",
|
||||
"@dcloudio/uni-cli-i18n": "^2.0.2-alpha-4080120250820001",
|
||||
"@dcloudio/uni-components": "3.0.0-alpha-4080120250820001",
|
||||
"@dcloudio/uni-h5": "3.0.0-alpha-4080120250820001",
|
||||
"@dcloudio/uni-mp-weixin": "3.0.0-alpha-4080120250820001",
|
||||
"@dcloudio/webpack-uni-pages-loader": "^2.0.2-alpha-4080120250820001",
|
||||
"vue": "^3.2.0",
|
||||
"vuex": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@dcloudio/types": "^3.4.19",
|
||||
"@dcloudio/uni-cli-shared": "^3.4.19",
|
||||
"@dcloudio/uni-migration": "^3.4.19",
|
||||
"@dcloudio/uni-template-compiler": "^3.4.19",
|
||||
"@dcloudio/vue-cli-plugin-uni": "^3.4.19",
|
||||
"@dcloudio/types": "3.4.19",
|
||||
"@dcloudio/uni-cli-shared": "3.0.0-alpha-4080120250820001",
|
||||
"@dcloudio/uni-migration": "2.0.2-alpha-4080120250820001",
|
||||
"@dcloudio/uni-template-compiler": "2.0.2-alpha-4080120250820001",
|
||||
"@dcloudio/vue-cli-plugin-uni": "2.0.2-alpha-4080120250820001",
|
||||
"@vue/cli-service": "^5.0.0",
|
||||
"cross-env": "^7.0.0",
|
||||
"sass": "^1.32.0",
|
||||
@@ -36,4 +38,4 @@
|
||||
"not dead",
|
||||
"not ie 11"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user