387 lines
13 KiB
TypeScript
Raw Normal View History

2025-09-26 21:02:38 +08:00
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { MomentSelect } from '@/components/MomentCategories';
import { MyModal } from '@/components/MyModal';
import { Selects } from '@/components/Select';
import MyTransferProject from '@/components/TransferProject';
import { Apis } from '@/gen/Apis';
import {
CustomerMomentsChannelEnum,
CustomerMomentsContentTypeEnum,
CustomerMomentsPushTypeEnum,
CustomerMomentsRangeTypeEnum,
CustomerMomentsTaskEndTypeEnum,
} from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components';
2025-09-30 14:30:47 +08:00
import { Button, Form, message, Space, Steps } from 'antd';
import { useRef, useState } from 'react';
import MyinfoPreview from '../components/infoPreview';
2025-09-26 21:02:38 +08:00
export default function Create(props: MyBetaModalFormProps) {
const [current, setCurrent] = useState(0);
2025-09-30 14:30:47 +08:00
const [getContentType, setContentType] = useState('');
2025-09-26 21:02:38 +08:00
const [formData, setFormData] = useState<any>({});
2025-09-30 14:30:47 +08:00
const [form] = Form.useForm();
const modalRef: any = useRef(null);
2025-09-26 21:02:38 +08:00
const steps = [
{
title: '创建任务',
columns: [
MyFormItems.EnumRadio({
key: 'channel',
title: '发送渠道',
valueEnum: CustomerMomentsChannelEnum,
required: true,
}),
Selects?.Companies({
key: 'companies_id',
2025-10-10 00:28:59 +08:00
title: '选择机构',
2025-09-26 21:02:38 +08:00
colProps: { span: 24 },
required: true,
}),
MomentSelect.MomentCategoriesSelect({
title: '内容分类',
formItemProps: { ...rulesHelper.array },
}),
{
valueType: 'group',
colProps: { span: 24 },
columns: [
MyFormItems.EnumRadio({
key: 'push_type',
2025-10-10 00:28:59 +08:00
title: '任务推送方式',
tooltip: '内容穿创建后,推送任务给员工的方式',
2025-09-26 21:02:38 +08:00
valueEnum: CustomerMomentsPushTypeEnum,
required: true,
2025-10-10 00:28:59 +08:00
colProps: { span: 12 },
2025-09-26 21:02:38 +08:00
}),
{
name: ['push_type'],
valueType: 'dependency',
columns: ({ push_type }: any) => {
return push_type === 'ScheduledPush'
? [
{
key: 'scheduled_time',
2025-10-10 00:28:59 +08:00
title: '定时推送时间',
2025-09-26 21:02:38 +08:00
valueType: 'dateTime',
2025-10-10 00:28:59 +08:00
colProps: { span: 12 },
2025-09-26 21:02:38 +08:00
},
]
: [];
},
},
],
},
{
valueType: 'group',
colProps: { span: 24 },
columns: [
MyFormItems.EnumRadio({
key: 'task_end_type',
title: '任务结束类型',
valueEnum: CustomerMomentsTaskEndTypeEnum,
required: true,
2025-10-10 00:28:59 +08:00
colProps: { span: 12 },
2025-09-26 21:02:38 +08:00
}),
{
name: ['task_end_type'],
valueType: 'dependency',
columns: ({ task_end_type }: any) => {
return task_end_type === 'AfterNDays'
? [
{
key: 'task_days',
2025-10-10 00:28:59 +08:00
title: ' ',
2025-09-26 21:02:38 +08:00
colProps: { span: 10 },
2025-09-30 14:30:47 +08:00
valueType: 'digit',
2025-09-26 21:02:38 +08:00
formItemProps: { ...rulesHelper.number },
fieldProps: {
suffix: '天结束',
2025-09-30 14:30:47 +08:00
style: { width: '200px' },
2025-09-26 21:02:38 +08:00
},
},
]
: task_end_type === 'ScheduledEnd'
? [
{
key: 'task_end_time',
title: '定时结束',
valueType: 'dateTime',
formItemProps: { ...rulesHelper.text },
colProps: { span: 10 },
},
]
: [];
},
},
],
},
MyFormItems.EnumSelect({
key: 'range_type',
2025-10-10 00:28:59 +08:00
title: '推送范围',
2025-09-26 21:02:38 +08:00
valueEnum: CustomerMomentsRangeTypeEnum,
required: true,
}),
{
name: ['range_type'],
valueType: 'dependency',
columns: ({ range_type }: any) => {
return range_type === 'Project'
? [
{
key: 'range_data',
title: '选择范围',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.array },
renderFormItem: () => <MyTransferProject />,
},
]
: [];
},
},
],
},
{
title: '创建内容',
columns: [
2025-10-10 00:28:59 +08:00
{
key: 'title',
title: '标题',
formItemProps: { ...rulesHelper.text },
colProps: { span: 24 },
},
2025-09-26 21:02:38 +08:00
MyFormItems.EnumRadio({
key: 'content_type',
title: '内容类型',
valueEnum: CustomerMomentsContentTypeEnum,
required: true,
colProps: { span: 24 },
2025-10-11 10:18:18 +08:00
fieldProps: {
onChange: (e: any) => {
setContentType(e?.target?.value);
},
},
2025-09-26 21:02:38 +08:00
}),
{
name: ['content_type'],
valueType: 'dependency',
columns: ({ content_type }: any) => {
2025-10-10 00:28:59 +08:00
return content_type === CustomerMomentsContentTypeEnum.Image.value
? [
{
key: 'content',
title: '发送文案',
valueType: 'textarea',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.UploadImages({
key: 'attachments',
title: '上传图片',
// uploadType: 'file',
required: true,
tooltip: '限9张图片',
max: 9,
colProps: { span: 24 },
}),
]
: content_type === CustomerMomentsContentTypeEnum.Video.value
? [
{
key: 'content',
title: '发送文案',
valueType: 'textarea',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.UploadImages({
key: 'attachments',
title: '上传视频',
required: true,
tooltip: '限1个视频',
// uploadType: 'file',
max: 1,
colProps: { span: 24 },
}),
]
: content_type === CustomerMomentsContentTypeEnum.Link.value ||
content_type ===
CustomerMomentsContentTypeEnum.MiniProgram.value
? [
{
key: 'content',
title: '发送文案',
valueType: 'textarea',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
{
name: ['content_type'],
valueType: 'dependency',
columns: ({ content_type }: any) => {
return content_type === 'MiniProgram'
? [
{
key: 'mini_program_app_id',
title: '小程序APPID',
formItemProps: { ...rulesHelper.text },
colProps: { span: 12 },
},
{
key: 'skip_url',
title: '链接地址',
formItemProps: { ...rulesHelper.text },
colProps: { span: 12 },
},
]
: [
{
key: 'skip_url',
title: '链接地址',
formItemProps: { ...rulesHelper.text },
colProps: { span: 24 },
},
];
},
},
{
key: 'desc',
title: '链接标题',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.UploadImages({
key: 'cover_image',
tooltip: '限1张图片',
title: '设置封面',
required: true,
max: 1,
}),
]
: content_type === CustomerMomentsContentTypeEnum.Link.value ||
content_type ===
CustomerMomentsContentTypeEnum.MiniProgram.value
2025-09-26 21:02:38 +08:00
? [
{
2025-10-10 00:28:59 +08:00
key: 'skip_url',
title: '链接',
2025-09-26 21:02:38 +08:00
formItemProps: { ...rulesHelper.text },
colProps: { span: 24 },
},
]
: [];
},
},
],
},
];
const handleNext = async () => {
// 这里可以添加表单验证逻辑
2025-10-11 10:18:18 +08:00
setCurrent(1);
console.log('next', current);
2025-09-26 21:02:38 +08:00
};
// 处理上一步
const handlePrev = () => {
2025-10-11 10:18:18 +08:00
setCurrent(0);
console.log('Prev', current);
2025-09-26 21:02:38 +08:00
};
return (
<MyModal
title={`创建${props.title}`}
type="primary"
size={'middle'}
2025-09-30 14:30:47 +08:00
myRef={modalRef}
2025-10-10 00:28:59 +08:00
width="580px"
2025-09-26 21:02:38 +08:00
node={
<Space direction="vertical">
2025-10-10 00:28:59 +08:00
<div style={{ width: '666px' }}>
2025-09-30 14:30:47 +08:00
<Steps
2025-10-10 00:28:59 +08:00
style={{ padding: '20px 200px 20px 20px' }}
2025-09-30 14:30:47 +08:00
current={current}
items={steps}
/>
</div>
<Space align="start">
2025-10-10 00:28:59 +08:00
<div style={{ width: '500px' }}>
2025-09-30 14:30:47 +08:00
<BetaSchemaForm<ApiTypes.Customer.CustomerMomentCategories.Store>
{...MyModalFormProps.props}
title={`添加${props.title}`}
wrapperCol={{ span: 24 }}
2025-10-10 00:28:59 +08:00
// width="1200px"
2025-09-30 14:30:47 +08:00
form={form}
layoutType="Form"
trigger={<MyButtons.Create title={`添加${props.title}`} />}
onFinish={async (values) => {
setFormData(values);
if (current < steps.length - 1) {
handleNext();
} else {
let data = { ...formData, ...values };
Apis.Customer.CustomerMoments.Store({
...data,
one_moment_categories_id:
formData?.moment_categories_ids[0],
two_moment_categories_id:
formData?.moment_categories_ids[1],
})
.then(() => {
props.reload?.();
message.success('提交成功!');
form.setFieldsValue({});
modalRef.current?.close();
setCurrent(0);
return true;
})
.catch(() => false);
}
}}
columns={steps[current].columns}
submitter={{
render: (props) => {
return (
<Space
style={{ display: 'flex', justifyContent: 'flex-end' }}
2025-09-26 21:02:38 +08:00
>
2025-09-30 14:30:47 +08:00
{current > 0 && (
<Button onClick={handlePrev}></Button>
)}
{current < steps.length - 1 ? (
<Button
type="primary"
onClick={() => props.form?.submit?.()}
>
</Button>
) : (
<Button
type="primary"
onClick={() => props.form?.submit?.()}
>
</Button>
)}
</Space>
);
},
}}
/>
</div>
2025-10-11 10:18:18 +08:00
<MyinfoPreview item={{ type: getContentType }} />
2025-09-30 14:30:47 +08:00
</Space>
2025-09-26 21:02:38 +08:00
</Space>
}
/>
);
}