import New1Radio from "@/pages/launchSystemV3/components/New1Radio" import TextAideInput from "@/pages/launchSystemV3/components/TextAideInput" import { txtLength } from "@/utils/utils" import { Button, Card, Form, Modal, Popconfirm, Space, message } from "antd" import React, { useEffect, useState } from "react" import { TextTypeList } from "../../const" import { MinusCircleOutlined, PlusOutlined } from "@ant-design/icons" interface Props { textData: any, dynamicMaterialDTos: any, value?: any, visible?: boolean onClose?: () => void onChange?: (value: any) => void } /** * 创意文案 * @param param0 * @returns */ const NewText: React.FC = ({ visible, onClose, onChange, value, textData, dynamicMaterialDTos }) => { /*************************************/ const [form] = Form.useForm(); const type = Form.useWatch('type', form) const textDto = Form.useWatch('textDto', form) const [textList, setTextList] = useState([]) /*************************************/ const handleOk = (values: any) => { console.log(values) const { type, textDto } = values onChange?.({ type, dynamicCreativesTextDetailDTOList: textDto.map((item: any) => { let data: any = {} Object.keys(item).forEach(key => { data[key] = [item[key]] }) return data }) }) } useEffect(() => { console.log('创意文案--->', value) if (value && Object.keys(value).length) { const { type, dynamicCreativesTextDetailDTOList } = value form.setFieldsValue({ type, textDto: dynamicCreativesTextDetailDTOList.map((item: any) => { let data: any = {} Object.keys(item).forEach(key => { data[key] = item[key]?.[0] }) return data }) }) } }, [value]) useEffect(() => { if (textData && Object.keys(textData)) { let data = Object.values(textData).map((item: any) => { let content = item.children.content return { label: content.description, restriction: content.restriction, value: item.name, required: item.required } }) setTextList(data) } }, [textData]) return 创意文案} visible={visible} onCancel={onClose} footer={null} width={800} className={`modalResetCss`} bodyStyle={{ padding: '0 0 40px', position: 'relative', borderRadius: '0 0 8px 8px' }} maskClosable={false} >
{ message.error(errorFields?.[0]?.errors?.[0]) }} initialValues={{ type: 0, textDto: [{}] }} onFinish={handleOk} > 文案分配规则} style={{ marginBottom: 0 }} rules={[{ required: true, message: '请选择营销目的!' }]}> { let count = dynamicMaterialDTos.dynamicGroup.length let oldtextDto: PULLIN.TextDtoProps[] = JSON.parse(JSON.stringify(textDto)) let length = oldtextDto.length if (value === 0) { oldtextDto = [textDto[0] || {}] } else if (value === 1) { if (count > length) { oldtextDto = oldtextDto.concat(Array(count - length).fill({})) } else { oldtextDto = oldtextDto.slice(0, count) } } else if (value === 2) { if (count < length) { oldtextDto = oldtextDto.slice(0, count) } } form.setFieldsValue({ textDto: oldtextDto }) }} /> {(fields, { add, remove }) => (<> {fields.map(({ key, name, ...restField }, num) => ( 创意组{num + 1} : type === 0 ? null : 文案组{num + 1}} className="cardResetCss" style={{ marginTop: 10 }} key={key} > {textList.map(item => { return {item.label}} name={[name, item.value]} key={key} style={{ marginBottom: 0 }} rules={[{ required: item.required, message: '请输入正确的' + item.label, validator: (rule, value) => { if (!value) { return Promise.reject() } else if (!value.match(RegExp(item.restriction.textRestriction.textPattern))) { return Promise.reject() } else if (txtLength(value) > item.restriction.textRestriction.maxLength) { return Promise.reject() } return Promise.resolve() } }]} > })} {([3,2].includes(type) && textDto?.length > 1) && remove(name)} > } ))} {[3,2].includes(type) && !(type === 2 && textDto.length >= dynamicMaterialDTos.dynamicGroup.length) && } )}
} export default React.memo(NewText)