feat: 完善跟单模板管理功能

- 更新需求文档:移除每日最大亏损限制、跟单延迟、轮询和WebSocket配置
- 跟单比例改为百分比格式(10%-1000%),只允许整数
- 所有USDC字段支持最多4位小数
- 固定金额和最小金额校验(必须>=1)
- 模板名称支持编辑
- 复制模板改为Modal形式,可编辑后创建
- 模板列表按创建时间降序排序,显示创建时间
- 移动端适配:使用卡片式布局
- 合并跟单比例和固定金额列为跟单配置
- 支持卖出改为跟单卖出
- 菜单结构调整:跟单管理作为父菜单,包含跟单模板和跟单配置子菜单
This commit is contained in:
WrBug
2025-12-01 23:03:17 +08:00
parent 914983acd7
commit fd10a31780
28 changed files with 4298 additions and 234 deletions
@@ -0,0 +1,12 @@
-- 创建被跟单者(Leader)表
CREATE TABLE IF NOT EXISTS copy_trading_leaders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
leader_address VARCHAR(42) NOT NULL UNIQUE COMMENT '被跟单者的钱包地址',
leader_name VARCHAR(100) NULL COMMENT '被跟单者名称',
category VARCHAR(20) NULL COMMENT '分类筛选(sports/crypto),null表示不筛选',
created_at BIGINT NOT NULL COMMENT '创建时间(毫秒时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(毫秒时间戳)',
INDEX idx_leader_address (leader_address),
INDEX idx_category (category)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='被跟单者表';
@@ -0,0 +1,23 @@
-- 创建跟单模板表
CREATE TABLE IF NOT EXISTS copy_trading_templates (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
template_name VARCHAR(100) NOT NULL UNIQUE COMMENT '模板名称',
copy_mode VARCHAR(10) NOT NULL DEFAULT 'RATIO' COMMENT '跟单金额模式(RATIO/FIXED',
copy_ratio DECIMAL(10, 2) NOT NULL DEFAULT 1.00 COMMENT '跟单比例(仅在copyMode=RATIO时生效)',
fixed_amount DECIMAL(20, 8) NULL COMMENT '固定跟单金额(仅在copyMode=FIXED时生效)',
max_order_size DECIMAL(20, 8) NOT NULL DEFAULT 1000.00000000 COMMENT '单笔订单最大金额(USDC',
min_order_size DECIMAL(20, 8) NOT NULL DEFAULT 1.00000000 COMMENT '单笔订单最小金额(USDC',
max_daily_loss DECIMAL(20, 8) NOT NULL DEFAULT 10000.00000000 COMMENT '每日最大亏损限制(USDC',
max_daily_orders INT NOT NULL DEFAULT 100 COMMENT '每日最大跟单订单数',
price_tolerance DECIMAL(5, 2) NOT NULL DEFAULT 5.00 COMMENT '价格容忍度(百分比,0-100',
delay_seconds INT NOT NULL DEFAULT 0 COMMENT '跟单延迟(秒,默认0立即跟单)',
poll_interval_seconds INT NOT NULL DEFAULT 5 COMMENT '轮询间隔(秒,仅在WebSocket不可用时使用)',
use_websocket BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否优先使用WebSocket推送',
websocket_reconnect_interval INT NOT NULL DEFAULT 5000 COMMENT 'WebSocket重连间隔(毫秒)',
websocket_max_retries INT NOT NULL DEFAULT 10 COMMENT 'WebSocket最大重试次数',
support_sell BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否支持跟单卖出',
created_at BIGINT NOT NULL COMMENT '创建时间(毫秒时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(毫秒时间戳)',
INDEX idx_template_name (template_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='跟单模板表';
@@ -0,0 +1,19 @@
-- 创建跟单关系表(钱包-模板关联,多对多关系)
CREATE TABLE IF NOT EXISTS copy_trading (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
account_id BIGINT NOT NULL COMMENT '钱包账户ID',
template_id BIGINT NOT NULL COMMENT '模板ID',
leader_id BIGINT NOT NULL COMMENT 'Leader ID',
enabled BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
created_at BIGINT NOT NULL COMMENT '创建时间(毫秒时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(毫秒时间戳)',
UNIQUE KEY uk_account_template_leader (account_id, template_id, leader_id),
INDEX idx_account_id (account_id),
INDEX idx_template_id (template_id),
INDEX idx_leader_id (leader_id),
INDEX idx_enabled (enabled),
FOREIGN KEY (account_id) REFERENCES copy_trading_accounts(id) ON DELETE CASCADE,
FOREIGN KEY (template_id) REFERENCES copy_trading_templates(id) ON DELETE RESTRICT,
FOREIGN KEY (leader_id) REFERENCES copy_trading_leaders(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='跟单关系表(钱包-模板关联)';