dengyinhuan 1 year ago
parent
commit
bda3ee31bb
  1. 4
      api/app/lib/controllers/data/appointed.js
  2. 36
      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. 60
      web/client/src/sections/fillion/components/bridgeTable.js
  6. 254
      web/client/src/sections/fillion/components/enforceTable.js
  7. 11
      web/client/src/sections/fillion/components/feedback/nominateModalcopy.js
  8. 14
      web/client/src/sections/fillion/components/highwaysTable.js
  9. 57
      web/client/src/sections/fillion/components/maintenanceTable.js
  10. 6
      web/client/src/sections/fillion/components/patrolTable.js
  11. 21
      web/client/src/sections/fillion/components/transportationTable.js
  12. 1
      web/client/src/sections/fillion/containers/maintenanceSpotCheck.js
  13. 138
      web/client/src/sections/quanju/containers/footer/build/Leftbottom.js
  14. 35
      web/client/src/sections/quanju/containers/footer/build/Rightbottom.js
  15. 1
      web/client/src/sections/quanju/containers/footer/build/index.js
  16. 12
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/daolu.js
  17. 8
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/top.js
  18. 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) {
try {
const models = ctx.fs.dc.models
const { recordId, performerId } = ctx.request.body
const { recordId, performerId, handleOpinions } = ctx.request.body
await models.Report.update({
performerId
performerId, handleOpinions
}, { where: { id: recordId } })
ctx.status = 204;
} catch (error) {

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

@ -1,11 +1,20 @@
'use strict';
const { QueryTypes } = require('sequelize');
async function get (ctx) {
async function get(ctx) {
try {
const models = ctx.fs.dc.models;
const { type } = ctx.request.body;
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 = {
where: {
type
@ -17,9 +26,12 @@ async function get (ctx) {
}
}
const vehicleRes = await models.Statistic.findAll(findOption)
console.log('vehicleRes', vehicleRes)
ctx.status = 200;
ctx.body = vehicleRes
ctx.body = {
vehicleRes: vehicleRes.filter(item => item.dataValues.name === '标志牌' || item.dataValues.name === '养护责任牌')
, conserveData
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
@ -29,7 +41,7 @@ async function get (ctx) {
}
}
async function edit (ctx) {
async function edit(ctx) {
try {
const models = ctx.fs.dc.models;
const { id, name, count, type } = ctx.request.body;
@ -58,7 +70,7 @@ async function edit (ctx) {
}
}
async function del (ctx) {
async function del(ctx) {
try {
const models = ctx.fs.dc.models;
const { id } = ctx.params;
@ -79,7 +91,7 @@ async function del (ctx) {
}
}
async function specificGet (ctx) {
async function specificGet(ctx) {
try {
const models = ctx.fs.dc.models;
const { type } = ctx.query;
@ -109,7 +121,7 @@ async function specificGet (ctx) {
}
}
async function specificEdit (ctx) {
async function specificEdit(ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
@ -134,7 +146,7 @@ async function specificEdit (ctx) {
}
}
async function specificDel (ctx) {
async function specificDel(ctx) {
try {
const models = ctx.fs.dc.models;
const { vehicleId } = ctx.params;
@ -155,7 +167,7 @@ async function specificDel (ctx) {
}
}
async function businessGet (ctx) {
async function businessGet(ctx) {
try {
const models = ctx.fs.dc.models;
const { nameOfBusinessOwner } = ctx.query;
@ -183,7 +195,7 @@ async function businessGet (ctx) {
}
}
async function businessEdit (ctx) {
async function businessEdit(ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
@ -208,7 +220,7 @@ async function businessEdit (ctx) {
}
}
async function businessDel (ctx) {
async function businessDel(ctx) {
try {
const models = ctx.fs.dc.models;
const { businessId } = ctx.params;

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

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

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

@ -25,6 +25,9 @@ const BrideTable = (props) => {
const [whichofits, setWhichofits] = useState('qiaoliang')
const [delet, setDelet] = useState()
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 ref = useRef()
useEffect(() => { ref.current.reload() }, [whichofits, delet])
@ -161,7 +164,7 @@ const BrideTable = (props) => {
getPopupContainer: (triggerNode) => triggerNode.parentNode,
}
}, {
title: '跨越地物类型1',
title: '跨越地物类型',
search: false,
dataIndex: 'time8',
valueType: 'dateRange',
@ -175,7 +178,7 @@ const BrideTable = (props) => {
getPopupContainer: (triggerNode) => triggerNode.parentNode,
}
}, {
title: '跨越地物名称1',
title: '跨越地物名称',
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
@ -1810,7 +1813,9 @@ const BrideTable = (props) => {
setRowSelected([]);
const res = await dispatch(getBridge(query));
// 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)
return {
...res,
@ -1833,6 +1838,7 @@ const BrideTable = (props) => {
search={{
defaultCollapsed: false,
optionRender: (searchConfig, formProps, dom) => [
<span style={{ marginRight: 80 }}>{`共有小桥${smallBridge.length}座,中桥${middleBridge.length}座,大桥${bigBridge.length}`}</span>,
...dom.reverse(),
<Popconfirm title="确认导出?" onConfirm={() => { props.exports(rowSelected, differentiate) }} disabled={editAble}>
<Button
@ -1847,28 +1853,32 @@ const BrideTable = (props) => {
>
</ProTable>
</div>
{modalVisible ? <UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
rewkeys={'bridge'}
data={date}
recortd={recortd}
setDelet={setDelet}
// sitename={sitename}
setRecortd={setRecortd}
/> : ''}
{modalVisibleyilan ? <ProjectModal
visible={modalVisibleyilan}
onVisibleChange={setModalVisibleyilan}
modalRecord={modalRecord}
typecard={typecard}
rewkeys={'bridge'}
setDelet={setDelet}
recortd={recortd}
setRecortd={setRecortd}
/> : ''}
{
modalVisible ? <UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
rewkeys={'bridge'}
data={date}
recortd={recortd}
setDelet={setDelet}
// sitename={sitename}
setRecortd={setRecortd}
/> : ''
}
{
modalVisibleyilan ? <ProjectModal
visible={modalVisibleyilan}
onVisibleChange={setModalVisibleyilan}
modalRecord={modalRecord}
typecard={typecard}
rewkeys={'bridge'}
setDelet={setDelet}
recortd={recortd}
setRecortd={setRecortd}
/> : ''
}
</Spin >
)
}

254
web/client/src/sections/fillion/components/enforceTable.js

@ -18,33 +18,33 @@ const enforceTable = (props) => {
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns =
[
{
@ -95,7 +95,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time3',
valueType: 'dateRange',
width: 120,
@ -110,7 +110,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time4',
valueType: 'dateRange',
width: 120,
render: (dom, record) => {
@ -124,7 +124,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time5',
valueType: 'dateRange',
width: 120,
render: (dom, record) => {
@ -138,7 +138,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time6',
valueType: 'dateRange',
width: 120,
render: (dom, record) => {
@ -152,7 +152,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time7',
valueType: 'dateRange',
width: 120,
render: (dom, record) => {
@ -166,7 +166,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time8',
valueType: 'dateRange',
width: 120,
render: (dom, record) => {
@ -180,7 +180,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -195,7 +195,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -210,7 +210,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -225,7 +225,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -240,7 +240,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -255,7 +255,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -270,7 +270,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -285,7 +285,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -300,7 +300,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -315,7 +315,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -330,7 +330,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -345,7 +345,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -360,7 +360,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -375,7 +375,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -390,7 +390,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -405,7 +405,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -420,7 +420,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -435,7 +435,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -450,7 +450,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -465,7 +465,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -480,7 +480,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -495,7 +495,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -510,7 +510,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -525,7 +525,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -540,7 +540,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -555,7 +555,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -570,7 +570,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -585,7 +585,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -600,7 +600,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -615,7 +615,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -630,7 +630,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -645,7 +645,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -660,7 +660,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -675,7 +675,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -690,7 +690,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -705,7 +705,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -720,7 +720,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -735,7 +735,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -750,7 +750,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -765,7 +765,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -780,7 +780,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -795,7 +795,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -810,7 +810,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -825,7 +825,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -840,7 +840,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -855,7 +855,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -870,7 +870,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -885,7 +885,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -900,7 +900,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -915,7 +915,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -930,7 +930,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -945,7 +945,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -960,7 +960,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -975,7 +975,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -990,7 +990,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1005,7 +1005,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1020,7 +1020,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1035,7 +1035,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1050,7 +1050,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1065,7 +1065,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1080,7 +1080,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1095,7 +1095,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1110,7 +1110,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1125,7 +1125,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1140,7 +1140,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1155,7 +1155,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1171,7 +1171,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1186,7 +1186,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1201,7 +1201,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1216,7 +1216,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1231,7 +1231,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1246,7 +1246,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1261,7 +1261,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1276,7 +1276,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1291,7 +1291,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1306,7 +1306,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1321,7 +1321,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1336,7 +1336,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1351,7 +1351,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1366,7 +1366,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1381,7 +1381,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1396,7 +1396,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1411,7 +1411,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1426,7 +1426,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1441,7 +1441,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1456,7 +1456,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1471,7 +1471,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1486,7 +1486,7 @@ const openModal = (type, record) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
width: 140,
@ -1506,11 +1506,11 @@ const openModal = (type, record) => {
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('compile')
}}
onClick={() => {
openModal('edit', record)
setTypecard('compile')
}}
>编辑</Button><Button type="link"></Button></div>
}
@ -1520,7 +1520,7 @@ const openModal = (type, record) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form,record) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
@ -1607,7 +1607,7 @@ const openModal = (type, record) => {
>
</ProTable></div>
<UserModal
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}

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

@ -1,13 +1,14 @@
'use strict';
import React, { useState, useEffect, useCallback, useRef } from 'react';
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 { getDepUser } from '../../../organization/actions/user'
import { appointTask } from '../../actions/appointTask'
import moment from 'moment';
import moment from 'moment'
import { v4 as uuidv4 } from 'uuid';
const { TextArea } = Input;
const NominateModal = (props) => {
const { queryData, recordId, visible, user, onCancel, depMessage, loading, depUser, clientHeight, depData, onVisibleChange, dispatch } = props
@ -38,7 +39,7 @@ const NominateModal = (props) => {
}
const handleFinish = () => {
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) {
setSelectedUserId(null)
queryData()
@ -92,9 +93,13 @@ const NominateModal = (props) => {
onChange={(value) => setSelectedUserId(value)}
>
</Select>
</Form.Item>
</div>
</div>
<Form.Item label='处理意见:' name='handleOpinions'>
<TextArea />
</Form.Item>
</Form>
</Modal>
</Spin>

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

@ -76,6 +76,7 @@ const TransporTationTable = (props) => {
fixed: 'left',
width: 120,
render: (dom, record) => {
return record.count
},
fieldProps: {
@ -90,13 +91,14 @@ const TransporTationTable = (props) => {
width: 160,
fixed: 'right',
render: (dom, record) => {
console.log('record', record.id === null)
return <div><Button type="link"
onClick={() => {
hightModal('edit', record)
setTypecard('compile')
setRecortd(record)
}}
disabled={editAble}
disabled={editAble && record.id === null}
>编辑</Button></div>
}
@ -316,7 +318,15 @@ const TransporTationTable = (props) => {
}
setRowSelected([]);
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 {
...res,
total: res.payload.data ? res.payload.data.count : 0

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

@ -25,24 +25,25 @@ const DetailForm = (props) => {
{ key: '养护路段', name: 'roadSectionStart' },
{ key: '具体位置', name: 'address' },
{ key: '路面类型', name: 'roadType' },
{ key: '路面宽度', name: 'roadWidth' },
{ key: '错车道', name: 'wrongLane' },
{ key: '行道树', name: 'roadsideTrees' },
{ key: '边沟', name: 'roadsideDitch' },
{ key: '护栏', name: 'guardrail' },
{ key: '标线', name: 'roadMarking' },
{ key: '养护人员人数', name: 'maintenanceStaffCount' },
{ key: '修整路肩', name: 'shoulderRepair' },
{ key: '清理边沟', name: 'ditchCleaning' },
{ key: '修补沥青路面', name: 'asphaltRepair' },
{ key: '修补水泥路面', name: 'concreteRepair' },
{ key: '除草', name: 'grassMowing' },
{ key: '树刷白', name: 'treeWhitening' },
{ key: '桩刷白', name: 'pileWhitening' },
{ key: '维护护栏', name: 'guardrailMaintenance' },
{ key: '修复端头', name: 'endHeadRepair' },
{ key: '路面宽度(米)', name: 'roadWidth' },
{ key: '错车道(个)', name: 'wrongLane' },
{ key: '行道树(棵)', name: 'roadsideTrees' },
{ key: '边沟(米)', name: 'roadsideDitch' },
{ key: '护栏(米)', name: 'guardrail' },
{ key: '标线(米)', name: 'roadMarking' },
{ key: '养护人员人数(人)', name: 'maintenanceStaffCount' },
{ key: '修整路肩(平方米)', name: 'shoulderRepair' },
{ key: '清理边沟(米)', name: 'ditchCleaning' },
{ key: '修补沥青路面(平方米)', name: 'asphaltRepair' },
{ key: '修补水泥路面(平方米)', name: 'concreteRepair' },
{ key: '除草(米)', name: 'grassMowing' },
{ key: '树刷白(株/公里)', name: 'treeWhitening' },
{ key: '桩刷白(个)', name: 'pileWhitening' },
{ key: '维护护栏(个)', name: 'guardrailMaintenance' },
{ key: '修复端头(块)', name: 'endHeadRepair' },
{ key: '其他养护内容', name: 'otherDescription' },
{ key: '养护前图片', name: 'conserveBeforePic' },
{ key: '养护中图片', name: 'conserveUnderwayPic' },
{ key: '养护后图片', name: 'conserveAfterPic' },
{ key: '上报视频', name: 'videoUrl' },
@ -62,14 +63,14 @@ const DetailForm = (props) => {
];
const renderContent = (data) => {
if (data) {
if ( moment(data.time).isAfter(moment('2023-08-03 00:00:00'))) {
if (moment(data.time).isAfter(moment('2023-08-03 00:00:00'))) {
return keyList.map(obj => {
return <div style={{ display: 'flex', width: '100%', justifyContent: 'space-between', margin: '12px 0' }}>
<span style={{ fontSize: 16, color: 'gray', minWidth: '26%' }}>{obj.key}</span>
{
obj.name != 'conserveBeforePic' && obj.name != 'conserveAfterPic' && obj.name != 'roadSectionStart' && obj.name != 'videoUrl' && obj.name.indexOf('conserve') == -1 ?
<Input
style={{ width: '70%' }}
style={{ width: '60%' }}
value={
obj.name == 'id' ?
moment(data.time).format("YYYYMMDD") * 10000 + data.id
@ -91,7 +92,7 @@ const DetailForm = (props) => {
</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']} />
</div> : <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
@ -216,14 +217,14 @@ const DetailList = (props) => {
key: 'projectType',
dataIndex: 'projectType',
align: 'center',
render: (text, record) => {
return record.projectType?.length > 0 ? reportTypeText(text) : (record.codeRoad && record.codeRoad.length > 0)
? record.codeRoad[0] === 'X'
? '县道'
: record.codeRoad[0] === 'Y'
? '乡道'
: '村道'
: ''
render: (text, record) => {
return record.projectType?.length > 0 ? reportTypeText(text) : (record.codeRoad && record.codeRoad.length > 0)
? record.codeRoad[0] === 'X'
? '县道'
: record.codeRoad[0] === 'Y'
? '乡道'
: '村道'
: ''
}
}, {
title: '所属道路',
@ -648,7 +649,7 @@ const MaintenanceTable = (props) => {
);
};
function mapStateToProps (state) {
function mapStateToProps(state) {
const { auth, depMessage, userList, reportList, reportDetail, depUser, global, allDepUsers } = state;
const pakData = (dep) => {
return dep.map((d) => {

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

@ -45,7 +45,7 @@ const DetailForm = (props) => {
const keyList = [
// { key: '编号', name: 'id' },
// isPatrol ?'巡查管理详情' :isRoad ? '建设上报详情' : '异常反馈详情'
{ key: '工程类型', name: 'projectType', skip: isPatrol },
{ key: '工程类型', name: 'projectType', skip: !isPatrol },
{ key: '反馈类型', name: 'projectType', skip: !isAnomaly },
{ key: '工程名称', name: 'projectName', skip: !isRoad },
{ key: '所在路段', name: 'road', skip: isPatrol },
@ -53,6 +53,7 @@ const DetailForm = (props) => {
{ key: '巡查内容', name: 'content', skip: isPatrol },
{ key: '路线代码', name: 'codeRoad', skip: !isAnomaly && isPatrol },
{ key: '现场照片', name: 'scenePic', skip: isPatrol },
{ key: '处理意见', name: 'handleOpinions', skip: !isAnomaly },
{ key: '处理详情', name: 'handleContent', skip: !isAnomaly },
{ key: '处理图片', name: 'handlePic', skip: !isAnomaly },
{ key: '处理人', name: 'performerName', skip: !isAnomaly },
@ -89,6 +90,7 @@ const DetailForm = (props) => {
{ key: '巡查内容', name: 'content' },
{ key: '路线代码', name: 'codeRoad', skip: !isAnomaly && !isPatrol },
{ key: '现场照片', name: 'scenePic' },
{ key: '处理意见', name: 'handleOpinions', skip: !isAnomaly },
{ key: '处理详情', name: 'handleContent', skip: !isAnomaly },
{ key: '处理图片', name: 'handlePic', 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' }}>
<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
style={{ width: '70%' }}
value={

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

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

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

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

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

@ -17,9 +17,15 @@ function Leftbottom(props) {
"rgba(4,251,240,0.5)",
]
const safetyData = [
{name: '县道', value: 72},
{name: '乡道', value: 17},
{name: '村道', value: 4},
{ name: '县道', value: 72 },
{ name: '乡道', value: 17 },
{ name: '村道', value: 4 },
]
//写死数据
const dataNo = [
{ name: '县', value: 207.8 },
{ name: '乡', value: 680.5 },
{ name: '村', value: 1800.7 },
]
const chartTitle = '道路总公里';
const title = '基础设施安全监测版块';
@ -34,7 +40,7 @@ function Leftbottom(props) {
value: d.value
})
})
// let safetyOption = {
// tooltip: {
// show: true,
@ -63,7 +69,7 @@ function Leftbottom(props) {
// // fontSize: 12,
// // fontWeight:500,
// // color:'#E9F7FF',
// // }
// // },
// legend: [
@ -141,60 +147,60 @@ function Leftbottom(props) {
},
formatter: (values) => `${values.seriesName}<br /> ${values.marker} ${values.name}<b>${values.value}</b>公里`,
},
// title: {
// text:total,//主标题文本
// left:'20%',
// // top:'35%',
// subtext:chartTitle,//副标题文本
// textStyle:{
// fontFamily : "YouSheBiaoTiHei",
// fontSize: 20,
// color:'#FFFFFF',
// marginLeft:'20%',
// align:'center'
// },
// subtextStyle:{
// fontFamily : "PingFangSC-Medium PingFang SC",
// fontSize: 12,
// fontWeight:500,
// color:'#E9F7FF',
// align:'center'
// title: {
// text:total,//主标题文本
// left:'20%',
// // top:'35%',
// subtext:chartTitle,//副标题文本
// textStyle:{
// fontFamily : "YouSheBiaoTiHei",
// fontSize: 20,
// color:'#FFFFFF',
// marginLeft:'20%',
// align:'center'
// },
// subtextStyle:{
// fontFamily : "PingFangSC-Medium PingFang SC",
// fontSize: 12,
// fontWeight:500,
// color:'#E9F7FF',
// align:'center'
// }
// },
legend: {
orient: "vertical",
itemWidth: 10,
itemHeight: 10,
// right: '30%',
right: '10%',
top: 'center',
align: 'left',
data: name,
formatter: (name) => {
for (let i = 0; i < option.series[1].data.length; i += 1) {
if (name === option.series[1].data[i].name) {
let arr = [`{a|${name}}`, `{b|${option.series[1].data[i].value}}`]
return arr.join('\t');
}
}
},
textStyle: {
rich: {
a: {
color: '#E9F7FF',
fontSize: 14,
padding:[0,10]
},
b: {
fontSize: 16,
fontFamily: 'YouSheBiaoTiHei',
color: '#fff',
padding:[0,0,0,12]
// }
// },
legend: {
orient: "vertical",
itemWidth: 10,
itemHeight: 10,
// right: '30%',
right: '10%',
top: 'center',
align: 'left',
data: name,
formatter: (name) => {
for (let i = 0; i < option.series[1].data.length; i += 1) {
if (name === option.series[1].data[i].name) {
let arr = [`{a|${name}}`, `{b|${option.series[1].data[i].value}}`]
return arr.join('\t');
}
}
},
}
}
},
textStyle: {
rich: {
a: {
color: '#E9F7FF',
fontSize: 14,
padding: [0, 10]
},
b: {
fontSize: 16,
fontFamily: 'YouSheBiaoTiHei',
color: '#fff',
padding: [0, 0, 0, 12]
},
}
}
},
grid: {
left: '10%'
},
@ -229,7 +235,8 @@ legend: {
label: {
show: false
},
data: data,
data: dataNo,
// data: data,
},
],
};
@ -262,23 +269,24 @@ legend: {
// highlightPie();
// }
// let changePieInterval = setInterval(selectPie, 1000);
myChart.onChartReady = (instance) => {
chartRef.current.safetyChart = instance;
}
myChart.setOption(option);
return ()=>{
return () => {
// clearInterval(changePieInterval)
}
}, [data]);
}, [data]);
return (
<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>
<div className='build-left-bottom-title'>
<h2>{total}</h2>
<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'>
<h2>2689.00</h2>
{/* <h2>{total}</h2> */}
<span>道路总公里</span>
</div>
</div>
<img src='/assets/images/quanju/chart-circle.png'></img>
<div ref={chartRef} style={{ width: width || "70%", height: height || "90%" }} id="ech"></div>
</div>

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

@ -4,7 +4,7 @@ import { Col, Progress, Row } from 'antd';
import React, { useEffect, useRef, useState } from 'react';
// import ReactEcharts from 'echarts-for-react';
import * as echarts from 'echarts';
function Rightbottom (props) {
function Rightbottom(props) {
const { width, height, total, data, text } = props
const chartRef = useRef(null);
const [shuzu, setShuzu] = useState()
@ -208,16 +208,17 @@ function Rightbottom (props) {
return (
<div className='build-right-bottom'>
<div className='build-right-bottom-item1'>
<div>
<span />
<span className='sanji'><i style={{color: 'rgba(28,96,254,1)'}}>&#9658;</i>&nbsp;</span>
</div>
<div>{sanji[2] + sanji[3] + sanji[4]}</div>
</div>
<div>
<span />
<span className='sanji'><i style={{ color: 'rgba(28,96,254,1)' }}>&#9658;</i>&nbsp;</span>
</div>
<div>{sanji[2] + sanji[3] + sanji[4]}</div>
</div>
{/* <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'>
<h2>{total || 0}</h2>
{/* <h2>{total || 0}</h2> */}
<h2>2689.00</h2>
<span>道路总公里</span>
</div>
{/* <div className='img1'>
@ -226,16 +227,16 @@ function Rightbottom (props) {
<div className='img'>
<img src='/assets/images/quanju/chart-circle.png' />
</div>
<div /* ref={chartRef} */ style={{ width: width || "70%", height: height || "90%"}} /* id="ech" */>
<div ref={chartRef} style={{ width: "65%", height: "90%"}} id="ech"></div>
<div /* ref={chartRef} */ style={{ width: width || "70%", height: height || "90%" }} /* id="ech" */>
<div ref={chartRef} style={{ width: "65%", height: "90%" }} id="ech"></div>
<div className='build-right-bottom-item2'>
<div>
<span />
<span className='siji'><i style={{color:"rgba(4,251,240,1)"}}>&#9658;</i>&nbsp;</span>
<div>
<span />
<span className='siji'><i style={{ color: "rgba(4,251,240,1)" }}>&#9658;</i>&nbsp;</span>
</div>
<div>{siji[0] + siji[1]}</div>
</div>
<div>{siji[0] + siji[1]}</div>
</div>
</div>
</div>
);

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

@ -246,6 +246,7 @@ const Build = (props) => {
width='100%'
height='100%'
text='道路总公里'
//total={keepThreeNum(sundata)}
total={keepThreeNum(sundata)}
// colorList={colorList}
// 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: "96%", position: "relative", left: "2%" }}>
{/* <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={{ 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={{ 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%" }}>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> */}
</div>
<div style={{ width: "96%", position: "relative", left: "2%", height: "50%" }}>
@ -116,9 +117,12 @@ const Right = (props) => {
</div>
<div style={{ width: "96%", position: "relative", left: "2%" }}>
{/* <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={{ 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={{ 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>{((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> */}
</div>

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

@ -39,7 +39,9 @@ const Leftcenter = (props) => {
</div>
<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={{ 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 style={{ width: "30%", height: "10vh", backgroundColor: "", position: "relative", left: "35%", top: "-105%" }} onClick={() => {
@ -67,7 +69,9 @@ const Leftcenter = (props) => {
</div>
<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={{ 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>

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

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

Loading…
Cancel
Save