Browse Source

Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev

release_0.0.4
wangyue 2 years ago
parent
commit
5469d9df8f
  1. 33
      web/client/src/sections/fillion/actions/infor.js
  2. 36
      web/client/src/sections/fillion/components/infor/details.js
  3. 192
      web/client/src/sections/fillion/components/inforTable.js
  4. 3
      web/client/src/sections/fillion/components/operationalTable.js
  5. 2
      web/client/src/sections/quanju/containers/footer/build/Rightbottom.js
  6. 2
      web/client/src/sections/quanju/containers/footer/build/Rightcenter.js
  7. 11
      web/client/src/sections/quanju/containers/footer/build/index.js
  8. 4
      web/client/src/sections/quanju/containers/footer/build/style.less
  9. 30
      web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js
  10. 24
      web/client/src/sections/quanju/containers/footer/guanli/index.js
  11. 1
      web/client/src/sections/quanju/containers/footer/guanli/style.less
  12. 41
      web/client/src/sections/quanju/containers/footer/operation/left.js
  13. 14
      web/client/src/utils/webapi.js

33
web/client/src/sections/fillion/actions/infor.js

@ -290,4 +290,37 @@ export function delVehicle(query) {
msg: { error: '删除车辆信息失败' }, msg: { error: '删除车辆信息失败' },
// reducer: { name: 'reportstatistic' } // reducer: { name: 'reportstatistic' }
}); });
}
export function getPurchase(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_PURCHASE',
url: ApiTable.getPurchase,
msg: { error: '获取治超信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function putPurchase(query) {
return dispatch => basicAction({
type: 'put',
dispatch: dispatch,
data: query,
actionType: 'PUT_PURCHASE',
url: ApiTable.putPurchase,
msg: { error: '获取治超信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function delPurchase(query) {
return dispatch => basicAction({
type: 'del',
dispatch: dispatch,
actionType: 'DEL_PURCHASE',
url: ApiTable.delPurchase.replace("{overspeedId}", query?.overspeedId),
msg: { error: '删除车辆信息失败' },
// reducer: { name: 'reportstatistic' }
});
} }

36
web/client/src/sections/fillion/components/infor/details.js

@ -2,11 +2,11 @@ import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { Form, Spin, Table } from 'antd'; import { Form, Spin, Table } from 'antd';
import { DrawerForm, ProForm, ProFormText, ProFormSelect } from '@ant-design/pro-form'; import { DrawerForm, ProForm, ProFormText, ProFormSelect } from '@ant-design/pro-form';
import { putRoadway, putSpecificVehicle, putHouseholds,putCircuit,putVehicle } from "../../actions/infor" import { putRoadway, putSpecificVehicle, putHouseholds,putCircuit,putVehicle,putPurchase } from "../../actions/infor"
import { putBridge } from "../../actions/infor" import { putBridge } from "../../actions/infor"
const UserModal = (props) => { const UserModal = (props) => {
const { visible, onVisibleChange, typecard, rewkeys, data, recortd, sitename, dispatch, setRecortd, engineering } = props const { visible, onVisibleChange, typecard, rewkeys, data, recortd, sitename, dispatch, setRecortd, setMonitor } = props
const [newlys, setNewlys] = useState() //必填数据 const [newlys, setNewlys] = useState() //必填数据
const [newlysay, setNewlysay] = useState() //处理hou const [newlysay, setNewlysay] = useState() //处理hou
const [records, setRecords] = useState()//处理 const [records, setRecords] = useState()//处理
@ -65,6 +65,13 @@ const UserModal = (props) => {
setNewlys(array?.splice(0, 2)) setNewlys(array?.splice(0, 2))
setNewlysay(array) setNewlysay(array)
} }
if (rewkeys === 'zhichao') {
_.forIn(data, function (value, key) {
array.push({ name: value, type: key })
});
setNewlys(array?.splice(0, 2))
setNewlysay(array)
}
}, []) }, [])
useEffect(() => { useEffect(() => {
const arr = [] const arr = []
@ -117,6 +124,13 @@ const UserModal = (props) => {
setRecordsay(arr.splice(1, 2)) setRecordsay(arr.splice(1, 2))
// setEstablishment(arr.splice(-1, 1)) // setEstablishment(arr.splice(-1, 1))
setRecords(arr) setRecords(arr)
}if (rewkeys === 'zhichao') {
_.forIn(recortd, function (value, key) {
arr.push({ value: value, type: key })
});
setRecordsay(arr.splice(1, 2))
// setEstablishment(arr.splice(-1, 1))
setRecords(arr)
} }
}, [recortd]) }, [recortd])
useEffect(() => { useEffect(() => {
@ -230,6 +244,24 @@ const UserModal = (props) => {
return true return true
} }
} }
if (rewkeys === 'zhichao') {
if (typecard == '111') {
console.log(values)
const query = { ...values, overspeedId:records?.[0]?.value || '' }
dispatch(putPurchase(query)).then((res) => {
setSuccess(res.success)
setMonitor(res)
})
return true
} else {
const query = { ...values }
dispatch(putPurchase(query)).then((res) => {
setSuccess(res.success)
setMonitor(res)
})
return true
}
}
} else { return false } } else { return false }
}} }}

192
web/client/src/sections/fillion/components/inforTable.js

@ -1,21 +1,30 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState,useRef } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { Spin, Button, Popconfirm, Col, Input,Row } from 'antd'; import { Spin, Button, Popconfirm, Col, Input,Row } from 'antd';
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
import './protable.less' import './protable.less'
import moment from 'moment'; import moment from 'moment';
import { getReportStatistic } from "../actions/infor" import { getPurchase,delPurchase } from "../actions/infor"
import UserModal from './infor/details'; import UserModal from './infor/details';
const InForTable = (props) => { const InForTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([]) const [rowSelected, setRowSelected] = useState([])
const [counts, setCounts] = useState()//shuju const [counts, setCounts] = useState()//shuju
const [modalVisible, setModalVisible] = useState(false); const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState(); const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState(); const [typecard, setTypecard] = useState();
const [recortd, setRecortd] = useState()
const [monitor, setMonitor] = useState()
const [delet, setDelet] = useState()
const [nameOfInspectionPoint, setNameOfInspectionPoint] = useState()//检测点名称
const [licensePlate, setLicensePlate] = useState()//车牌号
const [numberOfAxles, setNumberOfAxles] = useState()//车轴数
const [overrunRateUpper, setOverrunRateUpper] = useState()//超限率上限
const [overrunRateFloor, setOverrunRateFloor] = useState()//超限率下限
const [testTime, setTestTime] = useState()//超限率下限
const ref = useRef()
useEffect(() => { ref.current.reload() }, [monitor,delet,modalVisible])
//打开弹窗 //打开弹窗
const openModal = (type, record) => { const openModal = (type, record) => {
setModalVisible(true); setModalVisible(true);
@ -45,31 +54,52 @@ const InForTable = (props) => {
const columns = const columns =
[ [
{ {
title: '检测点名称', title: '区/县',
dataIndex: 'placeName', dataIndex: 'placeName',
fixed: 'left', fixed: 'left',
width: 120, width: 120,
options: 1, options: 1,
search: false,
backgroundColor: "#ffffff", backgroundColor: "#ffffff",
fieldProps: { fieldProps: {
onChange: (value, cs) => {
setSitename(value.currentTarget.value)
},
placeholder: '请输入检测点名称进行搜索', placeholder: '请输入检测点名称进行搜索',
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
}, },
render: (dom, record) => {
return record.districtcounty
},
}, },
{ {
title: '车牌号', title: '检测点名称',
// search: false, // search: false,
dataIndex: 'containers1', dataIndex: 'containers1',
fixed: 'left', fixed: 'left',
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.nameOfInspectionPoint
},
fieldProps: {
onChange: (value, cs) => {
setNameOfInspectionPoint(value.currentTarget.value)
},
placeholder: '请输入车牌号进行搜索',
getPopupContainer: (triggerNode) => triggerNode.parentNode,
}
},{
title: '车牌号码',
// search: false,
dataIndex: 'containers444',
fixed: 'left',
width: 120,
render: (dom, record) => {
return record.licensePlate
}, },
fieldProps: { fieldProps: {
onChange: (value, cs) => {
setLicensePlate(value.currentTarget.value)
},
placeholder: '请输入车牌号进行搜索', placeholder: '请输入车牌号进行搜索',
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
} }
@ -80,9 +110,12 @@ const InForTable = (props) => {
dataIndex: 'containers2', dataIndex: 'containers2',
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.numberOfAxles
}, },
fieldProps: { fieldProps: {
onChange: (value, cs) => {
setNumberOfAxles(value.currentTarget.value)
},
placeholder: '请输入车轴数进行搜索', placeholder: '请输入车轴数进行搜索',
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
} }
@ -95,20 +128,28 @@ const InForTable = (props) => {
// //
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.overrunRate
},
fieldProps: {
placeholder: '请输入超限率进行搜索',
getPopupContainer: (triggerNode) => triggerNode.parentNode,
}, },
// fieldProps: {
// placeholder: '请输入超限率进行搜索',
// getPopupContainer: (triggerNode) => triggerNode.parentNode,
// },
renderFormItem: (item, { type, defaultRender, formItemProps, fieldProps, ...rest }, form) => { renderFormItem: (item, { type, defaultRender, formItemProps, fieldProps, ...rest }, form) => {
return <Input.Group > return <Input.Group >
<Row gutter={8}> <Row gutter={8}>
<Col span={8}> <Col span={8}>
<Input placeholder='输入超限率'/> <Input
onChange={(value)=>{
setOverrunRateUpper(value.currentTarget.value)
}}
placeholder='输入超限率上限'/>
</Col> </Col>
<Col span={8}> <Col span={8}>
<Input placeholder='输入超限率'/> <Input
onChange={(value)=>{
setOverrunRateFloor(value.currentTarget.value)
}}
placeholder='输入超限率下限'/>
</Col> </Col>
</Row> </Row>
</Input.Group> </Input.Group>
@ -123,7 +164,7 @@ const InForTable = (props) => {
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.overrunWeight
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -137,7 +178,7 @@ const InForTable = (props) => {
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.grossVehicleWeight
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -151,7 +192,7 @@ const InForTable = (props) => {
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.vehicleCargoWeightLimit
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -164,9 +205,12 @@ const InForTable = (props) => {
valueType: 'dateTime', valueType: 'dateTime',
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.testTime
}, },
fieldProps: { fieldProps: {
onChange: (value, cs) => {
setTestTime(cs)
},
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
} }
}, { }, {
@ -178,7 +222,7 @@ const InForTable = (props) => {
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.nameOfBusinessOwner
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -193,7 +237,7 @@ const InForTable = (props) => {
width: 140, width: 140,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.businessAddress
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -208,7 +252,7 @@ const InForTable = (props) => {
width: 140, width: 140,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.notifier
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -223,7 +267,7 @@ const InForTable = (props) => {
width: 140, width: 140,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.notificationMethod
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -235,10 +279,10 @@ const InForTable = (props) => {
valueType: 'dateRange', valueType: 'dateRange',
width: 140, width: 240,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.notificationResults
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -253,7 +297,7 @@ const InForTable = (props) => {
width: 140, width: 140,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.processingTime
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -268,7 +312,7 @@ const InForTable = (props) => {
width: 140, width: 140,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.deductPoints
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -283,7 +327,23 @@ const InForTable = (props) => {
width: 140, width: 140,
render: (dom, record) => { render: (dom, record) => {
return record.address return record.fine
},
fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode,
}
},
{
title: '备注',
search: false,
dataIndex: 'containers14',
valueType: 'dateRange',
width: 140,
render: (dom, record) => {
return record.remarks
}, },
fieldProps: { fieldProps: {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
@ -301,9 +361,18 @@ const InForTable = (props) => {
onClick={() => { onClick={() => {
openModal('edit', record) openModal('edit', record)
setTypecard('111') setTypecard('111')
setRecortd(record)
}} }}
>编辑</Button><Button type="link"></Button></div> >编辑</Button><Button type="link"
onClick={() => {
const query = {
overspeedId: record.id
}
dispatch(delPurchase(query)).then((res) => {
setDelet(res)
})
}}
>删除</Button></div>
} }
}, },
@ -342,6 +411,7 @@ const InForTable = (props) => {
<Spin spinning={false}> <Spin spinning={false}>
<div className='protable-transpor'> <div className='protable-transpor'>
<ProTable <ProTable
actionRef={ref}
scroll={{ x: 800 }} scroll={{ x: 800 }}
options={false} options={false}
ref={c => { finishedProductTable = c; }} ref={c => { finishedProductTable = c; }}
@ -355,20 +425,26 @@ const InForTable = (props) => {
}, },
}} }}
columns={columns} columns={columns}
dataSource={counts || []}
dataSource={(counts || {}).rows || []} onReset={(v) => {
setNameOfInspectionPoint('')
setLicensePlate('')
setNumberOfAxles('')
setOverrunRateUpper('')
setOverrunRateFloor('')
setTestTime('')
}}
request={async (params) => { request={async (params) => {
const query = { const query = {
startDate: day[0], nameOfInspectionPoint:nameOfInspectionPoint,
endDate: day[1], licensePlate:licensePlate,
placeType: placeType, numberOfAxles:numberOfAxles,
regionId: regionId, overrunRateUpper:overrunRateUpper,
placeName: sitename, overrunRateFloor:overrunRateFloor,
limit: params.pageSize, testTime:testTime
offset: ((params.current ? params.current : 1) - 1) * params.pageSize
} }
setRowSelected([]); setRowSelected([]);
const res = await dispatch(getReportStatistic(query)); const res = await dispatch(getPurchase(query));
setCounts(res.payload.data) setCounts(res.payload.data)
return { return {
...res, ...res,
@ -390,15 +466,41 @@ const InForTable = (props) => {
> >
</ProTable></div> </ProTable></div>
<UserModal {modalVisible ? <UserModal
visible={modalVisible} visible={modalVisible}
onVisibleChange={setModalVisible} onVisibleChange={setModalVisible}
modalRecord={modalRecord} modalRecord={modalRecord}
typecard={typecard} typecard={typecard}
/> rewkeys={'zhichao'}
data={data}
recortd={recortd}
setMonitor={setMonitor}
// sitename={sitename}
setRecortd={setRecortd}
/> : ''}
</Spin > </Spin >
) )
} }
const data={
"districtcounty": "区/县",
"nameOfInspectionPoint": "检测点名称",
"licensePlate": "车牌号码",
"numberOfAxles": "车轴数",
"overrunRate": "超限率",
"overrunWeight": "超限重量",
"grossVehicleWeight": "车货总重",
"vehicleCargoWeightLimit": "车货限重",
"testTime": "检测时间",
"nameOfBusinessOwner": "经营业户名称",
"businessAddress": "经营业户地址",
"notifier": "通知人",
"notificationMethod": "通知方式",
"notificationResults": "通知结果",
"processingTime": "处理时间",
"deductPoints": "扣分",
"fine": "罚款",
"remarks": "备注"
}
function mapStateToProps(state) { function mapStateToProps(state) {
const { auth, depMessage } = state; const { auth, depMessage } = state;
const pakData = (dep) => { const pakData = (dep) => {

3
web/client/src/sections/fillion/components/operationalTable.js

@ -11,9 +11,6 @@ import HightModal from './highways/highwaysdata';
const OperaTionalTable = (props) => { const OperaTionalTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([]) const [rowSelected, setRowSelected] = useState([])
// const [regionId, setRegionId] = useState()//区域id
// const [placeType, setPlaceType] = useState()//场所
// const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称 const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju const [counts, setCounts] = useState()//shuju
const [modalVisible, setModalVisible] = useState(false); const [modalVisible, setModalVisible] = useState(false);

2
web/client/src/sections/quanju/containers/footer/build/Rightbottom.js

@ -54,7 +54,7 @@ function Rightbottom(props) {
textStyle: { textStyle: {
color: '#fff', color: '#fff',
}, },
formatter: (values) => `${values.seriesName}<br /> ${values.marker} ${values.name}<b>${values.value}</b>公里`, formatter: (values) => `${values.seriesName}<br /> ${values.marker} ${values.name}<b>${values.value}</b>`,
}, },
legend: { legend: {
orient: "vertical", orient: "vertical",

2
web/client/src/sections/quanju/containers/footer/build/Rightcenter.js

@ -83,7 +83,7 @@ const RNAKS = [FIRST, SECOND, THIRD]
<div className='build-right-center'> <div className='build-right-center'>
<div className='build-right-center-top'> <div className='build-right-center-top'>
<img src="/assets/images/quanju/gonglugongcheng.png"></img> <img src="/assets/images/quanju/gonglugongcheng.png"></img>
<div>在建公路工程数量</div> <div>在建公路工程数量/</div>
<h2>{sundata}</h2> <h2>{sundata}</h2>
</div> </div>
<AutoRollComponent content={renderContent()} <AutoRollComponent content={renderContent()}

11
web/client/src/sections/quanju/containers/footer/build/index.js

@ -36,10 +36,10 @@ const Build = (props) => {
const requestbuildingnumber = async ()=>{ const requestbuildingnumber = async ()=>{
const res = await dispatch(getdaolutongji()); const res = await dispatch(getdaolutongji());
let alltype = Object.keys(res.payload.data?.roadType || {}).map((item)=>({name:item,value:Number(keepThreeNum(res.payload.data.roadType[item]))})) let alltype = Object.keys(res.payload.data?.roadType || {}).map((item)=>({name:item,value:Number(keepThreeNum(res.payload.data.roadType[item]))}))
console.log(alltype,'打他啊') // console.log(alltype,'打他啊')
setdata(alltype.filter(item=>item.name==='县'||item.name==="乡"||item.name==='村')) setdata(alltype.filter(item=>item.name==='县'||item.name==="乡"||item.name==='村'))
setbuildingnumber(res.payload.data) setbuildingnumber(res.payload.data)
console.log(res.payload.data,'哈哈哈') // console.log(res.payload.data,'哈哈哈')
} }
@ -118,7 +118,9 @@ const Build = (props) => {
<Module title={"各种状态公路数量统计"} style={{ width: "100%", <Module title={"各种状态公路数量统计"} style={{ width: "100%",
height:" 33%" height:" 33%"
}} customize = {true}> }} customize = {true}>
{buildingnumber&&buildingnumber.buildedRoad!==0&&totalgongli!==0?<div className='build-left-top'> <div style={{height:"100%",position:"relative"}} >
<span style={{position:"absolute",width:"10%",color:"#FFF",backgroundColor:'rgba(216, 240, 255, 0.1)',right:"5%",textAlign:"center"}}></span>
{buildingnumber&&buildingnumber.buildedRoad!==0&&totalgongli!==0?<div className='build-left-top'>
<div className='build-left-top-item'> <div className='build-left-top-item'>
<div> <div>
{/* <i>&#9658;</i> */} {/* <i>&#9658;</i> */}
@ -137,6 +139,7 @@ const Build = (props) => {
<div>{buildingnumber?.buildedRoad || 0}</div> <div>{buildingnumber?.buildedRoad || 0}</div>
</div> </div>
</div>:<NoData/>} </div>:<NoData/>}
</div>
</Module> </Module>
<Module title={"各乡镇道路分布统计"} style={{ width: "100%", <Module title={"各乡镇道路分布统计"} style={{ width: "100%",
height:" 33%",marginTop:'3%' height:" 33%",marginTop:'3%'
@ -203,7 +206,7 @@ const Build = (props) => {
{safetyData&&sunsafetyData!==0?<RightBottom width='100%' {safetyData&&sunsafetyData!==0?<RightBottom width='100%'
height='100%' height='100%'
text='道路总公里' text='道路总公里'
total={sunsafetyData} total={keepThreeNum(sundata)}
data={keepThreeNum(safetyData)}/>:<NoData/>} data={keepThreeNum(safetyData)}/>:<NoData/>}
</Module> </Module>
</div> </div>

4
web/client/src/sections/quanju/containers/footer/build/style.less

@ -178,7 +178,7 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: absolute; position: absolute;
left: 16%; left: 15%;
top:38%; top:38%;
h2{ h2{
font-size: 1.25rem; font-size: 1.25rem;
@ -278,7 +278,7 @@
justify-content: center; justify-content: center;
position: absolute; position: absolute;
align-items: center; align-items: center;
left: 19%; left: 15%;
top:38%; top:38%;
h2{ h2{
font-size: 1.25rem; font-size: 1.25rem;

30
web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js

@ -15,7 +15,7 @@ export default function LeftItem({datas}) {
textStyle: { textStyle: {
color: '#fff', color: '#fff',
}, },
formatter: (values) => ` ${values.name}<b>${datas.processed}</b>`, formatter: (values) => `${values.name}<b>${datas.processed}</b>`,
}, },
title: { title: {
text: `${(datas.processed*100/datas.total).toFixed(2)}%`, text: `${(datas.processed*100/datas.total).toFixed(2)}%`,
@ -78,6 +78,7 @@ export default function LeftItem({datas}) {
}, },
series: [{ series: [{
type: 'bar', type: 'bar',
showBackground: true,//这里只有显示背景才能出现背景灰色的线
data: [{ data: [{
name: '已处理', name: '已处理',
value: (datas.processed*100/datas.total).toFixed(2), value: (datas.processed*100/datas.total).toFixed(2),
@ -97,37 +98,18 @@ export default function LeftItem({datas}) {
coordinateSystem: 'polar', coordinateSystem: 'polar',
roundCap: true, roundCap: true,
barWidth: 8, barWidth: 8,
barGap: '-100%', // 两环重叠 },
z: 2, ]
},{ // 灰色环
type: 'bar',
data: [{
value: 100,
itemStyle: {
color: '#092B7B ',
shadowColor: 'rgba(0, 0, 0, 0.2)',
shadowBlur: 5,
shadowOffsetY: 2
}
}],
coordinateSystem: 'polar',
roundCap: true,
barWidth: 8,
barGap: '-100%', // 两环重叠
z: 1
}]
} }
chartInstance.setOption(option); chartInstance.setOption(option);
}, []) }, [])
return ( return (
<div className='guanli-left-item'> <div className='guanli-left-item'>
{/* <span style={{position:"absolute",width:"10%",color:"#FFF",backgroundColor:'rgba(216, 240, 255, 0.1)',right:"5%",textAlign:"center",top:"2%"}}>条</span> */}
<div className='guanli-left-item-left'> <div className='guanli-left-item-left'>
<span>{datas.name}</span> <span>{datas.name}</span>
<div>{datas.total} <span></span></div> <div>{datas.total} <span></span></div>
</div> </div>
<div className='guanli-left-item-right'> <div className='guanli-left-item-right'>
<span></span> <span></span>

24
web/client/src/sections/quanju/containers/footer/guanli/index.js

@ -14,11 +14,16 @@ const Guanli = (props) => {
const [rightitemlist,setrightitemlist] = useState() const [rightitemlist,setrightitemlist] = useState()
const requestleftDatas = async()=>{ const requestleftDatas = async()=>{
const res = await dispatch(getjiandmanage()) const res = await dispatch(getjiandmanage())
res.payload.data.sort((a,b)=>{ res.payload.data?.sort((a,b)=>{
return parseInt(b.total) - parseInt(a.total) return parseInt(b.total) - parseInt(a.total)
}) })
setleftDatas(res.payload.data) setleftDatas(res.payload.data)
console.log(res.payload.data,'哈哈哈') // console.log(res.payload.data,'哈哈哈')
}
const data_string=(str)=> {
str.match('/([^.]*)$/g')
} }
const requestRightDatas = async()=>{ const requestRightDatas = async()=>{
const res = await dispatch(getjiandetail()) const res = await dispatch(getjiandetail())
@ -28,12 +33,19 @@ const Guanli = (props) => {
let d = res.payload.data?.overSpeedList?.filter((item,index)=>{ let d = res.payload.data?.overSpeedList?.filter((item,index)=>{
return escape(item.processingTime).indexOf("%u")<0 return escape(item.processingTime).indexOf("%u")<0
}) })
// let d2 = d.sort((a,b)=>b.processingTime < a.processingTime ?-1:1)
let d2 = d.sort((a, b) => b.processingTime.localeCompare(a.processingTime)) d.map((item,index)=>{
if(parseInt(item.processingTime.match(/([^.]*)$/)[0])<10){
return item.processingTime = `${(item.processingTime.match(/^([^.]*)(.[^.]*)/)[0])}.0${parseInt(item.processingTime.match(/([^.]*)$/)[0])}`
}
// console.log(d3,'好评')
console.log(item.processingTime.match(/([^.]*)$/)[0],'kk')
})
d.sort((a, b) => b.processingTime.localeCompare(a.processingTime))
setrightDatas(res.payload.data) setrightDatas(res.payload.data)
setrightitemlist(d) setrightitemlist(d)
console.log(d,'对比的数据') console.log(d,'对比的数据')
console.log(d2,'完美') // console.log(d2,'完美')
console.log(res.payload.data,'嘿嘿嘿') console.log(res.payload.data,'嘿嘿嘿')
} }
useEffect(()=>{ useEffect(()=>{
@ -45,7 +57,7 @@ const Guanli = (props) => {
const renderContent = () => { const renderContent = () => {
return <div style={{height:"100%"}}> return <div style={{height:"100%"}}>
{rightitemlist && rightitemlist.length!==0?rightitemlist?.map(({ id, licensePlate, overrunRate,fine,processingTime }, index) => { {rightitemlist && rightitemlist.length!==0?rightitemlist?.map(({ id, licensePlate, overrunRate,fine,processingTime }, index) => {
if(index<30){ if(index<120){
return <div key={index} className='guanli-right-item'> return <div key={index} className='guanli-right-item'>
<span>{licensePlate}</span> <span>{licensePlate}</span>
<span>{overrunRate}%</span> <span>{overrunRate}%</span>

1
web/client/src/sections/quanju/containers/footer/guanli/style.less

@ -19,6 +19,7 @@
.guanli-left-item{ .guanli-left-item{
box-sizing: border-box; box-sizing: border-box;
width: 85%; width: 85%;
position: relative;
// height: 30%; // height: 30%;
height: 24vh; height: 24vh;
margin: 0 auto 3%; margin: 0 auto 3%;

41
web/client/src/sections/quanju/containers/footer/operation/left.js

@ -10,6 +10,7 @@ const Left = (props) => {
const [treeData, setTreeData] = useState([]) const [treeData, setTreeData] = useState([])
const [treeDataList, setTreeDataList] = useState([]) const [treeDataList, setTreeDataList] = useState([])
const [expandedKeys, setExpandedKeys] = useState([]); const [expandedKeys, setExpandedKeys] = useState([]);
const [searchValue, setSearchValue] = useState('');
const [autoExpandParent, setAutoExpandParent] = useState(true); const [autoExpandParent, setAutoExpandParent] = useState(true);
const onExpand = (newExpandedKeys) => { const onExpand = (newExpandedKeys) => {
@ -20,6 +21,7 @@ const Left = (props) => {
useEffect(() => { useEffect(() => {
const { dispatch } = props const { dispatch } = props
dispatch(getBusTierList()) dispatch(getBusTierList())
}, []) }, [])
const { busTier } = props const { busTier } = props
const style = { height: "97%", marginTop: "3%" } const style = { height: "97%", marginTop: "3%" }
@ -35,10 +37,45 @@ const Left = (props) => {
setSearchValue(value); setSearchValue(value);
setAutoExpandParent(true); setAutoExpandParent(true);
}; };
const loop = (treeData) =>
treeData.map((item) => {
const index = item.title.indexOf(searchValue);
const beforeStr = item.title.substr(0, index);
const afterStr = item.title.substr(index + searchValue.length);
const title =
index > -1 ? (
<span>
{beforeStr}
<span className="site-tree-search-value">{searchValue}</span>
{afterStr}
</span>
) : (
<span>{item.title}</span>
);
if (item.children && item.children.length > 0) {
const children = loop(item.children);
return {
...item,
title: index > -1 || children.length ? title : null,
children: children.length ? children : undefined
};
}
return index > -1
? {
...item,
title
}
: {
...item,
title: null
};
})
.filter((item) => !!item.title);
useEffect(() => { useEffect(() => {
let busTierList = [] let busTierList = []
let busTierOpen = [] let busTierOpen = []
let dataList = [] let dataList = []
busTier && busTier.data && busTier.data.forEach((e, index) => { busTier && busTier.data && busTier.data.forEach((e, index) => {
if (index == 0) { if (index == 0) {
busTierOpen.push(e.name) busTierOpen.push(e.name)
@ -115,8 +152,8 @@ const Left = (props) => {
onExpand={onExpand} onExpand={onExpand}
expandedKeys={expandedKeys} expandedKeys={expandedKeys}
autoExpandParent={autoExpandParent} autoExpandParent={autoExpandParent}
treeData={treeData} treeData={loop(treeData)}
/> : <div style={{width:'100%',color:'#fff',textAlign:'center',marginTop:'90%'}}></div> /> : <div style={{ width: '100%', color: '#fff', textAlign: 'center', marginTop: '90%' }}></div>
} }
</div> </div>

14
web/client/src/utils/webapi.js

@ -86,9 +86,23 @@ export const ApiTable = {
//获取宣传数据 //获取宣传数据
getpropagata: 'publicity', getpropagata: 'publicity',
// <<<<<<< HEAD
// //公交信息
// getCircuit: 'bus/line', putCircuit: 'bus/line', delCircuit: 'bus/line/{lineId}',
// getVehicle: 'bus/car', putVehicle: 'bus/car', delVehicle: 'bus/car/{carId}',
// =======
//公交信息 //公交信息
getCircuit: 'bus/line', putCircuit: 'bus/line', delCircuit: 'bus/line/{lineId}', getCircuit: 'bus/line', putCircuit: 'bus/line', delCircuit: 'bus/line/{lineId}',
getVehicle: 'bus/car', putVehicle: 'bus/car', delVehicle: 'bus/car/{carId}', getVehicle: 'bus/car', putVehicle: 'bus/car', delVehicle: 'bus/car/{carId}',
//治超管理
getPurchase: 'overspeed',
putPurchase: 'overspeed',
delPurchase: 'overspeed/{overspeedId}',
// >>>>>>> a3fe9bee43370f1e5ceb69dcdef1b9b7cbf9c84c
}; };

Loading…
Cancel
Save