tableConfig.tsx 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. import { Space, TableProps, Typography } from "antd"
  2. import React from "react"
  3. const { Text, Title } = Typography;
  4. import style from './index.less'
  5. import VideoNews from "@/pages/launchSystemNew/components/newsModal/videoNews";
  6. import styles from './Material/index.less'
  7. import { MARKETING_TARGET_TYPE_ENUM, OPTIMIZATIONGOAL_ENUM } from "../const";
  8. import ImageXXXC from "../../components/AdsComponent/ImageXXXC";
  9. const columns = (): TableProps<any>['columns'] => {
  10. return [
  11. {
  12. title: '广告',
  13. dataIndex: 'adgroup',
  14. key: 'adgroup',
  15. align: 'center',
  16. children: [
  17. {
  18. title: '广告名称',
  19. dataIndex: 'adgroupName',
  20. key: 'adgroupName',
  21. width: 250,
  22. render: (_, b) => {
  23. return <Text style={{ fontSize: 12 }}>{b?.adgroupsDto?.adgroupName}</Text>
  24. },
  25. onCell: (record, index = 0) => ({
  26. rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
  27. })
  28. },
  29. {
  30. title: '营销内容',
  31. dataIndex: 'productName',
  32. key: 'productName',
  33. width: 200,
  34. render: (_, b) => {
  35. if (['MARKETING_TARGET_TYPE_FICTION', 'MARKETING_TARGET_TYPE_SHORT_DRAMA'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
  36. return <Space size={0} direction="vertical">
  37. <Text style={{ fontSize: 12 }}>推广产品:{b?.productDto?.marketingAssetName}(产品ID:{b?.productDto?.marketingAssetId})</Text>
  38. {(b.adgroupsDto?.marketingCarrierType === 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT' && b?.marketingCarrierDto) && <Text style={{ fontSize: 12 }}>营销载体:{b.marketingCarrierDto.map((item: { wechatOfficialAccountName: any; wechatOfficialAccountId: any; }) => `${item?.wechatOfficialAccountName}(${item?.wechatOfficialAccountId})`)?.toString()}</Text>}
  39. <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
  40. </Space>
  41. } else if (['MARKETING_TARGET_TYPE_WECHAT_OFFICIAL_ACCOUNT'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
  42. return <Space size={0} direction="vertical">
  43. <Text style={{ fontSize: 12 }}>推广产品:微信公众号</Text>
  44. <Text style={{ fontSize: 12 }}>营销载体:微信公众号</Text>
  45. <Text style={{ fontSize: 12 }}>应用:{b?.productDto?.wechatOfficialAccountName}({b?.productDto?.wechatOfficialAccountId})</Text>
  46. <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
  47. </Space>
  48. } else if (['MARKETING_TARGET_TYPE_MINI_PROGRAM_WECHAT'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
  49. return <Space size={0} direction="vertical">
  50. <Text style={{ fontSize: 12 }}>推广产品:微信小程序(产品本地ID:{b?.adgroupsDto?.sysWechatAppId})</Text>
  51. <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
  52. </Space>
  53. } else if (['MARKETING_TARGET_TYPE_WECHAT_WORK'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
  54. return <Space size={0} direction="vertical">
  55. <Text style={{ fontSize: 12 }}>推广产品:企业微信(产品本地ID:{b?.adgroupsDto?.sysCorpWechatId})</Text>
  56. <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
  57. </Space>
  58. } else if (['MARKETING_TARGET_TYPE_WECHAT_MINI_GAME'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
  59. return <Space size={0} direction="vertical">
  60. <Text style={{ fontSize: 12 }}>推广产品:微信小游戏(appId:{b?.adgroupsDto?.wxGameAppId})</Text>
  61. <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
  62. </Space>
  63. } else if (['MARKETING_TARGET_TYPE_APP_ANDROID', 'MARKETING_TARGET_TYPE_APP_IOS'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
  64. return <Space size={0} direction="vertical">
  65. <Text style={{ fontSize: 12 }}>推广产品:{MARKETING_TARGET_TYPE_ENUM[b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType as keyof typeof MARKETING_TARGET_TYPE_ENUM]}(applicationId:{b?.adgroupsDto?.promoteApplicationId})</Text>
  66. <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
  67. </Space>
  68. }
  69. return 'ERROR,请联系管理员'
  70. },
  71. onCell: (record, index = 0) => ({
  72. rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
  73. }),
  74. },
  75. {
  76. title: '定向',
  77. dataIndex: 'targeting',
  78. key: 'targeting',
  79. width: 170,
  80. render: (_, b) => {
  81. return <Text style={{ fontSize: 12 }}>{b?.targetDto?.targetingName}</Text>
  82. },
  83. onCell: (record, index = 0) => ({
  84. rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
  85. }),
  86. },
  87. {
  88. title: '预算与出价',
  89. dataIndex: 'dailyBudget',
  90. key: 'dailyBudget',
  91. width: 170,
  92. render: (_, b) => {
  93. let { optimizationGoal, dailyBudget, bidAmount, bidMode } = b?.adgroupsDto
  94. return <Space size={0} direction="vertical">
  95. <Text style={{ fontSize: 12 }}>广告日预算:{dailyBudget ? dailyBudget + '元/天' : '不限'}</Text>
  96. <Text style={{ fontSize: 12 }}>出价:{bidAmount}元/{optimizationGoal ? (OPTIMIZATIONGOAL_ENUM as any)[optimizationGoal] : ['BID_MODE_OCPM', 'BID_MODE_OCPC'].includes(bidMode) ? '千次曝光' : '点击'}</Text>
  97. </Space>
  98. },
  99. onCell: (record, index = 0) => ({
  100. rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
  101. }),
  102. },
  103. ]
  104. },
  105. {
  106. title: '创意',
  107. dataIndex: 'dynamicDto',
  108. key: 'dynamicDto',
  109. align: 'center',
  110. children: [
  111. {
  112. title: '创意名称',
  113. dataIndex: 'dynamicCreativeName',
  114. key: 'dynamicCreativeName',
  115. width: 200,
  116. render: (_, b) => {
  117. return <Text style={{ fontSize: 12 }}>{b?.dynamicDto?.dynamicCreativeName}</Text>
  118. }
  119. },
  120. {
  121. title: '创意素材',
  122. dataIndex: 'dynamicGroup',
  123. key: 'dynamicGroup',
  124. width: 210,
  125. render: (_, b) => {
  126. let deliveryMode = b?.dynamicDto?.deliveryMode
  127. let dynamicGroup = b?.dynamicGroup
  128. if (dynamicGroup && Object.keys(dynamicGroup).length) {
  129. let keys = Object.keys(dynamicGroup)
  130. if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
  131. return <>
  132. <div className={style.detail_body_m}>
  133. {(keys.includes('video_id') || keys.includes('short_video1')) ? <>
  134. <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个视频,0张图片</Title>
  135. <div className={style.video}>
  136. <VideoNews src={dynamicGroup?.video_id?.url || dynamicGroup?.short_video1?.url} keyFrameImageUrl={dynamicGroup?.video_id?.keyFrameImageUrl || dynamicGroup?.short_video1?.keyFrameImageUrl} />
  137. {dynamicGroup?.cover_id && <div className={style.cover_image} style={{ marginLeft: 4 }}>
  138. <img src={dynamicGroup?.cover_id?.url} />
  139. </div>}
  140. </div>
  141. </> : keys.includes('image_id') ? <>
  142. <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选0个视频,1张图片</Title>
  143. <div className={style.cover_image}>
  144. <img src={dynamicGroup?.image_id?.url} />
  145. </div>
  146. </> : (keys.includes('image_list') || keys.includes('element_story')) ? <>
  147. <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个组图, 0个视频</Title>
  148. {dynamicGroup?.[keys.includes('image_list') ? 'image_list' : 'element_story']?.map((item: { url: string | undefined; }, index: undefined) => <div className={style.cover_image} key={index} style={{ width: 30, height: 24, minWidth: 32 }}>
  149. <img src={item?.url} />
  150. </div>)}
  151. </> : null}
  152. </div>
  153. </>
  154. } else {
  155. return <div style={{ display: 'flex', gap: 5, flexWrap: 'wrap' }}>
  156. {dynamicGroup?.list?.map((item: any, index: number) => {
  157. if (item?.componentSubType?.includes('IMAGE_LIST')) {
  158. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  159. <div className={styles.content} style={{ width: 30, height: 30 }}>
  160. <ImageXXXC imageList={item?.urlList} placement="top" style={{ width: '100%', height: '100%' }} />
  161. </div>
  162. </div>
  163. } else if (Array.isArray(item)) {
  164. let length = item.length
  165. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  166. <div className={styles.content} style={{ width: 30, height: 30 }}>
  167. {item.map((l, i) => <img src={l?.url} key={i} style={{ width: length >= 6 ? 9.999 : 14.999 }} />)}
  168. </div>
  169. </div>
  170. } else if (item?.url?.includes('mp4') || item?.keyFrameImageUrl) {
  171. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  172. <div className={styles.content} style={{ width: 30, height: 30 }}>
  173. <VideoNews src={item?.url} style={{ width: 30, height: 30 }} keyFrameImageUrl={item?.keyFrameImageUrl} maskBodyStyle={{ backgroundColor: "rgba(242, 246, 254, 0.1)" }} />
  174. </div>
  175. </div>
  176. } else {
  177. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  178. <div className={styles.content} style={{ width: 30, height: 30 }}><img src={item?.url} /></div>
  179. </div>
  180. }
  181. })}
  182. </div>
  183. }
  184. } else {
  185. return <Text style={{ fontSize: 12 }}>无需配置</Text>
  186. }
  187. }
  188. },
  189. {
  190. title: '创意文案',
  191. dataIndex: 'textDto',
  192. key: 'textDto',
  193. width: 200,
  194. render: (value, b) => {
  195. let deliveryMode = b?.dynamicDto?.deliveryMode
  196. if (value && Object.keys(value).length) {
  197. if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
  198. return <div className={style.detail_body} style={{ height: 'auto' }}>
  199. {Object.keys(value)?.map((key, index: number) => {
  200. return <div key={index}>
  201. {key === 'description' ? <>
  202. <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
  203. {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  204. </> : key === 'title' ? <>
  205. <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
  206. {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  207. </> : null}
  208. </div>
  209. })}
  210. </div>
  211. } else {
  212. return <div className={style.detail_body} style={{ height: 'auto' }}>
  213. {Object.keys(value)?.map((key, index: number) => {
  214. return <div key={index}>
  215. {key === 'description' ? <>
  216. <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
  217. {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  218. </> : key === 'title' ? <>
  219. <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
  220. {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  221. </> : null}
  222. </div>
  223. })}
  224. </div>
  225. }
  226. } else {
  227. return <Text style={{ fontSize: 12 }}>无需配置</Text>
  228. }
  229. }
  230. },
  231. {
  232. title: '跳转类型',
  233. dataIndex: 'pageListDto',
  234. key: 'pageListDto',
  235. width: 200,
  236. render: (_, b) => {
  237. let pageListDto = b?.pageListDto
  238. let pageType = b?.dynamicDto?.creativeComponents?.mainJumpInfo?.[0]?.value?.pageType
  239. if (pageType === 'PAGE_TYPE_WECHAT_MINI_GAME') {
  240. return <Text style={{ fontSize: 12 }}>无需配置</Text>
  241. }
  242. return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>
  243. {pageType === 'PAGE_TYPE_OFFICIAL' ? '灵鹊落地页' : pageType === 'PAGE_TYPE_WECHAT_MINI_PROGRAM' ? '微信小程序' : '原生推广页'}:
  244. {pageListDto?.map((item: { pageName: any; }) => item?.pageName)?.join(',')}
  245. </Text>
  246. }
  247. }
  248. ]
  249. }
  250. ]
  251. }
  252. export const columnsAddDynamic = (): TableProps<any>['columns'] => {
  253. return [
  254. {
  255. title: '广告',
  256. dataIndex: 'adgroup',
  257. key: 'adgroup',
  258. align: 'center',
  259. children: [
  260. {
  261. title: '广告名称',
  262. dataIndex: 'adgroupName',
  263. key: 'adgroupName',
  264. width: 250,
  265. render: (_, b) => {
  266. return <Text style={{ fontSize: 12 }}>{b?.adgroupsDto?.adgroupName}</Text>
  267. },
  268. onCell: (record, index = 0) => ({
  269. rowSpan: !(index % record.rowSpan) ? record.rowSpan : 0
  270. }),
  271. },
  272. ]
  273. },
  274. {
  275. title: '创意',
  276. dataIndex: 'dynamicDto',
  277. key: 'dynamicDto',
  278. align: 'center',
  279. children: [
  280. {
  281. title: '创意名称',
  282. dataIndex: 'dynamicCreativeName',
  283. key: 'dynamicCreativeName',
  284. width: 200,
  285. render: (_, b) => {
  286. return <Text style={{ fontSize: 12 }}>{b?.dynamicDto?.dynamicCreativeName}</Text>
  287. }
  288. },
  289. {
  290. title: '创意素材',
  291. dataIndex: 'dynamicGroup',
  292. key: 'dynamicGroup',
  293. width: 200,
  294. render: (_, b) => {
  295. let deliveryMode = b?.dynamicDto?.deliveryMode
  296. let dynamicGroup = b?.dynamicGroup
  297. if (dynamicGroup && Object.keys(dynamicGroup).length) {
  298. let keys = Object.keys(dynamicGroup)
  299. if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
  300. // return <Text style={{ fontSize: 12, color: '#1890ff' }}>已选{(keys.includes('video_id') || keys.includes('short_video1')) ? '1个视频,0张图片' : keys.includes('image_id') ? '0个视频,1张图片' : (keys.includes('image_list') || keys.includes('element_story') ? '1个组图, 0个视频' : '')}</Text>
  301. return <>
  302. <div className={style.detail_body_m}>
  303. {(keys.includes('video_id') || keys.includes('short_video1')) ? <>
  304. <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个视频,0张图片</Title>
  305. <div className={style.video}>
  306. <VideoNews src={dynamicGroup?.video_id?.url || dynamicGroup?.short_video1?.url} keyFrameImageUrl={dynamicGroup?.video_id?.keyFrameImageUrl || dynamicGroup?.short_video1?.keyFrameImageUrl} />
  307. {dynamicGroup?.cover_id && <div className={style.cover_image} style={{ marginLeft: 4 }}>
  308. <img src={dynamicGroup?.cover_id?.url} />
  309. </div>}
  310. </div>
  311. </> : keys.includes('image_id') ? <>
  312. <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选0个视频,1张图片</Title>
  313. <div className={style.cover_image}>
  314. <img src={dynamicGroup?.image_id?.url} />
  315. </div>
  316. </> : (keys.includes('image_list') || keys.includes('element_story')) ? <>
  317. <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个组图, 0个视频</Title>
  318. {dynamicGroup?.[keys.includes('image_list') ? 'image_list' : 'element_story']?.map((item: { url: string | undefined; }, index: undefined) => <div className={style.cover_image} key={index} style={{ width: 30, height: 24, minWidth: 32 }}>
  319. <img src={item?.url} />
  320. </div>)}
  321. </> : null}
  322. </div>
  323. </>
  324. } else {
  325. return <div style={{ display: 'flex', gap: 5, flexWrap: 'wrap' }}>
  326. {dynamicGroup?.list?.map((item: any, index: number) => {
  327. if (item?.componentSubType?.includes('IMAGE_LIST')) {
  328. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  329. <div className={styles.content} style={{ width: 30, height: 30 }}>
  330. <ImageXXXC imageList={item?.urlList} placement="top" style={{ width: '100%', height: '100%' }} />
  331. </div>
  332. </div>
  333. } else if (Array.isArray(item)) {
  334. let length = item.length
  335. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  336. <div className={styles.content} style={{ width: 30, height: 30 }}>
  337. {item.map((l, i) => <img src={l?.url} key={i} style={{ width: length === 6 ? 9.999 : 14.999 }} />)}
  338. </div>
  339. </div>
  340. } else if (item?.url?.includes('mp4') || item?.keyFrameImageUrl) {
  341. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  342. <div className={styles.content} style={{ width: 30, height: 30 }}>
  343. <VideoNews src={item?.url} style={{ width: 30, height: 30 }} keyFrameImageUrl={item?.keyFrameImageUrl} maskBodyStyle={{ backgroundColor: "rgba(242, 246, 254, 0.1)" }} />
  344. </div>
  345. </div>
  346. } else {
  347. return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
  348. <div className={styles.content} style={{ width: 30, height: 30 }}><img src={item?.url} /></div>
  349. </div>
  350. }
  351. })}
  352. </div>
  353. }
  354. } else {
  355. return <Text style={{ fontSize: 12 }}>无需配置</Text>
  356. }
  357. }
  358. },
  359. {
  360. title: '创意文案',
  361. dataIndex: 'textDto',
  362. key: 'textDto',
  363. width: 200,
  364. render: (value, b) => {
  365. let deliveryMode = b?.dynamicDto?.deliveryMode
  366. if (value && Object.keys(value).length) {
  367. if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
  368. return <div className={style.detail_body} style={{ height: 'auto' }}>
  369. {Object.keys(value)?.map((key, index: number) => {
  370. return <div key={index}>
  371. {key === 'description' ? <>
  372. <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
  373. {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  374. </> : key === 'title' ? <>
  375. <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
  376. {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  377. </> : null}
  378. </div>
  379. })}
  380. </div>
  381. } else {
  382. return <div className={style.detail_body} style={{ height: 'auto' }}>
  383. {Object.keys(value)?.map((key, index: number) => {
  384. return <div key={index}>
  385. {key === 'description' ? <>
  386. <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
  387. {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  388. </> : key === 'title' ? <>
  389. <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
  390. {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  391. </> : null}
  392. </div>
  393. })}
  394. </div>
  395. }
  396. } else {
  397. return <Text style={{ fontSize: 12 }}>无需配置</Text>
  398. }
  399. }
  400. },
  401. {
  402. title: '跳转类型',
  403. dataIndex: 'pageListDto',
  404. key: 'pageListDto',
  405. width: 200,
  406. render: (_, b) => {
  407. let pageListDto = b?.pageListDto
  408. let pageType = b?.dynamicDto?.creativeComponents?.mainJumpInfo?.[0]?.value?.pageType
  409. if (pageType === 'PAGE_TYPE_WECHAT_MINI_GAME') {
  410. return <Text style={{ fontSize: 12 }}>无需配置</Text>
  411. }
  412. return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>
  413. {pageType === 'PAGE_TYPE_OFFICIAL' ? '灵鹊落地页' : pageType === 'PAGE_TYPE_WECHAT_MINI_PROGRAM' ? '微信小程序' : '原生推广页'}:
  414. {pageListDto?.map((item: { pageName: any; }) => item?.pageName)?.join(',')}
  415. </Text>
  416. }
  417. }
  418. ]
  419. }
  420. ]
  421. }
  422. export default columns