divideIntoGroups.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { addAccountToGroupApi, delAccountToGroupApi } from "@/services/launchAdq/subgroup"
  3. import { getArrDifference } from "@/utils/utils"
  4. import { UsergroupAddOutlined } from "@ant-design/icons"
  5. import { Button, Checkbox, message, Popover, Spin, Tooltip } from "antd"
  6. import React, { useEffect, useState } from "react"
  7. import { useModel } from "umi"
  8. interface Props {
  9. groupIds: number[],
  10. accountId: number,
  11. getAdAccountList?: any
  12. }
  13. /**
  14. * 账号分组至xxx
  15. * @param props
  16. */
  17. const DivideIntoGroups: React.FC<Props> = (props) => {
  18. /********************************/
  19. const { groupIds = [], accountId, getAdAccountList } = props
  20. const { getGroupList } = useModel('useLaunchAdq.useAdAuthorize')
  21. const [visible, setVisible] = useState<boolean>(false);
  22. const addAccountToGroup = useAjax((params) => addAccountToGroupApi(params))
  23. const delAccountToGroup = useAjax((params) => delAccountToGroupApi(params))
  24. /********************************/
  25. const handleVisibleChange = (newOpen: boolean) => {
  26. setVisible(newOpen)
  27. }
  28. const onChange = (checkedValues: any[]) => {
  29. let newGroupid = getArrDifference(checkedValues, groupIds)
  30. if (newGroupid.length > 0) {
  31. if (checkedValues.length > groupIds.length) { // 新增
  32. addAccountToGroup.run({ currGroupId: newGroupid[0], accountIds: [accountId] }).then(res => {
  33. getAdAccountList.refresh()
  34. })
  35. } else { // 删除
  36. delAccountToGroup.run({ currGroupId: newGroupid[0], accountIds: [accountId] }).then(res => {
  37. getAdAccountList.refresh()
  38. })
  39. }
  40. }
  41. }
  42. return <Popover
  43. content={<Spin spinning={delAccountToGroup.loading || addAccountToGroup.loading}>
  44. <Checkbox.Group style={{ width: '100%' }} value={groupIds} onChange={onChange}>
  45. <ul className="dig_ul">
  46. {getGroupList?.data?.map((item: { groupName: string, groupId: number }) => <li className="dig_ul__li" key={item.groupId}>
  47. <Checkbox value={item.groupId}>{item.groupName}</Checkbox>
  48. </li>)}
  49. </ul>
  50. </Checkbox.Group>
  51. </Spin>}
  52. title="选择分组"
  53. trigger="click"
  54. open={visible}
  55. overlayClassName="dig"
  56. onOpenChange={handleVisibleChange}
  57. >
  58. <Tooltip title="分组">
  59. <Button size="small" style={{ color: '#eb2f96' }} onClick={() => setVisible(true)}><UsergroupAddOutlined /></Button>
  60. </Tooltip>
  61. </Popover>
  62. }
  63. export default React.memo(DivideIntoGroups)