Преглед на файлове

Merge branch 'develop' of http://git.zanxiangnet.com/wjx/ad-manage

wjx преди 2 седмици
родител
ревизия
88387d9230

+ 2 - 6
src/pages/launchSystemNew/components/teamMembers/index.tsx

@@ -22,10 +22,6 @@ const TeamMembers: React.FC<Props> = (props) => {
     const [userId, setUserId] = useState<number | undefined>(userInfo?.userId ? Number(userInfo?.userId) : undefined)
     /*************************/
 
-    // useEffect(() => {
-    //     onChange?.(userId)
-    // }, [userId])
-
     useEffect(() => {
         if (value) {
             setUserId(value)
@@ -35,11 +31,11 @@ const TeamMembers: React.FC<Props> = (props) => {
     /** 获取组员 */
     useEffect(() => {
         (async function () {
-            let res = allOfMember?.data || await allOfMember.run()
+            const res = allOfMember?.data || await allOfMember.run()
             if (res?.data) {
                 let useAll: any = []
                 res?.data?.forEach((item: { key: { userId: number; nickName: any; }; value: any[]; }) => {
-                    let obj = {
+                    const obj: any = {
                         key: item.key.userId,
                         label: item.key.nickName,
                         icon: <IdcardFilled />,

+ 41 - 9
src/pages/launchSystemV3/adqv3/creative/index.tsx

@@ -1,18 +1,19 @@
 import { useAjax } from "@/Hook/useAjax"
 import { delBatchCreativeApi, getDynamicCreativeV3ListApi, syncBatchCreativeApi, updateBatchDynamicCreativesInfoApi } from "@/services/launchAdq/adqv3"
-import { Badge, Button, Col, DatePicker, Form, Input, Modal, Popconfirm, Row, Select, Space, Table, message } from "antd"
+import { Badge, Button, Checkbox, Col, DatePicker, Form, Input, Modal, Popconfirm, Row, Select, Space, Table, Tooltip, message } from "antd"
 import React, { useEffect, useState } from "react"
 import { txDynamicConfig } from "../config"
 import tableConfig from "./tableConfig"
 import TableData from "@/pages/launchSystemNew/components/TableData"
 import ReviewDetails from "./reviewDetails"
-import { DeleteOutlined, PauseCircleOutlined, PlayCircleOutlined } from "@ant-design/icons"
+import { DeleteOutlined, PauseCircleOutlined, PlayCircleOutlined, QuestionCircleOutlined } from "@ant-design/icons"
 import '../../tencentAdPutIn/index.less'
 import HandleLog from "./handleLog"
 import moment from "moment"
 import RetriaModal from "./retriaModal"
 import ReplacePage from "./replacePage"
 import ReplaceGfPage from "./replaceGfPage"
+import { useLocalStorageState } from "ahooks"
 
 /** 审核结果 */
 export const AD_STATUS = {
@@ -22,9 +23,12 @@ export const AD_STATUS = {
     PARTIALLY_NORMAL: <Badge status="warning" text="部分审核通过" />,
 }
 
+let isFist = true
+
 const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, userId }) => {
 
     /*********************************/
+    const [searchParams, setSearchParams] = useLocalStorageState<{ isSaveSearchParams: boolean, queryForm?: any }>('SAVE_CREATIVE_SEARCH_FORM', { isSaveSearchParams: false });
     const [form] = Form.useForm();
     const [dynimicData, setDynamicData] = useState<any>({})
     const [dynimicVisible, setDynamicVisible] = useState<boolean>(false)
@@ -43,11 +47,23 @@ const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, user
     /*********************************/
 
     useEffect(() => {
-        form.setFieldsValue({ adgroupId: queryForm.adgroupId })
-    }, [queryForm.adgroupId])
+        if (queryForm?.adgroupId) {
+            form.setFieldsValue({ adgroupId: queryForm.adgroupId })
+        } else if (searchParams?.isSaveSearchParams && searchParams?.queryForm) {
+            const { beginDate, endDate, ...params } = searchParams.queryForm
+            if (beginDate && endDate) {
+                params.date = [moment(beginDate), moment(endDate)]
+            }
+            form.setFieldsValue(params)
+        }
+
+    }, [queryForm?.adgroupId])
+
+    // queryForm = queryForm.adgroupId ? queryForm : (searchParams?.isSaveSearchParams && searchParams?.queryForm && Object.keys(searchParams?.queryForm).length > 0) ? searchParams?.queryForm : queryForm
 
     useEffect(() => {
-        let params: any = { ...queryForm, userId }
+        const params: any = isFist && (searchParams?.isSaveSearchParams && searchParams?.queryForm && Object.keys(searchParams?.queryForm).length > 0) ? { ...searchParams.queryForm, userId } : { ...queryForm, userId }
+        isFist = false
         if (params?.accountId) {
             params.accountId = params.accountId?.split(/[,,\s\n]+/)
         }
@@ -68,6 +84,9 @@ const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, user
             delete newQueryForm?.beginDate
             delete newQueryForm?.endDate
         }
+        if (searchParams?.isSaveSearchParams) {
+            setSearchParams({ isSaveSearchParams: true, queryForm: newQueryForm })
+        }
         setQueryForm(newQueryForm)
     }
 
@@ -77,7 +96,7 @@ const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, user
     }
 
     const dynamicHandle = (type: '删除' | '启动' | '暂停', data?: any) => {
-        let accountAdgroupMaps = data ? [data.accountId + ',' + data.dynamicCreativeId] : [...new Set(selectedRows?.map(item => item.accountId + ',' + item.dynamicCreativeId))]
+        const accountAdgroupMaps = data ? [data.accountId + ',' + data.dynamicCreativeId] : [...new Set(selectedRows?.map(item => item.accountId + ',' + item.dynamicCreativeId))]
         let hide: any
         if (data) {
             hide = message.loading(`正在设置...`, 0, () => {
@@ -219,7 +238,20 @@ const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, user
                 </Form.Item></Col>
                 <Col><Form.Item style={{ marginRight: 0 }}>
                     <Space>
-                        <Button type="primary" htmlType="submit">搜索</Button>
+                        <Button type="primary" htmlType="submit">
+                            <Space>
+                                <span>搜索</span>
+                                <Checkbox
+                                    checked={searchParams?.isSaveSearchParams}
+                                    onChange={(e) => {
+                                        setSearchParams({ isSaveSearchParams: e.target.checked })
+                                    }}
+                                />
+                                <Tooltip title="勾选搜索长保存搜索条件">
+                                    <QuestionCircleOutlined />
+                                </Tooltip>
+                            </Space>
+                        </Button>
                         <Button onClick={() => {
                             setQueryForm({ pageNum: 1, pageSize: queryForm.pageSize, userId })
                             form.resetFields()
@@ -359,8 +391,8 @@ const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, user
                 }
             }}
             onChange={(props: any) => {
-                let { pagination } = props
-                let { current, pageSize } = pagination
+                const { pagination } = props
+                const { current, pageSize } = pagination
                 setQueryForm({ ...queryForm, pageNum: current, pageSize })
             }}
         />

+ 82 - 4
src/pages/launchSystemV3/adqv3/creative/replaceGfPage.tsx

@@ -1,11 +1,11 @@
 import React, { useEffect, useState } from "react"
 import '../../tencentAdPutIn/index.less'
 import style from '../../components/GoodsModal/index.less'
-import { Button, Checkbox, Input, message, Modal, Select, Space, Table, Typography } from "antd"
+import { Button, Checkbox, Input, message, Modal, Select, Space, Table, Tooltip, Typography } from "antd"
 import { batchUpdateDownloadApi, getAdgroupDetailApi } from "@/services/launchAdq/adqv3";
 import { useAjax } from "@/Hook/useAjax";
 import { getAdqLandingPageOfficialListApi, getWXDownPageAuthInfoListApi } from "@/services/adqV3/global";
-import { CheckOutlined, CloseOutlined, SyncOutlined } from "@ant-design/icons";
+import { CheckOutlined, CloseOutlined, QuestionCircleOutlined, SyncOutlined } from "@ant-design/icons";
 import columns from "../../components/PageModal/tableConfig";
 const { Title, Text } = Typography;
 
@@ -137,8 +137,86 @@ const ReplaceGfPage: React.FC<ReplacePageProps> = ({ selectedRows, visible, onCh
         setSelectAdz(value)
     }
 
+    /** 一键设置 */
+    const setOnekey = () => {
+        let newData: { adgroupId: number, accountId: number, dynamicCreativeId: number, pageLength: number, pageList: any[] }[] = JSON.parse(JSON.stringify(data))
+        function setPageData(pageIndex: number) {
+            const pageList = data[selectAdz - 1]['pageList']
+            const count = pageList.length
+            const curPageData = pageList[pageIndex]
+            const pageName: string = curPageData.pageName
+
+            const hide = message.loading(`正在查找设置《${pageName}》当前第${pageIndex + 1}个...`, 0, () => {
+                message.success('设置成功');
+            });
+            const filterData = newData?.filter(item => item.dynamicCreativeId !== data[selectAdz - 1].dynamicCreativeId)
+            const ajax = filterData?.map(item => {
+                const { marketingGoal, marketingTargetType, marketingCarrierType, siteSet } = adDataInfo[item.adgroupId]
+                const params: any = {
+                    ...queryForm,
+                    accountId: item.accountId,
+                    ownerUid: wXDownPageAuthInfo[item.accountId]?.[0]?.accountId,
+                    pageStatus: 'NORMAL',
+                    marketingGoal,
+                    marketingTargetType,
+                    marketingCarrierType,
+                    siteSet: siteSet ? siteSet : ["SITE_SET_CHANNELS", "SITE_SET_MOMENTS", "SITE_SET_WECHAT", "SITE_SET_WECHAT_PLUGIN", "SITE_SET_KANDIAN", "SITE_SET_QQ_MUSIC_GAME", "SITE_SET_TENCENT_NEWS", "SITE_SET_TENCENT_VIDEO", "SITE_SET_MOBILE_UNION"],
+                    pageType: 'PAGE_TYPE_OFFICIAL',
+                    creativeTemplateId: creativeTemplateId || 311
+                }
+                if (!params.isSqDownPage) {
+                    delete params?.ownerUid
+                }
+                delete params.isSqDownPage
+                return getAdqLandingPageOfficialListApi(params)
+            })
+            Promise.all(ajax).then(res => {
+                if (res && Array.isArray(res)) {
+                    res.forEach((item: any, index) => {
+                        const records = item?.data?.records
+                        if (Array.isArray(records) && records?.length > 0) {
+                            const record = records.find(item => (item.pageName === pageName && item.disableCode === 0))
+                            const filterD = filterData[index]
+                            newData = newData.map(item => {
+                                if (item.accountId.toString() === filterD.accountId.toString() && record) {
+                                    if (pageIndex === 0) {
+                                        return { ...item, pageList: [{ ...record, id: record.pageId }] }
+                                    } else {
+                                        const pageList = item.pageList || []
+                                        pageList.push({ ...record, id: record.pageId })
+                                        return { ...item, pageList }
+                                    }
+                                }
+                                return item
+                            })
+                        }
+                    })
+                    if (count > pageIndex + 1) {
+                        setPageData(pageIndex + 1)
+                    }
+                    if (count === pageIndex + 1) {
+                        setData(newData)
+                    }
+                }
+                message.success('设置完成');
+                hide()
+            })
+        }
+        setPageData(0)
+    }
+
     return <Modal
-        title={<strong>替换官方落地页</strong>}
+        title={<Space>
+            <strong>替换官方落地页</strong>
+            {data?.length > 1 && <Button style={{ padding: 0, margin: 0 }} disabled={!data[selectAdz - 1]['pageList']?.length} onClick={setOnekey} type="link" loading={getAdqLandingPageOfficialList?.loading || loading || loading1}>
+                <Space>
+                    <span style={{ fontSize: 12 }}>一键设置</span>
+                    <Tooltip color="#FFF" overlayInnerStyle={{ color: '#000' }} title="设置其它有相同名称的落地页为那个账号的落地页(需要落地页名称相同,否则不设置,注意只会根据当前条件去搜索,比如选择了被授权落地页,只会去被授权落地页里找对应落地页)">
+                        <QuestionCircleOutlined />
+                    </Tooltip>
+                </Space>
+            </Button>}
+        </Space>}
         open={visible}
         onCancel={onClose}
         onOk={handleOk}
@@ -291,7 +369,7 @@ const ReplaceGfPage: React.FC<ReplacePageProps> = ({ selectedRows, visible, onCh
                 />
             </div>
             <div className={style.center}>
-                <Title level={5}>已选:{data[selectAdz - 1]?.pageList?.length || 0}/{data[selectAdz-1].pageLength}</Title>
+                <Title level={5}>已选:{data[selectAdz - 1]?.pageList?.length || 0}/{data[selectAdz - 1].pageLength}</Title>
                 <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>

+ 1 - 1
src/pages/launchSystemV3/tencenTasset/enterpriseWechat/userInfo.tsx

@@ -27,7 +27,7 @@ const UserInfo: React.FC<{ createTime: string, groupMemberCnt: number, userInfoL
             className='modalResetCss'
         >
             <p>创建时间:{createTime}</p>
-            <p>客服认识:{groupMemberCnt}</p>
+            <p>客服人数:{groupMemberCnt}</p>
             <div style={{ display: 'flex' }}>
                 <p>已选客服:</p>
                 <div>{userInfoList.map(item => {

+ 1 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/Dynamic/newDynamic.tsx

@@ -287,7 +287,7 @@ const NewDynamic: React.FC<Props> = ({ putInType, value: newValue, visible, onCl
                             value: {
                                 buttonText: butttonTextEnumeration?.[0]?.value,
                                 jumpInfo: {
-                                    pageType: marketingAssetOuterSpec?.marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' ? "PAGE_TYPE_WECHAT_MINI_GAME" : 'PAGE_TYPE_WECHAT_CANVAS'
+                                    pageType: marketingAssetOuterSpec?.marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' ? "PAGE_TYPE_WECHAT_MINI_GAME" : 'PAGE_TYPE_OFFICIAL'
                                 }
                             }
                         }