tableConfig.tsx 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. import { Input, Typography } from "antd";
  2. import { TIME_TYPE } from "../../businessPlan/create/const";
  3. import ShowContentTable from "../../businessPlan/create/components/massSending/showContentTable";
  4. import SelectBookLinkButton from "../../bookLink/SelectBookLinkButton";
  5. import { ColumnsType } from "antd/es/table";
  6. import { AnyObject } from "antd/es/_util/type";
  7. const { Title, Text, Paragraph } = Typography;
  8. /** 朋友圈 */
  9. export const monmentsColumns = (
  10. bookPlatForm: TASK_CREATE.BookPlatFormProps[],
  11. bookList: TASK_CREATE.BookListProps[],
  12. platform: string,
  13. previewContent: { [x: string]: any },
  14. setPreviewContent: React.Dispatch<React.SetStateAction<{
  15. [x: string]: any;
  16. }>>
  17. ): ColumnsType<AnyObject> => {
  18. return [
  19. {
  20. title: '账号',
  21. dataIndex: 'corpUserGroupName',
  22. key: 'corpUserGroupName',
  23. width: 150,
  24. render(value, record) {
  25. return <>
  26. <Title level={5} style={{ margin: 0 }}>{value}</Title>
  27. <Paragraph style={{ margin: 0 }}>公众号:{record?.corpUsers?.[0]?.mpAccountName || '--'}</Paragraph>
  28. <Paragraph style={{ margin: 0 }}>客服号:{record?.corpUsers?.map(i => i.name).join('、')}</Paragraph>
  29. </>
  30. },
  31. onCell: (record) => {
  32. return { rowSpan: record.groupRowSpan }
  33. }
  34. },
  35. {
  36. title: '朋友圈信息',
  37. dataIndex: 'taskName',
  38. key: 'taskName',
  39. width: 130,
  40. render(value, record) {
  41. return <>
  42. <Title level={5} style={{ margin: 0 }}>标题:{value}</Title>
  43. {record?.bizType && <Paragraph style={{ margin: 0 }}>业务类型:{record?.bizType === 'novel' ? '小说' : record?.bizType === 'game' ? '游戏' : '<空>'}</Paragraph>}
  44. {record?.platform && <Paragraph style={{ margin: 0 }}>书城:{record?.platform ? bookPlatForm?.find(item => item.id === record?.platform)?.platformName : '<空>'}</Paragraph>}
  45. {record?.templateProductId && <Paragraph style={{ margin: 0 }}>适用产品:{record?.templateProductId ? bookList?.find(item => item.id === record?.templateProductId)?.bookName : '<空>'}</Paragraph>}
  46. </>
  47. },
  48. onCell: (record) => {
  49. return { rowSpan: record.groupRowSpan }
  50. }
  51. },
  52. {
  53. title: '策略信息',
  54. dataIndex: 'strategyData',
  55. key: 'strategyData',
  56. width: 200,
  57. render(value, record) {
  58. return <>
  59. <Title level={5} style={{ margin: 0 }}>策略{record.strategyIndex + 1}</Title>
  60. <Paragraph style={{ margin: 0 }}>名称:{value?.strategyName || '<空>'}</Paragraph>
  61. <Paragraph style={{ margin: 0 }}>执行类型:{TIME_TYPE[value?.timeRepeatType]}</Paragraph>
  62. {value?.sendDay && <Paragraph style={{ margin: 0 }}>执行时间:{value?.sendDay}</Paragraph>}
  63. {value?.startTime && <Paragraph style={{ margin: 0 }}>执行日期:{value?.startTime}~{value?.endTime ? value?.endTime : '长期执行'}</Paragraph>}
  64. {value?.sendTime && <Paragraph style={{ margin: 0 }}>执行时间:{value?.sendTime}</Paragraph>}
  65. {value?.repeatArray && <Paragraph style={{ margin: 0 }}>执行天数:{value?.repeatArray.join('、')}</Paragraph>}
  66. </>
  67. },
  68. onCell: (record) => {
  69. return { rowSpan: record.strategyRowSpan }
  70. }
  71. },
  72. {
  73. title: '发送内容',
  74. dataIndex: 'content',
  75. key: 'content',
  76. width: 200,
  77. render(_, record) {
  78. return <>
  79. <ShowContentTable
  80. data={record?.content}
  81. name={<><span>内容{record.contentIndex + 1}:</span><span dangerouslySetInnerHTML={{ __html: record.contentReactNode?.map((item) => item).join('、') }}></span></>}
  82. />
  83. </>
  84. },
  85. },
  86. {
  87. title: '图文链接',
  88. dataIndex: 'linkUrl',
  89. key: 'linkUrl',
  90. width: 250,
  91. render(_, record) {
  92. const linkUrl = previewContent?.[record?.id]?.linkUrl
  93. return record?.linkData?.length > 0 ? <div style={{ display: 'flex', gap: 4, alignItems: 'flex-end' }}>
  94. <Input.TextArea
  95. placeholder="请输入链接"
  96. allowClear
  97. value={linkUrl}
  98. onChange={e => {
  99. const newPreviewContent = JSON.parse(JSON.stringify(previewContent))
  100. const c = previewContent?.[record.id] || {}
  101. newPreviewContent[record.id] = { ...c, linkUrl: e.target.value }
  102. setPreviewContent(newPreviewContent)
  103. }}
  104. />
  105. <SelectBookLinkButton
  106. bookPlatForm={bookPlatForm}
  107. platform={platform}
  108. mpAccountId={record?.mpAccountId}
  109. linkData={record.linkData}
  110. linkList={linkUrl ? {
  111. type: 'link',
  112. data: linkUrl.split(',')
  113. } : undefined}
  114. onChange={(linkStr, miniprogramAppid, miniprogramPage) => {
  115. const msg: { [x: string]: string } = { linkUrl: linkStr }
  116. if (miniprogramAppid && miniprogramPage && record?.miniProgramData?.length > 0 && !previewContent?.[record.id]?.miniprogramAppid && !previewContent?.[record.id]?.miniprogramPage) {
  117. msg.miniprogramAppid = miniprogramAppid
  118. msg.miniprogramPage = miniprogramPage
  119. }
  120. const newPreviewContent = JSON.parse(JSON.stringify(previewContent))
  121. const c = previewContent?.[record.id] || {}
  122. newPreviewContent[record.id] = { ...c, ...msg }
  123. setPreviewContent(newPreviewContent)
  124. }}
  125. />
  126. </div> : '--'
  127. },
  128. },
  129. {
  130. title: '小程序APPID',
  131. dataIndex: 'miniprogramAppid',
  132. key: 'miniprogramAppid',
  133. width: 200,
  134. render(_, record) {
  135. return record?.miniProgramData?.length > 0 ? <Input.TextArea
  136. placeholder="请输入小程序APPID"
  137. allowClear
  138. value={previewContent?.[record.id]?.miniprogramAppid}
  139. onChange={e => {
  140. const newPreviewContent = JSON.parse(JSON.stringify(previewContent))
  141. const c = previewContent?.[record.id] || {}
  142. newPreviewContent[record.id] = { ...c, miniprogramAppid: e.target.value }
  143. setPreviewContent(newPreviewContent)
  144. }}
  145. /> : '--'
  146. },
  147. },
  148. {
  149. title: '小程序路径',
  150. dataIndex: 'miniprogramPage',
  151. key: 'miniprogramPage',
  152. width: 250,
  153. render(_, record) {
  154. const miniprogramAppid = previewContent?.[record.id]?.miniprogramAppid
  155. const miniprogramPage = previewContent?.[record.id]?.miniprogramPage
  156. let linkList: {
  157. type: 'link' | 'miniprogram',
  158. data: any[]
  159. } = undefined
  160. if (miniprogramAppid && miniprogramPage) {
  161. linkList = { type: 'miniprogram', data: [] }
  162. const miniprogramPages = miniprogramPage.split(',')
  163. miniprogramAppid.split(',').map((item, index) => {
  164. linkList.data.push({
  165. miniappId: item,
  166. miniappPagePath: miniprogramPages?.[index]
  167. })
  168. })
  169. }
  170. return record?.miniProgramData?.length > 0 ? <div style={{ display: 'flex', gap: 4, alignItems: 'flex-end' }}>
  171. <Input.TextArea
  172. placeholder="请输入小程序路径"
  173. allowClear
  174. value={previewContent?.[record.id]?.miniprogramPage}
  175. onChange={e => {
  176. const newPreviewContent = JSON.parse(JSON.stringify(previewContent))
  177. const c = previewContent?.[record.id] || {}
  178. newPreviewContent[record.id] = { ...c, miniprogramPage: e.target.value }
  179. setPreviewContent(newPreviewContent)
  180. }}
  181. />
  182. <SelectBookLinkButton
  183. bookPlatForm={bookPlatForm}
  184. platform={platform}
  185. mpAccountId={record?.mpAccountId}
  186. linkList={linkList}
  187. linkData={record.miniProgramData.map(item => ({
  188. msgType: "TASK_CONTENT_LINK",
  189. link: {
  190. title: item?.miniprogram?.title,
  191. picUrl: item?.miniprogram?.picUrl,
  192. desc: ''
  193. }
  194. }))}
  195. onChange={(_, miniprogramAppid, miniprogramPage) => {
  196. const msg: { [x: string]: string } = {}
  197. if (miniprogramAppid && miniprogramPage) {
  198. msg.miniprogramAppid = miniprogramAppid
  199. msg.miniprogramPage = miniprogramPage
  200. const newPreviewContent = JSON.parse(JSON.stringify(previewContent))
  201. const c = previewContent?.[record.id] || {}
  202. newPreviewContent[record.id] = { ...c, ...msg }
  203. setPreviewContent(newPreviewContent)
  204. }
  205. }}
  206. />
  207. </div> : '--'
  208. }
  209. }
  210. ]
  211. }