-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #439 from guoruqiang/main
改进了聊天页面,增加了初始令牌,方便用户注册后即可使用聊天功能。
- Loading branch information
Showing
7 changed files
with
175 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// 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('当前没有可用的启用令牌,请确认是否有令牌处于启用状态!'); | ||
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(); | ||
}, []); | ||
|
||
return { keys, chatLink, serverAddress, isLoading }; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,35 @@ | ||
import React from 'react'; | ||
import { useTokenKeys } from '../../components/fetchTokenKeys'; | ||
import { Layout } from '@douyinfe/semi-ui'; | ||
|
||
const Chat = () => { | ||
const chatLink = localStorage.getItem('chat_link'); | ||
const ChatPage = () => { | ||
const { keys, chatLink, serverAddress, isLoading } = useTokenKeys(); | ||
|
||
return ( | ||
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 ? ( | ||
<iframe | ||
src={chatLink} | ||
src={iframeSrc} | ||
style={{ width: '100%', height: '85vh', border: 'none' }} | ||
title="Token Frame" | ||
/> | ||
) : ( | ||
<div> | ||
<Layout> | ||
<Layout.Header> | ||
<h3 style={{ color: 'red'}}> | ||
当前没有可用的已启用令牌,请确认是否有令牌处于启用状态!<br /> | ||
正在跳转...... | ||
</h3> | ||
</Layout.Header> | ||
</Layout> | ||
</div> | ||
); | ||
}; | ||
|
||
export default Chat; | ||
export default ChatPage; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import React from 'react'; | ||
import { useTokenKeys } from '../../components/fetchTokenKeys'; | ||
|
||
const chat2page = () => { | ||
const { keys, chatLink, serverAddress, isLoading } = useTokenKeys(); | ||
|
||
const comLink = (key) => { | ||
if (!chatLink || !serverAddress || !key) return ''; | ||
return `${chatLink}/#/?settings={"key":"sk-${key}","url":"${encodeURIComponent(serverAddress)}"}`; | ||
}; | ||
|
||
if (keys.length > 0) { | ||
const redirectLink = comLink(keys[0]); | ||
if (redirectLink) { | ||
window.location.href = redirectLink; | ||
} | ||
} | ||
|
||
return ( | ||
<div> | ||
<h3>正在加载,请稍候...</h3> | ||
</div> | ||
); | ||
}; | ||
|
||
export default chat2page; |