From 926951ee030ee6aceb12cdf418f77f7a4fe3da67 Mon Sep 17 00:00:00 2001 From: JustSong Date: Sun, 14 May 2023 19:29:02 +0800 Subject: [PATCH] feat: able to customize system name & logo now --- common/constants.go | 1 + controller/misc.go | 1 + model/option.go | 6 +++++ web/src/App.js | 2 ++ web/src/components/Footer.js | 37 ++++++++++++++---------------- web/src/components/Header.js | 12 ++++++---- web/src/components/LoginForm.js | 5 ++-- web/src/components/OtherSetting.js | 31 +++++++++++++++++++++++++ web/src/components/RegisterForm.js | 5 ++-- web/src/helpers/utils.js | 16 +++++++++++++ 10 files changed, 87 insertions(+), 29 deletions(-) diff --git a/common/constants.go b/common/constants.go index 8c6c6b04..3ebe233b 100644 --- a/common/constants.go +++ b/common/constants.go @@ -11,6 +11,7 @@ var Version = "v0.0.0" // this hard coding will be replaced automatic var SystemName = "One API" var ServerAddress = "http://localhost:3000" var Footer = "" +var Logo = "" var TopUpLink = "" var UsingSQLite = false diff --git a/controller/misc.go b/controller/misc.go index a9424d05..d200a239 100644 --- a/controller/misc.go +++ b/controller/misc.go @@ -20,6 +20,7 @@ func GetStatus(c *gin.Context) { "github_oauth": common.GitHubOAuthEnabled, "github_client_id": common.GitHubClientId, "system_name": common.SystemName, + "logo": common.Logo, "footer_html": common.Footer, "wechat_qrcode": common.WeChatAccountQRCodeImageURL, "wechat_login": common.WeChatAuthEnabled, diff --git a/model/option.go b/model/option.go index 6ca196a7..e5ddb60c 100644 --- a/model/option.go +++ b/model/option.go @@ -41,6 +41,8 @@ func InitOptionMap() { common.OptionMap["About"] = "" common.OptionMap["HomePageContent"] = "" common.OptionMap["Footer"] = common.Footer + common.OptionMap["SystemName"] = common.SystemName + common.OptionMap["Logo"] = common.Logo common.OptionMap["ServerAddress"] = "" common.OptionMap["GitHubClientId"] = "" common.OptionMap["GitHubClientSecret"] = "" @@ -134,6 +136,10 @@ func updateOptionMap(key string, value string) (err error) { common.GitHubClientSecret = value case "Footer": common.Footer = value + case "SystemName": + common.SystemName = value + case "Logo": + common.Logo = value case "WeChatServerAddress": common.WeChatServerAddress = value case "WeChatServerToken": diff --git a/web/src/App.js b/web/src/App.js index ec2d91f9..9f3c737d 100644 --- a/web/src/App.js +++ b/web/src/App.js @@ -42,6 +42,8 @@ function App() { if (success) { localStorage.setItem('status', JSON.stringify(data)); statusDispatch({ type: 'set', payload: data }); + localStorage.setItem('system_name', data.system_name); + localStorage.setItem('logo', data.logo); localStorage.setItem('footer_html', data.footer_html); if ( data.version !== process.env.REACT_APP_VERSION && diff --git a/web/src/components/Footer.js b/web/src/components/Footer.js index d51ccce3..24aaddfe 100644 --- a/web/src/components/Footer.js +++ b/web/src/components/Footer.js @@ -1,40 +1,37 @@ -import React, { useEffect, useState } from 'react'; +import React from 'react'; import { Container, Segment } from 'semantic-ui-react'; +import { getFooterHTML, getSystemName } from '../helpers'; const Footer = () => { - const [Footer, setFooter] = useState(''); - useEffect(() => { - let savedFooter = localStorage.getItem('footer_html'); - if (!savedFooter) savedFooter = ''; - setFooter(savedFooter); - }); + const systemName = getSystemName(); + const footer = getFooterHTML(); return ( - - {Footer === '' ? ( -
+ + {footer ? ( +
+ ) : ( + - ) : ( -
)}
diff --git a/web/src/components/Header.js b/web/src/components/Header.js index 85055de8..ea3aa727 100644 --- a/web/src/components/Header.js +++ b/web/src/components/Header.js @@ -3,7 +3,7 @@ import { Link, useNavigate } from 'react-router-dom'; import { UserContext } from '../context/User'; import { Button, Container, Dropdown, Icon, Menu, Segment } from 'semantic-ui-react'; -import { API, isAdmin, isMobile, showSuccess } from '../helpers'; +import { API, getLogo, getSystemName, isAdmin, isMobile, showSuccess } from '../helpers'; import '../index.css'; // Header Buttons @@ -53,6 +53,8 @@ const Header = () => { let navigate = useNavigate(); const [showSidebar, setShowSidebar] = useState(false); + const systemName = getSystemName(); + const logo = getLogo(); async function logout() { setShowSidebar(false); @@ -111,12 +113,12 @@ const Header = () => { logo
- One API + {systemName}
@@ -168,9 +170,9 @@ const Header = () => { - logo + logo
- One API + {systemName}
{renderButtons(false)} diff --git a/web/src/components/LoginForm.js b/web/src/components/LoginForm.js index 27351d60..52e3c840 100644 --- a/web/src/components/LoginForm.js +++ b/web/src/components/LoginForm.js @@ -12,7 +12,7 @@ import { } from 'semantic-ui-react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { UserContext } from '../context/User'; -import { API, showError, showSuccess } from '../helpers'; +import { API, getLogo, showError, showSuccess } from '../helpers'; const LoginForm = () => { const [inputs, setInputs] = useState({ @@ -27,6 +27,7 @@ const LoginForm = () => { let navigate = useNavigate(); const [status, setStatus] = useState({}); + const logo = getLogo(); useEffect(() => { if (searchParams.get("expired")) { @@ -95,7 +96,7 @@ const LoginForm = () => {
- 用户登录 + 用户登录
diff --git a/web/src/components/OtherSetting.js b/web/src/components/OtherSetting.js index 66fb62b0..0700d0b8 100644 --- a/web/src/components/OtherSetting.js +++ b/web/src/components/OtherSetting.js @@ -8,6 +8,8 @@ const OtherSetting = () => { Footer: '', Notice: '', About: '', + SystemName: '', + Logo: '', HomePageContent: '', }); let originInputs = {}; @@ -66,6 +68,14 @@ const OtherSetting = () => { await updateOption('Footer', inputs.Footer); }; + const submitSystemName = async () => { + await updateOption('SystemName', inputs.SystemName); + }; + + const submitLogo = async () => { + await updateOption('Logo', inputs.Logo); + }; + const submitAbout = async () => { await updateOption('About', inputs.About); }; @@ -114,6 +124,27 @@ const OtherSetting = () => { 保存公告
个性化设置
+ + + + 设置系统名称 + + + + 设置 Logo { @@ -26,6 +26,7 @@ const RegisterForm = () => { const [turnstileSiteKey, setTurnstileSiteKey] = useState(''); const [turnstileToken, setTurnstileToken] = useState(''); const [loading, setLoading] = useState(false); + const logo = getLogo(); useEffect(() => { let status = localStorage.getItem('status'); @@ -100,7 +101,7 @@ const RegisterForm = () => {
- 新用户注册 + 新用户注册
diff --git a/web/src/helpers/utils.js b/web/src/helpers/utils.js index f063d571..36f0d4b0 100644 --- a/web/src/helpers/utils.js +++ b/web/src/helpers/utils.js @@ -15,6 +15,22 @@ export function isRoot() { return user.role >= 100; } +export function getSystemName() { + let system_name = localStorage.getItem('system_name'); + if (!system_name) return 'One API'; + return system_name; +} + +export function getLogo() { + let logo = localStorage.getItem('logo'); + if (!logo) return '/logo.png'; + return logo +} + +export function getFooterHTML() { + return localStorage.getItem('footer_html'); +} + export async function copy(text) { let okay = true; try {