From 5bf7dfb7915ef5a1bd57382c8c3a32fdfcfc0e5e Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Wed, 7 Aug 2024 09:43:54 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/src/pages/Monitor/Job/edit.tsx | 10 +++- react-ui/src/pages/System/Dept/edit.tsx | 28 +++++++++-- react-ui/src/pages/System/Dict/edit.tsx | 11 +++-- react-ui/src/pages/System/Post/edit.tsx | 13 +++-- react-ui/src/pages/System/Role/edit.tsx | 20 ++++---- .../pages/System/User/components/DeptTree.tsx | 24 +++++---- react-ui/src/pages/System/User/edit.tsx | 49 ++++++++++++++++--- react-ui/src/pages/System/User/index.tsx | 2 + 8 files changed, 116 insertions(+), 41 deletions(-) diff --git a/react-ui/src/pages/Monitor/Job/edit.tsx b/react-ui/src/pages/Monitor/Job/edit.tsx index 7a7e5e24..218b985e 100644 --- a/react-ui/src/pages/Monitor/Job/edit.tsx +++ b/react-ui/src/pages/Monitor/Job/edit.tsx @@ -33,6 +33,10 @@ export type JobFormProps = { const JobForm: React.FC = (props) => { const [form] = Form.useForm(); const { jobGroupOptions, statusOptions } = props; + const formLayout = { + labelCol: { span: 5 }, + wrapperCol: { span: 19 }, + }; useEffect(() => { form.resetFields(); @@ -44,7 +48,7 @@ const JobForm: React.FC = (props) => { cronExpression: props.values.cronExpression, misfirePolicy: props.values.misfirePolicy, concurrent: props.values.concurrent, - status: props.values.status, + status: props.values.status ?? Object.keys(statusOptions)[0], createBy: props.values.createBy, createTime: props.values.createTime, updateBy: props.values.updateBy, @@ -67,7 +71,7 @@ const JobForm: React.FC = (props) => { return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" > = (props) => { const [form] = Form.useForm(); - const { statusOptions, deptTree } = props; + const formLayout = { + labelCol: { span: 8 }, + wrapperCol: { span: 16 }, + }; + + const formItemLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -34,11 +42,11 @@ const DeptForm: React.FC = (props) => { parentId: props.values.parentId, ancestors: props.values.ancestors, deptName: props.values.deptName, - orderNum: props.values.orderNum, + orderNum: props.values.orderNum ?? 1, leader: props.values.leader, phone: props.values.phone, email: props.values.email, - status: props.values.status, + status: props.values.status ?? Object.keys(statusOptions)[0], delFlag: props.values.delFlag, createBy: props.values.createBy, createTime: props.values.createTime, @@ -60,7 +68,7 @@ const DeptForm: React.FC = (props) => { return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" > = (props) => { request={async () => { return deptTree; }} + {...formItemLayout} placeholder="请选择上级部门" rules={[ { @@ -185,6 +196,15 @@ const DeptForm: React.FC = (props) => { required: false, message: , }, + { + type: 'email', + message: ( + + ), + }, ]} /> = (props) => { const [form] = Form.useForm(); - const { statusOptions } = props; + const formLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -31,7 +34,7 @@ const DictTypeForm: React.FC = (props) => { dictId: props.values.dictId, dictName: props.values.dictName, dictType: props.values.dictType, - status: props.values.status, + status: props.values.status ?? Object.keys(statusOptions)[0], createBy: props.values.createBy, createTime: props.values.createTime, updateBy: props.values.updateBy, @@ -53,7 +56,7 @@ const DictTypeForm: React.FC = (props) => { return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" > = (props) => { const [form] = Form.useForm(); - const { statusOptions } = props; + const formLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -31,8 +34,8 @@ const PostForm: React.FC = (props) => { postId: props.values.postId, postCode: props.values.postCode, postName: props.values.postName, - postSort: props.values.postSort, - status: props.values.status, + postSort: props.values.postSort ?? 1, + status: props.values.status ?? Object.keys(statusOptions)[0], createBy: props.values.createBy, createTime: props.values.createTime, updateBy: props.values.updateBy, @@ -54,7 +57,7 @@ const PostForm: React.FC = (props) => { return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" > = (props) => { const [menuIds, setMenuIds] = useState([]); const { statusOptions } = props; + const formLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; + useEffect(() => { form.resetFields(); form.setFieldsValue({ roleId: props.values.roleId, roleName: props.values.roleName, roleKey: props.values.roleKey, - roleSort: props.values.roleSort, + roleSort: props.values.roleSort ?? 1, dataScope: props.values.dataScope, menuCheckStrictly: props.values.menuCheckStrictly, deptCheckStrictly: props.values.deptCheckStrictly, - status: props.values.status, + status: props.values.status ?? Object.keys(statusOptions)[0], delFlag: props.values.delFlag, createBy: props.values.createBy, createTime: props.values.createTime, @@ -62,7 +67,7 @@ const RoleForm: React.FC = (props) => { return ( = (props) => { layout="horizontal" submitter={false} onFinish={handleFinish} + {...formLayout} + size="large" > = (props) => { message: , }, ]} - fieldProps={{ - defaultValue: 1, - }} /> = (props) => { message: , }, ]} - fieldProps={{ - defaultValue: '0', - }} /> = (props) => { id: 'system.role.auth', defaultMessage: '菜单权限', })} + style={{ width: '100%' }} > = (props) => { const [treeData, setTreeData] = useState([]); const [expandedKeys, setExpandedKeys] = useState([]); - const [autoExpandParent, setAutoExpandParent] = useState(true); + const [selectedKeys, setSelectedKeys] = useState([]); const fetchDeptList = async () => { const hide = message.loading('正在查询'); try { - await getDeptTree({}).then((res: any) => { - const exKeys = []; - exKeys.push('1'); - setTreeData(res); - exKeys.push(res[0].children[0].id); - setExpandedKeys(exKeys); - props.onSelect(res[0].children[0]); - }); + const res = await getDeptTree({}); + const treeData = res.map((item: any) => ({ ...item, key: item.id })); + setTreeData(treeData); + props.onSelect(treeData[0]); + setExpandedKeys([treeData[0].key]); + setSelectedKeys([treeData[0].key]); hide(); return true; } catch (error) { @@ -44,12 +42,12 @@ const DeptTree: React.FC = (props) => { }, []); const onSelect = (keys: React.Key[], info: any) => { + setSelectedKeys(keys); props.onSelect(info.node); }; - const onExpand = (expandedKeysValue: React.Key[]) => { - setExpandedKeys(expandedKeysValue); - setAutoExpandParent(false); + const onExpand = (keys: React.Key[]) => { + setExpandedKeys(keys); }; return ( @@ -58,7 +56,7 @@ const DeptTree: React.FC = (props) => { defaultExpandAll onExpand={onExpand} expandedKeys={expandedKeys} - autoExpandParent={autoExpandParent} + selectedKeys={selectedKeys} onSelect={onSelect} treeData={treeData} /> diff --git a/react-ui/src/pages/System/User/edit.tsx b/react-ui/src/pages/System/User/edit.tsx index 101ec96c..e5253ca3 100644 --- a/react-ui/src/pages/System/User/edit.tsx +++ b/react-ui/src/pages/System/User/edit.tsx @@ -34,6 +34,15 @@ const UserForm: React.FC = (props) => { const userId = Form.useWatch('userId', form); const { sexOptions, statusOptions } = props; const { roles, posts, depts } = props; + const formLayout = { + labelCol: { span: 8 }, + wrapperCol: { span: 16 }, + }; + + const formItemLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -42,13 +51,13 @@ const UserForm: React.FC = (props) => { deptId: props.values.deptId, postIds: props.postIds, roleIds: props.roleIds, - userName: props.values.userName, + userName: props.values.userName ?? '', nickName: props.values.nickName, email: props.values.email, phonenumber: props.values.phonenumber, - sex: props.values.sex, + sex: props.values.sex || '0', avatar: props.values.avatar, - status: props.values.status, + status: props.values.status || Object.keys(statusOptions)[0], delFlag: props.values.delFlag, loginIp: props.values.loginIp, loginDate: props.values.loginDate, @@ -69,7 +78,7 @@ const UserForm: React.FC = (props) => { return ( = (props) => { layout="horizontal" submitter={false} onFinish={handleFinish} + {...formLayout} + size="large" + labelAlign="right" + autoComplete="off" > = (props) => { required: false, message: , }, + { + pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, + message: ( + + ), + }, ]} /> = (props) => { required: false, message: , }, + { + type: 'email', + message: ( + + ), + }, ]} /> = (props) => { hidden={userId} placeholder="请输入用户账号" colProps={{ md: 12, xl: 12 }} + fieldProps={{ + autoComplete: 'off', + }} rules={[ { required: true, @@ -173,6 +207,10 @@ const UserForm: React.FC = (props) => { hidden={userId} placeholder="请输入密码" colProps={{ md: 12, xl: 12 }} + fieldProps={{ + autoComplete: 'new-password', + }} + allowClear rules={[ { required: false, @@ -187,7 +225,6 @@ const UserForm: React.FC = (props) => { id: 'system.user.sex', defaultMessage: '用户性别', })} - initialValue={'0'} placeholder="请输入用户性别" colProps={{ md: 12, xl: 12 }} rules={[ @@ -204,7 +241,6 @@ const UserForm: React.FC = (props) => { id: 'system.user.status', defaultMessage: '帐号状态', })} - initialValue={'0'} placeholder="请输入帐号状态" colProps={{ md: 12, xl: 12 }} rules={[ @@ -246,6 +282,7 @@ const UserForm: React.FC = (props) => { })} placeholder="请输入备注" colProps={{ md: 24, xl: 24 }} + {...formItemLayout} rules={[ { required: false, diff --git a/react-ui/src/pages/System/User/index.tsx b/react-ui/src/pages/System/User/index.tsx index 73cd0984..e4e65596 100644 --- a/react-ui/src/pages/System/User/index.tsx +++ b/react-ui/src/pages/System/User/index.tsx @@ -429,6 +429,8 @@ const UserTableList: React.FC = () => { ); } setCurrentRow(undefined); + setPostIds([]); + setRoleIds([]); setModalVisible(true); }} > From eda18ad3f69d81b92641c43f338d9b59458530b1 Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Wed, 7 Aug 2024 09:44:55 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E5=85=A8=E5=B1=80=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=97=B6=EF=BC=8C=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=97=B6=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/ModelDeployment/Create/index.tsx | 4 +-- react-ui/src/pages/Pipeline/Info/utils.tsx | 26 +++++++++++-------- .../Pipeline/components/PropsLabel/index.tsx | 26 ++++++++++--------- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/react-ui/src/pages/ModelDeployment/Create/index.tsx b/react-ui/src/pages/ModelDeployment/Create/index.tsx index 5528c221..bf071fa0 100644 --- a/react-ui/src/pages/ModelDeployment/Create/index.tsx +++ b/react-ui/src/pages/ModelDeployment/Create/index.tsx @@ -278,8 +278,8 @@ function ModelDeploymentCreate() { message: '请输入副本数量', }, { - pattern: /^-?\d+(\.\d+)?$/, - message: '副本数量必须是数字', + pattern: /^[1-9]\d*$/, + message: '副本数量必须是正整数', }, ]} > diff --git a/react-ui/src/pages/Pipeline/Info/utils.tsx b/react-ui/src/pages/Pipeline/Info/utils.tsx index ecb65acd..93fca2b1 100644 --- a/react-ui/src/pages/Pipeline/Info/utils.tsx +++ b/react-ui/src/pages/Pipeline/Info/utils.tsx @@ -55,17 +55,21 @@ export function createMenuItems( }; }); - return [ - { - key: 'global', - label: '全局参数', - children: params.map((item) => ({ - key: item.param_name, - label: item.param_name, - })), - }, - ...nodes, - ]; + if (params.length > 0) { + return [ + { + key: 'global', + label: '全局参数', + children: params.map((item) => ({ + key: item.param_name, + label: item.param_name, + })), + }, + ...nodes, + ]; + } else { + return [...nodes]; + } } export function getInParameterComponent( diff --git a/react-ui/src/pages/Pipeline/components/PropsLabel/index.tsx b/react-ui/src/pages/Pipeline/components/PropsLabel/index.tsx index c1b2f2d5..62d1fef0 100644 --- a/react-ui/src/pages/Pipeline/components/PropsLabel/index.tsx +++ b/react-ui/src/pages/Pipeline/components/PropsLabel/index.tsx @@ -23,18 +23,20 @@ function PropsLabel({ title, menuItems, onClick }: PropsLabelProps) { return (
{title}
- - e.preventDefault()}>参数 - + {menuItems && menuItems.length > 0 && ( + + e.preventDefault()}>参数 + + )}
); } From 717644ef5f50c36c031cf8bd2bfb9677d4453c14 Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Thu, 22 Aug 2024 11:06:51 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E9=93=BE=E6=8E=A5=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=B8=8B=E5=88=92=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/src/global.less | 5 +++++ .../pages/Dataset/components/ResourceVersion/index.tsx | 6 ++++-- react-ui/src/pages/DevelopmentEnvironment/List/index.tsx | 4 +++- .../Experiment/components/ExperimentInstance/index.less | 2 +- react-ui/src/pages/Experiment/index.jsx | 8 ++++++-- .../src/pages/Model/components/NodeTooltips/index.less | 4 ++++ react-ui/src/pages/ModelDeployment/List/index.tsx | 6 +++++- react-ui/src/pages/Pipeline/index.jsx | 6 +++++- react-ui/src/pages/System/Dict/index.tsx | 1 + react-ui/src/pages/Tool/Gen/index.tsx | 1 - react-ui/src/styles/theme.less | 1 + 11 files changed, 35 insertions(+), 9 deletions(-) diff --git a/react-ui/src/global.less b/react-ui/src/global.less index 7471b78c..8b1b44f9 100644 --- a/react-ui/src/global.less +++ b/react-ui/src/global.less @@ -149,6 +149,11 @@ ol { z-index: 999; } +.kf-table-row-link:hover { + text-decoration: underline @underline-color; + text-underline-offset: 3px; +} + input:-webkit-autofill { transition: background-color 5000s ease-in-out 0s; } diff --git a/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx b/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx index 2e9f87b2..8199d336 100644 --- a/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx +++ b/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx @@ -128,7 +128,7 @@ function ResourceVersion({ dataIndex: 'index', key: 'index', width: 80, - render(text: string, record: ResourceFileData, index: number) { + render(_text: string, _record: ResourceFileData, index: number) { return {index + 1}; }, }, @@ -137,7 +137,9 @@ function ResourceVersion({ dataIndex: 'file_name', key: 'file_name', render: (text: string, record: ResourceFileData) => ( - downloadAlone(record)}>{text} + downloadAlone(record)}> + {text} + ), }, { diff --git a/react-ui/src/pages/DevelopmentEnvironment/List/index.tsx b/react-ui/src/pages/DevelopmentEnvironment/List/index.tsx index db1d0544..504a4d9d 100644 --- a/react-ui/src/pages/DevelopmentEnvironment/List/index.tsx +++ b/react-ui/src/pages/DevelopmentEnvironment/List/index.tsx @@ -154,7 +154,9 @@ function EditorList() { width: '30%', render: (text, record) => record.url ? ( - gotoEditorPage(e, record)}>{text} + gotoEditorPage(e, record)}> + {text} + ) : ( {text ?? '--'} ), diff --git a/react-ui/src/pages/Experiment/components/ExperimentInstance/index.less b/react-ui/src/pages/Experiment/components/ExperimentInstance/index.less index 650b3153..541af2b5 100644 --- a/react-ui/src/pages/Experiment/components/ExperimentInstance/index.less +++ b/react-ui/src/pages/Experiment/components/ExperimentInstance/index.less @@ -33,7 +33,7 @@ } .operation { - width: 334px; + width: 344px; } } diff --git a/react-ui/src/pages/Experiment/index.jsx b/react-ui/src/pages/Experiment/index.jsx index e9ad6821..9f3d55c7 100644 --- a/react-ui/src/pages/Experiment/index.jsx +++ b/react-ui/src/pages/Experiment/index.jsx @@ -355,7 +355,11 @@ function Experiment() { title: '关联流水线名称', dataIndex: 'workflow_name', key: 'workflow_name', - render: (text, record) => gotoPipeline(e, record)}>{text}, + render: (text, record) => ( + gotoPipeline(e, record)}> + {text} + + ), width: '16%', }, { @@ -393,7 +397,7 @@ function Experiment() { { title: '操作', key: 'action', - width: 350, + width: 360, render: (_, record) => (