wjx 9 месяцев назад
Родитель
Сommit
41f311393c

+ 1 - 1
src/pages/launchSystemV3/components/GoodsModal/index.less

@@ -82,7 +82,7 @@
             box-sizing: border-box;
 
             .select_content {
-                height: calc(100% - 28px);
+                height: calc(500 - 28px);
                 overflow: hidden;
                 overflow-y: auto;
 

+ 45 - 9
src/pages/launchSystemV3/components/PageModal/index.tsx

@@ -118,11 +118,11 @@ const PageModal: React.FC<Props> = (props) => {
     }
 
     /** 表格选折 */
-    const onChangeTable = (_: React.Key[], selectedRows: any) => {
-        let newData = JSON.parse(JSON.stringify(data))
-        newData[selectAdz - 1]['pageList'] = selectedRows
-        setData([...newData])
-    }
+    // const onChangeTable = (_: React.Key[], selectedRows: any) => {
+    //     let newData = JSON.parse(JSON.stringify(data))
+    //     newData[selectAdz - 1]['pageList'] = selectedRows
+    //     setData([...newData])
+    // }
 
     /** 一键设置 */
     const setOnekey = () => {
@@ -278,7 +278,7 @@ const PageModal: React.FC<Props> = (props) => {
                                 } else {
                                     return {
                                         disabled: false
-                                    } 
+                                    }
                                 }
                             }
                             /**
@@ -326,14 +326,50 @@ const PageModal: React.FC<Props> = (props) => {
                             }
                         },
                         selectedRowKeys: data[selectAdz - 1]?.pageList?.map((item: any) => item?.pageId),
-                        onChange: onChangeTable,
-                        hideSelectAll: deliveryMode === "DELIVERY_MODE_COMPONENT"
+                        // onChange: onChangeTable,
+                        hideSelectAll: deliveryMode === "DELIVERY_MODE_COMPONENT",
+                        onSelect: (record: any, selected: boolean) => {
+                            let newData = JSON.parse(JSON.stringify(data))
+                            let selectedRows = newData?.[selectAdz - 1]?.['pageList'] || []
+                            if (selected) {
+                                selectedRows.push({ ...record })
+                                newData[selectAdz - 1]['pageList'] = selectedRows
+                            } else {
+                                newData[selectAdz - 1]['pageList'] = selectedRows.filter((item: { pageId: number }) => item.pageId !== record.pageId)
+                            }
+                            setData([...newData])
+                        },
+                        onSelectAll: (selected: boolean, _: any[], changeRows: { pageId: number }[]) => {
+                            let newData = JSON.parse(JSON.stringify(data))
+                            let selectedRows = newData?.[selectAdz - 1]?.['pageList'] || []
+                            if (selected) {
+                                let newSelectAccData = [...selectedRows]
+                                changeRows.forEach((item: { pageId: number }) => {
+                                    let index = newSelectAccData.findIndex((ite: { pageId: number }) => ite.pageId === item.pageId)
+                                    if (index === -1) {
+                                        let data: any = { ...item }
+                                        newSelectAccData.push(data)
+                                    }
+                                })
+                                newData[selectAdz - 1]['pageList'] = newSelectAccData
+                            } else {
+                                newData[selectAdz - 1]['pageList'] = selectedRows.filter((item: { pageId: number }) => {
+                                    let index = changeRows.findIndex((ite: { pageId: number }) => ite.pageId === item.pageId)
+                                    if (index !== -1) {
+                                        return false
+                                    } else {
+                                        return true
+                                    }
+                                })
+                            }
+                            setData([...newData])
+                        }
                     }}
                 />
             </div>
             <div className={style.center}>
                 <Title level={5}>已选:{data[selectAdz - 1]?.pageList?.length || 0}</Title>
-                <div className={style.select_content}>
+                <div className={style.select_content} style={{ height: 416 }}>
                     {data[selectAdz - 1]?.pageList?.map((item: any) => <div key={item.pageId}>
                         <Text ellipsis={{ tooltip: true }} className={style.marketingAssetName}>{item.pageName}</Text>
                         <CloseOutlined className={style.close} onClick={() => {

+ 45 - 0
src/pages/launchSystemV3/tencentAdPutIn/create/MaterialText/addTextS.tsx

@@ -0,0 +1,45 @@
+import { Input, Modal, message } from "antd"
+import React, { useState } from "react"
+
+interface Props {
+    title?: string
+    visible?: boolean
+    onClose?: () => void
+    onChange?: (value: string) => void
+}
+/**
+ * 批量添加文案
+ * @returns 
+ */
+const AddTextS: React.FC<Props> = ({ title, visible, onClose, onChange }) => {
+
+    /*****************************************/
+    const [text, setText] = useState<string>()
+    /*****************************************/
+
+    const handleOk = () => {
+        if (text) {
+            onChange?.(text)
+        } else
+            message.error('请输入')
+    }
+
+    return <Modal
+        title={<strong>批量添加{title || '文案'}</strong>}
+        visible={visible}
+        onCancel={onClose}
+        onOk={handleOk}
+        className={`modalResetCss`}
+        width={650}
+    >
+        <Input.TextArea
+            placeholder={`请输入${title || '文案'},多个换行`}
+            value={text}
+            onChange={(e) => setText(e.target.value)}
+            allowClear
+            rows={10}
+        />
+    </Modal>
+}
+
+export default React.memo(AddTextS)

+ 1 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/MaterialText/index.tsx

@@ -34,7 +34,7 @@ const MaterialText: React.FC = () => {
 
     return <div className={`${style.settingsBody_content_row} ${style.row5}`}>
         <div className={style.title}>
-            <span>创意文案</span>
+            <span>创意文案 <span className={style.selected}>已选 {dynamicCreativesTextDTOS?.dynamicCreativesTextDetailDTOList?.length || 0}</span></span>
             {(dynamicCreativesTextDTOS && Object.keys(dynamicCreativesTextDTOS).length > 0) ? <Button type="link" size="small" style={{ fontSize: 11, padding: 0 }} onClick={() => setAddelivery({ ...addelivery, dynamicCreativesTextDTOS: {} })}><RedoOutlined />清空</Button> : null}
         </div>
         <div className={style.detail}>

+ 94 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/MaterialText/newText.tsx

@@ -4,6 +4,7 @@ import { Button, Card, Form, Modal, Popconfirm, Radio, Space, message } from "an
 import React, { useEffect, useState } from "react"
 import { TextTypeList } from "../../const"
 import { DeleteOutlined, PlusOutlined } from "@ant-design/icons"
+import AddTextS from "./addTextS"
 
 
 interface Props {
@@ -29,6 +30,8 @@ const NewText: React.FC<Props> = ({ visible, onClose, onChange, value, textData,
     const textDto = Form.useWatch('textDto', form)
 
     const [textList, setTextList] = useState<PULLIN.TextDtoProps[]>([])
+    const [desVisible, setDesVisible] = useState<boolean>(false)
+    const [addSTitle, setAddStitle] = useState<string>()
     /*************************************/
 
     const handleOk = (values: any) => {
@@ -72,7 +75,13 @@ const NewText: React.FC<Props> = ({ visible, onClose, onChange, value, textData,
     }, [textData])
 
     return <Modal
-        title={<strong style={{ fontSize: 20 }}>创意文案</strong>}
+        title={<Space>
+            <strong style={{ fontSize: 20 }}>创意文案</strong>
+            {type !== 0 && <>
+                {textList.some(item => item.value === "description") && <a style={{ fontSize: 12 }} onClick={() => { setDesVisible(true); setAddStitle(textList.find(item => item.value === "description")?.label) }}>批量添加{textList.find(item => item.value === "description")?.label}</a>}
+                {textList.some(item => item.value === "title") && <a style={{ fontSize: 12 }} onClick={() => { setDesVisible(true); setAddStitle(textList.find(item => item.value === "description")?.label) }}>批量添加{textList.find(item => item.value === "description")?.label}</a>}
+            </>}
+        </Space>}
         visible={visible}
         onCancel={onClose}
         footer={null}
@@ -186,6 +195,90 @@ const NewText: React.FC<Props> = ({ visible, onClose, onChange, value, textData,
                 </Space>
             </Form.Item>
         </Form>
+
+        {/* 批量添加 */}
+        {desVisible && <AddTextS
+            visible={desVisible}
+            title={addSTitle}
+            onClose={() => {
+                setDesVisible(false)
+                setAddStitle(undefined)
+            }}
+            onChange={(value) => {
+                if (value) {
+                    let valList = value
+                        .split(/\r?\n/)        // 按换行符分割字符串
+                        .map(line => line.trim()) // 去除每行的首尾空白
+                        .filter(line => line !== ''); // 过滤掉空行
+                    let fieldData = textList.find(item => item.label === addSTitle)
+                    console.log(valList, textDto, fieldData)
+                    let count = dynamicMaterialDTos.dynamicGroup.length
+                    if (type === 1) {
+                        let len = 0
+                        const newTextDto = textDto.map((item: { [x: string]: any }) => {
+                            if (fieldData?.value && !item?.[fieldData?.value] && valList.length >= len + 1) {
+                                return { ...item, [fieldData.value]: valList[len++] }
+                            }
+                            return item
+                        })
+                        form.setFieldsValue({
+                            textDto: newTextDto
+                        })
+                    } else if (type === 2) {
+                        let len = 0
+                        const newTextDto = textDto.map((item: { [x: string]: any }) => {
+                            if (fieldData?.value && !item?.[fieldData?.value] && valList.length >= len + 1) {
+                                return { ...item, [fieldData.value]: valList[len++] }
+                            }
+                            return item
+                        })
+                        let diffTextDto: any[] = []
+                        if (newTextDto.length < count && len < valList.length) {
+                            let diffCount = count - newTextDto.length
+                            let diffTextCount = valList.length - len
+                            let diff = 0
+                            if (diffCount >= diffTextCount) {
+                                diff = diffTextCount
+                            } else {
+                                diff = diffCount
+                            }
+                            diffTextDto = Array(diff).fill('').map((item: { [x: string]: any }) => {
+                                if (fieldData?.value) {
+                                    return { ...item, [fieldData.value]: valList[len++] }
+                                }
+                                return item
+                            })
+                        }
+                        form.setFieldsValue({
+                            textDto: [...newTextDto, ...diffTextDto]
+                        })
+                    } else if ([3, 4].includes(type)) {
+                        let len = 0
+                        const newTextDto = textDto.map((item: { [x: string]: any }) => {
+                            if (fieldData?.value && !item?.[fieldData?.value] && valList.length >= len + 1) {
+                                return { ...item, [fieldData.value]: valList[len++] }
+                            }
+                            return item
+                        })
+                        let diffTextDto: any[] = []
+                        if (len < valList.length) {
+                            let diff = valList.length - len
+                            diffTextDto = Array(diff).fill('').map((item: { [x: string]: any }) => {
+                                if (fieldData?.value) {
+                                    return { ...item, [fieldData.value]: valList[len++] }
+                                }
+                                return item
+                            })
+                        }
+                        form.setFieldsValue({
+                            textDto: [...newTextDto, ...diffTextDto]
+                        })
+                    }
+                }
+                setDesVisible(false)
+                setAddStitle(undefined)
+            }}
+        />}
     </Modal>
 }
 

+ 1 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/Target/generateTarget.tsx

@@ -167,7 +167,7 @@ const GenerateTarget: React.FC<Props> = ({ target, visible, onChange, onClose })
                         { required: true, message: '请输入生成数量' }
                     ]}
                 >
-                    <InputNumber max={10} style={{ width: '100%' }} placeholder="请输入生成数量" />
+                    <InputNumber max={20} style={{ width: '100%' }} placeholder="请输入生成数量" />
                 </Form.Item>
             </Card>
             <Form.Item className="submit_pull">