Browse Source

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

release_0.0.1
dengyinhuan 2 years ago
parent
commit
c6530c051c
  1. 16
      api/app/lib/controllers/organization/department.js
  2. 2
      api/app/lib/routes/data/index.js
  3. 3
      api/log/development.log
  4. BIN
      scripts/0.0.1/data/工具脚本(无需执行)/data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx
  5. 5
      scripts/0.0.1/data/工具脚本(无需执行)/dataIn.js
  6. 6
      scripts/0.0.1/data/工具脚本(无需执行)/index.js
  7. 25
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_字段对应.json
  8. 25
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据字段对应.json
  9. 25
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据库表对应.json
  10. 29
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据脚本对应.sql
  11. 3
      weapp/src/packages/patrol/index.config.js
  12. 203
      weapp/src/packages/patrol/index.jsx
  13. 51
      weapp/src/packages/patrol/index.scss
  14. 2
      weapp/src/pages/auth/login/login.scss
  15. 48
      weapp/src/pages/home/index.scss
  16. 0
      weapp/src/static/img/home/fill-bg.svg
  17. 15
      weapp/src/static/img/patrol/arrow-down.svg
  18. 104
      web/client/assets/color.less
  19. BIN
      web/client/assets/images/bj.png
  20. 59
      web/client/src/sections/auth/containers/login.js
  21. 47
      web/client/src/sections/auth/containers/style.less
  22. 77
      web/client/src/sections/fillion/actions/infor.js
  23. 1824
      web/client/src/sections/fillion/components/bridgeTable.js
  24. 118
      web/client/src/sections/fillion/components/compileDrawer.js
  25. 124
      web/client/src/sections/fillion/components/configModal.js
  26. 56
      web/client/src/sections/fillion/components/enforceTable.js
  27. 59
      web/client/src/sections/fillion/components/highwaysTable.js
  28. 130
      web/client/src/sections/fillion/components/infor/details.js
  29. 118
      web/client/src/sections/fillion/components/inforTable.js
  30. 1629
      web/client/src/sections/fillion/components/operationalTable.js
  31. 5
      web/client/src/sections/fillion/components/promotionalTable.js
  32. 71
      web/client/src/sections/fillion/components/publicTable.js
  33. 1741
      web/client/src/sections/fillion/components/transportationTable.js
  34. 6
      web/client/src/sections/fillion/containers/bridge.js
  35. 2
      web/client/src/sections/fillion/containers/enforce.js
  36. 2
      web/client/src/sections/fillion/containers/highways.js
  37. 2
      web/client/src/sections/fillion/containers/infor.js
  38. 124
      web/client/src/sections/fillion/containers/infor/details.js
  39. 2
      web/client/src/sections/fillion/containers/maintenance.js
  40. 2
      web/client/src/sections/fillion/containers/operational.js
  41. 2
      web/client/src/sections/fillion/containers/patrol.js
  42. 2
      web/client/src/sections/fillion/containers/promotional.js
  43. 2
      web/client/src/sections/fillion/containers/public.js
  44. 2
      web/client/src/sections/fillion/containers/transportation.js
  45. 2
      web/client/src/sections/fillion/containers/videois.js
  46. 2
      web/client/src/themes/light.json
  47. 19
      web/client/src/utils/webapi.js

16
api/app/lib/controllers/organization/department.js

@ -121,6 +121,18 @@ async function delDep (ctx) {
getDep(d.dataValues)
}
const undeleteUserCount = await models.User.count({
where: {
departmentId: {
$in: depIds
},
delete: false
}
})
if (undeleteUserCount) {
throw '该部门下有用户,不能删除'
}
await models.Department.update({
delete: true,
}, {
@ -144,7 +156,9 @@ async function delDep (ctx) {
await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {}
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}

2
api/app/lib/routes/data/index.js

@ -45,7 +45,7 @@ module.exports = function (app, router, opts) {
router.post('/road/import', road.importIn);
app.fs.api.logAttr['GET/road'] = { content: '获取道路数据', visible: true };
router.post('/road', road.get);
router.get('/road', road.get);
app.fs.api.logAttr['put/road'] = { content: '编辑道路数据', visible: true };
router.put('/road', road.edit);

3
api/log/development.log

@ -7155,3 +7155,6 @@
2022-07-22 15:22:09.565 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-22 15:22:12.241 - error: path: /overspeed, error: ReferenceError: startTime is not defined
2022-07-22 15:22:51.819 - error: path: /overspeed, error: ReferenceError: startTime is not defined
2022-07-22 15:58:39.491 - debug: [FS-LOGGER] Init.
2022-07-22 15:58:39.611 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-22 15:58:39.611 - info: [FS-AUTH] Inject auth and api mv into router.

BIN
scripts/0.0.1/data/工具脚本(无需执行)/data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx

Binary file not shown.

5
scripts/0.0.1/data/工具脚本(无需执行)/dataIn.js

@ -122,6 +122,11 @@ try {
// n: '治超',
// tableName: 'overspeed',
// },
{
path: ['./data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx'],
n: '公交线路',
tableName: 'bus_line',
},
]
for (let f of fileList) {

6
scripts/0.0.1/data/工具脚本(无需执行)/index.js

@ -43,6 +43,7 @@ try {
let upperCaseRslt = rslt[0].dst
.replace(/\//g, ' ')
.replace(/'/g, '')
.replace(/:/g,'')
.trim()
.replace(/\s{2,}/g, '')
.replace(/-/g, ' ');
@ -91,6 +92,11 @@ try {
// n: '治超',
// tableName: 'overspeed'
// },
{
path: './data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx',
n: '公交线路',
tableName: 'bus_line'
},
]
for (let f of fileList) {

25
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_字段对应.json

@ -0,0 +1,25 @@
{
"公司": "company",
"车队": "fleet",
"车队长": "carCaptain",
"副车队长": "assistantCarCaptain",
"办公地点": "officeLocation",
"线路名称": "lineName",
"线路类型": "lineType",
"线路划分": "lineDivision",
"GPS编号": "gPSNumber",
"起点终点": "startingPointEndPoint",
"车辆数": "numberOfVehicles",
"全程公里数": "totalKilometers",
"票价": "ticketPrice",
"开通时间": "openingTime",
"运行时间": "runningTime",
"开班时间夏令": "openingTimeSummer",
"收班时间夏令": "shiftClosingTimeSummer",
"开班时间冬令": "openingTimeWinter",
"收班时间冬令": "shiftClosingTimeWinter",
"沿途站点上行": "uplinkOfStationsAlongTheWay",
"沿途站点下行": "downlinkOfStationsAlongTheWay",
"所属区域": "area",
"备注": "remarks"
}

25
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据字段对应.json

@ -0,0 +1,25 @@
{
"company": "公司",
"fleet": "车队",
"carCaptain": "车队长",
"assistantCarCaptain": "副车队长",
"officeLocation": "办公地点",
"lineName": "线路名称",
"lineType": "线路类型",
"lineDivision": "线路划分",
"gPSNumber": "GPS编号",
"startingPointEndPoint": "起点终点",
"numberOfVehicles": "车辆数",
"totalKilometers": "全程公里数",
"ticketPrice": "票价",
"openingTime": "开通时间",
"runningTime": "运行时间",
"openingTimeSummer": "开班时间夏令",
"shiftClosingTimeSummer": "收班时间夏令",
"openingTimeWinter": "开班时间冬令",
"shiftClosingTimeWinter": "收班时间冬令",
"uplinkOfStationsAlongTheWay": "沿途站点上行",
"downlinkOfStationsAlongTheWay": "沿途站点下行",
"area": "所属区域",
"remarks": "备注"
}

25
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据库表对应.json

@ -0,0 +1,25 @@
{
"公司": "company",
"车队": "fleet",
"车队长": "car_Captain",
"副车队长": "assistant_car_Captain",
"办公地点": "office_location",
"线路名称": "line_name",
"线路类型": "line_type",
"线路划分": "line_division",
"GPS编号": "gPS_number",
"起点终点": "starting_point_end_point",
"车辆数": "number_of_vehicles",
"全程公里数": "total_kilometers",
"票价": "ticket_Price",
"开通时间": "opening_time",
"运行时间": "running_time",
"开班时间夏令": "opening_time_summer",
"收班时间夏令": "shift_closing_time_summer",
"开班时间冬令": "opening_time_Winter",
"收班时间冬令": "shift_closing_time_winter",
"沿途站点上行": "uplink_of_stations_along_the_way",
"沿途站点下行": "downlink_of_stations_along_the_way",
"所属区域": "area",
"备注": "remarks"
}

29
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据脚本对应.sql

@ -0,0 +1,29 @@
-- 公交线路
CREATE TABLE if not exists "bus_line" ( id serial not null );
CREATE unique index if not exists bus_line_id_uindex
ON bus_line (id); alter TABLE bus_line add constraint bus_line_pk primary key (id); alter TABLE bus_line add Company varchar(1024); comment
ON column bus_line.Company is '公司'; alter TABLE bus_line add Fleet varchar(1024); comment
ON column bus_line.Fleet is '车队'; alter TABLE bus_line add Car_Captain varchar(1024); comment
ON column bus_line.Car_Captain is '车队长'; alter TABLE bus_line add Assistant_Car_Captain varchar(1024); comment
ON column bus_line.Assistant_Car_Captain is '副车队长'; alter TABLE bus_line add Office_Location varchar(1024); comment
ON column bus_line.Office_Location is '办公地点'; alter TABLE bus_line add Line_Name varchar(1024); comment
ON column bus_line.Line_Name is '线路名称'; alter TABLE bus_line add Line_Type varchar(1024); comment
ON column bus_line.Line_Type is '线路类型'; alter TABLE bus_line add Line_Division varchar(1024); comment
ON column bus_line.Line_Division is '线路划分'; alter TABLE bus_line add GPS_Number varchar(1024); comment
ON column bus_line.GPS_Number is 'GPS编号'; alter TABLE bus_line add Starting_Point_End_Point varchar(1024); comment
ON column bus_line.Starting_Point_End_Point is '起点终点'; alter TABLE bus_line add Number_Of_Vehicles varchar(1024); comment
ON column bus_line.Number_Of_Vehicles is '车辆数'; alter TABLE bus_line add Total_Kilometers varchar(1024); comment
ON column bus_line.Total_Kilometers is '全程公里数'; alter TABLE bus_line add Ticket_Price varchar(1024); comment
ON column bus_line.Ticket_Price is '票价'; alter TABLE bus_line add Opening_Time varchar(1024); comment
ON column bus_line.Opening_Time is '开通时间'; alter TABLE bus_line add Running_Time varchar(1024); comment
ON column bus_line.Running_Time is '运行时间'; alter TABLE bus_line add Opening_Time_Summer varchar(1024); comment
ON column bus_line.Opening_Time_Summer is '开班时间夏令'; alter TABLE bus_line add Shift_Closing_Time_Summer varchar(1024); comment
ON column bus_line.Shift_Closing_Time_Summer is '收班时间夏令'; alter TABLE bus_line add Opening_Time_Winter varchar(1024); comment
ON column bus_line.Opening_Time_Winter is '开班时间冬令'; alter TABLE bus_line add Shift_Closing_Time_Winter varchar(1024); comment
ON column bus_line.Shift_Closing_Time_Winter is '收班时间冬令'; alter TABLE bus_line add Uplink_Of_Stations_Along_The_Way varchar(1024); comment
ON column bus_line.Uplink_Of_Stations_Along_The_Way is '沿途站点上行'; alter TABLE bus_line add Downlink_Of_Stations_Along_The_Way varchar(1024); comment
ON column bus_line.Downlink_Of_Stations_Along_The_Way is '沿途站点下行'; alter TABLE bus_line add Area varchar(1024); comment
ON column bus_line.Area is '所属区域'; alter TABLE bus_line add Remarks varchar(1024); comment
ON column bus_line.Remarks is '备注';

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

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

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

@ -1,9 +1,206 @@
import React from 'react'
import { View } from '@tarojs/components';
import React, { useState, useEffect } from 'react';
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() {
}
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')}
/>
<Image src={arrowIcon} className='img-l' />
<AtInput
className='input'
type='text'
placeholder='路段名称'
border={false}
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
<Image src={arrowIcon} className='img-r' />
</View>
<View>
<AtTextarea
count={false}
title='具体位置:'
type='text'
placeholder='具体位置:根据定位自动获取,可手动修改'
border={false}
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
</View>
{
isPatrol ?
<View className='img-picker'>
现场图片
<AtImagePicker
length={3}
files={images}
onChange={onImgPickerChange}
/>
</View> :
<View>
养护图片:
<AtTimeline
items={[
{
title: '养护前',
},
{ title: '养护中' },
{ title: '养护后' }
]}
>
</AtTimeline>
</View>
}
<AtButton formType='submit' type='primary' className='sub-btn'>上报</AtButton>
</View>
)
}

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

@ -0,0 +1,51 @@
.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;
}
}
.img-picker {
background-color: #fff;
}
.sub-btn {
width: 70%;
}
}

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;

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

@ -1,29 +1,29 @@
.page {
display: flex;
flex-direction: column;
align-items: center;
display: flex;
flex-direction: column;
align-items: center;
.fill {
margin-top: 30px;
padding: 10px;
width: 94%;
height: 360px;
background: url('../../static/img/patrol//fill-bg.svg') no-repeat;
background-size:100% 100%;
}
.fill {
margin-top: 30px;
padding: 10px;
width: 94%;
height: 360px;
background: url('../../static/img/home/fill-bg.svg') no-repeat;
background-size: 100% 100%;
}
.title {
margin: 50px 0 0 48px;
color: #fff;
font-size: 48px;
}
.title {
margin: 50px 0 0 48px;
color: #fff;
font-size: 48px;
}
.btn {
margin: 20px 0 0 50px;
color: #fff;
text-align: center;
width: 200px;
border: solid 1px #fff;
border-radius: 10px;
}
.btn {
margin: 30px 0 0 50px;
color: #fff;
text-align: center;
width: 200px;
border: solid 1px #fff;
border-radius: 10px;
}
}

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

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

104
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,31 @@ 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;}
.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("@{alert-info-bg-color}", 1)`);border-color: #ffadd2;}
.ant-tag-magenta {color: #c41d7f;background: color(~`colorPalette("@{timeline-color}", 4)`);border-color: #ffadd2;}
.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-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;}
.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;}
.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 +1749,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 +1939,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 +1963,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 +2419,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 +2876,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 +2901,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 +2912,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/bj.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

59
web/client/src/sections/auth/containers/login.js

@ -56,39 +56,38 @@ const Login = props => {
return (
<div className='login'>
<div className='left'></div>
{/* <div className='left'></div> */}
<div className='right'>
<div className='loginBox'>
<h1>四好公路</h1>
<Form onKeyDown={enterHandler}>
<h1>南昌县智慧交通监管系统</h1>
<Form onKeyDown={enterHandler}>
<FormItem>
<div className='loginFormTit'>用户名</div>
<Input
className='loginInp'
type="text"
value={username}
maxlength={11}
onChange={e => {
setUserName(e.target.value)
setInputChanged(true)
}}
/>
</FormItem>
<div className='loginFormTit'>密码</div>
<FormItem>
<Input
className='loginInp'
type="password"
value={password}
<FormItem>
<div className='loginFormTit'>用户名</div>
<Input
className='loginInp'
type="text"
value={username}
maxlength={11}
onChange={e => {
setUserName(e.target.value)
setInputChanged(true)
}}
/>
</FormItem>
<div className='loginFormTit'>密码</div>
<FormItem>
<Input
className='loginInp'
type="password"
value={password}
onChange={e => {
setPassword(e.target.value)
setInputChanged(true)
}}
/>
</FormItem>
</Form>
onChange={e => {
setPassword(e.target.value)
setInputChanged(true)
}}
/>
</FormItem>
</Form>
<Button type="primary" className='loginBtn' loading={isRequesting} onClick={handleLogin}>登录</Button>
</div>
</div>

47
web/client/src/sections/auth/containers/style.less

@ -5,21 +5,22 @@
top: 0;
left: 0;
.left {
background-image: url('/assets/images/loginBg.jpg');
background-size: 100% 100%;
background-repeat: no-repeat;
width: 55%;
height: 100%;
float: left;
top: 0px;
left: 0px;
}
// .left {
// background-image: url('/assets/images/bj.png');
// background-size: 100% 100%;
// background-repeat: no-repeat;
// width: 55%;
// height: 100%;
// float: left;
// top: 0px;
// left: 0px;
// }
.right {
width: 45%;
background-image: url('/assets/images/bj.png');
width: 100%;
height: 100%;
background-color: #000066;
// background-color: #000066;
float: left;
right: 0px;
bottom: 0px;
@ -45,22 +46,28 @@
}
.loginBox {
height: 50%;
width: 25%;
// height: 50%;
width: 480px;
position: absolute;
right: 6.5%;
right: 9%;
z-index: 20;
text-align: center;
border: 3px solid rgba(255, 255, 255, 0.6);
border-radius: 20px;
h1 {
margin-top: 6%;
color: #fff;
font-size: 58px;
font-size: 40px;
font-family: "YouSheBiaoTiHei";
}
.loginFormTit {
width: 20%;
// width: 20%;
font-size: 18px;
color: rgb(255, 255, 255);
margin-bottom: 10px;
margin: 0 0 10px 10%;
text-align: left;
}
.loginInp {
@ -74,8 +81,10 @@
.loginBtn {
width: 80%;
height: 50px;
margin-top: 20px;
margin: 20px 0 9% 0;
border-radius: 5px;
font-size: 16px;
}
}

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_DEPARTMENT_STATIS',
url: ApiTable.getReportStatistic,
msg: { error: '获取填报信息失败' },
reducer: { name: 'reportstatistic' }
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_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 >
)
}

130
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}
/>
<div style={{ width: '71vw', marginTop: '10px' }}>
<span style={{ fontSize: '16px' }}>排查人{(datas || {}).checkUserName || ''}</span>
<span style={{ fontSize: '16px', float: 'right' }}>手机号{(datas || {}).checkUserPhone || ''}</span></div>
</ModalForm>
{typecard==111?<ProForm.Group>
<ProFormText
name="name"
width="md"
label="签约客户名称"
tooltip="最长为 24 位"
placeholder="请输入名称"
value="wowowo"
rules={[{ required: true, message: "必填" }]}
/>
<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>
)
}

118
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,22 +92,34 @@ 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>
}
}, {
title: '超限重量(kg)',
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 >
)
}

1629
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>

71
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([])
@ -12,11 +14,39 @@ const PublicTable = (props) => {
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 [counts, setCounts] = useState()//shuju
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)
}, []);
//批量导出

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',

Loading…
Cancel
Save