Browse Source

养护抽查修改

dev
wenlele 1 year ago
parent
commit
c83fda9aac
  1. 16
      web/client/src/sections/fillion/actions/index.js
  2. 35
      web/client/src/sections/fillion/actions/spotCheck.js
  3. 669
      web/client/src/sections/fillion/containers/adjustLog.js
  4. 10
      web/client/src/sections/fillion/containers/index.js
  5. 466
      web/client/src/sections/fillion/containers/maintenanceSpotCheck-new.js
  6. 193
      web/client/src/sections/fillion/nav-item.js
  7. 339
      web/client/src/sections/fillion/routes.js
  8. 492
      web/client/src/sections/organization/containers/authority.js

16
web/client/src/sections/fillion/actions/index.js

@ -7,12 +7,14 @@ import * as assess from './assess'
import * as allDepUsers from './allDepUsers' import * as allDepUsers from './allDepUsers'
import * as getReportSpotPrepare from './extract' import * as getReportSpotPrepare from './extract'
import * as luzheng from './luzheng' import * as luzheng from './luzheng'
import * as spotCheck from './spotCheck'
export default { export default {
...infor, ...infor,
...patrol, ...patrol,
...file, ...file,
...assess, ...assess,
...allDepUsers, ...allDepUsers,
...getReportSpotPrepare, ...getReportSpotPrepare,
...luzheng ...luzheng,
...spotCheck
} }

35
web/client/src/sections/fillion/actions/spotCheck.js

@ -0,0 +1,35 @@
import { basicAction } from '@peace/utils'
import { ApiTable } from '$utils'
// export function getAssess (query) {
// return dispatch => basicAction({
// type: 'get',
// dispatch: dispatch,
// query: query,
// actionType: 'GET_ASSESS',
// url: ApiTable.getAssess,
// msg: { error: '获取考核评分信息' },
// reducer: { name: 'assess' }
// });
// }
// export function delAssess (query) {
// return dispatch => basicAction({
// type: 'del',
// dispatch: dispatch,
// actionType: 'DEL_ASSESS',
// url: ApiTable.delAssess.replace("{assessId}", query?.id),
// msg: { option: '删除考核评分信息' },
// });
// }
// export function editAssess (query) {
// return dispatch => basicAction({
// type: 'put',
// dispatch: dispatch,
// data: query,
// actionType: 'PUT_ASSESS',
// url: ApiTable.editAssess,
// msg: { option: '编辑/新增考核评分信息' },
// });
// }

669
web/client/src/sections/fillion/containers/adjustLog.js

@ -0,0 +1,669 @@
import { connect } from 'react-redux';
import React, { useEffect, useState } from 'react';
import { Button, Modal, Form, Input, Divider, Spin, Image, DatePicker, Descriptions, Table } from 'antd'
import ProTable from '@ant-design/pro-table';
import { getReportSpotPrepare, getSpotCheck, getSpotCheckDetail } from '../actions/extract'
import { getReportDetail } from '../actions/patrol';
import moment from 'moment'
import '../components/maintenanceTable.less'
const DetailForm = (props) => {
const { visible, data, handleClose, loading } = props
//console.log('data1', data)
const [qndmn] = useState(localStorage.getItem('qndmn'))
const changeBoolean = (bool) => {
// console.log('bool', bool)
return bool ? '无异常' : '有异常'
}
const reportTypeText = (text) => {
switch (text) {
case 'road': return '道路';
//
case 'countyRoad': return '县道';
case 'villageRoad': return '乡道';
case 'rusticRoad': return '村道';
//
case 'bridge': return '桥梁';
case 'culvert': return '涵洞';
case 'other': return '其他';
//
case 'conserve': return '养护';
case 'patrol': return '巡查';
case 'construction': return '在建';
default: return text;
}
}
const keyList = [
{ key: '路线代码', name: 'codeRoad' },
{ key: '其他', name: 'projectType' },
{ key: '道路类型', name: 'reportType' },
{ key: '路线名称', name: 'road' },
{ key: '路线代码', name: 'codeRoad' },
{ key: '养护路段', name: 'roadSectionStart' },
{ key: '具体位置', name: 'address' },
{ key: '路面类型', name: 'roadType' },
{ key: '路面宽度(米)', name: 'roadWidth' },
{ key: '错车道(个)', name: 'wrongLane' },
{ key: '行道树(棵)', name: 'roadsideTrees' },
{ key: '边沟(米)', name: 'roadsideDitch' },
{ key: '护栏(米)', name: 'guardrail' },
{ key: '标线(米)', name: 'roadMarking' },
{ key: '养护人员人数(人)', name: 'maintenanceStaffCount' },
{ key: '修整路肩(平方米)', name: 'shoulderRepair' },
{ key: '清理边沟(米)', name: 'ditchCleaning' },
{ key: '修补沥青路面(平方米)', name: 'asphaltRepair' },
{ key: '修补水泥路面(平方米)', name: 'concreteRepair' },
{ key: '除草(米)', name: 'grassMowing' },
{ key: '树刷白(株/公里)', name: 'treeWhitening' },
{ key: '桩刷白(个)', name: 'pileWhitening' },
{ key: '维护护栏(个)', name: 'guardrailMaintenance' },
{ key: '修复端头(块)', name: 'endHeadRepair' },
{ key: '其他养护内容', name: 'otherDescription' },
{ key: '养护前图片', name: 'conserveBeforePic' },
{ key: '养护中图片', name: 'conserveUnderwayPic' },
{ key: '养护后图片', name: 'conserveAfterPic' },
{ key: '上报视频', name: 'videoUrl' },
];
const keyListOld = [
// { key: '编号', name: 'id' },
{ key: '工程类型', name: 'projectType' },
{ key: '所在路段', name: 'road' },
{ key: '具体位置', name: 'address' },
{ key: '巡查内容', name: 'content' },
{ key: '路线代码', name: 'codeRoad' },
// { key: '病害照片', name: 'scenePic' },
{ key: '养护前', name: 'conserveBeforePic' },
{ key: '养护中', name: 'conserveUnderwayPic' },
{ key: '养护后', name: 'conserveAfterPic' },
];
const roadInfo = [
{ key: '路面类型', name: 'roadType' },
{ key: '路面宽度/米', name: 'roadWidth' },
{ key: '错车道/个', name: 'wrongLane' },
{ key: '行道树/棵', name: 'roadsideTrees' },
{ key: '边沟/米', name: 'roadsideDitch' },
{ key: '护栏/米', name: 'guardrail' },
{ key: '标线/米', name: 'roadMarking' },
];
const mantenanceInfo = [
{ key: '养护人员人数/人', name: 'maintenanceStaffCount' },
{ key: '修整路肩/平方米', name: 'shoulderRepair' },
{ key: '开挖、清理边沟/米', name: 'ditchCleaning' },
{ key: '修补沥青路面/平米', name: 'asphaltRepair' },
{ key: '修补水泥路面/平米', name: 'concreteRepair' },
{ key: '除草/米', name: 'grassMowing' },
{ key: '行道树刷白/株/公里', name: 'treeWhitening' },
{ key: '公里桩/百米桩刷漆/个', name: 'pileWhitening' },
{ key: '维修护栏/米', name: 'guardrailMaintenance' },
{ key: '修复端头/块', name: 'endHeadRepair' },
{ key: '其他', name: 'otherDescription' },
];
const mantenancePic = [
{ key: '养护前图片', name: 'conserveBeforePic' },
{ key: '养护中图片', name: 'conserveUnderwayPic' },
{ key: '养护后图片', name: 'conserveAfterPic' },
];
const renderContent = (data) => {
if (data) {
console.log('data1111', data)
if (moment(data.time).isAfter(moment('2023-08-03 00:00:00'))) {
return <div className='maintenanceNew'>
<Descriptions title="基础信息" bordered style={{ marginBottom: 20 }}>
<Descriptions.Item label="道路类型">{data['codeRoad'] && data['codeRoad'].length ? data['codeRoad'][0] === 'X' ? '县道' : data['codeRoad'][0] === 'Y' ? '乡道' : '村道' : ''}</Descriptions.Item>
<Descriptions.item label="其他">{reportTypeText(data['projectType']) || ''}</Descriptions.item>
<Descriptions.item label="路线代码">{data['codeRoad'] || ''}</Descriptions.item>
<Descriptions.item label="路线名称">{data['code'] || ''}</Descriptions.item>
<Descriptions.item label="养护路段" span={2}>{data['roadSectionStart'] + '-' + data['roadSectionEnd'] || ''}</Descriptions.item>
<Descriptions.Item label="具体位置" span={3} >{data['address'] || ''}</Descriptions.Item>
</Descriptions>
<Descriptions title="道路信息" bordered style={{ marginBottom: 20 }}>
{roadInfo.map(item => (
<Descriptions.Item label={item.key}>
{data[item.name] || ''}
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="道路信息" bordered style={{ marginBottom: 20 }}>
{mantenanceInfo.map(item => (
<Descriptions.Item label={item.key}>
{data[item.name] || ''}
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="养护图片" bordered style={{ marginBottom: 20 }} >
{mantenancePic.map(item => (
<Descriptions.Item label={item.key} span={3} >
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data[item.name]?.map(imgSrc => {
return <div style={{ width: '50px', margin: 6, display: 'flex' }}>
<Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
</div>
}) || '暂无图片'}
</div>
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="养护视频" bordered style={{ marginBottom: 20 }} >
<Descriptions.Item label={'养护视频'} span={3}>
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data['videoUrl']?.map(videoSrc => {
return <div style={{ width: '44%', margin: 6, display: 'flex' }}>
<video src={qndmn + '/' + videoSrc} width={'100%'} style={{ marginBottom: 4 }} controls />
</div>
}) || '暂无视频'}
</div>
</Descriptions.Item>
</Descriptions>
</div>
// if (data) {
// if (moment(data.time).isAfter(moment('2023-08-03 00:00:00'))) {
// return keyList.map(obj => {
// return <div style={{ display: 'flex', width: '100%', justifyContent: 'space-between', margin: '12px 0' }}>
// <span style={{ fontSize: 16, color: 'gray', minWidth: '26%' }}>{obj.key}</span>
// {
// obj.name != 'conserveBeforePic' && obj.name != 'conserveAfterPic' && obj.name != 'roadSectionStart' && obj.name != 'videoUrl' && obj.name.indexOf('conserve') == -1 ?
// <Input
// style={{ width: '60%' }}
// value={
// obj.name == 'id' ?
// moment(data.time).format("YYYYMMDD") * 10000 + data.id
// :
// obj.name == 'projectType' ?
// reportTypeText(data[obj.name])
// : obj.name == 'reportType' && data['codeRoad'] ? data['codeRoad'][0] === 'X' ? '县道'
// : data['codeRoad'][0] === 'Y' ? '乡道' : '村道' :
// data[obj.name]
// }
// disabled
// />
// : obj.name != 'roadSectionStart' && obj.name != 'videoUrl' ?
// <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// {
// data[obj.name] && data[obj.name] instanceof Array ? data[obj.name].map(imgSrc => {
// return <div style={{ width: '44%', margin: 6 }}>
// <Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
// </div>
// }) : '暂无图片'
// }
// </div> : obj.name != 'videoUrl' ? <div style={{ width: '60%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// <Input style={{ width: '100%' }} disabled value={data[obj.name] + '-' + data['roadSectionEnd']} />
// </div> : <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// {
// data[obj.name] && data[obj.name] instanceof Array ? data[obj.name].map(videoUrl => {
// return <div style={{ width: '44%', margin: 6 }}>
// <video width={'100%'} style={{ marginBottom: 4 }} >
// <source src={qndmn + '/' + videoUrl} type="video/mp4" controls />
// </video>
// </div>
// }) : '暂无视频'
// }
// </div>
// }
// </div>
// })
// } else {
// return keyListOld.map(obj => {
// return <div style={{ display: 'flex', width: '100%', justifyContent: 'space-between', margin: '12px 0' }}>
// <span style={{ fontSize: 16, color: 'gray', minWidth: '26%' }}>{obj.key}</span>
// {
// obj.name != 'scenePic' && obj.name.indexOf('conserve') == -1 ?
// <Input
// style={{ width: '70%' }}
// value={
// obj.name == 'id' ?
// moment(data.time).format("YYYYMMDD") * 10000 + data.id
// :
// obj.name == 'projectType' ?
// reportTypeText(data[obj.name]) :
// data[obj.name]
// }
// disabled
// />
// :
// <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// {
// data[obj.name] && data[obj.name] instanceof Array ? data[obj.name].map(imgSrc => {
// return <div style={{ width: '44%', margin: 6 }}>
// <Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
// </div>
// }) : '暂无图片'
// }
// </div>
// }
// </div>
// })
// }
} else {
return <div className='maintenanceNew'>
<Descriptions title="养护信息" bordered style={{ marginBottom: 20 }} column={3}>
<Descriptions.Item label="道路类型">{data['codeRoad'] && data['codeRoad'].length ? data['codeRoad'][0] === 'X' ? '县道' : data['codeRoad'][0] === 'Y' ? '乡道' : '村道' : ''}</Descriptions.Item>
<Descriptions.item label="养护路段" >{data['roadSectionStart'] && data['roadSectionEnd'] ? (data['roadSectionStart'] + '-' + data['roadSectionEnd']) : ''}</Descriptions.item>
<Descriptions.item label="路线代码">{data['codeRoad'] || ''}</Descriptions.item>
{/* <Descriptions.item label="路线名称">{data['code'] || ''}</Descriptions.item> */}
<Descriptions.Item label="具体位置" span={3} >{data['address'] || ''}</Descriptions.Item>
<Descriptions.Item label="养护内容" span={3} >{data['content'] || ''}</Descriptions.Item>
</Descriptions>
<Descriptions title="养护图片" bordered style={{ marginBottom: 20 }} >
{mantenancePic.map(item => (
<Descriptions.Item label={item.key} className="custom-item" span={3}>
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data[item.name]?.map(imgSrc => {
return <div style={{ width: '50px', margin: 6, display: 'flex' }}>
<Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
</div>
}) || '暂无图片'}
</div>
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="养护视频" bordered style={{ marginBottom: 20 }} >
<Descriptions.Item label={'养护视频'} className="custom-item" >
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data['videoUrl']?.map(videoSrc => {
return <div style={{ width: '44%', margin: 6, display: 'flex' }}>
<video src={qndmn + '/' + videoSrc} width={'100%'} style={{ marginBottom: 4 }} controls />
</div>
}) || '暂无视频'}
</div>
</Descriptions.Item>
</Descriptions>
</div>
}
} else {
return '暂无数据'
}
}
// const renderContent = (data) => {
// if (data) {
// if (data['inspectionNoException']) {
// // 当'无异常'字段为true时,显示'无异常'和其他非异常相关字段
// return keyList.map(obj => {
// if (obj.name === 'inspectionNoException' || obj.name === 'reportType' || obj.name === 'projectType' || obj.name === 'road' || obj.name === 'roadSectionStart' || obj.name === 'address' || obj.name === 'codeRoad' || obj.name === 'scenePic' || obj.name === 'videoUrl') {
// return (
// <div style={{ display: 'flex', width: '100%', justifyContent: 'space-between', margin: '12px 0' }}>
// <span style={{ fontSize: 16, color: 'gray', minWidth: '26%' }}>{obj.key}</span>
// {
// obj.name === 'scenePic' && data[obj.name] instanceof Array ?
// <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// {
// data[obj.name].map(imgSrc => {
// return <div style={{ width: '44%', margin: 6 }}>
// <Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
// </div>
// })
// }
// </div>
// : obj.name === 'roadSectionStart' ?
// <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// <Input style={{ width: '100%' }} disabled value={data[obj.name] + '-' + data['roadSectionEnd']} />
// </div>
// :
// <Input
// style={{ width: '70%' }}
// value={
// obj.name === 'inspectionNoException' ?
// '无异常'
// :
// obj.name === 'id'
// ? moment(data.time).format("YYYYMMDD") * 10000 + data.id
// : obj.name === 'projectType' || obj.name === 'reportType'
// ? reportTypeText(data[obj.name])
// : data[obj.name]
// }
// disabled
// />
// }
// </div>
// );
// } else {
// return null; // 不渲染异常相关字段
// }
// });
// } else {
// // 当'无异常'字段为false或未定义时,显示其他异常相关字段
// return keyList.map(obj => {
// if (obj.name !== 'inspectionNoException') {
// return (
// <div style={{ display: 'flex', width: '100%', justifyContent: 'space-between', margin: '12px 0' }}>
// <span style={{ fontSize: 16, color: 'gray', minWidth: '26%' }}>{obj.key}</span>
// {
// obj.name !== 'scenePic' && obj.name !== 'roadSectionStart' && obj.name.indexOf('conserve') === -1 ?
// <Input
// style={{ width: '70%' }}
// value={
// obj.name === 'id'
// ? moment(data.time).format("YYYYMMDD") * 10000 + data.id
// : obj.name === 'projectType' || obj.name === 'reportType'
// ? reportTypeText(data[obj.name])
// : data[obj.name]
// }
// disabled
// />
// : obj.name !== 'roadSectionStart' ?
// <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// {
// data[obj.name] && data[obj.name] instanceof Array ? data[obj.name].map(imgSrc => {
// return <div style={{ width: '44%', margin: 6 }}>
// <Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
// </div>
// }) : '暂无图片'
// }
// </div>
// : <div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
// <Input style={{ width: '100%' }} disabled value={data[obj.name] + '-' + data['roadSectionEnd']} />
// </div>
// }
// </div>
// );
// } else {
// return null; // 不渲染其他异常字段
// }
// });
// }
// } else {
// return '暂无数据';
// }
// }
return (
<Modal
width={'60%'}
visible={visible}
footer={null}
onCancel={handleClose}
title={'养护管理详情'}
>
<Spin spinning={loading}>
{renderContent(data)}
</Spin>
</Modal>
)
}
const MaintenanceSpotCheck = (props) => {
const { dispatch, user, loading, reportDetail, reportDetailLoading } = props
const [data, setData] = useState()//外层表格的数据
const [vis, setVis] = useState(false)//模态框的显示与隐藏变量
const [count, setCount] = useState(0)
const [depId, setDepId] = useState(0)
const [depName, setDepName] = useState('')
const [total, setTotal] = useState(0)
const [previewId, setPreviewId] = useState(0)
const [reportData, setReportData] = useState([])
const [detailVisible, setDetailVisible] = useState(false)
const [dateRange, setDateRange] = useState(['1970-1-1', '2099-12-31']);
const { RangePicker } = DatePicker
const [expandedRowKeys, setExpandedRowKeys] = useState([]);
//console.log('reportData', reportData)
const checkDetail = (record) => {
dispatch(getReportDetail(record?.id))
}
const handleOpen = () => {
setDetailVisible(true)
}
const handleClose = () => {
setDetailVisible(false)
}
//里层列名
const columns = [
{
title: '抽查日期',
key: 'spotDate',
dataIndex: 'spotDate',
align: 'center',
// render: (_, record) => {
// return
// }
},
{
title: '抽查乡镇',
key: 'projectType',
dataIndex: 'depName',
align: 'center',
},
{
title: '抽查数量',
key: 'count',
dataIndex: 'count',
align: 'center',
},
{
title: '抽查总数',
key: 'reportCount',
dataIndex: 'reportCount',
align: 'center',
},
]
const queryData = (query = { startTime: '1970-1-1', endTime: '2099-12-31' }) => {
dispatch(getSpotCheckDetail(query)).then(res => {
if (res.success) {
const data = res?.payload.data?.map(item => {
return {
spotDate: moment(item.date).format('YYYY-MM-DD'),
depName: item.department?.name,
reportCount: item.reportCount,
count: Math.ceil((item.reportCount * item.percentage) / 100),
reportDetail: item.reportSpotChecks?.map(child => {
return child.report
}),
id: item.id
}
})
//console.log('data1', data)
setReportData(data)
}
})
}
useEffect(() => {
queryData()
}, [])
const [form] = Form.useForm()
const addHanler = () => {
setVis(true)
}
const extractHandler = () => {
form.validateFields(['percentValue']).then(async (values) => {
if (Number(values.percentValue) > 0) {
const res = await dispatch(getReportSpotPrepare({ percentage: Number(values.percentValue) }))
// setCount(res?.payload.data?.reportCount)
// setDepId(res?.payload.data?.lukyDepartment?.id)
// setDepName(res?.payload.data?.lukyDepartment?.name)
setPreviewId(res?.payload.data?.previewId)
// setTotal(Math.ceil((res?.payload.data?.reportCount) * (Number(values.percentValue) / 100)))
form.setFieldsValue({
'result': res?.payload.data?.reportCount,
'village': res?.payload.data?.lukyDepartment?.name,
'total': Math.ceil((res?.payload.data?.reportCount) * (Number(values.percentValue) / 100))
})
}
})
}
const cancelHandler = () => {
setVis(false)
form.resetFields()
}
const okHandler = async () => {
if (previewId !== 0) {
const res = await dispatch(getSpotCheck({ previewId }))
const rslt = res.payload.data.map(item => {
return {
spotDate: moment(item.date).format('YYYY-MM-DD'),
depName: item.department?.name,
reportCount: item.reportCount,
count: Math.ceil((item.reportCount * item.percentage) / 100),
reportDetail: item.reportSpotChecks?.map(child => {
return child.report
}),
id: item.id
}
}) || []
setReportData(rslt)
form.resetFields()
setVis(false)
}
}
//console.log('setReportData', reportData)
const lookhandler = () => {
if ((dateRange && dateRange instanceof Array && dateRange[0] != '')) {
queryData({ startTime: moment(dateRange[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'), endTime: moment(dateRange[1]).endOf('day').format('YYYY-MM-DD HH:mm:ss') })
}
}
return (
<div>
<Button onClick={addHanler} type='primary' style={{ marginRight: '50px' }}> 新增 </Button>
<RangePicker onChange={(date, dateString) => { setDateRange(dateString) }} style={{ marginRight: '50px' }} />
<Button onClick={lookhandler} > 查询 </Button>
<Divider />
<ProTable
columns={columns}
dataSource={reportData}
loading={loading}
expandable={{
//expandedRowKeys, // 控制哪些行展开,这里需要通过 state 管理
defaultExpandedRowKeys: ['0'],
// onExpand: handleExpand,
expandedRowRender: (record) => (
< Table
pagination={false}
dataSource={record?.reportDetail}
columns={
[
{ title: '所属道路', dataIndex: 'road' },
{
title: '所在路段',
key: 'address',
dataIndex: 'address',
align: 'center',
render: (_, r) => {
return `${r?.roadSectionStart || ''}-${r?.roadSectionEnd || ''}`
}
},
{ title: '具体位置', dataIndex: 'address' },
{
title: '上报人',
width: 100,
key: 'userName',
dataIndex: 'userName',
align: 'center',
render: (text, r) => {
return r?.user?.name || ''
}
},
{
title: '上报时间',
key: 'time',
dataIndex: 'time',
valueType: 'dateTime',
align: 'center',
render: (_, r) => {
return moment(r?.time).format('YYYY-MM-DD HH:mm:ss')
}
},
{
title: '操作',
key: 'caozuo',
align: 'center',
render: (_, r) => {
return <Button
onClick={() => { checkDetail(r); handleOpen() }}
style={{ marginRight: 10 }}>查看</Button>
}
}
// { title: '', dataIndex: 'subColumn1' },
// { title: '', dataIndex: 'subColumn2' },
// ... 其他子表格列配置
]}
/>
),
}}
pagination={{
pageSize: 10,
defaultPageSize: 10,
showSizeChanger: false,
}}
rowKey={(record) => { return record.id }}
toolBarRender={false}
search={false}
/>
<Modal visible={vis} onCancel={cancelHandler} title='养护抽查' onOk={okHandler}>
<Form form={form}>
<Form.Item
label="抽取比例(%)"
// name="percent"
rules={[{ required: true, message: '请填写抽取比例' }]}
>
<Input.Group compact>
<Form.Item
name="percentValue"
noStyle
rules={[
{ required: true, message: '请填写抽取比例' },
{
pattern: /^(100|\d{1,2})(\.\d{1,2})?$/,
message: '请输入有效的比例',
},
]}
>
<Input style={{ width: '80%' }} placeholder="请输入抽取比例" />
</Form.Item>
{/* <Form.Item
// name="percentSign"
noStyle
style={{ width: '20%', textAlign: 'center' }}
>
%
</Form.Item> */}
</Input.Group>
</Form.Item>
<Form.Item className="ant-row" style={{
textAlign: 'center',
}}>
<Button style={{}} type='primary' onClick={extractHandler}>开始抽取</Button>
</Form.Item>
<Form.Item label='抽查总数' name='result'>
<Input disabled />
</Form.Item>
<Form.Item label='抽查乡镇' name='village'>
<Input disabled />
</Form.Item>
<Form.Item label='抽查条数' name='total'>
<Input disabled />
</Form.Item>
</Form>
</Modal>
<DetailForm visible={detailVisible}
handleClose={handleClose}
data={reportDetail}
loading={reportDetailLoading} />
</div>
)
}
function mapStateToProps (state) {
const { auth, spotCheckDetail, reportDetail } = state
//('state1', state)
return {
user: auth.user,
loading: spotCheckDetail?.isRequesting,
reportDetailLoading: reportDetail.isRequesting,
reportDetail: reportDetail.data,
}
}
export default connect(mapStateToProps)(MaintenanceSpotCheck);

10
web/client/src/sections/fillion/containers/index.js

@ -18,9 +18,11 @@ import Assess from './assess'
import VideoCenter from './videoCenter'; import VideoCenter from './videoCenter';
import Building from './building' import Building from './building'
import MaintenanceSpotCheck from './maintenanceSpotCheck' import MaintenanceSpotCheck from './maintenanceSpotCheck'
import MaintenanceSpotCheckNew from './maintenanceSpotCheck-new'
import AdjustLog from './adjustLog'
export { export {
Infor, transportation, BridgeTable, HigHways, Infor, transportation, BridgeTable, HigHways,
OperaTional, Enforce, Public, Videois, PromoTional, OperaTional, Enforce, Public, Videois, PromoTional,
Maintenance, Patrol, File, Jiekouguanli, Maintenance, Patrol, File, Jiekouguanli,
Task, Building, Assess, VideoCenter, MaintenanceSpotCheck Task, Building, Assess, VideoCenter, MaintenanceSpotCheck, MaintenanceSpotCheckNew, AdjustLog
}; };

466
web/client/src/sections/fillion/containers/maintenanceSpotCheck-new.js

@ -0,0 +1,466 @@
import { connect } from 'react-redux';
import React, { useEffect, useState } from 'react';
import { Button, Modal, Form, Input, Divider, Spin, Image, DatePicker, Descriptions, Table } from 'antd'
import ProTable from '@ant-design/pro-table';
import { getReportSpotPrepare, getSpotCheck, getSpotCheckDetail } from '../actions/extract'
import { getReportDetail } from '../actions/patrol';
import moment from 'moment'
import '../components/maintenanceTable.less'
const DetailForm = (props) => {
const { visible, data, handleClose, loading } = props
//console.log('data1', data)
const [qndmn] = useState(localStorage.getItem('qndmn'))
const changeBoolean = (bool) => {
// console.log('bool', bool)
return bool ? '无异常' : '有异常'
}
const reportTypeText = (text) => {
switch (text) {
case 'road': return '道路';
//
case 'countyRoad': return '县道';
case 'villageRoad': return '乡道';
case 'rusticRoad': return '村道';
//
case 'bridge': return '桥梁';
case 'culvert': return '涵洞';
case 'other': return '其他';
//
case 'conserve': return '养护';
case 'patrol': return '巡查';
case 'construction': return '在建';
default: return text;
}
}
const roadInfo = [
{ key: '路面类型', name: 'roadType' },
{ key: '路面宽度/米', name: 'roadWidth' },
{ key: '错车道/个', name: 'wrongLane' },
{ key: '行道树/棵', name: 'roadsideTrees' },
{ key: '边沟/米', name: 'roadsideDitch' },
{ key: '护栏/米', name: 'guardrail' },
{ key: '标线/米', name: 'roadMarking' },
];
const mantenanceInfo = [
{ key: '养护人员人数/人', name: 'maintenanceStaffCount' },
{ key: '修整路肩/平方米', name: 'shoulderRepair' },
{ key: '开挖、清理边沟/米', name: 'ditchCleaning' },
{ key: '修补沥青路面/平米', name: 'asphaltRepair' },
{ key: '修补水泥路面/平米', name: 'concreteRepair' },
{ key: '除草/米', name: 'grassMowing' },
{ key: '行道树刷白/株/公里', name: 'treeWhitening' },
{ key: '公里桩/百米桩刷漆/个', name: 'pileWhitening' },
{ key: '维修护栏/米', name: 'guardrailMaintenance' },
{ key: '修复端头/块', name: 'endHeadRepair' },
{ key: '其他', name: 'otherDescription' },
];
const mantenancePic = [
{ key: '养护前图片', name: 'conserveBeforePic' },
{ key: '养护中图片', name: 'conserveUnderwayPic' },
{ key: '养护后图片', name: 'conserveAfterPic' },
];
const renderContent = (data) => {
if (data) {
if (moment(data.time).isAfter(moment('2023-08-03 00:00:00'))) {
return <div className='maintenanceNew'>
<Descriptions title="基础信息" bordered style={{ marginBottom: 20 }}>
<Descriptions.Item label="道路类型">{data['codeRoad'] && data['codeRoad'].length ? data['codeRoad'][0] === 'X' ? '县道' : data['codeRoad'][0] === 'Y' ? '乡道' : '村道' : ''}</Descriptions.Item>
<Descriptions.item label="其他">{reportTypeText(data['projectType']) || ''}</Descriptions.item>
<Descriptions.item label="路线代码">{data['codeRoad'] || ''}</Descriptions.item>
<Descriptions.item label="路线名称">{data['code'] || ''}</Descriptions.item>
<Descriptions.item label="养护路段" span={2}>{data['roadSectionStart'] + '-' + data['roadSectionEnd'] || ''}</Descriptions.item>
<Descriptions.Item label="具体位置" span={3} >{data['address'] || ''}</Descriptions.Item>
</Descriptions>
<Descriptions title="道路信息" bordered style={{ marginBottom: 20 }}>
{roadInfo.map(item => (
<Descriptions.Item label={item.key}>
{data[item.name] || ''}
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="道路信息" bordered style={{ marginBottom: 20 }}>
{mantenanceInfo.map(item => (
<Descriptions.Item label={item.key}>
{data[item.name] || ''}
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="养护图片" bordered style={{ marginBottom: 20 }} >
{mantenancePic.map(item => (
<Descriptions.Item label={item.key} span={3} >
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data[item.name]?.map(imgSrc => {
return <div style={{ width: '50px', margin: 6, display: 'flex' }}>
<Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
</div>
}) || '暂无图片'}
</div>
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="养护视频" bordered style={{ marginBottom: 20 }} >
<Descriptions.Item label={'养护视频'} span={3}>
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data['videoUrl']?.map(videoSrc => {
return <div style={{ width: '44%', margin: 6, display: 'flex' }}>
<video src={qndmn + '/' + videoSrc} width={'100%'} style={{ marginBottom: 4 }} controls />
</div>
}) || '暂无视频'}
</div>
</Descriptions.Item>
</Descriptions>
</div>
} else {
return <div className='maintenanceNew'>
<Descriptions title="养护信息" bordered style={{ marginBottom: 20 }} column={3}>
<Descriptions.Item label="道路类型">{data['codeRoad'] && data['codeRoad'].length ? data['codeRoad'][0] === 'X' ? '县道' : data['codeRoad'][0] === 'Y' ? '乡道' : '村道' : ''}</Descriptions.Item>
<Descriptions.item label="养护路段" >{data['roadSectionStart'] && data['roadSectionEnd'] ? (data['roadSectionStart'] + '-' + data['roadSectionEnd']) : ''}</Descriptions.item>
<Descriptions.item label="路线代码">{data['codeRoad'] || ''}</Descriptions.item>
{/* <Descriptions.item label="路线名称">{data['code'] || ''}</Descriptions.item> */}
<Descriptions.Item label="具体位置" span={3} >{data['address'] || ''}</Descriptions.Item>
<Descriptions.Item label="养护内容" span={3} >{data['content'] || ''}</Descriptions.Item>
</Descriptions>
<Descriptions title="养护图片" bordered style={{ marginBottom: 20 }} >
{mantenancePic.map(item => (
<Descriptions.Item label={item.key} className="custom-item" span={3}>
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data[item.name]?.map(imgSrc => {
return <div style={{ width: '50px', margin: 6, display: 'flex' }}>
<Image src={qndmn + '/' + imgSrc} width={'100%'} style={{ marginBottom: 4 }} />
</div>
}) || '暂无图片'}
</div>
</Descriptions.Item>
))}
</Descriptions>
<Descriptions title="养护视频" bordered style={{ marginBottom: 20 }} >
<Descriptions.Item label={'养护视频'} className="custom-item" >
<div style={{ width: '70%', display: 'flex', position: 'relative', flexWrap: 'wrap' }}>
{data['videoUrl']?.map(videoSrc => {
return <div style={{ width: '44%', margin: 6, display: 'flex' }}>
<video src={qndmn + '/' + videoSrc} width={'100%'} style={{ marginBottom: 4 }} controls />
</div>
}) || '暂无视频'}
</div>
</Descriptions.Item>
</Descriptions>
</div>
}
} else {
return '暂无数据'
}
}
return (
<Modal
width={'60%'}
visible={visible}
footer={null}
onCancel={handleClose}
title={'养护管理详情'}
>
<Spin spinning={loading}>
{renderContent(data)}
</Spin>
</Modal>
)
}
const MaintenanceSpotCheck = (props) => {
const { dispatch, user, loading, reportDetail, reportDetailLoading } = props
const [data, setData] = useState()//外层表格的数据
const [vis, setVis] = useState(false)//模态框的显示与隐藏变量
const [count, setCount] = useState(0)
const [depId, setDepId] = useState(0)
const [depName, setDepName] = useState('')
const [total, setTotal] = useState(0)
const [previewId, setPreviewId] = useState(0)
const [reportData, setReportData] = useState([])
const [detailVisible, setDetailVisible] = useState(false)
const [dateRange, setDateRange] = useState(['1970-1-1', '2099-12-31']);
const { RangePicker } = DatePicker
const [expandedRowKeys, setExpandedRowKeys] = useState([]);
//console.log('reportData', reportData)
const checkDetail = (record) => {
dispatch(getReportDetail(record?.id))
}
const handleOpen = () => {
setDetailVisible(true)
}
const handleClose = () => {
setDetailVisible(false)
}
//里层列名
const columns = [
{
title: '抽查日期',
key: 'spotDate',
dataIndex: 'spotDate',
},
{
title: '抽查县道比率(%)',
key: 'projeType',
dataIndex: 'dName',
},
{
title: '抽查县道',
key: 'proctType',
dataIndex: '',
},
{
title: '抽查乡道',
key: 'prectTye',
dataIndex: 'depame',
},
{
title: '抽查村道',
key: 'projeType',
dataIndex: 'dName',
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
// render: (_, record) => {
// return
// }
},
]
const queryData = (query = { startTime: '1970-1-1', endTime: '2099-12-31' }) => {
dispatch(getSpotCheckDetail(query)).then(res => {
if (res.success) {
const data = res?.payload.data?.map(item => {
return {
spotDate: moment(item.date).format('YYYY-MM-DD'),
depName: item.department?.name,
reportCount: item.reportCount,
count: Math.ceil((item.reportCount * item.percentage) / 100),
reportDetail: item.reportSpotChecks?.map(child => {
return child.report
}),
id: item.id
}
})
setReportData(data)
}
})
}
useEffect(() => {
queryData()
}, [])
const [form] = Form.useForm()
const addHanler = () => {
setVis(true)
}
const extractHandler = () => {
form.validateFields(['percentValue']).then(async (values) => {
if (Number(values.percentValue) > 0) {
const res = await dispatch(getReportSpotPrepare({ percentage: Number(values.percentValue) }))
// setCount(res?.payload.data?.reportCount)
// setDepId(res?.payload.data?.lukyDepartment?.id)
// setDepName(res?.payload.data?.lukyDepartment?.name)
setPreviewId(res?.payload.data?.previewId)
// setTotal(Math.ceil((res?.payload.data?.reportCount) * (Number(values.percentValue) / 100)))
form.setFieldsValue({
'result': res?.payload.data?.reportCount,
'village': res?.payload.data?.lukyDepartment?.name,
'total': Math.ceil((res?.payload.data?.reportCount) * (Number(values.percentValue) / 100))
})
}
})
}
const cancelHandler = () => {
setVis(false)
form.resetFields()
}
const okHandler = async () => {
if (previewId !== 0) {
const res = await dispatch(getSpotCheck({ previewId }))
const rslt = res.payload.data.map(item => {
return {
spotDate: moment(item.date).format('YYYY-MM-DD'),
depName: item.department?.name,
reportCount: item.reportCount,
count: Math.ceil((item.reportCount * item.percentage) / 100),
reportDetail: item.reportSpotChecks?.map(child => {
return child.report
}),
id: item.id
}
}) || []
setReportData(rslt)
form.resetFields()
setVis(false)
}
}
//console.log('setReportData', reportData)
const lookhandler = () => {
if ((dateRange && dateRange instanceof Array && dateRange[0] != '')) {
queryData({ startTime: moment(dateRange[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'), endTime: moment(dateRange[1]).endOf('day').format('YYYY-MM-DD HH:mm:ss') })
}
}
return (
<div>
<div style={{ display: "flex", alignItems: 'center', justifyContent: 'space-between', marginBottom: 16 }}>
<Button onClick={addHanler} type='primary' style={{ marginRight: '50px' }}> 新增 </Button>
<div>
<RangePicker onChange={(date, dateString) => { setDateRange(dateString) }} style={{ marginRight: 20 }} />
<Button style={{ marginRight: 20 }} onClick={lookhandler} > 查询 </Button>
<Button style={{ marginRight: 20 }} onClick={() => {
}} > 重置 </Button>
</div>
</div>
<Table
columns={columns}
dataSource={reportData}
loading={loading}
expandable={{
//expandedRowKeys, // 控制哪些行展开,这里需要通过 state 管理
defaultExpandedRowKeys: ['0'],
// onExpand: handleExpand,
expandedRowRender: (record) => (
< Table
pagination={false}
dataSource={record?.reportDetail}
columns={
[
{ title: '所属道路', dataIndex: 'road' },
{
title: '所在路段',
key: 'address',
dataIndex: 'address',
align: 'center',
render: (_, r) => {
return `${r?.roadSectionStart || ''}-${r?.roadSectionEnd || ''}`
}
},
{ title: '具体位置', dataIndex: 'address' },
{
title: '上报人',
width: 100,
key: 'userName',
dataIndex: 'userName',
align: 'center',
render: (text, r) => {
return r?.user?.name || ''
}
},
{
title: '上报时间',
key: 'time',
dataIndex: 'time',
valueType: 'dateTime',
align: 'center',
render: (_, r) => {
return moment(r?.time).format('YYYY-MM-DD HH:mm:ss')
}
},
{
title: '操作',
key: 'caozuo',
align: 'center',
render: (_, r) => {
return <Button
onClick={() => { checkDetail(r); handleOpen() }}
style={{ marginRight: 10 }}>查看</Button>
}
}
// { title: '', dataIndex: 'subColumn1' },
// { title: '', dataIndex: 'subColumn2' },
// ... 其他子表格列配置
]}
/>
),
}}
pagination={{
pageSize: 10,
defaultPageSize: 10,
showSizeChanger: false,
}}
rowKey={(record) => { return record.id }}
// toolBarRender={false}
// search={false}
/>
<Modal visible={vis} onCancel={cancelHandler} title='养护抽查' onOk={okHandler}>
<Form form={form}>
<Form.Item
label="抽取比例(%)"
// name="percent"
rules={[{ required: true, message: '请填写抽取比例' }]}
>
<Input.Group compact>
<Form.Item
name="percentValue"
noStyle
rules={[
{ required: true, message: '请填写抽取比例' },
{
pattern: /^(100|\d{1,2})(\.\d{1,2})?$/,
message: '请输入有效的比例',
},
]}
>
<Input style={{ width: '80%' }} placeholder="请输入抽取比例" />
</Form.Item>
{/* <Form.Item
// name="percentSign"
noStyle
style={{ width: '20%', textAlign: 'center' }}
>
%
</Form.Item> */}
</Input.Group>
</Form.Item>
<Form.Item className="ant-row" style={{
textAlign: 'center',
}}>
<Button style={{}} type='primary' onClick={extractHandler}>开始抽取</Button>
</Form.Item>
<Form.Item label='抽查总数' name='result'>
<Input disabled />
</Form.Item>
<Form.Item label='抽查乡镇' name='village'>
<Input disabled />
</Form.Item>
<Form.Item label='抽查条数' name='total'>
<Input disabled />
</Form.Item>
</Form>
</Modal>
<DetailForm visible={detailVisible}
handleClose={handleClose}
data={reportDetail}
loading={reportDetailLoading} />
</div>
)
}
function mapStateToProps (state) {
const { auth, spotCheckDetail, reportDetail } = state
//('state1', state)
return {
user: auth.user,
loading: spotCheckDetail?.isRequesting,
reportDetailLoading: reportDetail.isRequesting,
reportDetail: reportDetail.data,
}
}
export default connect(mapStateToProps)(MaintenanceSpotCheck);

193
web/client/src/sections/fillion/nav-item.js

@ -3,113 +3,118 @@ import { Link } from 'react-router-dom';
import { Menu } from 'antd'; import { Menu } from 'antd';
import { ReadOutlined } from '@ant-design/icons'; import { ReadOutlined } from '@ant-design/icons';
const SubMenu = Menu.SubMenu; const SubMenu = Menu.SubMenu;
export function getNavItem(user, dispatch) { export function getNavItem (user, dispatch) {
const isshow = user?.userResources?. const isshow = user?.userResources?.
some(i => i.resourceId === 'OVERLOADMANAGE' || some(i => i.resourceId === 'OVERLOADMANAGE' ||
i.resourceId === 'ROADMANAGE' || i.resourceId === 'ROADMANAGE' ||
i.resourceId === 'BRIDGEMANAGE' || i.resourceId === 'BRIDGEMANAGE' ||
i.resourceId === 'MAINTENANCEMANAGE' || i.resourceId === 'MAINTENANCEMANAGE' ||
i.resourceId === 'TRANSPORTATIONMANAGE' || i.resourceId === 'TRANSPORTATIONMANAGE' ||
i.resourceId === 'CONSERVATIONMANAGE' || i.resourceId === 'CONSERVATIONMANAGE' ||
i.resourceId === 'PUBLICTRANSPORTMANAGE' || i.resourceId === 'PUBLICTRANSPORTMANAGE' ||
i.resourceId === 'FILEMANAGE' || i.resourceId === 'FILEMANAGE' ||
i.resourceId === 'PUBLICITYVIDEO' || i.resourceId === 'PUBLICITYVIDEO' ||
i.resourceId === 'FEEDBACKMANAGE' || i.resourceId === 'FEEDBACKMANAGE' ||
i.resourceId === 'REPORTMANAGE' || i.resourceId === 'REPORTMANAGE' ||
i.resourceId === 'PATROLMANAGE' || i.resourceId === 'PATROLMANAGE' ||
i.resourceId === 'ASSESSMANAGE' || i.resourceId === 'ASSESSMANAGE' ||
i.resourceId === 'VIDEOCENTER' || i.resourceId === 'VIDEOCENTER' ||
i.resourceId === 'BUILDINGPROJECT' || i.resourceId === 'BUILDINGPROJECT' ||
i.resourceId === 'MAINTENANCESPOTCHECK' || i.resourceId === 'MAINTENANCESPOTCHECK' ||
i.resourceId === 'LUZHENG' i.resourceId === 'LUZHENG' ||
) i.resourceId === 'ADJUSTLOG'
)
return ( return (
user?.username == 'SuperAdmin' || isshow ? user?.username == 'SuperAdmin' || isshow ?
<SubMenu key="fillion" icon={<ReadOutlined />} title={'数据管理'}> <SubMenu key="fillion" icon={<ReadOutlined />} title={'数据管理'}>
{/* {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'OVERLOADMANAGE') ? {/* {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'OVERLOADMANAGE') ?
<Menu.Item key="fillioninfor"> <Menu.Item key="fillioninfor">
<Link to="/fillion/infor">治超管理</Link> <Link to="/fillion/infor">治超管理</Link>
</Menu.Item> : ''} */} </Menu.Item> : ''} */}
{/* <Menu.Item key="filliontask"> {/* <Menu.Item key="filliontask">
<Link to="/fillion/task">任务管理</Link> <Link to="/fillion/task">任务管理</Link>
</Menu.Item> */} </Menu.Item> */}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'LUZHENG') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'LUZHENG') ?
<Menu.Item key="luzheng"> <Menu.Item key="luzheng">
<Link to="/fillion/luzheng">路政管理</Link> <Link to="/fillion/luzheng">路政管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'ROADMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'ROADMANAGE') ?
<Menu.Item key="filliontransportation"> <Menu.Item key="filliontransportation">
<Link to="/fillion/transportation">道路管理</Link> <Link to="/fillion/transportation">道路管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'BRIDGEMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'BRIDGEMANAGE') ?
<Menu.Item key="fillionbridge"> <Menu.Item key="fillionbridge">
<Link to="/fillion/bridge">桥梁管理</Link> <Link to="/fillion/bridge">桥梁管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'MAINTENANCEMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'MAINTENANCEMANAGE') ?
<Menu.Item key="fillionhighways"> <Menu.Item key="fillionhighways">
<Link to="/fillion/highways">管养管理</Link> <Link to="/fillion/highways">管养管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'TRANSPORTATIONMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'TRANSPORTATIONMANAGE') ?
<Menu.Item key="fillionoperational"> <Menu.Item key="fillionoperational">
<Link to="/fillion/operational">运政管理</Link> <Link to="/fillion/operational">运政管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{/* <Menu.Item key="fillionenforce"> {/* <Menu.Item key="fillionenforce">
<Link to="/fillion/enforce">执法管理</Link> <Link to="/fillion/enforce">执法管理</Link>
</Menu.Item> */} </Menu.Item> */}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'CONSERVATIONMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'CONSERVATIONMANAGE') ?
<Menu.Item key="fillionmaintenance"> <Menu.Item key="fillionmaintenance">
<Link to="/fillion/maintenance">养护管理</Link> <Link to="/fillion/maintenance">养护管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'PATROLMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'PATROLMANAGE') ?
<Menu.Item key="fillionpatrol"> <Menu.Item key="fillionpatrol">
<Link to="/fillion/patrol">巡查管理</Link> <Link to="/fillion/patrol">巡查管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'FEEDBACKMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'FEEDBACKMANAGE') ?
<Menu.Item key="fillionpatrolanomaly"> <Menu.Item key="fillionpatrolanomaly">
<Link to="/fillion/patrol_anomaly">异常反馈</Link> <Link to="/fillion/patrol_anomaly">异常反馈</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'REPORTMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'REPORTMANAGE') ?
<Menu.Item key="fillionpatrolroad"> <Menu.Item key="fillionpatrolroad">
<Link to="/fillion/patrol_road">建设上报</Link> <Link to="/fillion/patrol_road">建设上报</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'BUILDINGPROJECT') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'BUILDINGPROJECT') ?
<Menu.Item key="fillionbuilding"> <Menu.Item key="fillionbuilding">
<Link to="/fillion/processsing">在建项目</Link> <Link to="/fillion/processsing">在建项目</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'PUBLICTRANSPORTMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'PUBLICTRANSPORTMANAGE') ?
<Menu.Item key="fillionpublic"> <Menu.Item key="fillionpublic">
<Link to="/fillion/public">公交管理</Link> <Link to="/fillion/public">公交管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'FILEMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'FILEMANAGE') ?
<Menu.Item key="fileCont"> <Menu.Item key="fileCont">
<Link to="/fillion/file">档案管理</Link> <Link to="/fillion/file">档案管理</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{/* <Menu.Item key="fillionvideois"> {/* <Menu.Item key="fillionvideois">
<Link to="/fillion/videois">视频管理</Link> <Link to="/fillion/videois">视频管理</Link>
</Menu.Item> */} </Menu.Item> */}
{/* <Menu.Item key="jiekouguanli"> {/* <Menu.Item key="jiekouguanli">
<Link to="/fillion/jiekouguanli">接口管理</Link> <Link to="/fillion/jiekouguanli">接口管理</Link>
</Menu.Item> */} </Menu.Item> */}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'PUBLICITYVIDEO') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'PUBLICITYVIDEO') ?
<Menu.Item key="fillionpromotional"> <Menu.Item key="fillionpromotional">
<Link to="/fillion/promotional">宣传视频</Link> <Link to="/fillion/promotional">宣传视频</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'ASSESSMANAGE') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'ASSESSMANAGE') ?
<Menu.Item key="fillionassess"> <Menu.Item key="fillionassess">
<Link to="/fillion/assess">考核评分</Link> <Link to="/fillion/assess">考核评分</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'VIDEOCENTER') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'VIDEOCENTER') ?
<Menu.Item key="fillionvideoCenter"> <Menu.Item key="fillionvideoCenter">
<Link to="/fillion/videoCenter">视频中心</Link> <Link to="/fillion/videoCenter">视频中心</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
{user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'MAINTENANCESPOTCHECK') ? {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'MAINTENANCESPOTCHECK') ?
<Menu.Item key="maintenanceSpotCheck"> <Menu.Item key="maintenanceSpotCheck">
<Link to="/fillion/maintenanceSpotCheck">养护抽查</Link> <Link to="/fillion/maintenanceSpotCheck">养护抽查</Link>
</Menu.Item> : ''} </Menu.Item> : ''}
</SubMenu> : null {user?.username == 'SuperAdmin' || user?.userResources?.some(i => i.resourceId === 'ADJUSTLOG') ?
); <Menu.Item key="adjustLog">
<Link to="/fillion/adjustLog">调整日志</Link>
</Menu.Item> : ''}
</SubMenu> : null
);
} }

339
web/client/src/sections/fillion/routes.js

@ -14,184 +14,193 @@ import { File } from './containers';
import { Jiekouguanli } from './containers' import { Jiekouguanli } from './containers'
import { Task, Assess, VideoCenter, } from './containers' import { Task, Assess, VideoCenter, } from './containers'
import { Building } from './containers' import { Building } from './containers'
import { MaintenanceSpotCheck } from './containers' import { MaintenanceSpotCheckNew, AdjustLog } from './containers'
import Luzheng from './containers/luzheng'; import Luzheng from './containers/luzheng';
export default [{ export default [{
type: 'inner', type: 'inner',
route: { route: {
path: '/fillion', path: '/fillion',
key: 'fillion', key: 'fillion',
breadcrumb: '数据管理', breadcrumb: '数据管理',
menuSelectKeys: ['fillion'], menuSelectKeys: ['fillion'],
menuOpenKeys: ['fillion'], menuOpenKeys: ['fillion'],
childRoutes: [{ childRoutes: [{
path: '/infor', path: '/infor',
key: 'fillioninfor', key: 'fillioninfor',
menuSelectKeys: ['fillioninfor'], menuSelectKeys: ['fillioninfor'],
component: Infor, component: Infor,
breadcrumb: '治超管理', breadcrumb: '治超管理',
authCode: 'OVERLOADMANAGE' authCode: 'OVERLOADMANAGE'
}, },
{ {
path: '/luzheng', path: '/luzheng',
key: 'luzheng', key: 'luzheng',
menuSelectKeys: ['luzheng'], menuSelectKeys: ['luzheng'],
component: Luzheng, component: Luzheng,
breadcrumb: '路政管理', breadcrumb: '路政管理',
authCode: 'OVERLOADMANAGE' authCode: 'OVERLOADMANAGE'
}, },
{ {
path: '/task', path: '/task',
key: 'filliontask', key: 'filliontask',
menuSelectKeys: ['filliontask'], menuSelectKeys: ['filliontask'],
component: Task, component: Task,
breadcrumb: '任务管理', breadcrumb: '任务管理',
//authCode: 'OVERLOADMANAGE' //authCode: 'OVERLOADMANAGE'
}, { }, {
path: '/transportation', path: '/transportation',
key: 'filliontransportation', key: 'filliontransportation',
menuSelectKeys: ['filliontransportation'], menuSelectKeys: ['filliontransportation'],
component: transportation, component: transportation,
breadcrumb: '道路管理', breadcrumb: '道路管理',
authCode: 'ROADMANAGE' authCode: 'ROADMANAGE'
}, },
{ {
path: '/processsing', path: '/processsing',
key: 'fillionprocesssing', key: 'fillionprocesssing',
menuSelectKeys: ['fillionprocesssing'], menuSelectKeys: ['fillionprocesssing'],
component: Building, component: Building,
breadcrumb: '在建项目', breadcrumb: '在建项目',
authCode: 'BUILDINGPROJECT' authCode: 'BUILDINGPROJECT'
} }
, { , {
path: '/bridge', path: '/bridge',
key: 'fillionbridge', key: 'fillionbridge',
menuSelectKeys: ['fillionbridge'], menuSelectKeys: ['fillionbridge'],
component: BridgeTable, component: BridgeTable,
breadcrumb: '桥梁管理', breadcrumb: '桥梁管理',
authCode: 'BRIDGEMANAGE' authCode: 'BRIDGEMANAGE'
} }
, { , {
path: '/highways', path: '/highways',
key: 'fillionhighways', key: 'fillionhighways',
menuSelectKeys: ['fillionhighways'], menuSelectKeys: ['fillionhighways'],
component: HigHways, component: HigHways,
breadcrumb: '管养管理', breadcrumb: '管养管理',
authCode: 'MAINTENANCEMANAGE' authCode: 'MAINTENANCEMANAGE'
}, { }, {
path: '/operational', path: '/operational',
key: 'fillionoperational', key: 'fillionoperational',
menuSelectKeys: ['fillionoperational'], menuSelectKeys: ['fillionoperational'],
component: OperaTional, component: OperaTional,
breadcrumb: '运政管理', breadcrumb: '运政管理',
authCode: 'TRANSPORTATIONMANAGE' authCode: 'TRANSPORTATIONMANAGE'
}, { }, {
path: '/enforce', path: '/enforce',
key: 'fillionenforce', key: 'fillionenforce',
menuSelectKeys: ['fillionenforce'], menuSelectKeys: ['fillionenforce'],
component: Enforce, component: Enforce,
breadcrumb: '执法管理', breadcrumb: '执法管理',
}, { }, {
path: '/maintenance', path: '/maintenance',
key: 'fillionmaintenance', key: 'fillionmaintenance',
menuSelectKeys: ['fillionmaintenance'], menuSelectKeys: ['fillionmaintenance'],
component: Maintenance, component: Maintenance,
breadcrumb: '养护管理', breadcrumb: '养护管理',
authCode: 'CONSERVATIONMANAGE' authCode: 'CONSERVATIONMANAGE'
}, { }, {
path: '/patrol', path: '/patrol',
key: 'fillionpatrol', key: 'fillionpatrol',
menuSelectKeys: ['fillionpatrol'], menuSelectKeys: ['fillionpatrol'],
component: Patrol, component: Patrol,
breadcrumb: '巡查管理', breadcrumb: '巡查管理',
authCode: 'PATROLMANAGE' authCode: 'PATROLMANAGE'
}, { }, {
path: '/patrol_anomaly', path: '/patrol_anomaly',
key: 'fillionpatrolanomaly', key: 'fillionpatrolanomaly',
menuSelectKeys: ['fillionpatrolanomaly'], menuSelectKeys: ['fillionpatrolanomaly'],
component: Patrol, component: Patrol,
breadcrumb: '异常反馈', breadcrumb: '异常反馈',
authCode: 'FEEDBACKMANAGE' authCode: 'FEEDBACKMANAGE'
}, { }, {
path: '/patrol_road', path: '/patrol_road',
key: 'fillionpatrolroad', key: 'fillionpatrolroad',
menuSelectKeys: ['fillionpatrolroad'], menuSelectKeys: ['fillionpatrolroad'],
component: Patrol, component: Patrol,
breadcrumb: '建设上报', breadcrumb: '建设上报',
authCode: 'REPORTMANAGE' authCode: 'REPORTMANAGE'
}, { }, {
path: '/public', path: '/public',
key: 'fillionpublic', key: 'fillionpublic',
menuSelectKeys: ['fillionpublic'], menuSelectKeys: ['fillionpublic'],
component: Public, component: Public,
breadcrumb: '公交管理', breadcrumb: '公交管理',
authCode: 'PUBLICTRANSPORTMANAGE' authCode: 'PUBLICTRANSPORTMANAGE'
}, },
{ {
path: '/file', path: '/file',
key: 'fileCont', key: 'fileCont',
menuSelectKeys: ['fileCont'], menuSelectKeys: ['fileCont'],
component: File, component: File,
breadcrumb: '档案管理', breadcrumb: '档案管理',
authCode: 'FILEMANAGE' authCode: 'FILEMANAGE'
}, },
{ {
path: '/videois', path: '/videois',
key: 'fillionvideois', key: 'fillionvideois',
menuSelectKeys: ['fillionvideois'], menuSelectKeys: ['fillionvideois'],
component: Videois, component: Videois,
breadcrumb: '视频管理', breadcrumb: '视频管理',
authCode: 'PUBLICITYVIDEO' authCode: 'PUBLICITYVIDEO'
}, },
{ {
path: '/jiekouguanli', path: '/jiekouguanli',
key: 'jiekouguanli', key: 'jiekouguanli',
menuSelectKeys: ['jiekouguanli'], menuSelectKeys: ['jiekouguanli'],
component: Jiekouguanli, component: Jiekouguanli,
breadcrumb: '接口管理', breadcrumb: '接口管理',
}, { }, {
path: '/promotional', path: '/promotional',
key: 'fillionpromotional', key: 'fillionpromotional',
menuSelectKeys: ['fillionpromotional'], menuSelectKeys: ['fillionpromotional'],
component: PromoTional, component: PromoTional,
breadcrumb: '视频管理', breadcrumb: '视频管理',
authCode: 'PUBLICITYVIDEO' authCode: 'PUBLICITYVIDEO'
}, { }, {
path: '/assess', path: '/assess',
key: 'fillionassess', key: 'fillionassess',
menuSelectKeys: ['fillionassess'], menuSelectKeys: ['fillionassess'],
component: Assess, component: Assess,
breadcrumb: '考核评分', breadcrumb: '考核评分',
authCode: 'ASSESSMANAGE' authCode: 'ASSESSMANAGE'
}, { }, {
path: '/videoCenter', path: '/videoCenter',
key: 'fillionvideoCenter', key: 'fillionvideoCenter',
menuSelectKeys: ['fillionvideoCenter'], menuSelectKeys: ['fillionvideoCenter'],
component: VideoCenter, component: VideoCenter,
breadcrumb: '视频中心', breadcrumb: '视频中心',
authCode: 'VIDEOCENTER' authCode: 'VIDEOCENTER'
}, },
{ {
path: '/maintenanceSpotCheck', path: '/maintenanceSpotCheck',
key: 'maintenanceSpotCheck', key: 'maintenanceSpotCheck',
menuSelectKeys: ['maintenanceSpotCheck'], menuSelectKeys: ['maintenanceSpotCheck'],
component: MaintenanceSpotCheck, component: MaintenanceSpotCheckNew,
breadcrumb: '养护抽查', breadcrumb: '养护抽查',
authCode: 'MAINTENANCESPOTCHECK' authCode: 'MAINTENANCESPOTCHECK'
} },
] {
} path: '/adjustLog',
key: 'adjustLog',
menuSelectKeys: ['adjustLog'],
component: AdjustLog,
breadcrumb: '调整日志',
authCode: 'ADJUSTLOG'
}
]
}
}]; }];

492
web/client/src/sections/organization/containers/authority.js

@ -9,282 +9,282 @@ import Resource from '../components/resource';
import user from './user'; import user from './user';
const Authority = (props) => { const Authority = (props) => {
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
const { dispatch, loading, depMessage, depUser, resource, userResource, clientHeight, user } = props const { dispatch, loading, depMessage, depUser, resource, userResource, clientHeight, user } = props
const r1 = ['USERMANAGE', 'AUTHORIMANAGE', 'OVERLOADMANAGE', 'ROADMANAGE', 'BRIDGEMANAGE', 'MAINTENANCEMANAGE', 'TRANSPORTATIONMANAGE', const r1 = ['USERMANAGE', 'AUTHORIMANAGE', 'OVERLOADMANAGE', 'ROADMANAGE', 'BRIDGEMANAGE', 'MAINTENANCEMANAGE', 'TRANSPORTATIONMANAGE',
'CONSERVATIONMANAGE', 'PATROLMANAGE', 'PUBLICTRANSPORTMANAGE', 'FILEMANAGE', 'PUBLICITYVIDEO', 'FEEDBACKMANAGE', 'REPORTMANAGE', 'CONSERVATIONMANAGE', 'PATROLMANAGE', 'PUBLICTRANSPORTMANAGE', 'FILEMANAGE', 'PUBLICITYVIDEO', 'FEEDBACKMANAGE', 'REPORTMANAGE',
'ASSESSMANAGE', 'VIDEOCENTER', 'BUILDINGPROJECT', 'WXPATROLREPORT', 'WXMAINTENANCEREPORT', 'WXFEEDBACKMANAGE', 'WXBUILDINGROAD', 'ASSESSMANAGE', 'VIDEOCENTER', 'BUILDINGPROJECT', 'WXPATROLREPORT', 'WXMAINTENANCEREPORT', 'WXFEEDBACKMANAGE', 'WXBUILDINGROAD',
'WXTODOANDONE', 'MAINTENANCESPOTCHECK' 'WXTODOANDONE', 'MAINTENANCESPOTCHECK', 'ADJUSTLOG'
] ]
const [depUserCopy, setDepUserCopy] = useState([])//用于存放除了自己的管理的数组,即自己不能调整自己是否为管理员 const [depUserCopy, setDepUserCopy] = useState([])//用于存放除了自己的管理的数组,即自己不能调整自己是否为管理员
const [depSelectedKeys, setDepSelectedKeys] = useState([]) const [depSelectedKeys, setDepSelectedKeys] = useState([])
const [userSelectedKeys, setUserSelectedKeys] = useState([]) const [userSelectedKeys, setUserSelectedKeys] = useState([])
const [depSelected, setDepSelected] = useState() const [depSelected, setDepSelected] = useState()
const [userSelected, setUserSelected] = useState() const [userSelected, setUserSelected] = useState()
const [resCode, setResCode] = useState(userResource.map(i => i.resourceId)) const [resCode, setResCode] = useState(userResource.map(i => i.resourceId))
const [useName, setUseName] = useState()// 选中名字 const [useName, setUseName] = useState()// 选中名字
const [userType, setUserType] = useState() const [userType, setUserType] = useState()
const [depMessagedata, setdepMessagedata] = useState(depMessage) const [depMessagedata, setdepMessagedata] = useState(depMessage)
const rescodeall = resource[0]?.resources?.map(i => ({ label: i.name, value: i.code })) const rescodeall = resource[0]?.resources?.map(i => ({ label: i.name, value: i.code }))
//console.log(resource[0]?.resources?.map(i => ({ label: i.name, value: i.code })), '这个是总的骂') //console.log(resource[0]?.resources?.map(i => ({ label: i.name, value: i.code })), '这个是总的骂')
const [indeterminate, setIndeterminate] = useState(false); const [indeterminate, setIndeterminate] = useState(false);
const [checkAll, setCheckAll] = useState(true); const [checkAll, setCheckAll] = useState(true);
const [rescheckAll, setrescheckAll] = useState(false) const [rescheckAll, setrescheckAll] = useState(false)
const [isshow, setisshow] = useState(false); const [isshow, setisshow] = useState(false);
let plainOptions = depUser.map(i => ({ label: i.name, value: i.id })); let plainOptions = depUser.map(i => ({ label: i.name, value: i.id }));
const [checkedList, setCheckedList] = useState(depUser.map(i => i.id)); const [checkedList, setCheckedList] = useState(depUser.map(i => i.id));
const onChange = (list) => { const onChange = (list) => {
// console.log(list,'选择的') // console.log(list,'选择的')
setCheckedList(list); setCheckedList(list);
setIndeterminate(!!list.length && list.length < plainOptions.length); setIndeterminate(!!list.length && list.length < plainOptions.length);
// setResCode(userResource.map(i=>i.resourceId)) // setResCode(userResource.map(i=>i.resourceId))
setCheckAll(list.length === plainOptions.length); setCheckAll(list.length === plainOptions.length);
dispatch(getUserResource(list)) dispatch(getUserResource(list))
// if(list.length === plainOptions.length){ // if(list.length === plainOptions.length){
// setUseName('全部用户') // setUseName('全部用户')
// } // }
}; };
// console.log(userSelectedKeys,'当前1') // console.log(userSelectedKeys,'当前1')
const onresChange = (d) => { const onresChange = (d) => {
setResCode(d) setResCode(d)
setrescheckAll(d.length === r1.length) setrescheckAll(d.length === r1.length)
} }
const onresCheckAllChange = (d) => { const onresCheckAllChange = (d) => {
setrescheckAll(d.target.checked) setrescheckAll(d.target.checked)
setResCode(d.target.checked ? r1 : []) setResCode(d.target.checked ? r1 : [])
} }
const onCheckAllChange = (e) => { const onCheckAllChange = (e) => {
setCheckedList(e.target.checked ? plainOptions.map(i => i.value) : []); setCheckedList(e.target.checked ? plainOptions.map(i => i.value) : []);
setIndeterminate(false); setIndeterminate(false);
// if(e.target.checked){ // if(e.target.checked){
// setUseName('全部用户') // setUseName('全部用户')
// } // }
setCheckAll(e.target.checked); setCheckAll(e.target.checked);
// setResCode(userResource.map(i=>i.resourceId)) // setResCode(userResource.map(i=>i.resourceId))
}; };
const onshowchange = (e) => { const onshowchange = (e) => {
setisshow(e.target.checked) setisshow(e.target.checked)
} }
//console.log('depMessagedata', depMessagedata) //console.log('depMessagedata', depMessagedata)
useEffect(() => { useEffect(() => {
dispatch(getResource()) dispatch(getResource())
if (!(depMessage && depMessage.length)) { if (!(depMessage && depMessage.length)) {
dispatch(getDepMessage()) dispatch(getDepMessage())
} }
setResCode(userResource.map(i => i.resourceId)) setResCode(userResource.map(i => i.resourceId))
setisshow(userResource.some(i => i.isshow === "true")) setisshow(userResource.some(i => i.isshow === "true"))
setrescheckAll(userResource.map(i => i.resourceId).length === 14) setrescheckAll(userResource.map(i => i.resourceId).length === 14)
}, []) }, [])
useEffect(() => { useEffect(() => {
setResCode(userResource.map(i => i.resourceId)) setResCode(userResource.map(i => i.resourceId))
setisshow(userResource.some(i => i.isshow === "true")) setisshow(userResource.some(i => i.isshow === "true"))
setrescheckAll(userResource.map(i => i.resourceId).length === 14) setrescheckAll(userResource.map(i => i.resourceId).length === 14)
}, [userResource]) }, [userResource])
useEffect(async () => { useEffect(async () => {
if (depMessage.length) { if (depMessage.length) {
//('depMessage', depMessage) //('depMessage', depMessage)
//超级管理员展示所有部门 //超级管理员展示所有部门
if (user?.username === 'SuperAdmin') { if (user?.username === 'SuperAdmin') {
setdepMessagedata(depMessage) setdepMessagedata(depMessage)
dispatch(getDepUser(depMessage[0]?.id)) dispatch(getDepUser(depMessage[0]?.id))
setDepSelectedKeys([depMessage[0]?.id]) setDepSelectedKeys([depMessage[0]?.id])
setDepSelected([depMessage[0]?.name]) setDepSelected([depMessage[0]?.name])
} else { } else {
//不是超级管理员,展示相应部门的数据 //不是超级管理员,展示相应部门的数据
dispatch(getDepUser(user.departmentId)) dispatch(getDepUser(user.departmentId))
const res = await dispatch(getDepById({ deptId: parseInt(user.departmentId) })) const res = await dispatch(getDepById({ deptId: parseInt(user.departmentId) }))
//console.log('resssss', res) //console.log('resssss', res)
setdepMessagedata(res.payload.data) setdepMessagedata(res.payload.data)
// if (authDep.length > 0) { // if (authDep.length > 0) {
// dispatch(getDepUser(authDep[0]?.id)) // dispatch(getDepUser(authDep[0]?.id))
// setDepSelectedKeys([authDep[0]?.id]) // setDepSelectedKeys([authDep[0]?.id])
// setDepSelected([authDep[0]?.name]) // setDepSelected([authDep[0]?.name])
// } // }
} }
} }
}, [depMessage]) }, [depMessage])
// useEffect(() => { // useEffect(() => {
// if(user.username!=='SuperAdmin'){ // if(user.username!=='SuperAdmin'){
// dispatch(getDepMessage(user.departmentId)) // dispatch(getDepMessage(user.departmentId))
// } // }
// }, [depMessage]) // }, [depMessage])
useEffect(() => { useEffect(() => {
const copy = [...new Set(depUser)] const copy = [...new Set(depUser)]
setDepUserCopy(copy) setDepUserCopy(copy)
if (copy.length) { if (copy.length) {
setUserSelectedKeys([copy[0].id]) setUserSelectedKeys([copy[0].id])
setUserSelected(copy[0].username) setUserSelected(copy[0].username)
dispatch(getUserResource(copy[0].id)) dispatch(getUserResource(copy[0].id))
setUseName(copy[0].name) setUseName(copy[0].name)
} }
setCheckedList(copy.map(i => i.id)) setCheckedList(copy.map(i => i.id))
}, [depUser]) }, [depUser])
// console.log(depUser,'用户信息') // console.log(depUser,'用户信息')
const handleSave = () => { const handleSave = () => {
// console.log( userSelectedKeys[0],'当前选中的id') // console.log( userSelectedKeys[0],'当前选中的id')
// checkedList.map(i=>{ // checkedList.map(i=>{
// dispatch(postUserRes({ userId: i, resCode: resCode,isShow:isshow })).then(res => { // dispatch(postUserRes({ userId: i, resCode: resCode,isShow:isshow })).then(res => {
// if (res.success) { // if (res.success) {
// dispatch(getUserResource(i)) // dispatch(getUserResource(i))
// } // }
// }) // })
// dispatch(postUserReso({ userId: i, resCode: resCode,isShow:isshow })) // dispatch(postUserReso({ userId: i, resCode: resCode,isShow:isshow }))
// }) // })
dispatch(postUserRes({ userId: userSelectedKeys[0], resCode: resCode, isShow: isshow })).then(res => { dispatch(postUserRes({ userId: userSelectedKeys[0], resCode: resCode, isShow: isshow })).then(res => {
if (res.success) { if (res.success) {
dispatch(getUserResource(userSelectedKeys[0])) dispatch(getUserResource(userSelectedKeys[0]))
} }
}) })
dispatch(postUserReso({ userId: userSelectedKeys[0], resCode: resCode, isShow: isshow })) dispatch(postUserReso({ userId: userSelectedKeys[0], resCode: resCode, isShow: isshow }))
} }
return ( return (
<Spin spinning={loading}> <Spin spinning={loading}>
<Row gutter={16}> <Row gutter={16}>
<Col span={4} style={{ height: '100%' }}> <Col span={4} style={{ height: '100%' }}>
<Card title="部门" bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}> <Card title="部门" bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}>
{ {
depMessagedata.length ? depMessagedata.length ?
<Tree <Tree
height={clientHeight - 100} height={clientHeight - 100}
defaultExpandedKeys={[depMessagedata[0].id]} defaultExpandedKeys={[depMessagedata[0].id]}
selectedKeys={depSelectedKeys} selectedKeys={depSelectedKeys}
onSelect={(selectedKeys, { selected, selectedNodes, node }) => { onSelect={(selectedKeys, { selected, selectedNodes, node }) => {
setUserType(selectedNodes[0].type) setUserType(selectedNodes[0].type)
setCheckedList(depUserCopy.map(i => i.id)) setCheckedList(depUserCopy.map(i => i.id))
// setResCode(userResource.map(i=>i.resourceId)) // setResCode(userResource.map(i=>i.resourceId))
if (selected) { if (selected) {
setCheckedList(depUserCopy.map(i => i.id)) setCheckedList(depUserCopy.map(i => i.id))
setDepSelectedKeys(selectedKeys) setDepSelectedKeys(selectedKeys)
setDepSelected(selectedNodes[0].name || "") setDepSelected(selectedNodes[0].name || "")
dispatch(getDepUser(selectedKeys[0])) dispatch(getDepUser(selectedKeys[0]))
// setResCode(userResource.map(i=>i.resourceId)) // setResCode(userResource.map(i=>i.resourceId))
} }
}} }}
treeData={depMessagedata} treeData={depMessagedata}
fieldNames={{ fieldNames={{
title: 'name', title: 'name',
key: 'id', key: 'id',
children: 'subordinate' children: 'subordinate'
}} }}
/> : '' /> : ''
} }
</Card> </Card>
</Col> </Col>
<Col span={4} style={{ height: '100%', }}> <Col span={4} style={{ height: '100%', }}>
<Card title={` 用户列表`} bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}> <Card title={` 用户列表`} bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}>
{ {
depUserCopy?.length ? depUserCopy?.length ?
<Tree <Tree
height={clientHeight - 100} height={clientHeight - 100}
defaultSelectedKeys={[depUserCopy[0]?.id]} defaultSelectedKeys={[depUserCopy[0]?.id]}
selectedKeys={userSelectedKeys} selectedKeys={userSelectedKeys}
onSelect={(selectedKeys, { selected, selectedNodes, node, event }) => { onSelect={(selectedKeys, { selected, selectedNodes, node, event }) => {
const name = node.name const name = node.name
setUseName(name) setUseName(name)
if (selected) { if (selected) {
// console.log(selectedKeys,'选中的selectedKeys') // console.log(selectedKeys,'选中的selectedKeys')
// console.log(selectedNodes[0].username || '','node') // console.log(selectedNodes[0].username || '','node')
// console.log(selectedKeys[0],'请求的值') // console.log(selectedKeys[0],'请求的值')
setUserSelectedKeys(selectedKeys) setUserSelectedKeys(selectedKeys)
setUserSelected(selectedNodes[0].username || '') setUserSelected(selectedNodes[0].username || '')
dispatch(getUserResource(selectedKeys[0])) dispatch(getUserResource(selectedKeys[0]))
} }
}} }}
treeData={depUserCopy} treeData={depUserCopy}
fieldNames={{ fieldNames={{
title: 'name', title: 'name',
key: 'id' key: 'id'
}} }}
/> : <Empty /> /> : <Empty />
// <div> // <div>
// <Checkbox indeterminate={indeterminate} onChange={onCheckAllChange} checked={checkAll} disabled={user?.department?.type==="qifu"&&user?.userResources?.filter(i=>i.resourceId==='AUTHORIMANAGE')[0].isShow==="true"?true:''}> // <Checkbox indeterminate={indeterminate} onChange={onCheckAllChange} checked={checkAll} disabled={user?.department?.type==="qifu"&&user?.userResources?.filter(i=>i.resourceId==='AUTHORIMANAGE')[0].isShow==="true"?true:''}>
// 全选 // 全选
// </Checkbox> // </Checkbox>
// <CheckboxGroup options={plainOptions} value={checkedList} onChange={onChange} disabled={user?.department?.type==="qifu"&&user?.userResources?.filter(i=>i.resourceId==='AUTHORIMANAGE')[0].isShow==="true"?true:''}/> // <CheckboxGroup options={plainOptions} value={checkedList} onChange={onChange} disabled={user?.department?.type==="qifu"&&user?.userResources?.filter(i=>i.resourceId==='AUTHORIMANAGE')[0].isShow==="true"?true:''}/>
// </div> : <Empty /> // </div> : <Empty />
} }
</Card> </Card>
</Col> </Col>
<Col span={16} style={{ height: '100%', }}> <Col span={16} style={{ height: '100%', }}>
<Checkbox onChange={onshowchange} checked={isshow} disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'AUTHORIMANAGE')[0]?.isshow === "true" ? true : ''}> <Checkbox onChange={onshowchange} checked={isshow} disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'AUTHORIMANAGE')[0]?.isshow === "true" ? true : ''}>
不可编辑 不可编辑
</Checkbox> </Checkbox>
{depUserCopy?.length ? {depUserCopy?.length ?
<Card title={` 功能范围`} bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}> <Card title={` 功能范围`} bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}>
{/* <Resource {/* <Resource
userSelected={userSelected} userSelected={userSelected}
roleData={resource} roleData={resource}
userRole={userResource} userRole={userResource}
setResCode={setResCode} setResCode={setResCode}
userType={user?.department?.type==="qifu"&&user?.userResources?.filter(i=>i.resourceId==='AUTHORIMANAGE')[0].isShow==="true"?4:userType} userType={user?.department?.type==="qifu"&&user?.userResources?.filter(i=>i.resourceId==='AUTHORIMANAGE')[0].isShow==="true"?4:userType}
/> */} /> */}
<div> <div>
<Checkbox <Checkbox
onChange={onresCheckAllChange} onChange={onresCheckAllChange}
checked={rescheckAll} checked={rescheckAll}
disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'AUTHORIMANAGE')[0].isshow === "true" ? true : ''} disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'AUTHORIMANAGE')[0].isshow === "true" ? true : ''}
> >
全选 全选
</Checkbox> </Checkbox>
<CheckboxGroup <CheckboxGroup
options={rescodeall} options={rescodeall}
value={resCode} value={resCode}
onChange={onresChange} onChange={onresChange}
disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'AUTHORIMANAGE')[0].isshow === "true" ? true : ''} disabled={user?.username !== 'SuperAdmin' && user?.userResources?.filter(i => i.resourceId === 'AUTHORIMANAGE')[0].isshow === "true" ? true : ''}
/> />
</div> </div>
<Row type="flex" justify="center" style={{ marginBottom: 16, marginTop: 16, textAlign: 'center' }}> <Row type="flex" justify="center" style={{ marginBottom: 16, marginTop: 16, textAlign: 'center' }}>
<Col span="24"> <Col span="24">
<Button <Button
disabled={userSelected === "SuperAdmin" || userType === 4} disabled={userSelected === "SuperAdmin" || userType === 4}
onClick={handleSave} onClick={handleSave}
style={{ width: '60%' }} style={{ width: '60%' }}
type='primary'>保存修改</Button> type='primary'>保存修改</Button>
</Col></Row> </Col></Row>
</Card> </Card>
: <Card title={`[]功能范围`} bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}> : <Card title={`[]功能范围`} bordered={false} bodyStyle={{ padding: 8, paddingTop: 24 }}>
<Empty /> <Empty />
</Card> </Card>
} }
</Col> </Col>
</Row> </Row>
</Spin > </Spin >
) )
} }
function mapStateToProps(state) { function mapStateToProps (state) {
const { userResource, resource, depMessage, depUser, global, auth } = state; const { userResource, resource, depMessage, depUser, global, auth } = state;
return { return {
clientHeight: global.clientHeight, clientHeight: global.clientHeight,
loading: depMessage.isRequesting || depUser.isRequesting || resource.isRequesting, loading: depMessage.isRequesting || depUser.isRequesting || resource.isRequesting,
userResource: userResource.data || [], userResource: userResource.data || [],
resource: resource.data || [], resource: resource.data || [],
depMessage: depMessage.data || [], depMessage: depMessage.data || [],
depUser: depUser.data || [], depUser: depUser.data || [],
user: auth.user user: auth.user
}; };
} }
export default connect(mapStateToProps)(Authority); export default connect(mapStateToProps)(Authority);
Loading…
Cancel
Save