👨🏻‍💻👩🏻‍💻 Use Ant Design like a Pro!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

194 lines
5.2 KiB

import {
PageContainer,
ProForm,
ProFormDateRangePicker,
ProFormDependency,
ProFormDigit,
ProFormRadio,
ProFormSelect,
ProFormText,
ProFormTextArea,
} from '@ant-design/pro-components';
import { useMutation } from '@tanstack/react-query';
import { Card, message } from 'antd';
import type { FC } from 'react';
import { fakeSubmitForm } from './service';
import useStyles from './style.style';
const BasicForm: FC<Record<string, any>> = () => {
const { styles } = useStyles();
const { mutate: run } = useMutation({
mutationFn: fakeSubmitForm,
onSuccess: () => {
message.success('提交成功');
},
});
const onFinish = async (values: Record<string, any>) => {
run(values);
};
return (
<PageContainer content="表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。">
<Card variant="borderless">
<ProForm
requiredMark={false}
style={{
margin: 'auto',
marginTop: 8,
maxWidth: 600,
}}
name="basic"
layout="vertical"
initialValues={{
public: '1',
}}
onFinish={onFinish}
>
<ProFormText
width="md"
label="标题"
name="title"
rules={[
{
required: true,
message: '请输入标题',
},
]}
placeholder="给目标起个名字"
/>
<ProFormDateRangePicker
label="起止日期"
width="md"
name="date"
rules={[
{
required: true,
message: '请选择起止日期',
},
]}
placeholder={['开始日期', '结束日期']}
/>
<ProFormTextArea
label="目标描述"
width="xl"
name="goal"
rules={[
{
required: true,
message: '请输入目标描述',
},
]}
placeholder="请输入你的阶段性工作目标"
/>
<ProFormTextArea
label="衡量标准"
name="standard"
width="xl"
rules={[
{
required: true,
message: '请输入衡量标准',
},
]}
placeholder="请输入衡量标准"
/>
<ProFormText
width="md"
label={
<span>
<em className={styles.optional}></em>
</span>
}
tooltip="目标的服务对象"
name="client"
placeholder="请描述你服务的客户,内部客户直接 @姓名/工号"
/>
<ProFormText
width="md"
label={
<span>
<em className={styles.optional}></em>
</span>
}
name="invites"
placeholder="请直接 @姓名/工号,最多可邀请 5 人"
/>
<ProFormDigit
label={
<span>
<em className={styles.optional}></em>
</span>
}
name="weight"
placeholder="请输入"
min={0}
max={100}
width="xs"
fieldProps={{
formatter: (value) => `${value || 0}%`,
parser: (value) => Number(value ? value.replace('%', '') : '0'),
}}
/>
<ProFormRadio.Group
options={[
{
value: '1',
label: '公开',
},
{
value: '2',
label: '部分公开',
},
{
value: '3',
label: '不公开',
},
]}
label="目标公开"
help="客户、邀评人默认被分享"
name="publicType"
/>
<ProFormDependency name={['publicType']}>
{({ publicType }) => {
return (
<ProFormSelect
width="md"
name="publicUsers"
fieldProps={{
style: {
margin: '8px 0',
display:
publicType && publicType === '2' ? 'block' : 'none',
},
}}
options={[
{
value: '1',
label: '同事甲',
},
{
value: '2',
label: '同事乙',
},
{
value: '3',
label: '同事丙',
},
]}
/>
);
}}
</ProFormDependency>
</ProForm>
</Card>
</PageContainer>
);
};
export default BasicForm;