'use client'; import { useState, useEffect, useCallback } from 'react'; import { PageContainer } from '@/components/layout'; import { cn } from '@/utils/helpers'; import styles from './settings.module.scss'; import { systemConfigService, type DisplaySettings } from '@/services/systemConfigService'; /** * 后台账号数据接口 */ interface AdminAccount { id: string; name: string; role: string; status: 'active' | 'disabled'; lastLogin: string; } /** * 操作日志数据接口 */ interface OperationLog { id: string; time: string; account: string; type: string; description: string; result: 'pass' | 'reject' | 'pending'; } /** * 考核目标数据接口 */ interface AssessmentTarget { month: number; provinceMonthly: number; provinceCumulative: number; cityMonthly: number; cityCumulative: number; } // 模拟后台账号数据 const mockAccounts: AdminAccount[] = [ { id: '1', name: 'admin', role: '超级管理员', status: 'active', lastLogin: '2023-10-26 10:30' }, { id: '2', name: 'operator01', role: '运营人员', status: 'active', lastLogin: '2023-10-26 09:15' }, ]; // 模拟操作日志数据 const mockLogs: OperationLog[] = [ { id: '1', time: '10-26 10:35', account: 'admin', type: '修改配置', description: '修改结算参数', result: 'pass' }, ]; // 模拟考核目标数据 const mockTargets: AssessmentTarget[] = [ { month: 1, provinceMonthly: 100, provinceCumulative: 100, cityMonthly: 20, cityCumulative: 20 }, { month: 2, provinceMonthly: 120, provinceCumulative: 220, cityMonthly: 25, cityCumulative: 45 }, ]; export default function SettingsPage() { // 结算参数设置 const [settlementCurrencies, setSettlementCurrencies] = useState(['BNB', '积分']); const [defaultCurrency, setDefaultCurrency] = useState(''); // 龙虎榜设置 const [enableVirtualAccount, setEnableVirtualAccount] = useState(false); const [virtualAccountCount, setVirtualAccountCount] = useState(''); const [dailyRankEnabled, setDailyRankEnabled] = useState(true); const [weeklyRankEnabled, setWeeklyRankEnabled] = useState(true); const [monthlyRankEnabled, setMonthlyRankEnabled] = useState(true); const [displayCount, setDisplayCount] = useState(''); // 认种限额设置 const [singleAccountLimitEnabled, setSingleAccountLimitEnabled] = useState(false); const [singleAccountDays, setSingleAccountDays] = useState(''); const [singleAccountTrees, setSingleAccountTrees] = useState(''); const [networkLimitEnabled, setNetworkLimitEnabled] = useState(false); const [networkDays, setNetworkDays] = useState(''); const [networkTrees, setNetworkTrees] = useState(''); // 考核规则设置 const [localUserThreshold, setLocalUserThreshold] = useState('5'); const [exemptionEnabled, setExemptionEnabled] = useState(false); // 前端展示设置 const [allowNonAdopterView, setAllowNonAdopterView] = useState(false); const [heatDisplayMode, setHeatDisplayMode] = useState<'count' | 'level'>('count'); const [displaySettingsLoading, setDisplaySettingsLoading] = useState(false); const [displaySettingsSaving, setDisplaySettingsSaving] = useState(false); const [displaySettingsError, setDisplaySettingsError] = useState(null); // 后台账号与安全 const [approvalCount, setApprovalCount] = useState('3'); const [sensitiveOperations, setSensitiveOperations] = useState(['修改结算参数', '删除用户']); const [logDate, setLogDate] = useState(''); const [logSearch, setLogSearch] = useState(''); // 加载前端展示设置 const loadDisplaySettings = useCallback(async () => { setDisplaySettingsLoading(true); setDisplaySettingsError(null); try { const settings = await systemConfigService.getDisplaySettings(); setAllowNonAdopterView(settings.allowNonAdopterViewHeat); setHeatDisplayMode(settings.heatDisplayMode); } catch (error) { console.error('Failed to load display settings:', error); setDisplaySettingsError('加载展示设置失败'); } finally { setDisplaySettingsLoading(false); } }, []); // 保存前端展示设置 const saveDisplaySettings = useCallback(async () => { setDisplaySettingsSaving(true); setDisplaySettingsError(null); try { await systemConfigService.updateDisplaySettings({ allowNonAdopterViewHeat: allowNonAdopterView, heatDisplayMode: heatDisplayMode, }); alert('展示设置保存成功'); } catch (error) { console.error('Failed to save display settings:', error); setDisplaySettingsError('保存展示设置失败'); } finally { setDisplaySettingsSaving(false); } }, [allowNonAdopterView, heatDisplayMode]); // 组件挂载时加载展示设置 useEffect(() => { loadDisplaySettings(); }, [loadDisplaySettings]); // 切换货币选择 const toggleCurrency = (currency: string) => { if (settlementCurrencies.includes(currency)) { setSettlementCurrencies(settlementCurrencies.filter(c => c !== currency)); } else { setSettlementCurrencies([...settlementCurrencies, currency]); } }; // Toggle 组件 const Toggle = ({ checked, onChange, size = 'normal' }: { checked: boolean; onChange: (v: boolean) => void; size?: 'normal' | 'small' }) => { if (size === 'small') { return (
onChange(!checked)} >
); } return (
onChange(!checked)} >
); }; return (
{/* 页面头部 */}

系统设置

配置结算参数、龙虎榜规则、认种限额、考核规则及后台安全策略

所有设置修改后请点击下方"保存设置"按钮生效
{/* 结算参数设置 */}

结算参数设置

{['BNB', 'OG', '积分', 'DST'].map(currency => ( ))}
提示:默认结算币种将用于用户点击"一键结算"时的自动兑换。
{/* 龙虎榜设置 */}

龙虎榜设置

启用虚拟账户参与排名
虚拟账户数量 setVirtualAccountCount(e.target.value)} />
日榜开关
周榜开关
月榜开关
setDisplayCount(e.target.value)} /> 仅显示前 N 名的排行榜数据
提示:虚拟账户仅用于展示效果,不影响真实收益结算。
{/* 认种限额设置 */}

认种限额设置

{/* 单账户认种限额 */}
单账户认种限额
setSingleAccountDays(e.target.value)} /> 天内,每个账户最多认种 setSingleAccountTrees(e.target.value)} />
示例:5 天内最多认种 1 棵
{/* 全网总量限额 */}
全网总量限额
setNetworkDays(e.target.value)} /> 天内,全网总认种上限 setNetworkTrees(e.target.value)} />
示例:2 天内总量 100 棵
{/* 考核规则设置 */}

考核规则设置

{/* 本地用户占比阈值 */}
setLocalUserThreshold(e.target.value)} /> %
当团队中本省/市用户占比低于此值时,将触发相应考核机制。
{/* 豁免设置 */}
允许为单个账号设置"不考核自有团队本省/市占比"豁免 开启后,可在用户管理页面为特定账号设置豁免权。
{/* 阶梯性考核目标表 */}

省代 / 市代阶梯性考核目标表

考核月
省代当月目标
省代累计目标
市代当月目标
市代累计目标
{mockTargets.map((target) => (
第{target.month}个月
{target.provinceMonthly}
{target.provinceCumulative}
{target.cityMonthly}
{target.cityCumulative}
))}
此表格用于设定不同代理级别的月度和累计业绩目标。
{/* 前端展示设置 */}

前端展示设置

{displaySettingsError && (
{displaySettingsError}
)}
允许未认种用户查看各省认种热度
提示:仅影响前端展示,不影响任何收益计算及排名。
{/* 后台账号与安全 */}

后台账号与安全

{/* 左侧:账号管理 */}

后台账号与角色

账号名
角色
状态
最近登录
操作
{mockAccounts.map((account) => (
{account.name}
{account.role}
{account.status === 'active' ? '正常' : '禁用'}
{account.lastLogin}
))}
管理后台操作员账号及其权限角色。
{/* 右侧:敏感操作和日志 */}
{/* 敏感操作审批 */}
敏感操作审批人数 setApprovalCount(e.target.value)} />
{sensitiveOperations.map((op, index) => ( {op} ))}
{/* 操作日志 */}

操作日志

setLogDate(e.target.value)} /> setLogSearch(e.target.value)} />
时间
操作账号
类型
描述
审批结果
{mockLogs.map((log) => (
{log.time}
{log.account}
{log.type}
{log.description}
{log.result === 'pass' ? '通过' : log.result === 'reject' ? '拒绝' : '待审'}
))}
{/* 页面底部操作按钮 */}
); }