Browse Source

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

release_0.0.1
巴林闲侠 3 years ago
parent
commit
7f975b2f78
  1. 3
      weapp/src/packages/patrol/index.config.js
  2. 243
      weapp/src/packages/patrol/index.jsx
  3. 116
      weapp/src/packages/patrol/index.scss
  4. 2
      weapp/src/pages/auth/login/login.scss
  5. 6
      weapp/src/pages/home/index.scss
  6. 40
      weapp/src/pages/user/index.jsx
  7. 101
      weapp/src/pages/user/index.scss
  8. 0
      weapp/src/static/img/home/fill-bg.svg
  9. 23
      weapp/src/static/img/my/card-bg.svg
  10. BIN
      weapp/src/static/img/my/head.png
  11. 13
      weapp/src/static/img/my/more.svg
  12. 18
      weapp/src/static/img/my/pswd.svg
  13. 14
      weapp/src/static/img/my/report.svg
  14. 15
      weapp/src/static/img/patrol/arrow-down.svg
  15. 118
      web/client/assets/color.less
  16. BIN
      web/client/assets/images/leadership/di.png
  17. BIN
      web/client/assets/images/leadership/jiejue.png
  18. BIN
      web/client/assets/images/leadership/mingri.png
  19. BIN
      web/client/assets/images/leadership/pingshi.png
  20. BIN
      web/client/assets/images/leadership/road.png
  21. BIN
      web/client/assets/images/leadership/shiyantu.png
  22. BIN
      web/client/assets/images/leadership/zibiaoti.png
  23. 77
      web/client/src/sections/fillion/actions/infor.js
  24. 1824
      web/client/src/sections/fillion/components/bridgeTable.js
  25. 118
      web/client/src/sections/fillion/components/compileDrawer.js
  26. 124
      web/client/src/sections/fillion/components/configModal.js
  27. 56
      web/client/src/sections/fillion/components/enforceTable.js
  28. 59
      web/client/src/sections/fillion/components/highwaysTable.js
  29. 128
      web/client/src/sections/fillion/components/infor/details.js
  30. 116
      web/client/src/sections/fillion/components/inforTable.js
  31. 1627
      web/client/src/sections/fillion/components/operationalTable.js
  32. 5
      web/client/src/sections/fillion/components/promotionalTable.js
  33. 69
      web/client/src/sections/fillion/components/publicTable.js
  34. 1741
      web/client/src/sections/fillion/components/transportationTable.js
  35. 6
      web/client/src/sections/fillion/containers/bridge.js
  36. 2
      web/client/src/sections/fillion/containers/enforce.js
  37. 2
      web/client/src/sections/fillion/containers/highways.js
  38. 2
      web/client/src/sections/fillion/containers/infor.js
  39. 124
      web/client/src/sections/fillion/containers/infor/details.js
  40. 2
      web/client/src/sections/fillion/containers/maintenance.js
  41. 2
      web/client/src/sections/fillion/containers/operational.js
  42. 2
      web/client/src/sections/fillion/containers/patrol.js
  43. 2
      web/client/src/sections/fillion/containers/promotional.js
  44. 2
      web/client/src/sections/fillion/containers/public.js
  45. 2
      web/client/src/sections/fillion/containers/transportation.js
  46. 2
      web/client/src/sections/fillion/containers/videois.js
  47. 26
      web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js
  48. 200
      web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js
  49. 19
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/center-left-bottom.js
  50. 203
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/echarts/centerleftecharts.js
  51. 59
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/bottomlunbo.js
  52. 180
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/lunbo.js
  53. 6
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/style.less
  54. 57
      web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/toplunbo.js
  55. 4
      web/client/src/sections/quanju/containers/footer/leadership/left.js
  56. 144
      web/client/src/sections/quanju/containers/footer/leadership/left/echarts/leftbottomecharts.js
  57. 2
      web/client/src/sections/quanju/containers/footer/leadership/left/left-bottom.js
  58. 88
      web/client/src/sections/quanju/containers/footer/leadership/left/left-center.js
  59. 39
      web/client/src/sections/quanju/containers/footer/leadership/left/left-top.js
  60. 3
      web/client/src/sections/quanju/containers/footer/leadership/right/left.less
  61. 139
      web/client/src/sections/quanju/containers/footer/leadership/right/lunbo.js
  62. 74
      web/client/src/sections/quanju/containers/footer/leadership/right/right-bottom.js
  63. 25
      web/client/src/sections/quanju/containers/public/left.less
  64. 139
      web/client/src/sections/quanju/containers/public/lunbo.js
  65. 5
      web/client/src/sections/quanju/containers/public/module.js
  66. 2
      web/client/src/themes/light.json
  67. 19
      web/client/src/utils/webapi.js
  68. 65
      web/log/development.txt

3
weapp/src/packages/patrol/index.config.js

@ -0,0 +1,3 @@
export default {
navigationBarTitleText: '巡查养护'
}

243
weapp/src/packages/patrol/index.jsx

@ -1,9 +1,246 @@
import React from 'react'
import { View } from '@tarojs/components';
import React, { useState, useEffect } from 'react';
import Taro from '@tarojs/taro';
import {
View,
RadioGroup,
Radio,
Button,
Image,
Input,
Textarea,
Picker
} from '@tarojs/components';
import { AtForm, AtInput, AtButton, AtTextarea, AtImagePicker, AtTimeline } from 'taro-ui';
// import InputPicker from '../components/inputPicker';
import './index.scss';
import arrowIcon from '../../static/img/patrol/arrow-down.svg';
const Index = () => {
const [isPatrol, setIsPatrol] = useState(true) // or
const [prjTypeSelector, setPrjTypeSelector] = useState([])
const [roadSelector, setRoadSelector] = useState([])
const [projectType, setProjectType] = useState('')
const [road, setRoad] = useState('')
const [images, setimages] = useState([])
const reportType = [
{
value: '巡查',
text: '巡查',
checked: true
},
{
value: '养护',
text: '养护',
checked: false
}
]
useEffect(() => {
const prjTypeSelector = ['道路', '桥梁', '涵洞', '其他']
const roadSelector = ['富山一路', '金沙大道', '玉湖路']
setPrjTypeSelector(prjTypeSelector)
setRoadSelector(roadSelector)
}, [])
useEffect(() => {
if (projectType) {
setPrjTypeSelector(prjTypeSelector.filter(s => s.includes(projectType)))
}
}, [projectType])
// useEffect(() => {
// if (projectType) {
// setPrjTypeSelector(prjTypeSelector.filter(s => s.includes(projectType)))
// }
// }, [projectType])
function onTypeChange(e) {
if (e.detail.value === '巡查') {
setIsPatrol(true)
} else {
setIsPatrol(false)
}
}
function onPrjTypeChange(e) {
setProjectType(selector[e.detail.value])
}
function onImgPickerChange(files) {
setimages(files)
}
function onImageClick(index, file) {
Taro.previewImage({
urls: [file.url] // http
})
}
useEffect(() => {
console.log(images);
}, [images])
return (
<View>巡查养护</View>
<View className='patrol'>
<View className='report-type'>
<View className='text'>上报类型</View>
<RadioGroup onChange={onTypeChange}>
{
reportType.map((item, i) => {
return (
<Radio
key={i}
value={item.value}
checked={item.checked}
className='radio'
color='#346FC2'
>
{item.text}
</Radio>
)
})
}
</RadioGroup>
</View>
<View className='input-picker'>
<AtInput
className='input'
title='工程类型:'
type='text'
placeholder='请选择工程类型'
border={false}
value={projectType}
onChange={value => setProjectType(value)}
/>
<Picker mode='selector' range={prjTypeSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-r' />
</Picker>
</View>
<View className='input-picker'>
<AtInput
className='input'
title='所在道路:'
type='text'
placeholder='请选择您所在的道路'
border={false}
value={road}
onChange={value => setRoad(value)}
/>
<Picker mode='selector' range={roadSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-r' />
</Picker>
</View>
{/* <InputPicker
className='input-picker'
title='工程类型:'
placeholder='请选择工程类型'
value={projectType}
onChange={setProjectType}
selector={prjTypeSelector}
/>
<InputPicker
className='input-picker'
title='所在道路:'
placeholder='请选择您所在的道路'
value={road}
onChange={setRoad}
selector={roadSelector}
/> */}
<View className='input-picker'>
<AtInput
className='input'
title='所属路段:'
type='text'
placeholder='路段名称'
border={false}
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
<Picker mode='selector' range={roadSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-l' />
</Picker>
<AtInput
className='input'
type='text'
placeholder='路段名称'
border={false}
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
<Picker mode='selector' range={roadSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-r' />
</Picker>
</View>
<AtTextarea
count={false}
title='具体位置:'
placeholder='具体位置:根据定位自动获取,可手动修改'
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
<AtTextarea
count={false}
title='巡查内容:'
placeholder='请输入巡查内容'
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
{
isPatrol ?
<View className='patrol-picker'>
现场图片
<AtImagePicker
className='img-picker'
count={3 - images.length}
showAddBtn={images.length >= 3 ? false : true}
files={images}
onChange={onImgPickerChange}
onImageClick={onImageClick}
/>
</View> :
<View className='conserve-picker'>
养护图片:
<View className='horizontal-line hl-one'>
<View className='circle c-one'></View>
<View className='text t-one'>养护前</View>
</View>
<AtImagePicker
className='img-picker'
count={3}
files={images}
onChange={onImgPickerChange}
/>
<View className='horizontal-line hl-two'>
<View className='circle c-two'></View>
<View className='text t-two'>养护中</View>
</View>
<AtImagePicker
className='img-picker'
count={3}
files={images}
onChange={onImgPickerChange}
/>
<View className='horizontal-line hl-three'>
<View className='circle c-three'></View>
<View className='text t-three'>养护后</View>
</View>
<AtImagePicker
className='img-picker'
count={3}
files={images}
onChange={onImgPickerChange}
/>
</View>
}
<AtButton formType='submit' type='primary' className='sub-btn'>上报</AtButton>
</View>
)
}

116
weapp/src/packages/patrol/index.scss

@ -0,0 +1,116 @@
.patrol {
height: 100vh;
width: 100vw;
background-color: #f6f6f6;
padding-top: 20px;
.report-type {
height: 96px;
background-color: #fff;
margin-bottom: 20px;
display: flex;
justify-content: space-between;
align-items: center;
.text {
margin-left: 30px;
}
.radio {
margin-right: 30px;
}
}
.input-picker {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #fff;
margin-bottom: 5px;
.img-r {
width: 24px;
height: 14px;
margin-right: 30px;
// margin-left: 10px;
}
.img-l {
width: 24px;
height: 14px;
}
}
.patrol-picker {
background-color: #fff;
padding: 20px;
}
.conserve-picker {
background-color: #fff;
padding: 20px;
.horizontal-line {
height: 30px;
width: 100%;
display: flex;
justify-content: left;
align-items: center;
.circle {
margin-left: 4px;
width: 22px;
height: 22px;
background-color: #fff;
border-radius: 50%;
}
.text {
margin-left: 46px;
font-size: 24px;
}
}
.hl-one {
background-color: #DFDFDF;
.c-one {
border: solid 4px #999999;
}
.t-one {
color: #999999;
}
}
.hl-two {
background-color: #f7d3a5;
.c-two {
border: solid 4px #FE9B1C;
}
.t-two {
color: #FE9B1C;
}
}
.hl-three {
background-color: #a0f3a4;
.c-three {
border: solid 4px #08D514;
}
.t-three {
color: #08D514;
}
}
.img-picker {
margin: 20px;
}
}
.sub-btn {
width: 70%;
margin-top: 100px;
}
}

2
weapp/src/pages/auth/login/login.scss

@ -1,5 +1,3 @@
@import "~taro-ui/dist/style/components/divider.scss";
.page {
height: 100vh;
background: #fff;

6
weapp/src/pages/home/index.scss

@ -8,8 +8,8 @@
padding: 10px;
width: 94%;
height: 360px;
background: url('../../static/img/patrol//fill-bg.svg') no-repeat;
background-size:100% 100%;
background: url('../../static/img/home/fill-bg.svg') no-repeat;
background-size: 100% 100%;
}
.title {
@ -19,7 +19,7 @@
}
.btn {
margin: 20px 0 0 50px;
margin: 30px 0 0 50px;
color: #fff;
text-align: center;
width: 200px;

40
weapp/src/pages/user/index.jsx

@ -5,16 +5,20 @@ import { logout } from '@/actions/auth';
import { getLogoutUrl } from '@/services/api';
import cfg from '../../config';
import './index.scss';
import Common from '../../components/echartForWx/common';
import headImg from '../../static/img/my/head.png';
import moreImg from '../../static/img/my/more.svg';
import pswdImg from '../../static/img/my/pswd.svg';
import reportImg from '../../static/img/my/report.svg';
const { webUrl } = cfg;
const Index = ({ ...props }) => {
const userInfo = Taro.getStorageSync('userInfo') || {};
const goRedirect = () => {
}
const onLogout = () => {
logout(getLogoutUrl()).then(() => {
Taro.reLaunch({
@ -23,19 +27,33 @@ const Index = ({ ...props }) => {
});
}
console.log(userInfo)
return (
<View className='page'>
<View className='personal'>
<View className='info'>
<Image className='icon' src={webUrl + `/assets/avatar/${userInfo.avator}`} />
<View className='name'>{userInfo.displayName || '----'}</View>
<View className='myBox'>
<View className='my-top'>
<Image className='my-portrait' src={headImg} />
<View className='my-item'>
<View className='my-username'>{userInfo.displayName}</View>
<View className='my-phone'>{userInfo.phone}</View>
</View>
</View>
</View>
<View className='box' onClick={() => goRedirect(1)}>
<Image className='box-img' src={reportImg} />
<View className='box-txt'>我的填报</View>
<Image className='img' src={moreImg} />
</View>
<View className='logout'>
<Button className='btn' onClick={onLogout}>退出登录</Button>
<View className='box' onClick={() => goRedirect(2)} style={{ marginTop: '2rpx' }}>
<Image className='box-img' src={pswdImg} />
<View className='box-txt'>修改密码</View>
<Image className='img' src={moreImg} />
</View>
<View className='logout' onClick={onLogout}>退出登录</View>
</View>
);
}

101
weapp/src/pages/user/index.scss

@ -1,45 +1,92 @@
.page {
height: 100vh;
background: #F0F2F5;
box-sizing: border-box;
.personal {
padding: 20px;
.info {
border-radius: 10px;
background: #fff;
height: 30vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.icon {
width: 150px;
height: 150px;
border-radius: 50%;
.myBox {
width: 90%;
height: 300rpx;
margin: 30rpx auto;
background: url('../../static/img/my/card-bg.svg') no-repeat;
background-size: 100%;
border-radius: 8rpx;
.my-top {
overflow: hidden;
padding: 70rpx 0 28rpx 30rpx;
.my-portrait {
width: 120rpx;
height: 120rpx;
display: block;
float: left;
}
.my-item {
float: left;
margin-left: 32rpx;
width: 70%;
.my-username {
font-size: 32rpx;
color: #FFFFFF;
margin-bottom: 24rpx;
margin-top: 6rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.name {
font-size: 30px;
margin-top: 30px;
.my-phone {
font-size: 28rpx;
font-weight: bold;
color: #FFFFFF;
}
}
}
}
.box {
overflow: hidden;
background-color: #fff;
width: 100%;
height: 92rpx;
line-height: 92rpx;
.box-img {
width: 52rpx;
height: 52rpx;
display: block;
float: left;
padding: 20rpx 20rpx 20rpx 30rpx;
}
.logout {
box-sizing: border-box;
width: 100vw;
margin-top: 50px;
padding: 0 20px;
.box-txt {
float: left;
font-size: 28rpx;
color: #333333;
}
.btn {
background: #fff;
font-size: 28px;
padding: 8px 0;
.img {
width: 52rpx;
height: 52rpx;
display: block;
float: right;
padding: 20rpx 30rpx 20rpx 0;
}
}
.logout {
width: 550rpx;
height: 80rpx;
line-height: 80rpx;
background: #346FC2;
border-radius: 8rpx;
font-size: 28rpx;
color: #FFFFFF;
margin: 98rpx auto 0;
text-align: center;
}
}

0
weapp/src/static/img/patrol/fill-bg.svg → weapp/src/static/img/home/fill-bg.svg

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

23
weapp/src/static/img/my/card-bg.svg

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="345px" height="139px" viewBox="0 0 345 139" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>形状结合</title>
<defs>
<linearGradient x1="117.957428%" y1="37.3935291%" x2="29.6625906%" y2="56.1347143%" id="linearGradient-1">
<stop stop-color="#346FC2" offset="0%"></stop>
<stop stop-color="#50A9F3" offset="100%"></stop>
<stop stop-color="#50A9F3" offset="100%"></stop>
</linearGradient>
<rect id="path-2" x="0" y="0" width="345" height="139" rx="4"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_我的(第三方)" transform="translate(-14.000000, -80.000000)">
<g id="形状结合" transform="translate(14.000000, 80.000000)">
<mask id="mask-3" fill="white">
<use xlink:href="#path-2"></use>
</mask>
<use id="蒙版" fill="url(#linearGradient-1)" xlink:href="#path-2"></use>
<path d="M371,-8 L370.999465,139.158776 C298.893654,132.178406 243,82.6104154 243,22.5 C243,11.9503745 244.721619,1.72547358 247.950347,-8.00147208 L371,-8 Z" fill="#FFFFFF" opacity="0.0897274926" mask="url(#mask-3)"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
weapp/src/static/img/my/head.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

13
weapp/src/static/img/my/more.svg

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
<g id="首页_我的(第三方)" transform="translate(-334.000000, -245.000000)" stroke="#CDCDCD" stroke-width="1.65">
<g id="Input-/-Normal-/-文字输入框" transform="translate(0.000000, 235.000000)">
<g id="more" transform="translate(334.000000, 10.000000)">
<polyline id="路径" transform="translate(13.000000, 13.000000) rotate(-135.000000) translate(-13.000000, -13.000000) " points="17 17 9 17 9 9"></polyline>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 889 B

18
weapp/src/static/img/my/pswd.svg

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_我的(第三方)" transform="translate(-15.000000, -291.000000)" fill="#346FC2" fill-rule="nonzero">
<g id="Input-/-Normal-/-文字输入框" transform="translate(0.000000, 282.000000)">
<g id="icon_pl" transform="translate(15.000000, 9.000000)">
<g id="密码" transform="translate(4.000000, 3.000000)">
<path d="M15.4545454,9.09090908 L15.4545454,18.1818182 L1.81818182,18.1818182 L1.81818182,9.09090908 L15.4545454,9.09090908 M15.4545454,7.27272727 L1.81818182,7.27272727 C0.818181816,7.27272727 0,8.09090908 0,9.09090908 L0,18.1818182 C0,19.1818182 0.818181816,20 1.81818182,20 L15.4545454,20 C16.4545454,20 17.2727273,19.1818182 17.2727273,18.1818182 L17.2727273,9.09090908 C17.2727273,8.09090908 16.4545454,7.27272727 15.4545454,7.27272727 Z" id="形状"></path>
<path d="M8.4090909,1.81818182 C10.4090909,1.81818182 12.0454546,3.45454545 12.0454546,5.45454545 L12.0454546,7.27272727 L4.77272727,7.27272727 L4.77272727,5.45454545 C4.77272727,3.45454545 6.4090909,1.81818182 8.4090909,1.81818182 M8.4090909,0 C5.4090909,0 2.95454545,2.45454545 2.95454545,5.45454545 L2.95454545,9.09090908 L13.8636364,9.09090908 L13.8636364,5.45454545 C13.8636364,2.45454545 11.4090909,0 8.4090909,0 Z" id="形状"></path>
<path d="M6.81818182,12.2727273 C6.81818182,13.2768814 7.63220954,14.0909091 8.63636363,14.0909091 C9.64051772,14.0909091 10.4545454,13.2768814 10.4545454,12.2727273 C10.4545454,11.2685732 9.64051772,10.4545454 8.63636363,10.4545454 C7.63220954,10.4545454 6.81818182,11.2685732 6.81818182,12.2727273 Z" id="路径"></path>
<path d="M8.63636363,16.8181818 C8.13636363,16.8181818 7.72727271,16.4090909 7.72727271,15.9090909 L7.72727271,12.7272727 C7.72727271,12.2272727 8.13636363,11.8181818 8.63636363,11.8181818 C9.13636363,11.8181818 9.54545455,12.2272727 9.54545455,12.7272727 L9.54545455,15.9090909 C9.54545455,16.4090909 9.13636363,16.8181818 8.63636363,16.8181818 L8.63636363,16.8181818 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

14
weapp/src/static/img/my/report.svg

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_我的(第三方)" transform="translate(-15.000000, -245.000000)">
<g id="Input-/-Normal-/-文字输入框" transform="translate(0.000000, 235.000000)">
<g id="icon_pl" transform="translate(15.000000, 10.000000)">
<path d="M23.1,8.8 C23.7075132,8.8 24.2,9.29248678 24.2,9.9 L24.2,13.2 C24.2,13.8075132 23.7075132,14.3 23.1,14.3 L21.1669048,14.3 L21.1669048,8.8 L23.1,8.8 Z M20.0669048,14.3 L9.71859043,14.3 C9.41986798,14.3 9.13399178,14.1785088 8.92666511,13.9634489 L6.6,11.55 L8.92666511,9.13655106 C9.13399178,8.92149118 9.41986798,8.8 9.71859043,8.8 L20.0669048,8.8 L20.0669048,14.3 Z" id="形状结合" fill="#346FC2" transform="translate(15.400000, 11.550000) rotate(-45.000000) translate(-15.400000, -11.550000) "></path>
<path d="M20.7625,13.5179688 L20.7625,20.075 C20.7625,21.1381481 19.9006481,22 18.8375,22 L6.325,22 C5.26185186,22 4.4,21.1381481 4.4,20.075 L4.4,8.525 C4.4,7.46185186 5.26185186,6.6 6.325,6.6 L13.784375,6.6" id="路径" stroke="#346FC2" stroke-width="1.65" stroke-linecap="round"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

15
weapp/src/static/img/patrol/arrow-down.svg

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="12px" height="7px" viewBox="0 0 12 7" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>chevron-down</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.65">
<g id="首页_巡查养护-填写(第三方)" transform="translate(-349.000000, -164.000000)" fill="#000000" fill-rule="nonzero">
<g id="编组-5" transform="translate(0.000000, 80.000000)">
<g id="卡片-/-通栏" transform="translate(0.000000, 63.000000)">
<g id="chevron-down" transform="translate(349.000000, 21.000000)">
<path d="M1.46323438,0.256281566 C1.12849928,-0.0854271888 0.585786438,-0.0854271888 0.25105133,0.256281566 C-0.0836837768,0.597990322 -0.0836837768,1.15200968 0.25105133,1.49371843 L5.39390847,6.74371843 C5.72864358,7.08542719 6.27135642,7.08542719 6.60609153,6.74371843 L11.7489487,1.49371843 C12.0836838,1.15200968 12.0836838,0.597990322 11.7489487,0.256281566 C11.4142136,-0.0854271888 10.8715007,-0.0854271888 10.5367656,0.256281566 L6,4.88756313 L1.46323438,0.256281566 Z" id="Shape"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

118
web/client/assets/color.less

@ -174,7 +174,7 @@ button::-moz-focus-inner,
[type='submit']::-moz-focus-inner {border-style: none;}
fieldset {border: 0;}
legend {color: inherit;}
mark {background-color: color(~`colorPalette("@{table-fixed-header-sort-active-bg}", 1)`);}
mark {background-color: #feffe6;}
::selection {color: #fff;background: @primary-color;}
.anticon {color: inherit;}
.ant-fade-enter, .ant-fade-appear {animation-fill-mode: both;}
@ -555,18 +555,6 @@ html {--antd-wave-shadow-color: @primary-color;}
.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled], .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active {color: @disabled-color;border-color: @border-color-base;background: @disabled-bg;box-shadow: none;}
.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {color: currentcolor;}
.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {background: transparent;}
a.ant-btn-disabled,
a.ant-btn-disabled:hover,
a.ant-btn-disabled:focus,
a.ant-btn-disabled:active {color: @disabled-color;border-color: transparent;background: transparent;box-shadow: none;}
a.ant-btn-disabled > a:only-child,
a.ant-btn-disabled:hover > a:only-child,
a.ant-btn-disabled:focus > a:only-child,
a.ant-btn-disabled:active > a:only-child {color: currentcolor;}
a.ant-btn-disabled > a:only-child::after,
a.ant-btn-disabled:hover > a:only-child::after,
a.ant-btn-disabled:focus > a:only-child::after,
a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child), .ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary {border-right-color: color(~`colorPalette("@{primary-color}", 5)`);border-left-color: @border-color-base;}
.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled], .ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {border-right-color: @border-color-base;border-left-color: color(~`colorPalette("@{primary-color}", 5)`);}
.ant-picker-calendar {color: @text-color;background: @calendar-full-bg;}
@ -601,6 +589,7 @@ a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-card-type-inner .ant-card-head {background: @background-color-light;}
.ant-card-meta-title {color: @heading-color;}
.ant-card-meta-description {color: @text-color-secondary;}
.ant-card-loading-block {background: linear-gradient(90deg, fade(@card-skeleton-bg, 20%), fade(@card-skeleton-bg, 40%), fade(@card-skeleton-bg, 20%));background-size: 600% 600%;border-radius: 2px;}
.ant-carousel {color: @text-color;}
.ant-carousel .slick-slider {-webkit-tap-highlight-color: transparent;}
.ant-carousel .slick-prev, .ant-carousel .slick-next {color: transparent;background: transparent;border: 0;}
@ -674,10 +663,8 @@ a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-comment-actions > li > span:hover {color: @comment-action-hover-color;}
.ant-picker-status-error.ant-picker, .ant-picker-status-error.ant-picker:not([disabled]):hover {background-color: @input-bg;border-color: #ff4d4f;}
.ant-picker-status-error.ant-picker-focused, .ant-picker-status-error.ant-picker:focus {border-color: #ff7875;box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);border-right-width: 1px;}
.ant-picker-status-error.ant-picker .ant-picker-active-bar {background: #ff7875;}
.ant-picker-status-warning.ant-picker, .ant-picker-status-warning.ant-picker:not([disabled]):hover {background-color: @input-bg;border-color: #faad14;}
.ant-picker-status-warning.ant-picker-focused, .ant-picker-status-warning.ant-picker:focus {border-color: #ffc53d;box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);border-right-width: 1px;}
.ant-picker-status-warning.ant-picker .ant-picker-active-bar {background: #ffc53d;}
.ant-picker {color: @text-color;background: @picker-bg;border: 1px solid @border-color-base;border-radius: 2px;}
.ant-picker:hover, .ant-picker-focused {border-color: color(~`colorPalette("@{primary-color}", 5)`);border-right-width: 1px;}
.ant-input-rtl .ant-picker:hover, .ant-input-rtl .ant-picker-focused {border-right-width: 0;border-left-width: 1px !important;}
@ -708,7 +695,7 @@ a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-picker-range .ant-picker-active-bar {background: @primary-color;}
.ant-picker-dropdown {color: @text-color;}
.ant-picker-ranges .ant-picker-preset > .ant-tag-blue {color: @primary-color;background: color(~`colorPalette("@{primary-color}", 1)`);border-color: color(~`colorPalette("@{primary-color}", 3)`);}
.ant-picker-range-arrow {box-shadow: 2px 2px 6px -2px rgba(0, 0, 0, 0.1);border-radius: 0 0 2px;}
.ant-picker-range-arrow {background: linear-gradient(135deg, transparent 40%, @calendar-bg 40%);box-shadow: 2px 2px 6px -2px rgba(0, 0, 0, 0.1);border-radius: 0 0 2px;}
.ant-picker-range-arrow::before {background: @calendar-bg;background-repeat: no-repeat;background-position: -10px -10px;}
.ant-picker-panel-container {background: @calendar-bg;border-radius: 2px;box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);}
.ant-picker-panel-container .ant-picker-panel {background: transparent;border-width: 0 0 1px 0;border-radius: 0;}
@ -814,7 +801,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-dropdown-menu-item.ant-dropdown-menu-item-danger {color: #ff4d4f;}
.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover {color: #fff;background-color: #ff4d4f;}
.ant-dropdown {color: @text-color;}
.ant-dropdown-arrow {border-radius: 0 0 2px;}
.ant-dropdown-arrow {background: linear-gradient(135deg, transparent 40%, @popover-bg 40%);border-radius: 0 0 2px;}
.ant-dropdown-arrow::before {background: @popover-bg;background-repeat: no-repeat;background-position: -10px -10px;}
.ant-dropdown-placement-top > .ant-dropdown-arrow, .ant-dropdown-placement-topLeft > .ant-dropdown-arrow, .ant-dropdown-placement-topRight > .ant-dropdown-arrow {box-shadow: 3px 3px 7px -3px rgba(0, 0, 0, 0.1);}
.ant-dropdown-placement-bottom > .ant-dropdown-arrow, .ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow, .ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {box-shadow: 2px 2px 5px -2px rgba(0, 0, 0, 0.1);}
@ -949,7 +936,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 2px 0 0 2px;}
.ant-input-group > .ant-input-rtl:first-child, .ant-input-group-rtl .ant-input-group-addon:first-child {border-radius: 0 2px 2px 0;}
.ant-input-group-rtl .ant-input-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;}
.ant-input-group-rtl .ant-input-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-group-rtl .ant-input-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;}
.ant-input-group-rtl.ant-input-group > .ant-input:last-child, .ant-input-group-rtl.ant-input-group-addon:last-child {border-radius: 2px 0 0 2px;}
.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child) {border-radius: 2px 0 0 2px;}
.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child) {border-radius: 0 2px 2px 0;}
@ -957,10 +944,6 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:first-child, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:last-child, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {border-left-width: 1px;border-radius: 2px 0 0 2px;}
.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-group > .ant-input-rtl:first-child {border-radius: 0 2px 2px 0;}
.ant-input-group > .ant-input-rtl:last-child {border-radius: 2px 0 0 2px;}
.ant-input-group-rtl .ant-input-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;border-radius: 0 2px 2px 0;}
.ant-input-group-rtl .ant-input-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-password-icon.anticon {color: @text-color-secondary;}
.ant-input-password-icon.anticon:hover {color: @input-icon-hover-color;}
.ant-input-textarea-show-count::after {color: @text-color-secondary;}
@ -1046,7 +1029,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 2px 0 0 2px;}
.ant-input-number-group > .ant-input-number-rtl:first-child, .ant-input-number-group-rtl .ant-input-number-group-addon:first-child {border-radius: 0 2px 2px 0;}
.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;}
.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;}
.ant-input-number-group-rtl.ant-input-number-group > .ant-input-number:last-child, .ant-input-number-group-rtl.ant-input-number-group-addon:last-child {border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child) {border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {border-radius: 0 2px 2px 0;}
@ -1054,10 +1037,6 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:first-child, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:first-child > .ant-select-selector, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:first-child .ant-input, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:first-child .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:last-child, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:last-child > .ant-select-selector, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:last-child .ant-input, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:last-child .ant-input, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker-focused:last-child .ant-input {border-left-width: 1px;border-radius: 2px 0 0 2px;}
.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-number-group > .ant-input-number-rtl:first-child {border-radius: 0 2px 2px 0;}
.ant-input-number-group > .ant-input-number-rtl:last-child {border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;border-radius: 0 2px 2px 0;}
.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-number-handler {color: @text-color-secondary;border-left: 1px solid @border-color-base;}
.ant-input-number-handler:active {background: @input-number-handler-active-bg;}
.ant-input-number-handler:hover .ant-input-number-handler-up-inner, .ant-input-number-handler:hover .ant-input-number-handler-down-inner {color: color(~`colorPalette("@{primary-color}", 5)`);}
@ -1149,10 +1128,10 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-mentions-dropdown-menu-item-active {background-color: @item-hover-bg;}
.ant-menu-item-danger.ant-menu-item {color: #ff4d4f;}
.ant-menu-item-danger.ant-menu-item:hover, .ant-menu-item-danger.ant-menu-item-active {color: #ff4d4f;}
.ant-menu-item-danger.ant-menu-item:active {background: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);}
.ant-menu-item-danger.ant-menu-item:active {background: color(~`colorPalette("@{menu-popup-bg}", 2)`);}
.ant-menu-item-danger.ant-menu-item-selected {color: #ff4d4f;}
.ant-menu-item-danger.ant-menu-item-selected > a, .ant-menu-item-danger.ant-menu-item-selected > a:hover {color: #ff4d4f;}
.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {background-color: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);}
.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {background-color: color(~`colorPalette("@{menu-popup-bg}", 2)`);}
.ant-menu-inline .ant-menu-item-danger.ant-menu-item::after {border-right-color: #ff4d4f;}
.ant-menu-dark .ant-menu-item-danger.ant-menu-item, .ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover, .ant-menu-dark .ant-menu-item-danger.ant-menu-item > a {color: #ff4d4f;}
.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {color: #fff;background-color: #ff4d4f;}
@ -1313,8 +1292,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-pagination-simple .ant-pagination-simple-pager input:hover {border-color: @primary-color;}
.ant-pagination-simple .ant-pagination-simple-pager input:focus {border-color: color(~`colorPalette("@{primary-color}", 5)`);box-shadow: 0 0 0 2px fade(@primary-color, 20%);}
.ant-pagination-simple .ant-pagination-simple-pager input[disabled] {color: @disabled-color;background: @disabled-bg;border-color: @border-color-base;}
.ant-pagination.ant-pagination-mini .ant-pagination-item:not(.ant-pagination-item-active) {background: transparent;border-color: transparent;}
.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link, .ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link {background: transparent;border-color: transparent;}
.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active) {background: transparent;border-color: transparent;}
.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link, .ant-pagination.mini .ant-pagination-next .ant-pagination-item-link {background: transparent;border-color: transparent;}
.ant-pagination.ant-pagination-disabled .ant-pagination-item {background: @disabled-bg;border-color: @border-color-base;}
.ant-pagination.ant-pagination-disabled .ant-pagination-item a {color: @disabled-color;background: transparent;border: none;}
.ant-pagination.ant-pagination-disabled .ant-pagination-item-active {background: @pagination-item-disabled-bg-active;}
@ -1330,8 +1309,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-popover-message {color: @text-color;}
.ant-popover-message > .anticon {color: #faad14;}
.ant-popover-arrow {background: transparent;}
.ant-popover-arrow-content {--antd-arrow-background-color: @popover-bg;border-radius: 0 0 2px;}
.ant-popover-arrow-content::before {background: var(--antd-arrow-background-color);background-repeat: no-repeat;background-position: -10px -10px;}
.ant-popover-arrow-content {background-color: @popover-bg;border-radius: 0 0 2px;}
.ant-popover-arrow-content::before {background: @popover-bg;background-repeat: no-repeat;background-position: -10px -10px;}
.ant-popover-placement-top .ant-popover-arrow-content, .ant-popover-placement-topLeft .ant-popover-arrow-content, .ant-popover-placement-topRight .ant-popover-arrow-content {box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);}
.ant-popover-placement-right .ant-popover-arrow-content, .ant-popover-placement-rightTop .ant-popover-arrow-content, .ant-popover-placement-rightBottom .ant-popover-arrow-content {box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);}
.ant-popover-placement-bottom .ant-popover-arrow-content, .ant-popover-placement-bottomLeft .ant-popover-arrow-content, .ant-popover-placement-bottomRight .ant-popover-arrow-content {box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.06);}
@ -1387,13 +1366,12 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-radio-wrapper {color: @text-color;}
.ant-radio {color: @text-color;}
.ant-radio-wrapper:hover .ant-radio, .ant-radio:hover .ant-radio-inner, .ant-radio-input:focus + .ant-radio-inner {border-color: @primary-color;}
.ant-radio-input:focus + .ant-radio-inner {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-input:focus + .ant-radio-inner {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-checked::after {border: 1px solid @primary-color;border-radius: 50%;animation-fill-mode: both;}
.ant-radio-inner {background-color: @btn-default-bg;border-color: @border-color-base;border-style: solid;border-width: 1px;border-radius: 50%;}
.ant-radio-inner::after {background-color: @primary-color;border-top: 0;border-left: 0;border-radius: 16px;}
.ant-radio.ant-radio-disabled .ant-radio-inner {border-color: @border-color-base;}
.ant-radio-checked .ant-radio-inner {border-color: @primary-color;}
.ant-radio-disabled .ant-radio-inner {background-color: @disabled-bg;}
.ant-radio-disabled .ant-radio-inner {background-color: @disabled-bg;border-color: @border-color-base !important;}
.ant-radio-disabled .ant-radio-inner::after {background-color: @radio-dot-disabled-color;}
.ant-radio-disabled + span {color: @disabled-color;}
.ant-radio-button-wrapper {color: @text-color;background: @btn-default-bg;border: 1px solid @border-color-base;border-top-width: 1.02px;border-left-width: 0;}
@ -1403,7 +1381,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-radio-button-wrapper:last-child {border-radius: 0 2px 2px 0;}
.ant-radio-button-wrapper:first-child:last-child {border-radius: 2px;}
.ant-radio-button-wrapper:hover {color: @primary-color;}
.ant-radio-button-wrapper:focus-within {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-button-wrapper:focus-within {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {color: @primary-color;background: @btn-default-bg;border-color: @primary-color;}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {background-color: @primary-color;}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child {border-color: @primary-color;}
@ -1411,11 +1389,11 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before {background-color: color(~`colorPalette("@{primary-color}", 5)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {color: color(~`colorPalette("@{primary-color}", 7)`);border-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active::before {background-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {color: @radio-solid-checked-color;background: @primary-color;border-color: @primary-color;}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {color: @radio-solid-checked-color;background: color(~`colorPalette("@{primary-color}", 5)`);border-color: color(~`colorPalette("@{primary-color}", 5)`);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {color: @radio-solid-checked-color;background: color(~`colorPalette("@{primary-color}", 7)`);border-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-button-wrapper-disabled {color: @disabled-color;background-color: @disabled-bg;border-color: @border-color-base;}
.ant-radio-button-wrapper-disabled:first-child, .ant-radio-button-wrapper-disabled:hover {color: @disabled-color;background-color: @disabled-bg;border-color: @border-color-base;}
.ant-radio-button-wrapper-disabled:first-child {border-left-color: @border-color-base;}
@ -1482,11 +1460,14 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle {border-radius: 50%;}
.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {border-radius: 50%;}
.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {border-radius: 50%;}
.ant-skeleton-content .ant-skeleton-title {background: @skeleton-color;border-radius: 2px;}
.ant-skeleton-content .ant-skeleton-paragraph > li {background: @skeleton-color;border-radius: 2px;}
.ant-skeleton-content .ant-skeleton-title {background: @skeleton-color;border-radius: 4px;}
.ant-skeleton-content .ant-skeleton-paragraph > li {background: @skeleton-color;border-radius: 4px;}
.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title, .ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph > li {border-radius: 100px;}
.ant-skeleton-active .ant-skeleton-title, .ant-skeleton-active .ant-skeleton-paragraph > li, .ant-skeleton-active .ant-skeleton-avatar, .ant-skeleton-active .ant-skeleton-button, .ant-skeleton-active .ant-skeleton-input, .ant-skeleton-active .ant-skeleton-image {background: transparent;}
.ant-skeleton-active .ant-skeleton-title::after, .ant-skeleton-active .ant-skeleton-paragraph > li::after, .ant-skeleton-active .ant-skeleton-avatar::after, .ant-skeleton-active .ant-skeleton-button::after, .ant-skeleton-active .ant-skeleton-input::after, .ant-skeleton-active .ant-skeleton-image::after {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);}
.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title, .ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-button {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-input {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-image {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton-element .ant-skeleton-button {background: @skeleton-color;border-radius: 2px;}
.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle {border-radius: 50%;}
.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round {border-radius: 32px;}
@ -1603,7 +1584,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-expanded-row > td, .ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-placeholder > td {border-right: 0;}
.ant-table.ant-table-bordered > .ant-table-footer {border: 1px solid @border-color-split;border-top: 0;}
.ant-table-cell .ant-table-container:first-child {border-top: 0;}
.ant-table-cell-scrollbar:not([rowspan]) {box-shadow: 0 1px 0 1px @table-header-bg;}
.ant-table-cell-scrollbar {box-shadow: 0 1px 0 1px @table-header-bg;}
.ant-table {color: @text-color;background: @component-background;border-radius: 2px;}
.ant-table table {border-radius: 2px 2px 0 0;border-collapse: separate;border-spacing: 0;}
.ant-table-footer {color: @heading-color;background: @background-color-light;}
@ -1654,10 +1635,10 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-table-empty .ant-table-tbody > tr.ant-table-placeholder {color: @disabled-color;}
.ant-table-tbody > tr.ant-table-placeholder:hover > td {background: @component-background;}
.ant-table-cell-fix-left, .ant-table-cell-fix-right {background: @component-background;}
.ant-table-ping-left:not(.ant-table-has-fix-left) > .ant-table-container::before {box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container::before {box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-left .ant-table-cell-fix-left-first::after, .ant-table-ping-left .ant-table-cell-fix-left-last::after {box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-left .ant-table-cell-fix-left-last::before {background-color: transparent !important;}
.ant-table-ping-right:not(.ant-table-has-fix-right) > .ant-table-container::after {box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container::after {box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-right .ant-table-cell-fix-right-first::after, .ant-table-ping-right .ant-table-cell-fix-right-last::after {box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-sticky-holder {background: @component-background;}
.ant-table-sticky-scroll {background: lighten(@table-border-color, 80%);border-top: 1px solid @border-color-split;}
@ -1666,7 +1647,6 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-table-sticky-scroll-bar-active {background-color: fade(@table-sticky-scroll-bar-bg, 80%);}
.ant-table-title {border-radius: 2px 2px 0 0;}
.ant-table-title + .ant-table-container {border-top-left-radius: 0;border-top-right-radius: 0;}
.ant-table-title + .ant-table-container table {border-radius: 0;}
.ant-table-title + .ant-table-container table > thead > tr:first-child th:first-child {border-radius: 0;}
.ant-table-title + .ant-table-container table > thead > tr:first-child th:last-child {border-radius: 0;}
.ant-table-container {border-top-left-radius: 2px;border-top-right-radius: 2px;}
@ -1722,31 +1702,43 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-tag-checkable:active, .ant-tag-checkable-checked {color: #fff;}
.ant-tag-checkable-checked {background-color: @primary-color;}
.ant-tag-checkable:active {background-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{alert-info-bg-color}", 1)`);border-color: #ffadd2;}
<<<<<<< HEAD
.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{modal-footer-border-color-split}", 1)`);border-color: #ffadd2;}
.ant-tag-pink-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.ant-tag-magenta {color: #c41d7f;background: color(~`colorPalette("@{alert-info-bg-color}", 1)`);border-color: #ffadd2;}
.ant-tag-magenta {color: #c41d7f;background: color(~`colorPalette("@{modal-footer-border-color-split}", 1)`);border-color: #ffadd2;}
=======
.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{timeline-color}", 4)`);border-color: #ffadd2;}
.ant-tag-pink-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.ant-tag-magenta {color: #c41d7f;background: color(~`colorPalette("@{timeline-color}", 4)`);border-color: #ffadd2;}
>>>>>>> 65cf2722eec21e1d07ce958f4298eec7ae620c85
.ant-tag-magenta-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.ant-tag-red {color: #cf1322;background: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);border-color: #ffa39e;}
.ant-tag-red {color: #cf1322;background: color(~`colorPalette("@{menu-popup-bg}", 2)`);border-color: #ffa39e;}
.ant-tag-red-inverse {color: #fff;background: #f5222d;border-color: #f5222d;}
.ant-tag-volcano {color: #d4380d;background: #fff2e8;border-color: #ffbb96;}
.ant-tag-volcano-inverse {color: #fff;background: #fa541c;border-color: #fa541c;}
.ant-tag-orange {color: #d46b08;background: #fff7e6;border-color: #ffd591;}
.ant-tag-orange-inverse {color: #fff;background: #fa8c16;border-color: #fa8c16;}
.ant-tag-yellow {color: #d4b106;background: color(~`colorPalette("@{table-fixed-header-sort-active-bg}", 1)`);border-color: #fffb8f;}
.ant-tag-yellow {color: #d4b106;background: #feffe6;border-color: #fffb8f;}
.ant-tag-yellow-inverse {color: #fff;background: #fadb14;border-color: #fadb14;}
.ant-tag-gold {color: #d48806;background: #fffbe6;border-color: #ffe58f;}
.ant-tag-gold {color: #d48806;background: color(~`colorPalette("@{skeleton-color}", 1)`);border-color: #ffe58f;}
.ant-tag-gold-inverse {color: #fff;background: #faad14;border-color: #faad14;}
.ant-tag-cyan {color: #08979c;background: color(~`colorPalette("@{avatar-bg}", 1)`);border-color: #87e8de;}
.ant-tag-cyan {color: #08979c;background: #e6fffb;border-color: #87e8de;}
.ant-tag-cyan-inverse {color: #fff;background: #13c2c2;border-color: #13c2c2;}
.ant-tag-lime {color: #7cb305;background: #fcffe6;border-color: #eaff8f;}
.ant-tag-lime-inverse {color: #fff;background: #a0d911;border-color: #a0d911;}
.ant-tag-green {color: #389e0d;background: #f6ffed;border-color: #b7eb8f;}
.ant-tag-green-inverse {color: #fff;background: #52c41a;border-color: #52c41a;}
.ant-tag-blue {color: #096dd9;background: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);border-color: #91d5ff;}
.ant-tag-blue {color: #096dd9;background: color(~`colorPalette("@{progress-steps-item-bg}", 1)`);border-color: #91d5ff;}
.ant-tag-blue-inverse {color: #fff;background: #1890ff;border-color: #1890ff;}
.ant-tag-geekblue {color: #1d39c4;background: color(~`colorPalette("@{descriptions-bg}", 2)`);border-color: #adc6ff;}
<<<<<<< HEAD
.ant-tag-geekblue {color: #1d39c4;background: color(~`colorPalette("@{success-color-deprecated-border}", 1)`);border-color: #adc6ff;}
.ant-tag-geekblue-inverse {color: #fff;background: #2f54eb;border-color: #2f54eb;}
.ant-tag-purple {color: #531dab;background: color(~`colorPalette("@{progress-steps-item-bg}", 3)`);border-color: #d3adf7;}
=======
.ant-tag-geekblue {color: #1d39c4;background: color(~`colorPalette("@{popover-background}", 3)`);border-color: #adc6ff;}
.ant-tag-geekblue-inverse {color: #fff;background: #2f54eb;border-color: #2f54eb;}
.ant-tag-purple {color: #531dab;background: color(~`colorPalette("@{calendar-bg}", 1)`);border-color: #d3adf7;}
.ant-tag-purple {color: #531dab;background: #f9f0ff;border-color: #d3adf7;}
>>>>>>> 65cf2722eec21e1d07ce958f4298eec7ae620c85
.ant-tag-purple-inverse {color: #fff;background: #722ed1;border-color: #722ed1;}
.ant-tag-success {color: #52c41a;background: @success-color-deprecated-bg;border-color: @success-color-deprecated-border;}
.ant-tag-processing {color: @primary-color;background: @info-color-deprecated-bg;border-color: @info-color-deprecated-border;}
@ -1769,7 +1761,7 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-tooltip {color: @text-color;}
.ant-tooltip-inner {color: #fff;background-color: @tooltip-bg;border-radius: 2px;box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);}
.ant-tooltip-arrow {background: transparent;}
.ant-tooltip-arrow-content {--antd-arrow-background-color: linear-gradient(to right bottom, fadeout(@tooltip-bg, 10%), @tooltip-bg);border-radius: 0 0 2px;}
.ant-tooltip-arrow-content {--antd-arrow-background-color: linear-gradient(to right bottom, fadeout(@tooltip-bg, 10%), @tooltip-bg);background-color: transparent;border-radius: 0 0 2px;}
.ant-tooltip-arrow-content::before {background: var(--antd-arrow-background-color);background-repeat: no-repeat;background-position: -10px -10px;}
.ant-tooltip-placement-top .ant-tooltip-arrow-content, .ant-tooltip-placement-topLeft .ant-tooltip-arrow-content, .ant-tooltip-placement-topRight .ant-tooltip-arrow-content {box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);}
.ant-tooltip-placement-right .ant-tooltip-arrow-content, .ant-tooltip-placement-rightTop .ant-tooltip-arrow-content, .ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content {box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07);}
@ -1959,7 +1951,6 @@ a.ant-typography.ant-typography-disabled:hover, .ant-typography a.ant-typography
.ant-typography pre code {background: transparent;border: 0;}
.ant-typography blockquote {border-left: 4px solid rgba(100, 100, 100, 0.2);}
.ant-upload {color: @text-color;}
.ant-upload.ant-upload-disabled {color: @disabled-color;}
.ant-upload.ant-upload-select-picture-card {background-color: @background-color-light;border: 1px dashed @border-color-base;border-radius: 2px;}
.ant-upload.ant-upload-select-picture-card:hover {border-color: @primary-color;}
.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover {border-color: @border-color-base;}
@ -1984,12 +1975,13 @@ a.ant-typography.ant-typography-disabled:hover, .ant-typography a.ant-typography
.ant-upload-list-picture .ant-upload-list-item-error, .ant-upload-list-picture-card .ant-upload-list-item-error {border-color: #ff4d4f;}
.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info, .ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info {background: transparent;}
.ant-upload-list-picture .ant-upload-list-item-uploading, .ant-upload-list-picture-card .ant-upload-list-item-uploading {border-style: dashed;}
.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{radio-dot-disabled-color}", 1)`)'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{radio-dot-disabled-color}", 1)`)'] {fill: @error-color-deprecated-bg;}
.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{progress-steps-item-bg}", 1)`)'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{progress-steps-item-bg}", 1)`)'] {fill: @error-color-deprecated-bg;}
.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'] {fill: #ff4d4f;}
.ant-upload-list-picture-card .ant-upload-list-item-info::before {background-color: rgba(0, 0, 0, 0.5);}
.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete {color: rgba(255, 255, 255, 0.85);}
.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover {color: #fff;}
.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item {background-color: @background-color-light;}
.ant-upload-list .ant-upload-animate-inline-appear, .ant-upload-list .ant-upload-animate-inline-enter, .ant-upload-list .ant-upload-animate-inline-leave {animation-fill-mode: cubic-bezier(0.78, 0.14, 0.15, 0.86);}
.ant-pro-table-search {background-color: @component-background !important;}
.bezierEasingMixin() {
@functions: ~`(function() {var NEWTON_ITERATIONS = 4;var NEWTON_MIN_SLOPE = 0.001;var SUBDIVISION_PRECISION = 0.0000001;var SUBDIVISION_MAX_ITERATIONS = 10;var kSplineTableSize = 11;var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);var float32ArraySupported = typeof Float32Array === 'function';function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }
@ -2439,8 +2431,7 @@ this.tinycolor = tinycolor;})()`;}
.colorPaletteMixin() {
@functions: ~`(function() {var hueStep = 2;var saturationStep = 0.16;var saturationStep2 = 0.05;var brightnessStep1 = 0.05;var brightnessStep2 = 0.15;var lightColorCount = 5;var darkColorCount = 4;var getHue = function(hsv, i, isLight) {var hue;if (hsv.h >= 60 && hsv.h <= 240) {hue = isLight ? hsv.h - hueStep * i : hsv.h + hueStep * i;} else {hue = isLight ? hsv.h + hueStep * i : hsv.h - hueStep * i;}
if (hue < 0) {hue += 360;} else if (hue >= 360) {hue -= 360;}
return Math.round(hue);};var getSaturation = function(hsv, i, isLight) {if (hsv.h === 0 && hsv.s === 0) {return hsv.s;}
var saturation;if (isLight) {saturation = hsv.s - saturationStep * i;} else if (i === darkColorCount) {saturation = hsv.s + saturationStep;} else {saturation = hsv.s + saturationStep2 * i;}
return Math.round(hue);};var getSaturation = function(hsv, i, isLight) {var saturation;if (isLight) {saturation = hsv.s - saturationStep * i;} else if (i === darkColorCount) {saturation = hsv.s + saturationStep;} else {saturation = hsv.s + saturationStep2 * i;}
if (saturation > 1) {saturation = 1;}
if (isLight && i === lightColorCount && saturation > 0.1) {saturation = 0.1;}
if (saturation < 0.06) {saturation = 0.06;}
@ -2897,7 +2888,7 @@ this.tinycolor = tinycolor;})()`;}
@cascader-dropdown-line-height: @dropdown-line-height;
@anchor-bg: transparent;
@anchor-border-color: @border-color-split;
@anchor-link-top: 4px;
@anchor-link-top: 7px;
@anchor-link-left: 16px;
@anchor-link-padding: @anchor-link-top 0 @anchor-link-top @anchor-link-left;
@tooltip-max-width: 250px;
@ -2922,7 +2913,7 @@ this.tinycolor = tinycolor;})()`;}
@modal-header-border-style: @border-style-base;
@modal-header-title-line-height: 22px;
@modal-header-title-font-size: @font-size-lg;
@modal-header-close-size: @modal-header-title-line-height + 2 * @modal-header-padding-vertical;
@modal-header-close-size: 56px;
@modal-heading-color: @heading-color;
@modal-close-color: @text-color-secondary;
@modal-footer-bg: transparent;
@ -2933,7 +2924,6 @@ this.tinycolor = tinycolor;})()`;}
@modal-mask-bg: fade(@black, 45%);
@modal-confirm-body-padding: 32px 32px 24px;
@modal-confirm-title-font-size: @font-size-lg;
@modal-border-radius: @border-radius-base;
@progress-default-color: @processing-color;
@progress-remaining-color: @background-color-base;
@progress-info-text-color: @progress-text-color;

BIN
web/client/assets/images/leadership/di.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
web/client/assets/images/leadership/jiejue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
web/client/assets/images/leadership/mingri.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
web/client/assets/images/leadership/pingshi.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
web/client/assets/images/leadership/road.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
web/client/assets/images/leadership/shiyantu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
web/client/assets/images/leadership/zibiaoti.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

77
web/client/src/sections/fillion/actions/infor.js

@ -11,14 +11,81 @@ export function getDepMessage() {
reducer: { name: 'depMessage' }
});
}
export function getReportStatistic(query) {
// export function getReportStatistic(query) {
// return dispatch => basicAction({
// type: 'get',
// dispatch: dispatch,
// query: query,
// actionType: 'GET_DEPARTMENT_STATIS',
// url: ApiTable.getReportStatistic,
// msg: { error: '获取填报信息失败' },
// reducer: { name: 'reportstatistic' }
// });
// }
export function getOperaTional(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_OPERA_TIONAL',
url: ApiTable.getOperaTional,
msg: { error: '获取客运信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getSpecificVehicle(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_SPECIFIC_VEHICLE',
url: ApiTable.getSpecificVehicle,
msg: { error: '获取车辆信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getHouseholds(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_HOUSEHOLDS',
url: ApiTable.getHouseholds,
msg: { error: '获取业户信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getRoadway(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_ROADWAY',
url: ApiTable.getRoadway,
msg: { error: '获取道路信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getBridge(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_BRIDGE',
url: ApiTable.getBridge,
msg: { error: '获取桥梁信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getProject(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_DEPARTMENT_STATIS',
url: ApiTable.getReportStatistic,
msg: { error: '获取填报信息失败' },
reducer: { name: 'reportstatistic' }
actionType: 'GET_PROJECT',
url: ApiTable.getProject,
msg: { error: '获取工程信息失败' },
// reducer: { name: 'reportstatistic' }
});
}

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

File diff suppressed because it is too large

118
web/client/src/sections/fillion/components/compileDrawer.js

@ -1,118 +0,0 @@
// import React, { useEffect, useState } from 'react';
// import { connect } from 'react-redux';
// import { Spin, Drawer, Button } from 'antd';
// import '../style.less';
// import { EditableProTable } from '@ant-design/pro-table';
// const CompileDrawer = (props) => {
// const { dispatch, actions, user, loading, visible, checkRow, close, reportRectifyDetail, checkAction } = props
// const [requesting, setRequesting] = useState(false)
// const [dataSource, setDataSource] = useState([])
// const { report } = actions
// const isCheck = checkAction == 'check'
// useEffect(() => {
// if (checkRow.day) {
// dispatch(report.reportRectifyDetail(checkRow.day, checkRow.depId))
// }
// }, [checkRow])
// useEffect(() => {
// let data = reportRectifyDetail
// let i = 1
// for (let d of data) {
// d.index_ = i++
// }
// setDataSource(data)
// }, [reportRectifyDetail])
// return (
// <Drawer
// title={"合用场所安全隐患排查整治汇总表"}
// placement="right"
// onClose={() => {
// close()
// }}
// visible={visible}
// width={'82%'}
// >
// <Spin spinning={loading || requesting}>
// <EditableProTable
// columns={[
// {
// title: '序号',
// dataIndex: 'index_',
// readonly: true,
// },
// {
// title: '名称',
// dataIndex: 'name',
// readonly: true,
// }, {
// title: '地址',
// dataIndex: 'address',
// readonly: true,
// }, {
// title: '排查发现隐患',
// dataIndex: 'hiddenDanger',
// readonly: true,
// }, {
// title: '采取整改措施',
// dataIndex: 'correctiveAction',
// }, {
// title: '实施处罚、强制措施情况',
// dataIndex: 'punishment',
// },
// ]}
// controlled={true}
// value={dataSource}
// onChange={setDataSource}
// rowKey="id"
// headerTitle={`填报单位:${checkRow.region};时间:${checkRow.day}`}
// maxLength={5}
// recordCreatorProps={false}
// editable={{
// type: 'multiple',
// editableKeys: isCheck ? [] : dataSource.map(r => r.id)
// }}
// toolBarRender={() => [
// isCheck ? '' :
// <Button
// type="primary"
// key="save"
// onClick={() => {
// // dataSource 就是当前数据,可以调用 api 将其保存
// setRequesting(true)
// const data = dataSource
// for (let d of data) {
// d.userId = user.id
// delete d.index_
// }
// dispatch(report.compileReportRectifyDetail(dataSource)).then(res => {
// setRequesting(false)
// })
// }}
// >
// 保存数据
// </Button>
// ]}
// >
// </EditableProTable>
// </Spin>
// </Drawer >
// )
// }
// function mapStateToProps (state) {
// const { auth, global, members, reportRectifyDetail } = state;
// return {
// loading: reportRectifyDetail.isRequesting,
// user: auth.user,
// actions: global.actions,
// members: members.data,
// reportRectifyDetail: reportRectifyDetail.data || []
// };
// }
// export default connect(mapStateToProps)(CompileDrawer);

124
web/client/src/sections/fillion/components/configModal.js

@ -1,124 +0,0 @@
// import React, { useEffect, useRef } from 'react';
// import { connect } from 'react-redux';
// import { Spin, Button, Modal, Form, Switch } from 'antd';
// import ProForm, { ProFormText, ProFormSelect } from '@ant-design/pro-form';
// import { useState } from 'react';
// const ConfigModal = (props) => {
// const { dispatch, actions, user, loading, visible, close, editData, allAreas, reportType } = props
// const [excuteTimeOptions, setExcuteTimeOptions] = useState([])
// const formRef = useRef()
// const { report } = actions
// useEffect(() => {
// let excuteTimeOptions = []
// for (let i = 0; i < 24; i++) {
// let curT = i
// if (curT < 10) {
// curT = '0' + curT
// }
// excuteTimeOptions.push({
// value: curT + ':00',
// label: curT + ':00',
// })
// excuteTimeOptions.push({
// value: curT + ':30',
// label: curT + ':30',
// })
// }
// setExcuteTimeOptions(excuteTimeOptions);
// }, [])
// return (
// <Modal
// title={`${editData ? '编辑' : '新增'}报表配置`}
// visible={visible}
// onOk={() => {
// formRef.current.validateFields().then(v => {
// v.excuteTime = String(v.excuteTime)
// console.log(v);
// dispatch(editData ? report.editReportConfig(v, editData.id) : report.addReportConfig(v)).then(res => {
// if (res.success) {
// dispatch(report.getReportConfig())
// close()
// }
// })
// })
// }}
// onCancel={() => {
// close()
// }}
// >
// <ProForm
// formRef={formRef}
// autoFocusFirstInput
// layout={'horizontal'}
// labelCol={{ span: 4 }}
// wrapperCol={{ span: 18 }}
// initialValues={
// editData ?
// editData :
// {
// excuteTime: '00:00',
// isEnable: true
// }
// }
// submitter={false}
// formKey='config-form'
// >
// <ProFormText
// name={'reportName'}
// label="报表名称"
// placeholder="请输入名称"
// required
// rules={[{ required: true, message: '请输入名称' }]}
// />
// <ProFormSelect
// options={reportType}
// cacheForSwr
// name="reportTypeId"
// label="报表类型"
// required
// rules={[{ required: true, message: '请选择报表类型' }]}
// />
// <ProFormSelect
// options={
// allAreas.map(a => {
// return {
// value: a.id,
// label: a.name,
// }
// })}
// cacheForSwr
// name="regionId"
// label="区域"
// required
// rules={[{ required: true, message: '请选择区域' }]}
// />
// <Form.Item name="isEnable" label="状态" valuePropName="checked">
// <Switch checkedChildren="启用" unCheckedChildren="禁用" />
// </Form.Item>
// <ProFormSelect
// options={excuteTimeOptions}
// addonBefore={'每天'}
// addonAfter={'时'}
// cacheForSwr
// name="excuteTime"
// label="生成时间"
// />
// </ProForm>
// </Modal>
// )
// }
// function mapStateToProps (state) {
// const { auth, global, allAreas } = state;
// console.log(allAreas);
// return {
// user: auth.user,
// actions: global.actions,
// allAreas: allAreas.data || []
// };
// }
// export default connect(mapStateToProps)(ConfigModal);

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

@ -5,6 +5,8 @@ import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const enforceTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
@ -13,10 +15,36 @@ const enforceTable = (props) => {
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns =
[
{
@ -1477,7 +1505,13 @@ const enforceTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -1486,13 +1520,14 @@ const enforceTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form,record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -1572,7 +1607,12 @@ const enforceTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

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

@ -5,6 +5,8 @@ import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const HigwaysTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
@ -13,10 +15,36 @@ const HigwaysTable = (props) => {
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns =
[
{
@ -1477,7 +1505,12 @@ const HigwaysTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -1486,13 +1519,14 @@ const HigwaysTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -1500,9 +1534,7 @@ const HigwaysTable = (props) => {
<Button
type="primary"
style={{ width: "100px", marginLeft: 20 }}
onClick={() => {
// dispatch(push(`article/update/post`));
}}
>
导入
</Button>
@ -1572,7 +1604,12 @@ const HigwaysTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

128
web/client/src/sections/fillion/components/infor/details.js

@ -1,114 +1,44 @@
import React from 'react';
import { connect } from 'react-redux';
import { Spin, Table } from 'antd';
import { ModalForm } from '@ant-design/pro-form';
import { DrawerForm, ProForm, ProFormText } from '@ant-design/pro-form';
import moment from 'moment';
const UserModal = (props) => {
const { visible, onVisibleChange } = props
const datas = props.modalRecord || {}
const scopeOfExamination = { ...datas }.hiddenDangerItem12
const arr = [
' 1、合用场所的所有权人、使用人是否遵守消防法律、法规、规章;',
' 2、住宿场所是否违规搭建;',
' 3、合用场所是否配置灭火器、消防应急照明等消防器材和设施;',
' 4、合用场所的电器产品的安装、使用及其线路和管路的设计、敷设、维护保养、检测,是否符合消防技术标准和管理规定;',
' 5、合用场所住宿是否超过2人;(judge_0) 若超过,人员住宿是否设置在首层,并直通室外安全出口。(judge_1)',
' 6、电动自行车是否违规室内充电、停放;',
' 7、合用场所是否违规生产、储存、经营易燃易爆危险品;',
' 8、合用场所除厨房外是否违规使用或者放置瓶装液化石油气、可燃液体;',
' 9、放置瓶装液化石油气的厨房是否采取防火分隔措施,并设置自然排风窗;',
' 10、合用场所疏散通道、安全出口是否保持畅通;',
' 11、合用场所的外窗或阳台是否设置金属栅栏;(judge_0) 若设置,是否能从内部易于开启。(judge_1)',
' 12、存在其他安全隐患;',
]
const columns = [
{
title: '场所名称',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return <div>{datas.placeName}</div>
}
}, {
title: '场所基本情况',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return <div>
<li>使用性质{datas.placeType}</li>
<li>地址{datas.address}</li>
<li>负责人{datas.placeOwner}</li>
<li>电话{datas.phone}</li>
<li>面积{datas.dimension}</li>
<li>层数{datas.floors}</li>
<li>常驻人口:{datas.numberOfPeople}</li>
</div>
}
}, {
title: '检查内容',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return datas.hiddenDangerItem12 ?
scopeOfExamination.map((item, index) => {
let message = arr[index]
if (arr[index].indexOf('judge_') > -1) {
if (item.value == true && index === 4) {
message = message.replace(`judge_1`, item.child.value ? "是" : "否")
} else {
message = message.replace(`若超过,人员住宿是否设置在首层,并直通室外安全出口。(judge_1)`, '')
}
if (item.value == true && index === 10) {
message = message.replace(`judge_1`, item.child.value ? "是" : "否")
} else {
message = message.replace(`若设置,是否能从内部易于开启。(judge_1)`, '')
}
if (arr[index].indexOf('judge_0') > -1) {
return <li key={index}>{message.replace(`judge_0`, item.value ? "是" : "否")}</li>
}
}
return <li key={index}>{message}({item.value ? "是" : "否"})</li>
})
: '---'
}
}, {
title: '存在具体问题',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return <div>{datas.description ? datas.description : '---'}</div>
}
},
]
const data = [
{
key: '1',
address: 'New York No. 1 Lake Park',
tags: ['nice', 'developer'],
},
];
const { visible, onVisibleChange,typecard } = props
console.log(typecard)
return (
<Spin spinning={false}>
<ModalForm
<DrawerForm
width={'90rem'}
visible={visible}
onVisibleChange={onVisibleChange}
submitter={false}
// submitter={false}
>
<div style={{ width: '71vw' }}><span style={{ fontSize: '16px' }}>排查单位{(datas || {}).checkAreaName || ''}</span>
<span style={{ fontSize: '16px', float: 'right', marginBottom: '10px' }}>填报日期{moment((datas || {}).time).format('YYYY-MM-DD') || ''}</span><span style={{ clear: 'both' }}></span></div>
<Table columns={columns} dataSource={data} width={'50rem'} pagination={false}
{typecard==111?<ProForm.Group>
<ProFormText
name="name"
width="md"
label="签约客户名称"
tooltip="最长为 24 位"
placeholder="请输入名称"
value="wowowo"
rules={[{ required: true, message: "必填" }]}
/>
<div style={{ width: '71vw', marginTop: '10px' }}>
<span style={{ fontSize: '16px' }}>排查人{(datas || {}).checkUserName || ''}</span>
<span style={{ fontSize: '16px', float: 'right' }}>手机号{(datas || {}).checkUserPhone || ''}</span></div>
</ModalForm>
<ProFormText width="md" name="company" label="我方公司名称" placeholder="请输入名称" />
</ProForm.Group>
:<ProForm.Group>
<ProFormText
name="name"
width="md"
label="签约客户名称"
tooltip="最长为 24 位"
placeholder="请输入名称"
rules={[{ required: true, message: "必填" }]}
/>
<ProFormText width="md" name="company" label="我方公司名称" placeholder="请输入名称" />
</ProForm.Group>}
</DrawerForm>
</Spin>
)
}

116
web/client/src/sections/fillion/components/inforTable.js

@ -1,22 +1,47 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { Spin, Button, Popconfirm, Badge } from 'antd';
import { Spin, Button, Popconfirm, Col, Input,Row } from 'antd';
import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const InForTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
const [regionId, setRegionId] = useState()//区域id
const [placeType, setPlaceType] = useState()//场所
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns =
[
{
@ -67,14 +92,26 @@ const InForTable = (props) => {
// search: false,
dataIndex: 'containers3',
// valueType: 'dateRange',
// initialValue: day,
//
width: 120,
render: (dom, record) => {
return record.address
},
fieldProps: {
placeholder: '请输入超限率进行搜索',
getPopupContainer: (triggerNode) => triggerNode.parentNode,
// fieldProps: {
// placeholder: '请输入超限率进行搜索',
// getPopupContainer: (triggerNode) => triggerNode.parentNode,
// },
renderFormItem: (item, { type, defaultRender, formItemProps, fieldProps, ...rest }, form) => {
return <Input.Group >
<Row gutter={8}>
<Col span={8}>
<Input placeholder='输入超限率'/>
</Col>
<Col span={8}>
<Input placeholder='输入超限率'/>
</Col>
</Row>
</Input.Group>
}
}, {
@ -82,7 +119,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers4',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -96,7 +133,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers5',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -110,7 +147,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers6',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -137,7 +174,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers8',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -151,7 +188,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers9',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -166,7 +203,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers10',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -181,7 +218,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers11',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -196,7 +233,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers12',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -211,7 +248,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -226,7 +263,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers13',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -241,7 +278,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers14',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -260,7 +297,13 @@ const InForTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -269,13 +312,14 @@ const InForTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -283,9 +327,7 @@ const InForTable = (props) => {
<Button
type="primary"
style={{ width: "100px", marginLeft: 20 }}
onClick={() => {
// dispatch(push(`article/update/post`));
}}
>
导入
</Button>
@ -305,14 +347,7 @@ const InForTable = (props) => {
ref={c => { finishedProductTable = c; }}
style={{ width: "100% ", overflow: "auto", height: '760px' }}
rowKey='id'
onReset={(v) => {
const { id } = depMessage[0]
console.log(id)
setRegionId(id)
setPlaceType(-1)
setDay([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])
setSitename('')
}}
rowSelection={{
selectedRowKeys: rowSelected,
onChange: (selectedRowKeys) => {
@ -355,7 +390,12 @@ const InForTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

1627
web/client/src/sections/fillion/components/operationalTable.js

File diff suppressed because it is too large

5
web/client/src/sections/fillion/components/promotionalTable.js

@ -13,9 +13,7 @@ const promotionalTable = (props) => {
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const columns =
[{
@ -141,6 +139,7 @@ const promotionalTable = (props) => {
// </Popconfirm>
// ],
// }}
>
</ProTable></div>

69
web/client/src/sections/fillion/components/publicTable.js

@ -5,6 +5,8 @@ import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const PublicTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
@ -13,10 +15,38 @@ const PublicTable = (props) => {
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [activeKey, setActiveKey] = useState('tab1');
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns = {
tab1: [
{
@ -128,7 +158,12 @@ const PublicTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -137,13 +172,14 @@ const PublicTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -276,7 +312,12 @@ const PublicTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -285,13 +326,14 @@ const PublicTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -340,7 +382,7 @@ const PublicTable = (props) => {
options={false}
ref={c => { finishedProductTable = c; }}
style={{ width: "100% ", overflow: "auto", height: '760px' }}
rowKey={activeKey}
rowKey='id'
onReset={(v) => {
const { id } = depMessage[0]
console.log(id)
@ -391,7 +433,12 @@ const PublicTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

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

File diff suppressed because it is too large

6
web/client/src/sections/fillion/containers/bridge.js

@ -4,12 +4,12 @@ import '../style.less';
import { getDepMessage, getReportStatistic } from "../actions/infor"
import BridgeTable from '../components/bridgeTable';
const superagent = require('superagent');
const infor = (props) => {
const bridge = (props) => {
const { dispatch, user } = props
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出
@ -39,4 +39,4 @@ function mapStateToProps(state) {
user: auth.user,
}
}
export default connect(mapStateToProps)(infor);
export default connect(mapStateToProps)(bridge);

2
web/client/src/sections/fillion/containers/enforce.js

@ -9,7 +9,7 @@ const enforce = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/highways.js

@ -9,7 +9,7 @@ const highways = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/infor.js

@ -11,7 +11,7 @@ const infor = (props) => {
const [modalRecord, setModalRecord] = useState();
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
// //打开弹窗

124
web/client/src/sections/fillion/containers/infor/details.js

@ -1,124 +0,0 @@
// import React from 'react';
// import { connect } from 'react-redux';
// import { Spin, Table } from 'antd';
// import { ModalForm } from '@ant-design/pro-form';
// import moment from 'moment';
// const UserModal = (props) => {
// const { visible, onVisibleChange } = props
// const datas = props.modalRecord || {}
// const scopeOfExamination = { ...datas }.hiddenDangerItem12
// const arr = [
// ' 1、合用场所的所有权人、使用人是否遵守消防法律、法规、规章;',
// ' 2、住宿场所是否违规搭建;',
// ' 3、合用场所是否配置灭火器、消防应急照明等消防器材和设施;',
// ' 4、合用场所的电器产品的安装、使用及其线路和管路的设计、敷设、维护保养、检测,是否符合消防技术标准和管理规定;',
// ' 5、合用场所住宿是否超过2人;(judge_0) 若超过,人员住宿是否设置在首层,并直通室外安全出口;(judge_1)',
// ' 6、电动自行车是否违规室内充电、停放;',
// ' 7、合用场所是否违规生产、储存、经营易燃易爆危险品;',
// ' 8、合用场所除厨房外是否违规使用或者放置瓶装液化石油气、可燃液体;',
// ' 9、放置瓶装液化石油气的厨房是否采取防火分隔措施,并设置自然排风窗;',
// ' 10、合用场所疏散通道、安全出口是否保持畅通;',
// ' 11、合用场所的外窗或阳台是否设置金属栅栏;(judge_0) 若设置,是否能从内部易于开启。(judge_1)',
// ' 12、存在其他安全隐患;',
// ]
// const columns = [
// {
// title: '场所名称',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return <div>{datas.placeName}</div>
// }
// }, {
// title: '场所基本情况',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return <div>
// <li>使用性质:{datas.placeType}</li>
// <li>地址:{datas.address}</li>
// <li>负责人:{datas.placeOwner}</li>
// <li>电话:{datas.phone}</li>
// <li>面积:{datas.dimension}</li>
// <li>层数:{datas.floors}</li>
// <li>常驻人口:{datas.numberOfPeople}</li>
// </div>
// }
// }, {
// title: '检查内容',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return datas.hiddenDangerItem12 ?
// scopeOfExamination.map((item, index) => {
// let message = arr[index]
// if (arr[index].indexOf('judge_') > -1) {
// if (item.child && item.child.itemIndex) {
// message = message.replace(`judge_${item.child.itemIndex}`, item.child.value ? "是" : "否")
// } else {
// message = message.replace(`judge_1`, '---')
// }
// if (arr[index].indexOf('judge_0') > -1) {
// return <li key={index}>{message.replace(`judge_0`, item.value ? "是" : "否")}</li>
// }
// }
// return <li key={index}>{message}({item.value ? "是" : "否"})</li>
// })
// : '---'
// }
// }, {
// title: '存在具体问题',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return <div>{datas.description ? datas.description : '---'}</div>
// }
// },
// ]
// const data = [
// {
// key: '1',
// address: 'New York No. 1 Lake Park',
// tags: ['nice', 'developer'],
// },
// ];
// return (
// <Spin spinning={false}>
// <ModalForm
// width={'90rem'}
// visible={visible}
// onVisibleChange={onVisibleChange}
// submitter={false}
// >
// <div style={{ width:'71vw'}}><span style={{ fontSize: '16px' }}>排查单位:{(datas || {}).checkAreaName || ''}</span>
// <span style={{ fontSize: '16px', float:'right',marginBottom:'10px'}}>填报日期:{moment((datas || {}).time).format('YYYY-MM-DD') || ''}</span><span style={{clear:'both'}}></span></div>
// <Table columns={columns} dataSource={data} width={'50rem'} pagination={false}
// />
// <div style={{ width:'71vw',marginTop:'10px'}}>
// <span style={{ fontSize: '16px' }}>排查人:{(datas || {}).checkUserName || ''}</span>
// <span style={{ fontSize: '16px',float:'right' }}>手机号:{(datas || {}).checkUserPhone || ''}</span></div>
// </ModalForm>
// </Spin>
// )
// }
// function mapStateToProps (state) {
// const { depMessage } = state;
// const pakData = (dep) => {
// return dep.map((d) => {
// return {
// title: d.name,
// value: d.id,
// children: pakData(d.subordinate)
// }
// })
// }
// let depData = pakData(depMessage.data || [])
// return {
// loading: depMessage.isRequesting,
// depData,
// };
// }
// export default connect(mapStateToProps)(UserModal);

2
web/client/src/sections/fillion/containers/maintenance.js

@ -9,7 +9,7 @@ const Maintenance = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/operational.js

@ -9,7 +9,7 @@ const operational = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/patrol.js

@ -9,7 +9,7 @@ const patrol = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/promotional.js

@ -10,7 +10,7 @@ const promotional = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
// //批量导出

2
web/client/src/sections/fillion/containers/public.js

@ -9,7 +9,7 @@ const Public = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/transportation.js

@ -9,7 +9,7 @@ const transportation = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/videois.js

@ -9,7 +9,7 @@ const Videois = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

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

@ -1,6 +1,7 @@
import React, { useEffect, useRef } from 'react';
import Module from '../../../public/module'
import * as echarts from 'echarts';
import { Badge } from 'antd';
const LeftTop = () => {
@ -134,9 +135,6 @@ const LeftTop = () => {
roundCap: true,
barWidth: 30,
showBackground: true,
backgroundStyle: {
color: "rgba(66, 66, 66, .3)",
},
data: [40],
coordinateSystem: "polar",
itemStyle: {
@ -154,6 +152,8 @@ const LeftTop = () => {
},
},
},
],
};
chartInstance.setOption(frequentlyOption);
@ -163,11 +163,27 @@ const LeftTop = () => {
return (
<>
<Module style={style} title={"道路养护周期统计"}>
<div style={{ position: 'relative' }}>
<div style={{ width: '100%', display: 'flex' }}>
<div ref={seasonChartRef} style={{ height: "23vh", width: "50%" }}></div>
<div ref={frequentlyChartRef} style={{ height: "23vh", width: "50%" }}></div>
<div ref={seasonChartRef} style={{ height: "23vh", width: "50%" }}>
</div>
<div ref={frequentlyChartRef} style={{ height: "23vh", width: "50%" }}></div>
</div>
<img src='assets/images/quanju/circle.png' style={{
position: 'absolute',
left: '19%',
top: '70%',
zIndex: 999
}} />
<img src='assets/images/quanju/circle.png' style={{
position: 'absolute',
right: '27%',
top: '70%',
zIndex: 999
}} />
</div>
</Module>
</>
)

200
web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js

@ -5,76 +5,180 @@ export default function LeftItem() {
const seasonChartRef = 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%",
// 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: ["78%", "86%"],
// center: ["50%", "50%"],
// },
// angleAxis: {
// max: 100,
// clockWise:false, //逆时针加载
// show: false,
// },
// radiusAxis: {
// type: "category",
// show: true,
// axisLabel: {
// show: false,
// },
// axisLine: {
// show: false,
// },
// axisTick: {
// show: false,
// },
// },
// series: [
// {
// name: "",
// type: "bar",
// roundCap: true,
// clockWise:false, //逆时针加载
// 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",
// },
// ]),
// },
// },
// },
// ],
// };
const option = {
title: {
text: '75%',
top:'35%',
textStyle: {
fontSize: "30",
color: "#FFFFFF",
fontFamily: "YouSheBiaoTiHei",
fontSize: 22,
fontFamily: 'PingFangSC-Medium, PingFang SC',
fontWeight: 500,
// marginTop:-60,
color: '#FFFFFF'
},
subtext: '已处理',
subtextStyle: {
fontSize: 16,
fontFamily: "PingFangSC-Regular, PingFang SC",
fontWeight: 400,
color: 'rgba(216,240,255,0.8000)'
},
],
polar: {
radius: ["78%", "86%"],
center: ["50%", "50%"],
// itemGap: -2, // 主副标题距离
left: 'center',
// top: 'center'
},
angleAxis: {
max: 100,
show: false,
max: 100, // 满分
clockwise: false, // 逆时针
// 隐藏刻度线
axisLine: {
show: false
},
axisTick: {
show: false
},
radiusAxis: {
type: "category",
show: true,
axisLabel: {
show: false,
show: false
},
splitLine: {
show: false
}
},
radiusAxis: {
type: 'category',
// 隐藏刻度线
axisLine: {
show: false,
show: false
},
axisTick: {
show: false,
show: false
},
axisLabel: {
show: false
},
series: [
{
name: "",
type: "bar",
roundCap: true,
barWidth: 30,
showBackground: true,
data: [40],
coordinateSystem: "polar",
splitLine: {
show: false
}
},
polar: {
center: ['50%', '50%'],
radius: '180%' //图形大小
// radius: ["78%", "86%"],
},
series: [{
type: 'bar',
data: [{
name: '作文得分',
value: 75,
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ {
offset: 0,
color: "#AAC8FF",
},
{
offset: 1,
color: "#0041BB",
}])
}
},
]),
},
},
},
],
};
chartInstance.setOption(seasonOption);
}],
coordinateSystem: 'polar',
roundCap: true,
barWidth: 8,
barGap: '-100%', // 两环重叠
z: 2,
},{ // 灰色环
type: 'bar',
data: [{
value: 100,
itemStyle: {
color: '#e2e2e2',
shadowColor: 'rgba(0, 0, 0, 0.2)',
shadowBlur: 5,
shadowOffsetY: 2
}
}],
coordinateSystem: 'polar',
roundCap: true,
barWidth: 8,
barGap: '-100%', // 两环重叠
z: 1
}]
}
chartInstance.setOption(option);
}, [])
return (

19
web/client/src/sections/quanju/containers/footer/leadership/centerleft/center-left-bottom.js

@ -1,12 +1,27 @@
import React from 'react'
import Module from '../../../public/module'
import Centerleftecharts from "./echarts/centerleftecharts"
import Bottomlunbo from './lunbo/bottomlunbo'
import Leftlunbo from './lunbo/toplunbo'
const Leftbottom = () => {
const style = { height: "28%", marginTop: "2%" }
return (
<>
<Module style={style}>
<Module style={style} title={"运政管理"}>
<div style={{ width: "100%", height: "100%" }}>
<div style={{ width: "50%", height: "100%", float: "left" }}>
<Centerleftecharts />
</div>
<div style={{ width: "50%", height: "100%", float: "right", }}>
<div style={{ width: "100%", height: "60%" }}>
<Bottomlunbo />
</div>
<div style={{ width: "100%", height: "50%" }}>
<Leftlunbo />
</div>
</div>
</div>
</Module>
</>
)

203
web/client/src/sections/quanju/containers/footer/leadership/centerleft/echarts/centerleftecharts.js

@ -0,0 +1,203 @@
import React, { useEffect, useRef } from 'react'
import * as echarts from 'echarts';
const Leftbottomecharts = () => {
const chartRef = useRef(null);
useEffect(() => {
var chartInstance = echarts.init(chartRef.current);
var colorArray = [
{
top: "#1978E5", //黄
bottom: "#10274B",
},
{
top: "#C31E00", //绿
bottom: "#10274B",
},
{
top: "#00B5E0 ", //蓝
bottom: "#10274B",
},
{
top: "#19E5D6", //深蓝
bottom: "#10274B",
},
// {
// top: "#b250ff", //粉
// bottom: "rgba(11,42,84,.3)",
// },
];
const option = {
tooltip: {
show: true,
formatter: "{b}:{c}",
},
grid: {
left: "5%",
top: "12%",
right: "1%",
bottom: "8%",
containLabel: true,
},
xAxis: {
type: "value",
show: true,
position: "bottom",
axisTick: {
show: true,
lineStyle: {
color: "rgba(176,215,255,0.25)",
// type: "dashed",
},
},
axisLine: {
show: false,
lineStyle: {
color: "rgba(216,240,255,0.8000)",
},
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(176,215,255,0.25)",
type: "dashed",
},
},
},
yAxis: [
{
type: "category",
axisTick: {
show: false,
alignWithLabel: false,
length: 5,
},
splitLine: {
//网格线
show: false,
},
inverse: "true", //排序
// nameTextStyle: {
// color: ["rgba(216,240,255,0.8)"],
// },
axisLine: {
// show: true,
lineStyle: {
color: "rgba(216,240,255,0.8000)",
width: 2,
},
},
data: ["客运车", "危险货运", "出租车", "公交"],
},
],
series: [
{
type: "bar",
barWidth: 10,
barGap: "100%",
// zlevel: 1,
barCategoryGap: "50%",
color: "#042B7F",
data: [150, 150, 150, 150],
tooltip: {
show: false,
},
},
{
name: "能耗值",
type: "bar",
// zlevel: 2,
barWidth: 10,
barGap: "-100%",
barCategoryGap: "50%",
data: [60, 132, 89, 134],
markPoint: {
Symbol: "",/* 可以通过’image: *///url’设置为图片,其中url为图片的链接
data: [{ type: "max", name: "最大值" }],
},
itemStyle: {
normal: {
show: true,
color: function (params) {
let num = colorArray.length;
return {
type: "linear",
colorStops: [
{
offset: 0,
color: colorArray[params.dataIndex % num].bottom,
},
{
offset: 1,
color: colorArray[params.dataIndex % num].top,
},
{
offset: 0,
color: colorArray[params.dataIndex % num].bottom,
},
{
offset: 1,
color: colorArray[params.dataIndex % num].top,
},
{
offset: 0,
color: colorArray[params.dataIndex % num].bottom,
},
{
offset: 1,
color: colorArray[params.dataIndex % num].top,
},
{
offset: 0,
color: colorArray[params.dataIndex % num].bottom,
},
{
offset: 1,
color: colorArray[params.dataIndex % num].top,
},
{
offset: 0,
color: colorArray[params.dataIndex % num].bottom,
},
{
offset: 1,
color: colorArray[params.dataIndex % num].top,
},
{
offset: 0,
color: colorArray[params.dataIndex % num].bottom,
},
{
offset: 1,
color: colorArray[params.dataIndex % num].top,
},
],
globalCoord: false,
};
},
barBorderRadius: 70,
borderWidth: 0,
borderColor: "#333",
},
},
},
],
};
chartInstance.setOption(option);
window.onresize = function () {
chartInstance.resize();
}
}, []);
return (
<>
<div ref={chartRef} style={{
height: "20vh", width: "100%"
}}></div>
</>
);
}
export default Leftbottomecharts

59
web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/bottomlunbo.js

@ -0,0 +1,59 @@
import React, { useState, useEffect } from 'react'
import Lunbotop from "./lunbo"
const Bottomlunbo = () => {
const [list, setList] = useState([
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
])
const renderBody = () => {
return (
<div style={{ width: "100%", height: "100%" }}>
{
list.map((item, index) => {
return <div style={{ fontSize: "14px", color: "#FFFFFF" }}>{item.name}</div>
})
}
</div>
)
}
return (
<>
<div style={{
width: "100%",
height: "50%",
}}>
<div style={{ width: "100%", height: "10%", fontSize: "16px", color: "#FFFFFF", marginLeft: "10%", fontFamily: "PingFangSC-Medium, PingFang SC", }}>
业户信息:
</div>
<div style={{ width: "40%", height: "60%", float: "left" }}>
<div style={{ width: "100%", height: "100%", position: "relative" }}>
<img src='/assets/images/leadership/di.png' style={{ width: "60%", marginLeft: "20%", marginTop: "15%" }} />
<p style={{ fontSize: "16px", color: "#FFFFFF", fontFamily: "PingFangSC-Medium, PingFang SC", position: "absolute", top: "90%", left: "33%" }}>出租车</p>
</div>
</div>
<Lunbotop
content={renderBody()}
containerStyle={{ position: "relative", height: "100%", width: "60%", top: "8%", float: "right", marginTop: "7%" }}
divHeight={"100%"}
divId={"bottomlunbo"}
/>
</div>
</>
)
}
export default Bottomlunbo

180
web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/lunbo.js

@ -0,0 +1,180 @@
'use strict'
import React, { Component } from 'react';
// import { Col, Row, Tag, Tooltip } from '@douyinfe/semi-ui';
import { Col, Row, Tag, Toolip } from 'antd';
import './style.less';
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;
}
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';
}
if (!this.props.closeroll) {
this.repeat()
}
} catch (e) { console.log(e) }
}
repeat = () => {
this.scrollElem.scrollTop = 0;
this.interval = setInterval(() => {
if (this.stopscroll) return;
this.currentTop = this.currentTop + 1;
this.preTop = this.scrollElem.scrollTop;
this.scrollElem.scrollTop = this.scrollElem.scrollTop + 1;
if (this.preTop === this.scrollElem.scrollTop) {
this.scrollElem.scrollTop = this.marqueesHeight;
this.scrollElem.scrollTop = this.scrollElem.scrollTop + 1;
}
}, 80);
}
componentWillUnmount() {
clearInterval(this.interval);
}
componentDidMount() {
this.marque(10);
}
onMouseOver = () => {
this.stopscroll = true;
}
onMouseOut = () => {
this.stopscroll = false;
}
loadDataColumn = (c, index, q) => {
const { changeStyleCol, heads, spans, data, showWord, color, dataTextAlign, customColorBox, } = this.props;
if (c === changeStyleCol) {
if (color) {
<span style={{ color: q.changeColor }}>{q.data[index]}</span>
} else {
if (['时间'].indexOf(c) != -1) {
return <span style={{ fontFamily: 'liquidCrystal' }}>{q.data[index]}</span>
}
// if (c.indexOf("时间") == -1) {
// if (customColorBox) {
// return <DashBorder boxStyle={{ textAlign: 'center', background: q.boxColor, width: 58, height: 18, display: 'inline-block', fontSize: 12 }} content={q.data[index]} borderStyle={{ borderColor: q.changeColor, width: 4, height: 4 }} />
// }
// if (q.data[index].length > showWord) {
// return <Tooltip key={index} position="top" content={q.data[index]}>{q.data[index].substring(0, showWord) + '...'}</Tooltip>
// } else {
// return <span className='margin-left-5' style={{ fontFamily: 'liquidCrystal' }}>{q.data[index]}</span>
// }
// }
}
} else {
if (c.indexOf("时间") == -1)
if (q.data[index].length > showWord) {
return <Tooltip key={index} position="top" content={q.data[index]}>{q.data[index].substring(0, showWord) + '...'}</Tooltip>
}
return <span className='margin-left-5'>{q.data[index]}</span>
}
// c === changeStyleCol ?
// color ?
// <span style={{ color: q.changeColor }}>{q.data[index]}</span>
// : q.levelbg ?
// q.isSiteAlermListMock ? <span style={extraStyle}>已处理</span> :
// <span style={{ color: q.changeColor, background: `url('/assets/images/ui/${q.levelbg}.png') no-repeat`, backgroundSize: '100% 100%', textAlign: 'left', fontFamily: 'liquidCrystal', padding: '3px 10px' }}>{q.data[index]}</span>
// : <Tag color={q.changeColor}>{q.data[index]}</Tag>
// : ['时间'].indexOf(c) != -1 ? !customColorBox ? <span style={{ fontFamily: 'liquidCrystal' }}>{q.data[index]}</span> :
// <DashBorder boxStyle={{ textAlign: 'center', background: q.boxColor }} content={q.data[index]} borderStyle={{ borderColor: color }} />
// : c.indexOf("时间") == -1 && q.data[index].length > showWord ?
// <Tooltip placement="top" title={q.data[index]} className='margin-left-5'>{q.data[index].substring(0, showWord) + '...'}</Tooltip>
// : <span className='margin-left-5' style={{ fontFamily: 'liquidCrystal' }}>{q.data[index]}</span>
}
getContent = () => {
const { changeStyleCol, heads, spans, data, showWord, color, dataTextAlign, customColorBox, } = this.props;
let result = <div></div>;
if (data) {
result = data.map((q, idx) => {
return (
<div key={idx}>
<Row gutter={16} style={{
height: 40,
//background: idx % 2 == 0 ? 'url(/assets/images/ui/roll1.png) no-repeat' : 'url(/assets/images/ui/roll2.png) no-repeat',
background: idx % 2 == 0 ? 'rgba(22,70,116,0.32)' : '',
backgroundSize: '100% 100%',
whiteSpace: 'nowrap',
fontSize: 16
}}>
{q.data[1] == -1 ? null : heads.map((c, index) => {
let extraStyle = {}
if (q.isSiteAlermListMock && c == "状态") {
extraStyle = { color: "green" }
}
return <Col span={spans[index]} key={index} style={{
// padding: `8px 0px 0px ${titleLeft && c != changeStyleCol ? 12 : index == 0 ? 8 : 0}px`,
paddingLeft: index == 0 ? 20 : c != changeStyleCol ? 10 : 'auto', paddingTop: 8, paddingRight: 0,
textAlign: dataTextAlign ? dataTextAlign : 'left', textOverflow: 'ellipsis', overflow: 'hidden',
color: `${c === changeStyleCol ? q.changeColor : ''}`
}}>
{
this.loadDataColumn(c, index, q)
}
</Col>
})
}
</Row>
</div>
)
})
} else {
result = <div style={{ textAlign: 'center', padding: 20, color: '#fff', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
<span></span>
</div>
}
return result;
}
render() {
const { heads, spans, divId, divHeight, content, color, titleLeft, containerStyle = {} } = this.props;
return (
<div style={{ ...containerStyle, textAlign: 'left', }}>
{heads ?
<Row className={'bg-row'} style={{ lineHeight: '40px', height: 40, fontSize: 16, wordBreak: 'keep-all', whiteSpace: 'nowrap', textAlign: titleLeft ? 'left' : 'center', paddingLeft: titleLeft ? 5 : 0 }}>
{heads.map((c, index) => {
return <Col style={{ color: color ? color : '#fff', paddingLeft: titleLeft ? 10 : 'auto' }} span={spans[index]} key={index}>{c}</Col>
})
}
</Row>
: ''}
<div id={divId} className={'hidden-scroll-bar-y'} style={{ overflow: 'hidden', height: divHeight }} onMouseOver={this.onMouseOver} onMouseOut={this.onMouseOut}>
<div style={{ height: '100%' }}>
{content ? content : ''}
{this.getContent()}
</div>
</div>
</div >
)
}
}

6
web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/style.less

@ -0,0 +1,6 @@
.hidden-scroll-bar-y{
overflow-y: scroll !important;
scrollbar-width: none !important;
}
.hidden-scroll-bar-y::-webkit-scrollbar { width: 0 !important }

57
web/client/src/sections/quanju/containers/footer/leadership/centerleft/lunbo/toplunbo.js

@ -0,0 +1,57 @@
import React, { useState, useEffect } from 'react'
import Lunbotop from "./lunbo"
const Toplunbo = () => {
const [list, setList] = useState([
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
{ name: "南昌宁昌物流运输有限公司" },
])
const renderBody = () => {
return (
<div style={{ width: "100%", height: "100%" }}>
{
list.map((item, index) => {
return <div style={{ fontSize: "14px", color: "#FFFFFF" }}>{item.name}</div>
})
}
</div>
)
}
return (
<>
<div style={{
width: "100%",
height: "50%",
}}>
<div style={{ width: "40%", height: "60%", float: "left" }}>
<div style={{ width: "100%", height: "100%", position: "relative", top: "-30%" }}>
<img src='/assets/images/leadership/di.png' style={{ width: "60%", marginLeft: "20%" }} />
<p style={{ fontSize: "16px", color: "#FFFFFF", fontFamily: "PingFangSC-Medium, PingFang SC", position: "absolute", top: "20%", left: "33%" }}>危险货运</p>
</div>
</div>
<Lunbotop
canScroll={true}
content={renderBody()}
containerStyle={{ position: "relative", height: "100%", width: "60%", top: "8%", float: "right" }}
divHeight={"100%"}
divId={"toplunbo1"}
/>
</div>
</>
)
}
export default Toplunbo

4
web/client/src/sections/quanju/containers/footer/leadership/left.js

@ -1,6 +1,6 @@
import React from 'react'
import Lefttop from './left/left-top'
import Leftcenter from "./left/left-center"
// import Leftcenter from "./left/left-center"
import Leftbottom from './left/left-bottom'
const Left = () => {
@ -8,7 +8,7 @@ const Left = () => {
<>
<div style={{ width: "23%", height: "100%", float: "left", marginLeft: "1%" }}>
<Lefttop />
<Leftcenter />
<Leftbottom />
</div>
</>

144
web/client/src/sections/quanju/containers/footer/leadership/left/echarts/leftbottomecharts.js

@ -3,67 +3,139 @@ import * as echarts from 'echarts';
const Leftbottomecharts = () => {
const chartRef = useRef(null);
useEffect(() => {
let chartInstance = echarts.init(chartRef.current);
var chartInstance = echarts.init(chartRef.current);
const option = {
xAxis: {
type: "category",
data: ["街道1", "街道2", "街道3", "街道4", "街道5", "街道6", "街道7"],
},
yAxis: [
{ type: "value" },
{
type: "value",
nameTextStyle: {
color: "#ccc",
title: {
},
splitNumber: 5,
splitLine: {
show: true,
tooltip: {
trigger: "axis",
axisPointer: {
lineStyle: {
type: "dashed",
width: 1,
color: ["#ccc", "#ccc"],
color: "#57617B",
},
},
axisLabel: {
show: true,
textStyle: {
fontSize: 12,
},
legend: {
icon: "rect",
itemWidth: 14,
itemHeight: 5,
itemGap: 13,
data: ["移动"],
right: "4%",
// textStyle: {
// fontSize: 12,
// color: "#F1F1F3",
// },
},
grid: {
top: "18%",
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true,
},
xAxis: [
{
type: "category",
boundaryGap: true,
axisTick: {
show: false,
},
axisLine: {
lineStyle: {
color: "rgba(176,215,255,0.4)",
},
},
data: [
"13:00",
"13:05",
"13:10",
"13:15",
],
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
normal: {
lineStyle: {
color: "red"//折线的颜色
}
}
},
],
yAxis: [
{
// type: "value",
// show: true,
// type: "value",
splitLine: {
show: true,
lineStyle: {
color: "rgba(176,215,255,0.2500)",
type: "dashed"
}
}, //去除网格线
// nameTextStyle: {
// color: "#abb8ce",
// },
// axisLabel: {
// color: "#abb8ce",
// },
axisTick: {
//y轴刻度线
show: false,
},
textStyle: {
color: "#fff",
align: "left",
fontSize: 14,
axisLine: {
// y轴
show: false,
},
backgroundColor: "rgba(0,0,0,0.8)",
},
],
series: [
{
name: "完成率",
data: [50, 130, 124, 18, 35, 47, 160],
yAxisIndex: 1,
// name: "移动",
type: "line",
smooth: true,
symbol: "circle",
symbolSize: 5,
showSymbol: false,
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "rgba(176,215,255,0.2500)",
},
{
offset: 0.8,
color: "rgba(0,150,255,0)",
},
],
false
),
shadowBlur: 10,
},
},
data: [220, 182, 191, 134],
},
],
};
chartInstance.setOption(option);
window.addEventListener('resize', function () {
chartInstance.resize();
})
}, []);
return (
<>
<div ref={chartRef} style={{ height: "200px", width: "100%" }}></div>
<div style={{ width: "72px", height: "20px", backgroundColor: "rgba(216,240,255,0.1000)", float: "right", textAlign: "center", marginRight: "4%", borderLeft: "solid 2px #6E7A83" }}>
<p style={{ color: "rgba(216,240,255,0.8000)", fontSize: "0.4vh", lineHeight: "20px" }}>公里数Km</p></div>
<div ref={chartRef} style={{
height: "20vh", width: "100%"
}}></div>
</>
);
}

2
web/client/src/sections/quanju/containers/footer/leadership/left/left-bottom.js

@ -6,7 +6,7 @@ const Leftbottom = () => {
const style = { height: "28%", marginTop: "5%" }
return (
<>
<Module style={style} title={""}>
<Module style={style} title={"道路施工统计"}>
<Echartes />
</Module>
</>

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

@ -1,13 +1,95 @@
import React from 'react'
import React, { useEffect, useState } from 'react'
import Module from '../../../public/module'
import Lunbo from "../centerleft/lunbo/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 == 12) {
setNum(1);
setTu(list[0].img);
} else {
setNum(num + 1);
setTu(list[num].img);
}
}, 6000);
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", width: "100%", marginTop: index == 0 ? "4px" : "5px", listStyle: "none", backgroundColor: "pink" }} onMouseEnter={() => {
setTu(item.img);
setNum(index + 1);
setName(item.name)
// console.log(list);
}}>{item.name}</li>
// {/* </div> */}
// </div>
)
})
}
</div >
)
}
return (
<>
<Module style={style}>
<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: "1%", top: "30%" }} />
<span style={{ position: "absolute", color: "#FFFFFF", fontSize: "24px", fontFamily: "YouSheBiaoTiHei", left: "10%" }}>主要路段拥堵情况分析</span>
<img src='/assets/images/leadership/zibiaoti.png' style={{ width: "95%", height: "28px", position: "absolute", top: "12px", left: "6%" }} />
</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: ""
}}><span style={{ marginLeft: "13%", color: "#FFFFFF", fontSize: "12px", fontFamily: "PingFangSC-Regular, PingFang SC", fontWeight: 400 }}>{item.name}</span></p>
</div> : ""
})
</Module>
}
</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>
</>
)
}

39
web/client/src/sections/quanju/containers/footer/leadership/left/left-top.js

@ -1,12 +1,47 @@
import React from 'react'
import Module from '../../../public/module'
import Leftcenter from './left-center'
const Lefttop = () => {
const style = { height: "25%", height: "35%" }
const style = { height: "68%" }
return (
<>
<Module style={style} title={"道路拥堵指数"} >
{/* <div style={{ width: "40%", height: "40%", background: "red" }}></div> */}
<div style={{ width: "100%", height: "60%", position: "relative" }}>
<div style={{ width: "50%", height: "100%" }}>
<div style={{ width: "100%", height: "30%" }}>
<img src='/assets/images/leadership/road.png' style={{ width: "15%", height: "30%", position: "absolute", left: "10%" }} />
<p style={{
fontSize: "14px", fontFamily: "PingFangSC-Regular, PingFang SC", color: "rgba(216,240,255,0.8000)",
position: "absolute", left: "30%", top: "5%"
}}>路况</p>
<p style={{ fontSize: "24px", fontFamily: "YouSheBiaoTiHei", color: "#ffffff", position: "absolute", top: "12%", left: "30%" }}>畅通</p>
</div>
<div style={{ width: "100%", height: "30%" }}>
<img src='/assets/images/leadership/pingshi.png' style={{ width: "15%", height: "30%", position: "absolute", left: "10%" }} />
<p style={{
fontSize: "14px", fontFamily: "PingFangSC-Regular, PingFang SC", color: "rgba(216,240,255,0.8000)",
position: "absolute", left: "30%", top: "35%"
}}>平均时速</p>
<p style={{ fontSize: "24px", fontFamily: "YouSheBiaoTiHei", color: "#ffffff", position: "absolute", top: "42%", left: "30%" }}>55.2<span style={{ fontSize: "2px", color: "#EEF4FF" }}>Km/h</span></p>
</div>
<div style={{ width: "100%", height: "30%" }}>
<img src='/assets/images/leadership/mingri.png' style={{ width: "15%", height: "30%", position: "absolute", left: "10%" }} />
<p style={{
fontSize: "14px", fontFamily: "PingFangSC-Regular, PingFang SC", color: "rgba(216,240,255,0.8000)",
position: "absolute", left: "30%", top: "65%"
}}>预测明日</p>
<p style={{ fontSize: "24px", fontFamily: "YouSheBiaoTiHei", color: "#ffffff", position: "absolute", top: "72%", left: "30%" }}>55.2<span style={{ fontSize: "2px", color: "#EEF4FF" }}>Km/h</span></p>
</div>
</div>
<div>
</div>
</div>
<div style={{ width: "100%", height: "40%", position: "relative", /* top: "63%" */ }}>
<Leftcenter />
</div>
</Module>
</>
)

3
web/client/src/sections/quanju/containers/footer/leadership/right/left.less

@ -0,0 +1,3 @@
li{
list-style-type:none
}

139
web/client/src/sections/quanju/containers/footer/leadership/right/lunbo.js

@ -0,0 +1,139 @@
'use strict'
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>
{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 >
)
}
}

74
web/client/src/sections/quanju/containers/footer/leadership/right/right-bottom.js

@ -1,12 +1,80 @@
import React from 'react'
import React, { useState, useEffect } from 'react'
import Module from '../../../public/module'
import Lun from "./lunbo"
import "./left.less"
const Rightbottom = () => {
const style = { height: "28%", marginTop: "4%" }
const [beijing, setBeijing] = useState()
const [list, setList] = useState([{ name: "苏LD1112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD11121", chaoxian: "30%", penalty: "-6分和扣200元", days: "2022年5月4日" },
{ name: "苏LD112512121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏L1112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD1151121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD1112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD11912121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD16112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏L2D111221", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "62", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD11152121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏L1D1112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD11512121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD13112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD111612121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD111216221", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏L63D1112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD163112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD162112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" },
{ name: "苏LD651112121", chaoxian: "30%", penalty: "-6分", days: "2022年5月4日" }])
const renderBody = () => {
return (
<>
<Module style={style}>
// <div style={{ width: "100%", height: "100%" }}>{
// lists.map((item, index) => {
// return (<div >
// <div style={{ width: "100%", height: "100%", }}>
// <li style={{ height: "20px", width: "100%", marginTop: index == 0 ? "4px" : "5px", listStyle: "none", backgroundColor: "pink" }} onMouseEnter={() => {
// }}>{item.name}</li>
// </div>
// </div>)
// })
// }
// </div >
<div style={{ width: "100%", height: "50%" }}>
{list.map((item, index) => {
return <li style={{ width: "100%", height: "3vh", marginTop: "5px", backgroundColor: beijing == item.name ? "rgba(0,124,230,1) " : "" }} onMouseEnter={() => {
setBeijing(item.name)
console.log(beijing);
}}>
<div style={{ width: "30%", height: "100%", float: "left", textAlign: "center", lineHeight: "3vh", fontSize: "14px", color: beijing == item.name ? "#FFFFFF" : "rgba(216,240,255,0.8000)" }}>{item.name}</div>
<div style={{ width: "10%", height: "100%", float: "left", textAlign: "center", lineHeight: "3vh", fontSize: "14px", color: beijing == item.name ? "#FFFFFF" : "rgba(216,240,255,0.8000)" }}>{item.chaoxian}</div>
<div style={{ width: "30%", height: "100%", float: "left", textAlign: "center", lineHeight: "3vh", fontSize: "14px", color: beijing == item.name ? "#FFFFFF" : "rgba(216,240,255,0.8000)" }}>{item.penalty}</div>
<div style={{ width: "30%", height: "100%", float: "left", textAlign: "center", lineHeight: "3vh", fontSize: "14px", color: beijing == item.name ? "#FFFFFF" : "rgba(216,240,255,0.8000)" }}>{item.days}</div></li>
})
}
</div>
)
}
return (
<>
<Module style={style} title={"治超详情"}>
<div style={{ position: "relative", width: "90%", height: "5%", left: "5%", textAlign: "right", fontSize: "16px", top: "-3%", color: "rgba(216,240,255,0.8)" }}>
<img src='/assets/images/leadership/jiejue.png' style={{ width: "4.5%", height: "2vh", marginTop: "-1%" }} />
已处理<span>192</span>
</div>
<div style={{ width: "90%", height: "3vh", backgroundColor: "rgba(21,77,160,0.2)", position: "relative", left: "5%", top: "5%" }}>
<p style={{ width: "30%", fontSize: "12px", color: "#FFFFFF", height: "100%", textAlign: "center", position: "absolute", lineHeight: "3vh" }}>车牌号</p>
<p style={{ width: "10%", fontSize: "12px", color: "#FFFFFF", height: "100%", textAlign: "center", position: "absolute", lineHeight: "3vh", left: "30%" }}>超限</p>
<p style={{ width: "30%", fontSize: "12px", color: "#FFFFFF", height: "100%", textAlign: "center", position: "absolute", lineHeight: "3vh", left: "40%" }}>处罚</p>
<p style={{ width: "30%", fontSize: "12px", color: "#FFFFFF", height: "100%", textAlign: "center", position: "absolute", lineHeight: "3vh", left: "70%" }}>日期</p>
</div>
<Lun
content={renderBody()}
containerStyle={{ position: "relative", height: "70%", width: "90%", left: "5%", top: "8%" }}
divHeight={"100%"}
divId={"screen-slope-midde-top"}
/>
</Module>
</>
)

25
web/client/src/sections/quanju/containers/public/left.less

@ -0,0 +1,25 @@
#scroll-2::-webkit-scrollbar{
width:4px;
height:4px;
}
#scroll-2::-webkit-scrollbar-track{
background: #f6f6f6;
border-radius:2px;
}
#scroll-2::-webkit-scrollbar-thumb{
background: #aaa;
border-radius:2px;
}
#scroll-2::-webkit-scrollbar-thumb:hover{
background: #747474;
}
#scroll-2::-webkit-scrollbar-corner{
background: #f6f6f6;
}
#screen-slope-midde-top-jiangxi{
& > div > div{
&:first-child{
margin-bottom: 1px;
}
}
}

139
web/client/src/sections/quanju/containers/public/lunbo.js

@ -0,0 +1,139 @@
'use strict'
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;
}
}, 300000);
}
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>
{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 >
)
}
}

5
web/client/src/sections/quanju/containers/public/module.js

@ -1,8 +1,9 @@
import React from 'react'
import "./font.css"
import "./left.less"
const Module = (props) => {
const { style, children, title } = props
const { style, children, title, hualun,customize } = props
return (
<>
<div style={{ width: style?.width || "100%", height: style?.height || "30%", backgroundColor: "rgba(0,33,98,0.8)", marginTop: style?.marginTop || "0" }}>
@ -12,7 +13,7 @@ const Module = (props) => {
<span style={{ position: "absolute", color: "#FFFFFF", fontSize: "24px", fontFamily: "YouSheBiaoTiHei", left: "10%" }}>{title || []}</span>
<img src='/assets/images/quanju/mokuaitou.png' style={{ width: "100%", height: "28px", position: "absolute", top: "12px" }} />
</div>
<div style={{ width: "100%", height: `calc(100% - 40px)` }}>
<div id='scroll-2' style={{ width: "100%", height: customize?`calc(100% - 40px)`:"80%", overflow: hualun }}>
{children}
</div>
</div>

2
web/client/src/themes/light.json

File diff suppressed because one or more lines are too long

19
web/client/src/utils/webapi.js

@ -38,15 +38,18 @@ export const ApiTable = {
getReportRectifyDetail: 'report/rectify/detail',
compileReportRectifyDetail: 'report/rectify/detail',
//报表下载
getReportList: 'report/list',
// 数据
getFundamental: 'daily/report/data/statistic',
getsortord: "daily/report/area/statistic?startDate={zuo}&endDate={day}",
//填报信息
getReportStatistic: 'report/management/statistic',
reportDownLoad: '_report/http'
//运政管理
getOperaTional:'vehicle',
getSpecificVehicle:'vehicle/specific',
getHouseholds:'vehicle/business',
//道路管理
getRoadway:'road',
//桥梁管理
getBridge:'bridge',
//工程数据
getProject:'project'
};
export const RouteTable = {
apiRoot: '/api/root',
fileUpload: '/_upload/new',

65
web/log/development.txt

@ -3415,5 +3415,70 @@
2022-07-18 17:40:02.984 - info: [Router] Inject api: attachment/index
2022-07-19 09:38:20.086 - debug: [FS-LOGGER] Init.
2022-07-19 09:38:20.998 - info: [Router] Inject api: attachment/index
<<<<<<< HEAD
2022-07-21 15:22:04.942 - debug: [FS-LOGGER] Init.
2022-07-21 15:22:05.542 - info: [Router] Inject api: attachment/index
2022-07-21 17:03:00.480 - debug: [FS-LOGGER] Init.
2022-07-21 17:03:01.177 - info: [Router] Inject api: attachment/index
2022-07-21 18:12:39.625 - error: [FS-ERRHD]
{
message: 'Error: connect ETIMEDOUT 10.8.30.157:8439',
name: 'RequestError',
cause: {
errno: -4039,
code: 'ETIMEDOUT',
syscall: 'connect',
address: '10.8.30.157',
port: 8439
},
error: { '$ref': '$["cause"]' },
options: {
jar: false,
url: 'http://10.8.30.157:8439/enterprises/undefined/members?token=215ed57a-8244-4523-b2ed-5a6b12b51711',
headers: {
host: '10.8.30.157:8439',
connection: 'keep-alive',
'sec-ch-ua': '" Not;A Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"',
expires: '-1',
'cache-control': 'no-cache,no-store,must-revalidate,max-age=-1,private',
'x-requested-with': 'XMLHttpRequest',
'sec-ch-ua-mobile': '?0',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62',
'sec-ch-ua-platform': '"Windows"',
accept: '*/*',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
referer: 'http://localhost:5000/quanju',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6'
},
encoding: null,
followRedirect: true,
method: 'GET',
body: '[object Object]',
simple: false,
resolveWithFullResponse: true,
callback: [Function: RP$callback],
transform: undefined,
transform2xxOnly: false
},
response: undefined,
stack: 'RequestError: Error: connect ETIMEDOUT 10.8.30.157:8439\n' +
' at new RequestError (F:\\4hao\\Highways4Good\\web\\node_modules\\request-promise-core\\lib\\errors.js:14:15)\n' +
' at Request.plumbing.callback (F:\\4hao\\Highways4Good\\web\\node_modules\\request-promise-core\\lib\\plumbing.js:87:29)\n' +
' at Request.RP$callback [as _callback] (F:\\4hao\\Highways4Good\\web\\node_modules\\request-promise-core\\lib\\plumbing.js:46:31)\n' +
' at self.callback (F:\\4hao\\Highways4Good\\web\\node_modules\\request\\request.js:185:22)\n' +
' at Request.emit (events.js:315:20)\n' +
' at Request.onRequestError (F:\\4hao\\Highways4Good\\web\\node_modules\\request\\request.js:877:8)\n' +
' at ClientRequest.emit (events.js:315:20)\n' +
' at Socket.socketErrorListener (_http_client.js:461:9)\n' +
' at Socket.emit (events.js:315:20)\n' +
' at emitErrorNT (internal/streams/destroy.js:96:8)\n' +
' at emitErrorCloseNT (internal/streams/destroy.js:68:3)\n' +
' at processTicksAndRejections (internal/process/task_queues.js:84:21)'
}
=======
2022-07-20 19:15:55.678 - debug: [FS-LOGGER] Init.
2022-07-20 19:15:56.118 - info: [Router] Inject api: attachment/index
>>>>>>> 65cf2722eec21e1d07ce958f4298eec7ae620c85

Loading…
Cancel
Save