index.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import React, { useContext, useEffect, useState } from 'react';
  2. import { Card, Grid, Header, Segment } from 'semantic-ui-react';
  3. import { API, showError, showNotice, timestamp2string } from '../../helpers';
  4. import { StatusContext } from '../../context/Status';
  5. import { marked } from 'marked';
  6. const Home = () => {
  7. const [statusState, statusDispatch] = useContext(StatusContext);
  8. const [homePageContent, setHomePageContent] = useState('');
  9. const displayNotice = async () => {
  10. const res = await API.get('/api/notice');
  11. const { success, message, data } = res.data;
  12. if (success) {
  13. let oldNotice = localStorage.getItem('notice');
  14. if (data !== oldNotice && data !== '') {
  15. showNotice(data);
  16. localStorage.setItem('notice', data);
  17. }
  18. } else {
  19. showError(message);
  20. }
  21. };
  22. const displayHomePageContent = async () => {
  23. const res = await API.get('/api/home_page_content');
  24. const { success, message, data } = res.data;
  25. if (success) {
  26. let HTMLContent = marked.parse(data);
  27. localStorage.setItem('home_page_content', HTMLContent);
  28. setHomePageContent(HTMLContent);
  29. } else {
  30. showError(message);
  31. setHomePageContent('加载首页内容失败...');
  32. }
  33. };
  34. const getStartTimeString = () => {
  35. const timestamp = statusState?.status?.start_time;
  36. return timestamp2string(timestamp);
  37. };
  38. useEffect(() => {
  39. displayNotice().then();
  40. displayHomePageContent().then();
  41. }, []);
  42. return (
  43. <>
  44. <Segment>
  45. {
  46. homePageContent === '' ? <>
  47. <Header as='h3'>系统状况</Header>
  48. <Grid columns={2} stackable>
  49. <Grid.Column>
  50. <Card fluid>
  51. <Card.Content>
  52. <Card.Header>系统信息</Card.Header>
  53. <Card.Meta>系统信息总览</Card.Meta>
  54. <Card.Description>
  55. <p>名称:{statusState?.status?.system_name}</p>
  56. <p>版本:{statusState?.status?.version}</p>
  57. <p>
  58. 源码:
  59. <a
  60. href='https://github.com/songquanpeng/one-api'
  61. target='_blank'
  62. >
  63. https://github.com/songquanpeng/one-api
  64. </a>
  65. </p>
  66. <p>启动时间:{getStartTimeString()}</p>
  67. </Card.Description>
  68. </Card.Content>
  69. </Card>
  70. </Grid.Column>
  71. <Grid.Column>
  72. <Card fluid>
  73. <Card.Content>
  74. <Card.Header>系统配置</Card.Header>
  75. <Card.Meta>系统配置总览</Card.Meta>
  76. <Card.Description>
  77. <p>
  78. 邮箱验证:
  79. {statusState?.status?.email_verification === true
  80. ? '已启用'
  81. : '未启用'}
  82. </p>
  83. <p>
  84. GitHub 身份验证:
  85. {statusState?.status?.github_oauth === true
  86. ? '已启用'
  87. : '未启用'}
  88. </p>
  89. <p>
  90. 微信身份验证:
  91. {statusState?.status?.wechat_login === true
  92. ? '已启用'
  93. : '未启用'}
  94. </p>
  95. <p>
  96. Turnstile 用户校验:
  97. {statusState?.status?.turnstile_check === true
  98. ? '已启用'
  99. : '未启用'}
  100. </p>
  101. </Card.Description>
  102. </Card.Content>
  103. </Card>
  104. </Grid.Column>
  105. </Grid>
  106. </> : <>
  107. <div dangerouslySetInnerHTML={{ __html: homePageContent}}></div>
  108. </>
  109. }
  110. </Segment>
  111. </>
  112. );
  113. };
  114. export default Home;