dengyinhuan 1 year ago
parent
commit
bda3ee31bb
  1. 4
      api/app/lib/controllers/data/appointed.js
  2. 18
      api/app/lib/controllers/data/vehicle.js
  3. 73
      api/app/lib/models/report.js
  4. 4
      scripts/1.3.0/schema/6.update_report.sql
  5. 24
      web/client/src/sections/fillion/components/bridgeTable.js
  6. 11
      web/client/src/sections/fillion/components/feedback/nominateModalcopy.js
  7. 14
      web/client/src/sections/fillion/components/highwaysTable.js
  8. 37
      web/client/src/sections/fillion/components/maintenanceTable.js
  9. 6
      web/client/src/sections/fillion/components/patrolTable.js
  10. 21
      web/client/src/sections/fillion/components/transportationTable.js
  11. 1
      web/client/src/sections/fillion/containers/maintenanceSpotCheck.js
  12. 12
      web/client/src/sections/quanju/containers/footer/build/Leftbottom.js
  13. 3
      web/client/src/sections/quanju/containers/footer/build/Rightbottom.js
  14. 1
      web/client/src/sections/quanju/containers/footer/build/index.js
  15. 12
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/daolu.js
  16. 8
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/top.js
  17. 6
      web/client/src/sections/quanju/containers/footer/operation/right.js

4
api/app/lib/controllers/data/appointed.js

@ -4,9 +4,9 @@ const moment = require('moment')
async function appoint(ctx) { async function appoint(ctx) {
try { try {
const models = ctx.fs.dc.models const models = ctx.fs.dc.models
const { recordId, performerId } = ctx.request.body const { recordId, performerId, handleOpinions } = ctx.request.body
await models.Report.update({ await models.Report.update({
performerId performerId, handleOpinions
}, { where: { id: recordId } }) }, { where: { id: recordId } })
ctx.status = 204; ctx.status = 204;
} catch (error) { } catch (error) {

18
api/app/lib/controllers/data/vehicle.js

@ -1,11 +1,20 @@
'use strict'; 'use strict';
const { QueryTypes } = require('sequelize');
async function get(ctx) { async function get(ctx) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { type } = ctx.request.body; const { type } = ctx.request.body;
const { name } = ctx.query; const { name } = ctx.query;
const sequelize = ctx.fs.dc.orm
const sqlStr = `select count(p.road_marking) 标线,count(p.roadside_ditch) 边沟,
count(p.guardrail) 护栏, count(p.roadside_trees) 行道树,count(p.wrong_lane) 错车道
from (
select t.*,row_number() over (partition by t.luduan order by t.time desc ) rn from (
select code_road||'-'||road_section_start||'-'||road_section_end luduan,
road_marking,roadside_ditch,guardrail,roadside_trees,wrong_lane,time from report
where report_type='conserve') t ) p where p.rn=1`
const conserveData = await sequelize.query(sqlStr, { type: QueryTypes.SELECT })
let findOption = { let findOption = {
where: { where: {
type type
@ -17,9 +26,12 @@ async function get (ctx) {
} }
} }
const vehicleRes = await models.Statistic.findAll(findOption) const vehicleRes = await models.Statistic.findAll(findOption)
console.log('vehicleRes', vehicleRes)
ctx.status = 200; ctx.status = 200;
ctx.body = vehicleRes ctx.body = {
vehicleRes: vehicleRes.filter(item => item.dataValues.name === '标志牌' || item.dataValues.name === '养护责任牌')
, conserveData
}
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;

73
api/app/lib/models/report.js

@ -7,7 +7,6 @@ module.exports = dc => {
const sequelize = dc.orm; const sequelize = dc.orm;
const Report = sequelize.define("report", { const Report = sequelize.define("report", {
id: { id: {
index: 1,
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
defaultValue: null, defaultValue: null,
@ -18,87 +17,78 @@ module.exports = dc => {
unique: "report_id_uindex" unique: "report_id_uindex"
}, },
reportType: { reportType: {
index: 2,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: false,
defaultValue: null, defaultValue: null,
comment: "上报类型", comment: "上报类型 巡查:patrol / 养护:conserve",
primaryKey: false, primaryKey: false,
field: "report_type", field: "report_type",
autoIncrement: false autoIncrement: false
}, },
projectType: { projectType: {
index: 3,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: true,
defaultValue: null, defaultValue: null,
comment: "工程类型", comment: "工程类型 道路:road / 桥梁:birdge / 涵洞:culvert",
primaryKey: false, primaryKey: false,
field: "project_type", field: "project_type",
autoIncrement: false autoIncrement: false
}, },
road: { road: {
index: 4,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: '所属道路', comment: null,
primaryKey: false, primaryKey: false,
field: "road", field: "road",
autoIncrement: false autoIncrement: false
}, },
roadSectionStart: { roadSectionStart: {
index: 5,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: '开始路段', comment: null,
primaryKey: false, primaryKey: false,
field: "road_section_start", field: "road_section_start",
autoIncrement: false autoIncrement: false
}, },
roadSectionEnd: { roadSectionEnd: {
index: 6,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: '结束路段', comment: null,
primaryKey: false, primaryKey: false,
field: "road_section_end", field: "road_section_end",
autoIncrement: false autoIncrement: false
}, },
longitude: { longitude: {
index: 7,
type: DataTypes.DOUBLE, type: DataTypes.DOUBLE,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: '经度', comment: null,
primaryKey: false, primaryKey: false,
field: "longitude", field: "longitude",
autoIncrement: false autoIncrement: false
}, },
latitude: { latitude: {
index: 8,
type: DataTypes.DOUBLE, type: DataTypes.DOUBLE,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: '纬度', comment: null,
primaryKey: false, primaryKey: false,
field: "latitude", field: "latitude",
autoIncrement: false autoIncrement: false
}, },
content: { content: {
index: 9,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: '具体内容', comment: null,
primaryKey: false, primaryKey: false,
field: "content", field: "content",
autoIncrement: false autoIncrement: false
}, },
scenePic: { scenePic: {
index: 10,
type: DataTypes.ARRAY(DataTypes.STRING), type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
@ -108,7 +98,6 @@ module.exports = dc => {
autoIncrement: false autoIncrement: false
}, },
conserveBeforePic: { conserveBeforePic: {
index: 11,
type: DataTypes.ARRAY(DataTypes.STRING), type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
@ -118,7 +107,6 @@ module.exports = dc => {
autoIncrement: false autoIncrement: false
}, },
conserveUnderwayPic: { conserveUnderwayPic: {
index: 12,
type: DataTypes.ARRAY(DataTypes.STRING), type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
@ -128,7 +116,6 @@ module.exports = dc => {
autoIncrement: false autoIncrement: false
}, },
conserveAfterPic: { conserveAfterPic: {
index: 13,
type: DataTypes.ARRAY(DataTypes.STRING), type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
@ -138,7 +125,6 @@ module.exports = dc => {
autoIncrement: false autoIncrement: false
}, },
userId: { userId: {
index: 14,
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
@ -148,52 +134,39 @@ module.exports = dc => {
autoIncrement: false autoIncrement: false
}, },
time: { time: {
index: 15,
type: DataTypes.DATE, type: DataTypes.DATE,
allowNull: false, allowNull: false,
defaultValue: null, defaultValue: null,
comment: '创建日期', comment: null,
primaryKey: false, primaryKey: false,
field: "time", field: "time",
autoIncrement: false autoIncrement: false
}, },
address: { address: {
index: 16,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: '具体位置', comment: null,
primaryKey: false, primaryKey: false,
field: "address", field: "address",
autoIncrement: false autoIncrement: false
}, },
projectName: { projectName: {
index: 17,
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: "工程名称", comment: null,
primaryKey: false, primaryKey: false,
field: "project_name", field: "project_name",
autoIncrement: false autoIncrement: false
}, },
handleState: { handleState: {
index: 18,
type: DataTypes.STRING,
allowNull: false,
defaultValue: "已处理",
// comment: "处理状态",
primaryKey: false,
field: "handle_state",
autoIncrement: false
},
codeRoad: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: null, comment: null,
primaryKey: false, primaryKey: false,
field: "code_road", field: "handle_state",
autoIncrement: false autoIncrement: false
}, },
performerId: { performerId: {
@ -209,7 +182,7 @@ module.exports = dc => {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: "", comment: "执行内容描述",
primaryKey: false, primaryKey: false,
field: "handle_content", field: "handle_content",
autoIncrement: false autoIncrement: false
@ -223,6 +196,15 @@ module.exports = dc => {
field: "handle_pic", field: "handle_pic",
autoIncrement: false autoIncrement: false
}, },
codeRoad: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "code_road",
autoIncrement: false
},
videoUrl: { videoUrl: {
type: DataTypes.ARRAY(DataTypes.STRING), type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true, allowNull: true,
@ -456,6 +438,15 @@ module.exports = dc => {
primaryKey: false, primaryKey: false,
field: "other_description", field: "other_description",
autoIncrement: false autoIncrement: false
},
handleOpinions: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "处理意见",
primaryKey: false,
field: "handle_opinions",
autoIncrement: false
} }
}, { }, {
tableName: "report", tableName: "report",

4
scripts/1.3.0/schema/6.update_report.sql

@ -0,0 +1,4 @@
alter table report
add handle_opinions varchar(1024);
comment on column report.handle_opinions is '处理意见';

24
web/client/src/sections/fillion/components/bridgeTable.js

@ -25,6 +25,9 @@ const BrideTable = (props) => {
const [whichofits, setWhichofits] = useState('qiaoliang') const [whichofits, setWhichofits] = useState('qiaoliang')
const [delet, setDelet] = useState() const [delet, setDelet] = useState()
const [differentiate, setDifferentiate] = useState('bridge') const [differentiate, setDifferentiate] = useState('bridge')
const [smallBridge, setSmallBridge] = useState([])
const [middleBridge, setMiddleBridge] = useState([])
const [bigBridge, setBigBridge] = useState([])
const [editAble, setEditAble] = useState(user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'BRIDGEMANAGE')[0].isshow === "true" ? true : '') const [editAble, setEditAble] = useState(user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'BRIDGEMANAGE')[0].isshow === "true" ? true : '')
const ref = useRef() const ref = useRef()
useEffect(() => { ref.current.reload() }, [whichofits, delet]) useEffect(() => { ref.current.reload() }, [whichofits, delet])
@ -161,7 +164,7 @@ const BrideTable = (props) => {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
} }
}, { }, {
title: '跨越地物类型1', title: '跨越地物类型',
search: false, search: false,
dataIndex: 'time8', dataIndex: 'time8',
valueType: 'dateRange', valueType: 'dateRange',
@ -175,7 +178,7 @@ const BrideTable = (props) => {
getPopupContainer: (triggerNode) => triggerNode.parentNode, getPopupContainer: (triggerNode) => triggerNode.parentNode,
} }
}, { }, {
title: '跨越地物名称1', title: '跨越地物名称',
search: false, search: false,
dataIndex: 'time9', dataIndex: 'time9',
valueType: 'dateRange', valueType: 'dateRange',
@ -1810,7 +1813,9 @@ const BrideTable = (props) => {
setRowSelected([]); setRowSelected([]);
const res = await dispatch(getBridge(query)); const res = await dispatch(getBridge(query));
// console.log(res) // console.log(res)
setSmallBridge(res.payload.data?.filter(item => item.bridgeClassification === '小桥'))
setMiddleBridge(res.payload.data?.filter(item => item.bridgeClassification === '中桥'))
setBigBridge(res.payload.data?.filter(item => item.bridgeClassification === '大桥'))
setCounts(res.payload.data) setCounts(res.payload.data)
return { return {
...res, ...res,
@ -1833,6 +1838,7 @@ const BrideTable = (props) => {
search={{ search={{
defaultCollapsed: false, defaultCollapsed: false,
optionRender: (searchConfig, formProps, dom) => [ optionRender: (searchConfig, formProps, dom) => [
<span style={{ marginRight: 80 }}>{`共有小桥${smallBridge.length}座,中桥${middleBridge.length}座,大桥${bigBridge.length}`}</span>,
...dom.reverse(), ...dom.reverse(),
<Popconfirm title="确认导出?" onConfirm={() => { props.exports(rowSelected, differentiate) }} disabled={editAble}> <Popconfirm title="确认导出?" onConfirm={() => { props.exports(rowSelected, differentiate) }} disabled={editAble}>
<Button <Button
@ -1847,7 +1853,8 @@ const BrideTable = (props) => {
> >
</ProTable> </ProTable>
</div> </div>
{modalVisible ? <UserModal {
modalVisible ? <UserModal
visible={modalVisible} visible={modalVisible}
onVisibleChange={setModalVisible} onVisibleChange={setModalVisible}
modalRecord={modalRecord} modalRecord={modalRecord}
@ -1858,8 +1865,10 @@ const BrideTable = (props) => {
setDelet={setDelet} setDelet={setDelet}
// sitename={sitename} // sitename={sitename}
setRecortd={setRecortd} setRecortd={setRecortd}
/> : ''} /> : ''
{modalVisibleyilan ? <ProjectModal }
{
modalVisibleyilan ? <ProjectModal
visible={modalVisibleyilan} visible={modalVisibleyilan}
onVisibleChange={setModalVisibleyilan} onVisibleChange={setModalVisibleyilan}
modalRecord={modalRecord} modalRecord={modalRecord}
@ -1868,7 +1877,8 @@ const BrideTable = (props) => {
setDelet={setDelet} setDelet={setDelet}
recortd={recortd} recortd={recortd}
setRecortd={setRecortd} setRecortd={setRecortd}
/> : ''} /> : ''
}
</Spin > </Spin >
) )
} }

11
web/client/src/sections/fillion/components/feedback/nominateModalcopy.js

@ -1,13 +1,14 @@
'use strict'; 'use strict';
import React, { useState, useEffect, useCallback, useRef } from 'react'; import React, { useState, useEffect, useCallback, useRef } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { Spin, TreeSelect, Modal, Form, Select } from 'antd'; import { Spin, TreeSelect, Modal, Form, Select, Input } from 'antd';
import ProForm, { ProFormText, ModalForm, ProFormSwitch, ProFormTreeSelect, ProFormSelect } from '@ant-design/pro-form'; import ProForm, { ProFormText, ModalForm, ProFormSwitch, ProFormTreeSelect, ProFormSelect } from '@ant-design/pro-form';
import { getDepUser } from '../../../organization/actions/user' import { getDepUser } from '../../../organization/actions/user'
import { appointTask } from '../../actions/appointTask' import { appointTask } from '../../actions/appointTask'
import moment from 'moment'; import moment from 'moment'
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
const { TextArea } = Input;
const NominateModal = (props) => { const NominateModal = (props) => {
const { queryData, recordId, visible, user, onCancel, depMessage, loading, depUser, clientHeight, depData, onVisibleChange, dispatch } = props const { queryData, recordId, visible, user, onCancel, depMessage, loading, depUser, clientHeight, depData, onVisibleChange, dispatch } = props
@ -38,7 +39,7 @@ const NominateModal = (props) => {
} }
const handleFinish = () => { const handleFinish = () => {
form.validateFields().then(values => { form.validateFields().then(values => {
dispatch(appointTask({ recordId: recordId, performerId: values.nameId })).then((res) => { dispatch(appointTask({ recordId: recordId, performerId: values.nameId, handleOpinions: values.handleOpinions })).then((res) => {
if (res.success) { if (res.success) {
setSelectedUserId(null) setSelectedUserId(null)
queryData() queryData()
@ -92,9 +93,13 @@ const NominateModal = (props) => {
onChange={(value) => setSelectedUserId(value)} onChange={(value) => setSelectedUserId(value)}
> >
</Select> </Select>
</Form.Item> </Form.Item>
</div> </div>
</div> </div>
<Form.Item label='处理意见:' name='handleOpinions'>
<TextArea />
</Form.Item>
</Form> </Form>
</Modal> </Modal>
</Spin> </Spin>

14
web/client/src/sections/fillion/components/highwaysTable.js

@ -76,6 +76,7 @@ const TransporTationTable = (props) => {
fixed: 'left', fixed: 'left',
width: 120, width: 120,
render: (dom, record) => { render: (dom, record) => {
return record.count return record.count
}, },
fieldProps: { fieldProps: {
@ -90,13 +91,14 @@ const TransporTationTable = (props) => {
width: 160, width: 160,
fixed: 'right', fixed: 'right',
render: (dom, record) => { render: (dom, record) => {
console.log('record', record.id === null)
return <div><Button type="link" return <div><Button type="link"
onClick={() => { onClick={() => {
hightModal('edit', record) hightModal('edit', record)
setTypecard('compile') setTypecard('compile')
setRecortd(record) setRecortd(record)
}} }}
disabled={editAble} disabled={editAble && record.id === null}
>编辑</Button></div> >编辑</Button></div>
} }
@ -316,7 +318,15 @@ const TransporTationTable = (props) => {
} }
setRowSelected([]); setRowSelected([]);
const res = await dispatch(getHighways(query)); const res = await dispatch(getHighways(query));
setCounts(res.payload.data.filter(item => item.name !== '路牌名')) let rslt = res.payload.data?.vehicleRes?.filter(item => item.name !== '路牌名')
const additionalProperties = Object.entries(res.payload.data?.conserveData[0]).map(([key, value]) => ({
id: null,
name: key,
count: Number(value),
type: null
}))
additionalProperties.forEach(item => { rslt.push(item) })
setCounts(rslt)
return { return {
...res, ...res,
total: res.payload.data ? res.payload.data.count : 0 total: res.payload.data ? res.payload.data.count : 0

37
web/client/src/sections/fillion/components/maintenanceTable.js

@ -25,24 +25,25 @@ const DetailForm = (props) => {
{ key: '养护路段', name: 'roadSectionStart' }, { key: '养护路段', name: 'roadSectionStart' },
{ key: '具体位置', name: 'address' }, { key: '具体位置', name: 'address' },
{ key: '路面类型', name: 'roadType' }, { key: '路面类型', name: 'roadType' },
{ key: '路面宽度', name: 'roadWidth' }, { key: '路面宽度(米)', name: 'roadWidth' },
{ key: '错车道', name: 'wrongLane' }, { key: '错车道(个)', name: 'wrongLane' },
{ key: '行道树', name: 'roadsideTrees' }, { key: '行道树(棵)', name: 'roadsideTrees' },
{ key: '边沟', name: 'roadsideDitch' }, { key: '边沟(米)', name: 'roadsideDitch' },
{ key: '护栏', name: 'guardrail' }, { key: '护栏(米)', name: 'guardrail' },
{ key: '标线', name: 'roadMarking' }, { key: '标线(米)', name: 'roadMarking' },
{ key: '养护人员人数', name: 'maintenanceStaffCount' }, { key: '养护人员人数(人)', name: 'maintenanceStaffCount' },
{ key: '修整路肩', name: 'shoulderRepair' }, { key: '修整路肩(平方米)', name: 'shoulderRepair' },
{ key: '清理边沟', name: 'ditchCleaning' }, { key: '清理边沟(米)', name: 'ditchCleaning' },
{ key: '修补沥青路面', name: 'asphaltRepair' }, { key: '修补沥青路面(平方米)', name: 'asphaltRepair' },
{ key: '修补水泥路面', name: 'concreteRepair' }, { key: '修补水泥路面(平方米)', name: 'concreteRepair' },
{ key: '除草', name: 'grassMowing' }, { key: '除草(米)', name: 'grassMowing' },
{ key: '树刷白', name: 'treeWhitening' }, { key: '树刷白(株/公里)', name: 'treeWhitening' },
{ key: '桩刷白', name: 'pileWhitening' }, { key: '桩刷白(个)', name: 'pileWhitening' },
{ key: '维护护栏', name: 'guardrailMaintenance' }, { key: '维护护栏(个)', name: 'guardrailMaintenance' },
{ key: '修复端头', name: 'endHeadRepair' }, { key: '修复端头(块)', name: 'endHeadRepair' },
{ key: '其他养护内容', name: 'otherDescription' }, { key: '其他养护内容', name: 'otherDescription' },
{ key: '养护前图片', name: 'conserveBeforePic' }, { key: '养护前图片', name: 'conserveBeforePic' },
{ key: '养护中图片', name: 'conserveUnderwayPic' },
{ key: '养护后图片', name: 'conserveAfterPic' }, { key: '养护后图片', name: 'conserveAfterPic' },
{ key: '上报视频', name: 'videoUrl' }, { key: '上报视频', name: 'videoUrl' },
@ -69,7 +70,7 @@ const DetailForm = (props) => {
{ {
obj.name != 'conserveBeforePic' && obj.name != 'conserveAfterPic' && obj.name != 'roadSectionStart' && obj.name != 'videoUrl' && obj.name.indexOf('conserve') == -1 ? obj.name != 'conserveBeforePic' && obj.name != 'conserveAfterPic' && obj.name != 'roadSectionStart' && obj.name != 'videoUrl' && obj.name.indexOf('conserve') == -1 ?
<Input <Input
style={{ width: '70%' }} style={{ width: '60%' }}
value={ value={
obj.name == 'id' ? obj.name == 'id' ?
moment(data.time).format("YYYYMMDD") * 10000 + data.id moment(data.time).format("YYYYMMDD") * 10000 + data.id
@ -91,7 +92,7 @@ const DetailForm = (props) => {
</div> </div>
}) : '暂无图片' }) : '暂无图片'
} }
</div> : obj.name != 'videoUrl' ? <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}> </div> : obj.name != 'videoUrl' ? <div style={{ width: '60%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
<Input style={{ width: '100%' }} disabled value={data[obj.name] + '-' + data['roadSectionEnd']} /> <Input style={{ width: '100%' }} disabled value={data[obj.name] + '-' + data['roadSectionEnd']} />
</div> : <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}> </div> : <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>

6
web/client/src/sections/fillion/components/patrolTable.js

@ -45,7 +45,7 @@ const DetailForm = (props) => {
const keyList = [ const keyList = [
// { key: '编号', name: 'id' }, // { key: '编号', name: 'id' },
// isPatrol ?'巡查管理详情' :isRoad ? '建设上报详情' : '异常反馈详情' // isPatrol ?'巡查管理详情' :isRoad ? '建设上报详情' : '异常反馈详情'
{ key: '工程类型', name: 'projectType', skip: isPatrol }, { key: '工程类型', name: 'projectType', skip: !isPatrol },
{ key: '反馈类型', name: 'projectType', skip: !isAnomaly }, { key: '反馈类型', name: 'projectType', skip: !isAnomaly },
{ key: '工程名称', name: 'projectName', skip: !isRoad }, { key: '工程名称', name: 'projectName', skip: !isRoad },
{ key: '所在路段', name: 'road', skip: isPatrol }, { key: '所在路段', name: 'road', skip: isPatrol },
@ -53,6 +53,7 @@ const DetailForm = (props) => {
{ key: '巡查内容', name: 'content', skip: isPatrol }, { key: '巡查内容', name: 'content', skip: isPatrol },
{ key: '路线代码', name: 'codeRoad', skip: !isAnomaly && isPatrol }, { key: '路线代码', name: 'codeRoad', skip: !isAnomaly && isPatrol },
{ key: '现场照片', name: 'scenePic', skip: isPatrol }, { key: '现场照片', name: 'scenePic', skip: isPatrol },
{ key: '处理意见', name: 'handleOpinions', skip: !isAnomaly },
{ key: '处理详情', name: 'handleContent', skip: !isAnomaly }, { key: '处理详情', name: 'handleContent', skip: !isAnomaly },
{ key: '处理图片', name: 'handlePic', skip: !isAnomaly }, { key: '处理图片', name: 'handlePic', skip: !isAnomaly },
{ key: '处理人', name: 'performerName', skip: !isAnomaly }, { key: '处理人', name: 'performerName', skip: !isAnomaly },
@ -89,6 +90,7 @@ const DetailForm = (props) => {
{ key: '巡查内容', name: 'content' }, { key: '巡查内容', name: 'content' },
{ key: '路线代码', name: 'codeRoad', skip: !isAnomaly && !isPatrol }, { key: '路线代码', name: 'codeRoad', skip: !isAnomaly && !isPatrol },
{ key: '现场照片', name: 'scenePic' }, { key: '现场照片', name: 'scenePic' },
{ key: '处理意见', name: 'handleOpinions', skip: !isAnomaly },
{ key: '处理详情', name: 'handleContent', skip: !isAnomaly }, { key: '处理详情', name: 'handleContent', skip: !isAnomaly },
{ key: '处理图片', name: 'handlePic', skip: !isAnomaly }, { key: '处理图片', name: 'handlePic', skip: !isAnomaly },
{ key: '处理人', name: 'performerName', skip: !isAnomaly } { key: '处理人', name: 'performerName', skip: !isAnomaly }
@ -112,7 +114,7 @@ const DetailForm = (props) => {
<div style={{ display: 'flex', width: '100%', justifyContent: 'space-between', margin: '12px 0' }}> <div style={{ display: 'flex', width: '100%', justifyContent: 'space-between', margin: '12px 0' }}>
<span style={{ fontSize: 16, color: 'gray', minWidth: '26%' }}>{obj.key}</span> <span style={{ fontSize: 16, color: 'gray', minWidth: '26%' }}>{obj.key}</span>
{ {
obj.name != 'scenePic' && obj.name != 'roadSectionStart' && obj.name != 'videoUrl' && obj.name.indexOf('conserve') == -1 ? obj.name != 'handlePic' && obj.name != 'scenePic' && obj.name != 'roadSectionStart' && obj.name != 'videoUrl' && obj.name.indexOf('conserve') == -1 ?
<Input <Input
style={{ width: '70%' }} style={{ width: '70%' }}
value={ value={

21
web/client/src/sections/fillion/components/transportationTable.js

@ -24,6 +24,7 @@ const TransporTationTable = (props) => {
const [differentiate, setDifferentiate] = useState('road') const [differentiate, setDifferentiate] = useState('road')
const [grade, setGrade] = useState('县') const [grade, setGrade] = useState('县')
const [departmentInfo, setDepartment] = useState('') const [departmentInfo, setDepartment] = useState('')
const [roadData, setRoadData] = useState([])//道路数据
const [editAble, setEditAble] = useState(user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'ROADMANAGE')[0].isshow === "true" ? true : '') const [editAble, setEditAble] = useState(user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'ROADMANAGE')[0].isshow === "true" ? true : '')
const ref = useRef() const ref = useRef()
useEffect(() => { ref.current.reload() }, [whichofits, delet]) useEffect(() => { ref.current.reload() }, [whichofits, delet])
@ -3761,6 +3762,7 @@ const TransporTationTable = (props) => {
setWhichofits('县') setWhichofits('县')
setDifferentiate('road') setDifferentiate('road')
setGrade('县') setGrade('县')
setRoadData([])
}}>县道{activeKey === 'tab1'}</span>, }}>县道{activeKey === 'tab1'}</span>,
}, },
{ {
@ -3769,6 +3771,7 @@ const TransporTationTable = (props) => {
setWhichofits('乡') setWhichofits('乡')
setGrade('乡') setGrade('乡')
setDifferentiate('road') setDifferentiate('road')
setRoadData([])
}}>乡道{activeKey === 'tab2'}</span>, }}>乡道{activeKey === 'tab2'}</span>,
}, },
@ -3778,6 +3781,7 @@ const TransporTationTable = (props) => {
setWhichofits('村') setWhichofits('村')
setDifferentiate('road') setDifferentiate('road')
setGrade('村') setGrade('村')
setRoadData([])
}}>村道{activeKey === 'tab3'}</span>, }}>村道{activeKey === 'tab3'}</span>,
}, },
@ -3819,8 +3823,8 @@ const TransporTationTable = (props) => {
} }
setRowSelected([]); setRowSelected([]);
const res = await dispatch(getRoadway(query)); const res = await dispatch(getRoadway(query));
// console.log(res) const uniqueArray = [...new Set(res.payload.data?.map(item => item.routeName))];
setRoadData(uniqueArray)
setCounts(departmentInfo ? res.payload.data.filter((item) => { setCounts(departmentInfo ? res.payload.data.filter((item) => {
return item.townshipCode === departmentInfo.areaCode return item.townshipCode === departmentInfo.areaCode
}) : res.payload.data) }) : res.payload.data)
@ -3836,6 +3840,8 @@ const TransporTationTable = (props) => {
} }
setRowSelected([]); setRowSelected([]);
const res = await dispatch(getRoadway(query)); const res = await dispatch(getRoadway(query));
const uniqueArray = [...new Set(res.payload.data?.map(item => item.routeName))];
setRoadData(uniqueArray)
setCounts(departmentInfo ? res.payload.data.filter((item) => { setCounts(departmentInfo ? res.payload.data.filter((item) => {
return item.townshipCode === departmentInfo.areaCode return item.townshipCode === departmentInfo.areaCode
}) : res.payload.data) }) : res.payload.data)
@ -3849,7 +3855,9 @@ const TransporTationTable = (props) => {
road: sitename road: sitename
} }
setRowSelected([]); setRowSelected([]);
const res = await dispatch(getRoadway(query)); const res = await dispatch(getRoadway(query))
const uniqueArray = [...new Set(res.payload.data?.map(item => item.routeName))];
setRoadData(uniqueArray)
setCounts(departmentInfo ? res.payload.data.filter((item) => { setCounts(departmentInfo ? res.payload.data.filter((item) => {
return item.townshipCode === departmentInfo.areaCode return item.townshipCode === departmentInfo.areaCode
}) : res.payload.data) }) : res.payload.data)
@ -3864,8 +3872,8 @@ const TransporTationTable = (props) => {
entryName: sitename entryName: sitename
} }
setRowSelected([]); setRowSelected([]);
const res = await dispatch(getProject(query)); const res = await dispatch(getProject(query))
setCounts(res.payload.data) console.log('56666666', res)
return { return {
...res, ...res,
total: res.payload.data ? res.payload.data.count : 0 total: res.payload.data ? res.payload.data.count : 0
@ -3875,6 +3883,7 @@ const TransporTationTable = (props) => {
search={{ search={{
defaultCollapsed: false, defaultCollapsed: false,
optionRender: (searchConfig, formProps, dom) => [ optionRender: (searchConfig, formProps, dom) => [
<span style={{ marginRight: 20 }}>{`共有${whichofits}道:${roadData.length || 0}`}</span>,
...dom.reverse(), ...dom.reverse(),
<Popconfirm title="确认导出?" onConfirm={() => { props.exports(rowSelected, grade, differentiate) }} <Popconfirm title="确认导出?" onConfirm={() => { props.exports(rowSelected, grade, differentiate) }}
disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'ROADMANAGE')[0].isshow === "true" ? true : ''} disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'ROADMANAGE')[0].isshow === "true" ? true : ''}
@ -3884,7 +3893,7 @@ const TransporTationTable = (props) => {
> >
导出 导出
</Button> </Button>
</Popconfirm> </Popconfirm>,
], ],
}} }}
> >

1
web/client/src/sections/fillion/containers/maintenanceSpotCheck.js

@ -61,6 +61,7 @@ const DetailForm = (props) => {
{ key: '修复端头(块)', name: 'endHeadRepair' }, { key: '修复端头(块)', name: 'endHeadRepair' },
{ key: '其他养护内容', name: 'otherDescription' }, { key: '其他养护内容', name: 'otherDescription' },
{ key: '养护前图片', name: 'conserveBeforePic' }, { key: '养护前图片', name: 'conserveBeforePic' },
{ key: '养护中图片', name: 'conserveUnderwayPic' },
{ key: '养护后图片', name: 'conserveAfterPic' }, { key: '养护后图片', name: 'conserveAfterPic' },
{ key: '上报视频', name: 'videoUrl' }, { key: '上报视频', name: 'videoUrl' },

12
web/client/src/sections/quanju/containers/footer/build/Leftbottom.js

@ -21,6 +21,12 @@ function Leftbottom(props) {
{ name: '乡道', value: 17 }, { name: '乡道', value: 17 },
{ name: '村道', value: 4 }, { name: '村道', value: 4 },
] ]
//写死数据
const dataNo = [
{ name: '县', value: 207.8 },
{ name: '乡', value: 680.5 },
{ name: '村', value: 1800.7 },
]
const chartTitle = '道路总公里'; const chartTitle = '道路总公里';
const title = '基础设施安全监测版块'; const title = '基础设施安全监测版块';
let name = [], emptyName = [] let name = [], emptyName = []
@ -229,7 +235,8 @@ legend: {
label: { label: {
show: false show: false
}, },
data: data, data: dataNo,
// data: data,
}, },
], ],
}; };
@ -276,7 +283,8 @@ legend: {
<div className='build-left-bottom'> <div className='build-left-bottom'>
<span style={{ position: "absolute", width: "10%", color: "#FFF", backgroundColor: 'rgba(216, 240, 255, 0.1)', right: "5%", textAlign: "center", top: 0 }}>公里</span> <span style={{ position: "absolute", width: "10%", color: "#FFF", backgroundColor: 'rgba(216, 240, 255, 0.1)', right: "5%", textAlign: "center", top: 0 }}>公里</span>
<div className='build-left-bottom-title'> <div className='build-left-bottom-title'>
<h2>{total}</h2> <h2>2689.00</h2>
{/* <h2>{total}</h2> */}
<span>道路总公里</span> <span>道路总公里</span>
</div> </div>
<img src='/assets/images/quanju/chart-circle.png'></img> <img src='/assets/images/quanju/chart-circle.png'></img>

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

@ -217,7 +217,8 @@ function Rightbottom (props) {
</div> </div>
{/* <span style={{position:"absolute",width:"10%",color:"#FFF",backgroundColor:'rgba(216, 240, 255, 0.1)',right:"5%",textAlign:"center",top:0}}>段</span> */} {/* <span style={{position:"absolute",width:"10%",color:"#FFF",backgroundColor:'rgba(216, 240, 255, 0.1)',right:"5%",textAlign:"center",top:0}}>段</span> */}
<div className='build-right-bottom-title'> <div className='build-right-bottom-title'>
<h2>{total || 0}</h2> {/* <h2>{total || 0}</h2> */}
<h2>2689.00</h2>
<span>道路总公里</span> <span>道路总公里</span>
</div> </div>
{/* <div className='img1'> {/* <div className='img1'>

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

@ -246,6 +246,7 @@ const Build = (props) => {
width='100%' width='100%'
height='100%' height='100%'
text='道路总公里' text='道路总公里'
//total={keepThreeNum(sundata)}
total={keepThreeNum(sundata)} total={keepThreeNum(sundata)}
// colorList={colorList} // colorList={colorList}
// underColorList={underColorList} // underColorList={underColorList}

12
web/client/src/sections/quanju/containers/footer/leadership/centerleft/daolu.js

@ -104,8 +104,9 @@ const Right = (props) => {
<div style={{ width: "100%", height: "43%", position: "relative", left: "1%" }}> <div style={{ width: "100%", height: "43%", position: "relative", left: "1%" }}>
<div style={{ width: "96%", position: "relative", left: "2%" }}> <div style={{ width: "96%", position: "relative", left: "2%" }}>
{/* <Spin spinning={!roads} tip="Loading" > */} {/* <Spin spinning={!roads} tip="Loading" > */}
<p style={{ position: "absolute", color: "rgba(216,240,255,0.8)", top: "10px" }}>占比<span style={{ fontFamily: " PingFangSC-Regular, PingFang SC" }}>{isNaN(((roads?.["县"] / (roads?.["乡"] + roads?.["村"] + roads?.["县"])) * 100).toFixed(2)) ? "" : ((roads?.["县"] / (roads?.["乡"] + roads?.["村"] + roads?.["县"])) * 100).toFixed(2)}</span>%</p> <p style={{ position: "absolute", color: "rgba(216,240,255,0.8)", top: "10px" }}>占比<span style={{ fontFamily: " PingFangSC-Regular, PingFang SC" }}>{((207.8 / 2689) * 100).toFixed(2)}</span>%</p>
<p style={{ width: "50%", position: "absolute", right: "0%", fontFamily: "YouSheBiaoTiHei", textAlign: "right", fontSize: "24px", color: "#F5FCFF", marginLeft: "10%" }}>{isNaN(roads?.["县"].toFixed(3)) ? "" : roads?.["县"].toFixed(3)}<span style={{ color: "#F5FCFF", fontSize: "16px", fontFamily: "PingFangSC-Regular, PingFang SC", marginLeft: "5%" }}>公里</span><span style={{ fontSize: "18px", color: "rgba(216,240,255,0.8)", fontFamily: "PingFangSC-Regular, PingFang SC", marginLeft: "5%" }}></span></p> <p style={{ width: "50%", position: "absolute", right: "0%", fontFamily: "YouSheBiaoTiHei", textAlign: "right", fontSize: "24px", color: "#F5FCFF", marginLeft: "10%" }}>207.8<span style={{ color: "#F5FCFF", fontSize: "16px", fontFamily: "PingFangSC-Regular, PingFang SC", marginLeft: "5%" }}>公里</span><span style={{ fontSize: "18px", color: "rgba(216,240,255,0.8)", fontFamily: "PingFangSC-Regular, PingFang SC", marginLeft: "5%" }}></span></p>
{/* <p style={{ width: "50%", position: "absolute", right: "0%", fontFamily: "YouSheBiaoTiHei", textAlign: "right", fontSize: "24px", color: "#F5FCFF", marginLeft: "10%" }}>{isNaN(roads?.["县"].toFixed(3)) ? "" : roads?.["县"].toFixed(3)}<span style={{ color: "#F5FCFF", fontSize: "16px", fontFamily: "PingFangSC-Regular, PingFang SC", marginLeft: "5%" }}>公里</span><span style={{ fontSize: "18px", color: "rgba(216,240,255,0.8)", fontFamily: "PingFangSC-Regular, PingFang SC", marginLeft: "5%" }}>县道道路</span></p> */}
{/* </Spin> */} {/* </Spin> */}
</div> </div>
<div style={{ width: "96%", position: "relative", left: "2%", height: "50%" }}> <div style={{ width: "96%", position: "relative", left: "2%", height: "50%" }}>
@ -116,9 +117,12 @@ const Right = (props) => {
</div> </div>
<div style={{ width: "96%", position: "relative", left: "2%" }}> <div style={{ width: "96%", position: "relative", left: "2%" }}>
{/* <Spin spinning={!roads} tip="Loading" > */} {/* <Spin spinning={!roads} tip="Loading" > */}
<p style={{ width: "50%", position: "absolute", color: "rgba(216,240,255,0.8)", fontSize: "18px" }}>乡村道道路<span style={{ marginLeft: "4%", fontFamily: "YouSheBiaoTiHei", fontSize: "24px", color: "#F5FCFF" }}></span>2481.2<span style={{ marginLeft: "4%" }}></span></p>
<p style={{ width: "50%", position: "absolute", color: "rgba(216,240,255,0.8)", fontSize: "18px" }}>乡村道道路<span style={{ marginLeft: "4%", fontFamily: "YouSheBiaoTiHei", fontSize: "24px", color: "#F5FCFF" }}>{isNaN((roads?.["乡"] + roads?.["村"]).toFixed(3)) ? "" : (roads?.["乡"] + roads?.["村"]).toFixed(3)}</span><span style={{ marginLeft: "4%" }}></span></p> {/* <p style={{ width: "50%", position: "absolute", color: "rgba(216,240,255,0.8)", fontSize: "18px" }}>乡村道道路<span style={{ marginLeft: "4%", fontFamily: "YouSheBiaoTiHei", fontSize: "24px", color: "#F5FCFF" }}>{isNaN((roads?.["乡"] + roads?.["村"]).toFixed(3)) ? "" : (roads?.["乡"] + roads?.["村"]).toFixed(3)}</span><span style={{ marginLeft: "4%" }}>公里</span></p> */}
<p style={{ position: "absolute", right: "0", color: "rgba(216,240,255,0.8)", top: "10px" }}>占比<span>{isNaN((((roads?.["乡"] + roads?.["村"]) / (roads?.["乡"] + roads?.["村"] + roads?.["县"])) * 100).toFixed(2)) ? "" : (((roads?.["乡"] + roads?.["村"]) / (roads?.["乡"] + roads?.["村"] + roads?.["县"])) * 100).toFixed(2)}</span><span>%</span></p> <p style={{ position: "absolute", right: "0", color: "rgba(216,240,255,0.8)", top: "10px" }}>占比<span>{((2481.2 / 2689) * 100).toFixed(2)}</span><span>%</span></p>
{/* <p style={{ position: "absolute", right: "0", color: "rgba(216,240,255,0.8)", top: "10px" }}>占比<span>{isNaN((((roads?.["乡"] + roads?.["村"]) / (roads?.["乡"] + roads?.["村"] + roads?.["县"])) * 100).toFixed(2)) ? "" : (((roads?.["乡"] + roads?.["村"]) / (roads?.["乡"] + roads?.["村"] + roads?.["县"])) * 100).toFixed(2)}</span><span>%</span></p> */}
{/* </Spin> */} {/* </Spin> */}
</div> </div>

8
web/client/src/sections/quanju/containers/footer/leadership/centerleft/top.js

@ -39,7 +39,9 @@ const Leftcenter = (props) => {
</div> </div>
<div style={{ width: "50%", height: "100%", position: "absolute", left: "50%", top: "11%" }}> <div style={{ width: "50%", height: "100%", position: "absolute", left: "50%", top: "11%" }}>
<p style={{ fontSize: "2vh", color: "#D8F0FF", fontFamily: "PingFangSC-Regular, PingFang SC", marginTop: "3%" }}>道路统计<span style={{ marginLeft: "10px", color: "rgba(216,240,255,0.8000)" }}>公里</span></p> <p style={{ fontSize: "2vh", color: "#D8F0FF", fontFamily: "PingFangSC-Regular, PingFang SC", marginTop: "3%" }}>道路统计<span style={{ marginLeft: "10px", color: "rgba(216,240,255,0.8000)" }}>公里</span></p>
<p style={{ fontFamily: "YouSheBiaoTiHei", color: "#ffffff", fontSize: "2.5vh", marginTop: "-2%" }}>{isNaN((list?.["县"] + list?.["乡"] + list?.["村"]).toFixed(3)) ? "" : (list?.["县"] + list?.["乡"] + list?.["村"]).toFixed(3)}</p> {/* <p style={{ fontFamily: "YouSheBiaoTiHei", color: "#ffffff", fontSize: "2.5vh", marginTop: "-2%" }}>{isNaN((list?.["县"] + list?.["乡"] + list?.["村"]).toFixed(3)) ? "" : (list?.["县"] + list?.["乡"] + list?.["村"]).toFixed(3)}</p> */}
<p style={{ fontFamily: "YouSheBiaoTiHei", color: "#ffffff", fontSize: "2.5vh", marginTop: "-2%" }}>2689</p>
</div> </div>
</div> </div>
<div style={{ width: "30%", height: "10vh", backgroundColor: "", position: "relative", left: "35%", top: "-105%" }} onClick={() => { <div style={{ width: "30%", height: "10vh", backgroundColor: "", position: "relative", left: "35%", top: "-105%" }} onClick={() => {
@ -67,7 +69,9 @@ const Leftcenter = (props) => {
</div> </div>
<div style={{ width: "50%", height: "100%", position: "absolute", left: "50%", top: "8%" }}> <div style={{ width: "50%", height: "100%", position: "absolute", left: "50%", top: "8%" }}>
<p style={{ fontSize: "2vh", color: "#D8F0FF", fontFamily: "PingFangSC-Regular, PingFang SC", marginTop: "3%" }}>桥梁统计<span style={{ fontSize: "14px", marginLeft: "10px", color: "rgba(216,240,255,0.8000)" }}></span></p> <p style={{ fontSize: "2vh", color: "#D8F0FF", fontFamily: "PingFangSC-Regular, PingFang SC", marginTop: "3%" }}>桥梁统计<span style={{ fontSize: "14px", marginLeft: "10px", color: "rgba(216,240,255,0.8000)" }}></span></p>
<p style={{ fontFamily: "YouSheBiaoTiHei", color: "#00F1FF", fontSize: "2.5vh", marginTop: "-2%" }}>{isNaN((bridge?.["小桥"] + bridge?.["中桥"] + bridge?.["大桥"])) ? "" : (bridge?.["小桥"] + bridge?.["中桥"] + bridge?.["大桥"])}</p> <p style={{ fontFamily: "YouSheBiaoTiHei", color: "#00F1FF", fontSize: "2.5vh", marginTop: "-2%" }}>165</p>
{/* <p style={{ fontFamily: "YouSheBiaoTiHei", color: "#00F1FF", fontSize: "2.5vh", marginTop: "-2%" }}>{isNaN((bridge?.["小桥"] + bridge?.["中桥"] + bridge?.["大桥"])) ? "" : (bridge?.["小桥"] + bridge?.["中桥"] + bridge?.["大桥"])}</p> */}
</div> </div>
</div> </div>
</div> </div>

6
web/client/src/sections/quanju/containers/footer/operation/right.js

@ -79,7 +79,7 @@ const Right = ({ busRunTime }) => {
slidesToShow={4} slidesToShow={4}
> >
{ {
busRunTimeList.map((b, i) => { busRunTimeList.map((d, index) => {
return ( return (
<div key={index} style={{ width: '100%', height: '40%' }}> <div key={index} style={{ width: '100%', height: '40%' }}>
<div className='busInformation'> <div className='busInformation'>
@ -92,9 +92,9 @@ const Right = ({ busRunTime }) => {
</span> </span>
<span> <span>
<h3>发车时间</h3> <h3>发车时间</h3>
<h4>{d.lastDepTime}</h4> <h5>{d.lastDepTime}</h5>
</span> </span>
<span> <span style={{ position: 'relative', left: '21%' }}>
<h3>司机</h3> <h3>司机</h3>
<h5>{d.employeeName}</h5> <h5>{d.employeeName}</h5>
<h3>工号</h3> <h3>工号</h3>

Loading…
Cancel
Save