Browse Source

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

release_0.0.1
巴林闲侠 3 years ago
parent
commit
311ec1143d
  1. BIN
      web/client/assets/images/quanju/guanlijiance.png
  2. BIN
      web/client/assets/images/quanju/guanlijiance_1.png
  3. BIN
      web/client/assets/images/quanju/zhicaolog.png
  4. 4
      web/client/src/sections/fillion/components/maintenanceTable.js
  5. 4
      web/client/src/sections/fillion/components/patrolTable.js
  6. 2
      web/client/src/sections/organization/components/depModal.js
  7. 69
      web/client/src/sections/organization/components/userModal.js
  8. 16
      web/client/src/sections/organization/containers/user.js
  9. 139
      web/client/src/sections/quanju/containers/footer/build/AutoRollComponent.js
  10. 10
      web/client/src/sections/quanju/containers/footer/build/Leftbottom.js
  11. 10
      web/client/src/sections/quanju/containers/footer/build/Rightbottom.js
  12. 86
      web/client/src/sections/quanju/containers/footer/build/Rightcenter.js
  13. 6
      web/client/src/sections/quanju/containers/footer/build/index.js
  14. 35
      web/client/src/sections/quanju/containers/footer/build/style.less
  15. 7
      web/client/src/sections/quanju/containers/footer/conserve/index.js
  16. 173
      web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js
  17. 50
      web/client/src/sections/quanju/containers/footer/guanli/index.js
  18. 249
      web/client/src/sections/quanju/containers/footer/guanli/style.less
  19. 12
      web/client/src/sections/quanju/containers/heand/index.js

BIN
web/client/assets/images/quanju/guanlijiance.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
web/client/assets/images/quanju/guanlijiance_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
web/client/assets/images/quanju/zhicaolog.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

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

@ -99,7 +99,7 @@ for (let i = 0; i < 10; i += 1) {
const IPList = (props) => {
const PatrolNameList = (props) => {
const { onChange, patrolName } = props;
const columns = [
@ -179,7 +179,7 @@ const MaintenanceTable = () => {
return (
<div className='card-protable'>
<Card >
<IPList onChange={(searchPatrolName) => setPatrolName(searchPatrolName)} patrolName={patrolName} />
<PatrolNameList onChange={(searchPatrolName) => setPatrolName(searchPatrolName)} patrolName={patrolName} />
</Card>
<Card
style={{ flex: 1 }}

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

@ -99,7 +99,7 @@ for (let i = 0; i < 10; i += 1) {
const IPList = (props) => {
const PatrolNameList = (props) => {
const { onChange, patrolName } = props;
const columns = [
@ -182,7 +182,7 @@ const PatrolTable = () => {
return (
<div className='card-protable'>
<Card >
<IPList onChange={(searchPatrolName) => setPatrolName(searchPatrolName)} patrolName={patrolName} />
<PatrolNameList onChange={(searchPatrolName) => setPatrolName(searchPatrolName)} patrolName={patrolName} />
</Card>
<Card
style={{ flex: 1 }}

2
web/client/src/sections/organization/components/depModal.js

@ -68,6 +68,7 @@ const DepModal = (props) => {
function mapStateToProps(state) {
const { depMessage } = state;
console.log('depMessage:',depMessage);
const pakData = (dep) => {
return dep.map((d) => {
return {
@ -79,6 +80,7 @@ function mapStateToProps(state) {
})
}
let depData = pakData(depMessage.data || [])
console.log('depData:',depData);
return {
loading: depMessage.isRequesting,
depData,

69
web/client/src/sections/organization/components/userModal.js

@ -48,23 +48,23 @@ const UserModal = (props) => {
placeholder="请输入姓名"
rules={[{ required: true, message: '请输入姓名' }]}
/>
<ProFormText
name={['contract', 'username']}
< ProFormText
name={['contract', 'phone']}
width="md"
label="用户名"
maxLength={20}
label="手机号(用户名)"
required
fieldProps={{
maxLength: 30,
maxLength: 11,
}}
getValueFromEvent={(event) => {
return event.target.value
return event.target.value.replace(/\D/g, '')
}}
placeholder="请输入用户名"
placeholder="请输入手机号(用户名)"
rules={[
{ required: true }
{ required: true, valueType: Number, max: 11 }, { pattern: /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/, message: "请输入正确的手机号" }
]}
/>
</ProForm.Group>
<ProForm.Group>
<ProFormTreeSelect
@ -97,24 +97,38 @@ const UserModal = (props) => {
}}
expandedKeys={["title"]}
/>
< ProFormText
name={['contract', 'phone']}
{modalType == 'edit' ? null : <ProFormText.Password
name={['contract', 'password']}
width="md"
label="手机号"
label="密码"
required
placeholder="请输入密码"
fieldProps={{
maxLength: 11,
}}
getValueFromEvent={(event) => {
return event.target.value.replace(/\D/g, '')
autocomplete: 'new-password'
}}
placeholder="请输入手机号"
rules={[
{ required: true, valueType: Number, max: 11 }, { pattern: /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/, message: "请输入正确的手机号" }
{ required: true, message: '请填写密码' },
{ min: 6, message: '请填写至少6位密码' },
]}
/>
/>}
{/* <ProFormText
name={['contract', 'username']}
width="md"
label="职位"
fieldProps={{
maxLength: 30,
}}
getValueFromEvent={(event) => {
return event.target.value
}}
placeholder="请输入职位"
// rules={[
// { required: true }
// ]}
/> */}
</ProForm.Group>
<ProForm.Group>
<ProFormText
name={['contract', 'email']}
width="md"
@ -126,22 +140,6 @@ const UserModal = (props) => {
{ type: 'email', message: '请输入正确格式的邮箱' },
]}
/>
{modalType == 'edit' ? null : <ProFormText.Password
name={['contract', 'password']}
width="md"
label="密码"
required
placeholder="请输入密码"
fieldProps={{
autocomplete: 'new-password'
}}
rules={[
{ required: true, message: '请填写密码' },
{ min: 6, message: '请填写至少6位密码' },
]}
/>}
</ProForm.Group>
<ProForm.Group>
<ProFormSwitch
name={['contract', 'enable']}
width="md"
@ -158,7 +156,7 @@ const UserModal = (props) => {
function mapStateToProps(state) {
const { depMessage } = state;
console.log('depMessage:',depMessage);
console.log('depMessage:', depMessage);
const pakData = (dep) => {
// console.log(dep);
return dep.map((d) => {
@ -171,7 +169,6 @@ function mapStateToProps(state) {
})
}
let depData = pakData(depMessage.data || [])
return {
loading: depMessage.isRequesting,
depData,

16
web/client/src/sections/organization/containers/user.js

@ -21,6 +21,8 @@ const UserManage = (props) => {
const [depModalVisible, setDepModalVisible] = useState(false);
const [depModalType, setDepModalType] = useState();
const [depModalRecord, setDepModalRecord] = useState();
const [selectedTree, setSelectedTree] = useState();
useEffect(() => {
dispatch(getDepMessage())
@ -37,14 +39,11 @@ const UserManage = (props) => {
{
title: '姓名',
dataIndex: 'name',
}, {
title: '用户名',
dataIndex: 'username',
},
{
title: '手机号',
title: '手机号(用户名)',
dataIndex: 'phone',
},
},
{
title: '邮箱',
dataIndex: 'email',
@ -192,7 +191,7 @@ const UserManage = (props) => {
</Tooltip>
<div style={{ width: '30%' }} >
{
depSelectedKeys == id ? <>
selectedTree == id ? <>
<FormOutlined onClick={() => {
setDepModalRecord(item)
setDepModalVisible(true)
@ -216,7 +215,7 @@ const UserManage = (props) => {
<Button
type="primary"
key="primary"
style={{ marginLeft: 50 }}
style={{ marginLeft: 10 }}
onClick={() => openDepModal('create')}
>新建部门</Button>
{
@ -226,8 +225,8 @@ const UserManage = (props) => {
defaultExpandedKeys={[depMessage[0].id]}
selectedKeys={depSelectedKeys}
onSelect={(selectedKeys, e) => {
if (e.selected) {
setSelectedTree(selectedKeys)
setDepSelectedKeys(selectedKeys)
dispatch(getDepUser(selectedKeys[0]))
}
@ -259,6 +258,7 @@ const UserManage = (props) => {
<Col /* flex="auto" */ style={{ width: "calc(100% - 260px)", height: '100%', display: "black" }}>
<Card bordered={false} height={clientHeight} bodyStyle={{ padding: 8, paddingTop: 24, overflow: "hidden", width: "100%" }}>
<ProTable
columns={columns}
dataSource={depUser}

139
web/client/src/sections/quanju/containers/footer/build/AutoRollComponent.js

@ -0,0 +1,139 @@
import React, { Component } from 'react';
import { Row, Col } from 'antd';
export default class AutoRollComponent extends Component {
constructor(props) {
super(props);
this.scrollElem = null;
this.stopscroll = false;
this.preTop = 0;
this.cloneEle = null;
this.currentTop = 0;
this.marqueesHeight = 0;
this.interval = null;
this.state = {
enabledScroll: false
}
}
get enabledScroll() {
let scrollElem = document.getElementById(this.props.divId);
let fatherElem = scrollElem?.parentNode || null;
if (scrollElem && fatherElem) {
return scrollElem.scrollHeight > fatherElem.scrollHeight
}
return false;
}
marque = (height) => {
try {
this.scrollElem = document.getElementById(this.props.divId);
this.marqueesHeight = height;
if (this.scrollElem) {
this.scrollElem.style.height = this.marqueesHeight;
this.scrollElem.style.overflow = 'hidden';
}
this.repeat();
} catch (e) { console.log(e) }
}
repeat = () => {
this.scrollElem.scrollTop = 0;
let offset = 1.5
this.interval = setInterval(() => {
if (this.stopscroll) return;
this.currentTop = this.currentTop + offset;
this.preTop = this.scrollElem.scrollTop;
this.scrollElem.scrollTop = this.scrollElem.scrollTop + offset;
// console.log(`this.scrollElem.scrollTop:${this.scrollElem.scrollTop} === this.preTop:${this.preTop}`);
if (this.preTop === this.scrollElem.scrollTop) {
this.scrollElem.scrollTop = this.marqueesHeight;
this.scrollElem.scrollTop = this.scrollElem.scrollTop + offset;
}
}, 40);
}
componentWillUnmount() {
clearInterval(this.interval);
}
componentWillReceiveProps(nextProps) {
requestAnimationFrame(() => {
if (this.enabledScroll) {
if (!this.state.enabledScroll) {
this.setState({ enabledScroll: true }, () => {
this.marque(10)
})
}
}
})
}
componentDidMount() {
if (this.enabledScroll) {
this.setState({ enabledScroll: true }, () => {
this.marque(10)
})
}
}
onMouseOver = () => {
this.stopscroll = true;
}
onMouseOut = () => {
this.stopscroll = false;
}
render() {
const { changeStyleCol, heads, spans, data, divId, divHeight, content, containerStyle = {} } = this.props;
return (
<div style={{ ...containerStyle, textAlign: 'left' }}>
{
heads ?
<Row style={{ lineHeight: '40px', height: 40 }}>
{heads.map((c, index) => {
return <Col span={spans[index]} key={index}>{c}</Col>
})
}
</Row> : ''
}
<div id={divId} style={{ overflow: 'hidden', height: divHeight }} onMouseOver={this.onMouseOver} onMouseOut={this.onMouseOut}>
<div style={{height:"100%"}}>
{content ? content : ''}
{this.state.enabledScroll && content ? content : ''}
{
data ?
data.map((q, idx) => {
return (
<div key={idx}>
<Row gutter={16} style={{ borderBottom: '0px solid grey' }}>
{heads.map((c, index) => {
return <Col span={spans[index]} key={index} style={{ paddingTop: 8, textAlign: 'left', wordBreak: 'break-word', color: `${c === changeStyleCol ? q.changeColor : ''}` }}>
{index == 1 ? q.data[index] == -1 ? "-" : q.data[index] : index == 2 ? q.data[1] == -1 ? '-' : q.data[index] : q.data[index]}</Col>
})
}
</Row>
</div>
)
}) : ''
}
<div style={{ margin: 16 }}></div>
</div>
</div>
</div >
)
}
}

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

@ -133,11 +133,11 @@ function Leftbottom() {
seriesIndex: 0,
dataIndex: currentIndex
});
myChart.dispatchAction({
type: 'showTip',
seriesIndex: 0,
dataIndex: currentIndex,
});
// myChart.dispatchAction({
// type: 'showTip',
// seriesIndex: 0,
// dataIndex: currentIndex,
// });
}
const selectPie=() =>{ // 高亮效果切换到下一个图形
var dataLen = safetyOption.series[0].data.length;

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

@ -174,11 +174,11 @@ function Leftbottom() {
seriesIndex: 0,
dataIndex: currentIndex
});
myChart.dispatchAction({
type: 'showTip',
seriesIndex: 0,
dataIndex: currentIndex,
});
// myChart.dispatchAction({
// type: 'showTip',
// seriesIndex: 0,
// dataIndex: currentIndex,
// });
}
const selectPie=() =>{ // 高亮效果切换到下一个图形
var dataLen = safetyOption.series[0].data.length;

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

@ -1,7 +1,91 @@
import React from 'react'
import './style.less'
import AutoRollComponent from './AutoRollComponent'
export default function Rightcenter() {
const data =[ {name: '莲塘镇', total: 12739},
{name: '向塘镇', total: 2445},
{name: '蒋巷镇', total: 2035},
{name: '幽兰镇', total: 1999},
{name: '塘南镇', total: 1915},
{name: '武阳镇', total: 1842},
{name: '冈上镇', total: 1446},
{name: '广福镇', total: 1063},
{name: '三江镇', total: 851},
{name: '泾口乡', total: 657},
{name: '南新镇', total: 640},
{name: '八一乡', total: 569},
{name: '黄马乡', total: 541},
{name: '塔城乡', total: 534},
{name: '富山乡', total: 515},
{name: '东新乡', total: 513},
{name: '银三角', total: 513},
{name: '八月湖街道', total: 513},]
const province = undefined
const FIRST = "linear-gradient(360deg, rgba(43, 180, 211, 0.1) 0%, rgba(43, 180, 211, 0.4) 100%)"
const SECOND = "linear-gradient(360deg, rgba(255, 209, 86, 0.1) 0%, rgba(255, 209, 86, 0.4) 100%)"
const THIRD = "linear-gradient(360deg, rgba(148, 148, 255, 0.1) 0%, rgba(148, 148, 255, 0.4) 100%)"
const OTHER = "linear-gradient(360deg, rgba(28, 96, 253, 0) 0%, rgba(28, 96, 253, 0.2) 100%)"
let TOTALS = data?.map(({ name, total }, index) => {
let max = province ? data.length * 30 + 100 : data.length * 500 + 100
return {
name,
value: total,
percent: (total * 100 / max).toFixed(2) + "%"
}
})
let new_TOTALS = TOTALS && TOTALS.length > 10 ? TOTALS.slice(0, 10) : TOTALS
function Cell(props) {
const { name, rank, value, percent, style = {} } = props
let bg = RNAKS[rank] || OTHER
console.log(percent,'百分比')
return <div style={{
width: "100%", height: 34, display: "flex", justifyContent: 'center',
alignItems: "center", marginTop: 7, marginBottom: 7,
padding: "0 2%",
...style
}}>
<div style={{
height: 20, color: "white",whiteSpace:'nowrap',
fontSize: 10, fontWeight: "bold", display: 'flex',
alignItems: "center", justifyContent: "center"
}} >
{name}
</div>
<div style={{ width: "92%", marginLeft: 10 }}>
{/* <div style={{ width: "100%", height: 18, fontSize: 12, fontWeight: 400, color: "white" }}>{name}</div> */}
<div style={{ display: 'flex', justifyContent: "space-between", alignItems: "center", height: 13 }}>
<div style={{display:'flex', width:"85%"}}>
<div style={{
width: percent, height: 5,
background: "linear-gradient(270deg, #1C60FE 0%, rgba(28, 96, 254, 0) 100%)"
}} />
<div style={{width:`calc(100% - ${percent})`,background:'rgba(255,255,255,0.0800)'}}/>
</div>
<div style={{ marginLeft: 10, fontSize: 12,color:"#FFFFFF" }}>{value}</div>
</div>
</div>
</div>
}
const renderContent = () => {
return <div >
{new_TOTALS?.map(({ name, value, percent }, index) => {
return <Cell key={index} rank={index} name={name} value={value} percent={percent} />
})}
</div>
}
const RNAKS = [FIRST, SECOND, THIRD]
return (
<div className='build-right-center'>Rightcenter</div>
<div className='build-right-center'>
<div className='build-right-center-top'>
<img src="/assets/images/quanju/gonglugongcheng.png"></img>
<div>在线公路工程数量</div>
<h2>1234,123</h2>
</div>
<AutoRollComponent content={renderContent()}
containerStyle={{ position: "relative", height: "65%", }}
divHeight={"100%"} divId={"chart-overview-deviceList"} />
</div>
)
}

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

@ -3,7 +3,7 @@ import React from 'react'
// import LeftCenter from './Leftcenter'
import LeftBottom from './Leftbottom'
// import RightTop from './Righttop'
// import Rightcenter from './Rightcenter'
import Rightcenter from './Rightcenter'
// import Rightbottom from './Rightbottom'
import { Carousel } from 'antd'
import Module from '../../public/module'
@ -115,7 +115,9 @@ const Build = () => {
</Module>
<Module title={"各乡镇在建公路工程"} style={{ width: "100%",
height:" 33%",marginTop:'3%'
}}></Module>
}}>
<Rightcenter/>
</Module>
<Module title={"公路等级统计"} style={{ width: "100%",
height:" 30%",marginTop:'3%'
}}>

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

@ -166,7 +166,6 @@
width: 25%;
height: 100%;
.build-right-top{
width: 100%;
height: 100%;
padding: 0 10px 10px;
@ -188,16 +187,38 @@
line-height: 31px;
background-image: url('/assets/images/quanju/bgxuanchuanlan.png');
background-size: 100% 100%;
}
}
.build-right-center{
width: 100%;
height: 33%;
background-color: pink;
margin-bottom: 3%;
height: 100%;
// background-color: pink;
.build-right-center-top{
width: 100%;
height: 30%;
display: flex;
justify-content: space-around;
align-items: center;
img{
width:12% ;
height: 80%;
}
div{
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #C2EEFF;
line-height: 22px;
letter-spacing: 1px
}
h2{
font-size: 28px;
font-family: YouSheBiaoTiHei;
color: #FFFFFF;
margin-bottom : 0!important;
text-shadow: 0px 0px 4px #07B9FE;
}
}
}
.build-right-bottom{
width: 100%;

7
web/client/src/sections/quanju/containers/footer/conserve/index.js

@ -1,8 +1,13 @@
import React from 'react'
import Left from './left'
import Right from './right'
const Conserve = () => {
return (
<>养护</>
<div style={{ display: 'flex', width: '100%',height: '100%',justifyContent: 'space-between' }}>
<Left />
<Right />
</div>
)
}
export default Conserve

173
web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js

@ -1,14 +1,175 @@
import React from 'react'
import React, { useEffect, useRef } from 'react';
import Module from '../../../public/module'
import * as echarts from 'echarts';
const LeftTop = () => {
const seasonChartRef = useRef(null);
const frequentlyChartRef = useRef(null);
useEffect(() => {
let chartInstance = echarts.init(seasonChartRef.current);
const seasonOption = {
title: [
{
text: "季节性",
x: "center",
top: "55%",
textStyle: {
color: "#E9F7FF",
fontSize: 14,
},
},
{
text: "2333",
x: "center",
y: "35%",
textStyle: {
fontSize: "30",
color: "#FFFFFF",
fontFamily: "YouSheBiaoTiHei",
},
},
],
polar: {
radius: ["65%", "73%"],
center: ["50%", "50%"],
},
angleAxis: {
max: 100,
show: false,
},
radiusAxis: {
type: "category",
show: true,
axisLabel: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
},
series: [
{
name: "",
type: "bar",
roundCap: true,
barWidth: 30,
showBackground: true,
data: [40],
coordinateSystem: "polar",
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0,
color: "#AAC8FF",
},
{
offset: 1,
color: "#0041BB",
},
]),
},
},
},
],
};
chartInstance.setOption(seasonOption);
}, [])
useEffect(() => {
let chartInstance = echarts.init(frequentlyChartRef.current);
const frequentlyOption = {
title: [
{
text: "经常性",
x: "center",
top: "55%",
textStyle: {
color: "#E9F7FF",
fontSize: 14,
},
},
{
text: "2333",
x: "center",
y: "35%",
textStyle: {
fontSize: "30",
color: "#FFFFFF",
fontFamily: "YouSheBiaoTiHei",
},
},
],
polar: {
radius: ["65%", "73%"],
center: ["50%", "50%"],
},
angleAxis: {
max: 100,
show: false,
},
radiusAxis: {
type: "category",
show: true,
axisLabel: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
},
series: [
{
name: "",
type: "bar",
roundCap: true,
barWidth: 30,
showBackground: true,
backgroundStyle: {
color: "rgba(66, 66, 66, .3)",
},
data: [40],
coordinateSystem: "polar",
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0,
color: "#C5EFFF",
},
{
offset: 1,
color: "#07B9FE",
},
]),
},
},
},
],
};
chartInstance.setOption(frequentlyOption);
}, [])
const style = { height: "30%", marginTop: "5%" }
return (
<>
<Module style={style} title={"道路养护周期统计"}>
</Module>
</>
<>
<Module style={style} title={"道路养护周期统计"}>
<div style={{ width: '100%', display: 'flex' }}>
<div ref={seasonChartRef} style={{ height: "23vh", width: "45%" }}></div>
<div ref={frequentlyChartRef} style={{ height: "23vh", width: "45%" }}></div>
</div>
</Module>
</>
)
}
export default LeftTop

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

@ -1,8 +1,54 @@
import React from 'react'
import { Carousel } from 'antd'
import AutoRollComponent from '../build/AutoRollComponent'
import Module from '../../public/module'
import './style.less'
const Guanli = () => {
const datas = new Array(35)
const renderContent = () => {
datas.fill({
chepaihao:'苏LD1112121',
caoxian:'30%',
chufa:'200元',
riqi:'2022年5月4日'
},1,35)
console.log(datas,'数组')
return <div style={{height:"100%"}}>
{datas?.map(({ chepaihao, caoxian, chufa,riqi }, index) => {
return <div key={index} className='guanli-right-item'>
<span>{chepaihao}</span>
<span>{caoxian}</span>
<span>{chufa}</span>
<span>{riqi}</span>
</div>
})}
</div>
}
renderContent()
return (
<>管理</>
<div className='guanli'>
<div className='guanli-left'>
</div>
<div className='guanli-right'>
<Module style={{height:"100%"}} title="治超详情">
<div className = "guanli-right-top">
<img src="/assets/images/quanju/zhicaolog.png"></img>
<span>已处理</span>
<span>187</span>
<span></span>
</div>
<div className='guanli-right-title'>
<span>车牌号</span>
<span>超限</span>
<span>处罚</span>
<span>日期</span>
</div>
<AutoRollComponent content={renderContent()}
containerStyle={{ position: "relative", height: "90%", }}
divHeight={"100%"} divId={"chart-overview-deviceList"} />
</Module>
</div>
</div>
)
}
export default Guanli

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

@ -0,0 +1,249 @@
.guanli{
// box-sizing: border-box;
padding: 0 15px 0 15px;
width: 100%;
height: 100%;
display: flex;
justify-content: space-between;
.guanli-left{
width: 25%;
height: 100%;
background-color: pink;
.guanli-left-top{
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
.guanli-left-top-center{
width: 174px;
height: 146px;
margin: 0 10px;
}
.guanli-left-top-item{
width: 25%;
height: 50%;
background-image: url('/assets/images/quanju/zhuangtaigognlubiankuang.png');
background-size: 95%;
background-repeat: no-repeat;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
// text-align: center;
div{
&:nth-child(1){
display: flex;
justify-content: center;
align-items: center;
span{
&:nth-child(1){
width: 8px;
height: 8px;
margin-right: 5px;
background: #07B9FE;
clip-path: polygon(0 0, 100% 0, 0 100%, 0 0);
transform: rotate(134deg);
}
&:nth-child(2){
font-size: 16px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #E9F7FF;
line-height: 22px;
}
}
}
&:nth-child(2){
// width: 80%;
// height: 100%;
// margin: 1% auto 0;
font-size: 38px;
font-family: YouSheBiaoTiHei;
color: #FFFFFF;
text-align: center;
// line-height: 49px;
text-shadow: 0px 2px 4px #1C60FE;
}
}
}
}
.guanli-left-center{
width: 100%;
height: 100%;
.guanli-left-center-top{
width: 100%;
height: 30%;
display: flex;
justify-content: space-between;
div{
width: 50%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
img{
height: 50px;
width: 78px;
}
div{
display: flex;
flex-direction: column;
align-items: start;
justify-content: center;
margin-left: 10px;
span{
&:nth-child(1){
font-size: 12px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #C2EEFF;
letter-spacing: 1px;
}
&:nth-child(2){
font-size: 28px;
font-family: YouSheBiaoTiHei;
color: #FFFFFF;
line-height: 36px;
text-shadow: 0px 0px 4px #07B9FE;
}
}
}
}
// background-color: pink;
}
.guanli-left-center-titile{
display: flex;
margin-bottom: 10px;
span{
flex:1;
text-align: center;
font-size: 12px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
line-height: 16px;
}
}
.guanli-left-center-content{
width: 100%;
height: 100px!important;
.guanli-left-center-item{
display: flex !important;
width: 100%!important;
height: 28px!important;
span{
flex:1;
text-align: center;
font-size: 12px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
line-height: 16px;
}
}
.slick-list{
height: 128px !important;
}
}
}
.guanli-left-bottom{
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
}
.guanli-right{
width: 25%;
height: 100%;
.guanli-right-top{
width: 100%;
// height: 5%;
display: flex;
justify-content: flex-end;
align-items: center;
padding-right: 10px;
img{
width: 4%;
// height: 40%;
}
span{
&:nth-child(2){
font-size: 16px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(216,240,255,0.8000);
margin:0 10px 0 2px
}
&:nth-child(3){
font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
margin-right: 10px;
}
&:nth-child(4){
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(216,240,255,0.8000);
}
}
}
.guanli-right-title{
width: 90%;
height: 5%;
margin: auto;
display: flex;
align-items: center;
justify-content: space-around;
background: rgba(21,77,160,0.2000);
span{
font-size: 12px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
flex:1;
text-align: center;
// &:nth-child(1){
// }
}
}
.guanli-right-item{
width: 90%;
height: 3.333%;
margin: auto;
display: flex;
align-items: center;
justify-content: space-around;
// background: rgba(21,77,160,0.2000);
span{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(216,240,255,0.8000);
line-height: 20px;
flex:1;
text-align: center;
// &:nth-child(1){
// }
}
}
}
}

12
web/client/src/sections/quanju/containers/heand/index.js

@ -21,16 +21,16 @@ const Header = (props) => {
<div className={tabKey == "build" ? "tabKey-map" : "notabKey"} style={{ backgroundImage: "url(/assets/images/quanju/zuobeijing.png)", backgroundSize: "100% 100%" }} onClick={() => {
onClick("build")
}}><a>建设</a></div>
<div className={tabKey == "conserve" ? "tabKey-map" : "notabKey"} style={{ left: "11.5%", backgroundImage: "url(/assets/images/quanju/zuobeijing.png)", backgroundSize: "100% 100%" }} onClick={() => {
onClick("conserve")
}}><a>养护</a></div>
<div className={tabKey == "guanli" ? "tabKey-map" : "notabKey"} style={{ left: "11.5%", backgroundImage: "url(/assets/images/quanju/youbeijing.png)", backgroundSize: "100% 100%" }} onClick={() => {
onClick("guanli")
}}><a>管理</a></div>
<div className={tabKey == "leadership" ? "tabKey-map" : "notabKey"} style={{ left: "23%", backgroundImage: "url(/assets/images/quanju/zuobeijing.png)", backgroundSize: "100% 100%" }} onClick={() => {
onClick("leadership")
}}><a>领导驾驶舱</a></div>
<div className={tabKey == "leadership" ? "tabKey-map" : "notabKey"} style={{ left: "50%", transform: "translate(-50%, -50%)", width: "25%", minWidth: "420px", fontSize: "2.3vw", color: "#FFFFFF", fontFamily: "YouSheBiaoTiHei" }}>南昌县智慧交通监管系统</div>
<div className={tabKey == "guanli" ? "tabKey-map" : "notabKey"} style={{ left: "65%", backgroundImage: "url(/assets/images/quanju/youbeijing.png)", backgroundSize: "100% 100%" }} onClick={() => {
onClick("guanli")
}}><a>管理</a></div>
<div className={tabKey == "conserve" ? "tabKey-map" : "notabKey"} style={{ left: "65%", backgroundImage: "url(/assets/images/quanju/zuobeijing.png)", backgroundSize: "100% 100%" }} onClick={() => {
onClick("conserve")
}}><a>养护</a></div>
<div className={tabKey == "operation" ? "tabKey-map" : "notabKey"} style={{ left: "76%", backgroundImage: "url(/assets/images/quanju/youbeijing.png)", backgroundSize: "100% 100%" }} onClick={() => {
onClick("operation")
}}><a>运营</a></div>

Loading…
Cancel
Save