changeLog.tsx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { GetAssignUser, delAssignUserApi, getAssignUserApi } from "@/services/gameData/roleOperate"
  3. import { Button, Drawer, Input, Popconfirm, Select, Space, Table, Tag, message } from "antd"
  4. import React, { useEffect, useState } from "react"
  5. import { columnsChangeLog } from "./tableConfig"
  6. import { getRoleUserListApi } from "@/services/gameData"
  7. import Assign from "./assign"
  8. interface Props {
  9. data: any
  10. visible?: boolean
  11. onClose?: () => void
  12. onChange?: () => void
  13. }
  14. const ChangeLog: React.FC<Props> = ({ data, visible, onClose, onChange }) => {
  15. /******************************/
  16. const [gsList, setGsList] = useState<any[]>([])
  17. const [customerList, setCustomerList] = useState<any[]>([])
  18. const [operateList, setOperateList] = useState<any[]>([])
  19. const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([])
  20. const [queryForm, setQueryForm] = useState<GetAssignUser>({ pageNum: 1, pageSize: 20 })
  21. const [assignvisible, setAssignVisible] = useState<boolean>(false)
  22. const [id, setId] = useState<number>()
  23. const [startTime, setStartTime] = useState<string>()
  24. const getAssignUser = useAjax((params) => getAssignUserApi(params))
  25. const delAssignUser = useAjax((params) => delAssignUserApi(params))
  26. const getRoleUserList = useAjax((params) => getRoleUserListApi(params))
  27. /******************************/
  28. useEffect(() => {
  29. const getList = async () => {
  30. // 游戏GS
  31. let gs = await getRoleUserList.run({ authType: 'GS' })
  32. setGsList(gs ? Object.keys(gs)?.map(key => ({ userId: key, nickname: gs[key] })) : [])
  33. // 运营
  34. let operate = await getRoleUserList.run({ authType: 'OPERATE' })
  35. setOperateList(operate ? Object.keys(operate)?.map(key => ({ userId: key, nickname: operate[key] })) : [])
  36. // 客服
  37. let customer = await getRoleUserList.run({ authType: 'CUSTOMER' })
  38. setCustomerList(customer ? Object.keys(customer)?.map(key => ({ userId: key, nickname: customer[key] })) : [])
  39. }
  40. getList()
  41. }, [])
  42. useEffect(() => {
  43. getAssignUser.run({
  44. ...queryForm,
  45. gameId: data.role_reg_game_id,
  46. roleId: data.role_id,
  47. serverId: data.server_id,
  48. userId: data.association_user_id,
  49. regAgentId: data.agent_id
  50. })
  51. }, [queryForm])
  52. const del = (ids: any[]) => {
  53. delAssignUser.run(ids.toString()).then(res => {
  54. if (res) {
  55. onChange?.()
  56. setSelectedRowKeys([])
  57. getAssignUser.refresh()
  58. message.success('删除成功')
  59. }
  60. })
  61. }
  62. const update = (data: any) => {
  63. setId(data.id)
  64. setStartTime(data.startTime)
  65. setAssignVisible(true)
  66. }
  67. return <Drawer
  68. title="变更记录"
  69. visible={visible}
  70. onClose={onClose}
  71. width={'90%'}
  72. >
  73. <Space style={{ width: '100%', marginBottom: 10 }}>
  74. <Select
  75. showSearch
  76. style={{ width: 120 }}
  77. allowClear
  78. placeholder={'请选择运营'}
  79. value={queryForm?.operUserId}
  80. onChange={(e) => setQueryForm({ ...queryForm, operUserId: e, pageNum: 1 })}
  81. filterOption={(input, option) =>
  82. (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  83. }
  84. >
  85. {operateList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
  86. </Select>
  87. <Select
  88. showSearch
  89. style={{ width: 120 }}
  90. allowClear
  91. placeholder={'请选择客服'}
  92. value={queryForm?.customerServiceId}
  93. onChange={(e) => setQueryForm({ ...queryForm, customerServiceId: e, pageNum: 1 })}
  94. filterOption={(input, option) =>
  95. (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  96. }
  97. >
  98. {customerList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
  99. </Select>
  100. <Select
  101. showSearch
  102. style={{ width: 120 }}
  103. allowClear
  104. value={queryForm?.gsId}
  105. onChange={(e) => setQueryForm({ ...queryForm, gsId: e, pageNum: 1 })}
  106. placeholder={'请选择游戏GS'}
  107. filterOption={(input, option) =>
  108. (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  109. }
  110. >
  111. {gsList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
  112. </Select>
  113. <Input placeholder="备注" allowClear value={queryForm?.remark} onChange={(e) => setQueryForm({ ...queryForm, remark: e.target.value, pageNum: 1 })} />
  114. </Space>
  115. <Table
  116. dataSource={getAssignUser?.data?.records}
  117. columns={columnsChangeLog(update, del)}
  118. loading={getAssignUser.loading}
  119. scroll={{ x: 380, y: 300 }}
  120. className="uuTable"
  121. rowKey={'id'}
  122. pagination={
  123. {
  124. total: getAssignUser?.data?.total || 0,//总共多少条数据,服务器给,设置后分页自动计算页数
  125. current: getAssignUser?.data?.current || 1,//当前页数,需state控制配合翻页
  126. pageSize: getAssignUser?.data?.size || 20,
  127. defaultCurrent: 1,//默认初始的当前页数
  128. pageSizeOptions: ['10', '20', '30', '40', '50', '60', '70', '80', '90', '100'],
  129. showTotal: (total) => <Tag color="cyan">总共{total}数据</Tag>,
  130. showSizeChanger: true, //手动开启条数筛选器,默认超过50条开启
  131. size: 'small',//设置分页尺寸
  132. onChange: (page: number, pageSize: number) => {
  133. setQueryForm({ ...queryForm, pageNum: page, pageSize })
  134. },
  135. showLessItems: true
  136. }
  137. }
  138. rowSelection={{
  139. selectedRowKeys,
  140. onChange: (selectedRowKeys: React.Key[]) => {
  141. setSelectedRowKeys(selectedRowKeys)
  142. },
  143. }}
  144. />
  145. {/* 指派 */}
  146. {assignvisible && <Assign id={id} startTime={startTime} visible={assignvisible} data={[data]} onClose={() => setAssignVisible(false)} onChange={() => { setAssignVisible(false); getAssignUser?.refresh(); }}/>}
  147. </Drawer>
  148. }
  149. export default React.memo(ChangeLog)