previewMassSendingStrategy.tsx 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import { Card, Form, Input, Radio } from 'antd';
  2. import React, { useEffect } from 'react';
  3. import style from '../../index.less';
  4. import SendTimeSet from '@/pages/weComTask/components/sendTimeSet';
  5. import FilterUser from '@/pages/weComTask/components/filterUser';
  6. import dayjs from 'dayjs';
  7. import '../../global.less'
  8. /**
  9. * 群发预览
  10. * @param param0
  11. * @returns
  12. */
  13. const PreviewMassSendingStrategy: React.FC<{ massSendingStrategy: { [x: string]: any }, configType?: BUSINES_SPLAN_API.ConfigTypeProps }> = ({ massSendingStrategy, configType = 'USER_GROUP' }) => {
  14. /************************************************/
  15. const [form] = Form.useForm();
  16. const strategySettings = Form.useWatch('strategySettings', form);
  17. /************************************************/
  18. useEffect(() => {
  19. if (massSendingStrategy) {
  20. form.setFieldsValue({
  21. ...massSendingStrategy, strategySettings: massSendingStrategy?.strategySettings?.map(item => {
  22. const { sendTime, startTime, endTime, sendDay, timeRepeatType } = item
  23. if (timeRepeatType === 'TIME_TYPE_SINGLE_PLACE') {
  24. const data = {
  25. ...item,
  26. timeRepeatType,
  27. sendDay: sendDay ? dayjs(sendDay + ' ' + sendTime) : undefined
  28. }
  29. delete data?.sendTime
  30. return data
  31. }
  32. return {
  33. ...item,
  34. timeRepeatType,
  35. sendTime: sendTime ? dayjs('2025-04-25 ' + sendTime) : undefined,
  36. startTime: startTime ? dayjs(startTime) : undefined,
  37. endTime: endTime ? dayjs(endTime) : undefined,
  38. sendDay: sendDay ? dayjs(sendDay) : undefined
  39. }
  40. })
  41. })
  42. }
  43. }, [massSendingStrategy])
  44. return <Form
  45. form={form}
  46. name={'newMassSendingShowzs' + configType}
  47. labelAlign='left'
  48. labelCol={{ span: 5 }}
  49. colon={false}
  50. preserve={true}
  51. >
  52. <Card
  53. title={<strong>基础信息配置</strong>}
  54. style={{ background: '#fff', marginBottom: 10 }}
  55. id='basicInfo'
  56. >
  57. <div className='block_tm'>
  58. <Form.Item label={<strong>群发标题</strong>} name="groupSendName">
  59. <Input placeholder="请输入标题" />
  60. </Form.Item>
  61. </div>
  62. </Card>
  63. <Form.List name="strategySettings">
  64. {(fields) => (
  65. <>
  66. {fields.map(({ key, name, ...restField }, index) => {
  67. const timeRepeatType = strategySettings?.[index]?.timeRepeatType
  68. const sendData = strategySettings?.[index]?.sendData
  69. return <Card
  70. key={key}
  71. title={<strong>策略{index + 1}配置</strong>}
  72. style={{ background: '#fff', marginBottom: 10 }}
  73. >
  74. <div className='block_tm'>
  75. <div className={style.strategy_item}>
  76. <Form.Item
  77. {...restField}
  78. label={<strong>策略名称</strong>}
  79. name={[name, 'strategyName']}
  80. >
  81. <Input placeholder="请输入标题" />
  82. </Form.Item>
  83. <SendTimeSet isShow active='all' form={form} restField={restField} name={name} timeRepeatType={timeRepeatType} />
  84. <Form.List name={[name, 'sendData']}>
  85. {(fields) => (
  86. <>
  87. {fields.map(({ key, name, ...restField }, i) => {
  88. return <Card
  89. key={i}
  90. title={<strong>策略{index + 1} 发送对象{i + 1}</strong>}
  91. style={{ background: '#fff', marginBottom: 10 }}
  92. >
  93. <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', width: '100%' }}>
  94. <Form.Item
  95. {...restField}
  96. label={<strong>名称</strong>}
  97. name={[name, 'externalUserFilterName']}
  98. rules={[{ required: true, message: '请输入发送对象名称!' }]}
  99. >
  100. <Input placeholder="请输入发送对象名称" allowClear />
  101. </Form.Item>
  102. <Form.Item
  103. {...restField}
  104. name={[name, 'externalUserType']}
  105. rules={[{ required: true, message: '请选择转移对象!' }]}
  106. noStyle
  107. >
  108. <Radio.Group options={[{ label: '全部', value: 'all' }, { label: '指定', value: 'specify' }]} />
  109. </Form.Item>
  110. {sendData?.[i]?.externalUserType === 'specify' && <div style={{ marginTop: 8, width: '100%' }}>
  111. <Form.Item
  112. {...restField}
  113. name={[name, 'externalUserFilter']}
  114. rules={[{ required: true, message: '请选择人群包!' }]}
  115. noStyle
  116. >
  117. <FilterUser isSHow configType={configType} />
  118. </Form.Item>
  119. </div>}
  120. </div>
  121. </Card>
  122. })}
  123. </>
  124. )}
  125. </Form.List>
  126. </div>
  127. </div>
  128. </Card>
  129. })}
  130. </>
  131. )}
  132. </Form.List>
  133. </Form>
  134. };
  135. export default React.memo(PreviewMassSendingStrategy);