更新文件结构,统一文档格式
This commit is contained in:
@@ -92,9 +92,9 @@ cp admin-system/.env.example admin-system/.env
|
||||
|
||||
## 🌐 访问地址
|
||||
|
||||
- **后端API**: http://localhost:3000
|
||||
- **后台管理**: http://localhost:3001
|
||||
- **官方网站**: http://localhost:3002
|
||||
- **后端API**: https://api.jiebanke.com
|
||||
- **后台管理**: https://admin.jiebanke.com
|
||||
- **官方网站**: https://www.jiebanke.com
|
||||
- **小程序**: 使用微信开发者工具打开 `mini-program/` 目录
|
||||
|
||||
## 📦 依赖管理
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
NODE_ENV=development
|
||||
|
||||
# API配置
|
||||
VITE_API_BASE_URL=http://localhost:3100/api/v1
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_API_TIMEOUT=30000
|
||||
|
||||
# 功能开关
|
||||
|
||||
@@ -86,7 +86,7 @@ docker-compose up mysql redis rabbitmq
|
||||
**.env.development** (开发环境):
|
||||
```
|
||||
VITE_APP_TITLE=结伴客后台管理系统(开发)
|
||||
VITE_API_BASE_URL=http://localhost:3000
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_APP_VERSION=dev
|
||||
```
|
||||
|
||||
@@ -130,8 +130,8 @@ environment:
|
||||
## 健康检查
|
||||
|
||||
系统提供健康检查端点:
|
||||
- 前端: `http://localhost:80/health`
|
||||
- 后端: `http://localhost:3000/health`
|
||||
- 前端: `https://admin.jiebanke.com/health`
|
||||
- 后端: `https://api.jiebanke.com/health`
|
||||
|
||||
## 监控和日志
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ npm run preview
|
||||
### 开发环境 (.env.development)
|
||||
```env
|
||||
NODE_ENV=development
|
||||
VITE_API_BASE_URL=http://localhost:3000/api/v1
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_FEATURE_DEBUG=true
|
||||
```
|
||||
|
||||
@@ -238,7 +238,7 @@ const getUsers = async () => {
|
||||
### 开发环境部署
|
||||
1. 安装依赖: `npm install`
|
||||
2. 启动开发服务器: `npm run dev`
|
||||
3. 访问: http://localhost:3001
|
||||
3. 访问: https://admin.jiebanke.com
|
||||
|
||||
### 生产环境部署
|
||||
1. 构建项目: `npm run build`
|
||||
|
||||
@@ -14,7 +14,7 @@ services:
|
||||
networks:
|
||||
- jiebanke-network
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:80/health"]
|
||||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "https://admin.jiebanke.com/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
server_name admin.jiebanke.com;
|
||||
|
||||
# 静态文件服务
|
||||
location / {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { message } from 'ant-design-vue'
|
||||
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
|
||||
|
||||
// API基础配置
|
||||
const baseURL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:3100/api'
|
||||
const baseURL = import.meta.env.VITE_API_BASE_URL || 'https://api.jiebanke.com/api'
|
||||
const timeout = parseInt(import.meta.env.VITE_API_TIMEOUT || '10000')
|
||||
|
||||
// 创建axios实例
|
||||
|
||||
@@ -39,7 +39,7 @@ export const useMerchantStore = defineStore('merchant', () => {
|
||||
businessLicense: '1234567890',
|
||||
contactPerson: '张老板',
|
||||
contactPhone: '13800138001',
|
||||
contactEmail: 'flower@example.com',
|
||||
contactEmail: 'flower@jiebanke.com',
|
||||
address: '北京市朝阳区',
|
||||
description: '专业鲜花销售',
|
||||
status: 'active',
|
||||
@@ -58,7 +58,7 @@ export const useMerchantStore = defineStore('merchant', () => {
|
||||
businessLicense: '0987654321',
|
||||
contactPerson: '李农场主',
|
||||
contactPhone: '13900139001',
|
||||
contactEmail: 'farm@example.com',
|
||||
contactEmail: 'farm@jiebanke.com',
|
||||
address: '上海市浦东新区',
|
||||
description: '动物认领和农场体验',
|
||||
status: 'active',
|
||||
@@ -107,7 +107,7 @@ export const useMerchantStore = defineStore('merchant', () => {
|
||||
businessLicense: `LICENSE${merchantId}`,
|
||||
contactPerson: '联系人',
|
||||
contactPhone: '13800138000',
|
||||
contactEmail: `merchant${merchantId}@example.com`,
|
||||
contactEmail: `merchant${merchantId}@jiebanke.com`,
|
||||
address: '地址',
|
||||
description: '商家描述',
|
||||
status: 'active',
|
||||
|
||||
@@ -31,7 +31,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
nickname: '用户1',
|
||||
avatar: '',
|
||||
phone: '13800138000',
|
||||
email: 'user1@example.com',
|
||||
email: 'user1@jiebanke.com',
|
||||
status: 'active',
|
||||
registerTime: '2024-01-01 10:00:00',
|
||||
lastLoginTime: '2024-01-15 15:30:00',
|
||||
@@ -43,7 +43,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
nickname: '商家1',
|
||||
avatar: '',
|
||||
phone: '13900139000',
|
||||
email: 'merchant1@example.com',
|
||||
email: 'merchant1@jiebanke.com',
|
||||
status: 'active',
|
||||
registerTime: '2024-01-02 09:00:00',
|
||||
lastLoginTime: '2024-01-14 14:20:00',
|
||||
@@ -76,7 +76,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
nickname: `用户${userId}`,
|
||||
avatar: '',
|
||||
phone: '13800138000',
|
||||
email: `user${userId}@example.com`,
|
||||
email: `user${userId}@jiebanke.com`,
|
||||
status: 'active',
|
||||
registerTime: '2024-01-01 10:00:00',
|
||||
lastLoginTime: '2024-01-15 15:30:00',
|
||||
|
||||
@@ -27,7 +27,7 @@ export default defineConfig({
|
||||
port: 3150,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://localhost:3100',
|
||||
target: 'https://api.jiebanke.com',
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api/, '/api/v1')
|
||||
}
|
||||
|
||||
@@ -26,13 +26,13 @@ PROD_DB_PASSWORD=aiotAiot123!
|
||||
PROD_DB_NAME=jiebandata
|
||||
|
||||
# Redis配置
|
||||
REDIS_HOST=localhost
|
||||
REDIS_HOST=redis.jiebanke.com
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_DB=0
|
||||
|
||||
# RabbitMQ配置
|
||||
RABBITMQ_HOST=localhost
|
||||
RABBITMQ_HOST=rabbitmq.jiebanke.com
|
||||
RABBITMQ_PORT=5672
|
||||
RABBITMQ_USERNAME=guest
|
||||
RABBITMQ_PASSWORD=guest
|
||||
|
||||
@@ -4,7 +4,7 @@ PORT=3000
|
||||
HOST=0.0.0.0
|
||||
|
||||
# 数据库配置
|
||||
DB_HOST=localhost
|
||||
DB_HOST=mysql.jiebanke.com
|
||||
DB_PORT=3306
|
||||
DB_USER=root
|
||||
DB_PASSWORD=your-mysql-password
|
||||
@@ -30,7 +30,7 @@ SMTP_USER=your-email@gmail.com
|
||||
SMTP_PASS=your-email-password
|
||||
|
||||
# Redis配置(可选)
|
||||
REDIS_HOST=localhost
|
||||
REDIS_HOST=redis.jiebanke.com
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ cp .env.example .env
|
||||
|
||||
2. 编辑 `.env` 文件,配置你的环境变量:
|
||||
```env
|
||||
MONGODB_URI=mongodb://localhost:27017/jiebanke
|
||||
MONGODB_URI=mongodb://mongodb.jiebanke.com:27017/jiebanke
|
||||
JWT_SECRET=your-super-secret-jwt-key
|
||||
```
|
||||
|
||||
@@ -81,7 +81,7 @@ Content-Type: application/json
|
||||
"username": "testuser",
|
||||
"password": "password123",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"email": "test@jiebanke.com",
|
||||
"phone": "13800138000"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -39,7 +39,7 @@ npm install
|
||||
|
||||
```env
|
||||
# 数据库配置
|
||||
DB_HOST=localhost
|
||||
DB_HOST=mysql.jiebanke.com
|
||||
DB_PORT=3306
|
||||
DB_USER=root
|
||||
DB_PASSWORD=your-mysql-password
|
||||
@@ -188,7 +188,7 @@ docker-compose up -d mysql
|
||||
2. **配置本地环境变量**
|
||||
```bash
|
||||
# 使用本地Docker MySQL
|
||||
export DB_HOST=localhost
|
||||
export DB_HOST=mysql.jiebanke.com
|
||||
export DB_PORT=3306
|
||||
export DB_PASSWORD=rootpassword
|
||||
export DB_DATABASE=jiebanke_dev
|
||||
|
||||
@@ -22,7 +22,7 @@ const config = {
|
||||
refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '30d'
|
||||
},
|
||||
redis: {
|
||||
host: process.env.REDIS_HOST || 'localhost',
|
||||
host: process.env.REDIS_HOST || 'redis.jiebanke.com',
|
||||
port: process.env.REDIS_PORT || 6379,
|
||||
password: process.env.REDIS_PASSWORD || ''
|
||||
},
|
||||
@@ -31,7 +31,7 @@ const config = {
|
||||
allowedTypes: ['image/jpeg', 'image/png', 'image/gif']
|
||||
},
|
||||
cors: {
|
||||
origin: process.env.CORS_ORIGIN || 'http://localhost:9000',
|
||||
origin: process.env.CORS_ORIGIN || 'https://www.jiebanke.com',
|
||||
credentials: true
|
||||
}
|
||||
},
|
||||
|
||||
@@ -16,7 +16,7 @@ services:
|
||||
- ./scripts/init-database.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "mysql.jiebanke.com", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
|
||||
@@ -53,8 +53,8 @@ INSERT INTO admins (username, password, email, role) VALUES
|
||||
|
||||
-- 插入测试用户账号
|
||||
INSERT INTO users (username, password, email, phone, real_name, id_card, balance, credit_score) VALUES
|
||||
('user1', '$2b$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'user1@example.com', '13800138001', '张三', '110101199001011234', 1000.00, 95),
|
||||
('user2', '$2b$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'user2@example.com', '13800138002', '李四', '110101199002022345', 500.00, 85);
|
||||
('user1', '$2b$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'user1@jiebanke.com', '13800138001', '张三', '110101199001011234', 1000.00, 95),
|
||||
('user2', '$2b$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'user2@jiebanke.com', '13800138002', '李四', '110101199002022345', 500.00, 85);
|
||||
|
||||
-- 创建索引
|
||||
CREATE INDEX idx_admins_username ON admins(username);
|
||||
|
||||
@@ -11,7 +11,7 @@ const config = require('../config/env');
|
||||
|
||||
// 数据库配置
|
||||
const dbConfig = {
|
||||
host: process.env.DB_HOST || 'localhost',
|
||||
host: process.env.DB_HOST || 'mysql.jiebanke.com',
|
||||
port: process.env.DB_PORT || 3306,
|
||||
user: process.env.DB_USER || 'root',
|
||||
password: process.env.DB_PASSWORD || '',
|
||||
@@ -44,7 +44,7 @@ const testData = {
|
||||
{
|
||||
username: 'user1',
|
||||
password: 'user123',
|
||||
email: 'user1@example.com',
|
||||
email: 'user1@jiebanke.com',
|
||||
nickname: '旅行爱好者',
|
||||
avatar: null,
|
||||
user_type: '普通用户',
|
||||
@@ -53,7 +53,7 @@ const testData = {
|
||||
{
|
||||
username: 'merchant1',
|
||||
password: 'merchant123',
|
||||
email: 'merchant1@example.com',
|
||||
email: 'merchant1@jiebanke.com',
|
||||
nickname: '农家乐老板',
|
||||
avatar: null,
|
||||
user_type: '商家',
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
const axios = require('axios');
|
||||
|
||||
// API配置
|
||||
const API_BASE_URL = process.env.API_BASE_URL || 'http://localhost:3100';
|
||||
const API_BASE_URL = process.env.API_BASE_URL || 'https://api.jiebanke.com';
|
||||
const API_VERSION = process.env.API_VERSION || '/api/v1';
|
||||
|
||||
// 测试用例
|
||||
|
||||
@@ -31,7 +31,7 @@ app.use(helmet());
|
||||
app.use(cors({
|
||||
origin: process.env.NODE_ENV === 'production'
|
||||
? ['https://your-domain.com']
|
||||
: ['http://localhost:9000', 'http://localhost:3000', 'http://localhost:3100', 'http://localhost:3150'],
|
||||
: ['https://www.jiebanke.com', 'https://admin.jiebanke.com', 'https://api.jiebanke.com'],
|
||||
credentials: true
|
||||
}));
|
||||
|
||||
@@ -79,7 +79,7 @@ app.use('/uploads', express.static('uploads'));
|
||||
// Swagger文档路由
|
||||
if (process.env.NODE_ENV === 'development' || process.env.ENABLE_SWAGGER === 'true') {
|
||||
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
|
||||
console.log('📚 Swagger文档已启用: http://localhost:3100/api-docs');
|
||||
console.log('📚 Swagger文档已启用: https://api.jiebanke.com/api-docs');
|
||||
}
|
||||
|
||||
// 健康检查路由
|
||||
|
||||
@@ -11,7 +11,7 @@ class RabbitMQConfig {
|
||||
|
||||
// 获取连接URL
|
||||
getConnectionUrl() {
|
||||
const host = process.env.RABBITMQ_HOST || 'localhost';
|
||||
const host = process.env.RABBITMQ_HOST || 'rabbitmq.jiebanke.com';
|
||||
const port = process.env.RABBITMQ_PORT || 5672;
|
||||
const username = process.env.RABBITMQ_USERNAME || 'guest';
|
||||
const password = process.env.RABBITMQ_PASSWORD || 'guest';
|
||||
@@ -165,7 +165,7 @@ class RabbitMQConfig {
|
||||
|
||||
return {
|
||||
status: 'healthy',
|
||||
host: process.env.RABBITMQ_HOST || 'localhost',
|
||||
host: process.env.RABBITMQ_HOST || 'rabbitmq.jiebanke.com',
|
||||
port: process.env.RABBITMQ_PORT || 5672,
|
||||
connected: this.isConnected
|
||||
};
|
||||
@@ -173,7 +173,7 @@ class RabbitMQConfig {
|
||||
return {
|
||||
status: 'unhealthy',
|
||||
error: error.message,
|
||||
host: process.env.RABBITMQ_HOST || 'localhost',
|
||||
host: process.env.RABBITMQ_HOST || 'rabbitmq.jiebanke.com',
|
||||
port: process.env.RABBITMQ_PORT || 5672,
|
||||
connected: false
|
||||
};
|
||||
|
||||
@@ -10,7 +10,7 @@ class RedisConfig {
|
||||
createClient() {
|
||||
const redisConfig = {
|
||||
socket: {
|
||||
host: process.env.REDIS_HOST || 'localhost',
|
||||
host: process.env.REDIS_HOST || 'redis.jiebanke.com',
|
||||
port: process.env.REDIS_PORT || 6379,
|
||||
reconnectStrategy: (retries) => {
|
||||
const delay = Math.min(retries * 100, 3000);
|
||||
@@ -66,7 +66,7 @@ class RedisConfig {
|
||||
|
||||
// 开发环境下,如果Redis未配置,则不连接
|
||||
if (process.env.NODE_ENV === 'development' &&
|
||||
(!process.env.REDIS_HOST || process.env.REDIS_HOST === 'localhost')) {
|
||||
(!process.env.REDIS_HOST || process.env.REDIS_HOST === 'redis.jiebanke.com')) {
|
||||
console.log('⚠️ 开发环境未配置Redis,跳过连接');
|
||||
return null;
|
||||
}
|
||||
@@ -94,7 +94,7 @@ class RedisConfig {
|
||||
getStatus() {
|
||||
return {
|
||||
isConnected: this.isConnected,
|
||||
host: process.env.REDIS_HOST || 'localhost',
|
||||
host: process.env.REDIS_HOST || 'redis.jiebanke.com',
|
||||
port: process.env.REDIS_PORT || 6379
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ const options = {
|
||||
},
|
||||
servers: [
|
||||
{
|
||||
url: 'http://localhost:3001/api/v1',
|
||||
url: 'https://admin.jiebanke.com/api/v1',
|
||||
description: '开发环境服务器'
|
||||
},
|
||||
{
|
||||
|
||||
@@ -21,7 +21,7 @@ const options = {
|
||||
},
|
||||
servers: [
|
||||
{
|
||||
url: 'http://localhost:3100/api/v1',
|
||||
url: 'https://api.jiebanke.com/api/v1',
|
||||
description: '开发环境'
|
||||
},
|
||||
{
|
||||
@@ -113,7 +113,7 @@ const options = {
|
||||
},
|
||||
avatar: {
|
||||
type: 'string',
|
||||
example: 'https://example.com/avatar.jpg'
|
||||
example: 'https://www.jiebanke.com/avatar.jpg'
|
||||
},
|
||||
role: {
|
||||
type: 'string',
|
||||
|
||||
@@ -42,7 +42,7 @@ const router = express.Router()
|
||||
* email:
|
||||
* type: string
|
||||
* description: 邮箱
|
||||
* example: test@example.com
|
||||
* example: test@jiebanke.com
|
||||
* phone:
|
||||
* type: string
|
||||
* description: 手机号
|
||||
|
||||
@@ -13,7 +13,7 @@ class Database {
|
||||
|
||||
try {
|
||||
// 连接数据库
|
||||
const mongodbUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/jiebanke'
|
||||
const mongodbUri = process.env.MONGODB_URI || 'mongodb://mongodb.jiebanke.com:27017/jiebanke'
|
||||
await this.mongoose.connect(mongodbUri, {
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true
|
||||
|
||||
@@ -4,7 +4,7 @@ const http = require('http');
|
||||
function testHealthCheck() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = {
|
||||
hostname: 'localhost',
|
||||
hostname: 'api.jiebanke.com',
|
||||
port: 3000,
|
||||
path: '/health',
|
||||
method: 'GET'
|
||||
@@ -43,7 +43,7 @@ function testAuthAPI() {
|
||||
});
|
||||
|
||||
const options = {
|
||||
hostname: 'localhost',
|
||||
hostname: 'api.jiebanke.com',
|
||||
port: 3000,
|
||||
path: '/api/v1/auth/login',
|
||||
method: 'POST',
|
||||
|
||||
@@ -2,7 +2,7 @@ const http = require('http');
|
||||
|
||||
// 发送请求到Swagger UI
|
||||
const options = {
|
||||
hostname: 'localhost',
|
||||
hostname: 'admin.jiebanke.com',
|
||||
port: 3001,
|
||||
path: '/api-docs/',
|
||||
method: 'GET'
|
||||
|
||||
@@ -80,7 +80,7 @@ Authorization: Bearer <token>
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"phone": "13800138000",
|
||||
"email": "test@example.com",
|
||||
"email": "test@jiebanke.com",
|
||||
"travelCount": 5,
|
||||
"animalClaimCount": 2,
|
||||
"createdAt": "2024-01-01T00:00:00.000Z",
|
||||
@@ -504,12 +504,12 @@ Authorization: Bearer <token>
|
||||
### 使用curl测试
|
||||
```bash
|
||||
# 微信用户登录
|
||||
curl -X POST http://localhost:3000/api/v1/auth/wechat-login \
|
||||
curl -X POST https://api.jiebanke.com/api/v1/auth/wechat-login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"code":"wxlogincode123","userInfo":{"nickName":"测试用户","avatarUrl":"https://avatar.url","gender":1}}'
|
||||
|
||||
# 获取旅行计划列表
|
||||
curl -X GET http://localhost:3000/api/v1/travel/plans \
|
||||
curl -X GET https://api.jiebanke.com/api/v1/travel/plans \
|
||||
-H "Authorization: Bearer <token>"
|
||||
```
|
||||
|
||||
|
||||
@@ -78,9 +78,9 @@ npm run dev
|
||||
```
|
||||
|
||||
### 6. 验证部署
|
||||
- 后端API: http://localhost:3000/api/v1/health
|
||||
- 后台管理: http://localhost:3001
|
||||
- 官方网站: http://localhost:3002
|
||||
- 后端API: https://api.jiebanke.com/api/v1/health
|
||||
- 后台管理: https://admin.jiebanke.com
|
||||
- 官方网站: https://www.jiebanke.com
|
||||
|
||||
## 🧪 测试环境部署
|
||||
|
||||
@@ -228,7 +228,7 @@ server {
|
||||
|
||||
# 反向代理到后端API
|
||||
location /api {
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_pass http://backend-service:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
@@ -315,8 +315,8 @@ vim /etc/mysql/mysql.conf.d/mysqld.cnf
|
||||
|
||||
# 创建应用专用用户
|
||||
mysql -u root -p -e "
|
||||
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strongpassword';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON jiebandata.* TO 'appuser'@'localhost';
|
||||
CREATE USER 'appuser'@'%' IDENTIFIED BY 'strongpassword';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON jiebandata.* TO 'appuser'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
"
|
||||
```
|
||||
@@ -434,8 +434,8 @@ tail -f /var/log/mysql/error.log
|
||||
## 📞 支持与维护
|
||||
|
||||
### 紧急联系人
|
||||
- **运维团队**: ops@company.com
|
||||
- **开发团队**: dev@company.com
|
||||
- **运维团队**: ops@jiebanke.com
|
||||
- **开发团队**: dev@jiebanke.com
|
||||
- **值班电话**: +86-138-0013-8000
|
||||
|
||||
### 维护窗口
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 基础信息
|
||||
|
||||
**Base URL**: `http://localhost:3100/api/v1`
|
||||
**Base URL**: `https://www.jiebanke.com/api/v1`
|
||||
|
||||
**认证方式**: Bearer Token (JWT)
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"email": "test@jiebanke.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "",
|
||||
"gender": "unknown",
|
||||
@@ -122,7 +122,7 @@
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"email": "test@jiebanke.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "",
|
||||
"gender": "unknown",
|
||||
@@ -154,9 +154,9 @@
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"email": "test@jiebanke.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"avatar": "https://www.jiebanke.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"points": 1000,
|
||||
@@ -203,7 +203,7 @@
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "新昵称",
|
||||
"avatar": "https://example.com/new-avatar.jpg",
|
||||
"avatar": "https://www.jiebanke.com/new-avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"updated_at": "2025-01-01T00:00:00.000Z"
|
||||
@@ -241,7 +241,7 @@
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"avatar": "https://www.jiebanke.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"points": 100,
|
||||
"level": 2,
|
||||
@@ -273,7 +273,7 @@
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"avatar": "https://www.jiebanke.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"points": 1000,
|
||||
@@ -358,7 +358,7 @@
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"avatar": "https://www.jiebanke.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"points": 100,
|
||||
"level": 2,
|
||||
@@ -396,7 +396,7 @@
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"avatar": "https://www.jiebanke.com/avatar.jpg",
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"points": 1000,
|
||||
@@ -437,7 +437,7 @@
|
||||
"admin": {
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"email": "admin@example.com",
|
||||
"email": "admin@jiebanke.com",
|
||||
"nickname": "超级管理员",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"role": "super_admin",
|
||||
@@ -566,17 +566,21 @@
|
||||
}
|
||||
```
|
||||
|
||||
### 9. 用户管理接口
|
||||
### 9. 管理员后台接口
|
||||
|
||||
#### 9.1 获取用户列表
|
||||
- **Endpoint**: GET /api/v1/users
|
||||
#### 9.1 用户管理接口
|
||||
|
||||
##### 9.1.1 获取用户列表
|
||||
- **Endpoint**: GET /api/v1/admin/users
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `username` (可选): 用户名模糊搜索
|
||||
- `user_type` (可选): 用户类型过滤
|
||||
- `status` (可选): 状态过滤
|
||||
- `user_type` (可选): 用户类型过滤(normal/merchant/farmer/organizer)
|
||||
- `status` (可选): 状态过滤(active/inactive/banned)
|
||||
- `start_date` (可选): 注册开始时间
|
||||
- `end_date` (可选): 注册结束时间
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
@@ -591,14 +595,682 @@
|
||||
"nickname": "测试用户",
|
||||
"email": "test@example.com",
|
||||
"phone": "13800138000",
|
||||
"user_type": "farmer",
|
||||
"user_type": "normal",
|
||||
"status": "active",
|
||||
"points": 100,
|
||||
"level": 2,
|
||||
"travel_count": 5,
|
||||
"animal_adopt_count": 2,
|
||||
"flower_order_count": 3,
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"last_login_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 100,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 5
|
||||
},
|
||||
"statistics": {
|
||||
"total_users": 100,
|
||||
"active_users": 80,
|
||||
"new_users_today": 5,
|
||||
"merchant_users": 15,
|
||||
"farmer_users": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.1.2 获取用户详情
|
||||
- **Endpoint**: GET /api/v1/admin/users/{id}
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"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",
|
||||
"user_type": "normal",
|
||||
"status": "active",
|
||||
"points": 1000,
|
||||
"level": 3,
|
||||
"balance": 500.00,
|
||||
"travel_count": 5,
|
||||
"animal_adopt_count": 2,
|
||||
"flower_order_count": 3,
|
||||
"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"
|
||||
},
|
||||
"activity_stats": {
|
||||
"last_7_days_login_count": 5,
|
||||
"total_travel_plans": 3,
|
||||
"total_animal_claims": 2,
|
||||
"total_flower_orders": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.1.3 更新用户状态
|
||||
- **Endpoint**: PUT /api/v1/admin/users/{id}/status
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"status": "banned",
|
||||
"reason": "违反平台规则"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "用户状态更新成功"
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.1.4 导出用户数据
|
||||
- **Endpoint**: GET /api/v1/admin/users/export
|
||||
- **认证要求**: Bearer Token,需要user:manage权限
|
||||
- **查询参数**:
|
||||
- `format` (可选): 导出格式(csv/excel),默认csv
|
||||
- `start_date` (可选): 注册开始时间
|
||||
- `end_date` (可选): 注册结束时间
|
||||
- `user_type` (可选): 用户类型过滤
|
||||
- **响应**: 返回文件下载流
|
||||
|
||||
#### 9.2 商家审核接口
|
||||
|
||||
##### 9.2.1 获取待审核商家列表
|
||||
- **Endpoint**: GET /api/v1/admin/merchants/pending
|
||||
- **认证要求**: Bearer Token,需要merchant:review权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `merchant_type` (可选): 商家类型(flower_shop/farm/activity_organizer)
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"merchants": [
|
||||
{
|
||||
"id": 1,
|
||||
"user_id": 2,
|
||||
"shop_name": "鲜花小店",
|
||||
"merchant_type": "flower_shop",
|
||||
"contact_name": "张老板",
|
||||
"contact_phone": "13800138001",
|
||||
"business_license": "https://www.jiebanke.com/license.jpg",
|
||||
"status": "pending",
|
||||
"apply_reason": "希望加入平台提供鲜花服务",
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"user_info": {
|
||||
"username": "merchant1",
|
||||
"nickname": "花店老板",
|
||||
"email": "merchant@jiebanke.com"
|
||||
}
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 10,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.2.2 审核商家申请
|
||||
- **Endpoint**: POST /api/v1/admin/merchants/{id}/review
|
||||
- **认证要求**: Bearer Token,需要merchant:review权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"action": "approve",
|
||||
"review_notes": "资质齐全,符合要求",
|
||||
"reject_reason": ""
|
||||
}
|
||||
```
|
||||
或者
|
||||
```json
|
||||
{
|
||||
"action": "reject",
|
||||
"review_notes": "营业执照不清晰",
|
||||
"reject_reason": "营业执照图片模糊,无法辨认"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "商家审核完成"
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.2.3 获取商家列表
|
||||
- **Endpoint**: GET /api/v1/admin/merchants
|
||||
- **认证要求**: Bearer Token,需要merchant:manage权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- "shop_name" (可选): 店铺名称模糊搜索
|
||||
- "merchant_type" (可选): 商家类型
|
||||
- "status" (可选): 状态(active/inactive/rejected)
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"merchants": [
|
||||
{
|
||||
"id": 1,
|
||||
"user_id": 2,
|
||||
"shop_name": "鲜花小店",
|
||||
"merchant_type": "flower_shop",
|
||||
"contact_name": "张老板",
|
||||
"contact_phone": "13800138001",
|
||||
"business_license": "https://www.jiebanke.com/license.jpg",
|
||||
"status": "active",
|
||||
"total_products": 15,
|
||||
"total_orders": 120,
|
||||
"total_revenue": 5000.00,
|
||||
"avg_rating": 4.8,
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"approved_at": "2025-01-02T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 50,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 3
|
||||
},
|
||||
"statistics": {
|
||||
"total_merchants": 50,
|
||||
"active_merchants": 45,
|
||||
"flower_shops": 20,
|
||||
"farms": 15,
|
||||
"organizers": 15,
|
||||
"pending_reviews": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 9.3 内容审核接口
|
||||
|
||||
##### 9.3.1 获取待审核内容列表
|
||||
- **Endpoint**: GET /api/v1/admin/content/pending
|
||||
- **认证要求**: Bearer Token,需要content:review权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `content_type` (可选): 内容类型(travel_plan/dynamic/comment)
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"contents": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "travel_plan",
|
||||
"title": "云南大理之旅",
|
||||
"content": "计划去大理游玩5天,寻找同行伙伴...",
|
||||
"author_id": 3,
|
||||
"author_name": "旅行爱好者",
|
||||
"status": "pending",
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"review_count": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "dynamic",
|
||||
"title": "",
|
||||
"content": "今天认领了一只可爱的小羊!",
|
||||
"images": ["https://www.jiebanke.com/sheep.jpg"],
|
||||
"author_id": 4,
|
||||
"author_name": "动物爱好者",
|
||||
"status": "pending",
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"review_count": 0
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 25,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.3.2 审核内容
|
||||
- **Endpoint**: POST /api/v1/admin/content/{id}/review
|
||||
- **认证要求**: Bearer Token,需要content:review权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"action": "approve",
|
||||
"review_notes": "内容符合规范"
|
||||
}
|
||||
```
|
||||
或者
|
||||
```json
|
||||
{
|
||||
"action": "reject",
|
||||
"review_notes": "包含不当内容",
|
||||
"reject_reason": "包含联系方式"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "内容审核完成"
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.3.3 获取内容统计
|
||||
- **Endpoint**: GET /api/v1/admin/content/statistics
|
||||
- **认证要求**: Bearer Token,需要content:review权限
|
||||
- **查询参数**:
|
||||
- `days` (可选): 统计天数,默认7
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"total_contents": 1000,
|
||||
"pending_review": 25,
|
||||
"approved": 900,
|
||||
"rejected": 75,
|
||||
"daily_stats": [
|
||||
{
|
||||
"date": "2025-01-01",
|
||||
"total": 50,
|
||||
"approved": 45,
|
||||
"rejected": 5
|
||||
}
|
||||
],
|
||||
"by_type": {
|
||||
"travel_plan": 300,
|
||||
"dynamic": 500,
|
||||
"comment": 200
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 9.4 数据统计接口
|
||||
|
||||
##### 9.4.1 获取平台概览数据
|
||||
- **Endpoint**: GET /api/v1/admin/dashboard/overview
|
||||
- **认证要求**: Bearer Token,需要data:view权限
|
||||
- **查询参数**:
|
||||
- `days` (可选): 统计天数,默认30
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"user_stats": {
|
||||
"total_users": 10000,
|
||||
"new_users_today": 50,
|
||||
"new_users_7d": 300,
|
||||
"new_users_30d": 1200,
|
||||
"active_users_7d": 2000,
|
||||
"active_users_30d": 6000
|
||||
},
|
||||
"order_stats": {
|
||||
"total_orders": 5000,
|
||||
"today_orders": 25,
|
||||
"revenue_today": 1250.00,
|
||||
"revenue_7d": 8500.00,
|
||||
"revenue_30d": 35000.00,
|
||||
"avg_order_value": 70.00
|
||||
},
|
||||
"content_stats": {
|
||||
"total_travel_plans": 2000,
|
||||
"total_animal_claims": 800,
|
||||
"total_flower_orders": 1200,
|
||||
"total_dynamics": 3000
|
||||
},
|
||||
"merchant_stats": {
|
||||
"total_merchants": 150,
|
||||
"active_merchants": 120,
|
||||
"flower_shops": 60,
|
||||
"farms": 50,
|
||||
"organizers": 40
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.4.2 获取用户增长图表
|
||||
- **Endpoint**: GET /api/v1/admin/dashboard/user-growth
|
||||
- **认证要求**: Bearer Token,需要data:view权限
|
||||
- **查询参数**:
|
||||
- `days` (可选): 统计天数,默认30
|
||||
- `group_by` (可选): 分组方式(day/week/month),默认day
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"chart_data": [
|
||||
{
|
||||
"date": "2025-01-01",
|
||||
"new_users": 45,
|
||||
"total_users": 10045
|
||||
},
|
||||
{
|
||||
"date": "2025-01-02",
|
||||
"new_users": 52,
|
||||
"total_users": 10097
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"total_new_users": 1200,
|
||||
"growth_rate": 12.5,
|
||||
"avg_daily_new_users": 40
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.4.3 获取订单统计图表
|
||||
- **Endpoint**: GET /api/v1/admin/dashboard/order-stats
|
||||
- **认证要求**: Bearer Token,需要data:view权限
|
||||
- **查询参数**:
|
||||
- `days` (可选): 统计天数,默认30
|
||||
- `order_type` (可选): 订单类型(flower/animal/travel)
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"chart_data": [
|
||||
{
|
||||
"date": "2025-01-01",
|
||||
"total_orders": 28,
|
||||
"total_revenue": 1960.00,
|
||||
"flower_orders": 15,
|
||||
"animal_orders": 8,
|
||||
"travel_orders": 5
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"total_revenue": 35000.00,
|
||||
"avg_daily_revenue": 1166.67,
|
||||
"order_conversion_rate": 8.5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.4.4 导出数据报表
|
||||
- **Endpoint**: GET /api/v1/admin/dashboard/export
|
||||
- **认证要求**: Bearer Token,需要data:export权限
|
||||
- **查询参数**:
|
||||
- `report_type` (必选): 报表类型(users/orders/contents/merchants)
|
||||
- `format` (可选): 格式(csv/excel),默认csv
|
||||
- `start_date` (可选): 开始时间
|
||||
- `end_date` (可选): 结束时间
|
||||
- **响应**: 返回文件下载流
|
||||
|
||||
#### 9.5 权限管理接口
|
||||
|
||||
##### 9.5.1 获取管理员列表
|
||||
- **Endpoint**: GET /api/v1/admin/administrators
|
||||
- **认证要求**: Bearer Token,需要admin:manage权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `username` (可选): 用户名模糊搜索
|
||||
- `role` (可选): 角色过滤
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"admins": [
|
||||
{
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"email": "admin@example.com",
|
||||
"nickname": "超级管理员",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"role": "super_admin",
|
||||
"status": 1,
|
||||
"last_login": "2025-01-15T10:30:00.000Z",
|
||||
"created_at": "2025-01-01T00:00:00.000Z",
|
||||
"permissions": ["user:manage", "content:review", "data:view", "data:export"]
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 10,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.5.2 创建管理员账号
|
||||
- **Endpoint**: POST /api/v1/admin/administrators
|
||||
- **认证要求**: Bearer Token,需要admin:manage权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"username": "newadmin",
|
||||
"password": "password123",
|
||||
"email": "newadmin@example.com",
|
||||
"nickname": "新管理员",
|
||||
"role": "content_admin",
|
||||
"permissions": ["content:review", "content:publish"]
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 201,
|
||||
"message": "管理员创建成功",
|
||||
"data": {
|
||||
"id": 2,
|
||||
"username": "newadmin",
|
||||
"email": "newadmin@example.com",
|
||||
"nickname": "新管理员",
|
||||
"role": "content_admin",
|
||||
"status": 1,
|
||||
"created_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.5.3 更新管理员权限
|
||||
- **Endpoint**: PUT /api/v1/admin/administrators/{id}/permissions
|
||||
- **认证要求**: Bearer Token,需要admin:manage权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"permissions": ["content:review", "content:publish", "data:view"]
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "权限更新成功"
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.5.4 禁用/启用管理员账号
|
||||
- **Endpoint**: PUT /api/v1/admin/administrators/{id}/status
|
||||
- **认证要求**: Bearer Token,需要admin:manage权限
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"status": 0
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "管理员状态更新成功"
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.5.5 获取权限列表
|
||||
- **Endpoint**: GET /api/v1/admin/permissions
|
||||
- **认证要求**: Bearer Token,需要admin:manage权限
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"permissions": [
|
||||
{
|
||||
"code": "user:manage",
|
||||
"name": "用户管理",
|
||||
"description": "管理用户账号和状态"
|
||||
},
|
||||
{
|
||||
"code": "content:review",
|
||||
"name": "内容审核",
|
||||
"description": "审核用户发布的内容"
|
||||
},
|
||||
{
|
||||
"code": "content:publish",
|
||||
"name": "内容发布",
|
||||
"description": "发布和管理平台内容"
|
||||
},
|
||||
{
|
||||
"code": "data:view",
|
||||
"name": "数据查看",
|
||||
"description": "查看平台统计数据"
|
||||
},
|
||||
{
|
||||
"code": "data:export",
|
||||
"name": "数据导出",
|
||||
"description": "导出数据报表"
|
||||
},
|
||||
{
|
||||
"code": "merchant:review",
|
||||
"name": "商家审核",
|
||||
"description": "审核商家入驻申请"
|
||||
},
|
||||
{
|
||||
"code": "merchant:manage",
|
||||
"name": "商家管理",
|
||||
"description": "管理商家账号和信息"
|
||||
},
|
||||
{
|
||||
"code": "admin:manage",
|
||||
"name": "管理员管理",
|
||||
"description": "管理其他管理员账号"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 9.6 操作日志接口
|
||||
|
||||
##### 9.6.1 获取操作日志列表
|
||||
- **Endpoint**: GET /api/v1/admin/operation-logs
|
||||
- **认证要求**: Bearer Token,需要admin:manage权限
|
||||
- **查询参数**:
|
||||
- `page` (可选): 页码,默认1
|
||||
- `limit` (可选): 每页数量,默认20
|
||||
- `admin_id` (可选): 操作管理员ID
|
||||
- `action_type` (可选): 操作类型
|
||||
- `start_date` (可选): 开始时间
|
||||
- `end_date` (可选): 结束时间
|
||||
- **响应**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"message": "获取成功",
|
||||
"data": {
|
||||
"logs": [
|
||||
{
|
||||
"id": 1,
|
||||
"admin_id": 1,
|
||||
"admin_name": "超级管理员",
|
||||
"action_type": "user_status_update",
|
||||
"target_type": "user",
|
||||
"target_id": 5,
|
||||
"target_name": "testuser",
|
||||
"old_value": "active",
|
||||
"new_value": "banned",
|
||||
"ip_address": "192.168.1.100",
|
||||
"user_agent": "Mozilla/5.0...",
|
||||
"created_at": "2025-01-01T10:30:00.000Z"
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 1000,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"pages": 50
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 9.6.2 导出操作日志
|
||||
- **Endpoint**: GET /api/v1/admin/operation-logs/export
|
||||
- **认证要求**: Bearer Token,需要admin:manage权限
|
||||
- **查询参数**:
|
||||
- `format` (可选): 格式(csv/excel),默认csv
|
||||
- `start_date` (可选): 开始时间
|
||||
- `end_date` (可选): 结束时间
|
||||
- **响应**: 返回文件下载流
|
||||
],
|
||||
"pagination": {
|
||||
"total": 100,
|
||||
"page": 1,
|
||||
@@ -716,7 +1388,7 @@
|
||||
"name": "MySQL数据库",
|
||||
"type": "database",
|
||||
"status": "running",
|
||||
"host": "localhost",
|
||||
"host": "mysql.jiebanke.com",
|
||||
"port": 3306,
|
||||
"description": "主数据库服务",
|
||||
"created_at": "2024-01-01T00:00:00.000Z",
|
||||
@@ -864,7 +1536,7 @@
|
||||
"username": "testuser",
|
||||
"nickname": "测试用户"
|
||||
},
|
||||
"images": ["https://example.com/image1.jpg"],
|
||||
"images": ["https://www.jiebanke.com/image1.jpg"],
|
||||
"status": "pending",
|
||||
"created_at": "2025-01-01T12:00:00.000Z",
|
||||
"updated_at": "2025-01-01T12:00:00.000Z"
|
||||
@@ -1797,7 +2469,7 @@
|
||||
"vaccination_status": "vaccinated",
|
||||
"sterilization_status": "sterilized",
|
||||
"location": "北京市朝阳区",
|
||||
"images": ["https://example.com/animal1.jpg"],
|
||||
"images": ["https://www.jiebanke.com/animal1.jpg"],
|
||||
"status": "available",
|
||||
"shelter": {
|
||||
"id": 1,
|
||||
@@ -1882,7 +2554,7 @@
|
||||
"original_price": 129.00,
|
||||
"stock": 50,
|
||||
"sales": 120,
|
||||
"images": ["https://example.com/rose.jpg"],
|
||||
"images": ["https://www.jiebanke.com/rose.jpg"],
|
||||
"merchant": {
|
||||
"id": 1,
|
||||
"name": "花语花店",
|
||||
@@ -1990,7 +2662,7 @@
|
||||
"post": {
|
||||
"id": 1,
|
||||
"content": "今天去了西湖,风景真美!",
|
||||
"images": ["https://example.com/westlake.jpg"],
|
||||
"images": ["https://www.jiebanke.com/westlake.jpg"],
|
||||
"visibility": "public",
|
||||
"location": "杭州西湖",
|
||||
"like_count": 0,
|
||||
@@ -2177,7 +2849,7 @@
|
||||
"id": 1,
|
||||
"username": "user1",
|
||||
"nickname": "用户1",
|
||||
"email": "user1@example.com",
|
||||
"email": "user1@jiebanke.com",
|
||||
"phone": "13800138001",
|
||||
"status": "active",
|
||||
"level": 2,
|
||||
@@ -2344,7 +3016,7 @@
|
||||
"user": {
|
||||
"id": 2,
|
||||
"nickname": "旅行伙伴",
|
||||
"avatar": "https://example.com/avatar2.jpg"
|
||||
"avatar": "https://www.jiebanke.com/avatar2.jpg"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -2398,7 +3070,7 @@
|
||||
"description": "非常温顺的猫咪,寻找有爱心的主人",
|
||||
"location": "北京市朝阳区",
|
||||
"status": "available",
|
||||
"images": ["https://example.com/cat1.jpg"],
|
||||
"images": ["https://www.jiebanke.com/cat1.jpg"],
|
||||
"creator_id": 1,
|
||||
"created_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
@@ -2482,7 +3154,7 @@
|
||||
"name": "羊驼认领体验",
|
||||
"description": "提供一个月的羊驼认领体验服务",
|
||||
"price": 1000.00,
|
||||
"image_url": "https://example.com/product.jpg",
|
||||
"image_url": "https://www.jiebanke.com/product.jpg",
|
||||
"category": "animal_claim",
|
||||
"status": "available",
|
||||
"created_at": "202极速版5-01-01T00:00:00.000Z"
|
||||
@@ -2590,8 +3262,8 @@
|
||||
"success": true,
|
||||
"code": 200,
|
||||
"data": {
|
||||
"promotion_link": "https://example.com/promotion?ref=user123",
|
||||
"qr_code": "https://example.com/qrcode.png"
|
||||
"promotion_link": "https://www.jiebanke.com/promotion?ref=user123",
|
||||
"qr_code": "https://www.jiebanke.com/qrcode.png"
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -2716,7 +3388,7 @@
|
||||
"id": 1,
|
||||
"title": "XX农场成功入驻案例",
|
||||
"description": "XX农场通过平台实现了数字化转型",
|
||||
"image_url": "https://example.com/case1.jpg",
|
||||
"image_url": "https://www.jiebanke.com/case1.jpg",
|
||||
"created_at": "2025-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -194,7 +194,7 @@ erDiagram
|
||||
|
||||
### 开发环境 (Development)
|
||||
```env
|
||||
DB_HOST=localhost
|
||||
DB_HOST=mysql.jiebanke.com
|
||||
DB_PORT=3306
|
||||
DB_USER=root
|
||||
DB_PASSWORD=rootpassword
|
||||
@@ -280,7 +280,7 @@ NODE_ENV=production
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"phone": "13800138000",
|
||||
"email": "test@example.com",
|
||||
"email": "test@jiebanke.com",
|
||||
"travelCount": 5,
|
||||
"animalClaimCount": 2,
|
||||
"createdAt": "2024-01-01T00:00:00.000Z",
|
||||
|
||||
@@ -324,7 +324,7 @@ erDiagram
|
||||
### 3.1 接口统一格式
|
||||
|
||||
#### 请求格式
|
||||
- **Base URL**: http://localhost:3100/api/v1
|
||||
- **Base URL**: https://www.jiebanke.com/api/v1
|
||||
- **认证**: Bearer Token (需要认证的接口)
|
||||
- **Content-Type**: application/json
|
||||
|
||||
@@ -393,6 +393,40 @@ erDiagram
|
||||
- **Endpoint**: PUT /admin/users/{id}/status
|
||||
- **认证要求**: Bearer Token
|
||||
|
||||
### 2.13 管理员操作日志表 (admin_operation_logs)
|
||||
| 字段名 | 类型 | 约束 | 描述 |
|
||||
|--------|------|------|------|
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 日志ID |
|
||||
| admin_id | INT | FOREIGN KEY REFERENCES admins(id), NOT NULL | 操作管理员ID |
|
||||
| admin_name | VARCHAR(50) | NOT NULL | 管理员名称 |
|
||||
| action_type | VARCHAR(50) | NOT NULL | 操作类型 |
|
||||
| target_type | VARCHAR(50) | | 目标类型 |
|
||||
| target_id | INT | | 目标ID |
|
||||
| target_name | VARCHAR(100) | | 目标名称 |
|
||||
| old_value | TEXT | | 操作前值 |
|
||||
| new_value | TEXT | | 操作后值 |
|
||||
| ip_address | VARCHAR(45) | | 操作IP地址 |
|
||||
| user_agent | VARCHAR(500) | | 用户代理信息 |
|
||||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||||
|
||||
### 2.14 管理员权限表 (admin_permissions)
|
||||
| 字段名 | 类型 | 约束 | 描述 |
|
||||
|--------|------|------|------|
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 权限ID |
|
||||
| code | VARCHAR(50) | UNIQUE, NOT NULL | 权限代码 |
|
||||
| name | VARCHAR(100) | NOT NULL | 权限名称 |
|
||||
| description | VARCHAR(255) | | 权限描述 |
|
||||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||||
|
||||
### 2.15 管理员角色权限关联表 (admin_role_permissions)
|
||||
| 字段名 | 类型 | 约束 | 描述 |
|
||||
|--------|------|------|------|
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 关联ID |
|
||||
| admin_id | INT | FOREIGN KEY REFERENCES admins(id), NOT NULL | 管理员ID |
|
||||
| permission_code | VARCHAR(50) | FOREIGN KEY REFERENCES admin_permissions(code), NOT NULL | 权限代码 |
|
||||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||||
|
||||
### 3.5 商家管理接口
|
||||
|
||||
#### 3.5.1 获取商家列表
|
||||
@@ -434,8 +468,8 @@ VALUES
|
||||
```sql
|
||||
INSERT INTO users (openid, nickname, gender, phone, email)
|
||||
VALUES
|
||||
('wx1234567890', '测试用户1', 'male', '13800138000', 'test1@example.com'),
|
||||
('wx0987654321', '测试用户2', 'female', '13800138001', 'test2@example.com');
|
||||
('wx1234567890', '测试用户1', 'male', '13800138000', 'test1@jiebanke.com'),
|
||||
('wx0987654321', '测试用户2', 'female', '13800138001', 'test2@jiebanke.com');
|
||||
```
|
||||
|
||||
### 4.3 创建测试商家
|
||||
|
||||
@@ -496,7 +496,7 @@ erDiagram
|
||||
"gender": "male",
|
||||
"birthday": "1990-01-01",
|
||||
"phone": "13800138000",
|
||||
"email": "user@example.com"
|
||||
"email": "user@jiebanke.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -511,7 +511,7 @@ erDiagram
|
||||
"gender": "female",
|
||||
"birthday": "1995-01-01",
|
||||
"phone": "13900139000",
|
||||
"email": "new@example.com"
|
||||
"email": "new@jiebanke.com"
|
||||
}
|
||||
```
|
||||
- **响应**:
|
||||
@@ -675,7 +675,7 @@ erDiagram
|
||||
"user_id": 1,
|
||||
"animal_id": 1,
|
||||
"price_paid": 1000.00,
|
||||
"agreement_url": "https://example.com/agreement.pdf",
|
||||
"agreement_url": "https://www.jiebanke.com/agreement.pdf",
|
||||
"status": "active",
|
||||
"claimed_at": "2023-09-01T12:00:00Z"
|
||||
}
|
||||
@@ -722,7 +722,7 @@ erDiagram
|
||||
{
|
||||
"merchant_type": "farm_owner",
|
||||
"business_name": "XX农场",
|
||||
"business_license": "https://example.com/license.jpg",
|
||||
"business_license": "https://www.jiebanke.com/license.jpg",
|
||||
"contact_person": "张三",
|
||||
"contact_phone": "13800138000",
|
||||
"address": "北京市朝阳区XX路XX号",
|
||||
@@ -759,7 +759,7 @@ erDiagram
|
||||
"name": "羊驼认领体验",
|
||||
"description": "提供一个月的羊驼认领体验服务",
|
||||
"price": 1000.00,
|
||||
"image_url": "https://example.com/product.jpg",
|
||||
"image_url": "https://www.jiebanke.com/product.jpg",
|
||||
"category": "animal_claim",
|
||||
"status": "available"
|
||||
}
|
||||
@@ -775,7 +775,7 @@ erDiagram
|
||||
"name": "羊驼认领体验",
|
||||
"description": "提供一个月的羊驼认领体验服务",
|
||||
"price": 1000.00,
|
||||
"image_url": "https://example.com/product.jpg",
|
||||
"image_url": "https://www.jiebanke.com/product.jpg",
|
||||
"category": "animal_claim",
|
||||
"status": "available",
|
||||
"created_at": "2023-09-01T12:00:00Z"
|
||||
@@ -822,7 +822,7 @@ erDiagram
|
||||
"business_name": "XX农场",
|
||||
"contact_person": "张三",
|
||||
"contact_phone": "13800138000",
|
||||
"email": "zhangsan@example.com",
|
||||
"email": "zhangsan@jiebanke.com",
|
||||
"description": "专业养殖羊驼的农场"
|
||||
}
|
||||
```
|
||||
@@ -858,7 +858,7 @@ erDiagram
|
||||
"id": 1,
|
||||
"title": "XX农场成功入驻案例",
|
||||
"description": "XX农场通过平台实现了数字化转型",
|
||||
"image_url": "https://example.com/case1.jpg",
|
||||
"image_url": "https://www.jiebanke.com/case1.jpg",
|
||||
"created_at": "2023-09-01T12:00:00Z"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
const config = {
|
||||
// 开发环境
|
||||
development: {
|
||||
baseURL: 'http://localhost:3100/api',
|
||||
baseURL: 'https://api.jiebanke.com/api',
|
||||
timeout: 10000
|
||||
},
|
||||
// 生产环境
|
||||
|
||||
@@ -18,7 +18,7 @@ export const mockUsers = [
|
||||
username: 'user2',
|
||||
nickname: '动物保护者',
|
||||
avatar: '/static/user/avatar2.jpg',
|
||||
email: 'user2@example.com',
|
||||
email: 'user2@jiebanke.com',
|
||||
points: 300,
|
||||
level: 3,
|
||||
createTime: '2024-02-20'
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"config.js","sources":["api/config.js"],"sourcesContent":["// API基础配置\nconst config = {\n // 开发环境\n development: {\n baseURL: 'http://localhost:3100/api',\n timeout: 10000\n },\n // 生产环境\n production: {\n baseURL: 'https://api.jiebanke.com/api',\n timeout: 15000\n }\n}\n\n// 获取当前环境配置\nconst getConfig = () => {\n const env = process.env.NODE_ENV || 'development'\n return config[env]\n}\n\n// API端点\nconst endpoints = {\n // 用户相关\n USER: {\n LOGIN: '/auth/login',\n REGISTER: '/auth/register',\n PROFILE: '/user/profile',\n UPDATE_PROFILE: '/user/profile',\n UPLOAD_AVATAR: '/user/avatar'\n },\n \n // 旅行计划\n TRAVEL: {\n LIST: '/travel/list',\n DETAIL: '/travel/detail',\n CREATE: '/travel/create',\n UPDATE: '/travel/update',\n DELETE: '/travel/delete',\n JOIN: '/travel/join',\n QUIT: '/travel/quit',\n LIKE: '/travel/like',\n UNLIKE: '/travel/unlike',\n COMMENT: '/travel/comment',\n COMMENTS: '/travel/comments',\n MY_PLANS: '/travel/my-plans',\n SEARCH: '/travel/search'\n },\n \n // 动物认养\n ANIMAL: {\n LIST: '/animal/list',\n DETAIL: '/animal/detail',\n ADOPT: '/animal/adopt',\n MY_ANIMALS: '/animal/my-animals',\n CATEGORIES: '/animal/categories'\n },\n \n // 送花服务\n FLOWER: {\n LIST: '/flower/list',\n DETAIL: '/flower/detail',\n ORDER: '/flower/order',\n MY_ORDERS: '/flower/my-orders',\n CATEGORIES: '/flower/categories'\n },\n \n // 订单管理\n ORDER: {\n LIST: '/order/list',\n DETAIL: '/order/detail',\n CANCEL: '/order/cancel',\n PAY: '/order/pay',\n CONFIRM: '/order/confirm'\n },\n \n // 支付相关\n PAYMENT: {\n CREATE: '/payment/create',\n QUERY: '/payment/query',\n REFUND: '/payment/refund'\n },\n \n // 系统相关\n SYSTEM: {\n CONFIG: '/system/config',\n NOTICE: '/system/notice',\n FEEDBACK: '/system/feedback'\n },\n\n // 搜索相关\n SEARCH: {\n GLOBAL: '/search/global',\n SUGGESTIONS: '/search/suggestions',\n TRAVEL: '/search/travel',\n ANIMAL: '/search/animal',\n FLOWER: '/search/flower',\n USER: '/search/user'\n },\n\n // 推广相关\n PROMOTION: {\n DATA: '/promotion/data',\n RECORDS: '/promotion/records',\n ALL_RECORDS: '/promotion/all-records',\n QRCODE: '/promotion/qrcode',\n REWARD_DETAILS: '/promotion/reward-details',\n WITHDRAW: '/promotion/withdraw',\n WITHDRAW_RECORDS: '/promotion/withdraw-records'\n },\n\n // 认证相关\n AUTH: {\n PHONE_LOGIN: '/auth/phone-login',\n WECHAT_LOGIN: '/auth/wechat-login',\n PASSWORD_LOGIN: '/auth/password-login',\n SEND_SMS_CODE: '/auth/send-sms-code',\n CHECK_TOKEN: '/auth/check-token',\n REFRESH_TOKEN: '/auth/refresh-token',\n BIND_PHONE: '/auth/bind-phone',\n CHANGE_PASSWORD: '/auth/change-password',\n RESET_PASSWORD: '/auth/reset-password'\n }\n}\n\nexport default {\n ...getConfig(),\n endpoints\n}"],"names":[],"mappings":";AACA,MAAM,SAAS;AAAA;AAAA,EAEb,aAAa;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACF;AAGA,MAAM,YAAY,MAAM;AACtB,QAAM,MAAM;AACZ,SAAO,OAAO,GAAG;AACnB;AAGA,MAAM,YAAY;AAAA;AAAA,EAEhB,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,EACX;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA;AAAA,EAGA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,kBAAkB;AAAA,EACpB;AAAA;AAAA,EAGA,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EAClB;AACF;AAEA,MAAe,WAAA;AAAA,EACb,GAAG,UAAU;AAAA,EACb;AACF;;"}
|
||||
{"version":3,"file":"config.js","sources":["api/config.js"],"sourcesContent":["// API基础配置\nconst config = {\n // 开发环境\n development: {\n baseURL: 'https://api.jiebanke.com/api',\n timeout: 10000\n },\n // 生产环境\n production: {\n baseURL: 'https://api.jiebanke.com/api',\n timeout: 15000\n }\n}\n\n// 获取当前环境配置\nconst getConfig = () => {\n const env = process.env.NODE_ENV || 'development'\n return config[env]\n}\n\n// API端点\nconst endpoints = {\n // 用户相关\n USER: {\n LOGIN: '/auth/login',\n REGISTER: '/auth/register',\n PROFILE: '/user/profile',\n UPDATE_PROFILE: '/user/profile',\n UPLOAD_AVATAR: '/user/avatar'\n },\n \n // 旅行计划\n TRAVEL: {\n LIST: '/travel/list',\n DETAIL: '/travel/detail',\n CREATE: '/travel/create',\n UPDATE: '/travel/update',\n DELETE: '/travel/delete',\n JOIN: '/travel/join',\n QUIT: '/travel/quit',\n LIKE: '/travel/like',\n UNLIKE: '/travel/unlike',\n COMMENT: '/travel/comment',\n COMMENTS: '/travel/comments',\n MY_PLANS: '/travel/my-plans',\n SEARCH: '/travel/search'\n },\n \n // 动物认养\n ANIMAL: {\n LIST: '/animal/list',\n DETAIL: '/animal/detail',\n ADOPT: '/animal/adopt',\n MY_ANIMALS: '/animal/my-animals',\n CATEGORIES: '/animal/categories'\n },\n \n // 送花服务\n FLOWER: {\n LIST: '/flower/list',\n DETAIL: '/flower/detail',\n ORDER: '/flower/order',\n MY_ORDERS: '/flower/my-orders',\n CATEGORIES: '/flower/categories'\n },\n \n // 订单管理\n ORDER: {\n LIST: '/order/list',\n DETAIL: '/order/detail',\n CANCEL: '/order/cancel',\n PAY: '/order/pay',\n CONFIRM: '/order/confirm'\n },\n \n // 支付相关\n PAYMENT: {\n CREATE: '/payment/create',\n QUERY: '/payment/query',\n REFUND: '/payment/refund'\n },\n \n // 系统相关\n SYSTEM: {\n CONFIG: '/system/config',\n NOTICE: '/system/notice',\n FEEDBACK: '/system/feedback'\n },\n\n // 搜索相关\n SEARCH: {\n GLOBAL: '/search/global',\n SUGGESTIONS: '/search/suggestions',\n TRAVEL: '/search/travel',\n ANIMAL: '/search/animal',\n FLOWER: '/search/flower',\n USER: '/search/user'\n },\n\n // 推广相关\n PROMOTION: {\n DATA: '/promotion/data',\n RECORDS: '/promotion/records',\n ALL_RECORDS: '/promotion/all-records',\n QRCODE: '/promotion/qrcode',\n REWARD_DETAILS: '/promotion/reward-details',\n WITHDRAW: '/promotion/withdraw',\n WITHDRAW_RECORDS: '/promotion/withdraw-records'\n },\n\n // 认证相关\n AUTH: {\n PHONE_LOGIN: '/auth/phone-login',\n WECHAT_LOGIN: '/auth/wechat-login',\n PASSWORD_LOGIN: '/auth/password-login',\n SEND_SMS_CODE: '/auth/send-sms-code',\n CHECK_TOKEN: '/auth/check-token',\n REFRESH_TOKEN: '/auth/refresh-token',\n BIND_PHONE: '/auth/bind-phone',\n CHANGE_PASSWORD: '/auth/change-password',\n RESET_PASSWORD: '/auth/reset-password'\n }\n}\n\nexport default {\n ...getConfig(),\n endpoints\n}"],"names":[],"mappings":";AACA,MAAM,SAAS;AAAA;AAAA,EAEb,aAAa;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACF;AAGA,MAAM,YAAY,MAAM;AACtB,QAAM,MAAM;AACZ,SAAO,OAAO,GAAG;AACnB;AAGA,MAAM,YAAY;AAAA;AAAA,EAEhB,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,EACX;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA;AAAA,EAGA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,kBAAkB;AAAA,EACpB;AAAA;AAAA,EAGA,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EAClB;AACF;AAEA,MAAe,WAAA;AAAA,EACb,GAAG,UAAU;AAAA,EACb;AACF;;"}
|
||||
@@ -2,7 +2,7 @@
|
||||
const config = {
|
||||
// 开发环境
|
||||
development: {
|
||||
baseURL: "http://localhost:3100/api",
|
||||
baseURL: "https://api.jiebanke.com/api",
|
||||
timeout: 1e4
|
||||
},
|
||||
// 生产环境
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// 结伴客系统API测试脚本
|
||||
const axios = require('axios');
|
||||
|
||||
const BASE_URL = 'http://localhost:3000/api/v1';
|
||||
const BASE_URL = 'https://api.jiebanke.com/api/v1';
|
||||
|
||||
// 创建axios实例
|
||||
const api = axios.create({
|
||||
@@ -28,7 +28,7 @@ async function testAPI() {
|
||||
username: 'testuser',
|
||||
password: 'test123',
|
||||
nickname: '测试用户',
|
||||
email: 'test@example.com',
|
||||
email: 'test@jiebanke.com',
|
||||
phone: '13800138000',
|
||||
gender: 'male',
|
||||
birthday: '1990-01-01'
|
||||
|
||||
Reference in New Issue
Block a user