# Liver2Go **Repository Path**: aikotsuki/live2go ## Basic Information - **Project Name**: Liver2Go - **Description**: 二游代肝订单管理系统,专为二次元游戏提供代肝服务管理,支持订单处理、进度跟踪与用户管理,助力高效运营。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-02-02 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Liver2Go 订单管理系统 一个专用于本地数据存储和导出的游戏代练订单管理系统,采用前后端分离架构,提供完整的订单管理、用户管理、服务管理以及数据导入导出功能。 **数据库:SQLite** | **前端:Vue 3 + Element Plus** | **后端:Node.js + Express** --- ## 💡 关于名称 **Liver2Go** 这个名称的含义: | 组成部分 | 含义 | |----------|------| | **Liver** | "肝" 的英文,指代游戏代肝(熬夜肝任务) | | **2** | 谐音 "to/too" | | **Go** | 行动、前进、出发 | **整体含义**:帮助玩家"肝"任务,让游戏体验更轻松 go! **设计理念**:为代肝业务提供高效、便捷的管理工具,让经营者专注于服务玩家。 --- ## 📋 目录 - [功能特性](#功能特性) - [技术栈](#技术栈) - [环境要求](#环境要求) - [快速开始](#快速开始) - [项目结构](#项目结构) - [数据库说明](#数据库说明) - [API 接口文档](#api接口文档) - [认证系统](#认证系统) - [使用说明](#使用说明) - [常见问题](#常见问题) - [打包与交付](#打包与交付) - [更新日志](#更新日志) --- ## ✨ 功能特性 ### 核心功能 | 模块 | 功能描述 | |------|----------| | **订单管理** | 创建、查询、更新、删除订单,支持多种筛选条件 | | **用户管理** | 管理客户信息,自动关联订单 | | **服务管理** | 定义和管理代肝服务项目(支持树形结构和拖拽排序) | | **支付记录** | 跟踪支付状态和金额 | | **数据导出** | 支持 Excel 和 CSV 格式导出订单数据 | | **数据导入** | 支持从 Excel 文件导入订单数据 | ### 高级功能 - **智能筛选**:按状态、来源、金额、时间等多维度筛选 - **实时统计**:今日收入、昨日收入、订单统计等 - **数据中心**:收入趋势分析、业务维度排行榜、实时 KPI 看板 - **可视化图表**:ECharts 收入趋势图,支持多种时间维度 - **批量操作**:批量更新状态、批量导出、批量删除订单 - **动态列配置**:支持自定义显示/隐藏表格列 - **用户自动补全**:输入昵称自动补全用户信息(支持拼音搜索) - **表单验证**:实时表单验证,友好的错误提示 - **响应式设计**:支持桌面端和移动端访问 - **B站数据集成**:实时获取 B 站粉丝、播放量等数据 ### 安全功能 - **访问密码验证**:支持密码保护,防止未授权访问 - **路由守卫**:所有页面需要登录后才能访问 - **记住密码**:支持保存密码,方便下次登录 - **JWT 令牌认证**:安全的 Token 认证机制 ### 智能推荐 - **客户偏好画像**:自动记录客户常用服务器、项目 - **下单推荐**:基于历史订单数据智能推荐服务器和项目 --- ## 🛠 技术栈 ### 后端技术栈 | 技术 | 用途 | |------|------| | **Node.js** (v16+) | JavaScript 运行环境 | | **Express.js** | Web 应用框架 | | **SQLite** | 本地关系型数据库 | | **better-sqlite3** | SQLite 异步驱动 | | **ExcelJS** | Excel 文件处理 | | **csv-writer** | CSV 文件处理 | | **dotenv** | 环境变量管理 | | **multer** | 文件上传处理 | | **cors** | 跨域支持 | | **cookie-parser** | Cookie 解析 | | **jsonwebtoken** | JWT 认证 | | **bcryptjs** | 密码加密 | | **pinyin-match** | 拼音匹配搜索 | ### 前端技术栈 | 技术 | 用途 | |------|------| | **Vue 3** | 渐进式 JavaScript 框架 | | **Vue Router 4** | 路由管理 | | **Vite** | 前端构建工具 | | **Tailwind CSS** | CSS 框架 | | **Element Plus** | UI 组件库 | | **Axios** | HTTP 客户端 | | **ECharts** | 数据可视化图表 | | **vuedraggable** | 拖拽排序 | | **pinyin-match** | 拼音搜索 | --- ## 📦 环境要求 ### 必需软件 1. **Node.js** (v16 或更高版本) - 下载地址: https://nodejs.org/ - 安装后运行 `node -v` 检查版本 ### 可选软件 - **SQLite 数据库管理工具** (推荐) - https://sqlitebrowser.org/ (DB Browser for SQLite) - 用于可视化查看和管理数据库 --- ## 🚀 快速开始 ### 方式一:Windows 一键启动(推荐) 1. 确保已安装 Node.js 2. 双击运行 `start.bat` 3. 等待启动完成后,在浏览器打开: - 前端地址:http://localhost:5173 - 后端 API:http://localhost:3000 ### 方式二:手动启动 **1. 安装依赖** ```bash # 安装后端依赖 npm install # 安装前端依赖 cd frontend npm install cd .. ``` **2. 配置环境变量** 在项目根目录创建 `.env` 文件(参考 `.env.example`): ```env PORT=3000 # JWT 配置 JWT_SECRET=your-secret-key-change-in-production # B站配置(可选) BILIBILI_UID=你的UID BILIBILI_COOKIE=你的Cookie ``` **3. 启动服务** ```bash # 同时启动前后端 npm run dev:all # 或分别启动 # 终端1 - 启动后端 npm run dev # 终端2 - 启动前端 cd frontend npm run dev ``` **4. 访问应用** - 前端:http://localhost:5173 - 后端 API:http://localhost:3000 ### 默认管理员账户 - **用户名**: `admin` - **密码**: `123456` --- ## 📁 项目结构 ``` Liver2Go/ ├── config/ # 配置文件 │ └── database.js # SQLite 数据库连接配置 ├── database/ # 数据库目录 │ ├── live2go.db # SQLite 数据库文件 │ ├── live2go_backup_*.db # 数据库备份 │ └── schema_sqlite.sql # 表结构定义 ├── frontend/ # 前端项目(Vue + Vite) │ ├── public/ # 静态资源 │ ├── src/ │ │ ├── assets/ # 样式文件 │ │ ├── router/ # 路由配置 │ │ ├── services/ # API 服务封装 │ │ └── views/ # 页面组件 │ ├── index.html │ ├── package.json │ └── vite.config.js ├── src/ # 后端源码 │ ├── app.js # Express 应用入口 │ ├── controllers/ # 控制器层 │ │ ├── AuthController.js │ │ ├── BilibiliController.js │ │ ├── OrderController.js │ │ ├── PaymentController.js │ │ ├── ServiceController.js │ │ └── UserController.js │ ├── middleware/ # 中间件 │ │ └── auth.js # 认证中间件 │ ├── models/ # 数据模型层 │ │ ├── AuthUser.js │ │ ├── Order.js │ │ ├── OrderDetail.js │ │ ├── Payment.js │ │ ├── Service.js │ │ ├── User.js │ │ └── UserPreference.js │ ├── routes/ # 路由层 │ │ ├── authRoutes.js │ │ ├── bilibiliRoutes.js │ │ ├── exportRoutes.js │ │ ├── importRoutes.js │ │ ├── orderRoutes.js │ │ ├── paymentRoutes.js │ │ ├── serviceRoutes.js │ │ └── userPreferenceRoutes.js │ └── utils/ # 工具类 │ ├── CsvExportUtil.js │ └── ExcelExportUtil.js ├── scripts/ # 脚本工具 │ ├── backup_database.js # 数据库备份脚本 │ ├── fix_order_ids.js # 订单 ID 修复脚本 │ └── migrate_mysql_to_sqlite.js # MySQL 迁移脚本 ├── .env # 环境变量配置 ├── .env.example # 环境变量模板 ├── .gitignore ├── package.json # 后端依赖配置 ├── package-lock.json ├── README.md # 项目说明文档 └── start.bat # Windows 启动脚本 ``` --- ## 🗄 数据库说明 ### SQLite 数据库 本项目使用 **SQLite** 作为数据库,无需安装数据库服务,数据库即一个文件。 **数据库文件位置**: `database/live2go.db` **SQLite 优势**: - 无需安装数据库服务 - 文件即数据库,便携性好 - 支持 WAL 模式提升并发性能 - 自动备份简单(复制文件即可) ### 数据库备份 **手动备份**: ```bash # 复制数据库文件 cp database/live2go.db database/live2go_backup_$(date +%Y%m%d_%H%M%S).db ``` **使用备份脚本**: ```bash node scripts/backup_database.js ``` ### 表结构 #### auth_users(认证用户表) ```sql CREATE TABLE auth_users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'user' CHECK(role IN ('admin', 'user')), status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'inactive')), login_attempts INTEGER DEFAULT 0, last_login TEXT, created_at TEXT DEFAULT (datetime('now', 'localtime')), updated_at TEXT DEFAULT (datetime('now', 'localtime')) ); ``` #### users(客户用户表) ```sql CREATE TABLE users ( user_id INTEGER PRIMARY KEY AUTOINCREMENT, nickname TEXT, phone TEXT NOT NULL UNIQUE, order_count INTEGER DEFAULT 0, total_spent NUMERIC(10,2) DEFAULT 0.00, last_order_time TEXT ); ``` #### services(服务表) ```sql CREATE TABLE services ( service_id INTEGER PRIMARY KEY AUTOINCREMENT, service_type TEXT NOT NULL, price_unit TEXT, base_price NUMERIC(8,2) NOT NULL, parent_id INTEGER, sort_order INTEGER DEFAULT 0, FOREIGN KEY (parent_id) REFERENCES services(service_id) ON DELETE CASCADE ); ``` #### orders(订单表) ```sql CREATE TABLE orders ( order_id TEXT PRIMARY KEY, user_id INTEGER NOT NULL, total_amount NUMERIC(10,2) NOT NULL, received_amount NUMERIC(10,2) NOT NULL, order_status TEXT NOT NULL DEFAULT '排单中' CHECK(order_status IN ('排单中', '进行中', '已完成', '已退款')), order_source TEXT NOT NULL DEFAULT '微信' CHECK(order_source IN ('微信', '闲鱼')), order_time TEXT DEFAULT (datetime('now', 'localtime')), complete_time TEXT, notes TEXT, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE RESTRICT ); ``` #### order_details(订单明细表) ```sql CREATE TABLE order_details ( detail_id INTEGER PRIMARY KEY AUTOINCREMENT, order_id TEXT NOT NULL, service_id INTEGER NOT NULL, quantity INTEGER DEFAULT 1, unit_price NUMERIC(8,2) NOT NULL, subtotal NUMERIC(10,2) NOT NULL, FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE, FOREIGN KEY (service_id) REFERENCES services(service_id) ON DELETE RESTRICT ); ``` #### payments(支付记录表) ```sql CREATE TABLE payments ( payment_id INTEGER PRIMARY KEY AUTOINCREMENT, order_id TEXT NOT NULL, payment_method TEXT NOT NULL CHECK(payment_method IN ('支付宝', '微信支付')), payment_amount NUMERIC(10,2) NOT NULL, FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE ); ``` #### user_preferences(用户偏好表) ```sql CREATE TABLE user_preferences ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL UNIQUE, favorite_servers TEXT, favorite_services TEXT, last_order_time TEXT, total_orders INTEGER DEFAULT 0, total_amount NUMERIC(10,2) DEFAULT 0, created_at TEXT DEFAULT (datetime('now', 'localtime')), updated_at TEXT DEFAULT (datetime('now', 'localtime')) ); ``` --- ## 📡 API 接口文档 ### 基础信息 - **API 基础路径**: `http://localhost:3000/api` - **响应格式**: JSON - **认证方式**: JWT Token(通过 Authorization 请求头传递) ### 认证接口 | 方法 | 路径 | 描述 | |------|------|------| | POST | `/api/auth/login` | 用户登录 | | POST | `/api/auth/register` | 用户注册 | | POST | `/api/auth/logout` | 用户登出 | | GET | `/api/auth/me` | 获取当前用户信息 | ### 订单管理接口 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/orders` | 获取订单列表(支持筛选、分页) | | GET | `/api/orders/:id` | 获取特定订单 | | GET | `/api/orders/:id/details` | 获取订单明细 | | GET | `/api/orders/dashboard-stats` | 获取看板统计数据 | | GET | `/api/orders/statistics` | 获取统计数据 | | POST | `/api/orders` | 创建新订单 | | PUT | `/api/orders/:id` | 更新订单 | | PUT | `/api/orders/:id/status` | 更新订单状态 | | DELETE | `/api/orders/:id` | 删除订单 | | PUT | `/api/orders/batch/update-status` | 批量更新订单状态 | | POST | `/api/orders/batch/delete` | 批量删除订单 | | POST | `/api/orders/batch/export` | 批量导出订单 | | POST | `/api/orders/batch/export-excel` | 批量导出订单为 Excel | **订单列表查询参数**: | 参数 | 类型 | 描述 | |------|------|------| | status | string | 订单状态 | | source | string | 订单来源 | | search | string | 搜索关键词 | | minAmount | number | 最小金额 | | maxAmount | number | 最大金额 | | startTime | date | 下单开始时间 | | endTime | date | 下单结束时间 | | page | number | 页码 | | pageSize | number | 每页数量 | ### 用户管理接口 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/users` | 获取用户列表 | | GET | `/api/users/:id` | 获取特定用户 | | GET | `/api/users/:id/preferences` | 获取用户偏好画像 | | GET | `/api/users/:id/recommendations` | 获取推荐服务 | | POST | `/api/users` | 创建用户 | | PUT | `/api/users/:id` | 更新用户 | | DELETE | `/api/users/:id` | 删除用户 | ### 服务管理接口 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/services` | 获取服务列表 | | GET | `/api/services/:id` | 获取特定服务 | | POST | `/api/services` | 创建服务 | | PUT | `/api/services/:id` | 更新服务 | | DELETE | `/api/services/:id` | 删除服务 | | POST | `/api/services/hierarchy` | 更新服务层级排序 | ### 数据导出接口 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/export/orders` | 导出订单数据(Excel) | | GET | `/api/export/orders/csv` | 导出订单数据(CSV) | | GET | `/api/export/summary` | 导出订单汇总(Excel) | ### 数据导入接口 | 方法 | 路径 | 描述 | |------|------|------| | POST | `/api/import/orders` | 从 Excel 导入订单 | ### 用户偏好接口 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/user-preferences/:userId` | 获取用户偏好 | | GET | `/api/user-preferences/popular/servers` | 获取热门服务器 | ### B站数据接口 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/bilibili/stats/:uid` | 获取 B 站统计数据 | ### 支付管理接口 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/payments/:orderId` | 获取订单的支付记录 | | PUT | `/api/payments/:orderId/status` | 更新支付状态 | --- ## 🔐 认证系统 ### JWT Token 系统使用 JWT 进行身份认证。 **Token 获取**: 登录成功后返回 Token **Token 使用**: 在请求头中携带 ``` Authorization: Bearer ``` ### 默认管理员账户 - **用户名**: `admin` - **密码**: `123456` ### 忘记密码重置 创建 `reset_admin_password.js` 文件: ```javascript const bcrypt = require("bcryptjs"); const Database = require("better-sqlite3"); const path = require("path"); const dbPath = path.join(__dirname, "database/live2go.db"); const db = new Database(dbPath); async function resetPassword() { const newPassword = "123456"; const hashedPassword = await bcrypt.hash(newPassword, 10); const stmt = db.prepare( "UPDATE auth_users SET password = ?, login_attempts = 0 WHERE username = ?" ); const result = stmt.run(hashedPassword, "admin"); if (result.changes > 0) { console.log("✅ 管理员密码已重置为:", newPassword); } else { console.log("❌ 未找到管理员用户"); } db.close(); } resetPassword(); ``` 运行:`node reset_admin_password.js` ### 账户锁定解锁 ```sql UPDATE auth_users SET login_attempts = 0 WHERE username = 'admin'; ``` --- ## 💡 使用说明 ### 登录系统 访问 http://localhost:5173,使用管理员账户登录。 ### 订单管理 **创建订单**: 1. 点击"创建订单"按钮 2. 输入客户昵称(支持自动补全和拼音搜索) 3. 填写手机号(11 位) 4. 选择订单来源和状态 5. 添加代肝项目 6. 点击"创建订单" **筛选订单**: - 使用状态筛选:排单中、进行中、已完成、已退款 - 使用来源筛选:微信、闲鱼 - 使用金额筛选:设置最小值和最大值 - 使用时间筛选:下单时间、完单时间 **批量操作**: - 勾选多个订单 - 使用批量操作栏:批量标记状态、批量导出、批量删除 ### 服务管理 **树形结构**: - 服务按分类和项目组织 - 支持展开/折叠查看子项目 - 支持拖拽排序 ### 数据中心 **KPI 数据**: - 今日收入、昨日收入、本月累计收入 - 订单活跃度、收入效率 **收入趋势**: - 切换时间维度(7 天/15 天/30 天) - 查看收入趋势折线图 ### 数据导出 **导出格式**: - Excel (.xlsx) - CSV (.csv) **导出类型**: - 订单数据 - 订单汇总 ### 数据导入 **导入格式**: - Excel 文件 **模板列**: - 订单ID、昵称、订单总额、到账金额、订单状态、订单来源、下单时间、备注 --- ## ❓ 常见问题 ### 1. 端口被占用 **问题**: 提示端口 3000 或 5173 被占用 **解决方案**: ```bash # Windows netstat -ano | findstr :3000 taskkill /PID <进程ID> /F ``` 或修改 `.env` 文件中的 `PORT` 配置 ### 2. 数据库文件损坏 **问题**: SQLite 数据库文件损坏 **解决方案**: ```bash # 使用 SQLite 恢复 sqlite3 database/live2go.db ".recover" > database/live2go_recovered.sql sqlite3 database/live2go_new.db < database/live2go_recovered.sql ``` 或从备份文件恢复: ```bash cp database/live2go_backup_*.db database/live2go.db ``` ### 3. 依赖安装失败 **问题**: npm install 失败 **解决方案**: ```bash npm cache clean --force npm install ``` ### 4. 前端页面空白 **问题**: 访问前端页面显示空白 **解决方案**: - 检查后端服务是否正常启动 - 检查浏览器控制台是否有错误 - 确认前端服务端口正确 ### 5. 登录失败次数过多 **问题**: 账户被锁定 **解决方案**: 重置登录尝试次数: ```javascript // reset_login_attempts.js const Database = require("better-sqlite3"); const db = new Database("database/live2go.db"); db.prepare("UPDATE auth_users SET login_attempts = 0 WHERE username = 'admin'").run(); db.close(); ``` ### 6. 如何查看数据库内容 **解决方案**: 使用 SQLite 可视化工具(如 DB Browser for SQLite)打开 `database/live2go.db` 或使用命令行: ```bash sqlite3 database/live2go.db SQLite version 3.xx.x sqlite> .tables sqlite> SELECT * FROM users; sqlite> .quit ``` --- ## 📦 打包与交付 ### 必须包含的文件 | 文件/目录 | 描述 | |-----------|------| | `config/` | 配置文件目录 | | `database/` | 数据库目录(含 live2go.db) | | `frontend/` | 前端项目目录 | | `src/` | 后端源码目录 | | `.env.example` | 环境变量模板 | | `.gitignore` | Git 忽略规则 | | `package.json` | 后端依赖清单 | | `README.md` | 项目说明文档 | | `start.bat` | Windows 启动脚本 | ### 不需要包含的文件 | 文件/目录 | 原因 | |-----------|------| | `node_modules/` | 依赖包(接收者需自行安装) | | `frontend/node_modules/` | 前端依赖包 | | `frontend/dist/` | 前端构建产物 | | `.env` | 包含敏感信息 | | `.git/` | Git 版本控制 | | `.qoder/` | IDE 配置文件 | ### 打包步骤 1. **创建数据库备份** ```bash cp database/live2go.db database/live2go_backup_$(date +%Y%m%d).db ``` 2. **创建 .env.example** ```env PORT=3000 JWT_SECRET=your-secret-key-change-in-production BILIBILI_UID= BILIBILI_COOKIE= ``` 3. **清理不需要的文件** ```bash rd /s /q node_modules rd /s /q frontend\node_modules rd /s /q frontend\dist rd /s /q .qoder del /q *.log ``` 4. **压缩打包** 使用 7-Zip 或 WinRAR 压缩为 `Liver2Go_v1.0.zip` ### 交付检查清单 - [ ] 已创建最新数据库备份 - [ ] 已创建 .env.example - [ ] 已清理 node_modules - [ ] 已删除个人敏感信息 - [ ] 项目可以正常启动运行 --- ## 📄 许可证 MIT License --- ## 🔄 更新日志 ### v1.3.0 (2026-02-05) **数据库迁移**: - 从 MySQL 迁移到 SQLite - 移除 mysql2 依赖 - 简化数据库配置 - 优化数据库连接(启用 WAL 模式) **功能优化**: - 修复 UserPreference 模型中的 MySQL 语法兼容性问题 - 清理过时文件和备份 - 更新文档 ### v1.2.0 (2026-02-03) **新增功能**: - 新增访问密码验证功能 - 新增登录页面,支持记住密码 - 新增客户偏好画像 - 新增下单推荐功能 - 新增批量操作功能 - 新增动态列配置功能 **优化改进**: - 优化订单号格式 - 优化路由守卫 - 优化 API 请求拦截器 ### v1.1.0 (2026-02-02) **新增功能**: - 新增数据中心页面 - 新增收入趋势图表 - 新增业务维度排行榜 - 新增 B 站数据集成 - 新增数据导入功能 ### v1.0.0 (2026-02-01) **初始版本**: - 基础订单管理功能 - 用户管理功能 - 服务管理功能 - 数据导出功能 --- ## 🤝 贡献 欢迎提交问题和改进建议! --- **最后更新时间**: 2026-02-05