addAccountToGroup.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { getAdAccountApi, getAllUserAccountApi } from "@/services/launchAdq/adAuthorize"
  3. import { addNewAccountToGroupApi, getAccountListApi, getGroupListApi } from "@/services/launchAdq/subgroup"
  4. import { PlusOutlined } from "@ant-design/icons"
  5. import { Button, Form, message, Modal, Select, Transfer } from "antd"
  6. import React, { useEffect, useState } from "react"
  7. import { useModel } from "umi"
  8. interface Props {
  9. onChange?: () => void
  10. }
  11. /**
  12. * 新增至分组
  13. * @param props
  14. * @returns
  15. */
  16. const AddAccountToGroup: React.FC<Props> = (props) => {
  17. /*********************************/
  18. const { onChange } = props
  19. const [form] = Form.useForm();
  20. let currGroupId = Form.useWatch('currGroupId', form)
  21. const [visible, setVisible] = useState<boolean>(false)
  22. const [mockData, setMockData] = useState<{ key: string, title: string }[]>([])
  23. const { getGroupList } = useModel('useLaunchAdq.useAdAuthorize')
  24. const getAccountList = useAjax((params) => getAccountListApi(params))
  25. const addNewAccountToGroup = useAjax((params) => addNewAccountToGroupApi(params))
  26. const getAllUserAccount = useAjax(() => getAllUserAccountApi())
  27. /*********************************/
  28. useEffect(() => {
  29. if (currGroupId) {
  30. getAccountList.run(currGroupId).then(res => {
  31. console.log(res);
  32. form.setFieldsValue({ accountIds: res?.adAccountList?.map((item: { accountId: string }) => item.accountId.toString()) || [] })
  33. })
  34. }
  35. }, [currGroupId])
  36. const addAccountToGroupHandle = () => {
  37. setVisible(true)
  38. getAllUserAccount.run().then(res => {
  39. setMockData(res?.map((item: { accountId: string, remark: string }) => ({ key: item.accountId.toString(), title: `${item.accountId}${item.remark ? '_' + item.remark : ''}` })))
  40. })
  41. }
  42. const handleOk = () => {
  43. form.validateFields().then(values => {
  44. addNewAccountToGroup.run(values).then(res => {
  45. message.success('修改成功')
  46. closeHandle()
  47. onChange?.()
  48. })
  49. })
  50. }
  51. const closeHandle = () => {
  52. setVisible(false)
  53. form.setFieldsValue({ currGroupId: undefined, accountIds: undefined })
  54. }
  55. return <>
  56. <Button onClick={addAccountToGroupHandle} type='primary' icon={<PlusOutlined />}>修改分组中账户</Button>
  57. {visible && <Modal
  58. title='修改分组中账户'
  59. visible={visible}
  60. onOk={handleOk}
  61. onCancel={closeHandle}
  62. confirmLoading={addNewAccountToGroup.loading}
  63. >
  64. <Form
  65. form={form}
  66. labelCol={{ span: 4 }}
  67. colon={false}
  68. initialValues={{}}
  69. >
  70. <Form.Item label={<strong>分组</strong>} name='currGroupId' rules={[{ required: true, message: '请选择分组' }]}>
  71. <Select placeholder='请选择分组'>
  72. {getGroupList?.data?.map((item: { groupName: string, groupId: number }) => <Select.Option value={item.groupId} key={item.groupId}>{item.groupName}</Select.Option>)}
  73. </Select>
  74. </Form.Item>
  75. {currGroupId && <Form.Item label={<strong>账号</strong>} name='accountIds' valuePropName='targetKeys' rules={[{ required: true, message: '请选择账号' }]}>
  76. <Transfer
  77. dataSource={mockData}
  78. showSearch
  79. titles={['未选', '已选']}
  80. oneWay
  81. filterOption={(input: any, option: any) => {
  82. let newInput: string[] = input ? input?.split(/[,,\n\s]+/ig).filter((item: any) => item) : []
  83. return newInput?.some(val => option!.title?.toString().toLowerCase()?.includes(val))
  84. }}
  85. listStyle={{ minHeight: 320 }}
  86. render={item => item.title}
  87. />
  88. </Form.Item>}
  89. </Form>
  90. </Modal>}
  91. </>
  92. }
  93. export default React.memo(AddAccountToGroup)