Browse Source

优化测量记录删除,导出

feature/rail
LiLongLong 5 months ago
parent
commit
3065b47424
  1. 35
      src/App.tsx
  2. 173
      src/pages/measure/components/MeasureDetail.tsx
  3. 24
      src/services/measure/analysis.ts
  4. 20
      src/services/measure/type.ts

35
src/App.tsx

@ -2,13 +2,14 @@ import React, { useEffect } from "react";
import "./App.scss";
import { Outlet, useNavigate } from "react-router";
import { Layout } from "antd";
import { Layout, ConfigProvider } from "antd";
import { default as AppHeader } from "./components/Header";
import { default as AppFooter } from "./components/Footer";
import SideMenu from "./components/SideMenu";
import { createWebSocket, sharedWsUrl } from "./services/socket";
import { useAppDispatch } from "./utils/hooks";
import { updateDeviceState } from "./store/device/deviceState";
import zhCN from 'antd/lib/locale/zh_CN'; // 引入中文语言包
const { Header, Footer, Sider, Content } = Layout;
function App() {
@ -49,22 +50,24 @@ function App() {
return (
<div className="">
<Layout style={layoutStyle}>
<Sider width="200px">
<SideMenu />
</Sider>
<Layout>
<Header style={headerStyle}>
<AppHeader />
</Header>
<Content>
<Outlet />
</Content>
<Footer style={footerStyle}>
<AppFooter />
</Footer>
<ConfigProvider locale={zhCN}>
<Layout style={layoutStyle} >
<Sider width="200px">
<SideMenu />
</Sider>
<Layout>
<Header style={headerStyle}>
<AppHeader />
</Header>
<Content>
<Outlet />
</Content>
<Footer style={footerStyle}>
<AppFooter />
</Footer>
</Layout>
</Layout>
</Layout>
</ConfigProvider>
</div>
);
}

173
src/pages/measure/components/MeasureDetail.tsx

@ -1,13 +1,14 @@
import {getDetailList, delDetail} from '../../../services/measure/analysis'
import {getDetailList, delDetail, getDetail, getPointByUuid} from '../../../services/measure/analysis'
import { useState, useEffect } from 'react'
import {message, Button, type TableColumnsType, type TableProps, Modal, Table, Pagination } from 'antd';
import {message, Button, type TableColumnsType, type TableProps, Modal, Table, Pagination, Input } from 'antd';
import { useNavigate } from 'react-router-dom';
import type { DetailTable } from "../../../services/measure/type";
import type { DetailTable, SearchParams } from "../../../services/measure/type";
import { ExclamationCircleFilled } from '@ant-design/icons';
export default function MeasureDetail() {
const navigate = useNavigate();
const { Search } = Input;
function onToMeasure(){
navigate('/measure/config')
}
@ -50,10 +51,18 @@ export default function MeasureDetail() {
{
title: '轨型',
dataIndex: 'trackShapeCode',
render:(_, record)=>{
const trackShapeCode = record.trackShapeCode
return trackShapeCode ? trackShapeCode : '无'
}
},
{
title: '方向',
dataIndex: 'direction',
render:(_, record)=>{
const direction = record.direction
return direction ? direction : '无'
}
},
{
title: '创建者',
@ -63,34 +72,51 @@ export default function MeasureDetail() {
title: '时间',
dataIndex: 'createTime',
},
{
title: '操作',
dataIndex: 'op',
width:180,
align:'center',
render:(_, record)=>{
return <div>
<Button type="link" onClick={()=>onDel(record)}></Button>
<br/>
<Button type="link" onClick={()=>onShowDetail(record)}></Button>
<br/>
<Button type="link" onClick={()=>onDetaiResult(record)}></Button>
</div>
}
},
];
const [tableData, setTableData] = useState<DetailTable[]>([])
const [total, setTotal] = useState(0)
const getDetailDataList = (params:{pageSize:number, pageNum:number}) => {
getDetailList(params).then(res => {
if(res.success){
console.log('res====', res)
//@ts-ignore
setTableData(res.data.list)
setTotal(res.data.total)
}else{
// setTableData(detailList)
}
}).catch(e=>{
//如果接口异常,则使用mock数据
const getDetailDataList = (params:SearchParams) => {
setLoading(true)
getDetailList(params).then(res => {
if(res.success){
setLoading(false)
//@ts-ignore
setTableData(res.data.list)
setTotal(res.data.total)
}else{
// setTableData(detailList)
})
}
}).catch(e=>{
//如果接口异常,则使用mock数据
// setTableData(detailList)
}).finally(()=>{
setLoading(false)
})
}
const [selectionType, setSelectionType] = useState<'checkbox'>('checkbox');
const { confirm } = Modal;
const onDel = () => {
const onBatchDel = () => {
confirm({
title: '提示',
icon: <ExclamationCircleFilled />,
content: '请确认是否删除此条数据',
content: '请确认是否删除选中的数据',
okText:'确认',
cancelText:'取消',
onOk() {
@ -101,7 +127,49 @@ export default function MeasureDetail() {
},
});
}
const onDel = (item:DetailTable) => {
confirm({
title: '提示',
icon: <ExclamationCircleFilled />,
content: '请确认是否删除选中的数据',
okText:'确认',
cancelText:'取消',
onOk() {
doDel({ids:item.id})
},
onCancel() {
console.log('Cancel');
},
});
}
const onShowDetail = (item:DetailTable)=> {
message.warning('正在开发中')
return;
getDetail({id:item.id}).then(res=>{
console.log('res==测量记录详情=', res)
if(res){
//@ts-ignore
getRecordByUuid(res.data.uuid)
}
})
}
const onDetaiResult = (item:DetailTable) => {
message.warning('正在开发中')
return;
}
const getRecordByUuid = (uuid:string) => {
getPointByUuid({uuid}).then(res=>{
console.log('=========================', res)
})
}
type DelParams = {
ids: string | number;
}
const onHandelDelData = () =>{
let list = [...selectRows]
const ids = list.map(item => item.id)
@ -111,60 +179,91 @@ export default function MeasureDetail() {
const params = {
ids:ids.join(',')
}
doDel(params)
}
const doDel = (params:DelParams) => {
delDetail(params).then(res => {
if(res.success){
message.success('删除成功')
setSelectedRowKeys([])
const params = {
pageSize,
pageNum,
}
getDetailDataList(params)
setSelectedRowKeys([])
setSelectedRow([])
}
}).catch(e=> {
//删除mock的数据
const filterList = tableData && tableData.filter(item => !ids.includes(item.id))
setTableData(filterList)
message.success('删除成功')
setSelectedRow([])
// const filterList = tableData && tableData.filter(item => !ids.includes(item.id))
// setTableData(filterList)
// message.success('删除成功')
// setSelectedRow([])
})
}
const [pageNum, setPageNum] = useState(1)
const [pageSize, setPageSize] = useState(8)
const onPageChange = (pageNum:number) => {
console.log('pageNum---', pageNum)
setPageNum(pageNum)
const params = {
pageSize,
pageNum,
const [pageSize, setPageSize] = useState(5)
const onPageChange = (pageNumValue:number, pageSizeValue:number) => {
setPageNum(pageNumValue)
setPageSize(pageSizeValue)
searchParams = {
...searchParams,
pageSize:pageSizeValue,
pageNum:pageNumValue,
}
getDetailDataList(params)
getDetailDataList(searchParams)
}
const [name, setName] = useState<string>()
const [lineName, setLineName] = useState<string>()
let searchParams:SearchParams = {
pageNum,
pageSize,
}
const onSearch = ()=> {
setPageNum(1)
setPageSize(5)
searchParams = {
pageSize,
pageNum: 1,
name,
lineName
}
getDetailDataList(searchParams)
}
let [loading, setLoading] = useState(false)
return (
<div>
<div className="p-[30px]">
<div className="p-[15px]">
<Button
disabled={!selectRows.length}
type="primary"
onClick={onDel}>
onClick={onBatchDel}>
</Button>
<Input className='ml-[2rem]' placeholder="测量名称" onChange={(e)=>setName(e.target.value)} style={{ width: 200 }}/>
<Input className='ml-[2rem]' placeholder="线路名称" onChange={(e)=>setLineName(e.target.value)} style={{ width: 200 }}/>
<Button type="primary" className='ml-[2rem]' onClick={onSearch}></Button>
</div>
<div>
<Table<DetailTable>
locale={{
emptyText: '无数据',
}}
loading={loading}
rowSelection={{ type: selectionType, ...rowSelection }}
columns={columns}
rowKey="id"
dataSource={tableData && tableData.map(item => ({ ...item, key: item.name }))}
pagination={false}
/>
<div className="float-right"><Pagination onChange={onPageChange} defaultPageSize={pageSize} defaultCurrent={1} total={total} /></div>
<div className="float-right">
<Pagination onChange={onPageChange} current={pageNum} pageSizeOptions={[5,10,20,30]} defaultCurrent={pageNum} defaultPageSize={pageSize} total={total}/>
</div>
</div>
</div>

24
src/services/measure/analysis.ts

@ -32,7 +32,7 @@ export function saveMeasurement() {
});
}
export function getDetailList(params: { pageSize: number, pageNum: number }) {
export function getDetailList(params: {name?:string, pageSize: number, pageNum: number }) {
return httpRequest<BaseResponse<{ list: DetailTable[], total: number }>>({
url: "/measurement-data/list",
params,
@ -40,7 +40,7 @@ export function getDetailList(params: { pageSize: number, pageNum: number }) {
});
}
export function delDetail(params: { ids: string }) {
export function delDetail(params: { ids: string | number }) {
return httpRequest<BaseResponse>({
url: `/measurement-data/delete/${params.ids}`,
method: "POST",
@ -98,3 +98,23 @@ export function getReport(uuid: string, code: string) {
params: { uuid, code },
});
}
/**
*
* /measurement-data
*/
export function getDetail(params:{id:number}){
return httpRequest<BaseResponse<{uuid:string}>>({
url: `/measurement-data/${params.id}`,
method: "POST",
params,
});
}
export function getPointByUuid(params:{uuid:string}){
return httpRequest<BaseResponse>({
url: `/measurement-analysis/point/${params.uuid}`,
method: "POST",
params,
});
}

20
src/services/measure/type.ts

@ -3,11 +3,17 @@ export type measurementItem = {
}
export type DetailTable = {
id:number;
id: number;
createTime:string;
updateTime:string;
uuid:string;
operatorName:string;
name: string;
trackShapeCode:string;
createTime: string;
verificationMethodCode:string;
name:string;
lineName:string;
location:string;
direction:string;
}
export type MeasureRecord = {
@ -85,3 +91,11 @@ export interface AnalysisResults {
describe: string;
}
}
//搜索
export type SearchParams = {
pageSize:number;
pageNum: number;
name?: string;
lineName?: string;
}
Loading…
Cancel
Save