You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

280 lines
6.6 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. import {getDetailList, delDetail, getDetail, getPointByUuid} from '../../../services/measure/analysis'
  2. import { useState, useEffect } from 'react'
  3. import {message, Button, type TableColumnsType, type TableProps, Modal, Table, Pagination, Input } from 'antd';
  4. import { useNavigate } from 'react-router-dom';
  5. import type { DetailTable, SearchParams } from "../../../services/measure/type";
  6. import { ExclamationCircleFilled } from '@ant-design/icons';
  7. export default function MeasureDetail() {
  8. const navigate = useNavigate();
  9. const { Search } = Input;
  10. function onToMeasure(){
  11. navigate('/measure/config')
  12. }
  13. useEffect(()=>{
  14. const params = {
  15. pageSize,
  16. pageNum,
  17. }
  18. getDetailDataList(params)
  19. }, [])
  20. const [selectRows, setSelectedRow] = useState<DetailTable[]>([])
  21. const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
  22. const rowSelection = {
  23. selectedRowKeys,
  24. onChange: (selectedRowKeys: React.Key[], selectedRows: DetailTable[]) => {
  25. console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
  26. setSelectedRow(selectedRows)
  27. setSelectedRowKeys(selectedRowKeys)
  28. },
  29. getCheckboxProps: (record: DetailTable) => ({
  30. name: record.name,
  31. }),
  32. };
  33. const columns: TableColumnsType<DetailTable> = [
  34. {
  35. title: '序号',
  36. dataIndex: 'seq',
  37. render:(_, record, index)=>{
  38. return index + 1
  39. }
  40. },
  41. {
  42. title: '测量名称',
  43. dataIndex: 'name',
  44. },
  45. {
  46. title: '线路名称',
  47. dataIndex: 'lineName',
  48. },
  49. {
  50. title: '位置',
  51. dataIndex: 'location',
  52. },
  53. {
  54. title: '轨型',
  55. dataIndex: 'trackShapeCode',
  56. render:(_, record)=>{
  57. const trackShapeCode = record.trackShapeCode
  58. return trackShapeCode ? trackShapeCode : '无'
  59. }
  60. },
  61. {
  62. title: '方向',
  63. dataIndex: 'direction',
  64. render:(_, record)=>{
  65. const direction = record.direction
  66. return direction ? direction : '无'
  67. }
  68. },
  69. {
  70. title: '创建者',
  71. dataIndex: 'operatorName',
  72. },
  73. {
  74. title: '时间',
  75. dataIndex: 'createTime',
  76. },
  77. // {
  78. // title: '操作',
  79. // dataIndex: 'op',
  80. // width:180,
  81. // align:'center',
  82. // render:(_, record)=>{
  83. // return <div>
  84. // <Button type="link" onClick={()=>onDel(record)}>删除</Button>
  85. // <br/>
  86. // <Button type="link" onClick={()=>onShowDetail(record)}>导出测量数据</Button>
  87. // <br/>
  88. // <Button type="link" onClick={()=>onDetaiResult(record)}>导出分析结果</Button>
  89. // </div>
  90. // }
  91. // },
  92. ];
  93. const [tableData, setTableData] = useState<DetailTable[]>([])
  94. const [total, setTotal] = useState(0)
  95. const getDetailDataList = (params:SearchParams) => {
  96. setLoading(true)
  97. getDetailList(params).then(res => {
  98. if(res.success){
  99. setLoading(false)
  100. //@ts-ignore
  101. setTableData(res.data.list)
  102. setTotal(res.data.total)
  103. }else{
  104. // setTableData(detailList)
  105. }
  106. }).catch(e=>{
  107. //如果接口异常,则使用mock数据
  108. // setTableData(detailList)
  109. }).finally(()=>{
  110. setLoading(false)
  111. })
  112. }
  113. const [selectionType, setSelectionType] = useState<'checkbox'>('checkbox');
  114. const { confirm } = Modal;
  115. const onBatchDel = () => {
  116. confirm({
  117. title: '提示',
  118. icon: <ExclamationCircleFilled />,
  119. content: '请确认是否删除选中的数据',
  120. okText:'确认',
  121. cancelText:'取消',
  122. onOk() {
  123. onHandelDelData()
  124. },
  125. onCancel() {
  126. console.log('Cancel');
  127. },
  128. });
  129. }
  130. const onDel = (item:DetailTable) => {
  131. confirm({
  132. title: '提示',
  133. icon: <ExclamationCircleFilled />,
  134. content: '请确认是否删除选中的数据',
  135. okText:'确认',
  136. cancelText:'取消',
  137. onOk() {
  138. doDel({ids:item.id})
  139. },
  140. onCancel() {
  141. console.log('Cancel');
  142. },
  143. });
  144. }
  145. const onShowDetail = (item:DetailTable)=> {
  146. message.warning('正在开发中')
  147. return;
  148. getDetail({id:item.id}).then(res=>{
  149. console.log('res==测量记录详情=', res)
  150. if(res){
  151. //@ts-ignore
  152. getRecordByUuid(res.data.uuid)
  153. }
  154. })
  155. }
  156. const onDetaiResult = (item:DetailTable) => {
  157. message.warning('正在开发中')
  158. return;
  159. }
  160. const getRecordByUuid = (uuid:string) => {
  161. getPointByUuid({uuid}).then(res=>{
  162. console.log('=========================', res)
  163. })
  164. }
  165. type DelParams = {
  166. ids: string | number;
  167. }
  168. const onHandelDelData = () =>{
  169. let list = [...selectRows]
  170. const ids = list.map(item => item.id)
  171. if(!ids || !ids.length){
  172. return;
  173. }
  174. const params = {
  175. ids:ids.join(',')
  176. }
  177. doDel(params)
  178. }
  179. const doDel = (params:DelParams) => {
  180. delDetail(params).then(res => {
  181. if(res.success){
  182. message.success('删除成功')
  183. const params = {
  184. pageSize,
  185. pageNum,
  186. }
  187. getDetailDataList(params)
  188. setSelectedRowKeys([])
  189. setSelectedRow([])
  190. }
  191. }).catch(e=> {
  192. //删除mock的数据
  193. // const filterList = tableData && tableData.filter(item => !ids.includes(item.id))
  194. // setTableData(filterList)
  195. // message.success('删除成功')
  196. // setSelectedRow([])
  197. })
  198. }
  199. const [pageNum, setPageNum] = useState(1)
  200. const [pageSize, setPageSize] = useState(5)
  201. const onPageChange = (pageNumValue:number, pageSizeValue:number) => {
  202. setPageNum(pageNumValue)
  203. setPageSize(pageSizeValue)
  204. searchParams = {
  205. ...searchParams,
  206. pageSize:pageSizeValue,
  207. pageNum:pageNumValue,
  208. }
  209. getDetailDataList(searchParams)
  210. }
  211. const [name, setName] = useState<string>()
  212. const [lineName, setLineName] = useState<string>()
  213. let searchParams:SearchParams = {
  214. pageNum,
  215. pageSize,
  216. }
  217. const onSearch = ()=> {
  218. setPageNum(1)
  219. setPageSize(5)
  220. searchParams = {
  221. pageSize,
  222. pageNum: 1,
  223. name,
  224. lineName
  225. }
  226. getDetailDataList(searchParams)
  227. }
  228. let [loading, setLoading] = useState(false)
  229. return (
  230. <div>
  231. <div className="p-[15px]">
  232. <Button
  233. disabled={!selectRows.length}
  234. type="primary"
  235. onClick={onBatchDel}>
  236. </Button>
  237. <Input className='ml-[2rem]' placeholder="测量名称" onChange={(e)=>setName(e.target.value)} style={{ width: 200 }}/>
  238. <Input className='ml-[2rem]' placeholder="线路名称" onChange={(e)=>setLineName(e.target.value)} style={{ width: 200 }}/>
  239. <Button type="primary" className='ml-[2rem]' onClick={onSearch}></Button>
  240. </div>
  241. <div>
  242. <Table<DetailTable>
  243. locale={{
  244. emptyText: '无数据',
  245. }}
  246. loading={loading}
  247. rowSelection={{ type: selectionType, ...rowSelection }}
  248. columns={columns}
  249. rowKey="id"
  250. dataSource={tableData && tableData.map(item => ({ ...item, key: item.name }))}
  251. pagination={false}
  252. scroll={{ y: 550 }}
  253. />
  254. <div className="float-right">
  255. <Pagination onChange={onPageChange} current={pageNum} pageSizeOptions={[5,10,20,30]} defaultCurrent={pageNum} defaultPageSize={pageSize} total={total}/>
  256. </div>
  257. </div>
  258. </div>
  259. );
  260. }