assign.tsx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { getRoleUserListApi } from "@/services/gameData"
  3. import { addAssignUserApi, editAssignUserApi } from "@/services/gameData/roleOperate"
  4. import { Col, DatePicker, Form, Input, Modal, Row, Select, Space, message } from "antd"
  5. import React, { useEffect, useState } from "react"
  6. import moment from "moment"
  7. interface Props {
  8. data: any[]
  9. id?: number,
  10. startTime?: string,
  11. visible?: boolean
  12. onClose?: () => void
  13. onChange?: () => void
  14. }
  15. const Assign: React.FC<Props> = ({ startTime, id, visible, data, onClose, onChange }) => {
  16. /******************************************/
  17. const [gsList, setGsList] = useState<any[]>([])
  18. const [customerList, setCustomerList] = useState<any[]>([])
  19. const [operateList, setOperateList] = useState<any[]>([])
  20. const [form] = Form.useForm()
  21. const getRoleUserList = useAjax((params) => getRoleUserListApi(params))
  22. const addAssignUser = useAjax((params) => addAssignUserApi(params))
  23. const editAssignUser = useAjax((params) => editAssignUserApi(params))
  24. /******************************************/
  25. useEffect(() => {
  26. if (data?.length === 1) {
  27. const { customer_service_id, oper_user_id, gs_id } = data[0]
  28. console.log('----->', startTime)
  29. let time = startTime ? moment(startTime) : undefined
  30. form.setFieldsValue({ startTime: time, operUserId: oper_user_id?.toString(), customerServiceId: customer_service_id?.toString(), gsId: gs_id?.toString() })
  31. }
  32. }, [data])
  33. useEffect(() => {
  34. const getList = async () => {
  35. // 游戏GS
  36. let gs = await getRoleUserList.run({ authType: 'GS' })
  37. setGsList(gs ? Object.keys(gs)?.map(key => ({ userId: key, nickname: gs[key] })) : [])
  38. // 运营
  39. let operate = await getRoleUserList.run({ authType: 'OPERATE' })
  40. setOperateList(operate ? Object.keys(operate)?.map(key => ({ userId: key, nickname: operate[key] })) : [])
  41. // 客服
  42. let customer = await getRoleUserList.run({ authType: 'CUSTOMER' })
  43. setCustomerList(customer ? Object.keys(customer)?.map(key => ({ userId: key, nickname: customer[key] })) : [])
  44. }
  45. getList()
  46. }, [])
  47. const handleOk = async () => {
  48. let validate = await form.validateFields()
  49. const { startTime, ...par } = validate
  50. let params: any = { startTime: moment(startTime).format('YYYY-MM-DD'), ...par }
  51. let roleInfoAndAgentParamList = data.map(item => {
  52. return {
  53. gameId: item.role_reg_game_id,
  54. roleId: item.role_id,
  55. serverId: item.server_id,
  56. userId: item.association_user_id,
  57. regAgentId: item.agent_id
  58. }
  59. })
  60. params.roleInfoAndAgentParamList = roleInfoAndAgentParamList
  61. if (id) {
  62. params.id = id
  63. editAssignUser.run(params).then(res => {
  64. if (res) {
  65. message.success('更新成功')
  66. onChange?.()
  67. }
  68. })
  69. } else {
  70. addAssignUser.run(params).then(res => {
  71. if (res) {
  72. message.success('指派成功')
  73. onChange?.()
  74. }
  75. })
  76. }
  77. }
  78. return <Modal
  79. title={<Space>
  80. <strong>指派</strong>
  81. <span style={{ color: 'red' }}>操作有延时,请勿重复提交!!!</span>
  82. </Space>}
  83. visible={visible}
  84. onCancel={onClose}
  85. onOk={handleOk}
  86. confirmLoading={addAssignUser.loading}
  87. >
  88. <Form
  89. name="basicExportAssign"
  90. form={form}
  91. layout="vertical"
  92. autoComplete="off"
  93. >
  94. <Row gutter={[20, 0]}>
  95. <Col span={12}>
  96. <Form.Item label="开始时间" name="startTime" rules={[{ required: true, message: '请选择开始时间' }]}>
  97. <DatePicker style={{ width: '100%' }} />
  98. </Form.Item>
  99. </Col>
  100. <Col span={12}>
  101. <Form.Item label="运营" name="operUserId">
  102. <Select
  103. maxTagCount={1}
  104. showSearch
  105. style={{ width: '100%' }}
  106. allowClear
  107. placeholder={'请选择运营'}
  108. filterOption={(input, option) =>
  109. (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  110. }
  111. >
  112. {operateList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
  113. </Select>
  114. </Form.Item>
  115. </Col>
  116. <Col span={12}>
  117. <Form.Item label="客服" name="customerServiceId">
  118. <Select
  119. maxTagCount={1}
  120. showSearch
  121. style={{ width: '100%' }}
  122. allowClear
  123. placeholder={'请选择客服'}
  124. filterOption={(input, option) =>
  125. (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  126. }
  127. >
  128. {customerList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
  129. </Select>
  130. </Form.Item>
  131. </Col>
  132. <Col span={12}>
  133. <Form.Item label="游戏GS" name="gsId">
  134. <Select
  135. maxTagCount={1}
  136. showSearch
  137. style={{ width: '100%' }}
  138. allowClear
  139. placeholder={'请选择游戏GS'}
  140. filterOption={(input, option) =>
  141. (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  142. }
  143. >
  144. {gsList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
  145. </Select>
  146. </Form.Item>
  147. </Col>
  148. <Col span={24}>
  149. <Form.Item label="备注" name="remark">
  150. <Input.TextArea placeholder="请输入备注" />
  151. </Form.Item>
  152. </Col>
  153. </Row>
  154. </Form>
  155. </Modal>
  156. }
  157. export default React.memo(Assign)