diff --git a/web/default/src/components/ChannelsTable.js b/web/default/src/components/ChannelsTable.js index 1d7f41b2..f4ff6eb2 100644 --- a/web/default/src/components/ChannelsTable.js +++ b/web/default/src/components/ChannelsTable.js @@ -435,7 +435,7 @@ const ChannelsTable = () => { 点击下方详情按钮可以显示余额以及设置额外的测试模型。 )} - +
{ )} -
+
- {timestamp2string(timestamp)} - - ); + return <>{timestamp2string(timestamp)}; } function renderStatus(status) { switch (status) { case 1: - return ; + return ( + + ); case 2: - return ; + return ( + + ); case 3: - return ; + return ( + + ); default: - return ; + return ( + + ); } } @@ -110,7 +140,9 @@ const RedemptionsTable = () => { return; } setSearching(true); - const res = await API.get(`/api/redemption/search?keyword=${searchKeyword}`); + const res = await API.get( + `/api/redemption/search?keyword=${searchKeyword}` + ); const { success, message, data } = res.data; if (success) { setRedemptions(data); @@ -159,7 +191,7 @@ const RedemptionsTable = () => { /> -
+
{ return ( {redemption.id} - {redemption.name ? redemption.name : '无'} + + {redemption.name ? redemption.name : '无'} + {renderStatus(redemption.status)} {renderQuota(redemption.quota)} - {renderTimestamp(redemption.created_time)} - {redemption.redeemed_time ? renderTimestamp(redemption.redeemed_time) : "尚未兑换"} + + {renderTimestamp(redemption.created_time)} + + + {redemption.redeemed_time + ? renderTimestamp(redemption.redeemed_time) + : '尚未兑换'}{' '} +
- {timestamp2string(timestamp)} - - ); + return <>{timestamp2string(timestamp)}; } function renderStatus(status) { switch (status) { case 1: - return ; + return ( + + ); case 2: - return ; + return ( + + ); case 3: - return ; + return ( + + ); case 4: - return ; + return ( + + ); default: - return ; + return ( + + ); } } @@ -98,9 +133,10 @@ const TokensTable = () => { let encodedServerAddress = encodeURIComponent(serverAddress); const nextLink = localStorage.getItem('chat_link'); let nextUrl; - + if (nextLink) { - nextUrl = nextLink + `/#/?settings={"key":"sk-${key}","url":"${serverAddress}"}`; + nextUrl = + nextLink + `/#/?settings={"key":"sk-${key}","url":"${serverAddress}"}`; } else { nextUrl = `https://app.nextchat.dev/#/?settings={"key":"sk-${key}","url":"${serverAddress}"}`; } @@ -117,7 +153,9 @@ const TokensTable = () => { url = nextUrl; break; case 'lobechat': - url = nextLink + `/?settings={"keyVaults":{"openai":{"apiKey":"sk-${key}","baseURL":"${serverAddress}/v1"}}}`; + url = + nextLink + + `/?settings={"keyVaults":{"openai":{"apiKey":"sk-${key}","baseURL":"${serverAddress}/v1"}}}`; break; default: url = `sk-${key}`; @@ -135,7 +173,7 @@ const TokensTable = () => { let serverAddress = ''; if (status) { status = JSON.parse(status); - serverAddress = status.server_address; + serverAddress = status.server_address; } if (serverAddress === '') { serverAddress = window.location.origin; @@ -143,9 +181,10 @@ const TokensTable = () => { let encodedServerAddress = encodeURIComponent(serverAddress); const chatLink = localStorage.getItem('chat_link'); let defaultUrl; - + if (chatLink) { - defaultUrl = chatLink + `/#/?settings={"key":"sk-${key}","url":"${serverAddress}"}`; + defaultUrl = + chatLink + `/#/?settings={"key":"sk-${key}","url":"${serverAddress}"}`; } else { defaultUrl = `https://app.nextchat.dev/#/?settings={"key":"sk-${key}","url":"${serverAddress}"}`; } @@ -154,21 +193,23 @@ const TokensTable = () => { case 'ama': url = `ama://set-api-key?server=${encodedServerAddress}&key=sk-${key}`; break; - + case 'opencat': url = `opencat://team/join?domain=${encodedServerAddress}&token=sk-${key}`; break; case 'lobechat': - url = chatLink + `/?settings={"keyVaults":{"openai":{"apiKey":"sk-${key}","baseURL":"${serverAddress}/v1"}}}`; + url = + chatLink + + `/?settings={"keyVaults":{"openai":{"apiKey":"sk-${key}","baseURL":"${serverAddress}/v1"}}}`; break; default: url = defaultUrl; } - + window.open(url, '_blank'); - } + }; useEffect(() => { loadTokens(0, orderBy) @@ -274,7 +315,7 @@ const TokensTable = () => { /> -
+
{ {token.name ? token.name : '无'} {renderStatus(token.status)} {renderQuota(token.used_quota)} - {token.unlimited_quota ? '无限制' : renderQuota(token.remain_quota, 2)} + + {token.unlimited_quota + ? '无限制' + : renderQuota(token.remain_quota, 2)} + {renderTimestamp(token.created_time)} - {token.expired_time === -1 ? '永不过期' : renderTimestamp(token.expired_time)} + + {token.expired_time === -1 + ? '永不过期' + : renderTimestamp(token.expired_time)} +
- + - ({ - ...option, - onClick: async () => { - await onOpenLink(option.value, token.key); - } - }))} - trigger={<>} - /> - - {' '} + size={'small'} + positive + onClick={() => { + onOpenLink('', token.key); + }} + > + 聊天 + + ({ + ...option, + onClick: async () => { + await onOpenLink(option.value, token.key); + }, + }))} + trigger={<>} + /> + {' '} @@ -443,14 +491,24 @@ const TokensTable = () => { - + { (async () => { const res = await API.post('/api/user/manage', { username, - action + action, }); const { success, message } = res.data; if (success) { @@ -169,7 +182,7 @@ const UsersTable = () => { /> -
+
{ {renderText(user.username, 15)}} hoverable /> @@ -249,9 +264,22 @@ const UsersTable = () => { {/* {user.email ? {renderText(user.email, 24)}} /> : '无'}*/} {/**/} - {renderQuota(user.quota)}} /> - {renderQuota(user.used_quota)}} /> - {renderNumber(user.request_count)}} /> + {renderQuota(user.quota)}} + /> + {renderQuota(user.used_quota)} + } + /> + {renderNumber(user.request_count)} + } + /> {renderRole(user.role)} {renderStatus(user.status)} @@ -279,7 +307,11 @@ const UsersTable = () => { + } @@ -335,8 +367,16 @@ const UsersTable = () => { options={[ { key: '', text: '默认排序', value: '' }, { key: 'quota', text: '按剩余额度排序', value: 'quota' }, - { key: 'used_quota', text: '按已用额度排序', value: 'used_quota' }, - { key: 'request_count', text: '按请求次数排序', value: 'request_count' }, + { + key: 'used_quota', + text: '按已用额度排序', + value: 'used_quota', + }, + { + key: 'request_count', + text: '按请求次数排序', + value: 'request_count', + }, ]} value={orderBy} onChange={handleOrderByChange}