dengyinhuan 2 years ago
parent
commit
9704c4a1f6
  1. 29
      api/Dockerfile
  2. 7
      jenkinsfile_api
  3. 7
      jenkinsfile_web
  4. 76
      t --hard
  5. 30
      web/Dockerfile
  6. BIN
      web/client/assets/images/gis/marker_icon_gongjiao.png
  7. BIN
      web/client/assets/images/gis/marker_icon_jianshe.png
  8. BIN
      web/client/assets/images/gis/marker_icon_yanghu.png
  9. BIN
      web/client/assets/images/gis/marker_icon_zaizhong.png
  10. BIN
      web/client/assets/images/leadership/fake/1.jpg
  11. BIN
      web/client/assets/images/leadership/fake/2.jpg
  12. BIN
      web/client/assets/images/leadership/fake/3.jpg
  13. BIN
      web/client/assets/images/leadership/fake/4.jpg
  14. BIN
      web/client/assets/images/leadership/fake/5.jpg
  15. BIN
      web/client/assets/images/quanju/fake/gj1.png
  16. BIN
      web/client/assets/images/quanju/fake/gj2.png
  17. BIN
      web/client/assets/images/quanju/fake/gj3.png
  18. BIN
      web/client/assets/images/quanju/fake/gj4.png
  19. BIN
      web/client/assets/images/quanju/fake/gj5.png
  20. 73
      web/client/src/sections/quanju/containers/example.js
  21. 610
      web/client/src/sections/quanju/containers/footer/gis/gis.js
  22. 173
      web/client/src/sections/quanju/containers/footer/leadership/left/left-center.js
  23. 322
      web/client/src/sections/quanju/containers/footer/leadership/right/hudong.js
  24. 224
      web/client/src/sections/quanju/containers/footer/leadership/right/right-top.js
  25. 130
      web/client/src/sections/quanju/containers/footer/operation/right.js
  26. 65
      web/client/src/sections/quanju/containers/heand/style.less

29
api/Dockerfile

@ -1,14 +1,29 @@
FROM registry.cn-hangzhou.aliyuncs.com/fs-devops/node:12-dev as builder
COPY . /var/app
WORKDIR /var/app
EXPOSE 8080
RUN npm config set registry=http://10.8.30.22:7000
RUN echo "{\"time\":\"$BUILD_TIMESTAMP\",\"build\": \"$BUILD_NUMBER\",\"revision\": \"$SVN_REVISION_1\",\"URL\":\"$SVN_URL_1\"}" > version.json
RUN npm cache clean -f
RUN rm -rf package-lock.json
RUN npm install --registry http://10.8.30.22:7000
FROM registry.cn-hangzhou.aliyuncs.com/fs-devops/node:12
COPY --from=builder --chown=node /var/app /home/node/app
WORKDIR /home/node/app
CMD ["node", "server.js"]
# FROM node:8-alpine
FROM repository.anxinyun.cn/base-images/nodejs12:20.10.12.2
# FROM repository.anxinyun.cn/base-images/nodejs12:20.10.12.2
MAINTAINER liuxinyi "liu.xinyi@free-sun.com.cn"
# MAINTAINER liuxinyi "liu.xinyi@free-sun.com.cn"
COPY . /var/app
# COPY . /var/app
WORKDIR /var/app
# WORKDIR /var/app
EXPOSE 8080
# EXPOSE 8080
CMD ["-a", "http://10.8.30.35:19084", "-e", "iota-n1:9200,iota-n2:9200,iota-n3:9200,iota-n4:9200"]
# CMD ["-a", "http://10.8.30.35:19084", "-e", "iota-n1:9200,iota-n2:9200,iota-n3:9200,iota-n4:9200"]
ENTRYPOINT [ "node", "server.js" ]
# ENTRYPOINT [ "node", "server.js" ]

7
jenkinsfile_api

@ -8,11 +8,10 @@ pipeline {
stages {
stage('Highways4Good Api ......') {
steps {
sh 'switch-auth.sh anxinyun'
buildName "#${BUILD_NUMBER} ~/fs-cloud/${JOB_NAME}:${IMAGE_VERSION}"
buildDescription "registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}"
sh 'docker build -t registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION} ./api'
sh 'docker push registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}'
buildDescription "harbor.anxinyun.cn/iot/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}"
sh 'nerdctl build -t harbor.anxinyun.cn/iot/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION} ./api'
sh 'nerdctl push harbor.anxinyun.cn/iot/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}'
}
}
}

7
jenkinsfile_web

@ -8,11 +8,10 @@ pipeline {
stages {
stage('Highways4Good Web......') {
steps {
sh 'switch-auth.sh anxinyun'
buildName "#${BUILD_NUMBER} ~/fs-cloud/${JOB_NAME}:${IMAGE_VERSION}"
buildDescription "registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}"
sh 'docker build -t registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION} ./web'
sh 'docker push registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}'
buildDescription "harbor.anxinyun.cn/iot/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}"
sh 'nerdctl build -t harbor.anxinyun.cn/iot/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION} ./web'
sh 'nerdctl push harbor.anxinyun.cn/iot/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}'
}
}
}

76
t --hard

@ -1,76 +0,0 @@
2adac9cb (HEAD -> dev) HEAD@{0}: reset: moving to HEAD^^^
e5135673 (origin/dev_backup) HEAD@{1}: reset: moving to HEAD^^
020d4eda (origin/dev) HEAD@{2}: reset: moving to HEAD
020d4eda (origin/dev) HEAD@{3}: reset: moving to HEAD
020d4eda (origin/dev) HEAD@{4}: commit: 12151
d13b52a9 HEAD@{5}: reset: moving to HEAD
d13b52a9 HEAD@{6}: pull --tags origin dev: Fast-forward
2d649d8e HEAD@{9}: pull --tags origin dev: Merge made by the 'ort' strategy.
1a9dd433 HEAD@{10}: commit: 清除log
a9d12cd8 HEAD@{11}: pull --tags origin dev: Merge made by the 'ort' strategy.
8573588e HEAD@{12}: commit: 五分钟刷新
39b8e12b HEAD@{13}: pull --tags origin dev: Fast-forward
6aba4d7a HEAD@{14}: pull --tags origin dev: Merge made by the 'ort' strategy.
2e6dc29a HEAD@{15}: commit: 提交
283a16ae HEAD@{16}: pull --tags origin dev: Merge made by the 'ort' strategy.
590ec5dd HEAD@{17}: commit: 提交
8eb418ae HEAD@{19}: commit: 日期去掉了日,加上了百分号
bf01c153 HEAD@{20}: commit: 提交
76ad089b HEAD@{21}: pull --tags origin dev: Merge made by the 'ort' strategy.
45f58fda HEAD@{22}: commit: 代码提交
d9079d38 HEAD@{23}: commit: 提交日期处理
8e0048ac HEAD@{24}: pull --tags origin dev: Fast-forward
c1607d94 HEAD@{25}: pull --tags origin dev: Fast-forward
670dcf18 HEAD@{26}: pull --tags origin dev: Merge made by the 'ort' strategy.
ec02aeb9 HEAD@{27}: commit: nan优化
974e3c67 HEAD@{28}: commit: 换成定位了
a61dc4e9 HEAD@{29}: pull --tags origin dev: Fast-forward
d77627f9 HEAD@{30}: pull --tags origin dev: Merge made by the 'ort' strategy.
01ef6b5a HEAD@{31}: commit: 柱体问题解决
e9424d3e HEAD@{32}: pull --tags origin dev: Merge made by the 'ort' strategy.
c276432d HEAD@{33}: commit: 样式和颜色提交
45c415e6 (origin/release_0.0.4) HEAD@{34}: pull --tags origin dev: Fast-forward
79723f61 HEAD@{35}: commit: 线条
9c81764c HEAD@{36}: pull --tags origin dev: Merge made by the 'ort' strategy.
3f398ea2 HEAD@{37}: commit: 提交bug
502b068d HEAD@{38}: pull --tags origin dev: Merge made by the 'ort' strategy.
7a5b8b64 HEAD@{39}: commit: 提交
aeff1fe5 HEAD@{40}: commit: 路由修改
11da9451 HEAD@{41}: pull --tags origin dev: Merge made by the 'ort' strategy.
ed7ab5a8 HEAD@{42}: commit: 完成
06063067 HEAD@{43}: pull --tags origin dev: Merge made by the 'ort' strategy.
755a333f HEAD@{44}: commit: 接口调用
2b153823 HEAD@{45}: pull --tags origin dev: Merge made by the 'ort' strategy.
f0558530 HEAD@{46}: commit: 路政统计
50eb042e HEAD@{47}: pull --tags origin dev: Merge made by the 'ort' strategy.
a1dfeddb HEAD@{48}: commit: 提交鼠标移出事件
5469d9df HEAD@{49}: commit (merge): Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev
49a0b5d7 HEAD@{50}: commit: 提交
11279671 HEAD@{51}: commit: 提交领导驾驶舱
3919e2c3 HEAD@{52}: pull --tags origin dev: Merge made by the 'ort' strategy.
b9302fdf HEAD@{53}: commit: 提交代码
79328f49 HEAD@{54}: commit (merge): Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev
c6a3b352 HEAD@{55}: commit: 提交样式
14ed5747 HEAD@{56}: pull --tags origin dev: Fast-forward
80e11974 HEAD@{57}: pull --tags origin dev: Merge made by the 'ort' strategy.
a561e62b HEAD@{58}: commit (merge): Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev
163ce6c1 HEAD@{59}: commit: 提交left.less的更改
4de26fc7 HEAD@{60}: pull: Fast-forward
4a1ae175 HEAD@{61}: pull --tags origin dev: Fast-forward
e7a01d52 HEAD@{62}: commit (merge): Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev
c7e7cd4c HEAD@{63}: commit: 提交领导驾驶舱
fc3f2a92 HEAD@{64}: commit (merge): Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev
f166aa29 HEAD@{65}: commit: 领导驾驶舱提交代码
e6030bcf HEAD@{66}: commit: 上传
b299cd97 HEAD@{67}: pull --tags origin dev: Merge made by the 'ort' strategy.
69e7f3b6 HEAD@{68}: commit: 删除冗余,提交
a74afb8f HEAD@{69}: commit: 文件
68c13e99 HEAD@{70}: commit: 文件上传
dacf49b4 HEAD@{71}: commit: 文件上传
1190cc0d HEAD@{72}: commit (merge): Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev
0c57a227 HEAD@{73}: commit: 头部样式完成
8ab4f5f2 HEAD@{74}: pull --tags origin dev: Merge made by the 'ort' strategy.
50714cbf HEAD@{75}: commit: 公共组件图标样式修改
34413ac0 HEAD@{76}: commit: test
eee5aedf HEAD@{77}: commit: test
cbdfefa3 (master) HEAD@{79}: clone: from https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good.git

30
web/Dockerfile

@ -1,12 +1,30 @@
FROM registry.cn-hangzhou.aliyuncs.com/fs-devops/node:12-dev as builder
COPY . /var/app
WORKDIR /var/app
EXPOSE 8080
RUN npm config set registry=http://10.8.30.22:7000
RUN echo "{\"time\":\"$BUILD_TIMESTAMP\",\"build\": \"$BUILD_NUMBER\",\"revision\": \"$SVN_REVISION_1\",\"URL\":\"$SVN_URL_1\"}" > version.json
RUN npm cache clean -f
RUN npm install --registry http://10.8.30.22:7000
RUN npm run build
RUN rm -rf client/src
RUN rm -rf node_modules
RUN npm install --production --force --registry http://10.8.30.22:7000
FROM registry.cn-hangzhou.aliyuncs.com/fs-devops/node-16:7.22-06-20
COPY --from=builder --chown=node /var/app /home/node/app
WORKDIR /home/node/app
CMD ["node", "server.js"]
#FROM node:12-alpine
FROM repository.anxinyun.cn/base-images/nodejs12:20.10.12.2
# FROM repository.anxinyun.cn/base-images/nodejs12:20.10.12.2
MAINTAINER liuxinyi "liu.xinyi@free-sun.com.cn"
# MAINTAINER liuxinyi "liu.xinyi@free-sun.com.cn"
COPY . /var/app
# COPY . /var/app
WORKDIR /var/app
# WORKDIR /var/app
EXPOSE 5000
# EXPOSE 5000
ENTRYPOINT [ "node", "server.js" ]
# ENTRYPOINT [ "node", "server.js" ]

BIN
web/client/assets/images/gis/marker_icon_gongjiao.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
web/client/assets/images/gis/marker_icon_jianshe.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
web/client/assets/images/gis/marker_icon_yanghu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
web/client/assets/images/gis/marker_icon_zaizhong.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
web/client/assets/images/leadership/fake/1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 KiB

BIN
web/client/assets/images/leadership/fake/2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

BIN
web/client/assets/images/leadership/fake/3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
web/client/assets/images/leadership/fake/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

BIN
web/client/assets/images/leadership/fake/5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
web/client/assets/images/quanju/fake/gj1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
web/client/assets/images/quanju/fake/gj2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
web/client/assets/images/quanju/fake/gj3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

BIN
web/client/assets/images/quanju/fake/gj4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

BIN
web/client/assets/images/quanju/fake/gj5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

73
web/client/src/sections/quanju/containers/example.js

@ -11,53 +11,48 @@ import Gis from './footer/gis/gis';
const MAPID = 'screenGis'
const Example = (props) => {
const { dispatch, actions, user, loading } = props
const [tabKey, setTabKey] = useState('leadership')
const [mapObj, setMapObj] = useState();
// useEffect(() => {
// dispatch(actions.example.getMembers(user.orgId))
// }, [])
const tabChange = (tab) => {
//leader 领导驾驶舱 site 工地 toilet 公厕 light 照明 water水质 encomic经济 environment 生态环境 security 智慧安监
// setCurrentTab(tab);
setTabKey(tab)
// dispatch({ type: 'TAB-CHANGE', data: tab })
}
return (
<Spin tip="biubiubiu~" spinning={loading}>
<div style={{
backgroundColor: "#031839", width: "100vw", height: "100vh", /* transform: `scale(${Math.min(
const { dispatch, actions, user, loading } = props
const [tabKey, setTabKey] = useState('leadership')
const [mapObj, setMapObj] = useState();
const tabChange = (tab) => {
setTabKey(tab)
// dispatch({ type: 'TAB-CHANGE', data: tab })
}
return (
<Spin tip="biubiubiu~" spinning={loading}>
<div style={{
backgroundColor: "#031839", width: "100vw", height: "100vh", /* transform: `scale(${Math.min(
document.body.clientWidth / 1920,
document.body.clientHeight / 1080
)})`, */
}}>
}}>
<div style={{ width: "100%", height: "10%" }}>
<Header tabChange={tabChange} tabKey={tabKey} dispatch={dispatch} />
</div>
<div style={{ position: 'absolute', width: "100%", height: "90%" }}>
<Gis />
<Footer tabKey={tabKey} dispatch={dispatch} />
</div>
<div style={{ width: "100%", height: "10%" }}>
<Header tabChange={tabChange} tabKey={tabKey} dispatch={dispatch} />
</div>
<div style={{ position: 'absolute', width: "100%", height: "90%" }}>
<Gis tabKey={tabKey}/>
<Footer tabKey={tabKey} dispatch={dispatch} />
</div>
</Spin>
)
</div>
</Spin>
)
}
function mapStateToProps(state) {
const { auth, global, members } = state;
return {
loading: members.isRequesting,
user: auth.user,
actions: global.actions,
members: members.data
};
function mapStateToProps (state) {
const { auth, global, members } = state;
return {
loading: members.isRequesting,
user: auth.user,
actions: global.actions,
members: members.data
};
}
export default connect(mapStateToProps)(Example);

610
web/client/src/sections/quanju/containers/footer/gis/gis.js

@ -1,52 +1,578 @@
import React, { useEffect, useState } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import { connect } from 'react-redux';
import Bounds from './bounds';
const MAPID = 'screenGis'
const Gis = (props) => {
const markerArr = {
guanli: [{
longitude: 115.910831,
latitude: 28.354804,
title: '广福非现场检测点',
data: [{
title: '检测',
value: '27970 条'
}, {
title: '已处理',
value: '3.47 %'
}]
}, {
longitude: 115.944728,
latitude: 28.506873,
title: '向塘非现场检测点',
data: [{
title: '检测',
value: '12477 条'
}, {
title: '已处理',
value: '4.1 %'
}]
}, {
longitude: 116.194391,
latitude: 28.652307,
title: '泾口非现场检测点',
data: [{
title: '检测',
value: '6789 条'
}, {
title: '已处理',
value: '7.14 %'
}]
}, {
longitude: 115.967866,
latitude: 28.564967,
title: '八一非现场检测点',
data: [{
title: '检测',
value: '3125 条'
}, {
title: '已处理',
value: '8.8 %'
}]
}],
build: [{
longitude: 115.972472,
latitude: 28.564967,
title: '程扬线至万王电站公路重建工程',
data: [{
title: '里程(公里)',
value: '3.089'
}, {
title: '建设单位',
value: '南昌县南新乡人民政府'
}]
}, {
longitude: 115.893419,
latitude: 28.547622,
title: '村委会至下徐公路重建工程',
data: [{
title: '里程(公里)',
value: '1.586'
}, {
title: '建设单位',
value: '昌县南新乡人民政府'
}]
}, {
longitude: 116.094463,
latitude: 28.754601,
title: '滁北大桥至塘里龚家公路及支线重建工程',
data: [{
title: '里程(公里)',
value: '4.231'
}, {
title: '建设单位',
value: '蒋巷镇人民政府'
}]
}, {
longitude: 116.026707,
latitude: 28.475733,
title: '塘新公路至西联公路改造工程',
data: [{
title: '里程(公里)',
value: '1.8'
}, {
title: '建设单位',
value: '塘南镇人民政府'
}]
}, {
longitude: 115.898934,
latitude: 28.425624,
title: '滁协线至梓溪公路重建工程',
data: [{
title: '里程(公里)',
value: '4.2'
}, {
title: '建设单位',
value: '塘南镇人民政府'
}]
},
// {
// longitude: 116.050607,
// latitude: 28.402986,
// title: '德昌高速泾口连接线至东升公路拓宽改造工程',
// data: [{
// title: '里程(公里)',
// value: '3.322'
// }, {
// title: '建设单位',
// value: '泾口乡人民政府'
// }]
// },
{
longitude: 115.956845,
latitude: 28.361741,
title: '马泾公路至岗背村公路拓宽改造工程',
data: [{
title: '里程(公里)',
value: '2.82'
}, {
title: '建设单位',
value: '泾口乡人民政府'
}]
}, {
longitude: 116.04693,
latitude: 28.317242,
title: '幽兰至少城公路提升改造工程',
data: [{
title: '里程(公里)',
value: '7.8'
}, {
title: '建设单位',
value: '昌县幽兰镇人民政府'
}]
},
// {
// longitude: 115.80793,
// latitude: 28.444215,
// title: '渡头至郭上公路改造工程',
// data: [{
// title: '里程(公里)',
// value: '5.492'
// }, {
// title: '建设单位',
// value: '武阳镇人民政府'
// }]
// },
{
longitude: 115.09473,
latitude: 28.471693,
title: '湾庄线至南洲公路改造工程',
data: [{
title: '里程(公里)',
value: '1.746'
}, {
title: '建设单位',
value: '塔城乡人民政府'
}]
},
// {
// longitude: 116.091972,
// latitude: 28.369829,
// title: '湾庄线至青岚湖公路改造工程',
// data: [{
// title: '里程(公里)',
// value: '1.962'
// }, {
// title: '建设单位',
// value: '塔城乡人民政府'
// }]
// },
{
longitude: 115.872276,
latitude: 28.555696,
title: '新坊至涂埠公路改造工程',
data: [{
title: '里程(公里)',
value: '2.08'
}, {
title: '建设单位',
value: '八一乡人民政府'
}]
}, {
longitude: 115.982584,
latitude: 28.573458,
title: '埂头至后曲公路改造工程',
data: [{
title: '里程(公里)',
value: '2.359'
}, {
title: '建设单位',
value: '八一乡人民政府'
}]
}, {
longitude: 115.878711,
latitude: 28.597673,
title: '105国道至涂家公路重建工程',
data: [{
title: '里程(公里)',
value: '2.19'
}, {
title: '建设单位',
value: '银三角管委会'
}]
}, {
longitude: 116.023949,
latitude: 28.499163,
title: '剑霞至团结公路改造工程',
data: [{
title: '里程(公里)',
value: '0.398'
}, {
title: '建设单位',
value: '南昌县向塘镇人民政府'
}]
},],
operation: [{
longitude: 115.83529,
latitude: 28.583314,
title: '赣AB8019',
data: [{
title: '所属车队',
value: '四车队'
}, {
title: '所属线路',
value: '106路'
}]
}, {
longitude: 115.956477,
latitude: 28.421436,
title: '赣AB8280',
data: [{
title: '所属车队',
value: '三车队'
}, {
title: '所属线路',
value: '23路'
}]
}, {
longitude: 115.954861,
latitude: 28.544287,
title: '赣AC2987',
data: [{
title: '所属车队',
value: '三车队'
}, {
title: '所属线路',
value: '118路'
}]
}, {
longitude: 115.974251,
latitude: 28.513765,
title: '赣AB8235',
data: [{
title: '所属车队',
value: '二车队'
}, {
title: '所属线路',
value: '109路'
}]
}, {
longitude: 116.008991,
latitude: 28.478264,
title: '赣AE0588',
data: [{
title: '所属车队',
value: '一车队'
}, {
title: '所属线路',
value: '15路'
}]
},
// {
// longitude: 116.074432,
// latitude: 28.388747,
// title: '赣AD3176',
// data: [{
// title: '所属车队',
// value: '三车队'
// }, {
// title: '所属线路',
// value: '112路'
// }]
// },
{
longitude: 115.863567,
latitude: 28.384482,
title: '赣AB8273',
data: [{
title: '所属车队',
value: '三车队'
}, {
title: '所属线路',
value: '122路'
}]
}, {
longitude: 115.973443,
latitude: 28.285637,
title: '赣AC2935',
data: [{
title: '所属车队',
value: '一车队'
}, {
title: '所属线路',
value: '131路'
}]
}, {
longitude: 116.055042,
latitude: 28.500986,
title: '赣A03871D',
data: [{
title: '所属车队',
value: '一车队'
}, {
title: '所属线路',
value: '16路'
}]
}, {
longitude: 115.898307,
latitude: 28.579057,
title: '赣A09606D',
data: [{
title: '所属车队',
value: '四车队'
}, {
title: '所属线路',
value: '11路'
}]
}, {
longitude: 115.990409,
latitude: 28.570543,
title: '赣AN9900',
data: [{
title: '所属车队',
value: '一车队'
}, {
title: '所属线路',
value: '116路'
}]
},],
conserve: [{
longitude: 115.948963,
latitude: 28.556655,
title: '沙潭至五星',
data: [{
title: '养护时间',
value: '2022.04.09 14:16'
}, {
title: '养护内容',
value: '刷石灰'
}]
}, {
longitude: 115.92641,
latitude: 28.56433,
title: '滁槎至协城',
data: [{
title: '养护时间',
value: '2022.05.21 09:31'
}, {
title: '养护内容',
value: '砍树枝'
}]
}, {
longitude: 115.938906,
latitude: 28.536912,
title: '瓜山至广福',
data: [{
title: '养护时间',
value: '2022.06.01 12:02'
}, {
title: '养护内容',
value: '打草'
}]
}, {
longitude: 115.959316,
latitude: 28.576649,
title: '泾口-塘山',
data: [{
title: '养护时间',
value: '2022.06.05 09:42'
}, {
title: '养护内容',
value: '砍树枝'
}]
}, {
longitude: 115.910689,
latitude: 28.344683,
title: '罗舍至泗洪',
data: [{
title: '养护时间',
value: '2022.06.08 07:30'
}, {
title: '养护内容',
value: '打草'
}]
},
// {
// longitude: 115.784252,
// latitude: 28.292816,
// title: '渔业至万州',
// data: [{
// title: '养护时间',
// value: '2022.06.14 08:14'
// }, {
// title: '养护内容',
// value: '清路基'
// }]
// },
{
longitude: 115.853238,
latitude: 28.436127,
title: '向塘-西洛',
data: [{
title: '养护时间',
value: '2022.06.16 07:03'
}, {
title: '养护内容',
value: '扫杂草'
}]
}, {
longitude: 116.011835,
latitude: 28.479896,
title: '协成-塘南',
data: [{
title: '养护时间',
value: '2022.05.25 16:01'
}, {
title: '养护内容',
value: '砍树枝'
}]
}, {
longitude: 115.996189,
latitude: 28.499273,
title: '小蓝-东新',
data: [{
title: '养护时间',
value: '2022.05.24 08:31'
}, {
title: '养护内容',
value: '砍树枝'
}]
}, {
longitude: 115.955651,
latitude: 28.588613,
title: '新坊-土坊',
data: [{
title: '养护时间',
value: '2022.05.24 16:44'
}, {
title: '养护内容',
value: '砍树枝'
}]
}, {
longitude: 115.958495,
latitude: 28.432375,
title: '合乞-璜溪',
data: [{
title: '养护时间',
value: '2022.05.27 07:17'
}, {
title: '养护内容',
value: '打草'
}]
},]
}
const [mapObj, setMapObj] = useState();
const markerIcon = {
build: '/assets/images/gis/marker_icon_jianshe.png',
guanli: '/assets/images/gis/marker_icon_zaizhong.png',
operation: '/assets/images/gis/marker_icon_gongjiao.png',
conserve: '/assets/images/gis/marker_icon_yanghu.png'
}
const MAPID = 'screenGis'
const Gis = ({ tabKey }) => {
console.log(tabKey);
const [mapObj, setMapObj] = useState();
const [markers, serMarkers] = useState([])
const curInfoWindow = useRef(null)
useEffect(() => {
if (AMap) loadMap();
return () => {
if (window.local_) {
window.local_ = null
}
if (mapObj)
mapObj.clearMap();
}
}, [true])
useEffect(() => {
if (AMap) loadMap();
return () => {
if (window.local_) {
window.local_ = null
useEffect(() => {
if (mapObj) {
if (markers.length) {
mapObj.remove(markers)
}
if (curInfoWindow.current) {
curInfoWindow.current.close();
}
if (tabKey && markerArr[tabKey]) {
let icon = new AMap.Icon({
size: new AMap.Size(32, 40), // 图标尺寸
image: markerIcon[tabKey], // Icon的图像
// imageOffset: new AMap.Pixel(0, -60), // 图像相对展示区域的偏移量,适于雪碧图等
imageSize: new AMap.Size(32, 40) // 根据所设置的大小拉伸或压缩图片
});
let nextMarkers = markerArr[tabKey]?.map(mk => {
let marker = new AMap.Marker({
position: new AMap.LngLat(mk.longitude, mk.latitude), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
title: mk.title,
icon: icon,
})
marker.on('click', function (ev) {
console.log(ev);
const infoWindow = new AMap.InfoWindow({
anchor: 'bottom-center',
content: `
<div style="min-height:120px; width:300px; background-color:#002785; border: 2px solid #0171f69e; color: #fff">
<div style="height:24px; border-bottom: 2px solid #0171f69e; padding-left: 12px">
${mk.title}
</div>
<div style="padding: 8px 12px; font-weight: bold">
${mk.data.map(t => {
return `<p style="display:inline-block; width:25%; text-align-last:justify; text-align:justify">${t.title}</p> : <p style="display:inline-block; width:50%">${t.value}</p>`
})}
</div>
</div>
` //传入 dom 对象,或者 html 字符串
});
infoWindow.open(mapObj, [mk.longitude, mk.latitude]);
curInfoWindow.current = infoWindow
})
return marker
})
mapObj.add(nextMarkers);
serMarkers(nextMarkers)
}
}
if (mapObj)
mapObj.clearMap();
}
}, [true])
const loadMap = () => {
const map = new AMap.Map(MAPID, {
resizeEnable: true,
center: [115.99255, 28.503617],//地图中心点,初始定位加载显示楼块
zoom: 8,//地图显示的缩放级别
zooms: [8, 18],
pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度
viewMode: '3D', // 地图模式
mapStyle: 'amap://styles/fb26776387242721c2fc32e2cb1daccc',
});
let windowOnload = false;
map.on('complete', function () {
if (!window.local_) {
window.local_ = new Loca.Container({ map });
setMapObj(map);
}, [mapObj, tabKey])
const loadMap = () => {
const map = new AMap.Map(MAPID, {
resizeEnable: true,
center: [115.99255, 28.503617],//地图中心点,初始定位加载显示楼块
zoom: 8,//地图显示的缩放级别
zooms: [8, 18],
pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度
viewMode: '3D', // 地图模式
mapStyle: 'amap://styles/fb26776387242721c2fc32e2cb1daccc',
});
let windowOnload = false;
map.on('complete', function () {
if (!window.local_) {
window.local_ = new Loca.Container({ map });
setMapObj(map);
}
});
window.onload = function () {
windowOnload = true;
}
});
window.onload = function () {
windowOnload = true;
}
};
return (
<div style={{ position: 'absolute', width: '100%', height: '100%' }}>
<div id={MAPID} style={{ width: '100%', height: '100%',}} />
{mapObj ? <Bounds map={mapObj} /> : ''}
</div >
)
};
return (
<div style={{ position: 'absolute', width: '100%', height: '100%' }}>
<div id={MAPID} style={{ width: '100%', height: '100%', }} />
{mapObj ? <Bounds map={mapObj} /> : ''}
</div >
)
}

173
web/client/src/sections/quanju/containers/footer/leadership/left/left-center.js

@ -4,99 +4,92 @@ import Lunbo from "../right/lunbo"
// import "./left.less"
const Leftcenter = () => {
const style = { height: "30%", marginTop: "5%" }
// const hualun = "auto"
const [num, setNum] = useState(1);
const [tu, setTu] = useState("");
const [name, setName] = useState("");
const [list, setList] = useState([
{ name: '静夜思', img: "/assets/images/leadership/shiyantu.png" },
{ name: '唐-李白', img: "/assets/images/leadership/shiyantu.png" },
{ name: '窗前明月光', img: "/assets/images/leadership/shiyantu.png" },
{ name: '疑是地上霜', img: "/assets/images/leadership/shiyantu.png" },
{ name: '举头望明月', img: "/assets/images/leadership/shiyantu.png" },
{ name: '低头思故乡', img: "/assets/images/leadership/shiyantu.png" },
{ name: '静夜思', img: "/assets/images/leadership/shiyantu.png" },
{ name: '唐-李白', img: "/assets/images/leadership/shiyantu.png" },
{ name: '窗前明月光', img: "/assets/images/leadership/shiyantu.png" },
{ name: '疑是地上霜', img: "/assets/images/leadership/shiyantu.png" },
{ name: '举头望明月', img: "/assets/images/leadership/shiyantu.png" },
{ name: '低头思故乡', img: "/assets/images/leadership/shiyantu.png" },
])
useEffect(() => {
const timer = setInterval(() => {
if (num == list.length) {
setNum(1);
setTu(list[0].img);
} else {
setNum(num + 1);
setTu(list[num].img);
}
}, 2000);
return () => clearInterval(timer);
}, [num]);
const renderBody = () => {
return (
<div style={{ width: "100%", height: "55%" }}>{
list.map((item, index) => {
return (
// <div style={{ width: "100%", height: "100%" }} >
// {/* <div style={{ width: "100%", height: "100%", }}> */}
<li style={{ height: "20px", position: "relative", width: "100%", marginTop: index == 0 ? "4px" : "5px", listStyle: "none", borderLeft: num - 1 == index ? "2px solid #1C60FE" : "2px solid #113892", backgroundColor: "linear-gradient(to right, rgba(0,70,200,0.3000) , rgba(0,124,230,0))" }} onMouseEnter={() => {
setTu(item.img);
setNum(index + 1);
setName(item.name)
// console.log(list);
}}>
<p style={{ position: "absolute", color: num - 1 == index ? "#fff" : "rgba(216,240,255,0.8)", left: "10%" }}>{item.name}</p>
<img src='/assets/images/leadership/juxing.png' style={{ width: "100%", height: "100%", position: "absolute" }} />
</li>
// {/* </div> */}
// </div>
)
const style = { height: "30%", marginTop: "5%" }
// const hualun = "auto"
const [num, setNum] = useState(1);
const [tu, setTu] = useState("");
const [name, setName] = useState("");
const [list, setList] = useState([
{ name: '沙潭至五星', img: "/assets/images/leadership/fake/1.jpg" },
{ name: '滁槎至协城', img: "/assets/images/leadership/fake/2.jpg" },
{ name: '瓜山至广福', img: "/assets/images/leadership/fake/3.jpg" },
{ name: '罗舍至泗洪', img: "/assets/images/leadership/fake/4.jpg" },
{ name: '渔业至万州', img: "/assets/images/leadership/fake/5.jpg" },
// { name: '小蓝至东新', img: "/assets/images/leadership/shiyantu.png" },
])
useEffect(() => {
const timer = setInterval(() => {
if (num == list.length) {
setNum(1);
setTu(list[0].img);
} else {
setNum(num + 1);
setTu(list[num].img);
}
}, 2000);
return () => clearInterval(timer);
}, [num]);
const renderBody = () => {
return (
<div style={{ width: "100%", height: "55%" }}>{
list.map((item, index) => {
return (
// <div style={{ width: "100%", height: "100%" }} >
// {/* <div style={{ width: "100%", height: "100%", }}> */}
<li style={{ height: "20px", position: "relative", width: "100%", marginTop: index == 0 ? "4px" : "5px", listStyle: "none", borderLeft: num - 1 == index ? "2px solid #1C60FE" : "2px solid #113892", backgroundColor: "linear-gradient(to right, rgba(0,70,200,0.3000) , rgba(0,124,230,0))" }} onMouseEnter={() => {
setTu(item.img);
setNum(index + 1);
setName(item.name)
// console.log(list);
}}>
<p style={{ position: "absolute", color: num - 1 == index ? "#fff" : "rgba(216,240,255,0.8)", left: "10%" }}>{item.name}</p>
<img src='/assets/images/leadership/juxing.png' style={{ width: "100%", height: "100%", position: "absolute" }} />
</li>
// {/* </div> */}
// </div>
)
})
}
</div >
)
}
return (
<>
<div style={{ width: "100%", height: "40px"/* , backgroundColor: "#fff" */, position: "relative" }}>
{/* <p>{title || []}</p> */}
<img src='/assets/images/quanju/icon.png' style={{ width: "24px", position: "absolute", left: "20px", top: "20%" }} />
<span style={{ position: "absolute", color: "#FFFFFF", fontSize: "24px", fontFamily: "YouSheBiaoTiHei", left: "50px" }}>主要路段拥堵情况分析</span>
<img src='/assets/images/leadership/zibiaoti.png' style={{ width: "93%", height: "35px", position: "absolute", top: "8px", left: "35px" }} />
</div>
<div style={{ width: "100%", height: "100%", marginTop: "3%" }}>
<div style={{ width: "60%", height: "100%", float: "left", marginLeft: "1%" }}>
{/* {
list.map((item, index) => {
return index + 1 == num ?
<div style={{ width: "100%", height: "100%", position: "relative" }}>
<img style={{ width: "100%", position: "absolute", bottom: "5%" }} src={item.img} />
<p style={{
width: "100%", height: "3vh", position: "absolute", bottom: "3%",
backgroundColor: "rgba(0,0,0,0.26)", lineHeight: "3vh", textAlign: ""
}}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "5%", height: "60%", marginLeft: "3%" }} />
<span style={{ marginLeft: "3%", color: "#FFFFFF", fontSize: "12px", fontFamily: "PingFangSC-Regular, PingFang SC", fontWeight: 400 }}>{item.name}</span></p>
</div> : ""
})
}
</div >
)
}
return (
<>
<div style={{ width: "100%", height: "40px"/* , backgroundColor: "#fff" */, position: "relative" }}>
{/* <p>{title || []}</p> */}
<img src='/assets/images/quanju/icon.png' style={{ width: "24px", position: "absolute", left: "20px", top: "20%" }} />
<span style={{ position: "absolute", color: "#FFFFFF", fontSize: "24px", fontFamily: "YouSheBiaoTiHei", left: "50px" }}>主要路段拥堵情况分析</span>
<img src='/assets/images/leadership/zibiaoti.png' style={{ width: "93%", height: "35px", position: "absolute", top: "8px", left: "35px" }} />
</div>
<div style={{ width: "100%", height: "100%", marginTop: "3%" }}>
<div style={{ width: "60%", height: "100%", float: "left", marginLeft: "1%" }}>
{
list.map((item, index) => {
return index + 1 == num ?
<div style={{ width: "100%", height: "100%", position: "relative" }}>
})
<img style={{ width: "100%",height:'100%', position: "absolute", bottom: "5%" }} src={item.img} />
<p style={{
width: "100%", height: "3vh", position: "absolute", bottom: "3%",
backgroundColor: "rgba(0,0,0,0.26)", lineHeight: "3vh", textAlign: ""
}}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "5%", height: "60%", marginLeft: "3%" }} />
<span style={{ marginLeft: "3%", color: "#FFFFFF", fontSize: "12px", fontFamily: "PingFangSC-Regular, PingFang SC", fontWeight: 400 }}>{item.name}</span></p>
</div> : ""
} */}
</div>
{/* <Lunbo
// canScroll={true}
content={renderBody()}
containerStyle={{ position: "relative", height: "100%", width: "35%", float: "right", marginRight: "2%", marginTop: "1%" }}
divHeight={"100%"}
divId={"screen-slope-midde-top-jiangxi"}
/> */}
})
}
</div>
</>
)
<Lunbo
// canScroll={true}
content={renderBody()}
containerStyle={{ position: "relative", height: "100%", width: "35%", float: "right", marginRight: "2%", marginTop: "1%" }}
divHeight={"100%"}
divId={"screen-slope-midde-top-jiangxi"}
/>
</div>
</>
)
}
export default Leftcenter

322
web/client/src/sections/quanju/containers/footer/leadership/right/hudong.js

@ -1,184 +1,182 @@
import React, { Component } from 'react';
import './left.less';
class ReactCarousel extends Component {
chunk(arr, size) {
var arr1 = new Array();
for (var i = 0; i < Math.ceil(arr.length / size); i++) {
arr1[i] = new Array();
}
var j = 0;
var x = 0;
for (var i = 0; i < arr.length; i++) {
if (!((i % size == 0) && (i != 0))) {
arr1[j][x] = arr[i];
x++;
// console.log("j=" + j + " " + "x=" + x);
} else {
j++;
x = 0;
// console.log("else:" + "j=" + j + " " + "x=" + x);
arr1[j][x] = arr[i];
// console.log(arr1);
x++;
}
}
return arr1;
}
chunk (arr, size) {
var arr1 = new Array();
for (var i = 0; i < Math.ceil(arr.length / size); i++) {
arr1[i] = new Array();
}
var j = 0;
var x = 0;
for (var i = 0; i < arr.length; i++) {
if (!((i % size == 0) && (i != 0))) {
arr1[j][x] = arr[i];
x++;
} else {
j++;
x = 0;
arr1[j][x] = arr[i];
x++;
}
}
return arr1;
}
constructor() {
super();
this.state = {
shuzu: [{ name: "南昌县迎宾大道管制路段", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段2", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段3", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段4", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段", images: "/assets/images/leadership/shiyantu.png" },
{ name: "南昌县迎宾大道管制路段", images: "/assets/images/leadership/shiyantu.png" }],
imgs: [],
showIndex: 0, //显示第几个图片
timer: null, // 定时器
show: false, // 前后按钮显示
// arr1: ""
}
// console.log(this.state.imgs);
this.state.imgs = this.chunk((this.state.shuzu), 4)
}
constructor() {
super();
this.state = {
shuzu: [
{ name: '沙潭至五星', img: "/assets/images/leadership/fake/1.jpg" },
{ name: '滁槎至协城', img: "/assets/images/leadership/fake/2.jpg" },
{ name: '瓜山至广福', img: "/assets/images/leadership/fake/3.jpg" },
{ name: '罗舍至泗洪', img: "/assets/images/leadership/fake/4.jpg" },
{ name: '渔业至万州', img: "/assets/images/leadership/fake/5.jpg" },
{ name: '沙潭至五星', img: "/assets/images/leadership/fake/1.jpg" },
{ name: '滁槎至协城', img: "/assets/images/leadership/fake/2.jpg" },
{ name: '瓜山至广福', img: "/assets/images/leadership/fake/3.jpg" },
{ name: '罗舍至泗洪', img: "/assets/images/leadership/fake/4.jpg" },
{ name: '渔业至万州', img: "/assets/images/leadership/fake/5.jpg" },
],
imgs: [],
showIndex: 0, //显示第几个图片
timer: null, // 定时器
show: false, // 前后按钮显示
// arr1: ""
}
// console.log(this.state.imgs);
this.state.imgs = this.chunk((this.state.shuzu), 4)
}
render () {
return (
<div className="ReactCarousel" style={{ width: "100%", height: "100%" }}>
<div className="contain"
onMouseEnter={() => { this.stop() }} //鼠标进入停止自动播放
onMouseLeave={() => { this.start() }} //鼠标退出自动播放
>
<ul className="ul">
{
this.state.imgs.map((value, index) => {
return (
<li style={{ position: "relative", left: "8%", width: "100%", height: "100%", top: "-5%", fontSize: "12px" }} className={index === this.state.showIndex ? 'show' : ''}
key={index}
>
<div style={{ width: "45%", height: "40%", backgroundImage: `url(${value[0].img})`, backgroundSize: 'cover', position: "absolute", left: "-3%", top: "5%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[0]?.name}
</div>
</div>
render() {
return (
<div className="ReactCarousel" style={{ width: "100%", height: "100%" }}>
<div className="contain"
onMouseEnter={() => { this.stop() }} //鼠标进入停止自动播放
onMouseLeave={() => { this.start() }} //鼠标退出自动播放
>
<ul className="ul">
{
this.state.imgs.map((value, index) => {
return (
<li style={{ position: "relative", left: "8%", width: "100%", height: "100%", top: "-5%", fontSize: "12px" }} className={index === this.state.showIndex ? 'show' : ''}
key={index}
>
<div style={{ width: "45%", height: "40%", backgroundColor: "red", position: "absolute", left: "-3%", top: "5%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[0]?.name}
</div>
</div>
</div>
{value[1]?.name ? <div style={{ width: "45%", height: "40%", backgroundColor: "#fff", position: "absolute", left: "45%", top: "5%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[1]?.name}
</div>
</div>
</div> : ""}
{value[2]?.name ? <div style={{ width: "45%", height: "40%", backgroundColor: "bule", position: "absolute", left: "-3%", top: "49%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[2]?.name}
</div>
</div>
</div> : ""}
{value[3]?.name ? <div style={{ width: "45%", height: "40%", backgroundColor: "pink", position: "absolute", left: "45%", top: "49%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[3]?.name}
</div>
</div>
</div> : ""}
{/* <div>{value[1].name}</div>
</div>
{value[1]?.name ? <div style={{ width: "45%", height: "40%", backgroundImage: `url(${value[1].img})`, backgroundSize: 'cover', position: "absolute", left: "45%", top: "5%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[1]?.name}
</div>
</div>
</div> : ""}
{value[2]?.name ? <div style={{ width: "45%", height: "40%", backgroundImage: `url(${value[0].img})`, backgroundSize: 'cover', position: "absolute", left: "-3%", top: "49%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[2]?.name}
</div>
</div>
</div> : ""}
{value[3]?.name ? <div style={{ width: "45%", height: "40%", backgroundImage: `url(${value[3].img})`, backgroundSize: 'cover', position: "absolute", left: "45%", top: "49%" }}>
<div style={{ width: "100%", height: "100%", position: "absolute", top: "80%" }}>
<div style={{ width: "100%", height: "20%", backgroundColor: "rgba(0,0,0,0.6)", overflow: "hiddden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
<img src='/assets/images/leadership/weizhis.png' style={{ width: "6%", height: "80%", marginLeft: "3%", marginRight: "3%" }} />
{value[3]?.name}
</div>
</div>
</div> : ""}
{/* <div>{value[1].name}</div>
<div>{value[2].name}</div>
<div>{value[3].name}</div> */}
</li>
)
})
}
</ul>
{/* <ul className="dots" style={{ width: this.state.imgs.length * 20 + 'px' }}>
</li>
)
})
}
</ul>
{/* <ul className="dots" style={{ width: this.state.imgs.length * 20 + 'px' }}>
{
this.state.imgs.map((value, index) => {
return (
<li key={index}
className={index === this.state.showIndex ? 'active' : ''}
onClick={() => { this.change(index) }}>
</li>)
</li>
)
})
}
</ul> */}
<div className="control" style={{ width: "100%", height: "10%" }}>
<span style={{ position: "absolute", top: "86%", width: "3%", height: "8%" }} className="left" onClick={(e) => { this.previous(e) }}>
<img src='/assets/images/leadership/zuofanye.png' style={{ width: "100%", height: "100%" }} />
</span>
<span style={{ position: "absolute", top: "86%", width: "3%", height: "8%", right: "6%" }} className="right" onClick={(e) => { this.next(e) }}>
<img src='/assets/images/leadership/youofanye.png' style={{ width: "100%", height: "100%" }} />
</span>
</div>
</div>
<div className="control" style={{ width: "100%", height: "10%" }}>
<span style={{ position: "absolute", top: "86%", width: "3%", height: "8%" }} className="left" onClick={(e) => { this.previous(e) }}>
<img src='/assets/images/leadership/zuofanye.png' style={{ width: "100%", height: "100%" }} />
</span>
<span style={{ position: "absolute", top: "86%", width: "3%", height: "8%", right: "6%" }} className="right" onClick={(e) => { this.next(e) }}>
<img src='/assets/images/leadership/youofanye.png' style={{ width: "100%", height: "100%" }} />
</span>
</div>
</div>
)
}
componentDidMount() { //一开始自动播放
this.start();
}
</div>
)
}
componentDidMount () { //一开始自动播放
this.start();
}
componentWillUnmount() { //销毁前清除定时器
this.stop();
}
stop = () => { //暂停
let { timer } = this.state;
clearInterval(timer);
}
start = () => { //开始
let { timer } = this.state;
timer = setInterval(() => {
this.next();
}, 300000);
this.setState({
timer
})
}
change = (index) => { //点击下面的按钮切换当前显示的图片
let { showIndex } = this.state;
showIndex = index;
this.setState({
showIndex
})
}
previous = (e) => { //上一张
let ev = e || window.event;
let { showIndex, imgs } = this.state;
if (showIndex <= 0) {
showIndex = imgs.length - 1;
} else {
showIndex--;
}
this.setState({
showIndex
})
}
next = (e) => { //下一张
let ev = e || window.event;
let { showIndex, imgs } = this.state;
if (showIndex >= imgs.length - 1) {
showIndex = 0;
} else {
showIndex++;
}
this.setState({
showIndex
})
}
componentWillUnmount () { //销毁前清除定时器
this.stop();
}
stop = () => { //暂停
let { timer } = this.state;
clearInterval(timer);
}
start = () => { //开始
let { timer } = this.state;
timer = setInterval(() => {
this.next();
}, 300000);
this.setState({
timer
})
}
change = (index) => { //点击下面的按钮切换当前显示的图片
let { showIndex } = this.state;
showIndex = index;
this.setState({
showIndex
})
}
previous = (e) => { //上一张
let ev = e || window.event;
let { showIndex, imgs } = this.state;
if (showIndex <= 0) {
showIndex = imgs.length - 1;
} else {
showIndex--;
}
this.setState({
showIndex
})
}
next = (e) => { //下一张
let ev = e || window.event;
let { showIndex, imgs } = this.state;
if (showIndex >= imgs.length - 1) {
showIndex = 0;
} else {
showIndex++;
}
this.setState({
showIndex
})
}
}
export default ReactCarousel;

224
web/client/src/sections/quanju/containers/footer/leadership/right/right-top.js

@ -6,125 +6,129 @@ import Huadong from './hudong';
import "./left.less"
const Righttop = () => {
const { Option } = Select;
const style = { height: "68%" }
const children = [];
const [size, setSize] = useState('454544545');
const [num, setNum] = useState();
const [tu, setTu] = useState("");
const [name, setName] = useState("");
const handleChange = (value) => {
// console.log(`Selected: ${value}`);
setSize(value)
};
for (let i = 10; i < 36; i++) {
children.push(<Option key={i.toString(36) + i}>{i.toString(36) + i}</Option>);
}
const [list, setList] = useState([
{ name: '静夜思', img: "/assets/images/leadership/shiyantu.png" },
{ name: '唐-李白', img: "/assets/images/leadership/shiyantu.png" },
{ name: '窗前明月光', img: "/assets/images/leadership/shiyantu.png" },
{ name: '疑是地上霜', img: "/assets/images/leadership/shiyantu.png" },
{ name: '举头望明月', img: "/assets/images/leadership/shiyantu.png" },
{ name: '低头思故乡', img: "/assets/images/leadership/shiyantu.png" },
{ name: '静夜思', img: "/assets/images/leadership/shiyantu.png" },
{ name: '唐-李白', img: "/assets/images/leadership/shiyantu.png" },
{ name: '窗前明月光', img: "/assets/images/leadership/shiyantu.png" },
{ name: '疑是地上霜', img: "/assets/images/leadership/shiyantu.png" },
{ name: '举头望明月', img: "/assets/images/leadership/shiyantu.png" },
{ name: '低头思故乡', img: "/assets/images/leadership/shiyantu.png" },
])
// useEffect(() => {
// const timer = setInterval(() => {
// if (num == 12) {
// setNum(1);
// setTu(list[0].img);
// } else {
// setNum(num + 1);
// setTu(list[num].img);
// }
// }, 6000);
// return () => clearInterval(timer);
// }, [num]);
const renderBody = () => {
return (
<div id='op' style={{ width: "100%", height: "55%" }}>{
list.map((item, index) => {
return (
// <div style={{ width: "100%", height: "100%" }} >
// {/* <div style={{ width: "100%", height: "100%", }}> */}
<li className={index} style={{ height: "20px", position: "relative", width: "100%", color: "#FFFFFF", marginTop: index == 0 ? "4px" : "5px", listStyle: "none", fontSize: "14px" }} onMouseEnter={() => {
// setTu(item.img);
setNum(index);
const { Option } = Select;
const style = { height: "68%" }
const children = [];
const [size, setSize] = useState('454544545');
const [num, setNum] = useState();
const [tu, setTu] = useState("");
const [name, setName] = useState("");
const handleChange = (value) => {
// console.log(`Selected: ${value}`);
setSize(value)
};
const [list, setList] = useState([
{ name: '沙潭至五星', img: "/assets/images/leadership/fake/1.jpg" },
{ name: '滁槎至协城', img: "/assets/images/leadership/fake/2.jpg" },
{ name: '瓜山至广福', img: "/assets/images/leadership/fake/3.jpg" },
{ name: '罗舍至泗洪', img: "/assets/images/leadership/fake/4.jpg" },
{ name: '渔业至万州', img: "/assets/images/leadership/fake/5.jpg" },
{ name: '沙潭至五星', img: "/assets/images/leadership/fake/1.jpg" },
{ name: '滁槎至协城', img: "/assets/images/leadership/fake/2.jpg" },
{ name: '瓜山至广福', img: "/assets/images/leadership/fake/3.jpg" },
{ name: '罗舍至泗洪', img: "/assets/images/leadership/fake/4.jpg" },
{ name: '渔业至万州', img: "/assets/images/leadership/fake/5.jpg" },
])
for (let i = 0; i < list.length; i++) {
children.push(<Option key={i.toString(36) + i}>{list[i].name}</Option>);
}
// useEffect(() => {
// const timer = setInterval(() => {
// if (num == 12) {
// setNum(1);
// setTu(list[0].img);
// } else {
// setNum(num + 1);
// setTu(list[num].img);
// }
// }, 6000);
// return () => clearInterval(timer);
// }, [num]);
const renderBody = () => {
return (
<div id='op' style={{ width: "100%", height: "55%" }}>{
list.map((item, index) => {
return (
<div style={{ width: "100%", height: "100%" }} >
<div style={{ width: "100%", height: "100%", }}>
<li className={index} style={{
height: "20px", position: "relative", width: "100%", color: "#FFFFFF", marginTop: index == 0 ? "4px" : "5px", listStyle: "none", fontSize: "14px"
}} onMouseEnter={() => {
// setTu(item.img);
setNum(index);
}} onMouseLeave={() => {
setNum()
setNum()
}}>
{num == index ? <img src='/assets/images/leadership/red.png' style={{ width: "100%", height: "120%", position: "absolute", }} /> : ""}
{num == index ? <img src='/assets/images/leadership/wangluo.png' style={{ width: "5%", height: "100%", position: "absolute", left: "-0.5%", top: "20%" }} /> : ""}
{num == index ? <img src={item.img} style={{ width: "100%", height: "120%", position: "absolute", }} /> : ""}
{num == index ? <img src={item.img} style={{ width: "5%", height: "100%", position: "absolute", left: "-0.5%", top: "20%" }} /> : ""}
<p style={{ position: "absolute", left: "5%", color: num == index ? "#FFFFFF" : "rgba(216,240,255,0.8)" }} >{item.name}</p><p style={{ position: "absolute", right: "5%", color: num == index ? "#FFFFFF" : "rgba(216,240,255,0.8)" }}>{item.name}</p></li>
// {/* </div> */}
// </div>
)
<p style={{ position: "absolute", left: "5%", color: num == index ? "#FFFFFF" : "rgba(216,240,255,0.8)" }} >{item.name}</p>
<p style={{ position: "absolute", right: "5%", color: num == index ? "#FFFFFF" : "rgba(216,240,255,0.8)" }}>{item.name}</p>
</li>
</div>
</div>
)
})
}
</div >
)
}
return (
<>
})
}
</div >
)
}
return (
<>
<Module style={style} title={"路面执法监控"}>
<div style={{ width: "100%", height: "65%", position: "relative" }}>
{/* <p style={{ position: "absolute", left: "25%", top: "2%", fontSize: "14px", color: "#FFFFFF" }}></p><p style={{ position: "absolute", left: "37%", fontSize: "24px", marginLeft: "1%", top: "-0.5%", color: "#FFFFFF", fontFamily: "YouSheBiaoTiHei" }}>129</p>
<p style={{ position: "absolute", left: "55%", top: "2%", fontSize: "14px", color: "#FFFFFF" }}>在线率</p><p style={{ position: "absolute", right: "15%", fontSize: "24px", marginLeft: "2%", top: "-0.5%", color: "#FFFFFF", fontFamily: "YouSheBiaoTiHei" }}>88.87%</p> */}
<div style={{ width: "100%", height: "10%", position: "relative" }}>
{/* <img src='/assets/images/leadership/head.png' style={{ width: "15%", marginLeft: "5%" }} /> */}
<Module style={style} title={"路面执法监控"}>
<div style={{ width: "100%", height: "65%", position: "relative" }}>
<p style={{ position: "absolute", left: "25%", top: "2%", fontSize: "14px", color: "#FFFFFF" }}>监控总数</p><p style={{ position: "absolute", left: "37%", fontSize: "24px", marginLeft: "1%", top: "-0.5%", color: "#FFFFFF", fontFamily: "YouSheBiaoTiHei" }}>129</p>
<p style={{ position: "absolute", left: "55%", top: "2%", fontSize: "14px", color: "#FFFFFF" }}>在线率</p><p style={{ position: "absolute", right: "15%", fontSize: "24px", marginLeft: "2%", top: "-0.5%", color: "#FFFFFF", fontFamily: "YouSheBiaoTiHei" }}>88.87%</p>
<div style={{ width: "100%", height: "10%", position: "relative" }}>
<img src='/assets/images/leadership/head.png' style={{ width: "15%", marginLeft: "5%" }} />
<div className='wy-rightTop' style={{ position: "absolute", right: "5%", top: "130%" }}>
{/* <Select
size={size}
defaultValue="选择路段"
onChange={handleChange}
style={{
width: 100,
fontSize: "12px",
color: "#D8F0FF",
}}
>
{children}
</Select> */}
{/* <div>{size}</div> */}
<div className='wy-rightTop' style={{ position: "absolute", right: "5%", top: "130%" }}>
<Select
size={size}
defaultValue="选择路段"
onChange={handleChange}
style={{
width: 100,
fontSize: "12px",
color: "#D8F0FF",
}}
>
{children}
</Select>
<div>{size}</div>
</div>
</div>
</div>
<div style={{ width: "100%", height: "80%", position: "relative", top: "10%" }}>
{/* <Huadong /> */}
</div>
</div>
<div style={{ width: "100%", height: "35%" }}>
<div style={{ width: "100%", height: "40px"/* , backgroundColor: "#fff" */, position: "relative" }}>
{/* <p>{title || []}</p> */}
<img src='/assets/images/quanju/icon.png' style={{ width: "24px", position: "absolute", left: "20px", top: "18%" }} />
<span style={{ position: "absolute", color: "#FFFFFF", fontSize: "24px", fontFamily: "YouSheBiaoTiHei", left: "50px" }}>离线详情</span>
<img src='/assets/images/leadership/zibiaoti.png' style={{ width: "94%", height: "34px", position: "absolute", top: "8px", left: "35px" }} />
</div>
{/* <Spin tip="Loading..." spinning={num ? true : false} style={{ width: "100%", height: "100%" }}> */}
{/* <Lunbo
// canScroll={true}
content={renderBody()}
containerStyle={{ position: "relative", height: "100%", width: "90%", left: "5%", top: "5%" }}
divHeight={"100%"}
divId={"screen-slope"}
/> */}
{/* </Spin> */}
</div>
</div>
<div style={{ width: "100%", height: "80%", position: "relative", top: "10%" }}>
<Huadong />
</div>
</div>
<div style={{ width: "100%", height: "35%" }}>
<div style={{ width: "100%", height: "40px"/* , backgroundColor: "#fff" */, position: "relative" }}>
{/* <p>{title || ''}</p> */}
<img src='/assets/images/quanju/icon.png' style={{ width: "24px", position: "absolute", left: "20px", top: "18%" }} />
<span style={{ position: "absolute", color: "#FFFFFF", fontSize: "24px", fontFamily: "YouSheBiaoTiHei", left: "50px" }}>离线详情</span>
<img src='/assets/images/leadership/zibiaoti.png' style={{ width: "94%", height: "34px", position: "absolute", top: "8px", left: "35px" }} />
</div>
<Spin tip="Loading..." spinning={num ? true : false} style={{ width: "100%", height: "100%" }}>
<Lunbo
// canScroll={true}
content={renderBody()}
containerStyle={{ position: "relative", height: "100%", width: "90%", left: "5%", top: "5%" }}
divHeight={"100%"}
divId={"screen-slope"}
/>
</Spin>
</div>
</Module>
</Module>
</>
)
</>
)
}
export default Righttop

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

@ -1,71 +1,71 @@
import React, { useState } from 'react'
// import { Carousel } from 'antd';
import { Carousel } from 'antd';
import Module from '../../public/module'
const Right = () => {
// const [dataLists, setDataList] = useState([
// {
// route: '147',
// plate: '赣APJ090'
// }, {
// route: '166',
// plate: '赣APJ087'
// }, {
// route: '171',
// plate: '赣APJ184'
// }, {
// route: '186',
// plate: '赣APJ241'
// }, {
// route: '199',
// plate: '赣APJ337'
// }
// ])
const style = { height: "97%", marginTop: "3%" }
return (
<div style={{ position:'absolute',right:0, width: "23%", height: "100%", marginRight: "1%", }}>
<Module style={style} customize={true} title={"车辆视频监控"}>
<div style={{ width: '90%', height: '96%', margin: '2% 5%', overflow: 'hidden' }}>
{/* <Carousel
autoplay
infinite
autoplaySpeed={300000}
vertical={true}
slidesToShow={4}
>
{
dataLists.map((data, index) => (
<div key={index} style={{width:'100%',height:'40%'}}>
<div className='busInformation'>
<img src='/assets/images/quanju/theBus.png' style={{ width: '15%', display:'block',float:'left' }} />
<span>
<h3>所属线路</h3>
<h4>{data.route}</h4>
<h3>车辆牌照号</h3>
<h5>{data.plate}</h5>
</span>
</div>
<div className='busVideo'>
<div style={{
width:'98%',margin:'1% 1%',height:152,display:'block',float:'left',boxShadow: '0px 1px 5px 0px #1C60FE',
border:'1px solid #1C60FE'
}}><img src='/assets/images/quanju/busVideo.png' style={{width:'100%',height:'100%'}} /></div>
<div style={{
width:'48%',margin:'1% 1%',height:100,display:'block',float:'left',boxShadow: '0px 1px 5px 0px #1C60FE',
border:'1px solid #1C60FE'
}}><img src='/assets/images/quanju/busVideo.png' style={{width:'100%',height:'100%'}} /></div>
<div style={{
width:'48%',margin:'1% 1%',height:100,display:'block',float:'left',boxShadow: '0px 1px 5px 0px #1C60FE',
border:'1px solid #1C60FE'
}}><img src='/assets/images/quanju/busVideo.png' style={{width:'100%',height:'100%'}} /></div>
</div>
</div>
))
}
</Carousel> */}
</div>
</Module>
</div>
)
const [dataLists, setDataList] = useState([
{
route: '147',
plate: '赣APJ090'
}, {
route: '166',
plate: '赣APJ087'
}, {
route: '171',
plate: '赣APJ184'
}, {
route: '186',
plate: '赣APJ241'
}, {
route: '199',
plate: '赣APJ337'
}
])
const style = { height: "97%", marginTop: "3%" }
return (
<div style={{ position: 'absolute', right: 0, width: "23%", height: "100%", marginRight: "1%", }}>
<Module style={style} customize={true} title={"车辆视频监控"}>
<div style={{ width: '90%', height: '96%', margin: '2% 5%', overflow: 'hidden' }}>
<Carousel
autoplay
infinite
autoplaySpeed={300000}
vertical={true}
slidesToShow={4}
>
{
dataLists.map((data, index) => (
<div key={index} style={{ width: '100%', height: '40%' }}>
<div className='busInformation'>
<img src='/assets/images/quanju/theBus.png' style={{ width: '15%', display: 'block', float: 'left' }} />
<span>
<h3>所属线路</h3>
<h4>{data.route}</h4>
<h3>车辆牌照号</h3>
<h5>{data.plate}</h5>
</span>
</div>
<div className='busVideo'>
<div style={{
width: '98%', margin: '1% 1%', height: 152, display: 'block', float: 'left', boxShadow: '0px 1px 5px 0px #1C60FE',
border: '1px solid #1C60FE'
}}><img src='/assets/images/quanju/fake/gj1.png' style={{ width: '100%', height: '100%' }} /></div>
<div style={{
width: '48%', margin: '1% 1%', height: 100, display: 'block', float: 'left', boxShadow: '0px 1px 5px 0px #1C60FE',
border: '1px solid #1C60FE'
}}><img src='/assets/images/quanju/fake/gj2.png' style={{ width: '100%', height: '100%' }} /></div>
<div style={{
width: '48%', margin: '1% 1%', height: 100, display: 'block', float: 'left', boxShadow: '0px 1px 5px 0px #1C60FE',
border: '1px solid #1C60FE'
}}><img src='/assets/images/quanju/fake/gj3.png' style={{ width: '100%', height: '100%' }} /></div>
</div>
</div>
))
}
</Carousel>
</div>
</Module>
</div>
)
}
export default Right

65
web/client/src/sections/quanju/containers/heand/style.less

@ -1,29 +1,40 @@
.tabKey-map{
width: 12%;
height: 4.7vh;
text-align: center;
position: absolute;
top: 3vh;
a{
color: #FFFFFF;
font-size: 2vh;
font-family: PingFangSC-Medium, PingFang SC;
line-height: 4.7vh;
font-weight: 500;
}
.tabKey-map {
width: 12%;
height: 4.7vh;
text-align: center;
position: absolute;
top: 3vh;
a {
color: #FFFFFF;
font-size: 2vh;
font-family: PingFangSC-Medium, PingFang SC;
line-height: 4.7vh;
font-weight: 500;
}
}
.notabKey{
width:12%;
height: 4.7vh;
position: absolute;
top: 3vh;
text-align: center;
a{
color: #6593c6;
font-size: 2vh;
font-family: PingFangSC-Medium, PingFang SC;
line-height: 4.7vh;
font-weight: 500;
}
.notabKey {
width: 12%;
height: 4.7vh;
position: absolute;
top: 3vh;
text-align: center;
a {
color: #6593c6;
font-size: 2vh;
font-family: PingFangSC-Medium, PingFang SC;
line-height: 4.7vh;
font-weight: 500;
}
}
.amap-info-content {
padding: 0;
}
.amap-info-sharp {
display: none;
}
Loading…
Cancel
Save