import intl from 'react-intl-universal'; import React, { useState, useEffect, useRef } from 'react'; import { Button, InputNumber, Form, Radio, Tabs, Table, Tooltip, Space, Tag, Modal, message, Typography, Input, } from 'antd'; import config from '@/utils/config'; import { PageContainer } from '@ant-design/pro-layout'; import { request } from '@/utils/http'; import AppModal from './appModal'; import { EditOutlined, DeleteOutlined, ReloadOutlined, } from '@ant-design/icons'; import SecuritySettings from './security'; import LoginLog from './loginLog'; import NotificationSetting from './notification'; import Other from './other'; import About from './about'; import { useOutletContext } from '@umijs/max'; import { SharedContext } from '@/layouts'; import './index.less'; import useResizeObserver from '@react-hook/resize-observer'; import SystemLog from './systemLog'; import Dependence from './dependence'; import UserManagement from './userManagement'; const { Text } = Typography; const isDemoEnv = window.__ENV__DeployEnv === 'demo'; const Setting = () => { const { headerStyle, isPhone, user, theme, reloadUser, reloadTheme, systemInfo, } = useOutletContext(); const columns = [ { title: intl.get('名称'), dataIndex: 'name', key: 'name', }, { title: 'Client ID', dataIndex: 'client_id', key: 'client_id', render: (text: string, record: any) => { return {record.client_id}; }, }, { title: 'Client Secret', dataIndex: 'client_secret', key: 'client_secret', render: (text: string, record: any) => { return *******; }, }, { title: intl.get('权限'), dataIndex: 'scopes', key: 'scopes', width: 500, render: (text: string, record: any) => { return (
{record.scopes.map((scope: any) => { return ( {(config.scopesMap as any)[scope]} ); })}
); }, }, { title: intl.get('操作'), key: 'action', render: (text: string, record: any, index: number) => { const isPc = !isPhone; return ( editApp(record, index)}> resetSecret(record, index)}> deleteApp(record, index)}> ); }, }, ]; const [loading, setLoading] = useState(true); const [dataSource, setDataSource] = useState([]); const [isModalVisible, setIsModalVisible] = useState(false); const [editedApp, setEditedApp] = useState(); const [tabActiveKey, setTabActiveKey] = useState('security'); const [loginLogData, setLoginLogData] = useState([]); const [notificationInfo, setNotificationInfo] = useState(); const containergRef = useRef(null); const [height, setHeight] = useState(0); useResizeObserver(containergRef, (entry) => { const _height = (entry.target as HTMLElement)?.offsetHeight; if (_height && height !== _height - 101) { setHeight(_height - 101); } }); const getApps = () => { setLoading(true); request .get(`${config.apiPrefix}apps`) .then(({ code, data }) => { if (code === 200) { setDataSource(data); } }) .finally(() => setLoading(false)); }; const addApp = () => { setEditedApp(null); setIsModalVisible(true); }; const editApp = (record: any, index: number) => { setEditedApp(record); setIsModalVisible(true); }; const deleteApp = (record: any, index: number) => { Modal.confirm({ title: intl.get('确认删除'), content: ( <> {intl.get('确认删除应用')}{' '} {record.name} {' '} {intl.get('吗')} ), onOk() { request .delete(`${config.apiPrefix}apps`, { data: [record.id] }) .then(({ code, data }) => { if (code === 200) { message.success(intl.get('删除成功')); const result = [...dataSource]; result.splice(index, 1); setDataSource(result); } }); }, }); }; const resetSecret = (record: any, index: number) => { Modal.confirm({ title: intl.get('确认重置'), content: ( <> {intl.get('确认重置应用')}{' '} {record.name} {' '} {intl.get('的Secret吗')}
{intl.get('重置Secret会让当前应用所有token失效')} ), onOk() { request .put(`${config.apiPrefix}apps/${record.id}/reset-secret`) .then(({ code, data }) => { if (code === 200) { message.success(intl.get('重置成功')); handleApp(data); } }); }, }); }; const handleCancel = (app?: any) => { setIsModalVisible(false); if (app) { handleApp(app); } }; const handleApp = (app: any) => { const index = dataSource.findIndex((x) => x.id === app.id); const result = [...dataSource]; if (index === -1) { result.push(app); } else { result.splice(index, 1, { ...app, }); } setDataSource(result); }; const getLoginLog = () => { request .get(`${config.apiPrefix}user/login-log`) .then(({ code, data }) => { if (code === 200) { setLoginLogData(data); } }) .catch((error: any) => { console.log(error); }); }; const tabChange = (activeKey: string) => { setTabActiveKey(activeKey); if (activeKey === 'app') { getApps(); } else if (activeKey === 'login') { getLoginLog(); } else if (activeKey === 'notification') { getNotification(); } }; const getNotification = () => { request .get(`${config.apiPrefix}user/notification`) .then(({ code, data }) => { if (code === 200) { setNotificationInfo(data); } }) .catch((error: any) => { console.log(error); }); }; useEffect(() => { if (isDemoEnv) { getApps(); } }, []); return ( addApp()}> {intl.get('创建应用')} , ] : [] } >
), }, ] : []), { key: 'app', label: intl.get('应用设置'), children: ( ), }, { key: 'notification', label: intl.get('通知设置'), children: , }, { key: 'syslog', label: intl.get('系统日志'), children: , }, { key: 'login', label: intl.get('登录日志'), children: , }, ...(user?.role === 0 && !isDemoEnv ? [ { key: 'user-management', label: intl.get('用户管理'), children: , }, ] : []), { key: 'dependence', label: intl.get('依赖设置'), children: , }, { key: 'other', label: intl.get('其他设置'), children: ( ), }, { key: 'about', label: intl.get('关于'), children: , }, ]} /> {isModalVisible && ( )} ); }; export default Setting;