From 28301af0602a4e8fc4bc044282e9b4a67b65c623 Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Tue, 3 Sep 2024 09:07:38 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E4=BB=A3=E7=A0=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=B7=BB=E5=8A=A0=E5=85=AC=E5=BC=80/=E7=A7=81?= =?UTF-8?q?=E6=9C=89tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/AddCodeConfigModal/index.tsx | 46 +++++++++++++++---- .../components/CodeConfigItem/index.less | 9 +++- .../components/CodeConfigItem/index.tsx | 24 ++++++++-- 3 files changed, 63 insertions(+), 16 deletions(-) diff --git a/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx b/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx index 975e4f2e..08d9343c 100644 --- a/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx +++ b/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx @@ -3,8 +3,9 @@ import { AvailableRange } from '@/enums'; import { type CodeConfigData } from '@/pages/CodeConfig/List'; import { addCodeConfigReq, updateCodeConfigReq } from '@/services/codeConfig'; import { to } from '@/utils/promise'; -import { Form, Input, Radio, message, type ModalProps } from 'antd'; +import { Form, Input, Radio, message, type FormRule, type ModalProps } from 'antd'; import { omit } from 'lodash'; +import { useMemo } from 'react'; export enum VerifyMode { Password = 0, // 用户名密码 @@ -25,7 +26,32 @@ interface AddCodeConfigModalProps extends Omit { } function AddCodeConfigModal({ opType, codeConfigData, onOk, ...rest }: AddCodeConfigModalProps) { - // 上传请求 + const [form] = Form.useForm(); + const isPublic = Form.useWatch('code_repo_vis', form) === AvailableRange.Public; + + const urlExample = useMemo( + () => + isPublic + ? 'https://gitlink.org.cn/ci4s/ci4sManagement-cloud.git' + : 'git@code.gitlink.org.cn:ci4s/ci4sManagement-cloud.git', + [isPublic], + ); + + // /^(git@[\w.-]+:[\w./-]+\.git)$/ + const urlRules: FormRule[] = useMemo( + () => + isPublic + ? [ + { + type: 'url', + message: '请输入正确的 Git 地址', + }, + ] + : ([] as FormRule[]), + [isPublic], + ); + + // 创建 const createCodeConfig = async (formData: FormData) => { const params: FormData & { id?: number } = { ...formData, @@ -78,14 +104,12 @@ function AddCodeConfigModal({ opType, codeConfigData, onOk, ...rest }: AddCodeCo >
- {/* 禁止 Chrome 自动填充 */} - {/* - */} - + void; - onRemove: (item: CodeConfigData) => void; + onClick?: (item: CodeConfigData) => void; + onRemove?: (item: CodeConfigData) => void; }; function CodeConfigItem({ item, onClick, onRemove }: CodeConfigItemProps) { return ( -
onClick(item)}> +
onClick?.(item)}> {item.code_repo_name} +
+ {item.code_repo_vis === AvailableRange.Public ? '公开' : '私有'} +
-
{item.git_url}
+ + {item.git_url} + +
+ {item.git_branch} +
From 72dfb55fb533af1b3aa4db6eb4c6b002643815ed Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Tue, 3 Sep 2024 11:44:56 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E9=85=8D=E7=BD=AE-=E5=8F=82=E6=95=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E3=80=81=E9=80=9A=E7=9F=A5=E9=85=8D=E7=BD=AE=E3=80=81?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/config/routes.ts | 10 +++++++++ react-ui/src/pages/Monitor/JobLog/detail.tsx | 2 +- react-ui/src/pages/System/Config/edit.tsx | 13 ++++++++--- react-ui/src/pages/System/Config/index.tsx | 2 +- react-ui/src/pages/System/DictData/edit.tsx | 19 ++++++++++------ react-ui/src/pages/System/Logininfor/edit.tsx | 18 ++++++++++++--- react-ui/src/pages/System/Notice/edit.tsx | 13 ++++++++--- react-ui/src/pages/System/Operlog/detail.tsx | 2 +- react-ui/src/pages/System/Operlog/index.tsx | 22 +++++++++---------- .../System/Role/components/DataScope.tsx | 10 ++++++++- react-ui/src/pages/System/User/edit.tsx | 9 ++++---- react-ui/src/pages/User/Login/index.tsx | 7 +++--- react-ui/src/services/session.ts | 2 +- react-ui/src/utils/menuRender.tsx | 7 ++++++ 14 files changed, 96 insertions(+), 40 deletions(-) diff --git a/react-ui/config/routes.ts b/react-ui/config/routes.ts index 8838c75a..3caca59f 100644 --- a/react-ui/config/routes.ts +++ b/react-ui/config/routes.ts @@ -360,6 +360,16 @@ export default [ path: 'role-auth/user/:id', component: './System/Role/authUser', }, + { + name: '日志', + path: 'log', + routes: [ + { + path: '', + redirect: '/system/log/operlog', + }, + ], + }, ], }, { diff --git a/react-ui/src/pages/Monitor/JobLog/detail.tsx b/react-ui/src/pages/Monitor/JobLog/detail.tsx index d6b25913..10cac4e4 100644 --- a/react-ui/src/pages/Monitor/JobLog/detail.tsx +++ b/react-ui/src/pages/Monitor/JobLog/detail.tsx @@ -28,7 +28,7 @@ const JobLogDetailForm: React.FC = (props) => { return ( = (props) => { const [form] = Form.useForm(); - const { configTypeOptions } = props; + const formLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -32,7 +35,7 @@ const ConfigForm: React.FC = (props) => { configName: props.values.configName, configKey: props.values.configKey, configValue: props.values.configValue, - configType: props.values.configType, + configType: props.values.configType || Object.keys(configTypeOptions)[0], createBy: props.values.createBy, createTime: props.values.createTime, updateBy: props.values.updateBy, @@ -54,7 +57,7 @@ const ConfigForm: React.FC = (props) => { return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" + labelAlign="right" + autoComplete="off" > { handleRefreshCache(); }} > - + {' '} , ]} diff --git a/react-ui/src/pages/System/DictData/edit.tsx b/react-ui/src/pages/System/DictData/edit.tsx index 8f03931a..deef59d6 100644 --- a/react-ui/src/pages/System/DictData/edit.tsx +++ b/react-ui/src/pages/System/DictData/edit.tsx @@ -23,8 +23,11 @@ export type DataFormProps = { const DictDataForm: React.FC = (props) => { const [form] = Form.useForm(); - const { statusOptions } = props; + const formLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -36,8 +39,8 @@ const DictDataForm: React.FC = (props) => { dictType: props.values.dictType, cssClass: props.values.cssClass, listClass: props.values.listClass, - isDefault: props.values.isDefault, - status: props.values.status, + isDefault: props.values.isDefault || 'N', + status: props.values.status || Object.keys(statusOptions)[0], createBy: props.values.createBy, createTime: props.values.createTime, updateBy: props.values.updateBy, @@ -59,7 +62,7 @@ const DictDataForm: React.FC = (props) => { return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" + labelAlign="right" + autoComplete="off" > = (props) => { id: 'system.dict.data.dict_sort', defaultMessage: '字典排序', })} - colProps={{ md: 12, xl: 12 }} + colProps={{ md: 12, xl: 24 }} placeholder="请输入字典排序" rules={[ { @@ -203,7 +210,6 @@ const DictDataForm: React.FC = (props) => { Y: '是', N: '否', }} - initialValue={'N'} colProps={{ md: 12, xl: 24 }} placeholder="请输入是否默认" rules={[ @@ -220,7 +226,6 @@ const DictDataForm: React.FC = (props) => { id: 'system.dict.data.status', defaultMessage: '状态', })} - initialValue={'0'} colProps={{ md: 12, xl: 24 }} placeholder="请输入状态" rules={[ diff --git a/react-ui/src/pages/System/Logininfor/edit.tsx b/react-ui/src/pages/System/Logininfor/edit.tsx index 6248b376..5f7aa0a2 100644 --- a/react-ui/src/pages/System/Logininfor/edit.tsx +++ b/react-ui/src/pages/System/Logininfor/edit.tsx @@ -22,8 +22,11 @@ export type LogininforFormProps = { const LogininforForm: React.FC = (props) => { const [form] = Form.useForm(); - const { statusOptions } = props; + const formLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -54,7 +57,7 @@ const LogininforForm: React.FC = (props) => { return ( = (props) => { onOk={handleOk} onCancel={handleCancel} > - + = (props) => { const [form] = Form.useForm(); - const { noticeTypeOptions, statusOptions } = props; + const formLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + }; useEffect(() => { form.resetFields(); @@ -34,7 +37,7 @@ const NoticeForm: React.FC = (props) => { noticeTitle: props.values.noticeTitle, noticeType: props.values.noticeType, noticeContent: props.values.noticeContent, - status: props.values.status, + status: props.values.status || Object.keys(statusOptions)[0], createBy: props.values.createBy, createTime: props.values.createTime, updateBy: props.values.updateBy, @@ -56,7 +59,7 @@ const NoticeForm: React.FC = (props) => { return ( = (props) => { submitter={false} layout="horizontal" onFinish={handleFinish} + {...formLayout} + size="large" + labelAlign="right" + autoComplete="off" > = (props) => { return ( { tableAlertRender={false} tableAlertOptionRender={false} toolBarRender={() => [ - , + // ,
diff --git a/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx b/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx index 08d9343c..ce4deafd 100644 --- a/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx +++ b/react-ui/src/pages/CodeConfig/components/AddCodeConfigModal/index.tsx @@ -250,8 +250,8 @@ function AddCodeConfigModal({ opType, codeConfigData, onOk, ...rest }: AddCodeCo diff --git a/react-ui/src/pages/CodeConfig/components/CodeConfigItem/index.tsx b/react-ui/src/pages/CodeConfig/components/CodeConfigItem/index.tsx index 31c78ad1..e20f76a8 100644 --- a/react-ui/src/pages/CodeConfig/components/CodeConfigItem/index.tsx +++ b/react-ui/src/pages/CodeConfig/components/CodeConfigItem/index.tsx @@ -10,10 +10,11 @@ import styles from './index.less'; type CodeConfigItemProps = { item: CodeConfigData; onClick?: (item: CodeConfigData) => void; + onEdit?: (item: CodeConfigData) => void; onRemove?: (item: CodeConfigData) => void; }; -function CodeConfigItem({ item, onClick, onRemove }: CodeConfigItemProps) { +function CodeConfigItem({ item, onClick, onEdit, onRemove }: CodeConfigItemProps) { return (
onClick?.(item)}> @@ -26,10 +27,22 @@ function CodeConfigItem({ item, onClick, onRemove }: CodeConfigItemProps) {
{item.code_repo_vis === AvailableRange.Public ? '公开' : '私有'}
+ + + )} +
+
{item.description}
+ +
+ + {item.create_by} +
+
+ + 最近更新: {formatDate(item.update_time, 'YYYY-MM-DD')} +
+
+
+ ); +} + +export default ResourceItem;