linkCode.tsx 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { getPackLinkCodeListApi, GetPackLinkCodeListProps, updatePackLinkCodeApi } from "@/services/gameData/roleOperate"
  3. import { Button, Col, DatePicker, Form, Input, message, Modal, Row, Select, Space } from "antd"
  4. import React, { useEffect, useState } from "react"
  5. import style from '../../components/TableData/index.less'
  6. import moment from "moment"
  7. import Tables from "@/components/Tables"
  8. import ModifyCode from "./modifyCode"
  9. import columnsPosCode from "./tableConfigCode"
  10. interface Props {
  11. data: any
  12. visible?: boolean
  13. onClose?: () => void
  14. }
  15. /**
  16. * 链接礼包码
  17. * @param param0
  18. * @returns
  19. */
  20. const LinkCode: React.FC<Props> = ({ data, visible, onClose }) => {
  21. /******************************/
  22. const [form] = Form.useForm()
  23. const [addCodevisible, setaddCodeVisible] = useState<boolean>(false)
  24. const [selectedRows, setSelectedRows] = useState<any[]>([])
  25. const [queryFrom, setQueryForm] = useState<GetPackLinkCodeListProps>({ pageNum: 1, pageSize: 20, linkId: data.id })
  26. const getPackLinkCodeList = useAjax((params) => getPackLinkCodeListApi(params))
  27. const updatePackLinkCode = useAjax((params) => updatePackLinkCodeApi(params))
  28. /******************************/
  29. const onFinish = (data: any) => {
  30. let oldQueryFrom = JSON.parse(JSON.stringify(queryFrom))
  31. let params = { ...oldQueryFrom, ...data, pageNum: 1 }
  32. if (params?.createTime?.length > 1) {
  33. params.createBeginTime = moment(params.createTime[0]).format('YYYY-MM-DD')
  34. params.createEndTime = moment(params.createTime[1]).format('YYYY-MM-DD')
  35. } else {
  36. delete params?.createBeginTime
  37. delete params?.createEndTime
  38. }
  39. if (params?.updateTime?.length > 1) {
  40. params.updateBeginTime = moment(params.updateTime[0]).format('YYYY-MM-DD')
  41. params.updateEndTime = moment(params.updateTime[1]).format('YYYY-MM-DD')
  42. } else {
  43. delete params?.updateBeginTime
  44. delete params?.updateEndTime
  45. }
  46. setQueryForm(params)
  47. }
  48. useEffect(() => {
  49. getPackLinkCodeList.run(queryFrom)
  50. }, [queryFrom])
  51. const handleEnabled = (checked: boolean) => {
  52. updatePackLinkCode.run({ ids: selectedRows.map(item => item.id), enabled: checked }).then(res => {
  53. if (res) {
  54. message.success('修改成功')
  55. getPackLinkCodeList.refresh()
  56. setSelectedRows([])
  57. }
  58. })
  59. }
  60. return <Modal
  61. title={<Space>
  62. <strong>{data?.gameName}({data?.codeTypeName}) 链接礼包码</strong>
  63. <a onClick={() => { setaddCodeVisible(true); }}>新增礼包码</a>
  64. {selectedRows?.length > 0 && <>
  65. <a style={{ color: '#52C41A' }} onClick={() => handleEnabled(true)}>修改为可用</a>
  66. <a style={{ color: 'red' }} onClick={() => handleEnabled(false)}>修改为不可用</a>
  67. </>}
  68. </Space>}
  69. visible={visible}
  70. onCancel={onClose}
  71. footer={null}
  72. width={1000}
  73. >
  74. <Space style={{ width: '100%' }} direction="vertical" size={10}>
  75. <Form layout="inline" className='queryForm' name="basicGameServer" form={form} onFinish={onFinish}>
  76. <Row gutter={[0, 6]}>
  77. <Col><Form.Item name='code'>
  78. <Input placeholder="礼包码" allowClear style={{ width: 120 }} />
  79. </Form.Item></Col>
  80. <Col><Form.Item name='enabled'>
  81. <Select
  82. showSearch
  83. style={{ width: 120 }}
  84. allowClear
  85. placeholder={'是否可用?'}
  86. filterOption={(input, option) =>
  87. (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
  88. }
  89. >
  90. <Select.Option value={1}>是</Select.Option>
  91. <Select.Option value={0}>否</Select.Option>
  92. </Select>
  93. </Form.Item></Col>
  94. <Col><Form.Item name='createTime'>
  95. <DatePicker.RangePicker style={{ width: 250 }} placeholder={['创建时间开始', '创建时间结束']} />
  96. </Form.Item></Col>
  97. <Col><Form.Item name='updateTime'>
  98. <DatePicker.RangePicker style={{ width: 250 }} placeholder={['更新时间开始', '更新时间结束']} />
  99. </Form.Item></Col>
  100. <Col>
  101. <Space>
  102. <Button type="primary" htmlType="submit">搜索</Button>
  103. <Button onClick={() => form.resetFields()}>重置</Button>
  104. </Space>
  105. </Col>
  106. </Row>
  107. </Form>
  108. <div className={`${style['small']}`}>
  109. <Tables
  110. className={`all_table content_table_body`}
  111. bordered
  112. sortDirections={['ascend', 'descend', null]}
  113. current={queryFrom.pageNum}
  114. pageSize={queryFrom.pageSize}
  115. columns={columnsPosCode(() => getPackLinkCodeList.refresh())}
  116. dataSource={getPackLinkCodeList?.data?.records}
  117. scroll={{ x: 900, y: 600 }}
  118. onChange={(pagination: any, filters: any, sortData: any) => {
  119. let { current, pageSize } = pagination
  120. let newQueryForm = JSON.parse(JSON.stringify(queryFrom))
  121. if (sortData && sortData?.order) {
  122. newQueryForm['sortType'] = sortData?.order === 'ascend' ? 'asc' : 'desc'
  123. newQueryForm['sortFiled'] = sortData?.field
  124. } else {
  125. delete newQueryForm['sortType']
  126. delete newQueryForm['sortFiled']
  127. }
  128. newQueryForm.pageNum = current
  129. newQueryForm.pageSize = pageSize
  130. setQueryForm({ ...newQueryForm })
  131. }}
  132. size="small"
  133. total={getPackLinkCodeList?.data?.total}
  134. loading={getPackLinkCodeList?.loading}
  135. defaultPageSize={20}
  136. rowSelection={{
  137. selectedRowKeys: selectedRows.map(item => item.id.toString()),
  138. onSelect: (record: { id: number }, selected: boolean) => {
  139. if (selected) {
  140. selectedRows.push({ ...record })
  141. setSelectedRows([...selectedRows])
  142. } else {
  143. let newSelectAccData = selectedRows.filter((item: { id: number }) => item.id !== record.id)
  144. setSelectedRows([...newSelectAccData])
  145. }
  146. },
  147. onSelectAll: (selected: boolean, selectedRowss: { id: number }[], changeRows: { id: number }[]) => {
  148. if (selected) {
  149. let newSelectAccData = [...selectedRows]
  150. changeRows.forEach((item: { id: number }) => {
  151. let index = newSelectAccData.findIndex((ite: { id: number }) => ite.id === item.id)
  152. if (index === -1) {
  153. let data: any = { ...item }
  154. newSelectAccData.push(data)
  155. }
  156. })
  157. setSelectedRows([...newSelectAccData])
  158. } else {
  159. let newSelectAccData = selectedRows.filter((item: { id: number }) => {
  160. let index = changeRows.findIndex((ite: { id: number }) => ite.id === item.id)
  161. if (index !== -1) {
  162. return false
  163. } else {
  164. return true
  165. }
  166. })
  167. setSelectedRows([...newSelectAccData])
  168. }
  169. }
  170. }}
  171. />
  172. </div>
  173. </Space>
  174. {/* 新增礼包码 */}
  175. {addCodevisible && <ModifyCode
  176. visible={addCodevisible}
  177. gameId={data.gameId}
  178. linkId={data.id}
  179. onChange={() => {
  180. setaddCodeVisible(false)
  181. getPackLinkCodeList.refresh()
  182. }}
  183. onClose={() => {
  184. setaddCodeVisible(false)
  185. }}
  186. />}
  187. </Modal>
  188. }
  189. export default React.memo(LinkCode)