Browse Source

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

release_0.0.1
巴林闲侠 3 years ago
parent
commit
89b758d497
  1. 5
      weapp/package-lock.json
  2. 1
      weapp/package.json
  3. 2
      weapp/src/actions/auth.js
  4. 1
      weapp/src/app.config.js
  5. 2
      weapp/src/config.js
  6. 2
      weapp/src/packages/patrol/index.jsx
  7. 10
      weapp/src/packages/patrol/index.scss
  8. 0
      weapp/src/packages/patrolView/index.config.js
  9. 144
      weapp/src/packages/patrolView/index.jsx
  10. 139
      weapp/src/packages/patrolView/index.scss
  11. 4
      weapp/src/pages/auth/login/login.jsx
  12. 12
      weapp/src/pages/home/index.jsx
  13. 6
      weapp/src/pages/user/index.jsx
  14. 2
      weapp/src/pages/user/index.scss
  15. 7
      weapp/src/services/api.js
  16. BIN
      weapp/src/static/img/patrolView/card-img.png
  17. BIN
      weapp/src/static/img/patrolView/chevron-down.png
  18. 30
      weapp/src/static/img/patrolView/conserve-active.svg
  19. 32
      weapp/src/static/img/patrolView/conserve.svg
  20. 29
      weapp/src/static/img/patrolView/patrol-active.svg
  21. 27
      weapp/src/static/img/patrolView/patrol.svg
  22. BIN
      weapp/src/static/img/patrolView/search.png
  23. 32
      web/client/assets/color.less
  24. BIN
      web/client/assets/images/quanju/search.png
  25. 3
      web/client/src/sections/organization/components/depModal.js
  26. 48
      web/client/src/sections/organization/containers/user.js
  27. 38
      web/client/src/sections/quanju/actions/example.js
  28. 43
      web/client/src/sections/quanju/containers/footer/build/index.js
  29. 110
      web/client/src/sections/quanju/containers/footer/conserve/chart/pie-chart.js
  30. 35
      web/client/src/sections/quanju/containers/footer/conserve/left/left-bottom.js
  31. 24
      web/client/src/sections/quanju/containers/footer/conserve/left/left-center.js
  32. 2
      web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js
  33. 38
      web/client/src/sections/quanju/containers/footer/conserve/right/right-bottom.js
  34. 4
      web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js
  35. 82
      web/client/src/sections/quanju/containers/footer/guanli/index.js
  36. 15
      web/client/src/sections/quanju/containers/footer/guanli/style.less
  37. 7
      web/client/src/sections/quanju/containers/footer/operation/index.js
  38. 180
      web/client/src/sections/quanju/containers/footer/operation/left.js
  39. 9
      web/client/src/sections/quanju/containers/footer/operation/right.js
  40. 11
      web/client/src/sections/quanju/nav-item.js
  41. 15
      web/client/src/utils/webapi.js

5
weapp/package-lock.json

@ -9532,6 +9532,11 @@
"resolved": "http://10.8.30.22:7000/mobile-detect/-/mobile-detect-1.4.5.tgz",
"integrity": "sha1-2jk8PEE8oam83ZztZTw4KBwPtq0="
},
"moment": {
"version": "2.29.1",
"resolved": "http://npm.anxinyun.cn/moment/-/moment-2.29.1.tgz",
"integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "http://10.8.30.22:7000/move-concurrently/-/move-concurrently-1.0.1.tgz",

1
weapp/package.json

@ -46,6 +46,7 @@
"@tarojs/taro": "3.1.4",
"dayjs": "^1.9.8",
"deepmerge": "^4.0.0",
"moment": "^2.29.1",
"react": "^16.10.0",
"react-dom": "^16.10.0",
"swr": "^0.5.4",

2
weapp/src/actions/auth.js

@ -37,7 +37,7 @@ export const login = (url, data) => {
export const logout = (url, data) => {
return request.post(url, data).then(res => {
return request.put(url, data).then(res => {
if (res.statusCode == 200 || res.statusCode == 204) {
Taro.clearStorage();
return res.data;

1
weapp/src/app.config.js

@ -8,6 +8,7 @@ export default {
'root': 'packages/',
'pages': [
'patrol/index',
'patrolView/index'
]
}],
permission: {

2
weapp/src/config.js

@ -8,7 +8,7 @@ const baseConfig = {
};
const development = {
baseUrl: 'https://smartwater.anxinyun.cn/api',
baseUrl: 'https://3024-117-90-36-177.jp.ngrok.io',
webUrl: 'https://smartwater.anxinyun.cn',
pcode: 'fce4afe2-5b6a-408a-ab18-a2afa7fa027c',
imgUrl: 'http://test.resources.anxinyun.cn/',

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

@ -81,7 +81,7 @@ const Index = () => {
}, [images])
return (
<View className='patrol'>
<View>
<View className='report-type'>
<View className='text'>上报类型</View>
<RadioGroup onChange={onTypeChange}>

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

@ -1,13 +1,12 @@
.patrol {
height: 100vh;
page {
height: 100%;
width: 100vw;
background-color: #f6f6f6;
padding-top: 20px;
.report-type {
height: 96px;
background-color: #fff;
margin-bottom: 20px;
margin: 20px auto;
display: flex;
justify-content: space-between;
align-items: center;
@ -53,6 +52,7 @@
.horizontal-line {
height: 30px;
width: 100%;
border-radius: 5px;
display: flex;
justify-content: left;
align-items: center;
@ -111,6 +111,6 @@
.sub-btn {
width: 70%;
margin-top: 100px;
margin: 80px auto;
}
}

0
weapp/src/packages/patrolView/index.config.js

144
weapp/src/packages/patrolView/index.jsx

@ -0,0 +1,144 @@
import React, { useState, useEffect } from 'react'
import Taro, { useDidShow } from '@tarojs/taro'
import { View, Picker, Input, Image } from '@tarojs/components'
import moment from 'moment'
import './index.scss'
import NoData from '@/components/no-data/noData'
import request from '@/services/request'
import { getReportList } from '@/services/api';
import chevronDown from '../../static/img/patrolView/chevron-down.png'
import searchIcon from '../../static/img/patrolView/search.png'
import cardImg from '../../static/img/patrolView/card-img.png'
import patrolIcon from '../../static/img/patrolView/patrol.svg'
import patrolActiveIcon from '../../static/img/patrolView/patrol-active.svg'
import conserveIcon from '../../static/img/patrolView/conserve.svg'
import conserveActiveIcon from '../../static/img/patrolView/conserve-active.svg'
function Index() {
const [isPatrol, setIsPatrol] = useState(true)
const [datePicker, setDatePicker] = useState(moment().format('YYYY-MM-DD'))
const [listData, setListData] = useState([])
const [inputSite, setInputSite] = useState('')
const [page, setPage] = useState(0)
const [total, setTotal] = useState(0)
const [num, setNum] = useState(Math.random())
const [systemInfo, setSystemInfo] = useState('')
const userInfo = Taro.getStorageSync('userInfo') || {};
function dealError(error) {
Taro.showToast({
title: error,
icon: 'none',
duration: 1500
});
throw new Error(error);
}
useEffect(() => {
request.get(getReportList(),{}, { hideErrorToast: true, hideLoading: true }).then(res => {
if (res.statusCode == 200) {
console.log(res);
setListData(res.data)
return res.data;
} else {
dealError(res.data.message || '请求出错');
}
}, err => {
dealError(err.message || '请求出错');
});
}, [])
useDidShow(() => {
let refresh = Taro.getStorageSync('refresh'); //
if (refresh) {
setPage(0)
setNum(Math.random())
Taro.removeStorageSync('refresh'); //
}
Taro.getSystemInfo({
success: (res) => {
// windows | macpc
// android | ios
setSystemInfo(res.platform);
}
});
})
const onTypeChange = bool => {
setIsPatrol(bool)
}
const onDateChange = e => {
setDatePicker(e.detail.value);
}
const handleConfirm = () => {
setPage(0)
setListData([]);
setTotal(0);
setNum(Math.random())
}
const handleInput = e => {
setInputSite(e.detail.value);
if (!e.detail.value) {
setPage(0)
setListData([]);
setTotal(0);
setNum(Math.random())
}
}
return (
<View>
<View className='type-box'>
<View className='item' onClick={() => onTypeChange(true)}>
<Image className='type-img' src={isPatrol ? patrolActiveIcon : patrolIcon} />
<View style={{color: isPatrol ? '#346FC2': '#999999'}}>巡查</View>
</View>
<View className='line'></View>
<View className='item' onClick={() => onTypeChange(false)}>
<Image className='type-img' src={isPatrol ? conserveIcon : conserveActiveIcon} />
<View style={{color: isPatrol ? '#999999': '#346FC2'}}>养护</View>
</View>
</View>
<View className='filter-box'>
<View className='filter-item'>
<View style={{ float: 'left', marginLeft: '20rpx', color: '#333' }}>日期</View>
<Picker className='picker' style={{ overflow: 'hidden', float: 'left' }} mode='date' end={(systemInfo == 'windows' || systemInfo == 'mac') ? moment().add(1, 'd').format('YYYY-MM-DD') : moment().format('YYYY-MM-DD')} onChange={onDateChange}>
<View className='filter-name'>{datePicker || '请选择'}</View>
<Image className='filter-img' src={chevronDown} />
</Picker>
</View>
<View class='head-search'>
<Image className='search-img' src={searchIcon} />
<Input class='heard-search-input' value={inputSite} placeholder='请输入场所名称' onConfirm={handleConfirm} onInput={handleInput} />
</View>
</View>
<View style={{ marginTop: '110px' }}>
{
listData && listData.length > 0 ? listData && listData.map((e, index) => {
return (
<View className='cardBox' key={index} onClick={() => handleDetail(index)}>
<View className='card-item' >
<Image className='card-bg' src={cardImg} />
<View className='card-position'>
<View className='card-title'>{e.road}</View>
<View style={{ float: 'left', width: '100%', fontSize: '28rpx', marginTop: '16rpx' }}>
<View style={{ float: 'left' }}>填报人</View>
<View style={{ float: 'left' }}>{e.user.name}</View>
</View>
<View className='card-date'>{moment(e.time).format('YYYY-MM-DD HH:mm:ss')}</View>
</View>
</View>
</View>
)
}) : <NoData top='400rpx'></NoData>
}
</View>
</View>
)
}
export default Index

139
weapp/src/packages/patrolView/index.scss

@ -0,0 +1,139 @@
page {
background-color: #f6f6f6;
.type-box {
position: fixed;
top: 0px;
width: 100%;
z-index: 100;
background-color: #fff;
height: 80px;
display: flex;
justify-content: space-around;
align-items: center;
.item {
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
.type-img {
width: 40px;
height: 40px;
margin: 0 10px;
}
}
.line {
width: 1px;
height: 30px;
background-color: #f6f6f6;
}
}
.filter-box {
position: fixed;
top: 80px;
display: flex;
width: 100%;
z-index: 100;
background: #fff;
color: #999999;
font-size: 28rpx;
border-top: 2rpx solid #f6f6f6;
.filter-item {
overflow: hidden;
height: 98rpx;
line-height: 98rpx;
flex: 1;
.filter-name {
float: left;
// margin-left: 20rpx;
}
.filter-img {
width: 14px;
height: 8px;
float: left;
margin: 46rpx 20rpx 18rpx 10rpx;
}
}
.head-search {
width: 400rpx;
display: flex;
background: #fff;
padding: 10rpx 26rpx 15rpx;
box-sizing: border-box;
border-radius: 50rpx;
box-shadow: 0 8rpx 10rpx 0rpx #00000008;
border: 2rpx solid #00000011;
height: 68rpx;
line-height: 68rpx;
margin: 14rpx 30rpx 14rpx 0;
.search-img {
width: 36rpx;
height: 36rpx;
margin-top: 5rpx;
}
.heard-search-input {
margin-left: 26rpx;
font-size: 28rpx;
width: 100%;
color: #333;
}
}
}
.cardBox {
width: 690rpx;
margin: 40rpx auto;
.card-item {
position: relative;
margin-bottom: 10rpx;
.card-bg {
width: 100%;
height: 260rpx;
display: block;
}
.card-position {
position: absolute;
top: 0;
left: 0;
width: 88%;
padding: 16rpx 0 16rpx 36rpx;
overflow: hidden;
text-align: justify;
.card-title {
font-size: 28rpx;
color: #333333;
float: left;
margin-bottom: 30rpx;
width: 470rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
margin-top: 8rpx;
}
.card-date {
float: left;
font-size: 28rpx;
color: #999999;
margin-top: 30rpx;
width: 100%;
}
}
}
}
}

4
weapp/src/pages/auth/login/login.jsx

@ -18,7 +18,7 @@ const LoginPage = (props) => {
const [password, setPassword] = useState('');
const doLogin = () => {
login(getLoginUrl(), { username, password, pcode }).then(res => {
login(getLoginUrl(), { phone: username, password }).then(res => {
Taro.reLaunch({
url: '/pages/home/index'
});
@ -50,7 +50,7 @@ const LoginPage = (props) => {
<View className='form-label'>登录</View>
<View className='form-input'>
<Image className='icon-phone' src={PhoneIcon}></Image>
<Input name='username' value={username} placeholder='请输入账号' onInput={handleUsernameChange} />
<Input name='username' value={username} placeholder='请输入账号' maxlength={11} onInput={handleUsernameChange} />
</View>
</View>
<View className='form-item'>

12
weapp/src/pages/home/index.jsx

@ -4,20 +4,28 @@ import { View } from '@tarojs/components';
import { useIndustry } from '@/actions/business';
import './index.scss';
const Index = () => {
const userInfo = Taro.getStorageSync('userInfo') || {};
const isSuperAdmin = userInfo && userInfo.username === 'SuperAdmin' ? true : false
function toPatrol() {
Taro.navigateTo({
url: '/packages/patrol/index'
})
}
function toPatrolView() {
Taro.navigateTo({
url: '/packages/patrolView/index'
})
}
return (
<View className='page'>
<View className='fill'>
<View className='title'> </View>
<View className='btn' onClick={toPatrol}>填报</View>
<View className='btn' onClick={isSuperAdmin ? toPatrolView : toPatrol}>
{isSuperAdmin ? '查看' : '填报'}
</View>
</View>
</View>
);

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

@ -10,6 +10,8 @@ import moreImg from '../../static/img/my/more.svg';
import pswdImg from '../../static/img/my/pswd.svg';
import reportImg from '../../static/img/my/report.svg';
import Common from '../../components/echartForWx/common'; //
const { webUrl } = cfg;
const Index = ({ ...props }) => {
@ -27,14 +29,14 @@ const Index = ({ ...props }) => {
});
}
console.log(userInfo)
return (
<View className='page'>
<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-username'>{userInfo.name}</View>
<View className='my-phone'>{userInfo.phone}</View>
</View>
</View>

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

@ -1,6 +1,6 @@
.page {
height: 100vh;
background: #F0F2F5;
background: #f6f6f6;
display: flex;
flex-direction: column;

7
weapp/src/services/api.js

@ -1,13 +1,16 @@
export const getLoginUrl = () => {
return `/login`;
return `/wxLogin`;
};
export const getLogoutUrl = () => {
return `/logout`;
};
export const getReportList = () => {
return `/report/list`;
};
//行业查询
export const getIndustryUrl = () => {
return `/elec/business/industry`

BIN
weapp/src/static/img/patrolView/card-img.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
weapp/src/static/img/patrolView/chevron-down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

30
weapp/src/static/img/patrolView/conserve-active.svg

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M15.0846429,-3.19744231e-14 C16.379408,-3.19744231e-14 17.4311429,1.05173482 17.4311429,2.3465 L17.4311429,2.3465 L17.431,7.199 L16.09,7.199 L16.0902857,2.3465 C16.0902857,1.83095839 15.7018925,1.40574078 15.2018846,1.34762572 L15.0846429,1.34085714 L2.3465,1.34085714 C1.79130134,1.34085714 1.34085714,1.79130134 1.34085714,2.3465 L1.34085714,2.3465 L1.34085714,16.4255 C1.34085714,16.9806987 1.79130134,17.4311429 2.3465,17.4311429 L2.3465,17.4311429 L10.399,17.431 L10.399,18.771 L2.3465,18.772 C1.10568337,18.772 0.0880664962,17.8060838 0.00541928549,16.5860214 L-1.52766688e-13,16.4255 L-1.52766688e-13,2.3465 C-1.52766688e-13,1.05173482 1.05173482,-3.19744231e-14 2.3465,-3.19744231e-14 L2.3465,-3.19744231e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_养护-查看(管理员)备份" transform="translate(-236.000000, -80.000000)">
<g id="编组-11" transform="translate(188.000000, 64.000000)">
<g id="编组-9" transform="translate(47.997085, 16.000000)">
<g id="编组" transform="translate(0.000000, 1.000000)">
<g id="baobiaoxinxi">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#346FC2" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.7268571,3.44171429 L3.35214286,3.44171429 C2.98131205,3.44171429 2.68171429,3.74131205 2.68171429,4.11214286 C2.68171429,4.48297366 2.98131205,4.78257143 3.35214286,4.78257143 L10.7268571,4.78257143 C11.0976879,4.78257143 11.3972857,4.48297366 11.3972857,4.11214286 C11.3972857,3.74131205 11.0976879,3.44171429 10.7268571,3.44171429 Z M8.71557143,6.79385714 L3.35214286,6.79385714 C2.98131205,6.79385714 2.68171429,7.09345491 2.68171429,7.46428571 C2.68171429,7.83511652 2.98131205,8.13471429 3.35214286,8.13471429 L8.71557143,8.13471429 C9.08640223,8.13471429 9.386,7.83511652 9.386,7.46428571 C9.386,7.09345491 9.08640223,6.79385714 8.71557143,6.79385714 Z M8.04514286,10.146 L3.35214286,10.146 C2.98131205,10.146 2.68171429,10.4455978 2.68171429,10.8164286 C2.68171429,11.1872594 2.98131205,11.4868571 3.35214286,11.4868571 L8.04514286,11.4868571 C8.41597366,11.4868571 8.71557143,11.1872594 8.71557143,10.8164286 C8.71557143,10.4455978 8.41597366,10.146 8.04514286,10.146 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#346FC2" fill-rule="nonzero"></path>
</g>
<g id="安全" transform="translate(10.400000, 8.000000)" fill-rule="nonzero">
<path d="M4.78695925,0 C4.93907576,0.00640053734 5.08980912,0.0297722448 5.23590669,0.0696107894 L6.04411885,0.208832358 L8.36786225,0.609156306 L9.05623052,0.727568957 L9.34049272,0.779838978 C9.4208346,0.810990397 9.48880882,0.864472181 9.53507221,0.932933165 C9.63249541,1.08156829 9.59139082,1.55819161 9.59139082,1.80319184 L9.59139082,5.50346339 C9.61652657,5.96040515 9.57368429,6.41838192 9.46407338,6.86446572 C8.99137069,8.33273307 7.79319884,9.18292601 6.4332778,9.82676385 C6.08530742,9.98485807 5.72897142,10.1265716 5.36562634,10.2513649 C5.20282115,10.3160622 5.03359547,10.3658437 4.86036029,10.4 C4.64335359,10.3870561 4.43113161,10.3350591 4.23551727,10.2469058 C3.73232522,10.0790571 3.24437148,9.87419842 2.77630464,9.63428136 C1.51220531,8.94337573 0.478718689,8.15338002 0.0786163109,6.65464247 C0.0100051608,6.28669909 -0.0138107298,5.91276209 0.00761749245,5.53987899 L0.00761749245,1.29857558 C-0.00280932948,1.19346977 0.00621802142,1.08748301 0.0343087764,0.985203186 C0.0694100914,0.910412579 0.128138143,0.847268253 0.202730795,0.804116045 C0.311478278,0.763156781 0.426158841,0.737361587 0.543044695,0.727568957 L1.25410057,0.605688156 L4.78695925,0 Z" id="形状" fill="#346FC2"></path>
<path d="M6.97244179,3.62966986 C7.12551092,3.62261751 7.2698436,3.69606432 7.34574703,3.81963432 C7.42165046,3.94320431 7.41622191,4.09589198 7.33170651,4.21454909 C7.23412465,4.32746529 7.12228858,4.42909934 6.99859925,4.51726931 L6.51602079,4.94905436 L5.161438,6.16018294 L4.74612158,6.53177075 C4.65113084,6.64886544 4.49426844,6.70774773 4.33827872,6.68486494 C4.12314695,6.64374256 3.91709022,6.38759468 3.77776171,6.25679577 L2.59533772,5.16036396 C2.41468782,5.0309278 2.37230178,4.79402906 2.49818143,4.61735029 C2.6328091,4.45991435 2.87451189,4.4236182 3.05576241,4.53361917 L4.41381506,5.79379734 L4.47387046,5.73805917 L5.0536052,5.21957029 L6.22108207,4.18209709 L6.60650425,3.83751131 C6.66867923,3.7766839 6.73626966,3.72083045 6.80855729,3.67054451 C6.86219988,3.65426237 6.91683481,3.64094445 6.97217488,3.63066076 L6.97244179,3.62966986 Z" id="路径" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

32
weapp/src/static/img/patrolView/conserve.svg

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M15.0846429,-3.19744231e-14 C16.379408,-3.19744231e-14 17.4311429,1.05173482 17.4311429,2.3465 L17.4311429,2.3465 L17.431,7.199 L16.09,7.199 L16.0902857,2.3465 C16.0902857,1.83095839 15.7018925,1.40574078 15.2018846,1.34762572 L15.0846429,1.34085714 L2.3465,1.34085714 C1.79130134,1.34085714 1.34085714,1.79130134 1.34085714,2.3465 L1.34085714,2.3465 L1.34085714,16.4255 C1.34085714,16.9806987 1.79130134,17.4311429 2.3465,17.4311429 L2.3465,17.4311429 L10.399,17.431 L10.399,18.771 L2.3465,18.772 C1.10568337,18.772 0.0880664962,17.8060838 0.00541928549,16.5860214 L-1.52766688e-13,16.4255 L-1.52766688e-13,2.3465 C-1.52766688e-13,1.05173482 1.05173482,-3.19744231e-14 2.3465,-3.19744231e-14 L2.3465,-3.19744231e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_巡查-查看(管理员)" transform="translate(-236.000000, -80.000000)">
<g id="编组-7" transform="translate(0.000000, 64.000000)">
<g id="编组-11" transform="translate(188.000000, 0.000000)">
<g id="编组-9" transform="translate(47.997085, 16.000000)">
<g id="编组" transform="translate(0.000000, 1.000000)">
<g id="baobiaoxinxi">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#999999" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.7268571,3.44171429 L3.35214286,3.44171429 C2.98131205,3.44171429 2.68171429,3.74131205 2.68171429,4.11214286 C2.68171429,4.48297366 2.98131205,4.78257143 3.35214286,4.78257143 L10.7268571,4.78257143 C11.0976879,4.78257143 11.3972857,4.48297366 11.3972857,4.11214286 C11.3972857,3.74131205 11.0976879,3.44171429 10.7268571,3.44171429 Z M8.71557143,6.79385714 L3.35214286,6.79385714 C2.98131205,6.79385714 2.68171429,7.09345491 2.68171429,7.46428571 C2.68171429,7.83511652 2.98131205,8.13471429 3.35214286,8.13471429 L8.71557143,8.13471429 C9.08640223,8.13471429 9.386,7.83511652 9.386,7.46428571 C9.386,7.09345491 9.08640223,6.79385714 8.71557143,6.79385714 Z M8.04514286,10.146 L3.35214286,10.146 C2.98131205,10.146 2.68171429,10.4455978 2.68171429,10.8164286 C2.68171429,11.1872594 2.98131205,11.4868571 3.35214286,11.4868571 L8.04514286,11.4868571 C8.41597366,11.4868571 8.71557143,11.1872594 8.71557143,10.8164286 C8.71557143,10.4455978 8.41597366,10.146 8.04514286,10.146 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#999999" fill-rule="nonzero"></path>
</g>
<g id="安全" transform="translate(10.400000, 8.000000)" fill-rule="nonzero">
<path d="M4.78695925,0 C4.93907576,0.00640053734 5.08980912,0.0297722448 5.23590669,0.0696107894 L6.04411885,0.208832358 L8.36786225,0.609156306 L9.05623052,0.727568957 L9.34049272,0.779838978 C9.4208346,0.810990397 9.48880882,0.864472181 9.53507221,0.932933165 C9.63249541,1.08156829 9.59139082,1.55819161 9.59139082,1.80319184 L9.59139082,5.50346339 C9.61652657,5.96040515 9.57368429,6.41838192 9.46407338,6.86446572 C8.99137069,8.33273307 7.79319884,9.18292601 6.4332778,9.82676385 C6.08530742,9.98485807 5.72897142,10.1265716 5.36562634,10.2513649 C5.20282115,10.3160622 5.03359547,10.3658437 4.86036029,10.4 C4.64335359,10.3870561 4.43113161,10.3350591 4.23551727,10.2469058 C3.73232522,10.0790571 3.24437148,9.87419842 2.77630464,9.63428136 C1.51220531,8.94337573 0.478718689,8.15338002 0.0786163109,6.65464247 C0.0100051608,6.28669909 -0.0138107298,5.91276209 0.00761749245,5.53987899 L0.00761749245,1.29857558 C-0.00280932948,1.19346977 0.00621802142,1.08748301 0.0343087764,0.985203186 C0.0694100914,0.910412579 0.128138143,0.847268253 0.202730795,0.804116045 C0.311478278,0.763156781 0.426158841,0.737361587 0.543044695,0.727568957 L1.25410057,0.605688156 L4.78695925,0 Z" id="形状" fill="#999999"></path>
<path d="M6.97244179,3.62966986 C7.12551092,3.62261751 7.2698436,3.69606432 7.34574703,3.81963432 C7.42165046,3.94320431 7.41622191,4.09589198 7.33170651,4.21454909 C7.23412465,4.32746529 7.12228858,4.42909934 6.99859925,4.51726931 L6.51602079,4.94905436 L5.161438,6.16018294 L4.74612158,6.53177075 C4.65113084,6.64886544 4.49426844,6.70774773 4.33827872,6.68486494 C4.12314695,6.64374256 3.91709022,6.38759468 3.77776171,6.25679577 L2.59533772,5.16036396 C2.41468782,5.0309278 2.37230178,4.79402906 2.49818143,4.61735029 C2.6328091,4.45991435 2.87451189,4.4236182 3.05576241,4.53361917 L4.41381506,5.79379734 L4.47387046,5.73805917 L5.0536052,5.21957029 L6.22108207,4.18209709 L6.60650425,3.83751131 C6.66867923,3.7766839 6.73626966,3.72083045 6.80855729,3.67054451 C6.86219988,3.65426237 6.91683481,3.64094445 6.97217488,3.63066076 L6.97244179,3.62966986 Z" id="路径" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

29
weapp/src/static/img/patrolView/patrol-active.svg

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M14.5044643,-6.34022749e-14 C15.7494308,-6.34022749e-14 16.7607143,1.01128348 16.7607143,2.25625 L16.7607143,2.25625 L16.76,6.923 L15.471,6.923 L15.4714286,2.25625 C15.4714286,1.76053691 15.0979736,1.35167382 14.6171968,1.29579396 L14.5044643,1.28928571 L2.25625,1.28928571 C1.72240513,1.28928571 1.28928571,1.72240513 1.28928571,2.25625 L1.28928571,2.25625 L1.28928571,15.79375 C1.28928571,16.3275949 1.72240513,16.7607143 2.25625,16.7607143 L2.25625,16.7607143 L10,16.76 L10,18.049 L2.25625,18.05 C1.06315709,18.05 0.0846793232,17.1212344 0.00521085144,15.9480975 L-2.95011878e-13,15.79375 L-2.95011878e-13,2.25625 C-2.95011878e-13,1.01128348 1.01128348,-6.34022749e-14 2.25625,-6.34022749e-14 L2.25625,-6.34022749e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_巡查-查看(管理员)" transform="translate(-59.000000, -81.000000)">
<g id="编组-7" transform="translate(0.000000, 64.000000)">
<g id="编组-10" transform="translate(15.000000, 0.000000)">
<g id="编组-8" transform="translate(44.000000, 17.000000)">
<g id="baobiaoxinxi" transform="translate(0.000000, 1.000000)">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#346FC2" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.3142857,3.30934066 L3.22321429,3.30934066 C2.86664621,3.30934066 2.57857143,3.59741544 2.57857143,3.95398352 C2.57857143,4.3105516 2.86664621,4.59862637 3.22321429,4.59862637 L10.3142857,4.59862637 C10.6708538,4.59862637 10.9589286,4.3105516 10.9589286,3.95398352 C10.9589286,3.59741544 10.6708538,3.30934066 10.3142857,3.30934066 Z M8.38035714,6.53255495 L3.22321429,6.53255495 C2.86664621,6.53255495 2.57857143,6.82062972 2.57857143,7.1771978 C2.57857143,7.53376588 2.86664621,7.82184066 3.22321429,7.82184066 L8.38035714,7.82184066 C8.73692522,7.82184066 9.025,7.53376588 9.025,7.1771978 C9.025,6.82062972 8.73692522,6.53255495 8.38035714,6.53255495 Z M7.73571429,9.75576923 L3.22321429,9.75576923 C2.86664621,9.75576923 2.57857143,10.043844 2.57857143,10.4004121 C2.57857143,10.7569802 2.86664621,11.0450549 3.22321429,11.0450549 L7.73571429,11.0450549 C8.09228237,11.0450549 8.38035714,10.7569802 8.38035714,10.4004121 C8.38035714,10.043844 8.09228237,9.75576923 7.73571429,9.75576923 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#346FC2" fill-rule="nonzero"></path>
<g id="定位" transform="translate(10.769231, 7.692308)" fill="#346FC2" fill-rule="nonzero">
<path d="M7.89474159,1.33198768 L7.86437425,1.30364483 C7.01416767,0.481775841 5.89068885,0 4.61538462,0 C3.34008038,0 2.21660156,0.481775841 1.36639498,1.27530198 L1.33602764,1.33198768 C0.516199669,2.12550331 0,3.23076923 0,4.44938552 C0,5.6680018 0.516188401,6.77328876 1.33602764,7.56680439 L1.36639498,7.59513672 L4.61538462,10.7692308 L7.86437425,7.62347957 L7.89474159,7.59513672 C8.71456956,6.80162109 9.23076923,5.69635517 9.23076923,4.44939603 C9.23076923,3.23076923 8.71458083,2.12550331 7.89474159,1.33198768 Z M4.61538462,5.72469802 C3.73482197,5.72469802 3.00607347,5.0161899 3.00607347,4.1659991 C3.00607347,3.79757362 3.12753155,3.48583383 3.34008038,3.23076923 C3.64371995,2.86234375 4.09918495,2.60728966 4.61538462,2.60728966 C5.49594727,2.60728966 6.22469576,3.31578726 6.22469576,4.16598858 C6.22469576,5.0161899 5.49594727,5.72469802 4.61538462,5.72469802 L4.61538462,5.72469802 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

27
weapp/src/static/img/patrolView/patrol.svg

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M14.5044643,-3.19744231e-14 C15.7494308,-3.19744231e-14 16.7607143,1.01128348 16.7607143,2.25625 L16.7607143,2.25625 L16.76,6.923 L15.471,6.923 L15.4714286,2.25625 C15.4714286,1.76053691 15.0979736,1.35167382 14.6171968,1.29579396 L14.5044643,1.28928571 L2.25625,1.28928571 C1.72240513,1.28928571 1.28928571,1.72240513 1.28928571,2.25625 L1.28928571,2.25625 L1.28928571,15.79375 C1.28928571,16.3275949 1.72240513,16.7607143 2.25625,16.7607143 L2.25625,16.7607143 L9.999,16.76 L9.999,18.049 L2.25625,18.05 C1.06315709,18.05 0.0846793232,17.1212344 0.00521085144,15.9480975 L-1.47437618e-13,15.79375 L-1.47437618e-13,2.25625 C-1.47437618e-13,1.01128348 1.01128348,-3.19744231e-14 2.25625,-3.19744231e-14 L2.25625,-3.19744231e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_养护-查看(管理员)备份" transform="translate(-59.000000, -81.000000)">
<g id="编组-10" transform="translate(15.000000, 64.000000)">
<g id="编组-8" transform="translate(44.000000, 17.000000)">
<g id="baobiaoxinxi" transform="translate(0.000000, 1.000000)">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#999999" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.3142857,3.30934066 L3.22321429,3.30934066 C2.86664621,3.30934066 2.57857143,3.59741544 2.57857143,3.95398352 C2.57857143,4.3105516 2.86664621,4.59862637 3.22321429,4.59862637 L10.3142857,4.59862637 C10.6708538,4.59862637 10.9589286,4.3105516 10.9589286,3.95398352 C10.9589286,3.59741544 10.6708538,3.30934066 10.3142857,3.30934066 Z M8.38035714,6.53255495 L3.22321429,6.53255495 C2.86664621,6.53255495 2.57857143,6.82062972 2.57857143,7.1771978 C2.57857143,7.53376588 2.86664621,7.82184066 3.22321429,7.82184066 L8.38035714,7.82184066 C8.73692522,7.82184066 9.025,7.53376588 9.025,7.1771978 C9.025,6.82062972 8.73692522,6.53255495 8.38035714,6.53255495 Z M7.73571429,9.75576923 L3.22321429,9.75576923 C2.86664621,9.75576923 2.57857143,10.043844 2.57857143,10.4004121 C2.57857143,10.7569802 2.86664621,11.0450549 3.22321429,11.0450549 L7.73571429,11.0450549 C8.09228237,11.0450549 8.38035714,10.7569802 8.38035714,10.4004121 C8.38035714,10.043844 8.09228237,9.75576923 7.73571429,9.75576923 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#999999" fill-rule="nonzero"></path>
<g id="定位" transform="translate(10.769231, 7.692308)" fill="#999999" fill-rule="nonzero">
<path d="M7.89474159,1.33198768 L7.86437425,1.30364483 C7.01416767,0.481775841 5.89068885,0 4.61538462,0 C3.34008038,0 2.21660156,0.481775841 1.36639498,1.27530198 L1.33602764,1.33198768 C0.516199669,2.12550331 0,3.23076923 0,4.44938552 C0,5.6680018 0.516188401,6.77328876 1.33602764,7.56680439 L1.36639498,7.59513672 L4.61538462,10.7692308 L7.86437425,7.62347957 L7.89474159,7.59513672 C8.71456956,6.80162109 9.23076923,5.69635517 9.23076923,4.44939603 C9.23076923,3.23076923 8.71458083,2.12550331 7.89474159,1.33198768 Z M4.61538462,5.72469802 C3.73482197,5.72469802 3.00607347,5.0161899 3.00607347,4.1659991 C3.00607347,3.79757362 3.12753155,3.48583383 3.34008038,3.23076923 C3.64371995,2.86234375 4.09918495,2.60728966 4.61538462,2.60728966 C5.49594727,2.60728966 6.22469576,3.31578726 6.22469576,4.16598858 C6.22469576,5.0161899 5.49594727,5.72469802 4.61538462,5.72469802 L4.61538462,5.72469802 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
weapp/src/static/img/patrolView/search.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

32
web/client/assets/color.less

@ -1128,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("@{menu-popup-bg}", 2)`);}
.ant-menu-item-danger.ant-menu-item:active {background: #fff1f0;}
.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("@{menu-popup-bg}", 2)`);}
.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {background-color: #fff1f0;}
.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;}
@ -1702,17 +1702,11 @@ 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)`);}
<<<<<<< HEAD
.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{modal-footer-border-color-split}", 1)`);border-color: #ffadd2;}
.ant-tag-pink {color: #c41d7f;background: #fff0f6;border-color: #ffadd2;}
.ant-tag-pink-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.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 {color: #c41d7f;background: #fff0f6;border-color: #ffadd2;}
.ant-tag-magenta-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.ant-tag-red {color: #cf1322;background: color(~`colorPalette("@{menu-popup-bg}", 2)`);border-color: #ffa39e;}
.ant-tag-red {color: #cf1322;background: #fff1f0;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;}
@ -1720,7 +1714,7 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-tag-orange-inverse {color: #fff;background: #fa8c16;border-color: #fa8c16;}
.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: color(~`colorPalette("@{skeleton-color}", 1)`);border-color: #ffe58f;}
.ant-tag-gold {color: #d48806;background: #fffbe6;border-color: #ffe58f;}
.ant-tag-gold-inverse {color: #fff;background: #faad14;border-color: #faad14;}
.ant-tag-cyan {color: #08979c;background: #e6fffb;border-color: #87e8de;}
.ant-tag-cyan-inverse {color: #fff;background: #13c2c2;border-color: #13c2c2;}
@ -1728,17 +1722,11 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.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("@{progress-steps-item-bg}", 1)`);border-color: #91d5ff;}
.ant-tag-blue {color: #096dd9;background: color(~`colorPalette("@{pagination-item-input-bg}", 1)`);border-color: #91d5ff;}
.ant-tag-blue-inverse {color: #fff;background: #1890ff;border-color: #1890ff;}
<<<<<<< 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 {color: #1d39c4;background: color(~`colorPalette("@{avatar-bg}", 4)`);border-color: #adc6ff;}
.ant-tag-geekblue-inverse {color: #fff;background: #2f54eb;border-color: #2f54eb;}
.ant-tag-purple {color: #531dab;background: #f9f0ff;border-color: #d3adf7;}
>>>>>>> 65cf2722eec21e1d07ce958f4298eec7ae620c85
.ant-tag-purple {color: #531dab;background: color(~`colorPalette("@{calendar-bg}", 1)`);border-color: #d3adf7;}
.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;}
@ -1975,7 +1963,7 @@ 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("@{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='color(~`colorPalette("@{pagination-item-input-bg}", 1)`)'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{pagination-item-input-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);}

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

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

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

@ -1,7 +1,7 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { DeleteOutlined, EllipsisOutlined, FormOutlined } from '@ant-design/icons';
import { Spin, Space, Button, Popconfirm, Row, Col, Tree, Table, Card, Switch, Tooltip } from 'antd';
import { Spin, Space, Button, Popconfirm, Row, Col, Tree, Table, Card, Switch, Tooltip, Breadcrumb } from 'antd';
import ProTable from '@ant-design/pro-table';
import { getDepMessage, getDepUser, createUser, updateUser, delUser, resetPwd, createDep, delDep, updateDep } from '../actions/user';
import UserModal from '../components/userModal';
@ -22,6 +22,7 @@ const UserManage = (props) => {
const [depModalType, setDepModalType] = useState();
const [depModalRecord, setDepModalRecord] = useState();
const [selectedTree, setSelectedTree] = useState();
const [depCrumbs, setDepCrumbs] = useState([]);
useEffect(() => {
@ -34,6 +35,12 @@ const UserManage = (props) => {
dispatch(getDepUser(depMessage[0].id))
}
}, [depMessage])
useEffect(() => {
const list = handleCrumbs(depSelectedKeys)
setDepCrumbs(list)
}, [depSelectedKeys])
const columns =
[
{
@ -181,7 +188,7 @@ const UserManage = (props) => {
// 删除部门
const delDepartment = (id) => {
dispatch(delDep(id)).then(res => {
if(res.success){
if (res.success) {
dispatch(getDepMessage())
}
});
@ -208,6 +215,32 @@ const UserManage = (props) => {
</div>
}
const handleCrumbs = (id) => {
let crumbsList = []
depMessage?.forEach(d => {
if (id == d.id) {
crumbsList.push(d.name)
}
d.subordinate?.forEach(s => {
if (id == s.id) {
crumbsList.push(d.name)
crumbsList.push(s.name)
}
s.subordinate?.forEach(a => {
if (id == a.id) {
crumbsList.push(d.name)
crumbsList.push(s.name)
crumbsList.push(a.name)
}
})
})
})
return crumbsList
}
return (<div >
<Spin spinning={loading} /* style={{ height: "calc(100vh - 70px)" }} */>
<Row gutter={16} /* style={{ overflow: "scroll" }} */>
@ -220,6 +253,7 @@ const UserManage = (props) => {
style={{ marginLeft: 10 }}
onClick={() => openDepModal('create')}
>新建部门</Button>
{
depMessage.length ?
<Tree
@ -227,7 +261,10 @@ const UserManage = (props) => {
defaultExpandedKeys={[depMessage[0].id]}
selectedKeys={depSelectedKeys}
onSelect={(selectedKeys, e) => {
// console.log('selectedKeys:',selectedKeys);
if (e.selected) {
handleCrumbs(selectedKeys)
setSelectedTree(selectedKeys)
setDepSelectedKeys(selectedKeys)
dispatch(getDepUser(selectedKeys[0]))
@ -260,7 +297,11 @@ const UserManage = (props) => {
<Col /* flex="auto" */ style={{ width: "calc(100% - 260px)", height: '100%', display: "black" }}>
<Card bordered={false} height={clientHeight} bodyStyle={{ padding: 8, paddingTop: 24, overflow: "hidden", width: "100%" }}>
<Breadcrumb separator=">" style={{ marginLeft: 24 }}>
{
depCrumbs?.map((c, index) => { return (<Breadcrumb.Item key={index}>{c}</Breadcrumb.Item>) })
}
</Breadcrumb>
<ProTable
columns={columns}
dataSource={depUser}
@ -330,6 +371,7 @@ const UserManage = (props) => {
function mapStateToProps(state) {
const { depMessage, depUser, global } = state;
console.log('depMessage:', depMessage);
// console.log(state);
return {
clientHeight: global.clientHeight,

38
web/client/src/sections/quanju/actions/example.js

@ -13,3 +13,41 @@ export function getMembers(orgId) {
reducer: { name: 'members' }
});
}
//获取大屏道路统计信息
export function getdaolutongji() {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
actionType: 'GET_DAOLUTONGJI',
url: ApiTable.getBgroadstatistics,
msg: { error: '获取道路统计信息失败' },
// reducer: { name: 'members' }
});
}
//获取治超监测点处理数据信息
export function getjiandmanage() {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
actionType: 'GET_JIANDMANAGE',
url: ApiTable.getzhichaomanager,
msg: { error: '获取治超监测点处理数据信息' },
// reducer: { name: 'members' }
});
}
//获取治超详情列
export function getjiandetail() {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
actionType: 'GET_JIANDETAIL',
url: ApiTable.getzhichaodetail,
msg: { error: '获取治超监测点处理数据信息' },
// reducer: { name: 'members' }
});
}

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

@ -1,4 +1,5 @@
import React from 'react'
import React, { useEffect, useState } from 'react'
import { connect } from 'react-redux';
// import LeftTop from './Lefttop'
// import LeftCenter from './Leftcenter'
import LeftBottom from './Leftbottom'
@ -10,7 +11,19 @@ import Module from '../../public/module'
import RightBottom from './Rightbottom'
import AutoRollComponent from './AutoRollComponent'
import './style.less'
const Build = () => {
import {getdaolutongji} from '../../../actions/example'
const Build = (props) => {
const { dispatch } = props
const [buildingnumber,setbuildingnumber] = useState(0)
const requestbuildingnumber = async ()=>{
const res = await dispatch(getdaolutongji());
setbuildingnumber(res.payload.data)
// console.log(res.payload.data,'哈哈哈')
}
useEffect(()=>{
requestbuildingnumber()
},[])
const datas = new Array(15)
datas.fill({
name:"东乡镇",
@ -39,7 +52,7 @@ const Build = () => {
<span/>
<span>在建公路数量</span>
</div>
<div>6200</div>
<div>{buildingnumber.buildingRoad || 0}</div>
</div>
<img src='/assets/images/quanju/zhuangtaigonglui.png' className='build-left-top-center'/>
<div className='build-left-top-item'>
@ -48,7 +61,7 @@ const Build = () => {
<span/>
<span>已建公路数量</span>
</div>
<div>6200</div>
<div>{buildingnumber.buildedRoad || 0}</div>
</div>
</div>
</Module>
@ -111,4 +124,24 @@ const Build = () => {
</div>
)
}
export default Build
function mapStateToProps(state) {
const { auth, depMessage } = state;
const pakData = (dep) => {
return dep.map((d) => {
return {
title: d.name,
value: d.id,
// children: d.type >= 2 ? [] : pakData(d.subordinate)
children: pakData(d.subordinate)
}
})
}
let depData = pakData(depMessage.data || [])
return {
user: auth.user,
depMessage: depMessage.data || [],
depLoading: depMessage.isRequesting,
depData,
};
}
export default connect(mapStateToProps)(Build);

110
web/client/src/sections/quanju/containers/footer/conserve/chart/pie-chart.js

@ -0,0 +1,110 @@
import React from 'react'
import { useEffect, useRef } from 'react';
import * as echarts from 'echarts';
const PieChart = (props) => {
const { width, height, data, colorList, underColorList, total, text } = props
const chartRef = useRef(null);
let name = [], emptyName = []
// const name = data?.map(d)
data?.forEach(d => {
name.push(d.name)
emptyName.push({
name: '',
value: d.value
})
})
useEffect(() => {
let chartInstance = echarts.init(chartRef.current);
const option = {
tooltip: {
trigger: "item",
},
legend: {
orient: "vertical",
itemWidth: 10,
itemHeight: 10,
right: '30%',
top: 'center',
align: 'left',
data: name,
textStyle: {
color: "#fff",
},
},
grid: {
left: '10%'
},
// title: [
// {
// text: text,
// top: "58%",
// left: '16%',
// textStyle: {
// color: "#E9F7FF",
// fontSize: 14,
// },
// },
// {
// text: total,
// top: "40%",
// left: '10%',
// textStyle: {
// fontSize: "30",
// color: "#FFFFFF",
// fontFamily: "YouSheBiaoTiHei",
// },
// },
// ],
series: [
{
name: "底层背景",
type: "pie",
hoverAnimation: false,
legendHoverLink: false,
radius: ["60%", "72%"],
center: ['25%', '50%'],
color: underColorList,
label: {
show: false
},
labelLine: {
show: false
},
tooltip: {
show: false,
},
data: emptyName,
},
{
name: "已绿化里程统计",
type: "pie",
radius: ["67%", "80%"],
center: ['25%', '50%'],
color: colorList,
label: {
show: false
},
data: data,
},
],
};
chartInstance.setOption(option);
window.addEventListener('resize', () => {
if (chartInstance) {
chartInstance.resize()
}
})
}, [])
return (
<div style={{ width: width || '100%', height: height || '100%' }}>
<div ref={chartRef} style={{ width: '100%', height: '100%' }}></div>
</div>
)
}
export default PieChart

35
web/client/src/sections/quanju/containers/footer/conserve/left/left-bottom.js

@ -1,14 +1,39 @@
import React from 'react'
import Module from '../../../public/module'
import PieChart from '../chart/pie-chart';
let data = [
{ value: 435, name: "县道" },
{ value: 679, name: "乡道" },
{ value: 848, name: "村道" },
]
let colorList = [
"rgba(7,185,254,1)",
"rgba(28,96,254,1)",
"rgba(4,251,240,1)",
]
let underColorList = [
"rgba(7,185,254,0.5)",
"rgba(28,96,254,0.5)",
"rgba(4,251,240,0.5)",
]
const LeftBottom = () => {
const style = { height: "31%", marginTop: "3%" }
return (
<>
<Module style={style} title={"已绿化里程统计"}>
</Module>
</>
<>
<Module style={style} title={"已绿化里程统计"}>
{/* <div ref = {chartRef} style={{ width: '100%', height: '100%' }}></div> */}
<PieChart
data={data}
width='100%'
height='100%'
text='已绿化里程'
total={2344.13}
colorList={colorList}
underColorList={underColorList}
/>
</Module>
</>
)
}
export default LeftBottom

24
web/client/src/sections/quanju/containers/footer/conserve/left/left-center.js

@ -34,8 +34,9 @@ const LeftCenter = () => {
grid: {
left: "5%",
top: "12%",
right: "1%",
right: "5%",
bottom: "8%",
width:'92%',
containLabel: true,
},
@ -102,12 +103,15 @@ const LeftCenter = () => {
backgroundColor: {
image: 'assets/images/quanju/kelvhua_bdbg.png',
},
width: 50,
height: 20,
width: 70,
height: 22,
color: '#D8F0FF',
margin:40,
margin:50,
verticalAlign: 'middle',
align: 'center'
align: 'center',
textShadowColor:'#1AD0FF',
textShadowBlur:6,
fontSize:14
// formatter:(f) =>{console.log('f:',f);}
},
inverse: true, //排序
@ -197,9 +201,11 @@ const LeftCenter = () => {
],
};
chartInstance.setOption(option);
window.onresize = function () {
chartInstance.resize();
}
window.addEventListener('resize',() =>{
if(chartInstance) {
chartInstance.resize()
}
})
}, []);
return (
@ -211,7 +217,7 @@ const LeftCenter = () => {
<img src='assets/images/quanju/kelvhua_icon.png' alt='icon' />
<span style={{ color: '#C2EEFF', marginLeft: 5 }}>可绿化里程总数</span>
</Col>
<Col span={9} style={{ fontSize: 28, fontFamily: 'YouSheBiaoTiHei', color: '#fff' }}>1234.123</Col>
<Col span={9} style={{ fontSize: 24, fontFamily: 'YouSheBiaoTiHei', color: '#fff' }}>1234</Col>
</Row>
<div ref={chartRef} style={{ height: "14.5vh", width: "96%" }}></div>

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

@ -194,7 +194,7 @@ const LeftTop = () => {
const style = { height: "31%", marginTop: "3%" }
return (
<>
<Module style={style} title={"路养护周期统计"}>
<Module style={style} title={"路养护周期统计"}>
<div style={{ position: 'relative', width: '100%', height: '100%' }}>
<div style={{ width: '100%', height: '100%', display: 'flex', padding: '3%' }}>
<div ref={seasonChartRef} style={{ width: "50%" }}>

38
web/client/src/sections/quanju/containers/footer/conserve/right/right-bottom.js

@ -1,14 +1,42 @@
import React from 'react'
import Module from '../../../public/module'
import PieChart from '../chart/pie-chart';
let data = [
{ value: 435, name: "道路" },
{ value: 679, name: "桥梁" },
{ value: 848, name: "涵洞" },
{ value: 666, name: "其他" },
]
let colorList = [
"rgba(7,185,254,1)",
"rgba(28,96,254,1)",
"rgba(4,251,240,1)",
"rgba(255,194,20,1)"
]
let underColorList = [
"rgba(7,185,254,0.5)",
"rgba(28,96,254,0.5)",
"rgba(4,251,240,0.5)",
"rgba(255,194,20,0.5)"
]
const RightBottom = () => {
const style = { height: "31%", marginTop: "3%" }
return (
<>
<Module style={style} title={"养护完成情况"}>
</Module>
</>
<>
<Module style={style} title={"养护完成情况"}>
{/* <div ref = {chartRef} style={{ width: '100%', height: '100%' }}></div> */}
<PieChart
data={data}
width='100%'
height='100%'
text='养护总数'
total={2344.13}
colorList={colorList}
underColorList={underColorList}
/>
</Module>
</>
)
}
export default RightBottom

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

@ -10,7 +10,7 @@ export default function LeftItem() {
text: '75%',
top:'35%',
textStyle: {
fontSize: 22,
fontSize: "1.375rem",
fontFamily: 'PingFangSC-Medium, PingFang SC',
fontWeight: 500,
// marginTop:-60,
@ -18,7 +18,7 @@ export default function LeftItem() {
},
subtext: '已处理',
subtextStyle: {
fontSize: 16,
fontSize: "1rem",
fontFamily: "PingFangSC-Regular, PingFang SC",
fontWeight: 400,
color: 'rgba(216,240,255,0.8000)'

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

@ -1,39 +1,57 @@
import React from 'react'
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { Carousel } from 'antd'
import AutoRollComponent from '../build/AutoRollComponent'
import Module from '../../public/module'
import LeftItem from './LeftItem'
import {getjiandmanage,getjiandetail} from '../../../actions/example'
import './style.less'
const Guanli = () => {
const datas = new Array(35)
const itemlist = [1,2,3]
const Guanli = (props) => {
const {dispatch} = props
const [leftDatas,setleftDatas] = useState([])
const [rightDatas,setrightDatas] = useState([])
const requestleftDatas = async()=>{
const res = await dispatch(getjiandmanage())
setleftDatas(res.payload.data)
// console.log(res,'哈哈哈')
}
const requestRightDatas = async()=>{
const res = await dispatch(getjiandetail())
setrightDatas(res.payload.data)
console.log(res,'嘿嘿嘿')
}
useEffect(()=>{
requestleftDatas();
requestRightDatas()
},[])
const renderContent = () => {
datas.fill({
chepaihao:'苏LD1112121',
caoxian:'30%',
chufa:'200元',
riqi:'2022年5月4日'
},1,35)
console.log(datas,'数组')
return <div style={{height:"100%"}}>
{datas?.map(({ chepaihao, caoxian, chufa,riqi }, index) => {
{rightDatas && rightDatas.length!==0?rightDatas.overSpeedList.map(({ id, licensePlate, overrunRate,fine,processingTime }, index) => {
return <div key={index} className='guanli-right-item'>
<span>{chepaihao}</span>
<span>{caoxian}</span>
<span>{chufa}</span>
<span>{riqi}</span>
<span>{licensePlate}</span>
<span>{overrunRate}%</span>
<span>{fine}</span>
<span>{processingTime}</span>
</div>
})}
}):""}
</div>
}
const renderLeftContent = ()=>{
return leftDatas && leftDatas.length!==0?leftDatas.map((item,index)=>
<LeftItem key={index} datas={item}></LeftItem>
):""
}
// renderContent()
return (
<div className='guanli'>
<div className='guanli-left'>
<Module style={{height:"100%"}} title="检测点治超处理占比" customize={true}>
{itemlist.map((item,index)=>
<LeftItem key={index}></LeftItem>
)}
<AutoRollComponent content={renderLeftContent()}
containerStyle={{ position: "relative", height: "90%", }}
divHeight={"100%"} divId={"chart-overview-left"} />
</Module>
</div>
<div className='guanli-right'>
@ -41,7 +59,7 @@ const Guanli = () => {
<div className = "guanli-right-top">
<img src="/assets/images/quanju/zhicaolog.png"></img>
<span>已处理</span>
<span>187</span>
<span>{rightDatas.processed||0}</span>
<span></span>
</div>
<div className='guanli-right-title'>
@ -58,4 +76,24 @@ const Guanli = () => {
</div>
)
}
export default Guanli
function mapStateToProps(state) {
const { auth, depMessage } = state;
const pakData = (dep) => {
return dep.map((d) => {
return {
title: d.name,
value: d.id,
// children: d.type >= 2 ? [] : pakData(d.subordinate)
children: pakData(d.subordinate)
}
})
}
let depData = pakData(depMessage.data || [])
return {
user: auth.user,
depMessage: depMessage.data || [],
depLoading: depMessage.isRequesting,
depData,
};
}
export default connect(mapStateToProps)(Guanli);

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

@ -1,3 +1,8 @@
@media screen and (max-width:1281px){
html{
font-size: 10px;
}
}
.guanli{
// box-sizing: border-box;
padding: 0 15px 0 15px;
@ -25,7 +30,7 @@
flex-direction: column;
align-items: center;
span{
font-size: 20px;
font-size: 1.25rem;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(216,240,255,0.8000);
@ -34,7 +39,7 @@
display: flex;
justify-content: center;
// align-items: ;
font-size: 34px;
font-size: 2.125rem;
font-family: YouSheBiaoTiHei;
color: #FFFFFF;
height: 70%;
@ -43,7 +48,7 @@
background-size: 100% 80%;
background-position: center bottom;
span{
font-size: 16px;
font-size: 1rem;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
padding-top: 10%;
@ -143,12 +148,12 @@
justify-content: space-around;
// background: rgba(21,77,160,0.2000);
span{
font-size: 14px;
font-size: 0.875rem;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(216,240,255,0.8000);
line-height: 20px;
flex:1;
// flex:1;
text-align: center;
// &:nth-child(1){

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

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

180
web/client/src/sections/quanju/containers/footer/operation/left.js

@ -0,0 +1,180 @@
import React, { useMemo, useState, useEffect } from 'react';
import { SearchOutlined } from '@ant-design/icons';
import { Col, Row, Input, Tree } from 'antd'
import Module from '../../public/module'
const { Search } = Input;
const x = 3;
const y = 2;
const z = 1;
const defaultData = [];
const generateData = (_level, _preKey, _tns) => {
const preKey = _preKey || '0';
const tns = _tns || defaultData;
const children = [];
for (let i = 0; i < x; i++) {
const key = `${preKey}-${i}`;
tns.push({
title: key,
key,
});
if (i < y) {
children.push(key);
}
}
if (_level < 0) {
return tns;
}
const level = _level - 1;
children.forEach((key, index) => {
tns[index].children = [];
return generateData(level, key, tns[index].children);
});
};
generateData(z);
const dataList = [];
const generateList = (data) => {
for (let i = 0; i < data.length; i++) {
const node = data[i];
const { key } = node;
dataList.push({
key,
title: key,
});
if (node.children) {
generateList(node.children);
}
}
};
generateList(defaultData);
const getParentKey = (key, tree) => {
let parentKey;
for (let i = 0; i < tree.length; i++) {
const node = tree[i];
if (node.children) {
if (node.children.some((item) => item.key === key)) {
parentKey = node.key;
} else if (getParentKey(key, node.children)) {
parentKey = getParentKey(key, node.children);
}
}
}
return parentKey;
};
const Left = () => {
useEffect(() => {
}, [])
const style = { height: "97%", marginTop: "3%" }
const [expandedKeys, setExpandedKeys] = useState([]);
const [searchValue, setSearchValue] = useState('');
const [autoExpandParent, setAutoExpandParent] = useState(true);
const onExpand = (newExpandedKeys) => {
setExpandedKeys(newExpandedKeys);
setAutoExpandParent(false);
};
const onChange = (e) => {
const { value } = e.target;
const newExpandedKeys = dataList
.map((item) => {
if (item.title.indexOf(value) > -1) {
return getParentKey(item.key, defaultData);
}
return null;
})
.filter((item, i, self) => item && self.indexOf(item) === i);
setExpandedKeys(newExpandedKeys);
setSearchValue(value);
setAutoExpandParent(true);
};
const treeData = useMemo(() => {
const loop = (data) =>
data.map((item) => {
const strTitle = item.title;
const index = strTitle.indexOf(searchValue);
const beforeStr = strTitle.substring(0, index);
const afterStr = strTitle.slice(index + searchValue.length);
const title =
index > -1 ? (
<span>
{beforeStr}
<span className="site-tree-search-value">{searchValue}</span>
{afterStr}
</span>
) : (
<span>{strTitle}</span>
);
if (item.children) {
return {
title,
key: item.key,
children: loop(item.children),
};
}
return {
title,
key: item.key,
};
});
return loop(defaultData);
}, [searchValue]);
return (
<div style={{ display: 'flex', flexDirection: 'column', width: "23%", height: "100%", marginLeft: "1%" }}>
<Module style={style} title={"公交车辆信息"}>
<div style={{ width: '90%', height: '96', margin: '2% 5%', }}>
<div style={{ border: '1px solid rgba(10, 114, 255, 1)', backgroundColor: 'rgba(10, 114, 255, 0.1)' }}>
<img src='assets/images/quanju/search.png' style={{ width: '5%', margin: '0 1.5% 1% 3.5%' }} />
<Input
style={{
width: '90%',
background: 'none',
backgroundColor: 'none',
color: 'rgba(216, 240, 255, 0.8)',
border: 'none',
boxShadow: 'none',
}}
placeholder="请输入车牌号"
onChange={onChange}
/>
</div>
<Tree
rootStyle={{
background: 'none',
borderColor: 'none',
color: 'rgba(255, 255, 255, 1)'
}}
onExpand={onExpand}
expandedKeys={expandedKeys}
autoExpandParent={autoExpandParent}
treeData={treeData}
/>
</div>
</Module>
</div>
);
};
export default Left;

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

@ -0,0 +1,9 @@
import React from 'react'
const Right = () => {
return (
<div style={{ display: 'flex', flexDirection: 'column', width: "23%", height: "100%", marginRight: "1%", }}>555555555
</div>
)
}
export default Right

11
web/client/src/sections/quanju/nav-item.js

@ -7,10 +7,11 @@ const SubMenu = Menu.SubMenu;
export function getNavItem(user, dispatch) {
return (
<SubMenu key="example2" icon={<SettingOutlined />} title={'举个栗子'}>
<Menu.Item key="e1">
<Link to="/example2/e1">举个棒子2</Link>
</Menu.Item>
</SubMenu>
// <SubMenu key="example2" icon={<SettingOutlined />} title={'举个栗子'}>
// <Menu.Item key="e1">
// <Link to="/example2/e1">举个棒子2</Link>
// </Menu.Item>
// </SubMenu>
<></>
);
}

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

@ -47,9 +47,22 @@ export const ApiTable = {
//桥梁管理
getBridge:'bridge',
//工程数据
getProject:'project'
getProject:'project',
//道路统计
getBgroadstatistics:"build/road_state",
//治超监测点处理数据
getzhichaomanager:'manage/overspeed/processed',
//获取治超详情数据
getzhichaodetail:'/manage/overspeed'
};
export const RouteTable = {
apiRoot: '/api/root',
fileUpload: '/_upload/new',

Loading…
Cancel
Save