Complete main UI #37

Merged
FatttSnake merged 192 commits from FatttSnake into dev 2024-02-23 16:31:17 +08:00
9 changed files with 113 additions and 11 deletions
Showing only changes of commit 81d6f0ac29 - Show all commits

View File

@@ -15,6 +15,7 @@ export const URL_SYS_ROLE_LIST = '/system/role/list'
export const URL_SYS_GROUP = '/system/group' export const URL_SYS_GROUP = '/system/group'
export const URL_SYS_GROUP_LIST = '/system/group/list' export const URL_SYS_GROUP_LIST = '/system/group/list'
export const URL_SYS_SETTINGS = '/system/settings' export const URL_SYS_SETTINGS = '/system/settings'
export const URL_SYS_SETTINGS_BASE = `${URL_SYS_SETTINGS}/base`
export const URL_SYS_SETTINGS_MAIL = `${URL_SYS_SETTINGS}/mail` export const URL_SYS_SETTINGS_MAIL = `${URL_SYS_SETTINGS}/mail`
export const URL_SYS_STATISTICS = '/system/statistics' export const URL_SYS_STATISTICS = '/system/statistics'
export const URL_SYS_STATISTICS_SOFTWARE = `${URL_SYS_STATISTICS}/software` export const URL_SYS_STATISTICS_SOFTWARE = `${URL_SYS_STATISTICS}/software`

10
src/global.d.ts vendored
View File

@@ -318,6 +318,16 @@ interface AvatarBase64Vo {
base64: string base64: string
} }
interface BaseSettingsVo {
appName?: string
appUrl?: string
}
interface BaseSettingsParam {
appName: string
appUrl: string
}
interface MailSettingsVo { interface MailSettingsVo {
host?: string host?: string
port?: number port?: number

View File

@@ -6,6 +6,7 @@ import {
COLOR_BACKGROUND, COLOR_BACKGROUND,
DATABASE_DUPLICATE_KEY, DATABASE_DUPLICATE_KEY,
PERMISSION_ACCOUNT_NEED_INIT, PERMISSION_ACCOUNT_NEED_INIT,
PERMISSION_FORGET_SUCCESS,
PERMISSION_LOGIN_SUCCESS, PERMISSION_LOGIN_SUCCESS,
PERMISSION_LOGIN_USERNAME_PASSWORD_ERROR, PERMISSION_LOGIN_USERNAME_PASSWORD_ERROR,
PERMISSION_NO_VERIFICATION_REQUIRED, PERMISSION_NO_VERIFICATION_REQUIRED,
@@ -13,6 +14,7 @@ import {
PERMISSION_RETRIEVE_CODE_ERROR_OR_EXPIRED, PERMISSION_RETRIEVE_CODE_ERROR_OR_EXPIRED,
PERMISSION_RETRIEVE_SUCCESS, PERMISSION_RETRIEVE_SUCCESS,
PERMISSION_USER_DISABLE, PERMISSION_USER_DISABLE,
PERMISSION_USER_NOT_FOUND,
PERMISSION_USERNAME_NOT_FOUND PERMISSION_USERNAME_NOT_FOUND
} from '@/constants/common.constants.ts' } from '@/constants/common.constants.ts'
import { getLoginStatus, getUserInfo, requestUserInfo, setToken } from '@/util/auth' import { getLoginStatus, getUserInfo, requestUserInfo, setToken } from '@/util/auth'
@@ -457,11 +459,16 @@ const Forget: React.FC = () => {
void r_auth_forget(forgetParam) void r_auth_forget(forgetParam)
.then((res) => { .then((res) => {
const response = res.data const response = res.data
if (response.success) { switch (response.code) {
void message.success('已发送验证邮件,请查收') case PERMISSION_FORGET_SUCCESS:
setIsSent(true) void message.success('已发送验证邮件,请查收')
} else { setIsSent(true)
void message.error('出错了,请稍后重试') break
case PERMISSION_USER_NOT_FOUND:
void message.error('用户不存在')
break
default:
void message.error('出错了,请稍后重试')
} }
}) })
.finally(() => { .finally(() => {

View File

@@ -22,7 +22,7 @@ const ToolsFramework: React.FC = () => {
<> <>
<FitFullscreen data-component={'tools-framework'} className={'flex-horizontal'}> <FitFullscreen data-component={'tools-framework'} className={'flex-horizontal'}>
<div className={'left-panel'}> <div className={'left-panel'}>
<Sidebar title={'工具'} onSidebarSwitch={handleOnSidebarSwitch}> <Sidebar title={'工具'} onSidebarSwitch={handleOnSidebarSwitch}>
<SidebarItemList> <SidebarItemList>
<SidebarItem end path={''} icon={tools[0].icon} text={tools[0].name} /> <SidebarItem end path={''} icon={tools[0].icon} text={tools[0].name} />
<SidebarItem <SidebarItem

View File

@@ -27,7 +27,7 @@ const ToolsFramework: React.FC = () => {
<SidebarItem <SidebarItem
path={'/tools'} path={'/tools'}
icon={IconFatwebBack} icon={IconFatwebBack}
text={'回到工具'} text={'回到工具'}
/> />
</SidebarItemList> </SidebarItemList>
} }

View File

@@ -4,6 +4,8 @@ import '@/assets/css/pages/system/settings.scss'
import { useUpdatedEffect } from '@/util/hooks' import { useUpdatedEffect } from '@/util/hooks'
import { hasPermission } from '@/util/auth' import { hasPermission } from '@/util/auth'
import { import {
r_sys_settings_base_get,
r_sys_settings_base_update,
r_sys_settings_mail_get, r_sys_settings_mail_get,
r_sys_settings_mail_send, r_sys_settings_mail_send,
r_sys_settings_mail_update r_sys_settings_mail_update
@@ -192,6 +194,80 @@ const MailSettings: React.FC = () => {
) )
} }
const BaseSettings: React.FC = () => {
const [baseForm] = AntdForm.useForm<BaseSettingsParam>()
const baseFormValues = AntdForm.useWatch([], baseForm)
const [loading, setLoading] = useState(false)
const handleOnReset = () => {
getBaseSettings()
}
const handleOnSave = () => {
void r_sys_settings_base_update(baseFormValues).then((res) => {
const response = res.data
if (response.success) {
void message.success('保存设置成功')
getBaseSettings()
} else {
void message.error('保存设置失败,请稍后重试')
}
})
}
const getBaseSettings = () => {
if (loading) {
return
}
setLoading(true)
void r_sys_settings_base_get().then((res) => {
const response = res.data
if (response.success) {
const data = response.data
data && baseForm.setFieldsValue(data)
setLoading(false)
}
})
}
useUpdatedEffect(() => {
getBaseSettings()
}, [])
return (
<>
<SettingsCard
icon={IconFatwebEmail}
title={'基础'}
loading={loading}
onReset={handleOnReset}
onSave={handleOnSave}
modifyOperationCode={'system:settings:modify:base'}
>
<AntdForm
form={baseForm}
labelCol={{ flex: '7em' }}
disabled={!hasPermission('system:settings:modify:base')}
>
<AntdForm.Item label={'应用名称'} name={'appName'}>
<AntdInput />
</AntdForm.Item>
<AntdForm.Item label={'应用 URL'} name={'appUrl'}>
<AntdInput />
</AntdForm.Item>
<AntdForm.Item label={'验证邮箱 URL'} name={'verifyUrl'}>
<AntdInput placeholder={'验证码使用 ${verifyCode} 代替'} />
</AntdForm.Item>
<AntdForm.Item label={'找回密码 URL'} name={'retrieveUrl'}>
<AntdInput placeholder={'验证码使用 ${retrieveCode} 代替'} />
</AntdForm.Item>
</AntdForm>
</SettingsCard>
</>
)
}
const Settings: React.FC = () => { const Settings: React.FC = () => {
return ( return (
<> <>
@@ -199,10 +275,12 @@ const Settings: React.FC = () => {
<HideScrollbar isShowVerticalScrollbar autoHideWaitingTime={500}> <HideScrollbar isShowVerticalScrollbar autoHideWaitingTime={500}>
<FlexBox className={'root-content'}> <FlexBox className={'root-content'}>
<FlexBox direction={'horizontal'} className={'root-row'}> <FlexBox direction={'horizontal'} className={'root-row'}>
<Permission operationCode={'system:settings:query:base'}>
<BaseSettings />
</Permission>
<Permission operationCode={'system:settings:query:mail'}> <Permission operationCode={'system:settings:query:mail'}>
<MailSettings /> <MailSettings />
</Permission> </Permission>
<div />
</FlexBox> </FlexBox>
</FlexBox> </FlexBox>
</HideScrollbar> </HideScrollbar>

View File

@@ -976,8 +976,8 @@ const Statistics: React.FC = () => {
<ActiveInfo /> <ActiveInfo />
</Permission> </Permission>
<Permission operationCode={'system:statistics:query:base'}> <Permission operationCode={'system:statistics:query:base'}>
<SoftwareInfo />
<HardwareInfo /> <HardwareInfo />
<SoftwareInfo />
</Permission> </Permission>
<Permission operationCode={'system:statistics:query:real'}> <Permission operationCode={'system:statistics:query:real'}>
<CPUInfo /> <CPUInfo />

View File

@@ -49,7 +49,7 @@ const root: RouteJsonObject[] = [
absolutePath: '/tools', absolutePath: '/tools',
id: 'toolsFramework', id: 'toolsFramework',
component: React.lazy(() => import('@/pages/ToolsFramework')), component: React.lazy(() => import('@/pages/ToolsFramework')),
children: setTitle(tools, '工具'), children: setTitle(tools, '工具'),
name: '工具', name: '工具',
auth: false auth: false
}, },

View File

@@ -14,7 +14,8 @@ import {
URL_SYS_STATISTICS_CPU, URL_SYS_STATISTICS_CPU,
URL_SYS_STATISTICS_STORAGE, URL_SYS_STATISTICS_STORAGE,
URL_SYS_STATISTICS_ONLINE, URL_SYS_STATISTICS_ONLINE,
URL_SYS_STATISTICS_ACTIVE URL_SYS_STATISTICS_ACTIVE,
URL_SYS_SETTINGS_BASE
} from '@/constants/urls.constants' } from '@/constants/urls.constants'
import request from '@/services/index' import request from '@/services/index'
@@ -71,6 +72,11 @@ export const r_sys_group_delete_list = (ids: React.Key[]) => request.delete(URL_
export const r_sys_log_get = (param: SysLogGetParam) => export const r_sys_log_get = (param: SysLogGetParam) =>
request.get<PageVo<SysLogGetVo>>(URL_SYS_LOG, param) request.get<PageVo<SysLogGetVo>>(URL_SYS_LOG, param)
export const r_sys_settings_base_get = () => request.get<BaseSettingsVo>(URL_SYS_SETTINGS_BASE)
export const r_sys_settings_base_update = (param: BaseSettingsParam) =>
request.put(URL_SYS_SETTINGS_BASE, param)
export const r_sys_settings_mail_get = () => request.get<MailSettingsVo>(URL_SYS_SETTINGS_MAIL) export const r_sys_settings_mail_get = () => request.get<MailSettingsVo>(URL_SYS_SETTINGS_MAIL)
export const r_sys_settings_mail_update = (param: MailSettingsParam) => export const r_sys_settings_mail_update = (param: MailSettingsParam) =>