From 6810ee0a28f1cef597699a6c52b75dd0a9e09a64 Mon Sep 17 00:00:00 2001
From: GuoRuqiang <61670021+guoruqiang@users.noreply.github.com>
Date: Sat, 17 Aug 2024 23:09:45 +0800
Subject: [PATCH 1/8] Update Chat
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
修改chat界面,配合nextChat等前端可以自动传入第一个已启用令牌,
---
web/src/pages/Chat/index.js | 98 ++++++++++++++++++++++++++++++++++---
1 file changed, 92 insertions(+), 6 deletions(-)
diff --git a/web/src/pages/Chat/index.js b/web/src/pages/Chat/index.js
index 86f2fd6..866d8a4 100644
--- a/web/src/pages/Chat/index.js
+++ b/web/src/pages/Chat/index.js
@@ -1,14 +1,100 @@
-import React from 'react';
+import React, { useEffect, useState } from 'react';
+import { API, showError } from '../../helpers';
+import { Layout } from '@douyinfe/semi-ui';
-const Chat = () => {
- const chatLink = localStorage.getItem('chat_link');
+// 获取 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 [];
+ }
+}
- 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 comLink = (key) => {
+ if (!chatLink || !serverAddress || !key) return '';
+ return `${chatLink}/#/?settings={"key":"sk-${key}","url":"${encodeURIComponent(serverAddress)}"}`;
+ };
+
+ const iframeSrc = keys.length > 0 ? comLink(keys[0]) : '';
+
+ // 生成链接
+ return !isLoading && iframeSrc ? (
+ ) : (
+
+
+
+
+ 当前没有可用的已启用令牌,请确认是否有令牌处于启用状态!
+ 正在跳转......
+
+
+
+
);
+
};
-export default Chat;
+export default TokenKeysPage;
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 2/8] =?UTF-8?q?=E9=87=8D=E6=96=B0=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E4=BA=86chat?=
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 ? (