index.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import { RootState } from '@/store'
  2. import { getUserListAPI, userPassResetAPI, userRemoveAPI } from '@/store/action/Z1user'
  3. import { UserTableAPIType, UserTableListType } from '@/types'
  4. import { MessageFu } from '@/utils/message'
  5. import { Input, Button } from 'antd'
  6. import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  7. import { useDispatch, useSelector } from 'react-redux'
  8. import styles from './index.module.scss'
  9. import UserAdd from './UserAdd'
  10. import MyTable from '@/components/MyTable'
  11. import { Z1tableC } from '@/utils/tableData'
  12. import MyPopconfirm from '@/components/MyPopconfirm'
  13. import Z1auth from './Z1auth'
  14. function Z1user() {
  15. const dispatch = useDispatch()
  16. // 顶部筛选
  17. const [fromData, setFromData] = useState<UserTableAPIType>({
  18. pageNum: 1,
  19. pageSize: 10,
  20. searchKey: ''
  21. })
  22. // 封装发送请求的函数
  23. const getList = useCallback(async () => {
  24. dispatch(getUserListAPI(fromData))
  25. }, [dispatch, fromData])
  26. useEffect(() => {
  27. getList()
  28. }, [getList])
  29. const timeRef = useRef(-1)
  30. // 用户名
  31. const txtChangeFu = useCallback(
  32. (e: React.ChangeEvent<HTMLInputElement>, key: 'searchKey') => {
  33. clearTimeout(timeRef.current)
  34. timeRef.current = window.setTimeout(() => {
  35. setFromData({
  36. ...fromData,
  37. [key]: e.target.value,
  38. pageNum: 1
  39. })
  40. }, 500)
  41. },
  42. [fromData]
  43. )
  44. // 点击重置
  45. const [inputKey, setInputKey] = useState(1)
  46. const resetSelectFu = useCallback(() => {
  47. // 把2个输入框和时间选择器清空
  48. setInputKey(Date.now())
  49. setFromData({
  50. pageNum: 1,
  51. pageSize: 10,
  52. searchKey: ''
  53. })
  54. }, [])
  55. // 从仓库中获取表格数据
  56. const tableInfo = useSelector((state: RootState) => state.Z1user.tableInfo)
  57. // 点击删除
  58. const delTableFu = useCallback(
  59. async (id: number) => {
  60. const res: any = await userRemoveAPI(id)
  61. if (res.code === 0) {
  62. MessageFu.success('删除成功!')
  63. getList()
  64. }
  65. },
  66. [getList]
  67. )
  68. // 点击重置密码
  69. const resetPassFu = useCallback(async (id: number) => {
  70. const res: any = await userPassResetAPI(id)
  71. if (res.code === 0) MessageFu.success('重置成功!')
  72. }, [])
  73. // 0------------点击新增或者编辑出来的页面
  74. const [editPageShow, setEditPageShow] = useState(false)
  75. const editId = useRef(0)
  76. const openEditPageFu = useCallback(
  77. (id: number) => {
  78. if (id === 0 && tableInfo.list.length >= 20) return MessageFu.warning('最多支持20个用户!')
  79. editId.current = id
  80. setEditPageShow(true)
  81. },
  82. [tableInfo.list.length]
  83. )
  84. const tableLastBtn = useMemo(() => {
  85. return [
  86. {
  87. title: '操作',
  88. render: (item: UserTableListType) => {
  89. return item.isAdmin === 1 ? (
  90. '-'
  91. ) : (
  92. <>
  93. <MyPopconfirm
  94. txtK='重置密码'
  95. onConfirm={() => resetPassFu(item.id)}
  96. Dom={
  97. <Button size='small' type='text'>
  98. 重置密码
  99. </Button>
  100. }
  101. />
  102. <Button
  103. size='small'
  104. type='text'
  105. onClick={() => setAuthInfo({ id: item.id, name: item.userName })}
  106. >
  107. 权限管理
  108. </Button>
  109. <Button size='small' type='text' onClick={() => openEditPageFu(item.id)}>
  110. 编辑
  111. </Button>
  112. <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
  113. </>
  114. )
  115. }
  116. }
  117. ]
  118. }, [delTableFu, openEditPageFu, resetPassFu])
  119. // 授权管理
  120. const [authInfo, setAuthInfo] = useState({ id: 0, name: '' })
  121. return (
  122. <div className={styles.Z1user}>
  123. <div className='pageTitle'>后台用户</div>
  124. <div className='userTop'>
  125. <div className='selectBox'>
  126. <div className='selectBoxRow'>
  127. <span>搜索项:</span>
  128. <Input
  129. key={inputKey}
  130. maxLength={10}
  131. showCount
  132. style={{ width: 300 }}
  133. placeholder='请输入用户名'
  134. allowClear
  135. onChange={e => txtChangeFu(e, 'searchKey')}
  136. />
  137. </div>
  138. <div className='selectBoxRow'>
  139. &emsp;&emsp;<Button onClick={resetSelectFu}>重置</Button>
  140. &emsp;&emsp;
  141. <Button
  142. type='primary'
  143. onClick={() => {
  144. if (tableInfo.total >= 30) return MessageFu.warning('最多30个账号!')
  145. openEditPageFu(0)
  146. }}
  147. >
  148. 新增
  149. </Button>
  150. </div>
  151. </div>
  152. </div>
  153. {/* 表格主体 */}
  154. <div className='tableBox'>
  155. <MyTable
  156. yHeight={630}
  157. list={tableInfo.list}
  158. columnsTemp={Z1tableC}
  159. lastBtn={tableLastBtn}
  160. pageNum={fromData.pageNum}
  161. pageSize={fromData.pageSize}
  162. total={tableInfo.total}
  163. onChange={(pageNum, pageSize) => setFromData({ ...fromData, pageNum, pageSize })}
  164. />
  165. </div>
  166. {/* 点击新增或者编辑 */}
  167. {editPageShow ? (
  168. <UserAdd
  169. id={editId.current}
  170. closePage={() => setEditPageShow(false)}
  171. upTableList={getList}
  172. addTableList={resetSelectFu}
  173. />
  174. ) : null}
  175. {/* 点击授权 */}
  176. {authInfo.id ? (
  177. <Z1auth authInfo={authInfo} closeFu={() => setAuthInfo({ id: 0, name: '' })} />
  178. ) : null}
  179. </div>
  180. )
  181. }
  182. const MemoZ1user = React.memo(Z1user)
  183. export default MemoZ1user