= (props)
diff --git a/frontend/src/pages/CryptoTailStrategyList.tsx b/frontend/src/pages/CryptoTailStrategyList.tsx
index 1e37699..eb7de70 100644
--- a/frontend/src/pages/CryptoTailStrategyList.tsx
+++ b/frontend/src/pages/CryptoTailStrategyList.tsx
@@ -773,7 +773,7 @@ const CryptoTailStrategyList: React.FC = () => {
{t('cryptoTailStrategy.list.totalRealizedPnl')}
{item.totalRealizedPnl != null ? (
-
{formatUSDC(item.totalRealizedPnl)} USDC
+
${formatUSDC(item.totalRealizedPnl)}
) : (
-
)}
@@ -966,7 +966,7 @@ const CryptoTailStrategyList: React.FC = () => {
) : (
-
+
)
}
@@ -1111,7 +1111,7 @@ const CryptoTailStrategyList: React.FC = () => {
dataIndex: 'amountUsdc',
key: 'amountUsdc',
width: 110,
- render: (v: string) => `${formatUSDC(v)} USDC`
+ render: (v: string) => `$${formatUSDC(v)}`
},
{
title: t('cryptoTailStrategy.triggerRecords.realizedPnl'),
@@ -1186,7 +1186,7 @@ const CryptoTailStrategyList: React.FC = () => {
dataIndex: 'amountUsdc',
key: 'amountUsdc',
width: 110,
- render: (v: string) => `${formatUSDC(v)} USDC`
+ render: (v: string) => `$${formatUSDC(v)}`
},
{
title: t('cryptoTailStrategy.triggerRecords.failReason'),
diff --git a/frontend/src/pages/LeaderList.tsx b/frontend/src/pages/LeaderList.tsx
index 65a77ee..3b7260f 100644
--- a/frontend/src/pages/LeaderList.tsx
+++ b/frontend/src/pages/LeaderList.tsx
@@ -254,7 +254,7 @@ const LeaderList: React.FC = () => {
return (
- {balance.available === '-' ? '-' : `${formatUSDC(balance.available)} USDC`}
+ {balance.available === '-' ? '-' : `$${formatUSDC(balance.available)}`}
{t('leaderDetail.positionBalance')}: {formatUSDC(balance.position)}
@@ -488,7 +488,7 @@ const LeaderList: React.FC = () => {
{t('leaderDetail.availableBalance')}
- {balance?.available && balance.available !== '-' ? `${formatUSDC(balance.available)} USDC` : '- USDC'}
+ {balance?.available && balance.available !== '-' ? `$${formatUSDC(balance.available)}` : '-'}
@@ -700,7 +700,7 @@ const LeaderList: React.FC = () => {
value={parseFloat(detailBalance.availableBalance)}
precision={4}
valueStyle={{ color: '#1890ff' }}
- suffix="USDC"
+ prefix="$"
formatter={(value) => formatUSDC(value?.toString() || '0')}
/>
@@ -712,7 +712,7 @@ const LeaderList: React.FC = () => {
value={parseFloat(detailBalance.positionBalance)}
precision={4}
valueStyle={{ color: '#722ed1' }}
- suffix="USDC"
+ prefix="$"
formatter={(value) => formatUSDC(value?.toString() || '0')}
/>
@@ -724,7 +724,7 @@ const LeaderList: React.FC = () => {
value={parseFloat(detailBalance.totalBalance)}
precision={4}
valueStyle={{ color: '#52c41a', fontWeight: 'bold' }}
- suffix="USDC"
+ prefix="$"
formatter={(value) => formatUSDC(value?.toString() || '0')}
/>
diff --git a/frontend/src/pages/OrderList.tsx b/frontend/src/pages/OrderList.tsx
index 1630f0e..e2648e0 100644
--- a/frontend/src/pages/OrderList.tsx
+++ b/frontend/src/pages/OrderList.tsx
@@ -118,7 +118,7 @@ const OrderList: React.FC = () => {
key: 'pnl',
render: (pnl: string | undefined) => pnl ? (
- {formatUSDC(pnl)} USDC
+ ${formatUSDC(pnl)}
) : '-'
},
diff --git a/frontend/src/pages/PositionList.tsx b/frontend/src/pages/PositionList.tsx
index 4b1660e..60fcb81 100644
--- a/frontend/src/pages/PositionList.tsx
+++ b/frontend/src/pages/PositionList.tsx
@@ -695,7 +695,7 @@ const PositionList: React.FC = () => {
fontWeight: '500',
color: isProfit ? '#52c41a' : '#f5222d'
}}>
- {pnlNum >= 0 ? '+' : ''}{formatUSDC(position.pnl)} USDC
+ {pnlNum >= 0 ? '+' : ''}${formatUSDC(position.pnl)}
)}
@@ -718,7 +718,7 @@ const PositionList: React.FC = () => {
开仓价值
- {formatUSDC(position.initialValue)} USDC
+ ${formatUSDC(position.initialValue)}
{positionFilter === 'current' && position.currentPrice && (
@@ -732,7 +732,7 @@ const PositionList: React.FC = () => {
当前价值
- {formatUSDC(position.currentValue)} USDC
+ ${formatUSDC(position.currentValue)}
>
@@ -775,7 +775,7 @@ const PositionList: React.FC = () => {
fontWeight: 'bold',
color: isProfit ? '#52c41a' : '#f5222d'
}}>
- {pnlNum >= 0 ? '+' : ''}{formatUSDC(position.pnl)} USDC
+ {pnlNum >= 0 ? '+' : ''}${formatUSDC(position.pnl)}
@@ -802,7 +802,7 @@ const PositionList: React.FC = () => {
color: parseFloat(position.realizedPnl) >= 0 ? '#52c41a' : '#f5222d',
fontWeight: '500'
}}>
- {parseFloat(position.realizedPnl) >= 0 ? '+' : ''}{formatUSDC(position.realizedPnl)} USDC
+ {parseFloat(position.realizedPnl) >= 0 ? '+' : ''}${formatUSDC(position.realizedPnl)}
)}
@@ -951,7 +951,7 @@ const PositionList: React.FC = () => {
dataIndex: 'initialValue',
key: 'initialValue',
render: (value: string) => (
- {formatUSDC(value)} USDC
+ ${formatUSDC(value)}
),
align: 'right' as const,
width: 110
@@ -971,7 +971,7 @@ const PositionList: React.FC = () => {
return (
- {formatUSDC(record.currentValue)} USDC
+ ${formatUSDC(record.currentValue)}
{
borderColor: '#52c41a'
}}
>
- 赎回 ({redeemableSummary.totalCount}个, {formatUSDC(redeemableSummary.totalValue)} USDC)
+ 赎回 ({redeemableSummary.totalCount}个, ${formatUSDC(redeemableSummary.totalValue)})
)}
@@ -1238,13 +1238,13 @@ const PositionList: React.FC = () => {
开仓价值合计:{' '}
- {formatUSDC(positionTotals.totalInitialValue.toString())} USDC
+ ${formatUSDC(positionTotals.totalInitialValue.toString())}
当前价值合计:{' '}
- {formatUSDC(positionTotals.totalCurrentValue.toString())} USDC
+ ${formatUSDC(positionTotals.totalCurrentValue.toString())}
@@ -1256,7 +1256,7 @@ const PositionList: React.FC = () => {
}}
>
{positionTotals.totalPnl >= 0 ? '+' : ''}
- {formatUSDC(positionTotals.totalPnl.toString())} USDC
+ ${formatUSDC(positionTotals.totalPnl.toString())}
@@ -1268,7 +1268,7 @@ const PositionList: React.FC = () => {
}}
>
{positionTotals.totalRealizedPnl >= 0 ? '+' : ''}
- {formatUSDC(positionTotals.totalRealizedPnl.toString())} USDC
+ ${formatUSDC(positionTotals.totalRealizedPnl.toString())}
@@ -1532,7 +1532,7 @@ const PositionList: React.FC = () => {
color: currentPnl.pnl >= 0 ? '#52c41a' : '#f5222d',
marginBottom: '4px'
}}>
- {currentPnl.pnl >= 0 ? '+' : ''}{formatUSDC(currentPnl.pnl)} USDC
+ {currentPnl.pnl >= 0 ? '+' : ''}${formatUSDC(currentPnl.pnl)}
{
- {formatUSDC(redeemableSummary.totalValue)} USDC
+ ${formatUSDC(redeemableSummary.totalValue)}
@@ -1625,7 +1625,7 @@ const PositionList: React.FC = () => {
width: 120
},
{
- title: '价值 (USDC)',
+ title: '价值 ($)',
dataIndex: 'value',
key: 'value',
align: 'right' as const,
diff --git a/frontend/src/pages/Statistics.tsx b/frontend/src/pages/Statistics.tsx
index 8736f7c..bfbe2ed 100644
--- a/frontend/src/pages/Statistics.tsx
+++ b/frontend/src/pages/Statistics.tsx
@@ -101,9 +101,8 @@ const Statistics: React.FC = () => {
= 0 ? : }
+ prefix={<>{stats?.totalPnl && parseFloat(stats.totalPnl) >= 0 ? : } $>}
valueStyle={{ color: stats?.totalPnl && parseFloat(stats.totalPnl || '0') >= 0 ? '#3f8600' : '#cf1322' }}
- suffix="USDC"
loading={loading}
/>
@@ -124,9 +123,8 @@ const Statistics: React.FC = () => {
= 0 ? : }
+ prefix={<>{stats?.avgPnl && parseFloat(stats.avgPnl || '0') >= 0 ? : } $>}
valueStyle={{ color: stats?.avgPnl && parseFloat(stats.avgPnl || '0') >= 0 ? '#3f8600' : '#cf1322' }}
- suffix="USDC"
loading={loading}
/>
@@ -136,9 +134,8 @@ const Statistics: React.FC = () => {
}
+ prefix={<> $>}
valueStyle={{ color: '#3f8600' }}
- suffix="USDC"
loading={loading}
/>
@@ -148,9 +145,8 @@ const Statistics: React.FC = () => {
}
+ prefix={<> $>}
valueStyle={{ color: '#cf1322' }}
- suffix="USDC"
loading={loading}
/>
diff --git a/frontend/src/pages/TemplateAdd.tsx b/frontend/src/pages/TemplateAdd.tsx
index af7f84d..e2aa4b8 100644
--- a/frontend/src/pages/TemplateAdd.tsx
+++ b/frontend/src/pages/TemplateAdd.tsx
@@ -154,7 +154,7 @@ const TemplateAdd: React.FC = () => {
{copyMode === 'FIXED' && (
{
{copyMode === 'RATIO' && (
<>
{
= 1 USDC。例如:设置为 10,如果计算出的跟单金额小于 10,则跳过该订单。'}
+ tooltip={t('templateAdd.minOrderSizeTooltip') || '比例模式下,限制单笔跟单订单的最小金额下限,用于过滤掉金额过小的订单,避免频繁小额交易。如果填写,必须 >= $1。例如:设置为 10,如果计算出的跟单金额小于 10,则跳过该订单。'}
rules={[
{
validator: (_, value) => {
@@ -282,7 +282,7 @@ const TemplateAdd: React.FC = () => {
diff --git a/frontend/src/pages/TemplateEdit.tsx b/frontend/src/pages/TemplateEdit.tsx
index cf18826..9bf72f1 100644
--- a/frontend/src/pages/TemplateEdit.tsx
+++ b/frontend/src/pages/TemplateEdit.tsx
@@ -189,9 +189,9 @@ const TemplateEdit: React.FC = () => {
{copyMode === 'FIXED' && (
= 1 USDC。例如:设置为 10,则无论 Leader 买入多少,跟单金额始终为 10 USDC。'}
+ tooltip={t('templateEdit.fixedAmountTooltip') || '固定金额模式下,每次跟单的固定金额,不随 Leader 订单大小变化。必须 >= $1。例如:设置为 10,则无论 Leader 买入多少,跟单金额始终为 $10。'}
rules={[
{ required: true, message: t('templateEdit.fixedAmountRequired') || '请输入固定跟单金额' },
{
@@ -229,9 +229,9 @@ const TemplateEdit: React.FC = () => {
{copyMode === 'RATIO' && (
<>
{
= 1 USDC。例如:设置为 10,如果计算出的跟单金额小于 10,则跳过该订单。'}
+ tooltip={t('templateEdit.minOrderSizeTooltip') || '比例模式下,限制单笔跟单订单的最小金额下限,用于过滤掉金额过小的订单,避免频繁小额交易。如果填写,必须 >= $1。例如:设置为 10,如果计算出的跟单金额小于 10,则跳过该订单。'}
rules={[
{
validator: (_, value) => {
@@ -318,7 +318,7 @@ const TemplateEdit: React.FC = () => {
diff --git a/frontend/src/pages/TemplateList.tsx b/frontend/src/pages/TemplateList.tsx
index 6a3dfce..618f265 100644
--- a/frontend/src/pages/TemplateList.tsx
+++ b/frontend/src/pages/TemplateList.tsx
@@ -176,7 +176,7 @@ const TemplateList: React.FC = () => {
if (record.copyMode === 'RATIO') {
return `${t('templateList.ratio') || '比例'} ${record.copyRatio}x`
} else if (record.copyMode === 'FIXED' && record.fixedAmount) {
- return `${t('templateList.fixedAmount') || '固定'} ${formatUSDC(record.fixedAmount)} USDC`
+ return `$${formatUSDC(record.fixedAmount)}`
}
return '-'
}
@@ -350,7 +350,7 @@ const TemplateList: React.FC = () => {
{template.copyMode === 'RATIO'
? `${t('templateList.ratioMode') || '比例模式'} ${(parseFloat(template.copyRatio || '0') * 100).toFixed(0).replace(/\.0+$/, '')}%`
- : `${t('templateList.fixedAmountMode') || '固定金额'} ${formatUSDC(template.fixedAmount || '0')} USDC`
+ : `$${formatUSDC(template.fixedAmount || '0')}`
}
@@ -396,11 +396,11 @@ const TemplateList: React.FC = () => {
}}>
{t('templateList.amountLimit') || '金额限制'}:
{template.maxOrderSize && (
- {t('templateList.max') || '最大'} {formatUSDC(template.maxOrderSize)} USDC
+ {t('templateList.max') || '最大'} ${formatUSDC(template.maxOrderSize)}
)}
{template.maxOrderSize && template.minOrderSize && | }
{template.minOrderSize && (
- {t('templateList.min') || '最小'} {formatUSDC(template.minOrderSize)} USDC
+ {t('templateList.min') || '最小'} ${formatUSDC(template.minOrderSize)}
)}
{!template.maxOrderSize && !template.minOrderSize && {t('templateList.notSet') || '未设置'}}
@@ -551,7 +551,7 @@ const TemplateList: React.FC = () => {
{copyMode === 'FIXED' && (
{
{copyMode === 'RATIO' && (
<>
{
{
@@ -698,7 +698,7 @@ const TemplateList: React.FC = () => {
过滤条件(可选)