index.tsx 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import { PlusOutlined, QuestionCircleFilled, SearchOutlined } from '@ant-design/icons';
  2. import { Button, Card, Input, Table, Tooltip } from 'antd';
  3. import React, { useEffect, useState } from 'react';
  4. import AddUserRotatePolicy from './addUserPotatePolicy';
  5. import { useAjax } from '@/Hook/useAjax';
  6. import { getUserRotatePolicyListApi } from '@/services/adqV3/global';
  7. import '../../../tencentAdPutIn/index.less'
  8. /**
  9. * 客服号轮换策略
  10. * @returns
  11. */
  12. const UserRotatePolicy: React.FC = () => {
  13. /*********************************************/
  14. const [queryParamsNew, setQueryParamsNew] = useState<{ pageNum: number, pageSize: number, policyName?: string }>({ pageNum: 1, pageSize: 20 })
  15. const [queryParams, setQueryParams] = useState<{ pageNum: number, pageSize: number, policyName?: string }>({ pageNum: 1, pageSize: 20 })
  16. const [visible, setVisible] = useState<boolean>(false);
  17. const [editData, setEditData] = useState<any>();
  18. const getUserRotatePolicyList = useAjax((params) => getUserRotatePolicyListApi(params))
  19. /*********************************************/
  20. useEffect(() => {
  21. getUserRotatePolicyList.run(queryParamsNew)
  22. }, [queryParamsNew]);
  23. const editUR = (data: any) => {
  24. setEditData(data)
  25. setVisible(true)
  26. }
  27. return <Card
  28. className="cardResetCss"
  29. >
  30. <div className="flexStart" style={{ gap: 8, marginBottom: 16 }}>
  31. <Input placeholder='策略名称' style={{ width: 200 }} allowClear value={queryParams?.policyName} onChange={(e) => setQueryParams({ ...queryParams, policyName: e.target.value })} />
  32. <Button type="primary" icon={<SearchOutlined />} loading={false} onClick={() => setQueryParamsNew({ ...queryParams, pageNum: 1 })}>搜索</Button>
  33. <Button
  34. type="primary"
  35. icon={<PlusOutlined />}
  36. onClick={() => {
  37. setVisible(true)
  38. }}
  39. >新增</Button>
  40. </div>
  41. <Table
  42. columns={[
  43. {
  44. title: '操作',
  45. dataIndex: 'cz',
  46. key: 'cz',
  47. width: 60,
  48. align: 'center',
  49. render(_, record) {
  50. return <a style={{ fontSize: 12 }} onClick={() => editUR(record)}>修改</a>
  51. },
  52. },
  53. {
  54. title: '策略名称',
  55. dataIndex: 'policyName',
  56. key: 'policyName',
  57. width: 110,
  58. ellipsis: true,
  59. align: 'center'
  60. },
  61. {
  62. title: <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
  63. <span>加粉成本的计算周期</span>
  64. <Tooltip title="/分钟,必须 >= 20,且必须是 10 的整数倍数">
  65. <QuestionCircleFilled />
  66. </Tooltip>
  67. </div>,
  68. dataIndex: 'addCostCalculationCycle',
  69. key: 'addCostCalculationCycle',
  70. width: 90,
  71. align: 'center',
  72. render(value) {
  73. if (value || value === 0) return value
  74. return '--'
  75. },
  76. },
  77. {
  78. title: <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
  79. <span>加粉成本异常值</span>
  80. <Tooltip title="单位:/分">
  81. <QuestionCircleFilled />
  82. </Tooltip>
  83. </div>,
  84. dataIndex: 'addCostException',
  85. key: 'addCostException',
  86. width: 90,
  87. align: 'center',
  88. render(value) {
  89. if (value || value === 0) return value
  90. return '--'
  91. },
  92. },
  93. {
  94. title: <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
  95. <span>有消耗无加粉异常</span>
  96. <Tooltip title="单位:/分">
  97. <QuestionCircleFilled />
  98. </Tooltip>
  99. </div>,
  100. dataIndex: 'noFansCostValue',
  101. key: 'noFansCostValue',
  102. width: 90,
  103. align: 'center',
  104. render(value) {
  105. if (value || value === 0) return value
  106. return '--'
  107. },
  108. },
  109. {
  110. title: <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
  111. <span>单号单日最小加粉数量</span>
  112. <Tooltip title="默认20,加粉数少于该值永远不触发风控">
  113. <QuestionCircleFilled />
  114. </Tooltip>
  115. </div>,
  116. dataIndex: 'minAddFansCount',
  117. key: 'minAddFansCount',
  118. width: 90,
  119. align: 'center',
  120. render(value) {
  121. if (value || value === 0) return value
  122. return '--'
  123. },
  124. },
  125. {
  126. title: '单号单日最大加粉数量',
  127. dataIndex: 'maxAddFansCount',
  128. key: 'maxAddFansCount',
  129. width: 90,
  130. align: 'center',
  131. render(value) {
  132. if (value || value === 0) return value
  133. return '--'
  134. },
  135. },
  136. {
  137. title: '组内客服号在线数量',
  138. dataIndex: 'onlineCount',
  139. key: 'onlineCount',
  140. width: 90,
  141. align: 'center',
  142. render(value) {
  143. if (value || value === 0) return value
  144. return '--'
  145. },
  146. },
  147. {
  148. title: <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
  149. <span>客服组内滚动客服号的周期</span>
  150. <Tooltip title="/分钟,必须 >= 10">
  151. <QuestionCircleFilled />
  152. </Tooltip>
  153. </div>,
  154. dataIndex: 'rollingCustomerTime',
  155. key: 'rollingCustomerTime',
  156. width: 100,
  157. align: 'center',
  158. render(value) {
  159. if (value || value === 0) return value
  160. return '--'
  161. },
  162. },
  163. ]}
  164. dataSource={getUserRotatePolicyList.data?.records}
  165. size="small"
  166. loading={getUserRotatePolicyList?.loading}
  167. scroll={{ y: 600, x: 1100 }}
  168. rowKey={'id'}
  169. bordered
  170. pagination={{
  171. total: getUserRotatePolicyList.data?.total,
  172. defaultPageSize: 20,
  173. current: getUserRotatePolicyList.data?.current,
  174. pageSize: getUserRotatePolicyList.data?.size
  175. }}
  176. onChange={(pagination) => {
  177. const { current, pageSize } = pagination
  178. setQueryParamsNew({ ...queryParamsNew, pageNum: current as number, pageSize: pageSize as number || 20 })
  179. setQueryParams({ ...queryParams, pageNum: current as number, pageSize: pageSize as number || 20 })
  180. }}
  181. />
  182. {/* 新增修改客服号轮换策略 */}
  183. {visible && <AddUserRotatePolicy
  184. visible={visible}
  185. value={editData}
  186. onChange={() => {
  187. setVisible(false)
  188. getUserRotatePolicyList.refresh()
  189. }}
  190. onClose={() => {
  191. setVisible(false)
  192. }}
  193. />}
  194. </Card>
  195. };
  196. export default UserRotatePolicy;