index.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import React, { useCallback, useEffect, useMemo, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { Button, Checkbox, Modal } from 'antd'
  4. import MyPopconfirm from '@/components/MyPopconfirm'
  5. import classNmaes from 'classnames'
  6. import { MessageFu } from '@/utils/message'
  7. import { RouterTypeRow } from '@/types'
  8. import { A1_APIsetStock } from '@/store/action/A1workbench'
  9. type Props = {
  10. sId: number
  11. arr: RouterTypeRow[]
  12. closeFu: () => void
  13. succFu: () => void
  14. }
  15. function A1setStock({ arr, closeFu, succFu, sId }: Props) {
  16. const [roleArr, setRoleArr] = useState<RouterTypeRow[]>([])
  17. useEffect(() => {
  18. setRoleArr(arr)
  19. }, [arr])
  20. // 多选框变化
  21. const onChange = useCallback(
  22. (val: boolean, id: number) => {
  23. setRoleArr(
  24. roleArr.map(v => ({
  25. ...v,
  26. authority: v.id === id ? val : v.authority
  27. }))
  28. )
  29. },
  30. [roleArr]
  31. )
  32. // 二级选中的数组id集合
  33. const checkIds = useMemo(() => {
  34. const arr: number[] = []
  35. roleArr.forEach(v => {
  36. if (v.authority && v.name !== '工作台') arr.push(v.id)
  37. })
  38. return arr
  39. }, [roleArr])
  40. // 点击提交
  41. const btnOk = useCallback(async () => {
  42. const res = await A1_APIsetStock(sId, JSON.stringify(roleArr))
  43. if (res.code === 0) {
  44. MessageFu.success('设置成功')
  45. succFu()
  46. closeFu()
  47. }
  48. }, [closeFu, roleArr, sId, succFu])
  49. return (
  50. <Modal
  51. wrapClassName={styles.A1setStock}
  52. open={true}
  53. title='常用功能'
  54. footer={
  55. [] // 设置footer为空,去掉 取消 确定默认按钮
  56. }
  57. >
  58. <div className='A1Smain'>
  59. <div className='Z5eboxrr'>
  60. {roleArr.map(v => (
  61. <div className='Z5eRow2' key={v.id}>
  62. {v.name === '工作台' ? null : (
  63. <Checkbox checked={v.authority} onChange={e => onChange(e.target.checked, v.id)}>
  64. {v.name}
  65. </Checkbox>
  66. )}
  67. </div>
  68. ))}
  69. <div className={classNmaes('Z5eErr', checkIds.length <= 0 ? 'Z5eErrAc' : '')}>
  70. 至少选中一个
  71. </div>
  72. </div>
  73. <div className='A1Sbtn'>
  74. <Button type='primary' disabled={checkIds.length <= 0} onClick={btnOk}>
  75. 提交
  76. </Button>
  77. &emsp;
  78. <MyPopconfirm txtK='取消' onConfirm={closeFu} />
  79. </div>
  80. </div>
  81. </Modal>
  82. )
  83. }
  84. const MemoA1setStock = React.memo(A1setStock)
  85. export default MemoA1setStock