diff --git a/react-ui/config/proxy.ts b/react-ui/config/proxy.ts index 0fdf89e3..f8875e9d 100644 --- a/react-ui/config/proxy.ts +++ b/react-ui/config/proxy.ts @@ -20,16 +20,16 @@ export default { // localhost:8000/api/** -> https://preview.pro.ant.design/api/** '/api/': { // 要代理的地址 - // target: 'http://172.20.32.181:31205', - target: 'http://172.20.32.98:8082', + target: 'http://172.20.32.181:31213', // 开发环境 + // target: 'http://172.20.32.98:8082', // target: 'http://172.20.32.150:8082', // 配置了这个可以从 http 代理到 https // 依赖 origin 的功能可能需要这个,比如 cookie changeOrigin: true, - pathRewrite: { '^/api': '' }, + // pathRewrite: { '^/api': '' }, }, '/profile/avatar/': { - target: 'http://172.20.32.181:31205', + target: 'http://172.20.32.181:31213', changeOrigin: true, }, }, diff --git a/react-ui/config/routes.ts b/react-ui/config/routes.ts index c93f43a5..82c568bc 100644 --- a/react-ui/config/routes.ts +++ b/react-ui/config/routes.ts @@ -14,10 +14,9 @@ export default [ { path: '/', redirect: '/workspace', - breadcrumb: '工作空间', }, { - name: 'workspace', + name: '工作空间', path: '/workspace', routes: [ { @@ -41,6 +40,7 @@ export default [ }, { path: '/account', + name: '用户中心', routes: [ { name: '用户中心', @@ -70,7 +70,7 @@ export default [ ], }, { - name: 'developmentEnvironment', + name: '开发环境', path: '/developmentEnvironment', routes: [ { @@ -79,12 +79,12 @@ export default [ component: './DevelopmentEnvironment/Editor', }, { - name: '创建编辑器', + name: '创建开发环境', path: 'create', component: './DevelopmentEnvironment/Create', }, { - name: '编辑器', + name: '开发环境详情', path: 'editor', component: './DevelopmentEnvironment/Editor', }, @@ -229,7 +229,7 @@ export default [ name: '应用开发', path: '', key: 'appsDeployment', - component: './missingPage.jsx', + component: './Application', }, ], }, @@ -306,47 +306,47 @@ export default [ }, { name: '用户管理', - path: '/system/user', + path: 'user', component: './System/User', }, { name: '角色管理', - path: '/system/role', + path: 'role', component: './System/Role', }, { name: '定时任务', - path: '/system/job', + path: 'job', component: './Monitor/Job', }, { name: '菜单管理', - path: '/system/menu', + path: 'menu', component: './System/Menu', }, { name: '部门管理', - path: '/system/dept', + path: 'dept', component: './System/Dept', }, { name: '岗位管理', - path: '/system/post', + path: 'post', component: './System/Post', }, { name: '字典管理', - path: '/system/dict', + path: 'dict', component: './System/Dict', }, { name: '字典数据', - path: '/system/dict-data/index/:id', + path: 'dict-data/index/:id', component: './System/DictData', }, { name: '分配用户', - path: '/system/role-auth/user/:id', + path: 'role-auth/user/:id', component: './System/Role/authUser', }, ], diff --git a/react-ui/src/app.tsx b/react-ui/src/app.tsx index 9f6db9b9..ff14f8c9 100644 --- a/react-ui/src/app.tsx +++ b/react-ui/src/app.tsx @@ -181,7 +181,7 @@ export const patchClientRoutes: RuntimeConfig['patchClientRoutes'] = (e) => { }; export function render(oldRender: () => void) { - //console.log('render'); + // console.log('render'); const token = getAccessToken(); if (!token || token?.length === 0) { oldRender(); @@ -207,6 +207,7 @@ export const antd: RuntimeAntdConfig = (memo) => { colorWarning: themes['warningColor'], colorLink: themes['primaryColor'], colorText: themes['textColor'], + controlHeightLG: 46, }; memo.theme.components ??= {}; memo.theme.components.Tabs = {}; diff --git a/react-ui/src/assets/img/robot.png b/react-ui/src/assets/img/robot.png index e91be9ac..c1379ef3 100644 Binary files a/react-ui/src/assets/img/robot.png and b/react-ui/src/assets/img/robot.png differ diff --git a/react-ui/src/pages/DatasetPreparation/DatasetAnnotation/index.less b/react-ui/src/components/FullScreenFrame/index.less similarity index 70% rename from react-ui/src/pages/DatasetPreparation/DatasetAnnotation/index.less rename to react-ui/src/components/FullScreenFrame/index.less index d0d8b09b..e7a68498 100644 --- a/react-ui/src/pages/DatasetPreparation/DatasetAnnotation/index.less +++ b/react-ui/src/components/FullScreenFrame/index.less @@ -1,8 +1,8 @@ -.container { +.kf-full-screen-frame { width: 100%; height: 100%; - .frame { + &__iframe { width: 100%; height: 100%; border: none; diff --git a/react-ui/src/components/FullScreenFrame/index.tsx b/react-ui/src/components/FullScreenFrame/index.tsx new file mode 100644 index 00000000..f93fcfae --- /dev/null +++ b/react-ui/src/components/FullScreenFrame/index.tsx @@ -0,0 +1,18 @@ +import classNames from 'classnames'; +import './index.less'; + +type FullScreenFrameProps = { + url: string; + className?: string; + style?: React.CSSProperties; +}; + +function FullScreenFrame({ url, className, style }: FullScreenFrameProps) { + return ( +
+ {url && } +
+ ); +} + +export default FullScreenFrame; diff --git a/react-ui/src/components/MenuIconSelector/index.less b/react-ui/src/components/MenuIconSelector/index.less new file mode 100644 index 00000000..c4b134b8 --- /dev/null +++ b/react-ui/src/components/MenuIconSelector/index.less @@ -0,0 +1,32 @@ +.menu-icon-selector { + // grid 布局,每行显示 8 个图标 + display: grid; + grid-auto-rows: 1fr; + grid-template-columns: repeat(4, 1fr); + + &__item { + display: flex; + align-items: center; + justify-content: center; + height: 80px; + cursor: pointer; + + &__icon { + display: block; + } + + &__icon--active { + display: none; + } + + &:hover &__icon, + &:active &__icon { + display: none; + } + + &:hover &__icon--active, + &:active &__icon--active { + display: block; + } + } +} diff --git a/react-ui/src/components/MenuIconSelector/index.tsx b/react-ui/src/components/MenuIconSelector/index.tsx new file mode 100644 index 00000000..2709c22d --- /dev/null +++ b/react-ui/src/components/MenuIconSelector/index.tsx @@ -0,0 +1,62 @@ +import KFIcon from '@/components/KFIcon'; +import KFModal from '@/components/KFModal'; +import iconData from '@/iconfont/iconfont.json'; +import { type ModalProps } from 'antd'; +import { useEffect, useState } from 'react'; +import styles from './index.less'; + +interface MenuIconSelectorProps extends Omit { + selectedIcon?: string; + onOk: (param: string) => void; +} + +type IconObject = { + icon_id: string; + font_class: string; +}; + +function MenuIconSelector({ open, selectedIcon, onOk, ...rest }: MenuIconSelectorProps) { + const [icons, setIcons] = useState([]); + useEffect(() => { + const glyphs = iconData.glyphs as IconObject[]; + setIcons(glyphs.filter((item) => !item.font_class.endsWith('-active'))); + }, []); + + return ( + +
+ {icons.map((icon) => ( +
onOk(icon.font_class)} + > + + +
+ ))} +
+
+ ); +} + +export default MenuIconSelector; diff --git a/react-ui/src/iconfont/iconfont.json b/react-ui/src/iconfont/iconfont.json new file mode 100644 index 00000000..db913c64 --- /dev/null +++ b/react-ui/src/iconfont/iconfont.json @@ -0,0 +1,163 @@ +{ + "id": "4511326", + "name": "复杂智能软件-导航", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "40233218", + "name": "操作手册-active", + "font_class": "manual-icon-active", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "40233217", + "name": "操作手册", + "font_class": "manual-icon", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "40171713", + "name": "监控运维-active", + "font_class": "monitor-icon-active", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "40171711", + "name": "监控运维", + "font_class": "monitor-icon", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "40171710", + "name": "开发环境-active", + "font_class": "developmentEnvironment-icon-active", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "40171699", + "name": "开发环境", + "font_class": "developmentEnvironment-icon", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "39969575", + "name": "系统管理", + "font_class": "system-icon", + "unicode": "e618", + "unicode_decimal": 58904 + }, + { + "icon_id": "39969573", + "name": "流水线-active", + "font_class": "workflow-icon-active", + "unicode": "e61a", + "unicode_decimal": 58906 + }, + { + "icon_id": "39969569", + "name": "数据准备-active", + "font_class": "datasetPreparation-icon-active", + "unicode": "e61c", + "unicode_decimal": 58908 + }, + { + "icon_id": "39969568", + "name": "数据准备", + "font_class": "datasetPreparation-icon", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "39969570", + "name": "模型在线部署", + "font_class": "modelDseployment-icon", + "unicode": "e61e", + "unicode_decimal": 58910 + }, + { + "icon_id": "39969567", + "name": "流水线", + "font_class": "workflow-icon", + "unicode": "e61f", + "unicode_decimal": 58911 + }, + { + "icon_id": "39969566", + "name": "AI资产管理-active", + "font_class": "aiAsset-icon-active", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "39969563", + "name": "AI资产管理", + "font_class": "aiAsset-icon", + "unicode": "e621", + "unicode_decimal": 58913 + }, + { + "icon_id": "39969580", + "name": "工作空间", + "font_class": "workspace-icon", + "unicode": "e611", + "unicode_decimal": 58897 + }, + { + "icon_id": "39969572", + "name": "模型开发-active", + "font_class": "model-icon-active", + "unicode": "e610", + "unicode_decimal": 58896 + }, + { + "icon_id": "39969579", + "name": "系统管理-active", + "font_class": "system-icon-active", + "unicode": "e612", + "unicode_decimal": 58898 + }, + { + "icon_id": "39969578", + "name": "模型在线部署-active", + "font_class": "modelDseployment-icon-active", + "unicode": "e613", + "unicode_decimal": 58899 + }, + { + "icon_id": "39969565", + "name": "模型开发", + "font_class": "model-icon", + "unicode": "e614", + "unicode_decimal": 58900 + }, + { + "icon_id": "39969577", + "name": "应用开发", + "font_class": "appsDeployment-icon", + "unicode": "e615", + "unicode_decimal": 58901 + }, + { + "icon_id": "39969576", + "name": "工作空间-active", + "font_class": "workspace-icon-active", + "unicode": "e616", + "unicode_decimal": 58902 + }, + { + "icon_id": "39969574", + "name": "应用开发-active", + "font_class": "appsDeployment-icon-active", + "unicode": "e617", + "unicode_decimal": 58903 + } + ] +} diff --git a/react-ui/src/overrides.less b/react-ui/src/overrides.less index a3080072..e20ad0e4 100644 --- a/react-ui/src/overrides.less +++ b/react-ui/src/overrides.less @@ -120,6 +120,12 @@ .ant-select-single { height: 46px; } + + .ant-input-number { + .ant-input-number-input { + height: 44px; + } + } } // Confirm Modal @@ -187,3 +193,53 @@ .ant-pro-layout .ant-pro-sider-logo > a > h1 { margin-inline-start: 12px; } + +// PageContainer 里的 ProTable 只滑动内容区域 +.system-menu.ant-pro-page-container { + height: 100%; + overflow: hidden; + .ant-pro-grid-content { + height: 100%; + .ant-pro-grid-content-children { + height: 100%; + .ant-pro-layout-watermark-wrapper { + height: 100%; + .ant-pro-page-container-children-container { + height: 100%; + padding: 0; + .ant-pro-table { + display: flex; + flex-direction: column; + height: 100%; + .ant-pro-card.ant-pro-table-search { + flex: none; + height: auto; + } + .ant-pro-card { + flex: 1; + min-height: 0; + .ant-pro-card-body { + height: 100%; + .ant-table-wrapper { + height: calc(100% - 64px); + .ant-spin-nested-loading { + height: 100%; + .ant-spin-container { + height: 100%; + .ant-table-fixed-header { + height: 100%; + .ant-table-container { + height: 100%; + } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/react-ui/src/pages/Application/index.tsx b/react-ui/src/pages/Application/index.tsx new file mode 100644 index 00000000..77f70208 --- /dev/null +++ b/react-ui/src/pages/Application/index.tsx @@ -0,0 +1,9 @@ +import FullScreenFrame from '@/components/FullScreenFrame'; +import { useState } from 'react'; + +function Application() { + const [iframeUrl] = useState('http://172.20.32.181:30080/'); + return ; +} + +export default Application; diff --git a/react-ui/src/pages/DatasetPreparation/DatasetAnnotation/index.tsx b/react-ui/src/pages/DatasetPreparation/DatasetAnnotation/index.tsx index a1f017e6..090d941e 100644 --- a/react-ui/src/pages/DatasetPreparation/DatasetAnnotation/index.tsx +++ b/react-ui/src/pages/DatasetPreparation/DatasetAnnotation/index.tsx @@ -1,7 +1,7 @@ +import FullScreenFrame from '@/components/FullScreenFrame'; import { getLabelStudioUrl } from '@/services/developmentEnvironment'; import { to } from '@/utils/promise'; import { useEffect, useState } from 'react'; -import styles from './index.less'; function DatasetAnnotation() { const [iframeUrl, setIframeUrl] = useState(''); @@ -14,11 +14,7 @@ function DatasetAnnotation() { setIframeUrl(res.data); } }; - return ( -
- {iframeUrl && } -
- ); + return ; } export default DatasetAnnotation; diff --git a/react-ui/src/pages/Experiment/Comparison/index.tsx b/react-ui/src/pages/Experiment/Comparison/index.tsx index 29bbc388..e11a0166 100644 --- a/react-ui/src/pages/Experiment/Comparison/index.tsx +++ b/react-ui/src/pages/Experiment/Comparison/index.tsx @@ -93,8 +93,7 @@ function ExperimentComparison() { type: 'checkbox', fixed: 'left', selectedRowKeys, - onChange: (selectedRowKeys: React.Key[], selectedRows: any[]) => { - // console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows); + onChange: (selectedRowKeys: React.Key[]) => { setSelectedRowKeys(selectedRowKeys); }, }; @@ -159,6 +158,8 @@ function ExperimentComparison() { align: 'center', render: tableCellRender(true), ellipsis: { showTitle: false }, + sorter: (a, b) => a.params[name] - b.params[name], + showSorterTooltip: false, })), }, { @@ -176,6 +177,8 @@ function ExperimentComparison() { align: 'center', render: tableCellRender(true), ellipsis: { showTitle: false }, + sorter: (a, b) => a.metrics[name] - b.metrics[name], + showSorterTooltip: false, })), }, ]; diff --git a/react-ui/src/pages/Monitor/Job/index.tsx b/react-ui/src/pages/Monitor/Job/index.tsx index a160be3e..6bf166d9 100644 --- a/react-ui/src/pages/Monitor/Job/index.tsx +++ b/react-ui/src/pages/Monitor/Job/index.tsx @@ -319,8 +319,8 @@ const JobTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -333,6 +333,9 @@ const JobTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/Monitor/JobLog/index.tsx b/react-ui/src/pages/Monitor/JobLog/index.tsx index c0d7052d..4c69330a 100644 --- a/react-ui/src/pages/Monitor/JobLog/index.tsx +++ b/react-ui/src/pages/Monitor/JobLog/index.tsx @@ -217,8 +217,8 @@ const JobLogTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -231,6 +231,9 @@ const JobLogTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/Config/index.tsx b/react-ui/src/pages/System/Config/index.tsx index a86937dc..bb671cd2 100644 --- a/react-ui/src/pages/System/Config/index.tsx +++ b/react-ui/src/pages/System/Config/index.tsx @@ -258,8 +258,8 @@ const ConfigTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -272,6 +272,9 @@ const ConfigTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , , , ]} diff --git a/react-ui/src/pages/System/Dict/index.tsx b/react-ui/src/pages/System/Dict/index.tsx index 0332ed88..29d64386 100644 --- a/react-ui/src/pages/System/Dict/index.tsx +++ b/react-ui/src/pages/System/Dict/index.tsx @@ -259,8 +259,8 @@ const DictTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -273,6 +273,9 @@ const DictTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/DictData/index.tsx b/react-ui/src/pages/System/DictData/index.tsx index a4ef118a..28005cc8 100644 --- a/react-ui/src/pages/System/DictData/index.tsx +++ b/react-ui/src/pages/System/DictData/index.tsx @@ -303,8 +303,8 @@ const DictDataTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -317,6 +317,9 @@ const DictDataTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/Logininfor/index.tsx b/react-ui/src/pages/System/Logininfor/index.tsx index ffcffd01..7868ee86 100644 --- a/react-ui/src/pages/System/Logininfor/index.tsx +++ b/react-ui/src/pages/System/Logininfor/index.tsx @@ -180,8 +180,8 @@ const LogininforTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -194,6 +194,9 @@ const LogininforTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , , , ]} diff --git a/react-ui/src/pages/System/Menu/edit.tsx b/react-ui/src/pages/System/Menu/edit.tsx index db4e6e88..e8ac269a 100644 --- a/react-ui/src/pages/System/Menu/edit.tsx +++ b/react-ui/src/pages/System/Menu/edit.tsx @@ -1,7 +1,7 @@ import { DictValueEnumObj } from '@/components/DictTag'; -import IconSelector from '@/components/IconSelector'; import KFModal from '@/components/KFModal'; -import { createIcon } from '@/utils/IconUtil'; +import MenuIconSelector from '@/components/MenuIconSelector'; +import { openAntdModal } from '@/utils/modal'; import { ProForm, ProFormDigit, @@ -27,31 +27,39 @@ export type MenuFormProps = { menuTree: DataNode[]; }; +const formLayout = { + labelCol: { span: 8 }, + wrapperCol: { span: 16 }, +}; + +const formItemLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, +}; + const MenuForm: React.FC = (props) => { const [form] = Form.useForm(); - - const [menuTypeId, setMenuTypeId] = useState('M'); + const [menuTypeId, setMenuTypeId] = useState(); const [menuIconName, setMenuIconName] = useState(); - const [iconSelectorOpen, setIconSelectorOpen] = useState(false); - const { menuTree, visibleOptions, statusOptions } = props; useEffect(() => { form.resetFields(); setMenuIconName(props.values.icon); + setMenuTypeId(props.values.menuType ?? 'M'); form.setFieldsValue({ menuId: props.values.menuId, menuName: props.values.menuName, - parentId: props.values.parentId, - orderNum: props.values.orderNum, + parentId: props.values.parentId ?? 0, + orderNum: props.values.orderNum ?? 1, path: props.values.path, component: props.values.component, query: props.values.query, - isFrame: props.values.isFrame, - isCache: props.values.isCache, - menuType: props.values.menuType, - visible: props.values.visible, - status: props.values.status, + isFrame: props.values.isFrame ?? '1', + isCache: props.values.isCache ?? '1', + menuType: props.values.menuType ?? 'M', + visible: props.values.visible ?? Object.keys(visibleOptions)[0], + status: props.values.status ?? Object.keys(statusOptions)[0], perms: props.values.perms, icon: props.values.icon, createBy: props.values.createBy, @@ -73,9 +81,20 @@ const MenuForm: React.FC = (props) => { props.onSubmit(values as MenuFormData); }; + const selectIcon = () => { + const { close } = openAntdModal(MenuIconSelector, { + selectedIcon: menuIconName, + onOk: (icon) => { + setMenuIconName(icon); + form.setFieldsValue({ icon }); + close(); + }, + }); + }; + return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" > = (props) => { ]} /> = (props) => { ), }, ]} - fieldProps={{ - defaultValue: 0, - }} /> = (props) => { }, ]} fieldProps={{ - defaultValue: 'M', onChange: (e) => { setMenuTypeId(e.target.value); }, }} /> = (props) => { })} valueEnum={{}} hidden={menuTypeId === 'F'} - addonBefore={createIcon(menuIconName)} + // addonBefore={createIcon(menuIconName)} fieldProps={{ onClick: () => { - setIconSelectorOpen(true); + selectIcon(); }, }} placeholder="请输入菜单图标" @@ -209,9 +229,6 @@ const MenuForm: React.FC = (props) => { message: , }, ]} - fieldProps={{ - defaultValue: 1, - }} /> = (props) => { 0: '是', 1: '否', }} - initialValue="1" label={intl.formatMessage({ id: 'system.menu.is_frame', defaultMessage: '是否为外链', @@ -235,9 +251,6 @@ const MenuForm: React.FC = (props) => { ), }, ]} - fieldProps={{ - defaultValue: '1', - }} /> = (props) => { message: , }, ]} - fieldProps={{ - defaultValue: 0, - }} /> = (props) => { message: , }, ]} - fieldProps={{ - defaultValue: '0', - }} /> = (props) => { message: , }, ]} - fieldProps={{ - defaultValue: '0', - }} /> - { - setIconSelectorOpen(false); - }} - footer={null} - > - { - form.setFieldsValue({ icon: name }); - setMenuIconName(name); - setIconSelectorOpen(false); - }} - /> - ); }; diff --git a/react-ui/src/pages/System/Menu/index.tsx b/react-ui/src/pages/System/Menu/index.tsx index 195f459c..7f58fad0 100644 --- a/react-ui/src/pages/System/Menu/index.tsx +++ b/react-ui/src/pages/System/Menu/index.tsx @@ -221,8 +221,8 @@ const MenuTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -234,6 +234,9 @@ const MenuTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/Notice/index.tsx b/react-ui/src/pages/System/Notice/index.tsx index e21a7615..12211453 100644 --- a/react-ui/src/pages/System/Notice/index.tsx +++ b/react-ui/src/pages/System/Notice/index.tsx @@ -259,8 +259,8 @@ const NoticeTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -273,6 +273,9 @@ const NoticeTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/Operlog/index.tsx b/react-ui/src/pages/System/Operlog/index.tsx index 5c94c9c2..7c65bccd 100644 --- a/react-ui/src/pages/System/Operlog/index.tsx +++ b/react-ui/src/pages/System/Operlog/index.tsx @@ -227,8 +227,8 @@ const OperlogTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -241,6 +241,9 @@ const OperlogTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/Post/index.tsx b/react-ui/src/pages/System/Post/index.tsx index d0be93a3..e86693f3 100644 --- a/react-ui/src/pages/System/Post/index.tsx +++ b/react-ui/src/pages/System/Post/index.tsx @@ -225,8 +225,8 @@ const PostTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -239,6 +239,9 @@ const PostTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/Role/authUser.tsx b/react-ui/src/pages/System/Role/authUser.tsx index 5d702c87..2ba3f3a1 100644 --- a/react-ui/src/pages/System/Role/authUser.tsx +++ b/react-ui/src/pages/System/Role/authUser.tsx @@ -163,8 +163,8 @@ const AuthUserTableList: React.FC = () => { ]; return ( - -
+ +
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -176,6 +176,9 @@ const AuthUserTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} request={(params) => diff --git a/react-ui/src/pages/System/Role/index.tsx b/react-ui/src/pages/System/Role/index.tsx index 2d54af8c..b616c133 100644 --- a/react-ui/src/pages/System/Role/index.tsx +++ b/react-ui/src/pages/System/Role/index.tsx @@ -360,9 +360,9 @@ const RoleTableList: React.FC = () => { ]; return ( - + {contextHolder} -
+
headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -375,6 +375,9 @@ const RoleTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/System/User/index.tsx b/react-ui/src/pages/System/User/index.tsx index 1135c17f..73cd0984 100644 --- a/react-ui/src/pages/System/User/index.tsx +++ b/react-ui/src/pages/System/User/index.tsx @@ -365,10 +365,10 @@ const UserTableList: React.FC = () => { ]; return ( - + {contextHolder} - - + + { @@ -380,7 +380,7 @@ const UserTableList: React.FC = () => { /> - + headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', @@ -393,6 +393,9 @@ const UserTableList: React.FC = () => { search={{ labelWidth: 120, }} + scroll={{ y: 'calc(100% - 55px)' }} + tableAlertRender={false} + tableAlertOptionRender={false} toolBarRender={() => [ , , ]} diff --git a/react-ui/src/pages/Tool/Swagger/index.tsx b/react-ui/src/pages/Tool/Swagger/index.tsx index adcc9680..934120a8 100644 --- a/react-ui/src/pages/Tool/Swagger/index.tsx +++ b/react-ui/src/pages/Tool/Swagger/index.tsx @@ -18,7 +18,7 @@ const CacheInfo: React.FC = () => { }); return ( -
+