123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- import NewSteps from '@/pages/weComTask/components/newSteps';
- import { App, Button, Card, Form, Input, Modal, Radio } from 'antd';
- import React, { useEffect, useRef, useState } from 'react';
- import '../../global.less';
- import SendTimeSet from '@/pages/weComTask/components/sendTimeSet';
- import { PlusOutlined, DeleteOutlined } from '@ant-design/icons';
- import style from '../massSending/index.less'
- import FilterUser from '@/pages/weComTask/components/filterUser';
- import dayjs from 'dayjs';
- /**
- * 客户继承
- * @param param0
- * @returns
- */
- const SettingsUserInherit: React.FC<TASK_CREATE.UserInheritProps<any>> = ({ value, visible, onClose, onChange }) => {
- /***************************************************/
- const ref1 = useRef<HTMLDivElement>(null)
- const { message } = App.useApp()
- const [form] = Form.useForm();
- const schedulingStrategyDTO = Form.useWatch('schedulingStrategyDTO', form)
- const [stepsList, setStepsList] = useState<any>([
- { title: '客户继承配置', description: '标题', id: 'basicInfo' },
- {
- title: '策略1', d: `strategy_0`, children: [
- { title: '发送时间', id: `strategy_0_sendTime` },
- {
- title: '继承转移1', id: `strategy_0_0_inheritDto`, children: [
- { title: '智能标签', id: `strategy_0_0_inheritDto_sendMsgTag` },
- { title: '转移对象', id: `strategy_0_0_inheritDto_object`, description: '对象筛选,人群包,文本消息' }
- ]
- },
- { title: '完成' }
- ]
- },
- { title: '完成' }
- ])
- /***************************************************/
- // 回填
- useEffect(() => {
- if (value && Object.keys(value).length) {
- const data = {
- ...value, schedulingStrategyDTO: value?.schedulingStrategyDTO?.map(item => {
- const { sendTime, startTime, endTime, sendDay, timeRepeatType } = item
- if (timeRepeatType === 'TIME_TYPE_SINGLE_PLACE') {
- const data = {
- ...item,
- timeRepeatType,
- sendDay: sendDay ? dayjs(sendDay + ' ' + sendTime) : undefined
- }
- delete data?.sendTime
- return data
- }
- return {
- ...item,
- timeRepeatType,
- sendTime: sendTime ? dayjs('2025-04-25 ' + sendTime) : undefined,
- startTime: startTime ? dayjs(startTime) : undefined,
- endTime: endTime ? dayjs(endTime) : undefined,
- sendDay: sendDay ? dayjs(sendDay) : undefined
- }
- })
- }
- filedUpdateChange(data)
- form.setFieldsValue(data)
- }
- }, [value])
- const handleOk = () => {
- form.validateFields().then((values) => {
- const data = {
- ...values,
- schedulingStrategyDTO: values?.schedulingStrategyDTO?.map(item => {
- const { startTime, endTime, sendDay, sendTime, timeRepeatType, repeatArray, ...rest } = item
- const data = { ...rest, timeRepeatType }
- if (timeRepeatType === 'TIME_TYPE_SINGLE_PLACE') {
- // 定时发送
- data.sendDay = dayjs(sendDay).format('YYYY-MM-DD')
- data.sendTime = dayjs(sendDay).format('HH:mm:ss')
- } else if (timeRepeatType === 'TIME_TYPE_REPEAT_DAY') {
- // 每日循环
- data.startTime = dayjs(startTime).format('YYYY-MM-DD')
- if (endTime) {
- data.endTime = dayjs(endTime).format('YYYY-MM-DD')
- }
- data.sendTime = dayjs(sendTime).format('HH:mm:ss')
- } else if (timeRepeatType === 'TIME_TYPE_REPEAT_WEEK' || timeRepeatType === 'TIME_TYPE_REPEAT_MONTH') {
- // 每周循环、每月循环
- data.startTime = dayjs(startTime).format('YYYY-MM-DD')
- data.sendTime = dayjs(sendTime).format('HH:mm:ss')
- if (endTime) {
- data.endTime = dayjs(endTime).format('YYYY-MM-DD')
- }
- data.repeatArray = repeatArray
- }
- return data
- })
- }
- console.log(values)
- onChange(data)
- }).catch(() => {
- form.submit()
- });
- };
- const filedUpdateChange = ({ taskName, schedulingStrategyDTO }: any) => {
- const content = schedulingStrategyDTO?.map((item, index) => {
- const { timeRepeatType, sendDay, startTime, sendTime, repeatArray, inheritDto } = item
- const sendTimeChecked =
- timeRepeatType === "TIME_TYPE_SINGLE_TIMELY" ||
- (timeRepeatType === "TIME_TYPE_SINGLE_PLACE" && sendDay) ||
- (timeRepeatType === "TIME_TYPE_REPEAT_DAY" && startTime && sendTime) ||
- ((timeRepeatType === "TIME_TYPE_REPEAT_WEEK" || timeRepeatType === "TIME_TYPE_REPEAT_MONTH") && startTime && sendTime && repeatArray)
- const contentChildren = inheritDto?.map((ii, ni) => {
- const objectChecked = ii?.transferType === 'all' ? true : ii?.transferUserDto && Object.values(ii?.transferUserDto).every(item => item)
- return {
- title: '继承转移' + (ni + 1),
- id: `strategy_${index}_${ni}_inheritDto`,
- checked: objectChecked,
- children: [
- { title: '转移对象', description: '对象筛选,人群包', id: `strategy_${index}_${ni}_inheritDto_object`, checked: objectChecked }
- ]
- }
- })
- return {
- title: `策略${index + 1}`,
- id: `strategy_${index}`,
- checked: sendTimeChecked && contentChildren.every(i => i.checked),
- children: [
- { title: '发送时间', checked: sendTimeChecked, id: `strategy_${index}_sendTime` },
- ...contentChildren,
- { title: '完成', checked: sendTimeChecked && contentChildren.every(i => i.checked) }
- ]
- }
- })
- const stepsData = [
- { title: '客户继承配置', description: '标题', checked: taskName, id: 'basicInfo' },
- ...content,
- { title: '完成', checked: taskName && content.every(i => i.checked) }
- ]
- setStepsList(stepsData)
- }
- return <Modal
- title={<strong>客户继承模板配置</strong>}
- open={visible}
- onCancel={onClose}
- width={850}
- onOk={handleOk}
- className={`settingsModal`}
- >
- <div className={`body_steps`}>
- <NewSteps
- items={stepsList}
- onChange={(e) => {
- if (e?.id)
- ref1.current?.querySelector('#' + e?.id)?.scrollIntoView({ behavior: 'smooth' })
- }}
- />
- </div>
- <div className={`body_content`} ref={ref1}>
- <Form
- form={form}
- name="newUserInherit"
- labelAlign='left'
- labelCol={{ span: 5 }}
- colon={false}
- scrollToFirstError={{
- behavior: 'smooth',
- block: 'center'
- }}
- onFinishFailed={({ errorFields }) => {
- message.error(errorFields?.[0]?.errors?.[0])
- }}
- onFinish={handleOk}
- initialValues={{
- schedulingStrategyDTO: [{ inheritDto: [{ transferType: 'specify' }] }],
- }}
- onFieldsChange={() => {
- filedUpdateChange(form.getFieldsValue())
- }}
- preserve={true}
- >
- <Card title={<strong>基础信息配置</strong>} hoverable style={{ background: '#fff', marginBottom: 10 }} id='basicInfo'>
- <Form.Item label={<strong>客户继承标题</strong>} name="taskName" rules={[{ required: true, message: '请输入标题!' }]}>
- <Input placeholder="请输入标题" style={{ width: 358 }} allowClear />
- </Form.Item>
- </Card>
- <Form.List name="schedulingStrategyDTO">
- {(fields, { add, remove }) => (
- <>
- {fields.map(({ key, name, ...restField }, index) => {
- const timeRepeatType = schedulingStrategyDTO?.[index]?.timeRepeatType
- const inheritDto = schedulingStrategyDTO?.[index]?.inheritDto
- return <Card
- key={key}
- title={<strong>策略{index + 1}配置</strong>}
- style={{ background: '#fff', marginBottom: 10 }}
- hoverable
- id={`strategy_${index}`}
- extra={schedulingStrategyDTO?.length > 1 ? <Button icon={<DeleteOutlined />} type='link' style={{ color: 'red' }} onClick={() => remove(name)}></Button> : null}
- >
- <div className={style.strategy_item} id={`strategy_${index}_strategyName`}>
- <Form.Item
- {...restField}
- label={<strong>策略名称</strong>}
- name={[name, 'strategyName']}
- rules={[{ required: false, message: '请输入策略名称!' }]}
- >
- <Input placeholder="请输入标题" style={{ width: 358 }} allowClear />
- </Form.Item>
- <div id={`strategy_${index}_sendTime`}>
- <SendTimeSet active='all' form={form} restField={restField} name={name} timeRepeatType={timeRepeatType} />
- </div>
- <Form.List name={[name, 'inheritDto']}>
- {(fields, { add, remove }) => (
- <>
- {fields.map(({ key, name, ...restField }, i) => {
- return <Card
- key={i}
- title={<strong>策略{index + 1} 继承转移{i + 1}</strong>}
- extra={inheritDto?.length > 1 ? <Button icon={<DeleteOutlined />} type='link' style={{ color: 'red' }} onClick={() => remove(name)}></Button> : null}
- id={`strategy_${index}_${i}_inheritDto`}
- style={{ background: '#fff', marginBottom: 10 }}
- >
- <div id={`strategy_${index}_${i}_inheritDto_object`}>
- <Form.Item
- label={<strong>转移对象</strong>}
- required
- >
- <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start' }}>
- <Form.Item
- {...restField}
- name={[name, 'transferType']}
- rules={[{ required: true, message: '请选择转移对象!' }]}
- noStyle
- >
- <Radio.Group options={[{ label: '全部', value: 'all' }, { label: '指定', value: 'specify' }]} />
- </Form.Item>
- {inheritDto?.[i]?.transferType === 'specify' && <div style={{ marginTop: 8, width: '100%' }}>
- <Form.Item
- {...restField}
- name={[name, 'transferUserDto']}
- rules={[{ required: true, message: '请选择人群包!' }]}
- noStyle
- >
- <FilterUser configType='USER_GROUP' />
- </Form.Item>
- </div>}
- </div>
- </Form.Item>
- </div>
- <Form.Item {...restField} name={[name, 'transferSuccessMsg']} label={<strong>文本消息</strong>} >
- <Input.TextArea placeholder={`客户转移成功后发给客户的消息,最多200个字符,不填则使用默认文案`} rows={2} />
- </Form.Item>
- </Card>
- })}
- <Form.Item>
- <Button type="dashed" onClick={() => add({ transferType: 'specify' })} block icon={<PlusOutlined />}>
- 新增继承转移
- </Button>
- </Form.Item>
- </>
- )}
- </Form.List>
- </div>
- </Card>
- })}
- <Form.Item>
- <Button type="primary" onClick={() => add({ inheritDto: [{ transferType: 'specify' }] })} block icon={<PlusOutlined />}>
- 新增策略组
- </Button>
- </Form.Item>
- </>
- )}
- </Form.List>
- </Form>
- </div>
- </Modal>
- };
- export default SettingsUserInherit;
|