groupLeft.tsx 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import { useAjax } from "@/Hook/useAjax"
  2. import { addGroupApi, delGroupApi, editGroupApi, getGroupListApi } from "@/services/launchAdq/subgroup"
  3. import { DeleteOutlined, FormOutlined, PlusOutlined } from "@ant-design/icons"
  4. import { Button, Input, message, Popconfirm, Space, Spin } from "antd"
  5. import React, { useEffect, useRef, useState } from "react"
  6. import './index.less'
  7. /**
  8. * 分组管理Left
  9. */
  10. interface Props {
  11. }
  12. const GroupLeft: React.FC<Props> = (props) => {
  13. /*************************/
  14. const [isNewGrouping, setIsNewGrouping] = useState<boolean>(false); // 是否新增分组
  15. const inputRef = useRef<any>(null);
  16. const [groupData, setGroupData] = useState<{ groupName: string, remark?: string, groupId?: number }>({ groupName: '' }) // 分组添加
  17. const [selectAccData, setSelectAccData] = useState<{ id: number, mpName: string }[]>([]) // 选中
  18. const [queryForm, setQueryForm] = useState<{ groupId?: number, pageNum: number, pageSize: number }>({ pageNum: 1, pageSize: 20 })
  19. const { groupId = 0 } = queryForm
  20. const addGroup = useAjax((params) => addGroupApi(params))
  21. const editGroup = useAjax((params) => editGroupApi(params))
  22. const getGroupList = useAjax(() => getGroupListApi())
  23. const delGroup = useAjax((params) => delGroupApi(params))
  24. /*************************/
  25. /** 点击新增处理聚焦 */
  26. useEffect(() => {
  27. if (isNewGrouping && inputRef?.current) {
  28. inputRef.current!.focus({
  29. cursor: 'end',
  30. });
  31. }
  32. }, [inputRef, isNewGrouping])
  33. /** 获取分组 */
  34. useEffect(() => {
  35. getGroupList.run()
  36. }, [])
  37. /** 新增修改分组 */
  38. const addEditHandle = () => {
  39. if (groupData?.groupName) {
  40. if (groupData?.groupId) {
  41. editGroup.run(groupData).then((res: any) => {
  42. message.success('修改成功')
  43. setGroupData({ groupName: '' })
  44. setIsNewGrouping(false)
  45. getGroupList.refresh()
  46. })
  47. } else {
  48. addGroup.run(groupData).then((res: any) => {
  49. message.success('添加成功')
  50. setGroupData({ groupName: '' })
  51. setIsNewGrouping(false)
  52. getGroupList.refresh()
  53. })
  54. }
  55. } else {
  56. message.error('请填写分组名称')
  57. }
  58. }
  59. /** 删除分组 */
  60. const delGroupHandle = (groupId: number) => {
  61. delGroup.run({ groupId }).then(res => {
  62. message.success('删除成功')
  63. getGroupList.refresh()
  64. if (queryForm.groupId === groupId) {
  65. setQueryForm({ ...queryForm, groupId: 0 })
  66. }
  67. })
  68. }
  69. return <div className="groupLeft">
  70. <div className="groupLeft_header">
  71. <div>全部分组</div>
  72. <Button type="link" icon={<PlusOutlined />} className="stop" onClick={(e) => {
  73. e.stopPropagation()
  74. setGroupData({ groupName: '' })
  75. setIsNewGrouping(true)
  76. }}>新增分组</Button>
  77. </div>
  78. <div className="groupLeft_content">
  79. {isNewGrouping && <div className="groupLeft_content_item">
  80. <div className="edit stop">
  81. <Space direction="vertical" className="stop">
  82. <Space className="stop">
  83. <div style={{ width: 30 }} className="stop">组名</div>
  84. <Input placeholder="输入分组名称(最多10个字)" className="stop" maxLength={10} ref={inputRef} onChange={(e) => { setGroupData({ ...groupData, groupName: e.target.value }) }} value={groupData?.groupName} />
  85. </Space>
  86. {/* <Space className="stop">
  87. <div style={{ width: 70 }} className="stop">分组备注:</div>
  88. <Input placeholder="请输入分组备注(最多10个字)" className="stop" maxLength={10} onChange={(e) => { setGroupData({ ...groupData, remark: e.target.value }) }} value={groupData?.remark} />
  89. </Space> */}
  90. <div style={{ display: 'flex', justifyContent: 'flex-end' }} className="stop">
  91. <Space className="stop">
  92. <Button size="small" className="stop" onClick={() => { setIsNewGrouping(false); setGroupData({ groupName: '' }) }}>取消</Button>
  93. <Button type="primary" className="stop" size="small" onClick={addEditHandle} loading={getGroupList?.loading}>确定</Button>
  94. </Space>
  95. </div>
  96. </Space>
  97. </div>
  98. </div>}
  99. <Spin spinning={getGroupList.loading}>
  100. <div className="groupLeft_content_item">
  101. <div className={`con ${groupId === 0 ? 'select' : ''}`} onClick={() => { setQueryForm({ ...queryForm, groupId: 0 }); setSelectAccData([]) }}>
  102. <div className="left">
  103. <div className="title">默认分组</div>
  104. </div>
  105. </div>
  106. </div>
  107. {getGroupList?.data?.map((item: { groupName: string, groupId: number }, index: number) => <div className="groupLeft_content_item" key={item.groupId || index}>
  108. {groupData?.groupId && groupData?.groupId === item?.groupId ? <div className="edit stop">
  109. <Space direction="vertical" className="stop">
  110. <Space className="stop">
  111. <div style={{ width: 40 }} className="stop">组名</div>
  112. <Input placeholder="输入分组名称(最多10个字)" className="stop" maxLength={10} ref={inputRef} onChange={(e) => { setGroupData({ ...groupData, groupName: e.target.value }) }} value={groupData?.groupName} />
  113. </Space>
  114. {/* <Space className="stop">
  115. <div style={{ width: 70 }} className="stop">分组备注:</div>
  116. <Input placeholder="请输入分组备注(最多10个字)" className="stop" maxLength={10} onChange={(e) => { setGroupData({ ...groupData, remark: e.target.value }) }} value={groupData?.remark} />
  117. </Space> */}
  118. <div style={{ display: 'flex', justifyContent: 'flex-end' }} className="stop">
  119. <Space className="stop">
  120. <Button size="small" className="stop" onClick={() => { setIsNewGrouping(false); setGroupData({ groupName: '' }) }}>取消</Button>
  121. <Button type="primary" className="stop" size="small" onClick={addEditHandle} loading={editGroup?.loading}>修改</Button>
  122. </Space>
  123. </div>
  124. </Space>
  125. </div> : <div className={`con ${groupId === item.groupId ? 'select' : ''}`} onClick={() => { setQueryForm({ ...queryForm, groupId: item.groupId, pageNum: 1 }); setSelectAccData([]) }} key={item.groupId || index}>
  126. <div className="left">
  127. <div className="title">{item.groupName}</div>
  128. {/* {item?.remark && <div className="subTitle">{item?.remark}</div>} */}
  129. </div>
  130. <div className="right">
  131. <Space>
  132. <FormOutlined onClick={(e) => { e.stopPropagation(); setGroupData({ ...item }); setIsNewGrouping(false) }} />
  133. <Popconfirm
  134. title="确定删除?"
  135. onConfirm={() => { delGroupHandle(item.groupId) }}
  136. okText="确定"
  137. cancelText="取消"
  138. >
  139. <DeleteOutlined style={{ color: 'red' }} />
  140. </Popconfirm>
  141. </Space>
  142. </div>
  143. </div>}
  144. </div>)}
  145. </Spin>
  146. </div>
  147. </div>
  148. }
  149. export default React.memo(GroupLeft)