index.tsx 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import { Button, Card, Input, message, Popconfirm, Select, Table } from "antd"
  2. import React, { useEffect, useState } from "react"
  3. import '../../tencentAdPutIn/index.less'
  4. import { delPageApi, getAdqLandingPageListApi, getWXDownPageAuthInfoListApi } from "@/services/adqV3/global";
  5. import { useAjax } from "@/Hook/useAjax";
  6. import { useModel } from "umi";
  7. import { SearchOutlined } from "@ant-design/icons";
  8. import columns from "./tableConfig";
  9. import CopyPage from "./copyPage";
  10. interface AjaxProps {
  11. pageNum: number;
  12. pageSize: number;
  13. accountId?: number;
  14. pageName?: string;
  15. pageType?: string;
  16. pageStatus?: string;
  17. ownerUid?: number;
  18. }
  19. /**
  20. * 原生推广页
  21. * @returns
  22. */
  23. const WechatCanvasPage: React.FC = () => {
  24. /********************************/
  25. const { getAllUserAccount } = useModel('useLaunchAdq.useAdAuthorize')
  26. const [queryParamsNew, setQueryParamsNew] = useState<AjaxProps>({ pageNum: 1, pageSize: 20 })
  27. const [visible, setVisible] = useState<boolean>(false)
  28. const [pageData, setPageData] = useState<any>()
  29. const [selectedRows, setSelectedRows] = useState<any[]>([])
  30. const getAdqLandingPageList = useAjax((params) => getAdqLandingPageListApi(params))
  31. const getWXDownPageAuthInfoList = useAjax((params) => getWXDownPageAuthInfoListApi(params))
  32. const delPage = useAjax((params) => delPageApi(params))
  33. /********************************/
  34. useEffect(() => {
  35. // 获取账户列表
  36. getAllUserAccount.run().then(res => {
  37. setQueryParamsNew({ ...queryParamsNew, accountId: res?.data?.[0]?.accountId })
  38. })
  39. }, [])
  40. // 落地页列表
  41. useEffect(() => {
  42. if (queryParamsNew?.accountId) {
  43. getAdqLandingPageList.run(queryParamsNew)
  44. }
  45. }, [queryParamsNew])
  46. // 授权落地页
  47. useEffect(() => {
  48. if (queryParamsNew?.accountId) {
  49. getWXDownPageAuthInfoList.run(queryParamsNew.accountId)
  50. }
  51. }, [queryParamsNew.accountId])
  52. // 批量复制
  53. const handleCopy = (data: any) => {
  54. setVisible(true)
  55. setPageData(data)
  56. }
  57. const handleDel = () => {
  58. delPage.run({ accountId: queryParamsNew.accountId, pageIds: selectedRows.map(item => item.pageId) }).then(res => {
  59. if (res?.length === 0) {
  60. message.success('删除成功,结果可能会延迟几分钟返回')
  61. getAdqLandingPageList.refresh()
  62. setSelectedRows([])
  63. }
  64. })
  65. }
  66. return <Card
  67. className="cardResetCss"
  68. title={<div className="flexStart" style={{ gap: 8 }}>
  69. <Select
  70. placeholder="请先选择媒体账户"
  71. maxTagCount={1}
  72. style={{ width: 250 }}
  73. autoClearSearchValue={false}
  74. filterOption={(input: any, option: any) => {
  75. let newInput: string[] = input ? input?.split(/[,,\n\s]+/ig).filter((item: any) => item) : []
  76. return newInput?.some(val => option!.children?.toString().toLowerCase()?.includes(val))
  77. }}
  78. value={queryParamsNew.accountId}
  79. onChange={(e) => {
  80. setQueryParamsNew({ ...queryParamsNew, accountId: e, ownerUid: undefined })
  81. }}
  82. showSearch
  83. >
  84. {getAllUserAccount?.data?.data?.map((item: any) => <Select.Option value={item.accountId} key={item.id}>{item.remark ? item.accountId + '_' + item.remark : item.accountId}</Select.Option>)}
  85. </Select>
  86. {queryParamsNew?.accountId && <>
  87. <Select
  88. placeholder='选择原生页授权方信息'
  89. style={{ width: 210 }}
  90. showSearch
  91. filterOption={(input: any, option: any) =>
  92. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  93. }
  94. allowClear
  95. onChange={(value) => {
  96. setQueryParamsNew({ ...queryParamsNew, pageNum: 1, ownerUid: value })
  97. }}
  98. loading={getWXDownPageAuthInfoList.loading}
  99. value={queryParamsNew?.ownerUid}
  100. dropdownMatchSelectWidth={false}
  101. >
  102. {getWXDownPageAuthInfoList.data?.map((item: { accountId: number; accountName: string }) => {
  103. return <Select.Option value={item.accountId} key={item.accountId}>{item.accountName}({item.accountId})</Select.Option>
  104. })}
  105. </Select>
  106. <Input value={queryParamsNew?.pageName} style={{ width: 180 }} allowClear placeholder='请输入落地页名称' onChange={(e) => setQueryParamsNew({ ...queryParamsNew, pageNum: 1, pageName: e.target.value })} />
  107. </>}
  108. <Button type="primary" icon={<SearchOutlined />} loading={getAdqLandingPageList.loading} onClick={() => getAdqLandingPageList.refresh()}>刷新</Button>
  109. <Popconfirm
  110. title="确定删除?"
  111. onConfirm={() => handleDel?.()}
  112. >
  113. <Button danger loading={delPage.loading} disabled={selectedRows.length === 0 || !!queryParamsNew?.ownerUid}>删除</Button>
  114. </Popconfirm>
  115. </div>}
  116. >
  117. <Table
  118. columns={columns(handleCopy, () => getAdqLandingPageList.refresh(), queryParamsNew.accountId)}
  119. dataSource={getAdqLandingPageList.data?.records}
  120. size="small"
  121. loading={getAdqLandingPageList?.loading || getAllUserAccount.loading}
  122. scroll={{ y: 600 }}
  123. bordered
  124. rowKey={'pageId'}
  125. pagination={{
  126. total: getAdqLandingPageList.data?.total,
  127. defaultPageSize: 20,
  128. current: getAdqLandingPageList.data?.current,
  129. pageSize: getAdqLandingPageList.data?.size
  130. }}
  131. onChange={(pagination) => {
  132. const { current, pageSize } = pagination
  133. setQueryParamsNew({ ...queryParamsNew, pageNum: current as number, pageSize: pageSize as number || 20 })
  134. }}
  135. rowSelection={{
  136. selectedRowKeys: selectedRows.map(item => item.pageId),
  137. getCheckboxProps: (record: any) => {
  138. return {
  139. disabled: !!queryParamsNew?.ownerUid || record?.canvasType === 'COMMON_PAGE'
  140. }
  141. },
  142. onSelect: (record: { pageId: number }, selected: boolean) => {
  143. if (selected) {
  144. selectedRows.push({ ...record })
  145. setSelectedRows([...selectedRows])
  146. } else {
  147. let newSelectAccData = selectedRows.filter((item: { pageId: number }) => item.pageId !== record.pageId)
  148. setSelectedRows([...newSelectAccData])
  149. }
  150. },
  151. onSelectAll: (selected: boolean, selectedRowss: { pageId: number }[], changeRows: { pageId: number }[]) => {
  152. if (selected) {
  153. let newSelectAccData = [...selectedRows]
  154. changeRows.forEach((item: { pageId: number }) => {
  155. let index = newSelectAccData.findIndex((ite: { pageId: number }) => ite.pageId === item.pageId)
  156. if (index === -1) {
  157. let data: any = { ...item }
  158. newSelectAccData.push(data)
  159. }
  160. })
  161. setSelectedRows([...newSelectAccData])
  162. } else {
  163. let newSelectAccData = selectedRows.filter((item: { pageId: number }) => {
  164. let index = changeRows.findIndex((ite: { pageId: number }) => ite.pageId === item.pageId)
  165. if (index !== -1) {
  166. return false
  167. } else {
  168. return true
  169. }
  170. })
  171. setSelectedRows([...newSelectAccData])
  172. }
  173. }
  174. }}
  175. />
  176. {visible && <CopyPage
  177. accountId={queryParamsNew.accountId as number}
  178. pageData={pageData}
  179. visible={visible}
  180. onClose={() => {
  181. setVisible(false)
  182. setPageData(undefined)
  183. }}
  184. onChange={() => {
  185. setVisible(false)
  186. setPageData(undefined)
  187. getAdqLandingPageList.refresh()
  188. }}
  189. />}
  190. </Card>
  191. }
  192. export default WechatCanvasPage