From 27eb358497e6757002540ca395d334c7281de9cb Mon Sep 17 00:00:00 2001 From: GuoRuqiang <61670021+guoruqiang@users.noreply.github.com> Date: Sat, 17 Aug 2024 16:17:24 +0000 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=96=B0=E4=BF=AE=E6=94=B9=E4=BA=86ch?= =?UTF-8?q?at?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/App.js | 12 ++++ web/src/components/fetchTokenKeys.js | 68 +++++++++++++++++++++ web/src/pages/Chat/index.js | 91 ++++------------------------ web/src/pages/Chat2Link/index.js | 26 ++++++++ 4 files changed, 119 insertions(+), 78 deletions(-) create mode 100644 web/src/components/fetchTokenKeys.js create mode 100644 web/src/pages/Chat2Link/index.js diff --git a/web/src/App.js b/web/src/App.js index 0db9a22..37f4400 100644 --- a/web/src/App.js +++ b/web/src/App.js @@ -20,6 +20,7 @@ import Redemption from './pages/Redemption'; import TopUp from './pages/TopUp'; import Log from './pages/Log'; import Chat from './pages/Chat'; +import Chat2Link from './pages/Chat2Link'; //新增 import { Layout } from '@douyinfe/semi-ui'; import Midjourney from './pages/Midjourney'; import Pricing from './pages/Pricing/index.js'; @@ -255,6 +256,17 @@ function App() { } /> + {/* 方便使用外链... */} + + }> + + + + } + /> } /> diff --git a/web/src/components/fetchTokenKeys.js b/web/src/components/fetchTokenKeys.js new file mode 100644 index 0000000..60a80d5 --- /dev/null +++ b/web/src/components/fetchTokenKeys.js @@ -0,0 +1,68 @@ +// src/hooks/useTokenKeys.js +import { useEffect, useState } from 'react'; +import { API, showError } from '../helpers'; + +async function fetchTokenKeys() { + try { + const response = await API.get('/api/token/?p=0&size=999'); + const { success, data } = response.data; + if (success) { + const activeTokens = data.filter((token) => token.status === 1); + return activeTokens.map((token) => token.key); + } else { + throw new Error('Failed to fetch token keys'); + } + } catch (error) { + console.error("Error fetching token keys:", error); + return []; + } +} + +function getServerAddress() { + let status = localStorage.getItem('status'); + let serverAddress = ''; + + if (status) { + try { + status = JSON.parse(status); + serverAddress = status.server_address || ''; + } catch (error) { + console.error("Failed to parse status from localStorage:", error); + } + } + + if (!serverAddress) { + serverAddress = window.location.origin; + } + + return serverAddress; +} + +export function useTokenKeys() { + const [keys, setKeys] = useState([]); + const [chatLink, setChatLink] = useState(''); + const [serverAddress, setServerAddress] = useState(''); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + const loadAllData = async () => { + const fetchedKeys = await fetchTokenKeys(); + if (fetchedKeys.length === 0) { + showError('当前没有可用的启用令牌,请确认是否有令牌处于启用状态!'); + window.location.href = '/token'; + } + setKeys(fetchedKeys); + setIsLoading(false); + + const link = localStorage.getItem('chat_link'); + setChatLink(link); + + const address = getServerAddress(); + setServerAddress(address); + }; + + loadAllData(); + }, []); + + return { keys, chatLink, serverAddress, isLoading }; +} \ No newline at end of file diff --git a/web/src/pages/Chat/index.js b/web/src/pages/Chat/index.js index 866d8a4..b2dd414 100644 --- a/web/src/pages/Chat/index.js +++ b/web/src/pages/Chat/index.js @@ -1,72 +1,9 @@ -import React, { useEffect, useState } from 'react'; -import { API, showError } from '../../helpers'; +import React from 'react'; +import { useTokenKeys } from '../../components/fetchTokenKeys'; import { Layout } from '@douyinfe/semi-ui'; -// 获取 Token Keys 的异步函数,过滤掉非启用状态的令牌 -async function fetchTokenKeys() { - try { - const response = await API.get('/api/token/?p=0&size=999'); - const { success, data } = response.data; - if (success) { - // 过滤已启用状态的令牌 - const activeTokens = data.filter((token) => token.status === 1); - return activeTokens.map((token) => token.key); - } else { - throw new Error('Failed to fetch token keys'); - } - } catch (error) { - console.error("Error fetching token keys:", error); - return []; - } -} - -function getServerAddress() { - let status = localStorage.getItem('status'); - let serverAddress = ''; - - if (status) { - try { - status = JSON.parse(status); - serverAddress = status.server_address || ''; - } catch (error) { - console.error("Failed to parse status from localStorage:", error); - } - } - - if (!serverAddress) { - serverAddress = window.location.origin; - } - - return serverAddress; -} - -const TokenKeysPage = () => { - const [keys, setKeys] = useState([]); - const [chatLink, setChatLink] = useState(''); - const [serverAddress, setServerAddress] = useState(''); - const [isLoading, setIsLoading] = useState(true); - - useEffect(() => { - const loadAllData = async () => { - const fetchedKeys = await fetchTokenKeys(); - if (fetchedKeys.length === 0) { - // showError('当前没有可用的启用令牌,请确认是否有令牌处于启用状态!'); - setTimeout(() => { - window.location.href = '/token'; - }, 1500); // 延迟 1.5 秒后跳转 - } - setKeys(fetchedKeys); - setIsLoading(false); - - const link = localStorage.getItem('chat_link'); - setChatLink(link); - - const address = getServerAddress(); - setServerAddress(address); - }; - - loadAllData(); - }, []); +const ChatPage = () => { + const { keys, chatLink, serverAddress, isLoading } = useTokenKeys(); const comLink = (key) => { if (!chatLink || !serverAddress || !key) return ''; @@ -75,7 +12,6 @@ const TokenKeysPage = () => { const iframeSrc = keys.length > 0 ? comLink(keys[0]) : ''; - // 生成链接 return !isLoading && iframeSrc ? (