wjx 3 天之前
父节点
当前提交
f02bea628b

+ 10 - 1
src/pages/weComTask/components/filterUser/filterUserText.ts

@@ -16,6 +16,7 @@ const targetingData = [
     { key: 'rechargeMoneyMax', name: '单笔最大充值金额' },
     { key: 'subHour', name: '关注距今时间' },
     { key: 'subDay', name: '关注距今天' },
+    { key: 'lastRechargeHour', name: '最近充值时间距今(小时)' },
     { key: 'opers', name: '手机系统' }
 ]
 
@@ -66,6 +67,10 @@ interface ContentProps {
         subDayMin?: number
         subDayMax?: number
     },
+    lastRechargeHour?: {          // 充值距今
+        lastRechargeHourMin?: number
+        lastRechargeHourMax?: number
+    },
     opers?: string[]   // 手机系统
     // 群
     groupChatNames?: string,
@@ -88,7 +93,7 @@ export const resetFilterUserData = (data: { [x: string]: any }): ContentProps =>
     const {
         beginTime, endTime, rechargeCountMin, rechargeCountMax, rechargeMoneyMin, rechargeMoneyMax, lastRechargeTimeMin, lastRechargeTimeMax,
         firstRechargeMoneyMin, firstRechargeMoneyMax, rechargeMoneyMaxMin, rechargeMoneyMaxMax, subHourMin, subHourMax, subDayMin, subDayMax, 
-        groupChatNames, groupChatBeginTime, groupChatEndTime, groupChatHourMin, groupChatHourMax, groupChatUserMin, groupChatUserMax,
+        lastRechargeHourMin, lastRechargeHourMax,groupChatNames, groupChatBeginTime, groupChatEndTime, groupChatHourMin, groupChatHourMax, groupChatUserMin, groupChatUserMax,
         ...params
     } = data
 
@@ -117,6 +122,9 @@ export const resetFilterUserData = (data: { [x: string]: any }): ContentProps =>
     if (subDayMin || subDayMax) {
         newData.subDay = { subDayMin, subDayMax }
     }
+    if (lastRechargeHourMin || lastRechargeHourMax) {
+        newData.lastRechargeHour = { lastRechargeHourMin, lastRechargeHourMax }
+    }
     if (groupChatNames?.length) {
         newData.groupChatNames = groupChatNames.join('、')
     }
@@ -176,6 +184,7 @@ const FilterUserText = ({ data, configName, configType = 'USER_GROUP', bookCityL
     (content?.rechargeMoneyMax ? `单笔最大充值金额:${content?.rechargeMoneyMax?.rechargeMoneyMaxMin ? content?.rechargeMoneyMax?.rechargeMoneyMaxMin : '不限'} - ${content?.rechargeMoneyMax?.rechargeMoneyMaxMax ? content?.rechargeMoneyMax?.rechargeMoneyMaxMax : '不限'}\n` : '') +
     (content?.subHour ? `关注距今时间:${content?.subHour?.subHourMin ? content?.subHour?.subHourMin + '小时' : '不限'} - ${content?.subHour?.subHourMax ? content?.subHour?.subHourMax + '小时' : '不限'}\n` : '') +
     (content?.subDay ? `关注距今天:${content?.subDay?.subDayMin ? content?.subDay?.subDayMin + '天' : '不限'} - ${content?.subDay?.subDayMax ? content?.subDay?.subDayMax + '天' : '不限'}\n` : '') +
+    (content?.lastRechargeHour ? `关注距今天:${content?.lastRechargeHour?.lastRechargeHourMin ? content?.lastRechargeHour?.lastRechargeHourMin + '天' : '不限'} - ${content?.lastRechargeHour?.lastRechargeHourMax ? content?.lastRechargeHour?.lastRechargeHourMax + '小时' : '不限'}\n` : '') +
     (content?.opers?.length > 0 ? `手机系统:${content?.opers.map(g => ({ '0': '未知', '1': '安卓', '2': 'IOS' } as any)[g]).join('、')}\n` : '') +
     (content?.groupChatNames ? `群名称列表:${content?.groupChatNames?.toString()}` : '') +
     (content?.groupChatTime ? `群创建时间:${content?.groupChatTime?.groupChatBeginTime ? content?.groupChatTime?.groupChatBeginTime + '小时' : '不限'} - ${content?.groupChatTime?.groupChatEndTime ? content?.groupChatTime?.groupChatEndTime + '小时' : '不限'}\n` : '') +

+ 12 - 3
src/pages/weComTask/components/filterUser/filterUserTooltip.tsx

@@ -1,8 +1,6 @@
 import React, { useEffect, useState } from "react"
 import './global.less'
 import { businessPlanData, GENDER_TYPE } from "../../page/businessPlan/create/const"
-import { useAjax } from "@/Hook/useAjax"
-import { getAllBookApi, getBookPlatInfoAllApi } from "../../API/global"
 import weComTaskStore from '@/pages/weComTask/store'
 import { toJS } from 'mobx';
 
@@ -21,6 +19,7 @@ const targetingData = [
     { key: 'rechargeMoneyMax', name: '单笔最大充值金额' },
     { key: 'subHour', name: '关注距今时间' },
     { key: 'subDay', name: '关注距今天' },
+    { key: 'lastRechargeHour', name: '最近充值时间距今(小时)' },
     { key: 'opers', name: '手机系统' }
 ]
 
@@ -76,6 +75,10 @@ interface ContentProps {
         subDayMin?: number
         subDayMax?: number
     },
+    lastRechargeHour?: {  // 最近一次充值距今
+        lastRechargeHourMin?: number,
+        lastRechargeHourMax?: number
+    },
     opers?: string[]   // 手机系统
     // 群
     groupChatNames?: string,
@@ -98,7 +101,7 @@ export const resetFilterUserData = (data: { [x: string]: any }): ContentProps =>
     const {
         beginTime, endTime, rechargeCountMin, rechargeCountMax, rechargeMoneyMin, rechargeMoneyMax, lastRechargeTimeMin, lastRechargeTimeMax,
         firstRechargeMoneyMin, firstRechargeMoneyMax, rechargeMoneyMaxMin, rechargeMoneyMaxMax, subHourMin, subHourMax, subDayMin, subDayMax,
-        groupChatNames, groupChatBeginTime, groupChatEndTime, groupChatHourMin, groupChatHourMax, groupChatUserMin, groupChatUserMax,
+        lastRechargeHourMin, lastRechargeHourMax, groupChatNames, groupChatBeginTime, groupChatEndTime, groupChatHourMin, groupChatHourMax, groupChatUserMin, groupChatUserMax,
         ...params
     } = data
 
@@ -127,6 +130,9 @@ export const resetFilterUserData = (data: { [x: string]: any }): ContentProps =>
     if (subDayMin || subDayMax) {
         newData.subDay = { subDayMin, subDayMax }
     }
+    if (lastRechargeHourMin || lastRechargeHourMax) {
+        newData.lastRechargeHour = { lastRechargeHourMin, lastRechargeHourMax }
+    }
     if (groupChatNames?.length) {
         newData.groupChatNames = groupChatNames.join('、')
     }
@@ -228,6 +234,9 @@ const FilterUserTooltip: React.FC<Props> = (props) => {
         {content?.subDay && <div>
             <strong>关注距今天:</strong><span>{content?.subDay?.subDayMin ? content?.subDay?.subDayMin + '天' : '不限'} - {content?.subDay?.subDayMax ? content?.subDay?.subDayMax + '天' : '不限'}</span>
         </div>}
+        {content?.lastRechargeHour && <div>
+            <strong>最近一次充值距今(小时):</strong><span>{content?.lastRechargeHour?.lastRechargeHourMin ? content?.lastRechargeHour?.lastRechargeHourMin + '天' : '不限'} - {content?.lastRechargeHour?.lastRechargeHourMax ? content?.lastRechargeHour?.lastRechargeHourMax + '小时' : '不限'}</span>
+        </div>}
         {content?.opers?.length > 0 && <div>
             <strong>手机系统:</strong><span>{content?.opers.map(g => ({ '0': '未知', '1': '安卓', '2': 'IOS' } as any)[g]).toString()}</span>
         </div>}

+ 13 - 0
src/pages/weComTask/components/filterUser/newFiterUser.tsx

@@ -377,6 +377,19 @@ const NewFilterUser: React.FC<NewFilterUserProps> = ({ bookCityList, configType
                         </Space>
                     </Form.Item>
                 </div>
+                <div className={style.newSpace}>
+                    <Form.Item label={<strong>最近一次充值距今(小时)</strong>} style={{ marginBottom: 0 }}>
+                        <Space>
+                            <Form.Item name="lastRechargeHourMin" noStyle>
+                                <InputNumber placeholder="最小充值距今" style={{ width: 150 }} />
+                            </Form.Item>
+                            <span>-</span>
+                            <Form.Item name="lastRechargeHourMax" noStyle>
+                                <InputNumber placeholder="最大充值距今" style={{ width: 150 }} />
+                            </Form.Item>
+                        </Space>
+                    </Form.Item>
+                </div>
                 <div className={style.newSpace}>
                     <Form.Item name="opers" label={<strong>手机系统</strong>} style={{ marginBottom: 0 }}>
                         <Select

+ 6 - 17
src/pages/weComTask/page/bookLink/SelectBookLinkButton.tsx

@@ -1,31 +1,21 @@
 import React, { useState } from 'react';
-import { Button, Input } from 'antd';
+import { Button } from 'antd';
 import SelectBookLink from './selectBookLink';
 
 interface SelectBookLinkButtonProps {
     mpAccountId: number | null
     bookPlatForm: TASK_CREATE.BookPlatFormProps[]
     linkData: { [x: string]: any }[]
-    onChange: (linkStr: string) => void
+    onChange: (linkStr: string, miniprogramAppid?: string, miniprogramPage?: string) => void
 }
 
 const SelectBookLinkButton: React.FC<SelectBookLinkButtonProps> = ({ mpAccountId, bookPlatForm, linkData, onChange }) => {
 
     /********************************/
     const [visible, setVisible] = useState<boolean>(false)
-    const [linkStr, setLinkStr] = useState<string>()
     /********************************/
 
-    return <div style={{ display: 'flex', gap: 4, alignItems: 'flex-end' }}>
-        <Input.TextArea
-            placeholder="请输入链接"
-            allowClear
-            value={linkStr}
-            onChange={e => {
-                setLinkStr(e.target.value)
-                onChange(e.target.value)
-            }}
-        />
+    return <>
         <Button type="link" style={{ padding: 0 }} onClick={() => setVisible(true)}>
             选择链接
         </Button>
@@ -35,14 +25,13 @@ const SelectBookLinkButton: React.FC<SelectBookLinkButtonProps> = ({ mpAccountId
             visible={visible}
             linkData={linkData}
             onClose={() => setVisible(false)}
-            onChange={(linkStr) => {
+            onChange={(linkStr, miniprogramAppid, miniprogramPage) => {
                 console.log('linkStr', linkStr)
-                setLinkStr(linkStr)
-                onChange(linkStr)
+                onChange(linkStr, miniprogramAppid, miniprogramPage)
                 setVisible(false)
             }}
         />}
-    </div>
+    </>
 };
 
 export default SelectBookLinkButton;

+ 1 - 0
src/pages/weComTask/page/bookLink/bookPromoLinkCreateDTO.tsx

@@ -80,6 +80,7 @@ const BookPromoLinkCreateDTO: React.FC<Props> = ({ restField, name, yueWenCreate
             {...restField}
             name={[name, 'bookPromoLinkCreateDTO', 'forceChapter']}
             label={<strong>强关章节序号</strong>}
+            rules={[{ required: true, message: '请输入强关章节序号!' }]}
         >
             <InputNumber placeholder="请输入强关章节序号" style={{ width: '100%' }} />
         </Form.Item>

+ 1 - 1
src/pages/weComTask/page/bookLink/modalBooklink.tsx

@@ -173,7 +173,7 @@ const ModalBookLink: React.FC<Props> = ({ mpList, bookPlatForm, visible, onChang
                                                             yueWenCreateLinkDTOList: yueWenCreateLinkDTOList.map((item, i) => {
                                                                 if (index === i) {
                                                                     const { channelName, channelType } = item
-                                                                    return { channelName, channelType, linkType: '2', bookPromoLinkCreateDTO: { forceStyle: 1, isOpenBottom: false } }
+                                                                    return { channelName, channelType, linkType: '2', bookPromoLinkCreateDTO: { forceStyle: 1, isOpenBottom: false, forceChapter: 0 } }
                                                                 }
                                                                 return item
                                                             })

+ 9 - 5
src/pages/weComTask/page/bookLink/selectBookLink.tsx

@@ -7,7 +7,7 @@ import { getBindMpListApi } from "../../API/corpUserAssign";
 import { LINKTYPE } from "./const";
 const { Text, Title } = Typography;
 import dayJs from 'dayjs';
-import { SearchOutlined, CloseOutlined } from '@ant-design/icons'
+import { SearchOutlined, CloseOutlined, CheckOutlined } from '@ant-design/icons'
 import { bookLinkTableConfig } from "./tableConfig";
 
 interface Props {
@@ -16,7 +16,7 @@ interface Props {
     mpAccountId: number | null
     visible?: boolean;
     onClose?: () => void;
-    onChange?: (linkStr: string) => void;
+    onChange?: (linkStr: string, miniprogramAppid?: string, miniprogramPage?: string) => void;
 }
 
 /**
@@ -50,7 +50,10 @@ const SelectBookLink: React.FC<Props> = ({ bookPlatForm, linkData, mpAccountId,
 
     const handleOk = () => {
         if (data?.every(item => item?.bookLink?.length)) {
-            onChange?.(data.map(item => item.bookLink?.[0].link).join(','))
+            const linkStr = data.map(item => item.bookLink?.[0].link).join(',')
+            const miniprogramAppid = data?.[0]?.bookLink?.[0]?.miniappId
+            const miniprogramPage = data?.[0]?.bookLink?.[0]?.miniappPagePath
+            onChange?.(linkStr, miniprogramAppid, miniprogramPage)
         } else {
             message.error('请选择链接')
         }
@@ -81,9 +84,10 @@ const SelectBookLink: React.FC<Props> = ({ bookPlatForm, linkData, mpAccountId,
                 <h4 className={style.title}>链接</h4>
                 <div className={style.accountIdList}>
                     {data?.map((item, index) => {
+                        const bookLink = item?.bookLink
                         return <div key={index} onClick={() => { handleSelectAdz(index + 1) }} className={`${style.accItem} ${selectAdz === index + 1 && style.select} `}>
-                            <div><Text ellipsis={{ tooltip: true }}>{item?.link?.title}({item?.link?.desc})</Text></div>
-                            {/* {bookLink?.length > 0 && <CheckOutlined style={{ color: '#1890ff' }} />} */}
+                            <div><Text ellipsis={{ tooltip: true }}>{item?.link?.title}{item?.link?.desc ? `${item?.link?.desc})` : ''}</Text></div>
+                            {bookLink?.length > 0 && <CheckOutlined style={{ color: '#1890ff' }} />}
                         </div>
                     })}
                 </div>

+ 20 - 0
src/pages/weComTask/page/bookLink/tableConfig.tsx

@@ -71,6 +71,26 @@ export function bookLinkTableConfig(): ColumnsType<any> {
                 return value ? <a style={{ fontSize: 12 }} onClick={() => copy(value)}>{value}</a> : '--'
             }
         },
+        {
+            title: '小程序原始ID',
+            dataIndex: 'miniappId',
+            key: 'miniappId',
+            width: 80,
+            ellipsis: true,
+            render: (value) => {
+                return value ? <a style={{ fontSize: 12 }} onClick={() => copy(value)}>{value}</a> : '--'
+            }
+        },
+        {
+            title: '小程序链接',
+            dataIndex: 'miniappPagePath',
+            key: 'miniappPagePath',
+            width: 200,
+            ellipsis: true,
+            render: (value) => {
+                return value ? <a style={{ fontSize: 12 }} onClick={() => copy(value)}>{value}</a> : '--'
+            }
+        },
         {
             title: '创建人',
             dataIndex: 'createBy',

+ 9 - 9
src/pages/weComTask/page/businessPlan/create/index.tsx

@@ -39,7 +39,7 @@ const Create: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookLis
     const [subVisible, setSubVisible] = useState<boolean>(false) // 选择设置名称弹窗控制
     const [eaVisible, setEaVisible] = useState<boolean>(false)
     const [qwVisible, setQwVisible] = useState<boolean>(false)
-    const [previewContent, setPreviewContent] = useState<{ groupMsgContent?: any[], welcomeMsgContent?: any[], externalUserTransferContent?: any[], }>({})
+    const [previewContent, setPreviewContent] = useState<{ groupMsgContent?: any[], welcomeMsgContent?: any[], externalUserTransferContent?: any[] }>({})
 
     const welcomeMsgJobType = useAjax(() => welcomeMsgJobTypeApi())//获取欢迎语类型
 
@@ -76,14 +76,14 @@ const Create: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookLis
             if (!settings?.corpUserGroups?.every((item, i) => {
                 return settings?.welcomeMsgTemplateDTO?.mediaContentList?.every((mediaItem, index, row) => {
                     const linkData = []
-                    let isMiniProgram = false
+                    const miniProgramData = []
                     const contentReactNode = mediaItem.map(item => {
                         switch (item.mediaType) {
                             case 'link':
                                 linkData.push(item)
                                 return `<span style="color: red">链接</span>`
                             case 'miniprogram':
-                                isMiniProgram = true
+                                miniProgramData.push(item)
                                 return `<span style="color: red">小程序</span>`
                             case 'file':
                                 return `<span>文件</span>`
@@ -105,7 +105,7 @@ const Create: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookLis
                         corpUserGroupName: `客服组${i + 1}`,
                         corpUserList: item.corpUsers,
                         linkData,
-                        isMiniProgram,
+                        miniProgramData,
                         contentIndex: index + 1,
                         bizType: settings?.bizType,
                         channel: settings?.channel,
@@ -141,14 +141,14 @@ const Create: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookLis
                         })
                     }
                     const linkData = []
-                    let isMiniProgram = false
+                    const miniProgramData = []
                     const contentReactNode = mediaItem.map(item => {
                         switch (item.msgType) {
                             case 'TASK_CONTENT_LINK':
                                 linkData.push(item)
                                 return `<span style="color: red">链接</span>`
                             case 'TASK_STATUS_MINIPROGRAM':
-                                isMiniProgram = true
+                                miniProgramData.push(item)
                                 return `<span style="color: red">小程序</span>`
                             case 'TASK_STATUS_FILE':
                                 return `<span>文件</span>`
@@ -175,7 +175,7 @@ const Create: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookLis
                         templateProductId: settings?.templateProductId,
                         id: i * row.length + (li + 1),
                         linkData,
-                        isMiniProgram,
+                        miniProgramData,
                         userRowSpan: li % row.length === 0 ? row.length : 0,
                         strategyRowSpan: strategyIndex !== dataItem.strategyIndex ? dataItem.strategyDataCount : 0
                     })
@@ -944,7 +944,7 @@ const Create: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookLis
                         </> : key === 'massSending' ? <>
                             <Table
                                 dataSource={previewData[key]}
-                                columns={massSendingColumns(setContent, bookPlatForm)}
+                                columns={massSendingColumns(setContent, bookPlatForm, previewContent)}
                                 rowKey={'id'}
                                 bordered={true}
                                 scroll={{ y: 550 }}
@@ -953,7 +953,7 @@ const Create: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookLis
                         </> : key === 'welcome' ? <>
                             <Table
                                 dataSource={previewData[key]}
-                                columns={welcomeColumns(bookPlatForm, bookList, setContent)}
+                                columns={welcomeColumns(bookPlatForm, bookList, setContent, previewContent)}
                                 rowKey={'id'}
                                 bordered={true}
                                 scroll={{ y: 550 }}

+ 151 - 51
src/pages/weComTask/page/businessPlan/create/tableConfig.tsx

@@ -125,7 +125,7 @@ export const userInheritColumns = (setContent: (data: TASK_CREATE.SetContentProp
 }
 
 /** 群发 */
-export const massSendingColumns = (setContent: (data: TASK_CREATE.SetContentProps) => void, bookPlatForm: TASK_CREATE.BookPlatFormProps[]): ColumnsType<AnyObject> => {
+export const massSendingColumns = (setContent: (data: TASK_CREATE.SetContentProps) => void, bookPlatForm: TASK_CREATE.BookPlatFormProps[], previewContent: { groupMsgContent?: any[], welcomeMsgContent?: any[], externalUserTransferContent?: any[] }): ColumnsType<AnyObject> => {
     return [
         {
             title: '账号',
@@ -135,6 +135,7 @@ export const massSendingColumns = (setContent: (data: TASK_CREATE.SetContentProp
             render(value, record) {
                 return <>
                     <Title level={5} style={{ margin: 0 }}>{value}</Title>
+                    <Paragraph style={{ margin: 0 }}>公众号ID:{record?.corpUserList?.[0]?.mpAccountId || '--'}</Paragraph>
                     <Paragraph style={{ margin: 0 }}>客服号:{record?.corpUserList?.map(i => i.name).join('、')}</Paragraph>
                 </>
             },
@@ -216,16 +217,37 @@ export const massSendingColumns = (setContent: (data: TASK_CREATE.SetContentProp
             key: 'linkUrl',
             width: 250,
             render(_, record) {
-                return record?.linkData?.length > 0 ? <SelectBookLinkButton
-                    bookPlatForm={bookPlatForm}
-                    mpAccountId={record.corpUserList?.[0]?.mpAccountId}
-                    linkData={record.linkData}
-                    onChange={(linkStr) => setContent({
-                        msg: { linkUrl: linkStr },
-                        index: [record.corpUsergroupIndex, record.strategyIndex - 1, record.sendDataIndex - 1, record.contentIndex - 1],
-                        type: 'massSending'
-                    })}
-                /> : '--'
+                return record?.linkData?.length > 0 ? <div style={{ display: 'flex', gap: 4, alignItems: 'flex-end' }}>
+                    <Input.TextArea
+                        placeholder="请输入链接"
+                        allowClear
+                        value={previewContent?.groupMsgContent?.[record.corpUsergroupIndex]?.[record.strategyIndex - 1]?.[record.sendDataIndex - 1]?.[record.contentIndex - 1]?.linkUrl}
+                        onChange={e => {
+                            setContent({
+                                msg: { linkUrl: e.target.value },
+                                index: [record.corpUsergroupIndex, record.strategyIndex - 1, record.sendDataIndex - 1, record.contentIndex - 1],
+                                type: 'massSending'
+                            })
+                        }}
+                    />
+                    <SelectBookLinkButton
+                        bookPlatForm={bookPlatForm}
+                        mpAccountId={record.corpUserList?.[0]?.mpAccountId}
+                        linkData={record.linkData}
+                        onChange={(linkStr, miniprogramAppid, miniprogramPage) => {
+                            const msg: { [x: string]: string } = { linkUrl: linkStr }
+                            if (miniprogramAppid && miniprogramPage && record?.miniProgramData?.length > 0 && !previewContent?.groupMsgContent?.[record.corpUsergroupIndex]?.[record.strategyIndex - 1]?.[record.sendDataIndex - 1]?.[record.contentIndex - 1]?.miniprogramAppid && !previewContent?.groupMsgContent?.[record.corpUsergroupIndex]?.[record.strategyIndex - 1]?.[record.sendDataIndex - 1]?.[record.contentIndex - 1]?.miniprogramPage) {
+                                msg.miniprogramAppid = miniprogramAppid
+                                msg.miniprogramPage = miniprogramPage
+                            }
+                            setContent({
+                                msg,
+                                index: [record.corpUsergroupIndex, record.strategyIndex - 1, record.sendDataIndex - 1, record.contentIndex - 1],
+                                type: 'massSending'
+                            })
+                        }}
+                    />
+                </div> : '--'
             },
         },
         {
@@ -234,9 +256,10 @@ export const massSendingColumns = (setContent: (data: TASK_CREATE.SetContentProp
             key: 'miniprogramAppid',
             width: 200,
             render(_, record) {
-                return record?.isMiniProgram ? <Input.TextArea
+                return record?.miniProgramData?.length > 0 ? <Input.TextArea
                     placeholder="请输入小程序APPID"
                     allowClear
+                    value={previewContent?.groupMsgContent?.[record.corpUsergroupIndex]?.[record.strategyIndex - 1]?.[record.sendDataIndex - 1]?.[record.contentIndex - 1]?.miniprogramAppid}
                     onChange={e => setContent({
                         msg: { miniprogramAppid: e.target.value },
                         index: [record.corpUsergroupIndex, record.strategyIndex - 1, record.sendDataIndex - 1, record.contentIndex - 1],
@@ -249,17 +272,44 @@ export const massSendingColumns = (setContent: (data: TASK_CREATE.SetContentProp
             title: '小程序路径',
             dataIndex: 'miniprogramPage',
             key: 'miniprogramPage',
-            width: 200,
+            width: 250,
             render(_, record) {
-                return record?.isMiniProgram ? <Input.TextArea
-                    placeholder="请输入小程序路径"
-                    allowClear
-                    onChange={e => setContent({
-                        msg: { miniprogramPage: e.target.value },
-                        index: [record.corpUsergroupIndex, record.strategyIndex - 1, record.sendDataIndex - 1, record.contentIndex - 1],
-                        type: 'massSending'
-                    })}
-                /> : '--'
+                return record?.miniProgramData?.length > 0 ? <div style={{ display: 'flex', gap: 4, alignItems: 'flex-end' }}>
+                    <Input.TextArea
+                        placeholder="请输入小程序路径"
+                        allowClear
+                        value={previewContent?.groupMsgContent?.[record.corpUsergroupIndex]?.[record.strategyIndex - 1]?.[record.sendDataIndex - 1]?.[record.contentIndex - 1]?.miniprogramPage}
+                        onChange={e => setContent({
+                            msg: { miniprogramPage: e.target.value },
+                            index: [record.corpUsergroupIndex, record.strategyIndex - 1, record.sendDataIndex - 1, record.contentIndex - 1],
+                            type: 'massSending'
+                        })}
+                    />
+                    <SelectBookLinkButton
+                        bookPlatForm={bookPlatForm}
+                        mpAccountId={record.corpUserList?.[0]?.mpAccountId}
+                        linkData={[{
+                            msgType: "TASK_CONTENT_LINK",
+                            link: {
+                                title: record.miniProgramData?.[0]?.miniprogram?.title,
+                                picUrl: record.miniProgramData?.[0]?.miniprogram?.picUrl,
+                                desc: ''
+                            }
+                        }]}
+                        onChange={(_, miniprogramAppid, miniprogramPage) => {
+                            const msg: { [x: string]: string } = {}
+                            if (miniprogramAppid && miniprogramPage) {
+                                msg.miniprogramAppid = miniprogramAppid
+                                msg.miniprogramPage = miniprogramPage
+                                setContent({
+                                    msg,
+                                    index: [record.corpUsergroupIndex, record.strategyIndex - 1, record.sendDataIndex - 1, record.contentIndex - 1],
+                                    type: 'massSending'
+                                })
+                            }
+                        }}
+                    />
+                </div> : '--'
             }
         }
     ]
@@ -392,7 +442,7 @@ export const highMassSendingColumns = (): ColumnsType<AnyObject> => {
 }
 
 
-export const welcomeColumns = (bookPlatForm: { platformName: string, id: number, platformKey: string }[], bookList: { id: number, bookName: string, platformId: number }[], setContent: (data: TASK_CREATE.SetContentProps) => void): ColumnsType<AnyObject> => {
+export const welcomeColumns = (bookPlatForm: { platformName: string, id: number, platformKey: string }[], bookList: { id: number, bookName: string, platformId: number }[], setContent: (data: TASK_CREATE.SetContentProps) => void, previewContent: { groupMsgContent?: any[], welcomeMsgContent?: any[], externalUserTransferContent?: any[] }): ColumnsType<AnyObject> => {
     return [
         {
             title: '账号',
@@ -402,6 +452,7 @@ export const welcomeColumns = (bookPlatForm: { platformName: string, id: number,
             render(value, record) {
                 return <>
                     <Title level={5} style={{ margin: 0 }}>{value}({record?.corpUserList?.[0]?.corpName})</Title>
+                    <Paragraph style={{ margin: 0 }}>公众号ID:{record?.corpUserList?.[0]?.mpAccountId || '--'}</Paragraph>
                     <Paragraph style={{ margin: 0 }}>客服号:{record?.corpUserList?.map(i => i.name).join('、')}</Paragraph>
                 </>
             },
@@ -473,23 +524,44 @@ export const welcomeColumns = (bookPlatForm: { platformName: string, id: number,
             key: 'linkUrl',
             width: 250,
             render(_, record) {
-                return record?.linkData?.length > 0 ? <SelectBookLinkButton
-                    bookPlatForm={bookPlatForm}
-                    mpAccountId={record.corpUserList?.[0]?.mpAccountId}
-                    linkData={record.linkData.map(item => ({
-                        msgType: "TASK_CONTENT_LINK",
-                        link: {
-                            title: item.linkTitle,
-                            picUrl: item.linkPicurl,
-                            desc: item.linkDesc
-                        }
-                    }))}
-                    onChange={(linkStr) => setContent({
-                        msg: { linkUrl: linkStr },
-                        index: [record.corpUsergroupIndex, record.contentIndex - 1],
-                        type: 'welcome'
-                    })}
-                /> : '--'
+                return record?.linkData?.length > 0 ? <div style={{ display: 'flex', gap: 4, alignItems: 'flex-end' }}>
+                    <Input.TextArea
+                        placeholder="请输入链接"
+                        allowClear
+                        value={previewContent?.welcomeMsgContent?.[record.corpUsergroupIndex]?.[record.contentIndex - 1]?.linkUrl}
+                        onChange={e => {
+                            setContent({
+                                msg: { linkUrl: e.target.value },
+                                index: [record.corpUsergroupIndex, record.contentIndex - 1],
+                                type: 'welcome'
+                            })
+                        }}
+                    />
+                    <SelectBookLinkButton
+                        bookPlatForm={bookPlatForm}
+                        mpAccountId={record.corpUserList?.[0]?.mpAccountId}
+                        linkData={record.linkData.map(item => ({
+                            msgType: "TASK_CONTENT_LINK",
+                            link: {
+                                title: item.linkTitle,
+                                picUrl: item.linkPicurl,
+                                desc: item.linkDesc
+                            }
+                        }))}
+                        onChange={(linkStr, miniprogramAppid, miniprogramPage) => {
+                            const msg: { [x: string]: string } = { linkUrl: linkStr }
+                            if (miniprogramAppid && miniprogramPage && record?.miniProgramData?.length > 0 && !previewContent?.welcomeMsgContent?.[record.corpUsergroupIndex]?.[record.contentIndex - 1]?.miniprogramAppid && !previewContent?.welcomeMsgContent?.[record.corpUsergroupIndex]?.[record.contentIndex - 1]?.miniprogramPage) {
+                                msg.miniprogramAppid = miniprogramAppid
+                                msg.miniprogramPage = miniprogramPage
+                            }
+                            setContent({
+                                msg,
+                                index: [record.corpUsergroupIndex, record.contentIndex - 1],
+                                type: 'welcome'
+                            })
+                        }}
+                    />
+                </div> : '--'
             },
         },
         {
@@ -498,9 +570,10 @@ export const welcomeColumns = (bookPlatForm: { platformName: string, id: number,
             key: 'miniprogramAppid',
             width: 200,
             render(_, record) {
-                return record?.isMiniProgram ? <Input.TextArea
+                return record?.miniProgramData?.length > 0 ? <Input.TextArea
                     placeholder="请输入小程序APPID"
                     allowClear
+                    value={previewContent?.welcomeMsgContent?.[record.corpUsergroupIndex]?.[record.contentIndex - 1]?.miniprogramAppid}
                     onChange={e => setContent({
                         msg: { miniprogramAppid: e.target.value },
                         index: [record.corpUsergroupIndex, record.contentIndex - 1],
@@ -513,17 +586,44 @@ export const welcomeColumns = (bookPlatForm: { platformName: string, id: number,
             title: '小程序路径',
             dataIndex: 'miniprogramPage',
             key: 'miniprogramPage',
-            width: 200,
+            width: 250,
             render(_, record) {
-                return record?.isMiniProgram ? <Input.TextArea
-                    placeholder="请输入小程序路径"
-                    allowClear
-                    onChange={e => setContent({
-                        msg: { miniprogramPage: e.target.value },
-                        index: [record.corpUsergroupIndex, record.contentIndex - 1],
-                        type: 'welcome'
-                    })}
-                /> : '--'
+                return record?.miniProgramData?.length > 0 ? <div style={{ display: 'flex', gap: 4, alignItems: 'flex-end' }}>
+                    <Input.TextArea
+                        placeholder="请输入小程序路径"
+                        allowClear
+                        value={previewContent?.welcomeMsgContent?.[record.corpUsergroupIndex]?.[record.contentIndex - 1]?.miniprogramPage}
+                        onChange={e => setContent({
+                            msg: { miniprogramPage: e.target.value },
+                            index: [record.corpUsergroupIndex, record.contentIndex - 1],
+                            type: 'welcome'
+                        })}
+                    />
+                    <SelectBookLinkButton
+                        bookPlatForm={bookPlatForm}
+                        mpAccountId={record.corpUserList?.[0]?.mpAccountId}
+                        linkData={[{
+                            msgType: "TASK_CONTENT_LINK",
+                            link: {
+                                title: record.miniProgramData?.[0]?.miniprogramTitle,
+                                picUrl: record.miniProgramData?.[0]?.miniprogramPicurl,
+                                desc: ''
+                            }
+                        }]}
+                        onChange={(_, miniprogramAppid, miniprogramPage) => {
+                            const msg: { [x: string]: string } = {}
+                            if (miniprogramAppid && miniprogramPage) {
+                                msg.miniprogramAppid = miniprogramAppid
+                                msg.miniprogramPage = miniprogramPage
+                                setContent({
+                                    msg,
+                                    index: [record.corpUsergroupIndex, record.contentIndex - 1],
+                                    type: 'welcome'
+                                })
+                            }
+                        }}
+                    />
+                </div> : '--'
             }
         }
     ]