Complete main UI #37
@@ -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
10
src/global.d.ts
vendored
@@ -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
|
||||||
|
|||||||
@@ -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(() => {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ const ToolsFramework: React.FC = () => {
|
|||||||
<SidebarItem
|
<SidebarItem
|
||||||
path={'/tools'}
|
path={'/tools'}
|
||||||
icon={IconFatwebBack}
|
icon={IconFatwebBack}
|
||||||
text={'回到氮工具'}
|
text={'回到氧工具'}
|
||||||
/>
|
/>
|
||||||
</SidebarItemList>
|
</SidebarItemList>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user