diff --git a/web/src/components/AITradersPage.tsx b/web/src/components/AITradersPage.tsx index 079a956d..32252ad1 100644 --- a/web/src/components/AITradersPage.tsx +++ b/web/src/components/AITradersPage.tsx @@ -1288,85 +1288,96 @@ function SignalSourceModal({ } return ( -
+

{t('signalSourceConfig', language)}

-
-
- - setCoinPool(e.target.value)} - placeholder="https://api.example.com/coinpool" - className="w-full px-3 py-2 rounded" - style={{ - background: '#0B0E11', - border: '1px solid #2B3139', - color: '#EAECEF', - }} - /> -
- {t('coinPoolDescription', language)} + +
+
+ + setCoinPool(e.target.value)} + placeholder="https://api.example.com/coinpool" + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + /> +
+ {t('coinPoolDescription', language)} +
-
-
- - setOiTop(e.target.value)} - placeholder="https://api.example.com/oitop" - className="w-full px-3 py-2 rounded" +
+ + setOiTop(e.target.value)} + placeholder="https://api.example.com/oitop" + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + /> +
+ {t('oiTopDescription', language)} +
+
+ +
-
- {t('oiTopDescription', language)} + > +
+ ℹ️ {t('information', language)} +
+
+
{t('signalSourceInfo1', language)}
+
{t('signalSourceInfo2', language)}
+
{t('signalSourceInfo3', language)}
+
-
- ℹ️ {t('information', language)} -
-
-
{t('signalSourceInfo1', language)}
-
{t('signalSourceInfo2', language)}
-
{t('signalSourceInfo3', language)}
-
-
- -
-
- ) : null} + {t('secretKey', language)} + + setSecretKey(e.target.value)} + placeholder={t('enterSecretKey', language)} + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + required + />
- )} + + {selectedExchange.id === 'okx' && ( +
+ + setPassphrase(e.target.value)} + placeholder={t('enterPassphrase', language)} + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + required + /> +
+ )} + + {/* Binance 白名单IP提示 */} + {selectedExchange.id === 'binance' && ( +
+
+ {t('whitelistIP', language)} +
+
+ {t('whitelistIPDesc', language)} +
+ + {loadingIP ? ( +
+ {t('loadingServerIP', language)} +
+ ) : serverIP && serverIP.public_ip ? ( +
+ + {serverIP.public_ip} + + +
+ ) : null} +
+ )} + + )} + + {/* Hyperliquid 交易所的字段 */} + {selectedExchange.id === 'hyperliquid' && ( + <> +
+ + setApiKey(e.target.value)} + placeholder={t('enterPrivateKey', language)} + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + required + /> +
+ {t('hyperliquidPrivateKeyDesc', language)} +
+
+ + )} + + {/* Aster 交易所的字段 */} + {selectedExchange.id === 'aster' && ( + <> +
+ + setAsterUser(e.target.value)} + placeholder={t('enterUser', language)} + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + required + /> +
+ +
+ + setAsterSigner(e.target.value)} + placeholder={t('enterSigner', language)} + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + required + /> +
+ +
+ + setAsterPrivateKey(e.target.value)} + placeholder={t('enterPrivateKey', language)} + className="w-full px-3 py-2 rounded" + style={{ + background: '#0B0E11', + border: '1px solid #2B3139', + color: '#EAECEF', + }} + required + /> +
)} @@ -2451,56 +2618,44 @@ function ExchangeConfigModal({ )}
- - )} - -
- -
- {t('testnetDescription', language)}
-
-
- - {' '} - {t('securityWarning', language)} - +
+ + {' '} + {t('securityWarning', language)} + +
+
+ {selectedExchange.id === 'aster' && ( +
{t('asterUsdtWarning', language)}
+ )} +
{t('exchangeConfigWarning1', language)}
+
{t('exchangeConfigWarning2', language)}
+
{t('exchangeConfigWarning3', language)}
+
-
- {selectedExchange.id === 'aster' && ( -
{t('asterUsdtWarning', language)}
- )} -
{t('exchangeConfigWarning1', language)}
-
{t('exchangeConfigWarning2', language)}
-
{t('exchangeConfigWarning3', language)}
-
-
- - )} + + )} +
-
+