index.tsx 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { Button, Input, Popconfirm, Table } from 'antd'
  4. import { useDispatch, useSelector } from 'react-redux'
  5. import { RootState } from '@/store'
  6. import { A1tableType } from '@/types'
  7. import { A1_APIdel, A1_APIgetList, isTokenFlagAPI } from '@/store/action/A1List'
  8. import { MessageFu } from '@/utils/message'
  9. import history from '@/utils/history'
  10. import { getTokenInfo, removeTokenInfo } from '@/utils/storage'
  11. import clasNames from 'classnames'
  12. const isTokenFlagFu = (val: boolean, url: string) => {
  13. if (val) {
  14. // token 有效
  15. window.open(url)
  16. } else {
  17. // token 失效
  18. MessageFu.warning('登录失效,请重新登录!')
  19. removeTokenInfo()
  20. history.push('/login')
  21. }
  22. }
  23. function A1List() {
  24. const userInfo = useMemo(() => {
  25. return getTokenInfo().user
  26. }, [])
  27. const dispatch = useDispatch()
  28. // 顶部筛选
  29. const [tableSelect, setTableSelect] = useState({
  30. pageNum: 1,
  31. pageSize: 10,
  32. searchKey: ''
  33. })
  34. const getListFu = useCallback(() => {
  35. dispatch(A1_APIgetList(tableSelect))
  36. }, [dispatch, tableSelect])
  37. useEffect(() => {
  38. getListFu()
  39. }, [getListFu])
  40. // 场景名称的输入
  41. const nameTime = useRef(-1)
  42. const nameChange = useCallback(
  43. (e: React.ChangeEvent<HTMLInputElement>) => {
  44. clearTimeout(nameTime.current)
  45. nameTime.current = window.setTimeout(() => {
  46. setTableSelect({
  47. ...tableSelect,
  48. searchKey: e.target.value,
  49. pageNum: 1
  50. })
  51. }, 500)
  52. },
  53. [tableSelect]
  54. )
  55. const { tableInfo } = useSelector((state: RootState) => state.A1List)
  56. // 页码变化
  57. const paginationChange = useCallback(
  58. () => (pageNum: number, pageSize: number) => {
  59. setTableSelect({ ...tableSelect, pageNum, pageSize })
  60. },
  61. [tableSelect]
  62. )
  63. const lookFu = useCallback(async (code: string) => {
  64. const res = await isTokenFlagAPI()
  65. if (res.code === 0) {
  66. isTokenFlagFu(res.data, `/webScene/index.html?m=${code}`)
  67. }
  68. }, [])
  69. const editFu = useCallback(async (code: string) => {
  70. const res = await isTokenFlagAPI()
  71. if (res.code === 0) {
  72. isTokenFlagFu(res.data, `/scene/edit.html?m=${code}`)
  73. }
  74. }, [])
  75. const delTableFu = useCallback(
  76. async (id: number) => {
  77. const res = await A1_APIdel(id)
  78. if (res.code === 0) {
  79. MessageFu.success('删除成功!')
  80. getListFu()
  81. }
  82. },
  83. [getListFu]
  84. )
  85. const columns = useMemo(() => {
  86. return [
  87. {
  88. title: '编号',
  89. dataIndex: 'sceneCode'
  90. },
  91. {
  92. title: '园区名称',
  93. render: (item: A1tableType) => item.unit || '-'
  94. },
  95. {
  96. title: '场景名称',
  97. dataIndex: 'name'
  98. },
  99. {
  100. title: '发布时间',
  101. dataIndex: 'createTime'
  102. },
  103. {
  104. title: '操作',
  105. render: (item: A1tableType) => (
  106. <>
  107. <Button size='small' type='text' onClick={() => lookFu(item.sceneCode)}>
  108. 查看
  109. </Button>
  110. <Button size='small' type='text' onClick={() => editFu(item.sceneCode)}>
  111. 编辑
  112. </Button>
  113. <Popconfirm
  114. title='删除后无法恢复,是否删除?'
  115. okText='删除'
  116. cancelText='取消'
  117. okButtonProps={{ loading: false }}
  118. onConfirm={() => delTableFu(item.id)}
  119. >
  120. <Button size='small' type='text' danger>
  121. 删除
  122. </Button>
  123. </Popconfirm>
  124. </>
  125. )
  126. }
  127. ]
  128. }, [delTableFu, editFu, lookFu])
  129. return (
  130. <div className={styles.A1List}>
  131. <div
  132. className={clasNames(
  133. 'pageTitle',
  134. userInfo.isAdmin !== 1 ? 'pageTitleToLeft' : ''
  135. )}
  136. >
  137. 数字孪生建模平台
  138. </div>
  139. <div className='A1Top'>
  140. <div className='selectBox'>
  141. <div className='selectBoxL'>
  142. <div className='row'>
  143. <span>场景名称:</span>
  144. <Input
  145. maxLength={30}
  146. style={{ width: 300 }}
  147. placeholder='请输入'
  148. allowClear
  149. onChange={e => nameChange(e)}
  150. />
  151. </div>
  152. </div>
  153. </div>
  154. </div>
  155. {/* 表格主体 */}
  156. <div className='tableBox'>
  157. <Table
  158. scroll={{ y: 605 }}
  159. dataSource={tableInfo.list}
  160. columns={columns}
  161. rowKey='id'
  162. pagination={{
  163. showQuickJumper: true,
  164. position: ['bottomCenter'],
  165. // showSizeChanger: true,
  166. current: tableSelect.pageNum,
  167. pageSize: tableSelect.pageSize,
  168. total: tableInfo.total,
  169. onChange: paginationChange()
  170. }}
  171. />
  172. </div>
  173. </div>
  174. )
  175. }
  176. const MemoA1List = React.memo(A1List)
  177. export default MemoA1List