tableConfig.tsx 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import { ColumnsType } from "antd/es/table"
  2. import { Flex, Popconfirm, Image, Tag } from "antd"
  3. import { copy } from "@/utils/utils"
  4. import dayJs from 'dayjs';
  5. export function TableConfig(
  6. handleEdit?: (d: Record<string, any>, isCopy?: boolean) => void,
  7. handleDel?: (data: number[]) => void,
  8. handleCode?: (appid: string, vid: string) => void
  9. ): ColumnsType<any> {
  10. const arr: ColumnsType<any> = [
  11. {
  12. title: 'ID',
  13. dataIndex: 'id',
  14. key: 'id',
  15. width: 70,
  16. align: 'center'
  17. },
  18. {
  19. title: '落地页名称',
  20. dataIndex: 'name',
  21. key: 'name',
  22. width: 150,
  23. ellipsis: true
  24. },
  25. {
  26. title: '落地页类型',
  27. dataIndex: 'type',
  28. key: 'type',
  29. width: 85,
  30. align: 'center',
  31. render: (v: string) => v === 'LANDING_PAGE' ? <Tag color="blue">小说落地页</Tag> : v === 'VIDEO' ? <Tag color="green">视频落地页</Tag> : '--'
  32. },
  33. {
  34. title: 'Sign',
  35. dataIndex: 'sign',
  36. key: 'sign',
  37. width: 150,
  38. ellipsis: true
  39. },
  40. {
  41. title: '落地页标题',
  42. dataIndex: 'pageName',
  43. key: 'pageName',
  44. width: 150,
  45. ellipsis: true,
  46. render(_, record) {
  47. const data = JSON.parse(record?.content || '{}')
  48. return data?.pageName || data?.[0]?.user?.nick || '--'
  49. },
  50. },
  51. {
  52. title: '企微主体',
  53. dataIndex: 'corpName',
  54. key: 'corpName',
  55. width: 120,
  56. align: 'center',
  57. ellipsis: true,
  58. render: (v: string) => v || '--'
  59. },
  60. {
  61. title: '企微客服号',
  62. dataIndex: 'corpUserList',
  63. key: 'corpUserList',
  64. width: 160,
  65. align: 'center',
  66. ellipsis: true,
  67. render: (v: any[]) => v?.map(item => item.corpUserName)?.join('、') || '--'
  68. },
  69. {
  70. title: '书名',
  71. dataIndex: 'bookName',
  72. key: 'bookName',
  73. width: 150,
  74. align: 'center',
  75. ellipsis: true,
  76. render: (v: string) => v || '--'
  77. },
  78. {
  79. title: '是否开启H5访问限制',
  80. dataIndex: 'h5VisitSwitch',
  81. key: 'h5VisitSwitch',
  82. width: 70,
  83. align: 'center',
  84. render: (v: boolean) => v ? <Tag color="green">开启</Tag> : <Tag color="red">关闭</Tag>
  85. },
  86. {
  87. title: '备注',
  88. dataIndex: 'remark',
  89. key: 'remark',
  90. width: 150,
  91. ellipsis: true,
  92. render: (v: string) => v || '--'
  93. },
  94. {
  95. title: '小程序AppId',
  96. dataIndex: 'previewAppId',
  97. key: 'previewAppId',
  98. width: 150,
  99. align: 'center',
  100. ellipsis: true,
  101. render: v => v || '--'
  102. },
  103. {
  104. title: '小程序路径',
  105. dataIndex: 'path',
  106. key: 'path',
  107. width: 350,
  108. ellipsis: true,
  109. render: (_, records) => {
  110. const eq = -Math.random()
  111. if (dayJs(records.createTime) > dayJs().startOf('day')) {
  112. return <a onClick={() => copy(`pages/player/index?id=${records.sign}`)}>pages/player/index?id={records.sign}</a>
  113. }
  114. return <a onClick={() => copy(`pages/play/index?vid=${records.sign}&eq=${eq}`)}>pages/play/index?vid={records.sign}&eq={eq}</a>
  115. }
  116. },
  117. {
  118. title: 'H5路径',
  119. dataIndex: 'h5Path',
  120. key: 'h5Path',
  121. width: 350,
  122. ellipsis: true,
  123. render: (_, records) => {
  124. const link = `https://home.zanxiangnet.com/test.html?id=${records.sign}&appId=${records.previewAppId}`
  125. return <a onClick={() => copy(link)}>{link}</a>
  126. }
  127. },
  128. {
  129. title: '项目组',
  130. dataIndex: 'projectGroupIdList',
  131. key: 'projectGroupIdList',
  132. width: 120,
  133. align: 'center',
  134. ellipsis: true,
  135. render: (v: { projectGroupName: string }[]) => v?.map(item => item?.projectGroupName)?.join('、') || '--'
  136. },
  137. {
  138. title: '客服号二维码',
  139. dataIndex: 'qrCodeList',
  140. key: 'qrCodeList',
  141. width: 250,
  142. render: (v: { urlList: string[] }[]) => v?.map(item => item?.urlList?.map((item, i) => <Image
  143. key={i}
  144. height={20}
  145. alt="basic"
  146. src={item}
  147. />)) || '--'
  148. },
  149. {
  150. title: '悬浮客服号二维码',
  151. dataIndex: 'qrCodeFloatList',
  152. key: 'qrCodeFloatList',
  153. width: 250,
  154. render: (v: { urlList: string[] }[]) => v?.map(item => item?.urlList?.map((item, i) => <Image
  155. key={i}
  156. height={20}
  157. alt="basic"
  158. src={item}
  159. />)) || '--'
  160. },
  161. {
  162. title: '创建人',
  163. dataIndex: 'createBy',
  164. key: 'createBy',
  165. align: 'center',
  166. width: 70
  167. },
  168. {
  169. title: '创建时间',
  170. dataIndex: 'createTime',
  171. key: 'createTime',
  172. align: 'center',
  173. width: 140,
  174. render: (value) => {
  175. return <span style={{ fontSize: 12 }}>{value}</span>
  176. }
  177. },
  178. {
  179. title: '操作',
  180. dataIndex: 'cz',
  181. key: 'cz',
  182. width: 250,
  183. fixed: 'right',
  184. render: (_, records) => {
  185. return <Flex gap={4}>
  186. <a onClick={() => handleEdit?.(records, true)}>复制</a>
  187. <a onClick={() => handleEdit?.(records)}>修改</a>
  188. {records?.previewAppId && <a onClick={() => handleCode?.(records.previewAppId, records.sign)}>小程序预览链接</a>}
  189. <Popconfirm
  190. title="确定删除?"
  191. onConfirm={() => { handleDel?.([records.id]) }}
  192. >
  193. <a style={{ color: 'red' }}>删除</a>
  194. </Popconfirm>
  195. </Flex>
  196. }
  197. },
  198. ]
  199. return arr
  200. }