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.

142 lines
3.1 KiB

5 months ago
  1. import {getDetailList, delDetail} from '../../../services/measure/analysis'
  2. import { useState, useEffect } from 'react'
  3. import {message, Button, type TableColumnsType, type TableProps, Modal, Table } from 'antd';
  4. import { useNavigate } from 'react-router-dom';
  5. import type { DetailTable } from "../../../services/measure/type";
  6. import { ExclamationCircleFilled } from '@ant-design/icons';
  7. export default function MeasureDetail() {
  8. const navigate = useNavigate();
  9. function onToMeasure(){
  10. navigate('/measure/config')
  11. }
  12. useEffect(()=>{
  13. getDetailDataList()
  14. }, [])
  15. const [selectRows, setSelectedRow] = useState<DetailTable[]>([])
  16. const rowSelection: TableProps<DetailTable>['rowSelection'] = {
  17. onChange: (selectedRowKeys: React.Key[], selectedRows: DetailTable[]) => {
  18. console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
  19. setSelectedRow(selectedRows)
  20. },
  21. getCheckboxProps: (record: DetailTable) => ({
  22. name: record.name,
  23. }),
  24. };
  25. const columns: TableColumnsType<DetailTable> = [
  26. {
  27. title: '测量名称',
  28. dataIndex: 'name',
  29. },
  30. {
  31. title: '线路名称',
  32. dataIndex: 'lineName',
  33. },
  34. {
  35. title: '位置',
  36. dataIndex: 'location',
  37. },
  38. {
  39. title: '轨型',
  40. dataIndex: 'trackShapeCode',
  41. },
  42. {
  43. title: '方向',
  44. dataIndex: 'direction',
  45. },
  46. {
  47. title: '创建者',
  48. dataIndex: 'operatorName',
  49. },
  50. {
  51. title: '时间',
  52. dataIndex: 'createTime',
  53. },
  54. ];
  55. const [tableData, setTableData] = useState<DetailTable[]>([])
  56. const getDetailDataList = () => {
  57. getDetailList().then(res => {
  58. if (res.success) {
  59. setTableData(res.data.list)
  60. } else {
  61. setTableData(detailList)
  62. }
  63. }).catch(e=>{
  64. //如果接口异常,则使用mock数据
  65. // setTableData(detailList)
  66. })
  67. }
  68. const [selectionType, setSelectionType] = useState<'checkbox'>('checkbox');
  69. const { confirm } = Modal;
  70. const onDel = () => {
  71. console.log('selectedRows====', selectRows)
  72. confirm({
  73. title: '提示',
  74. icon: <ExclamationCircleFilled />,
  75. content: '请确认是否删除此条数据',
  76. okText:'确认',
  77. cancelText:'取消',
  78. onOk() {
  79. onHandelDelData()
  80. },
  81. onCancel() {
  82. console.log('Cancel');
  83. },
  84. });
  85. }
  86. const onHandelDelData = () =>{
  87. let list = [...selectRows]
  88. const ids = list.map(item => item.id)
  89. if(!ids || !ids.length){
  90. return;
  91. }
  92. const params = {
  93. ids:ids.join(',')
  94. }
  95. delDetail(params).then(res => {
  96. if(res.status === 0){
  97. getDetailList()
  98. message.success('删除成功')
  99. }
  100. }).catch(e=> {
  101. //删除mock的数据
  102. const filterList = tableData.filter(item => !ids.includes(item.id))
  103. setTableData(filterList)
  104. message.success('删除成功')
  105. setSelectedRow([])
  106. })
  107. }
  108. return (
  109. <div>
  110. <div className="p-[30px]">
  111. <Button
  112. disabled={!selectRows.length}
  113. type="primary"
  114. onClick={onDel}>
  115. </Button>
  116. </div>
  117. <div>
  118. <Table<DetailTable>
  119. locale={{
  120. emptyText: '无数据',
  121. }}
  122. rowSelection={{ type: selectionType, ...rowSelection }}
  123. columns={columns}
  124. dataSource={tableData.map(item => ({ ...item, key: item.name }))}
  125. />
  126. </div>
  127. </div>
  128. );
  129. }