index.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import React, { useEffect, useState } from 'react';
  2. import { API, showError } from '../../helpers';
  3. import { Layout } from '@douyinfe/semi-ui';
  4. // 获取 Token Keys 的异步函数,过滤掉非启用状态的令牌
  5. async function fetchTokenKeys() {
  6. try {
  7. const response = await API.get('/api/token/?p=0&size=999');
  8. const { success, data } = response.data;
  9. if (success) {
  10. // 过滤已启用状态的令牌
  11. const activeTokens = data.filter((token) => token.status === 1);
  12. return activeTokens.map((token) => token.key);
  13. } else {
  14. throw new Error('Failed to fetch token keys');
  15. }
  16. } catch (error) {
  17. console.error("Error fetching token keys:", error);
  18. return [];
  19. }
  20. }
  21. function getServerAddress() {
  22. let status = localStorage.getItem('status');
  23. let serverAddress = '';
  24. if (status) {
  25. try {
  26. status = JSON.parse(status);
  27. serverAddress = status.server_address || '';
  28. } catch (error) {
  29. console.error("Failed to parse status from localStorage:", error);
  30. }
  31. }
  32. if (!serverAddress) {
  33. serverAddress = window.location.origin;
  34. }
  35. return serverAddress;
  36. }
  37. const TokenKeysPage = () => {
  38. const [keys, setKeys] = useState([]);
  39. const [chatLink, setChatLink] = useState('');
  40. const [serverAddress, setServerAddress] = useState('');
  41. const [isLoading, setIsLoading] = useState(true);
  42. useEffect(() => {
  43. const loadAllData = async () => {
  44. const fetchedKeys = await fetchTokenKeys();
  45. if (fetchedKeys.length === 0) {
  46. // showError('当前没有可用的启用令牌,请确认是否有令牌处于启用状态!');
  47. setTimeout(() => {
  48. window.location.href = '/token';
  49. }, 1500); // 延迟 1.5 秒后跳转
  50. }
  51. setKeys(fetchedKeys);
  52. setIsLoading(false);
  53. const link = localStorage.getItem('chat_link');
  54. setChatLink(link);
  55. const address = getServerAddress();
  56. setServerAddress(address);
  57. };
  58. loadAllData();
  59. }, []);
  60. const comLink = (key) => {
  61. if (!chatLink || !serverAddress || !key) return '';
  62. return `${chatLink}/#/?settings={"key":"sk-${key}","url":"${encodeURIComponent(serverAddress)}"}`;
  63. };
  64. const iframeSrc = keys.length > 0 ? comLink(keys[0]) : '';
  65. // 生成链接
  66. return !isLoading && iframeSrc ? (
  67. <iframe
  68. src={iframeSrc}
  69. style={{ width: '100%', height: '85vh', border: 'none' }}
  70. title="Token Frame"
  71. />
  72. ) : (
  73. <div>
  74. <Layout>
  75. <Layout.Header>
  76. <h3 style={{ color: 'red'}}>
  77. 当前没有可用的已启用令牌,请确认是否有令牌处于启用状态!<br />
  78. 正在跳转......
  79. </h3>
  80. </Layout.Header>
  81. </Layout>
  82. </div>
  83. );
  84. };
  85. export default TokenKeysPage;