@ -1,56 +0,0 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const Department = sequelize.define("department", { |
|||
id: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: true, |
|||
field: "id", |
|||
autoIncrement: true, |
|||
unique: "department_id_uindex" |
|||
}, |
|||
name: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "name", |
|||
autoIncrement: false |
|||
}, |
|||
dependence: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: "上级部门/从属", |
|||
primaryKey: false, |
|||
field: "dependence", |
|||
autoIncrement: false |
|||
}, |
|||
type: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: "", |
|||
primaryKey: false, |
|||
field: "type", |
|||
autoIncrement: false |
|||
} |
|||
}, { |
|||
tableName: "department", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
|
|||
dc.models.Department = Department; |
|||
|
|||
|
|||
|
|||
return Department; |
|||
}; |
@ -1,105 +0,0 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const PatrolPlan = sequelize.define("PatrolPlan", { |
|||
id: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: true, |
|||
field: "id", |
|||
autoIncrement: true, |
|||
unique: "patrol_plan_id_uindex" |
|||
}, |
|||
name: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "name", |
|||
autoIncrement: false |
|||
}, |
|||
way: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "way", |
|||
autoIncrement: false |
|||
}, |
|||
structureId: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "structure_id", |
|||
autoIncrement: false |
|||
}, |
|||
startTime: { |
|||
type: DataTypes.DATE, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "start_time", |
|||
autoIncrement: false |
|||
}, |
|||
endTime: { |
|||
type: DataTypes.DATE, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "end_time", |
|||
autoIncrement: false |
|||
}, |
|||
frequency: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "frequency", |
|||
autoIncrement: false |
|||
}, |
|||
points: { |
|||
type: DataTypes.JSONB, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "points", |
|||
autoIncrement: false |
|||
}, |
|||
userId: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: true, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "user_id", |
|||
autoIncrement: false, |
|||
}, |
|||
patrolCount: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: 0, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "patrol_count", |
|||
autoIncrement: false |
|||
}, |
|||
}, { |
|||
tableName: "patrol_plan", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
dc.models.PatrolPlan = PatrolPlan; |
|||
return PatrolPlan; |
|||
}; |
@ -1,55 +0,0 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const PatrolRecord = sequelize.define("PatrolRecord", { |
|||
id: { |
|||
field: "id", |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
primaryKey: true, |
|||
autoIncrement: true, |
|||
}, |
|||
patrolPlanId: { |
|||
field: "patrol_plan_id", |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
primaryKey: false, |
|||
autoIncrement: false |
|||
}, |
|||
lastInspectionTime: { |
|||
field: "last_inspection_time", |
|||
type: DataTypes.DATE, |
|||
allowNull: true, |
|||
}, |
|||
inspectionTime: { |
|||
field: "inspection_time", |
|||
type: DataTypes.DATE, |
|||
allowNull: true, |
|||
}, |
|||
points: { |
|||
field: "points", |
|||
type: DataTypes.JSONB, |
|||
allowNull: true, |
|||
}, |
|||
alarm: { |
|||
field: "alarm", |
|||
type: DataTypes.BOOLEAN, |
|||
allowNull: false, |
|||
defaultValue: false, |
|||
}, |
|||
pointId: { |
|||
field: "point_id", |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
}, |
|||
}, { |
|||
tableName: "patrol_record", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
dc.models.PatrolRecord = PatrolRecord; |
|||
return PatrolRecord; |
|||
}; |
@ -1,79 +0,0 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const Point = sequelize.define("point", { |
|||
id: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: true, |
|||
field: "id", |
|||
autoIncrement: true, |
|||
unique: "point_id_uindex" |
|||
}, |
|||
projectId: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "project_id", |
|||
autoIncrement: false |
|||
}, |
|||
name: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "name", |
|||
autoIncrement: false |
|||
}, |
|||
longitude: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "longitude", |
|||
autoIncrement: false |
|||
}, |
|||
latitude: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "latitude", |
|||
autoIncrement: false |
|||
}, |
|||
describe: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "describe", |
|||
autoIncrement: false |
|||
}, |
|||
qrCode: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "qr_code", |
|||
autoIncrement: false |
|||
}, |
|||
}, { |
|||
tableName: "point", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
dc.models.Point = Point; |
|||
return Point; |
|||
}; |
@ -1,97 +0,0 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const Project = sequelize.define("project", { |
|||
id: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: true, |
|||
field: "id", |
|||
autoIncrement: true, |
|||
unique: "project_id_uindex" |
|||
}, |
|||
img: { |
|||
type: DataTypes.ARRAY(DataTypes.STRING), |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "img", |
|||
autoIncrement: false |
|||
}, |
|||
userId: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "user_id", |
|||
autoIncrement: false |
|||
}, |
|||
name: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "name", |
|||
autoIncrement: false |
|||
}, |
|||
type: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "type", |
|||
autoIncrement: false |
|||
}, |
|||
longitude: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "longitude", |
|||
autoIncrement: false |
|||
}, |
|||
latitude: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "latitude", |
|||
autoIncrement: false |
|||
}, |
|||
describe: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "describe", |
|||
autoIncrement: false |
|||
}, |
|||
qrCode: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "qr_code", |
|||
autoIncrement: false |
|||
}, |
|||
}, { |
|||
tableName: "project", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
dc.models.Project = Project; |
|||
return Project; |
|||
}; |
@ -1,44 +0,0 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const Resource = sequelize.define("resource", { |
|||
code: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: true, |
|||
field: "code", |
|||
autoIncrement: false, |
|||
unique: "resource_code_uindex" |
|||
}, |
|||
name: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "name", |
|||
autoIncrement: false, |
|||
unique: "resource_name_uindex" |
|||
}, |
|||
parentResource: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "parent_resource", |
|||
autoIncrement: false |
|||
} |
|||
}, { |
|||
tableName: "resource", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
dc.models.Resource = Resource; |
|||
return Resource; |
|||
}; |
@ -1,52 +0,0 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const UserResource = sequelize.define("userResource", { |
|||
id: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: true, |
|||
field: "id", |
|||
autoIncrement: true, |
|||
unique: "post_resource_id_uindex" |
|||
}, |
|||
userId: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "user_id", |
|||
autoIncrement: false, |
|||
references: { |
|||
key: "id", |
|||
model: "post" |
|||
} |
|||
}, |
|||
resourceId: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "resource", |
|||
autoIncrement: false, |
|||
references: { |
|||
key: "code", |
|||
model: "resource" |
|||
} |
|||
} |
|||
}, { |
|||
tableName: "user_resource", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
|
|||
dc.models.UserResource = UserResource; |
|||
return UserResource; |
|||
}; |
@ -0,0 +1,26 @@ |
|||
create table t_user |
|||
( |
|||
id serial not null |
|||
constraint t_user_pk |
|||
primary key, |
|||
name varchar(255), |
|||
username varchar(255) not null, |
|||
password varchar(255) not null |
|||
); |
|||
|
|||
comment on table t_user is '用户表'; |
|||
|
|||
comment on column t_user.id is '唯一标识'; |
|||
|
|||
comment on column t_user.name is '姓名'; |
|||
|
|||
comment on column t_user.username is '用户名'; |
|||
|
|||
comment on column t_user.password is '密码'; |
|||
|
|||
|
|||
create unique index t_user_id_uindex |
|||
on t_user (id); |
|||
|
|||
|
|||
INSERT INTO public.t_user (id, name, username, password) VALUES (DEFAULT, '超级管理员', 'SuperAdmin', 'e10adc3949ba59abbe56e057f20f883e') |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.4 KiB |
@ -1,2 +1,3 @@ |
|||
@import '~perfect-scrollbar/css/perfect-scrollbar.css'; |
|||
@import '~nprogress/nprogress.css'; |
|||
@import '~nprogress/nprogress.css'; |
|||
@import '~simplebar-react/dist/simplebar.min.css'; |
@ -1,48 +1,114 @@ |
|||
import React, { useEffect, useState } from 'react'; |
|||
|
|||
let map = ''; |
|||
const Amap = (props) => { |
|||
const [mapComplete, setMapComplete] = useState(false); |
|||
|
|||
useEffect(() => { |
|||
drawMap(); |
|||
}, []); |
|||
const drawMap = () => { |
|||
try { |
|||
if (AMap) loadMap(); |
|||
} catch (e) { |
|||
var script = document.createElement("script"); |
|||
script.src = "https://webapi.amap.com/maps?v=2.0&key=00f9a29dedcdbd8befec3dfe0cef5003&plugin=AMap.AutoComplete,AMap.PlaceSearch"; |
|||
document.body.appendChild(script); |
|||
loadMap(); |
|||
} |
|||
} |
|||
|
|||
const loadMap = () => { |
|||
map = new AMap.Map("amapId", { |
|||
resizeEnable: true, |
|||
center: [115.99255, 28.503617], // 地图中心点,初始定位加载显示楼块
|
|||
zoom: 14, // 地图显示的缩放级别
|
|||
zooms: [5, 20], |
|||
pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度
|
|||
viewMode: '3D', // 地图模式
|
|||
mapStyle: 'amap://styles/fb26776387242721c2fc32e2cb1daccc', // 主题样式
|
|||
// rotation: 60
|
|||
// showLabel: false
|
|||
}); |
|||
|
|||
map.on('complete', function () { |
|||
console.log("map-complete") |
|||
setMapComplete(true); |
|||
}); |
|||
window.onload = function () { |
|||
console.log("window.onload") |
|||
} |
|||
}; |
|||
|
|||
return <div style={{ width: '100%', height: '100%', }}> |
|||
<div id='amapId' style={{ width: '100%', height: '100%', background: "#101824" }} /> |
|||
</div> |
|||
const Amap = ({ showData }) => { |
|||
const [mapComplete, setMapComplete] = useState(false); |
|||
|
|||
useEffect(() => { |
|||
drawMap(); |
|||
}, []); |
|||
|
|||
useEffect(() => { |
|||
if (AMap && showData?.length) { |
|||
renderMarkers(showData) |
|||
} |
|||
}, [showData, AMap]); |
|||
|
|||
const drawMap = () => { |
|||
try { |
|||
if (AMap) loadMap(); |
|||
} catch (e) { |
|||
var script = document.createElement("script"); |
|||
script.src = "https://webapi.amap.com/maps?v=2.0&key=00f9a29dedcdbd8befec3dfe0cef5003&plugin=AMap.AutoComplete,AMap.PlaceSearch,AMap.Marker"; |
|||
document.body.appendChild(script); |
|||
loadMap(); |
|||
} |
|||
} |
|||
|
|||
const loadMap = () => { |
|||
// 图片图层 实现瓦片地图中国地图样式 bounds 第一个点为左下角 第二个点为右上角
|
|||
const imageLayer = new AMap.ImageLayer({ |
|||
url: '/assets/images/map.svg', |
|||
bounds: new AMap.Bounds( |
|||
[115.800221, 28.265659], |
|||
[116.334849, 28.973298], |
|||
), |
|||
zooms: [3, 14], |
|||
}); |
|||
|
|||
map = new AMap.Map("amapId", { |
|||
resizeEnable: true, |
|||
center: [115.99255, 28.503617], // 地图中心点,初始定位加载显示楼块
|
|||
zoom: 10.3, // 地图显示的缩放级别
|
|||
zooms: [5, 20], |
|||
pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度
|
|||
viewMode: '3D', // 地图模式
|
|||
mapStyle: 'amap://styles/fb26776387242721c2fc32e2cb1daccc', // 主题样式
|
|||
// rotation: 60
|
|||
// showLabel: false
|
|||
layers: [ |
|||
AMap.createDefaultLayer(), |
|||
imageLayer, |
|||
], |
|||
}); |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
map.on('complete', function () { |
|||
console.log("map-complete") |
|||
setMapComplete(true); |
|||
}); |
|||
window.onload = function () { |
|||
console.log("window.onload") |
|||
} |
|||
|
|||
|
|||
}; |
|||
|
|||
const renderMarkers = (data) => { |
|||
|
|||
|
|||
|
|||
// 初始层级 zoom14以下显示聚合点
|
|||
// const data = [
|
|||
// { lng: 116.117906, lat: 28.678096, name: 'ndjsa d dwqa', },
|
|||
|
|||
// ]
|
|||
|
|||
|
|||
if (data?.length > 0) { |
|||
// map.clearMap();
|
|||
map.setZoom(10.3) |
|||
map.setCenter([116.054664, 28.538966]) |
|||
map.setPitch(22.9) |
|||
map.setRotation(1.7000) |
|||
data?.map((x, index) => { |
|||
let marker = new AMap.Marker({ |
|||
position: new AMap.LngLat(x.lng, x.lat), |
|||
// 将一张图片的地址设置为 icon
|
|||
icon: '/assets/images/monitor/point.png', |
|||
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
|
|||
offset: new AMap.Pixel(-13, -30), |
|||
zooms: [5, 20], |
|||
title: x.name, |
|||
content: `<div style="position: relative;">
|
|||
<img src="/assets/images/monitor/point.png" style="width:40px;height:60px;" /> |
|||
<div style="background-image: url(/assets/images/monitor/pump-p.png);height:28px; white-space: nowrap;padding-right: 8px; |
|||
background-size: 100% 100%;background-position: center;background-repeat: no-repeat;color:#FFF;position: absolute; |
|||
top: 14px; left: 25px;line-height: 28px; text-indent: 14px">${x.name}</div> |
|||
</div>` |
|||
}); |
|||
map.add(marker); |
|||
}) |
|||
} |
|||
|
|||
} |
|||
|
|||
return <div style={{ width: '100%', height: '100%', }}> |
|||
<div id='amapId' style={{ width: '100%', height: '100%', background: "#101824" }} /> |
|||
</div> |
|||
} |
|||
|
|||
export default Amap; |
@ -1,47 +1,232 @@ |
|||
import React, { useEffect, useState } from 'react'; |
|||
import React, { useEffect, useState, useRef } from 'react'; |
|||
import { connect } from 'react-redux'; |
|||
import { Spin, Card, Modal, TreeSelect, message } from 'antd'; |
|||
import ProForm, { ProFormText, ModalForm, ProFormSwitch, ProFormTreeSelect } from '@ant-design/pro-form'; |
|||
import moment from 'moment' |
|||
import CardTitle from './public/cardTitle' |
|||
import SimpleBar from 'simplebar-react'; |
|||
import Left_1 from './basis/left_1'; |
|||
import Left_2 from './basis/left_2'; |
|||
import Right_1 from './basis/right_1'; |
|||
import Right_2 from './basis/right_2'; |
|||
import { POWER_STATIONS } from './shuizhan_detail'; |
|||
import './basis.less' |
|||
|
|||
const Basis = ({ user, module, setModule }) => { |
|||
const Basis = ({ actions, dispatch, user, setshowData }) => { |
|||
|
|||
useEffect(() => { |
|||
const { bigScreen } = actions |
|||
const [siteList, setSiteList] = useState([]) //站点列表
|
|||
const [strucId, setStrucId] = useState() //站点ID
|
|||
const [pageRefresh1, setPageRefresh1] = useState(false) |
|||
const [pageRefresh2, setPageRefresh2] = useState(false) |
|||
const [pageRefresh3, setPageRefresh3] = useState(false) |
|||
const [left2List, setleft2List] = useState([]) |
|||
const [depthWater, setDepthWater] = useState([]) |
|||
const [information, setInformation] = useState({}) |
|||
|
|||
const left1Data = useRef([]) |
|||
const left2Data = useRef([]) |
|||
const pumpNumber = useRef(0) |
|||
|
|||
useEffect(async () => { |
|||
await dispatch(bigScreen.axyData({ type: 'get', url: `organizations/{orgId}/structures` })).then(async res => { |
|||
if (res.success) { |
|||
setSiteList(res.payload.data?.map(v => ({ value: v.id, label: v.name, latitude: v.latitude, longitude: v.longitude })) || []) |
|||
setshowData(res.payload.data?.map(v => ({ name: v.name, lat: v.latitude, lng: v.longitude })) || []) |
|||
setStrucId(res.payload.data[0]?.id) |
|||
for (let key in POWER_STATIONS) { |
|||
if (POWER_STATIONS[key]?.name == res.payload.data[0]?.name) { |
|||
setInformation(POWER_STATIONS[key]) |
|||
} |
|||
} |
|||
//获取所有泵站的集水池液位
|
|||
res.payload.data?.map(async v => { |
|||
await dispatch(bigScreen.axyData({ type: 'get', url: `structures/${v.id}/factors` })).then(async r => { |
|||
//泵站信息
|
|||
let informationId = r.payload.data?.find(v => v.name == '泵站信息')?.id |
|||
if (informationId) { |
|||
await dispatch(bigScreen.axyData({ |
|||
type: 'get', url: `structures/${v.id}/stations`, |
|||
params: { query: { factorId: informationId } } |
|||
})).then(async p => { |
|||
if (p.success) { |
|||
await dispatch(bigScreen.axyData({ |
|||
type: 'get', url: `stations/theme/data`, params: { |
|||
query: { |
|||
stations: p.payload.data[0]?.groups[0]?.stations[0]?.id, |
|||
startTime: moment().startOf('day').format('YYYY-MM-DD HH:mm:ss'), |
|||
endTime: moment().endOf('day').format('YYYY-MM-DD HH:mm:ss'), |
|||
limit: 1 |
|||
} |
|||
} |
|||
})).then(async d => { |
|||
if (d.success) { |
|||
left1Data.current?.push({ name: v.name, level: d.payload.data?.stations[0]?.data[0]?.sLiquid_level || 0 }) |
|||
setPageRefresh1(!pageRefresh1) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
}) |
|||
} |
|||
|
|||
//水泵信息
|
|||
let waterId = r.payload.data?.find(v => v.name == '泵站水泵')?.id |
|||
if (waterId) { |
|||
await dispatch(bigScreen.axyData({ |
|||
type: 'get', url: `structures/${v.id}/stations`, |
|||
params: { query: { factorId: waterId } } |
|||
})).then(async p => { |
|||
if (p.success) { |
|||
pumpNumber.current += p.payload.data[0]?.groups[0]?.stations.length || 0 |
|||
setPageRefresh3(!pageRefresh3) |
|||
let dataId = [] |
|||
p.payload.data?.map(v => { |
|||
v.groups?.map(s => { |
|||
s.stations?.map(f => { |
|||
dataId.push(f.id) |
|||
}) |
|||
}) |
|||
}) |
|||
if (dataId.length) { |
|||
// 当前时间
|
|||
await dispatch(bigScreen.axyData({ |
|||
type: 'get', url: `stations/theme/data`, params: { |
|||
query: { |
|||
stations: dataId.join(), |
|||
startTime: moment().startOf('day').format('YYYY:MM:DD HH:mm:ss'), |
|||
endTime: moment().endOf('day').format('YYYY:MM:DD HH:mm:ss'), |
|||
limit: 1 |
|||
} |
|||
} |
|||
})).then(d => { |
|||
if (d.success) { |
|||
left2Data.current?.push({ name: v.name, data: d.payload.data?.stations }) |
|||
setPageRefresh2(!pageRefresh2) |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
}) |
|||
} |
|||
}) |
|||
}) |
|||
} |
|||
}) |
|||
|
|||
}, []) |
|||
const left1Data = [ |
|||
{ name: '雄溪站站站站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
{ name: '雄溪站', level: 3 }, |
|||
] |
|||
|
|||
useEffect(async () => { |
|||
if (strucId) { |
|||
await dispatch(bigScreen.axyData({ type: 'get', url: `structures/${strucId}/factors` })).then(async r => { |
|||
//泵站信息
|
|||
let informationId = r.payload.data?.find(v => v.name == '泵站信息')?.id |
|||
if (informationId) { |
|||
await dispatch(bigScreen.axyData({ |
|||
type: 'get', url: `structures/${strucId}/stations`, |
|||
params: { query: { factorId: informationId } } |
|||
})).then(async p => { |
|||
if (p.success) { |
|||
await dispatch(bigScreen.axyData({ |
|||
type: 'get', url: `stations/theme/data`, params: { |
|||
query: { |
|||
stations: p.payload.data[0]?.groups[0]?.stations[0]?.id, |
|||
startTime: moment().add(-24, 'hours').format('YYYY-MM-DD HH:mm:ss'), |
|||
endTime: moment().format('YYYY-MM-DD HH:mm:ss'), |
|||
limit: 1440 |
|||
} |
|||
} |
|||
})).then(async d => { |
|||
if (d.success) { |
|||
setDepthWater(d.payload.data?.stations[0]?.data) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
}) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
|
|||
}, [strucId]) |
|||
|
|||
|
|||
return <div className='super-screen-body'> |
|||
<div className='super-screen-card left'> |
|||
<Left_1 data={left1Data} /> |
|||
<Left_2 /> |
|||
</div> |
|||
<Left_1 data={left1Data.current} /> |
|||
<div className='card-item' style={{ height: '55%', minWidth: 350 }}> |
|||
<CardTitle title='水泵状态' /> |
|||
<div className='card-content'> |
|||
<div style={{ |
|||
width: '100%', height: 40, |
|||
backgroundImage: 'url(/assets/images/monitor/end.png)', backgroundSize: '100% 100%', backgroundPosition: 'center', backgroundRepeat: 'no-repeat', |
|||
display: 'flex', alignItems: 'flex-end', |
|||
}}> |
|||
<div style={{ width: 80 }}>地点</div> |
|||
<div>编号</div> |
|||
</div> |
|||
<SimpleBar |
|||
style={{ |
|||
// 容器高度
|
|||
maxHeight: 'calc(100% - 50px)', |
|||
}} |
|||
// 允许的滚动方向
|
|||
forceVisible="y" |
|||
> |
|||
{left2Data.current.map(v => <div style={{ |
|||
display: 'flex', alignItems: 'center', marginTop: 6, width: '100%', height: 36, |
|||
backgroundImage: 'linear-gradient(180deg, #000e28e6 1%, #021f48cc 100%)' |
|||
}}> |
|||
<div style={{ width: 76, overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis', }}>{v.name}</div> |
|||
<div > |
|||
{v.data?.map((s, i) => <img style={{ width: 20, height: 20, marginLeft: 3 }} src={`/assets/images/number/${[2, 4, 6].includes(s.data[0]?.sMotor_State) ? 'good' : 'problem'}${i + 1}.png`} />) |
|||
|
|||
} |
|||
|
|||
</div> |
|||
|
|||
|
|||
</div>)} |
|||
</SimpleBar> |
|||
|
|||
|
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
</div > |
|||
<div className='super-screen-card right'> |
|||
<Right_1 /> |
|||
<Right_2 /> |
|||
<Right_1 data={information} /> |
|||
<Right_2 depthWater={depthWater} /> |
|||
</div> |
|||
<div style={{ width: '40%', height: 30, display: 'flex', justifyContent: 'space-around', position: 'absolute', left: 'calc(30%)', bottom: 30, zIndex: 7 }}> |
|||
<div style={{ |
|||
width: 170, height: 30, position: 'relative', textIndent: 50, lineHeight: '30px', color: 'white', |
|||
backgroundImage: 'url(/assets/images/monitor/lower-left.png)', |
|||
backgroundSize: '100% 100%', backgroundPosition: 'center', backgroundRepeat: 'no-repeat', |
|||
}}> |
|||
<img style={{ width: 40, height: 40, position: 'absolute', left: 12, top: -18, }} src='/assets/images/monitor/pumpPO.png' /> |
|||
泵站数量:{siteList?.length || 0} |
|||
</div> |
|||
<div style={{ |
|||
width: 170, height: 30, position: 'relative', textIndent: 50, lineHeight: '30px', color: 'white', |
|||
backgroundImage: 'url(/assets/images/monitor/lower-right.png)', |
|||
backgroundSize: '100% 100%', backgroundPosition: 'center', backgroundRepeat: 'no-repeat', |
|||
}}> |
|||
<img style={{ width: 40, height: 40, position: 'absolute', left: 12, top: -18, }} src='/assets/images/monitor/pumpPP.png' /> |
|||
提升泵数量:{pumpNumber.current} |
|||
</div> |
|||
</div> |
|||
</div > |
|||
} |
|||
|
|||
function mapStateToProps(state) { |
|||
function mapStateToProps (state) { |
|||
const { auth, global } = state; |
|||
return { |
|||
user: auth.user, |
|||
clientHeight: global.clientHeight, |
|||
actions: global.actions, |
|||
}; |
|||
} |
|||
|
|||
|
@ -1,47 +1,54 @@ |
|||
.liquid-level-content { |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
justify-content: flex-start; |
|||
overflow-y: auto; |
|||
|
|||
.liquid-level { |
|||
width: 46%; |
|||
display: flex; |
|||
justify-content: space-evenly; |
|||
align-items: center; |
|||
|
|||
.img { |
|||
width: 84px; |
|||
height: 76px; |
|||
} |
|||
display: inline-block; |
|||
overflow-y: auto; |
|||
|
|||
.info { |
|||
width: 101px; |
|||
height: 80%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: flex-end; |
|||
align-items: center; |
|||
font-size: 1rem; |
|||
text-align: center; |
|||
font-family: D-DIN-Italic; |
|||
.liquid-level { |
|||
width: 100%; |
|||
height: 80px; |
|||
display: flex; |
|||
align-items: center; |
|||
.img { |
|||
width: 84px; |
|||
height: 76px; |
|||
} |
|||
|
|||
.name { |
|||
background-image: url(/assets/images/monitor/gradation-bg.svg); |
|||
width: 100%; |
|||
} |
|||
.info { |
|||
width: 100px; |
|||
height: 80%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
font-size: 1rem; |
|||
text-align: center; |
|||
font-family: D-DIN-Italic; |
|||
justify-content: space-around; |
|||
.name { |
|||
background-image: url(/assets/images/monitor/gradation-bg.svg); |
|||
width: 100%; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
text-overflow: ellipsis; |
|||
} |
|||
|
|||
.level { |
|||
background-image: linear-gradient(90deg, #24396e00 2%, #24396e70 51%, #24396e00 100%); |
|||
width: 100%; |
|||
margin-top: 5px; |
|||
.level { |
|||
background-image: linear-gradient( |
|||
90deg, |
|||
#24396e00 2%, |
|||
#24396e70 51%, |
|||
#24396e00 100% |
|||
); |
|||
width: 100%; |
|||
margin-top: 5px; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
text-overflow: ellipsis; |
|||
|
|||
.num { |
|||
font-size: 1.25rem; |
|||
line-height: 1.25rem; |
|||
letter-spacing: 2.08px; |
|||
} |
|||
} |
|||
.num { |
|||
font-size: 1.25rem; |
|||
line-height: 1.25rem; |
|||
letter-spacing: 2.08px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
@ -1,13 +0,0 @@ |
|||
import React from 'react'; |
|||
import CardTitle from '../public/cardTitle'; |
|||
import '../basis.less'; |
|||
|
|||
export default function Left_2(props) { |
|||
return ( |
|||
<div className='card-item' style={{ height: '55%' }}> |
|||
<CardTitle title='水泵状态' /> |
|||
<div className='card-content'></div> |
|||
|
|||
</div> |
|||
) |
|||
} |
@ -1,14 +1,92 @@ |
|||
import React from 'react'; |
|||
import CardTitle from '../public/cardTitle'; |
|||
import '../basis.less'; |
|||
import ReactECharts from 'echarts-for-react'; |
|||
import moment from 'moment' |
|||
|
|||
export default function Right_2(props) { |
|||
return ( |
|||
<div className='card-item' style={{ height: '55%' }}> |
|||
<CardTitle title='泵站水位' /> |
|||
<div className='card-content'> |
|||
|
|||
export default function Right_2 ({ depthWater }) { |
|||
return ( |
|||
<div className='card-item' style={{ height: '55%' }}> |
|||
<CardTitle title='泵站水位' /> |
|||
<div className='card-content'> |
|||
<div style={{ height: 30, }}> |
|||
</div> |
|||
<ReactECharts |
|||
option={{ |
|||
title: { |
|||
// text: v.name,
|
|||
}, |
|||
grid: { |
|||
left: '10%', |
|||
// right: '4%',
|
|||
// bottom: '3%',
|
|||
// containLabel: true
|
|||
}, |
|||
dataZoom: [ |
|||
{ |
|||
type: 'slider', |
|||
// startValue: depthWater?.map(v=>v.time)
|
|||
}, |
|||
{ |
|||
type: 'inside', |
|||
}, |
|||
], |
|||
tooltip: { |
|||
trigger: 'axis' |
|||
}, |
|||
legend: { |
|||
data: ['集水池液位', '池前(上游)液位'], |
|||
right: '10%', |
|||
textStyle: { |
|||
color: '#FFF', |
|||
}, |
|||
}, |
|||
xAxis: { |
|||
type: 'category', |
|||
name: "时间", |
|||
boundaryGap: false, |
|||
data: depthWater?.map(v => moment(v.time).format('MM-DD HH:mm')) |
|||
}, |
|||
yAxis: { |
|||
type: 'value', |
|||
name: "单位:M", |
|||
areaStyle: { |
|||
color: '#FFF', |
|||
}, |
|||
}, |
|||
series: [ |
|||
{ |
|||
type: 'line', |
|||
name: '集水池液位', |
|||
smooth: true, |
|||
areaStyle: { |
|||
color: '#0e9cff26', |
|||
}, |
|||
data: depthWater?.map(v => v.sLiquid_level) |
|||
}, |
|||
{ |
|||
type: 'line', |
|||
name: '池前(上游)液位', |
|||
smooth: true, |
|||
areaStyle: { |
|||
color: '#0e9cff26', |
|||
}, |
|||
data: depthWater?.map(v => v.sGrille_level) |
|||
}, |
|||
|
|||
] |
|||
}} |
|||
notMerge={true} |
|||
lazyUpdate={true} |
|||
theme={'ReactEChart'} |
|||
// onChartReady={this.onChartReadyCallback}
|
|||
// onEvents={EventsDict}
|
|||
// opts={}
|
|||
/> |
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
) |
|||
) |
|||
} |
|||
|
@ -0,0 +1,28 @@ |
|||
const POWER_STATIONS = { |
|||
'象湖站': { area: '象湖站', name: '象湖电排站', func: '排涝', power: 1050, num: 5, elc_type: 'JsL10—12(210KW)', water_type: '1200ZLB—160轴流泵', by_type: 's9—M500KVA、s9—M800KVA', year: ' 2008年, 空', rightTo: '县城管局', managerUnit: '南昌县象湖联圩管理站', managers: '胡铁根、陈江、陈亮', costFrom: '南昌县象湖联圩管理站', remark: '空' }, |
|||
'沥山站': { area: '象湖站', name: '沥山电排站', func: '排涝', power: 1680, num: 8, elc_type: 'JsL10—12(210KW)', water_type: '1200ZLB—160轴流泵', by_type: 's9—M1000KVA/2', year: ' 2004年, 空', rightTo: '县城管局', managerUnit: '南昌县象湖联圩管理站', managers: '宗磊、李文章、熊大方', costFrom: '南昌县象湖联圩管理站', remark: '空' }, |
|||
'雄溪站': { area: '象湖站', name: '雄溪电排站', func: '排涝', power: 630, num: 3, elc_type: 'JsL10—12(210KW)', water_type: '1200ZLB—160轴流泵', by_type: 's9—M315KVA、s9—M500KVA', year: ' 2004年, 空', rightTo: '县城管局', managerUnit: '南昌县象湖联圩管理站', managers: '涂三毛、刘文红彭伟红、童珊玲、李跃兰(县聘泵站值守人员)', costFrom: '南昌县象湖联圩管理站', remark: '空' }, |
|||
'张坊站': { area: '象湖站', name: '张坊电排站', func: '排涝', power: 2500, num: 5, elc_type: 'YL630-16/1430(500KW)', water_type: '1400ZLB-5立式半调节轴流泵', by_type: 'SCB11-160/10/0.4', year: ' 2020年, 空', rightTo: '县城管局', managerUnit: '还未明确管理单位,由水利局代管', managers: '康玉明、赵先福、殷长和、肖玉平', costFrom: '水利局垫付', remark: '工资发放至2021年12月止' }, |
|||
'万寿湖站': { area: '象湖站', name: '万寿湖电排站', func: '排涝', power: 660, num: 3, elc_type: 'JsL14—12(220KW)', water_type: '1000ZLB-5立式半调节轴流泵', by_type: 'SCB11-1000/10/0.4、SCB11-80/10/0.4', year: ' 2020年, 空', rightTo: '县城管局', managerUnit: '还未明确管理单位,由水利局代管', managers: '夏小生、王刚', costFrom: '水利局垫付', remark: '工资发放至2021年12月止' }, |
|||
'八月湖站': { area: '东新乡', name: '八月湖一站', func: '排灌结合', power: 840, num: 4, elc_type: 'JSL12—14', water_type: '1000ZLB—4轴流泵', by_type: 'S91000KVA', year: ' 1974年, 2009年', rightTo: '县城管局', managerUnit: '东新乡', managers: '邓重志、熊春华、邓仁凯、邓小玉、邓必华', costFrom: '由排灌站直接在乡财务办理缴费', remark: '空' }, |
|||
'新八月湖站': { area: '东新乡', name: '八月湖二站', func: '纯排', power: 1050, num: 5, elc_type: 'JSL12—14', water_type: '1000ZLB—4轴流泵', by_type: 'S9800KVA2', year: ' 1985.4年, 2009年', rightTo: '县城管局', managerUnit: '东新乡', managers: '邓重志、熊春华、邓仁凯、邓小玉、邓必华', costFrom: '由排灌站直接在乡财务办理缴费', remark: '空' }, |
|||
'河下站': { area: '东新乡', name: '河下电排站', func: '排灌结合', power: 320, num: 4, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: 'S9315KVA', year: ' 1972年, 1987年', rightTo: '县城管局', managerUnit: '河下村', managers: '万增福', costFrom: '由河下村排灌站直接缴费', remark: '空' }, |
|||
'石岐站': { area: '东新乡', name: '石岐电排站', func: '排灌结合', power: 340, num: 3, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: 'S9315KVA', year: ' 1974年, 1988年', rightTo: '县城管局', managerUnit: '石岐村', managers: '万象保', costFrom: '由石岐村排灌站直接缴费', remark: '空' }, |
|||
'东新乡': { area: '东新乡', name: '利用姚家塘电排站', func: '排灌结合', power: 240, num: 3, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: 'S9315KVA', year: ' 1974年, 1992年', rightTo: '县城管局', managerUnit: '利用村', managers: '蒋淑仁', costFrom: '由利用村排灌站直接缴费', remark: '空' }, |
|||
'东新乡': { area: '东新乡', name: '汇仁大道排水泵站', func: '纯排', power: 260, num: 2, elc_type: 'Y67—130kw', water_type: '20ZLB—70轴流泵', by_type: '315KVA箱式变压器', year: ' 2014年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '蒋国冬', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, |
|||
'东新乡': { area: '东新乡', name: '小洲杨家湾电排站', func: '纯排', power: 60, num: 2, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: '80KVA箱式变压器', year: ' 2013年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '胡又莲', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, |
|||
'东新乡': { area: '东新乡', name: '石岐补水站', func: '灌溉', power: 260, num: 2, elc_type: 'Y67—130kw', water_type: '20ZLB—70轴流泵', by_type: 'S9_315KVA变压器', year: ' 2014年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '万和全', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, |
|||
'象湖一号闸': { area: '东新乡', name: '象湖南电排站', func: '纯排', power: 60, num: 2, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: '80KVA箱式变压器', year: ' 2013年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '陶小弟', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, |
|||
'东新乡': { area: '东新乡', name: '东莲路节制闸', func: '排涝', power: '空', num: '空', elc_type: '空', water_type: '空', by_type: '空', year: ' 2009年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '蒋永新', costFrom: '由乡水管站直接垂管缴费', remark: '调节东莲路景观明渠水位' }, |
|||
'三山站': { area: '富山乡', name: '三山电排站', func: '排涝', power: 390, num: 3, elc_type: '空', water_type: '空', by_type: '空', year: ' 1973年, 2008年', rightTo: '县城管局', managerUnit: '三山村村委会', managers: '空', costFrom: '富山乡', remark: '空' }, |
|||
'河外泵站': { area: '富山乡', name: '河外电排站站', func: '排涝', power: 90, num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 1984年, 2021年', rightTo: '县城管局', managerUnit: '三山村村委会', managers: '空', costFrom: '富山乡', remark: '空' }, |
|||
'东山站': { area: '富山乡', name: '东山电排站', func: '排涝', power: 2010, num: 12, elc_type: '6台180、6台155', water_type: '空', by_type: '1250、1650', year: ' 1983年, 2008年', rightTo: '富山乡', managerUnit: '富山乡', managers: '空', costFrom: '富山乡', remark: '排涝能力偏小' }, |
|||
'河口电排站': { area: '县城投', name: '河口电排站', func: '排涝', power: 6250, num: 5, elc_type: 'TL1250-30/2600(12500KW)', water_type: '2050ZLQ轴流泵', by_type: 'SCB11-630/10/0.4(2台)', year: ' 2021年, 空', rightTo: '县城管局', managerUnit: '县城投公司', managers: '空', costFrom: '县城投公司', remark: '空' }, |
|||
'县城投': { area: '县城投', name: '芳湖路提升泵站', func: '排涝', power: 225, num: 3, elc_type: 'Y2-315M-8(75KW)', water_type: 'ZLDB-立式单基础轴流泵', by_type: 'ZGS13-200KVA、ZGS13-400KVA', year: ' 2019年, 空', rightTo: '县城管局', managerUnit: '还未明确管理单位,由工人代管', managers: '廖良斌', costFrom: '县城投公司', remark: '空' }, |
|||
'县城投': { area: '县城投', name: '三干渠富山大道闸', func: '控制闸', power: '空', num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 2018年, 空', rightTo: '县城管局', managerUnit: '县城投公司(水投公司)', managers: '葛江波', costFrom: '县城投公司(水投公司)', remark: '空' }, |
|||
'县城投': { area: '县城投', name: '三干渠银湖二路明渠闸', func: '控制闸', power: '空', num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 2018年, 空', rightTo: '县城管局', managerUnit: '县城投公司(水投公司)', managers: '葛江波', costFrom: '县城投公司(水投公司)', remark: '空' }, |
|||
'县城投': { area: '县城投', name: '三干渠汇仁大道明渠闸', func: '控制闸', power: '空', num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 2018年, 空', rightTo: '县城管局', managerUnit: '县城投公司(水投公司)', managers: '葛江波', costFrom: '县城投公司(水投公司)', remark: '空' }, |
|||
} |
|||
|
|||
|
|||
export { POWER_STATIONS } |