selectCopyWriting.tsx 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { delCopyWritingApi, getCopyWritingListApi } from "@/services/adqV3/global"
  3. import { PlusOutlined, SearchOutlined } from "@ant-design/icons"
  4. import { Button, Input, message, Modal, Select, Space, Table } from "antd"
  5. import React, { useEffect, useState } from "react"
  6. import ModifyCopyWriting from "./modifyCopyWriting"
  7. import columns from "./tableConfig"
  8. import '../../tencentAdPutIn/index.less'
  9. import { getErpUserAll } from "@/services/launchAdq/adq"
  10. interface Props {
  11. onChange?: (value: string[]) => void
  12. onClick?: React.MouseEventHandler<HTMLElement>
  13. }
  14. const SelectCopyWriting: React.FC<Props> = ({ onChange, onClick }) => {
  15. /**********************************/
  16. const [visible, setVisible] = useState<boolean>(false)
  17. const [queryForm, setQueryForm] = useState<{ category?: string, content?: string, createBy?: number, pageNum: number, pageSize: number }>({ pageNum: 1, pageSize: 20 })
  18. const [queryFormNew, setQueryFormNew] = useState<{ category?: string, content?: string, createBy?: number, pageNum: number, pageSize: number }>({ pageNum: 1, pageSize: 20 })
  19. const [initialValues, setInitialValues] = useState<any>()
  20. const [mvisible, setMVisible] = useState<boolean>(false)
  21. const [selectedRows, setSelectedRows] = useState<any[]>([])
  22. const getCopyWritingList = useAjax((params) => getCopyWritingListApi(params))
  23. const delCopyWriting = useAjax((params) => delCopyWritingApi(params))
  24. const allOfMember = useAjax(() => getErpUserAll())
  25. /**********************************/
  26. useEffect(() => {
  27. allOfMember.run()
  28. }, [])
  29. useEffect(() => {
  30. if (visible)
  31. getCopyWritingList.run(queryFormNew)
  32. }, [queryFormNew, visible])
  33. const del = (id: number) => {
  34. delCopyWriting.run(id).then(res => {
  35. if (res) {
  36. message.success('删除成功')
  37. getCopyWritingList.refresh()
  38. }
  39. })
  40. }
  41. const update = (data: any) => {
  42. setInitialValues(data)
  43. setMVisible(true)
  44. }
  45. const handleOk = () => {
  46. if (selectedRows.length > 0) {
  47. onChange?.(selectedRows.map(item => item.content))
  48. setSelectedRows([])
  49. setVisible(false)
  50. } else {
  51. message.error('请选择文案')
  52. }
  53. }
  54. return <>
  55. <Button type="link" style={{ padding: 0, fontSize: 12 }} onClick={(e) => {
  56. setVisible(true)
  57. onClick?.(e)
  58. }}>选择文案</Button>
  59. {visible && <Modal
  60. title={<strong>选择文案</strong>}
  61. open={visible}
  62. onCancel={() => {
  63. setVisible(false)
  64. setSelectedRows([])
  65. }}
  66. onOk={handleOk}
  67. className="modalResetCss"
  68. width={1000}
  69. >
  70. <Space style={{ width: '100%' }} direction="vertical">
  71. <Space>
  72. <Select
  73. showSearch
  74. placeholder="请选择创建人"
  75. onChange={(e) => setQueryForm({ ...queryForm, createBy: e, pageNum: 1 })}
  76. filterOption={(input, option) =>
  77. (option?.label as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  78. }
  79. allowClear
  80. style={{ width: 140 }}
  81. options={allOfMember?.data?.map((item: { userId: any; nickname: string }) => ({
  82. value: item.userId,
  83. label: item.nickname,
  84. }))}
  85. />
  86. <Input style={{ width: 200 }} placeholder="文案分类" value={queryForm?.category} allowClear onChange={(e) => setQueryForm({ ...queryForm, category: e.target.value, pageNum: 1 })} />
  87. <Input style={{ width: 200 }} placeholder="关键字" value={queryForm?.content} allowClear onChange={(e) => setQueryForm({ ...queryForm, content: e.target.value, pageNum: 1 })} />
  88. <Button type="primary" icon={<SearchOutlined />} onClick={() => setQueryFormNew({ ...queryForm })}>搜索</Button>
  89. <Button type="primary" icon={<PlusOutlined />} onClick={() => { setMVisible(true) }}>新增文案</Button>
  90. </Space>
  91. <Table
  92. columns={columns(del, update)}
  93. dataSource={getCopyWritingList.data?.records}
  94. size="small"
  95. loading={getCopyWritingList?.loading}
  96. scroll={{ y: 600, x: 850 }}
  97. bordered
  98. rowKey={'id'}
  99. pagination={{
  100. defaultPageSize: 20,
  101. current: getCopyWritingList.data?.current || 1,
  102. pageSize: getCopyWritingList.data?.size || 10,
  103. total: getCopyWritingList.data?.total || 0
  104. }}
  105. onChange={(pagination) => {
  106. const { current, pageSize } = pagination
  107. setQueryForm({ ...queryForm, pageNum: current || 1, pageSize: pageSize || 10 })
  108. setQueryFormNew({ ...queryForm, pageNum: current || 1, pageSize: pageSize || 10 })
  109. }}
  110. rowSelection={{
  111. selectedRowKeys: selectedRows.map(item => item.id.toString()),
  112. onSelect: (record: { id: number, mpName: string }, selected: boolean) => {
  113. if (selected) {
  114. selectedRows.push({ ...record })
  115. setSelectedRows([...selectedRows])
  116. } else {
  117. let newSelectAccData = selectedRows.filter((item: { id: number }) => item.id !== record.id)
  118. setSelectedRows([...newSelectAccData])
  119. }
  120. },
  121. onSelectAll: (selected: boolean, selectedRowss: { id: number }[], changeRows: { id: number }[]) => {
  122. if (selected) {
  123. let newSelectAccData = [...selectedRows]
  124. changeRows.forEach((item: { id: number }) => {
  125. let index = newSelectAccData.findIndex((ite: { id: number }) => ite.id === item.id)
  126. if (index === -1) {
  127. let data: any = { ...item }
  128. newSelectAccData.push(data)
  129. }
  130. })
  131. setSelectedRows([...newSelectAccData])
  132. } else {
  133. let newSelectAccData = selectedRows.filter((item: { id: number }) => {
  134. let index = changeRows.findIndex((ite: { id: number }) => ite.id === item.id)
  135. if (index !== -1) {
  136. return false
  137. } else {
  138. return true
  139. }
  140. })
  141. setSelectedRows([...newSelectAccData])
  142. }
  143. }
  144. }}
  145. />
  146. </Space>
  147. </Modal>}
  148. {/* 新增文案修改文案 */}
  149. {mvisible && <ModifyCopyWriting
  150. visible={mvisible}
  151. initialValues={initialValues}
  152. onChange={() => {
  153. setInitialValues(undefined)
  154. setMVisible(false)
  155. getCopyWritingList.refresh()
  156. }}
  157. onClose={() => {
  158. setInitialValues(undefined)
  159. setMVisible(false)
  160. }}
  161. />}
  162. </>
  163. }
  164. export default React.memo(SelectCopyWriting)