Browse Source

添加下拉告警

master
dengyinhuan 2 years ago
parent
commit
e02e3ffe54
  1. 3
      api/.vscode/launch.json
  2. 27
      api/app/lib/models/patrol_record_issue_handle.js
  3. 126
      api/log/development.log
  4. 2
      script/1.0.4/schema/3.updata_resource.sql
  5. 3
      script/1.0.4/schema/4.updata_patrol_record_issue__handle.sql
  6. 2
      web/client/src/app.js
  7. 41
      web/client/src/sections/auth/containers/login.js
  8. 93
      web/client/src/sections/patrolManage/components/xiafagaojin.js
  9. 3
      web/client/src/sections/patrolManage/containers/index.js
  10. 213
      web/client/src/sections/patrolManage/containers/yujingguanli.js
  11. 3
      web/client/src/sections/patrolManage/nav-item.js
  12. 11
      web/client/src/sections/patrolManage/routes.js

3
api/.vscode/launch.json

@ -15,7 +15,8 @@
"args": [ "args": [
"-p 4900", "-p 4900",
// //
"-g postgres://FashionAdmin:123456@10.8.30.39:5432/Inspection", // "-g postgres://FashionAdmin:123456@10.8.30.39:5432/Inspection",
"-g postgres://postgres:123456@10.8.16.184:5432/XunJian",
// "-g postgres://FashionAdmin:123456@10.8.30.156:5432/inspection", // "-g postgres://FashionAdmin:123456@10.8.30.156:5432/inspection",
// //
// "--apiEmisUrl http://10.8.30.161:1111", // "--apiEmisUrl http://10.8.30.161:1111",

27
api/app/lib/models/patrol_record_issue_handle.js

@ -168,6 +168,33 @@ module.exports = dc => {
field: "check_image", field: "check_image",
autoIncrement: false autoIncrement: false
}, },
yanshoushijian: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "yanshoushijian",
autoIncrement: false
},
yanshoucishu: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "yanshoucishu",
autoIncrement: false
},
yujingshijian: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "yujingshijian",
autoIncrement: false
},
}, { }, {
tableName: "patrol_record_issue_handle", tableName: "patrol_record_issue_handle",
comment: "", comment: "",

126
api/log/development.log

@ -4194,3 +4194,129 @@ notNull Violation: PatrolPlan.patrolCount cannot be null
2023-02-21 17:02:47.295 - error: path: /patrolTemplate, error: ReferenceError: createUser is not defined 2023-02-21 17:02:47.295 - error: path: /patrolTemplate, error: ReferenceError: createUser is not defined
2023-02-21 17:08:28.472 - error: path: /patrolTemplate, error: ReferenceError: createUser is not defined 2023-02-21 17:08:28.472 - error: path: /patrolTemplate, error: ReferenceError: createUser is not defined
2023-02-21 17:08:39.999 - error: path: /patrolTemplate, error: ReferenceError: createUser is not defined 2023-02-21 17:08:39.999 - error: path: /patrolTemplate, error: ReferenceError: createUser is not defined
2023-03-03 08:50:15.221 - debug: [FS-LOGGER] Init.
2023-03-03 08:50:16.170 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-03 08:50:16.171 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-03 08:50:16.171 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-03 08:52:27.130 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:27.133 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:27.133 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:27.134 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:27.134 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:27.135 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:48.235 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:48.236 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:48.237 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:48.238 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:48.238 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:52:48.239 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:53:09.296 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:53:09.296 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:53:09.296 - error: [FS-ERRHD]
{
message: 'transaction is not defined',
stack: 'ReferenceError: transaction is not defined\n' +
' at login (d:\\前端学习\\巡检\\Inspection\\api\\app\\lib\\controllers\\auth\\index.js:78:9)'
}
2023-03-03 08:55:19.376 - debug: [FS-LOGGER] Init.
2023-03-03 08:55:19.504 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-03 08:55:19.505 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-03 08:55:19.505 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-04 15:30:48.068 - debug: [FS-LOGGER] Init.
2023-03-04 15:30:49.010 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-04 15:30:49.011 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-04 15:30:49.011 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-04 17:42:25.123 - debug: [FS-LOGGER] Init.
2023-03-04 17:42:25.236 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-04 17:42:25.236 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-04 17:42:25.236 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-04 18:22:09.556 - debug: [FS-LOGGER] Init.
2023-03-04 18:22:09.675 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-04 18:22:09.676 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-04 18:22:09.676 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-06 08:51:30.658 - debug: [FS-LOGGER] Init.
2023-03-06 08:51:31.673 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-06 08:51:31.674 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-06 08:51:31.674 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-06 10:16:04.533 - debug: [FS-LOGGER] Init.
2023-03-06 10:16:04.663 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-06 10:16:04.663 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-06 10:16:04.663 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-06 14:30:39.123 - debug: [FS-LOGGER] Init.
2023-03-06 14:30:39.248 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-06 14:30:39.248 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-06 14:30:39.248 - info: [FS-AUTH] Inject auth and api mv into router.
2023-03-06 14:32:05.704 - debug: [FS-LOGGER] Init.
2023-03-06 14:32:05.817 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2023-03-06 14:32:05.817 - debug: init fs.attachment and inject it into app(app.fs.attachment) and runtime ctx(ctx.fs.attachment)
2023-03-06 14:32:05.818 - info: [FS-AUTH] Inject auth and api mv into router.

2
script/1.0.4/schema/3.updata_resource.sql

@ -0,0 +1,2 @@
DELETE FROM public.resource WHERE code = 'REPAIR_MANAGE';
DELETE FROM public.resource WHERE parent_resource = 'REPAIR_MANAGE';

3
script/1.0.4/schema/4.updata_patrol_record_issue__handle.sql

@ -0,0 +1,3 @@
ALTER TABLE patrol_record_issue_handle ADD yanshoushijian timestamp(6);
ALTER TABLE patrol_record_issue_handle ADD yanshoucishu integer;
ALTER TABLE patrol_record_issue_handle ADD yujingshijian timestamp(6);

2
web/client/src/app.js

@ -8,7 +8,7 @@ import ProjectRegime from './sections/projectRegime';
import Organization from './sections/organization'; import Organization from './sections/organization';
import PatrolManage from './sections/patrolManage'; import PatrolManage from './sections/patrolManage';
import IssueHandle from './sections/issueHandle' import IssueHandle from './sections/issueHandle'
import { Func } from '$utils';
const App = props => { const App = props => {
const { projectName } = props const { projectName } = props

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

@ -11,7 +11,7 @@ import { login, LOGIN_ERROR } from '../actions/auth';
import { ExclamationCircleOutlined } from '@ant-design/icons'; import { ExclamationCircleOutlined } from '@ant-design/icons';
import { Uploads } from '$components' import { Uploads } from '$components'
import { LockOutlined, UserOutlined } from '@ant-design/icons'; import { LockOutlined, UserOutlined } from '@ant-design/icons';
import { Func } from '$utils';
import '../style.less'; import '../style.less';
const FormItem = Form.Item; const FormItem = Form.Item;
@ -29,6 +29,43 @@ const Login = props => {
const [codCountDown, setCodeCountDown] = useState(60) const [codCountDown, setCodeCountDown] = useState(60)
const codCountDownRef = useRef(0) const codCountDownRef = useRef(0)
const [form] = Form.useForm(); const [form] = Form.useForm();
const tourl = () => {
if (Func.isAuthorized("STRU_INFO_CONFIG")) {
return '/projectRegime/information'
}
if (Func.isAuthorized("QR_CODE_CONFIG")) {
return '/projectRegime/qrCode'
}
if (Func.isAuthorized("USER_CONFIG")) {
return '/organization/user'
}
if (Func.isAuthorized("AUTH_CONFIG")) {
return '/organization/authority'
}
if (Func.isAuthorized("PATROL_PLAN_CONFIG")) {
return '/patrolManage/patrolPlan'
}
if (Func.isAuthorized("PATROL_RECORD_VIEW")) {
return '/patrolManage/patrolRecord'
}
if (Func.isAuthorized("CHECKREPORT")) {
return '/patrolManage/patrolReport'
}
if (Func.isAuthorized("CHECKITEMSET")) {
return '/patrolManage/checkItems'
}
if (Func.isAuthorized("CHECKMOULD")) {
return '/patrolManage/patrolTemplate'
}
if (Func.isAuthorized("WENTICHULI")) {
return '/issueHandle'
}
else {
return message.warn('没有任何模块的查看权限')
}
}
useEffect(() => { useEffect(() => {
}, []) }, [])
@ -36,7 +73,7 @@ const Login = props => {
useEffect(() => { useEffect(() => {
if (user && user.authorized) { if (user && user.authorized) {
dispatch(push('/projectRegime/information')); dispatch(push(tourl()));
} }
}, [user]) }, [user])

93
web/client/src/sections/patrolManage/components/xiafagaojin.js

@ -0,0 +1,93 @@
import { Button, Form, Input, Modal, Select, DatePicker,Checkbox } from 'antd';
import React, { useState, useEffect } from 'react';
import { connect } from 'react-redux';
import { createPatrolTemplate, delPatrolTemplate, updatePatrolTemplate, getPatrolTemplate } from '../actions/template';
import moment from 'moment';
const { RangePicker } = DatePicker;
const { TextArea } = Input;
const PlanModal = ({ visible, onCancel, dispatch, type, curRecord, tableRef, checkItemsGroup }) => {
const [form] = Form.useForm();
const shigutypes = [{value:1,label: '邮件告警'},
{value:2,label:'短信告警'}]
return (
<Modal
visible={visible}
title="下发告警"
okText="确定"
cancelText="取消"
onCancel={() => {
form.resetFields();
onCancel();
}}
onOk={() => {
form
.validateFields()
.then((values) => {
const params = {
...values,
}
if (type === 'create') {
dispatch(createPatrolTemplate(params)).then(res => {
if (res.success) {
tableRef.current.reload();
form.resetFields();
onCancel();
}
})
} else {
dispatch(updatePatrolTemplate({
...params,
id: curRecord.id
})).then(res => {
if (res.success) {
tableRef.current.reload();
form.resetFields();
onCancel();
}
})
}
})
.catch((info) => {
console.log('Validate Failed:', info);
});
}}
>
<Form
form={form}
// layout="vertical"
name="form_in_modal"
initialValues={{
...curRecord,
checkItems: curRecord?.checkItems?.map(c => c.id)
}}
labelCol={{ span: 5 }} wrapperCol={{ span: 19 }} offe
>
<Form.Item
name="name"
label="告警接收人"
rules={[
{ required: true, message: '请输入告警接收人' },
]}
>
<Input />
</Form.Item>
<Form.Item label="告警方式">
<Checkbox.Group options={shigutypes}/>
</Form.Item>
</Form>
</Modal >
);
};
function mapStateToProps (state) {
const { auth, checkItemsGroup } = state
return {
user: auth.user,
checkItemsGroup: checkItemsGroup.data || []
}
}
export default connect(mapStateToProps)(PlanModal);

3
web/client/src/sections/patrolManage/containers/index.js

@ -5,5 +5,6 @@ import PatrolReocrd from './patrolRecord';
import PatrolReport from './patrolReport'; import PatrolReport from './patrolReport';
import CheckItems from './checkItems'; import CheckItems from './checkItems';
import PlanTemplate from './patrolTemplate'; import PlanTemplate from './patrolTemplate';
import YujingGuanli from './yujingguanli';
export { PatrolPlan, PatrolReocrd, PatrolReport, CheckItems, PlanTemplate }; export { PatrolPlan, PatrolReocrd, PatrolReport, CheckItems, PlanTemplate,YujingGuanli };

213
web/client/src/sections/patrolManage/containers/yujingguanli.js

@ -0,0 +1,213 @@
import React, { useState, useRef, useEffect } from 'react';
import { connect } from 'react-redux';
import { Button, Popconfirm, Tag,Tabs } from 'antd';
import ProTable from '@ant-design/pro-table';
import Xiafagaojin from '../components/xiafagaojin';
import { createPatrolTemplate, delPatrolTemplate, updatePatrolTemplate, getPatrolTemplate } from '../actions/template';
import { getCheckItemsGroup } from '../actions/checkItems';
import moment from 'moment';
function YujingGuanli (props) {
const { dispatch, user,actions } = props;
const tableRef = useRef();
const format = 'YYYY-MM-DD HH:mm:ss'
const { patrolManage } = actions
const [dataSource, setDataSource] = useState([{}]);
const [visible, setVisible] = useState(false);
const [type, setType] = useState();
const [curRecord, setCurRecord] = useState();
const [data,setdata]= useState([])
const [tableList, settableList] = useState([])
const [name, setName] = useState('');
const [curState, setCurState] = useState('全部');
const times = [moment().subtract(70, 'years').format(format), moment().format(format)]
const [search, setSearch] = useState({ name: null, time: [times[0], times[1]], state: 'null' })
const STATE_TEXT = { 1: '待制定计划', 2: '待审核', 3: '计划驳回', 4: '待维修', 5: '待验收', 6: '验收通过', 7: '验收不通过', }
const onChange = (key) => {
console.log(key);
};
const renderOptionText = (currentState) => {
let text = '待制定计划'
return STATE_TEXT[currentState] || text
}
const queryData = () => {
dispatch(patrolManage.records(`patrolRecord/all/${times[0]}/${times[1]}/true/null`)).then(res => {
if (res.success) {
console.log(res,'水平')
let obj = {}
res?.payload?.data?.map(i=>{
if(obj[i?.points?.project?.id]){
// if(obj[i?.points?.project?.id.toString()][i.pointId.toString()]){
// obj[i?.points?.project?.id.toString()][i.pointId.toString()].ponintname=i.points?.itemData?.name
// obj[i?.points?.project?.id.toString()][i.pointId.toString()].num=obj[i?.points?.project?.id.toString()][i.pointId.toString()].num+i?.patrolRecordIssueHandles[0]?.state==6?1:0
// }else{
// obj[i?.points?.project?.id.toString()][i.pointId.toString()].ponintname=i.points?.itemData?.name
// obj[i?.points?.project?.id.toString()][i.pointId.toString()].num=i?.patrolRecordIssueHandles[0]?.state==6?1:0
// }
obj[i?.points?.project?.id].push({pointId:i.pointId,pointname:i.points.itemData.name})
// i?patrolRecordIssueHandles[0]?.state==6
obj[i?.points?.project?.id].num= obj[i?.points?.project?.id].num + i?.patrolRecordIssueHandles[0]?.state==6 ?1:0
}else{
obj[i?.points?.project?.id]={name:i?.points?.project?.name,num:i?.patrolRecordIssueHandles[0]?.state==6 ?1:0 }
}
console.log(obj,'obj')
})
}
})
}
useEffect(() => {
// dispatch(patrolManage.records(`patrolRecord/all/null/null/true/null`)).then(res=>{
// let obj = {}
// res?.payload?.data?.map(i=>{
// if(obj[i?.points?.project?.id]){
// obj[i?.points?.project?.id].name=i?.points?.project?.name;
// obj[i?.points?.project?.id].num=obj[i?.points?.project?.id].num +1
// }else{
// obj[i?.points?.project?.id]={name:i?.points?.project?.name,num:1}
// }
// })
// settableList(name != null ? res.payload.data?.filter(v =>
// (v.points.user.name.indexOf(name) != -1 || v.points.project.name.indexOf(name) != -1))
// .filter(x => curState == '全部' || curState == renderOptionText(x?.patrolRecordIssueHandles[0]?.state))
// .map(v => ({ ...v, key: v.id })) : res.payload.data?.map(v => ({ ...v, key: v.id })))
// const t1 = Object.keys(obj).map(i=>{
// return {id:i,name:obj[i].name,num:obj[i].num}
// })
// console.log(obj,'obj')
// console.log(res,'res')
// })
queryData()
dispatch(getCheckItemsGroup())
}, [])
console.log(tableList,'tablist')
const columns = [{
title: '结构物名称',
dataIndex: 'name',
key: 'name',
// search: false,
ellipsis: true,
}, {
title: '点位名称',
dataIndex: 'describe',
key: 'describe',
search: false,
ellipsis: true
}, {
title: '异常次数',
dataIndex: 'user.name',
key: 'user.name',
ellipsis: true,
search: false,
render: (t, r, i) => {
return r.user ? r.user.name : '-'
}
}, {
title: '产生时间',
dataIndex: 'checkItems',
key: 'checkItems',
ellipsis: true,
search: false,
render: (_, r) => {
return r?.checkItems ? r?.checkItems.map(c => <Tag>{c.name}</Tag>) : '-'
}
}, {
title: '更新时间',
dataIndex: 'checkItems',
key: 'checkItems',
search: false,
ellipsis: true,
render: (_, r) => {
return r?.checkItems ? r?.checkItems.map(c => <Tag>{c.name}</Tag>) : '-'
}
}, {
title: '操作',
dataIndex: 'action',
key: 'action',
search: false,
width: 200,
render: (_, record) => {
return <>
<Button type="link" onClick={() => {
setType('edit')
setCurRecord(record)
setVisible(true)
}}>下发告警</Button>
</>
},
}];
return (
<>
<Tabs
defaultActiveKey="1"
onChange={onChange}
style={{marginLeft:'20px',marginRight:'20px'}}
items={[
{
label: `未告警`,
key: '1',
children: <ProTable
columns={columns}
actionRef={tableRef}
options={false}
dataSource={dataSource || []}
rowKey='id'
pagination={{ pageSize: 10 }}
// search={false}
request={async (params = {}) => {
const res = await dispatch(getPatrolTemplate(params));
setDataSource(res?.payload.data?.rows);
return { ...res };
}}
// toolBarRender={() => [
// <Button
// type="primary"
// key="primary"
// onClick={() => {
// setType('create')
// setVisible(true)
// }}
// >查询</Button>
// ]}
/>,
},
{
label: `已告警`,
key: '2',
children: `Content of Tab Pane 2`,
}
]}
/>
{
visible ?
<Xiafagaojin
visible={visible}
type={type}
curRecord={curRecord}
onCancel={() => {
setVisible(false);
setCurRecord({})
}}
tableRef={tableRef}
/> : null
}
</>
)
}
function mapStateToProps (state) {
const { auth, global } = state
return {
user: auth.user,
actions: global.actions,
}
}
export default connect(mapStateToProps)(YujingGuanli);

3
web/client/src/sections/patrolManage/nav-item.js

@ -26,6 +26,9 @@ export function getNavItem (user, dispatch) {
{Func.isAuthorized('CHECKMOULD') && <Menu.Item key="patrolTemplate"> {Func.isAuthorized('CHECKMOULD') && <Menu.Item key="patrolTemplate">
<Link to="/patrolManage/patrolTemplate">巡检模板</Link> <Link to="/patrolManage/patrolTemplate">巡检模板</Link>
</Menu.Item>} </Menu.Item>}
{ <Menu.Item key="yujingguanli">
<Link to="/patrolManage/yujingguanli">预警管理</Link>
</Menu.Item>}
</SubMenu> </SubMenu>
); );
} }

11
web/client/src/sections/patrolManage/routes.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
import { PatrolPlan, PatrolReocrd, PatrolReport, CheckItems, PlanTemplate } from './containers'; import { PatrolPlan, PatrolReocrd, PatrolReport, CheckItems, PlanTemplate ,YujingGuanli} from './containers';
export default [{ export default [{
type: 'inner', type: 'inner',
@ -32,6 +32,13 @@ export default [{
key: 'patrolTemplate', key: 'patrolTemplate',
component: PlanTemplate, component: PlanTemplate,
breadcrumb: '巡检模板', breadcrumb: '巡检模板',
}] },
{
path: '/yujingguanli',
key: 'yujingguanli',
component: YujingGuanli,
breadcrumb: '预警管理',
}
]
} }
}]; }];
Loading…
Cancel
Save