index.tsx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { RoleRechargeRankingProps, getRoleRechargeRankingListApi } from "@/services/gameData/roleOperate"
  3. import React, { useEffect, useState } from "react"
  4. import moment from "moment"
  5. import TableData from "../../components/TableData"
  6. import QueryForm from "@/components/QueryForm"
  7. import { getPresetsRanking } from "@/components/QueryForm/const"
  8. import columns12 from "./tableConfig"
  9. import SendMail from "./sendMail"
  10. import SendPack from "./sendPack"
  11. import { Button, Space } from "antd"
  12. import RoleCz from "./roleCz"
  13. import Assign from "./assign"
  14. import ChangeLog from "./changeLog"
  15. import MsgPushModal from "./msgPushModal"
  16. import TaskList from "./taskList"
  17. let ajax: any = null
  18. const RoleRechargeRanking: React.FC = () => {
  19. /**********************************/
  20. const [queryForm, setQueryForm] = useState<RoleRechargeRankingProps>({ pageNum: 1, pageSize: 50, sourceSystem: 'ZX_ONE', rechargeBeginDate: moment().format('YYYY-MM-DD'), rechargeEndDate: moment().format('YYYY-MM-DD') })
  21. const [data, setData] = useState<any[]>([])
  22. const [selectedRowKeys, setSelectedRowKeys] = useState<any[]>([])
  23. const [sendEmailvisible, setSendEmailVisible] = useState<boolean>(false)
  24. const [sendPackvisible, setSendPackVisible] = useState<boolean>(false)
  25. const [assignvisible, setAssignVisible] = useState<boolean>(false)
  26. const [changeLogVisible, setChangeLogVisible] = useState<boolean>(false)
  27. const [czvisible, setCzVisible] = useState<boolean>(false)
  28. const [msgVisible, setMsgVisible] = useState<boolean>(false)
  29. const getRoleRechargeRankingList = useAjax((params) => getRoleRechargeRankingListApi(params))
  30. ajax = getRoleRechargeRankingList
  31. /**********************************/
  32. useEffect(() => {
  33. getRoleRechargeRankingList.run(queryForm)
  34. }, [queryForm])
  35. const sendEmail = (data: any[]) => {
  36. setData(data)
  37. setSendEmailVisible(true)
  38. }
  39. const sendPack = (data: any[]) => {
  40. setData(data)
  41. setSendPackVisible(true)
  42. }
  43. const handleIsTrue = (value: string, data: any, type: string) => {
  44. switch (type) {
  45. case 'isChangeGameType': // 是否转端
  46. break
  47. case 'isAddCorpWechat': // 是否添加企微
  48. break
  49. case 'isRemoveGame': // 是否退游
  50. break
  51. case 'isWakeUp': // 是否唤醒
  52. break
  53. }
  54. }
  55. const handleSave = (row: any) => {
  56. // const hide = message.loading(`广告“${row.adgroupId}”广告名称修改成<${row.adgroupName}>,修改中`, 0, () => {
  57. // message.success('修改成功');
  58. // });
  59. // editAdqAdgroups.run({ adgroupIds: [row.adgroupId], adgroupName: row.adgroupName }).then(res => {
  60. // message.success('修改广告名称成功')
  61. // listAjax.refresh()
  62. // hide()
  63. // })
  64. }
  65. const roleHandle = (data: any[]) => {
  66. setData(data)
  67. setCzVisible(true)
  68. }
  69. // 指派
  70. const assignHandle = (data: any[]) => {
  71. setData(data)
  72. setAssignVisible(true)
  73. }
  74. const changeLog = (data: any[]) => {
  75. setData(data)
  76. setChangeLogVisible(true)
  77. }
  78. return <div>
  79. <TableData
  80. czChild={<Space>
  81. <Button type="primary" size="small" disabled={selectedRowKeys.length === 0} onClick={() => sendPack(selectedRowKeys)}>批量发送礼包</Button>
  82. <Button type="primary" size="small" disabled={selectedRowKeys.length === 0} onClick={() => sendEmail(selectedRowKeys)}>批量发送邮件</Button>
  83. {/* <Button type="primary" size="small" disabled={selectedRowKeys.length === 0} onClick={() => roleHandle(selectedRowKeys)}>批量角色操作</Button> */}
  84. <Button type="primary" size="small" disabled={selectedRowKeys.length === 0} onClick={() => assignHandle(selectedRowKeys)}>批量指派</Button>
  85. <Button type="primary" size="small" disabled={selectedRowKeys.length === 0} onClick={() => setMsgVisible(true)}>游戏内消息推送</Button>
  86. <Button type="primary" danger size="small" disabled={selectedRowKeys.length === 0} onClick={() => setSelectedRowKeys([])}>清空选择</Button>
  87. <TaskList sourceSystem={queryForm.sourceSystem} />
  88. </Space>}
  89. leftChild={<QueryForm
  90. initialValues={{ sourceSystem: 'ZX_ONE', rechargeDay: [moment(), moment()] }}
  91. onChange={(data: any) => {
  92. setSelectedRowKeys([])
  93. const { rechargeDay, createRoleDay, superParentGameId, mobile, regPayIntervalTime, LastRechargeDay, lastActiveTime, agentId, regStartDay, regEndDay, ...par } = data
  94. let newQueryForm = JSON.parse(JSON.stringify(queryForm))
  95. newQueryForm.pageNum = 1
  96. newQueryForm.phone = mobile
  97. newQueryForm.superGameId = superParentGameId
  98. newQueryForm.agentIds = agentId
  99. newQueryForm.registerTimeMin = regStartDay
  100. newQueryForm.registerTimeMax = regEndDay
  101. if (rechargeDay && rechargeDay?.length === 2) {
  102. newQueryForm['rechargeBeginDate'] = moment(rechargeDay[0]).format('YYYY-MM-DD')
  103. newQueryForm['rechargeEndDate'] = moment(rechargeDay[1]).format('YYYY-MM-DD')
  104. } else {
  105. delete newQueryForm['rechargeBeginDate']
  106. delete newQueryForm['rechargeEndDate']
  107. }
  108. if (createRoleDay && createRoleDay?.length === 2) {
  109. newQueryForm['createRoleBeginDate'] = moment(createRoleDay[0]).format('YYYY-MM-DD')
  110. newQueryForm['createRoleEndDate'] = moment(createRoleDay[1]).format('YYYY-MM-DD')
  111. } else {
  112. delete newQueryForm['createRoleBeginDate']
  113. delete newQueryForm['createRoleEndDate']
  114. }
  115. if (lastActiveTime && lastActiveTime?.length === 2) {
  116. newQueryForm['lastActiveTimeMin'] = moment(lastActiveTime[0]).format('YYYY-MM-DD')
  117. newQueryForm['lastActiveTimeMax'] = moment(lastActiveTime[1]).format('YYYY-MM-DD')
  118. } else {
  119. delete newQueryForm['lastActiveTimeMin']
  120. delete newQueryForm['lastActiveTimeMax']
  121. }
  122. if (LastRechargeDay && LastRechargeDay?.length === 2) {
  123. newQueryForm['roleLastPayTimeMin'] = moment(LastRechargeDay[0]).format('YYYY-MM-DD')
  124. newQueryForm['roleLastPayTimeMax'] = moment(LastRechargeDay[1]).format('YYYY-MM-DD')
  125. } else {
  126. delete newQueryForm['roleLastPayTimeMin']
  127. delete newQueryForm['roleLastPayTimeMax']
  128. }
  129. if (regPayIntervalTime?.length > 0 && (regPayIntervalTime[0] || regPayIntervalTime[1])) {
  130. newQueryForm.totalRechargeMin = regPayIntervalTime[0]
  131. newQueryForm.totalRechargeMax = regPayIntervalTime[1]
  132. }
  133. setQueryForm({ ...newQueryForm, ...par })
  134. }}
  135. isSource
  136. rechargeDay={{ ranges: getPresetsRanking() }}
  137. isCreateRoleDay={{ ranges: getPresetsRanking() }}
  138. LastRechargeDay={{}}
  139. isSuperParentGameId
  140. isParentIds
  141. isGameIds
  142. isIsChange
  143. isMobile
  144. isSysUserId
  145. isGameRoleName
  146. isGameRoleId
  147. isIsSendMail
  148. isWeChatCompany
  149. isWeChat
  150. isCustomerServerId
  151. isOperatorId
  152. isGsId
  153. isVipLevel
  154. isServerIds
  155. isIsMergeServer
  156. isRemoveGame
  157. isRemoveGameForSystem
  158. isPayIntervalTime={{ tips: '角色累计充值金额区间(单位:元)' }}
  159. isAddCorpWechat
  160. isWakeUp
  161. isUserPhoneStatus
  162. isOs
  163. isRechargeAmountWithin24h
  164. isRechargeTotalAmountWithin24h
  165. isLastActiveTime={{}}
  166. isAgentId
  167. isRegisterType
  168. isRegDay={{}}
  169. isRoleLevel
  170. isIpCity
  171. isIpProv
  172. isLoginIpCity
  173. isLoginIpProv
  174. />}
  175. scroll={{ x: 1000, y: 600 }}
  176. ajax={getRoleRechargeRankingList}
  177. fixed={{ left: 2, right: 1 }}
  178. dataSource={getRoleRechargeRankingList?.data?.records?.map((item: any, index: number) => ({ ...item, id: Number(queryForm.pageNum.toString() + index.toString()) }))}
  179. page={getRoleRechargeRankingList?.data?.current || 1}
  180. pageSize={getRoleRechargeRankingList?.data?.size || 20}
  181. total={getRoleRechargeRankingList?.data?.total || 0}
  182. title='角色充值排行榜'
  183. tips={<div>
  184. 角色VIP等级档位:(根据角色累计充值划分等级,上限不包含原则)
  185. <div>1档——【0,2000】</div>
  186. <div>2档——【2000,5000】</div>
  187. <div>3档——【5000,10000】</div>
  188. <div>4档——【10000,20000】</div>
  189. <div>5档——【20000,50000】</div>
  190. <div>6档——【50000,+∞】</div>
  191. </div>}
  192. onChange={(props: any) => {
  193. let { pagination, sortData } = props
  194. let { current, pageSize } = pagination
  195. let newQueryForm = JSON.parse(JSON.stringify(queryForm))
  196. if (sortData && sortData?.order) {
  197. newQueryForm['sortType'] = sortData?.order === 'ascend' ? 'asc' : 'desc'
  198. newQueryForm['sortFiled'] = sortData?.field
  199. } else {
  200. delete newQueryForm['sortType']
  201. delete newQueryForm['sortFiled']
  202. }
  203. newQueryForm.pageNum = current
  204. newQueryForm.pageSize = pageSize
  205. setQueryForm({ ...newQueryForm })
  206. }}
  207. rowSelection={{
  208. getCheckboxProps: (record: any) => ({
  209. disabled: selectedRowKeys?.length > 0 && record.role_reg_game_id !== (selectedRowKeys[0] as any).role_reg_game_id
  210. }),
  211. selectedRowKeys: selectedRowKeys.map((item: any) => item?.id.toString()),
  212. // onChange: (selectedRowKeys: React.Key[], selectedRows: any[]) => {
  213. // setSelectedRowKeys(selectedRows)
  214. // },
  215. onSelect: (record: any, selected: boolean, selectedRows: any) => {
  216. let newSelectedRowKeys: any[] = JSON.parse(JSON.stringify(selectedRowKeys))
  217. if (selected) {
  218. newSelectedRowKeys.push(record)
  219. } else {
  220. newSelectedRowKeys = newSelectedRowKeys.filter(item => item.id != record.id)
  221. }
  222. setSelectedRowKeys(newSelectedRowKeys)
  223. },
  224. onSelectAll: (selected: boolean, selectedRows: any, changeRows: any) => {
  225. let newSelectedRowKeys: any[] = JSON.parse(JSON.stringify(selectedRowKeys))
  226. let gameId = newSelectedRowKeys?.[0]?.role_reg_game_id || changeRows?.[0]?.role_reg_game_id
  227. if (selected) {
  228. newSelectedRowKeys = newSelectedRowKeys.concat(changeRows.filter((item: { role_reg_game_id: any }) => item.role_reg_game_id === gameId))
  229. } else {
  230. let changeRowsIds: any[] = changeRows.map((item: { id: any }) => item.id);
  231. newSelectedRowKeys = newSelectedRowKeys.filter(item => !changeRowsIds.includes(item.id))
  232. }
  233. setSelectedRowKeys(newSelectedRowKeys)
  234. }
  235. }}
  236. config={columns12(sendEmail, sendPack, handleIsTrue, handleSave, roleHandle, assignHandle, changeLog)}
  237. configName={'角色充值排行榜'}
  238. />
  239. {/* 发送邮件 */}
  240. {sendEmailvisible && <SendMail visible={sendEmailvisible} data={data} onClose={() => { setSendEmailVisible(false) }} onChange={() => { setSendEmailVisible(false); ajax?.refresh(); setSelectedRowKeys([]) }} />}
  241. {/* 发送礼包 */}
  242. {sendPackvisible && <SendPack visible={sendPackvisible} data={data} onClose={() => setSendPackVisible(false)} onChange={() => { setSendPackVisible(false); ajax?.refresh(); setSelectedRowKeys([]) }} />}
  243. {/* 角色操作 */}
  244. {czvisible && <RoleCz visible={czvisible} data={data} onClose={() => setCzVisible(false)} onChange={() => { setCzVisible(false); ajax?.refresh(); setSelectedRowKeys([]) }} />}
  245. {/* 指派 */}
  246. {assignvisible && <Assign visible={assignvisible} data={data} onClose={() => setAssignVisible(false)} onChange={() => { setAssignVisible(false); ajax?.refresh(); setSelectedRowKeys([]) }} />}
  247. {/* 变更记录 */}
  248. {changeLogVisible && <ChangeLog data={data?.[0]} visible={changeLogVisible} onClose={() => setChangeLogVisible(false)} />}
  249. {/* 游戏内消息推送 */}
  250. {msgVisible && <MsgPushModal
  251. gameId={selectedRowKeys?.[0].role_reg_game_id}
  252. roleRechargeRankingDTO={queryForm}
  253. roleIds={selectedRowKeys.map(item => item.role_id)}
  254. visible={msgVisible}
  255. onClose={() => {
  256. setMsgVisible(false)
  257. }}
  258. onChange={() => {
  259. setMsgVisible(false)
  260. setSelectedRowKeys([])
  261. }}
  262. />}
  263. </div>
  264. }
  265. export default RoleRechargeRanking