From 81c9fa5147a2179da2b726e00ff7449cf83b656b Mon Sep 17 00:00:00 2001 From: zhaobing Date: Wed, 24 Jan 2024 08:47:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=95=85=E9=9A=9C=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/lib/controllers/bigScreen/error.js | 78 ++++ .../controllers/patrolManage/patrolRecord.js | 17 +- api/app/lib/routes/bigScreen/error.js | 13 + web-screen/client/assets/bigScreen/shield.png | Bin 0 -> 68898 bytes .../src/layout/components/header/index.js | 16 +- web-screen/client/src/layout/reducers/tab.js | 2 +- .../src/sections/bigScreen/actions/error.js | 85 ++++ .../src/sections/bigScreen/actions/index.js | 3 +- .../bigScreen/components/IssueHandleModal.js | 429 ++++++++++++++++++ .../bigScreen/components/error/bottom.js | 248 +++++++++- .../bigScreen/components/error/style.less | 208 ++++++++- .../bigScreen/components/error/top.js | 310 ++++++++++++- .../bigScreen/components/leader/left.js | 2 +- .../bigScreen/components/run/style.less | 1 + .../sections/bigScreen/components/style.less | 6 +- web-screen/client/src/utils/fs.js | 16 +- web-screen/client/src/utils/webapi.js | 2 + 17 files changed, 1402 insertions(+), 34 deletions(-) create mode 100644 api/app/lib/controllers/bigScreen/error.js create mode 100644 api/app/lib/routes/bigScreen/error.js create mode 100644 web-screen/client/assets/bigScreen/shield.png create mode 100644 web-screen/client/src/sections/bigScreen/actions/error.js create mode 100644 web-screen/client/src/sections/bigScreen/components/IssueHandleModal.js diff --git a/api/app/lib/controllers/bigScreen/error.js b/api/app/lib/controllers/bigScreen/error.js new file mode 100644 index 0000000..b5fb6cf --- /dev/null +++ b/api/app/lib/controllers/bigScreen/error.js @@ -0,0 +1,78 @@ +'use strict'; + +const moment = require("moment") + + + +async function countIssueByState(ctx, next) { + const sequelize = ctx.fs.dc.orm + const { projectId } = ctx.query + try { + const rslt = await sequelize.query(` + SELECT COUNT(CASE WHEN prih.state=4 THEN 1 END) AS waitingRepair, + COUNT(CASE WHEN prih.state=1 THEN 1 END) AS waitingPlan, + COUNT(CASE WHEN prih.state=5 THEN 1 END) AS waitingCheck, + COUNT(CASE WHEN prih.state=2 THEN 1 END) AS waitingExamine + FROM patrol_record rd + INNER JOIN patrol_record_issue_handle prih + ON rd.id = prih.patrol_record_id + WHERE rd.project_id in (${projectId}) + `) + ctx.status = 200 + ctx.body = rslt[0][0] + + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { message: '根据状态分类查询问题处理失败' } + } + +} +//近30天的问题统计 +async function countDayIssue(ctx, next) { + const sequelize = ctx.fs.dc.orm + const { projectId } = ctx.query + try { + const rslt = await sequelize.query(` + SELECT + date_sequence::DATE AS date, + COALESCE(COUNT(patrol_record.inspection_time), 0) AS count + FROM + generate_series(CURRENT_DATE - INTERVAL '29 days', CURRENT_DATE, '1 day'::interval) date_sequence + LEFT JOIN patrol_record + ON date_sequence::DATE = DATE(patrol_record.inspection_time) + AND patrol_record.project_id in (:projectId) + AND patrol_record.alarm='true' + GROUP BY date + ORDER BY date; + `, { + replacements: { + projectId: projectId, + }, + type: sequelize.QueryTypes.SELECT, + }) + ctx.status = 200 + ctx.body = rslt + + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { message: '近30天的问题统计查询失败' } + } + +} + + + + + + + + + + + +module.exports = { + countIssueByState, + countDayIssue +} \ No newline at end of file diff --git a/api/app/lib/controllers/patrolManage/patrolRecord.js b/api/app/lib/controllers/patrolManage/patrolRecord.js index 879b300..d89f6e8 100644 --- a/api/app/lib/controllers/patrolManage/patrolRecord.js +++ b/api/app/lib/controllers/patrolManage/patrolRecord.js @@ -9,7 +9,7 @@ async function findPatrolRecord(ctx, next) { try { const models = ctx.fs.dc.models; const { startTime, endTime, alarm, patrolPlanId, pointId } = ctx.params; - const { home } = ctx.query + const { home,projectId } = ctx.query const sequelize = ctx.fs.dc.orm; // patrolPlanId传all查所有 let generalInclude = [{ @@ -20,6 +20,7 @@ async function findPatrolRecord(ctx, next) { model: models.PatrolRecordIssueHandle } ] + if (patrolPlanId == 'all') { /* 如果有startTime && endTime,查询所有符合条件的数据 */ if (startTime !== 'null' && endTime !== 'null') { @@ -146,7 +147,11 @@ async function findPatrolRecord(ctx, next) { } } else { - rslt = [] + //大屏那边的查询,根据monitorObject筛选 + if(userInfo.monitorObject.length){ + // rslt = rslt.filter(s => userInfo.monitorObject.find(x => x == s.points.project.id)) + rslt=rslt + } } } ctx.status = 200; @@ -452,7 +457,13 @@ function getSubSystemPatrolAbout(opts) { const models = ctx.fs.dc.models; const { STime, ETime, keywords,IsbigScreen,projectId } = ctx.query if(IsbigScreen==='true'){ - generalInclude=[{ model: models.PatrolRecordIssueHandle }, { model: models.Project, where: { id: { $in: projectId.split(',') } } }] + if(projectId){ + //传结构物id就查询当前结构物对应的记录 + generalInclude=[{ model: models.PatrolRecordIssueHandle }, { model: models.Project, where: { id: { $in: projectId.split(',') } } }] + }else{ + //不传结构物id查询所有 + generalInclude=[{ model: models.PatrolRecordIssueHandle }, { model: models.Project }] + } }else{ generalInclude= [{ model: models.PatrolRecordIssueHandle }, { model: models.Project, where: { subType: { $like: `%${keywords}%` } } }] } diff --git a/api/app/lib/routes/bigScreen/error.js b/api/app/lib/routes/bigScreen/error.js new file mode 100644 index 0000000..50f6a79 --- /dev/null +++ b/api/app/lib/routes/bigScreen/error.js @@ -0,0 +1,13 @@ +'use strict'; +const error = require('../../controllers/bigScreen/error'); + +module.exports = function (app, router, opts) { + + + app.fs.api.logAttr['GET/bigScreen/patrolRecordIssue'] = { content: '', visible: false }; + router.get('/bigScreen/patrolRecordIssue',error.countIssueByState) + + app.fs.api.logAttr['GET/bigScreen/patrolRecordDayIssue'] = { content: '', visible: false }; + router.get('/bigScreen/patrolRecordDayIssue',error.countDayIssue) + +} \ No newline at end of file diff --git a/web-screen/client/assets/bigScreen/shield.png b/web-screen/client/assets/bigScreen/shield.png new file mode 100644 index 0000000000000000000000000000000000000000..815bf0be6eb618096fcd01f77b60f7cb3e4a3a10 GIT binary patch literal 68898 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%0D+1M*P5&;HIvuscrf{fYd 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 a2)qEZ3H&KNr$sja0000 { const [patrolManageVisible, setPatrolManageVisible] = useState(false) const [deviceManageTabsVisible, setDeviceManageTabsVisible] = useState(false) const [currentSubMenuTab, setCurrentSubMenuTab] = useState('') - const [tab, setTab] = useState('leader') + const [tab, setTab] = useState('aiot') const [projectName, setProjectName ]= useState('') const [weather, setWeather] = useState([]) let headerTitleStyle = { @@ -66,11 +66,11 @@ const Header = props => { }, []) const queryWeather = () => { - RouteRequest.get(`/query/weather/3d?location=101240101`).then(res => { - if (res?.daily?.length === 3) { - setWeather(res.daily) - } - }) + // RouteRequest.get(`/query/weather/3d?location=101240101`).then(res => { + // if (res?.daily?.length === 3) { + // setWeather(res.daily) + // } + // }) } const iconSrc = useMemo(() => { @@ -89,7 +89,7 @@ const Header = props => { } const onClick1 = tab => { setTab(tab) - if (tab == 'patrolManage') { + if (tab == 'inspection') { setPatrolManageVisible(true) setDeviceManageTabsVisible(false) } else if (tab == 'device') { @@ -320,7 +320,7 @@ const Header = props => { ? 'inline-block' : 'none', }}> - + {/* */} ))} diff --git a/web-screen/client/src/layout/reducers/tab.js b/web-screen/client/src/layout/reducers/tab.js index 811aa98..e03ae1b 100644 --- a/web-screen/client/src/layout/reducers/tab.js +++ b/web-screen/client/src/layout/reducers/tab.js @@ -3,7 +3,7 @@ import Immutable from 'immutable'; const initState = { - tab: 'leader', + tab: 'aiot', showCG: true }; diff --git a/web-screen/client/src/sections/bigScreen/actions/error.js b/web-screen/client/src/sections/bigScreen/actions/error.js new file mode 100644 index 0000000..650aa1e --- /dev/null +++ b/web-screen/client/src/sections/bigScreen/actions/error.js @@ -0,0 +1,85 @@ +'use strict'; + +import { basicAction } from '@peace/utils' +import { ApiTable } from '$utils' + + +export function addPatrolRecordIssueHandle(params) { + return (dispatch) => basicAction({ + type: 'post', + data: params, + dispatch, + actionType: 'ADD_PatrolRecordIssueHandle_REPORT', + url: ApiTable.addPatrolRecordIssueHandle, + msg: { + option: '维修计划新增', + }, + }); +} + +export function modifyPatrolRecordIssueHandle(id, params, msg) { + return (dispatch) => basicAction({ + type: 'put', + data: params, + dispatch, + actionType: 'MODIFY_PatrolRecordIssueHandle_REPORT', + url: ApiTable.modifyPatrolRecordIssueHandle.replace('{id}', id), + msg: { + option: msg || '维修计划审批', + }, + }); +} + + +export const GET_PATROL_RECORD_LIST = 'GET_PATROL_RECORD_LIST'; +export const GET_PATROL_RECORD_LIST_SUCCESS = 'GET_PATROL_RECORD_LIST_SUCCESS'; +export const GET_PATROL_RECORD_LIST_ERROR = 'GET_PATROL_RECORD_LIST_ERROR'; +export function getRecords(url) { + return (dispatch) => basicAction({ + type: 'get', + dispatch, + actionType: GET_PATROL_RECORD_LIST, + url: url, + msg: { error: '获取巡检记录失败', }, + reducer: { name: 'record' } + }); +} + +export function countIssueByState(query) { + return (dispatch) => basicAction({ + type: 'get', + dispatch, + query, + actionType: 'COUNT_ISSUE_BY_STATE', + url: ApiTable.countIssueByState, + msg: { + option: '根据问题状态统计', + }, + reducer: { name: 'issues' } + }); +} + + +export function countDayIssue(query) { + return (dispatch) => basicAction({ + type: 'get', + dispatch, + query, + actionType: 'COUNT_DAY_ISSUE', + url: ApiTable.countDayIssue, + msg: { + option: '近三十天问题统计', + }, + reducer: { name: 'dayIssues' } + }); +} + + + +export default{ + getRecords, + modifyPatrolRecordIssueHandle, + addPatrolRecordIssueHandle, + countIssueByState, + countDayIssue +} \ No newline at end of file diff --git a/web-screen/client/src/sections/bigScreen/actions/index.js b/web-screen/client/src/sections/bigScreen/actions/index.js index db346b1..67a822e 100644 --- a/web-screen/client/src/sections/bigScreen/actions/index.js +++ b/web-screen/client/src/sections/bigScreen/actions/index.js @@ -1,7 +1,8 @@ 'use strict'; import leader from './leader' import run from './run' +import error from './error' export default { - ...leader,...run + ...leader,...run,...error } \ No newline at end of file diff --git a/web-screen/client/src/sections/bigScreen/components/IssueHandleModal.js b/web-screen/client/src/sections/bigScreen/components/IssueHandleModal.js new file mode 100644 index 0000000..a64d054 --- /dev/null +++ b/web-screen/client/src/sections/bigScreen/components/IssueHandleModal.js @@ -0,0 +1,429 @@ +import React, { useState, useRef } from 'react'; +import { Button, Form, Row, Col, Table, Popconfirm, Input, message } from 'antd'; +import { + ModalForm, + ProFormText, + ProFormSelect, + ProFormTextArea, + ProFormDatePicker, + ProFormDateRangePicker, + ProFormDependency +} from '@ant-design/pro-form'; +import Uploads from '$components/Uploads'; +import moment from 'moment'; +const FormItem = Form.Item; +//state: 1下发未上报 2已上报待审批 3整改完成 上报结果result: status 0 已上报未审批 1 审批通过 2 审批驳回 +export default (props) => { + const { title, triggerRender, editData = null, onFinish, readOnly, structsUsers, user } = props; + const users = structsUsers?.find(s => s.id == editData?.points?.project?.id)?.users?.map(v => { return { value: v.id, label: v.name, ...v } }) + const formItemLayout = { labelCol: { span: 7 }, wrapperCol: { span: 16 } }; + const formRef = useRef(); + + const initialValues = editData ? { + ...editData, + ...editData?.patrolRecordIssueHandles[0], + approvePerson: editData?.patrolRecordIssueHandles[0]?.approvePerson?.name || '', + approveDate: editData?.patrolRecordIssueHandles[0]?.approveDate ? moment(editData?.patrolRecordIssueHandles[0]?.approveDate).format('YYYY-MM-DD HH:mm:ss') : "", + repairPerson: users?.find(s => s.value == editData?.patrolRecordIssueHandles[0]?.repairPerson?.id) ? editData?.patrolRecordIssueHandles[0]?.repairPerson?.id : null, + checkPerson: users?.find(s => s.value == editData?.patrolRecordIssueHandles[0]?.checkPerson?.id) ? editData?.patrolRecordIssueHandles[0]?.checkPerson?.id : null, + } : {}; + if (editData?.patrolRecordIssueHandles?.length > 0) { + initialValues.dateRange = [editData?.patrolRecordIssueHandles[0]?.startTime, editData?.patrolRecordIssueHandles[0]?.endTime] + } + const [approve, setApprove] = useState('') + + const approveHandle = async (values) => { + onFinish && await onFinish({ + msg: approve ? '计划同意' : '计划驳回', + state: approve ? 4 : 3, + approveOpinion: values?.approveOpinion, + approvePerson: user, + approveDate: moment() + }, editData) + } + + const renderPlanInfo = () => { + return <> + {/* */} +
{"巡检信息"}
+
+ + + + + + + + + + + + + + + + + + + +
+ +
{"问题详情"}
+ + + + + + + + + + { + editData?.points?.inspectContent && Array.isArray(editData?.points?.inspectContent) && + editData?.points?.inspectContent?.map(s => { + if (s?.alarm == true) { + return <> + {s?.deviceName && + + + + } + { + s?.checkItems?.map(k => { + return + + + + + + + + + + + + + + + { + let nextV = [] + for (let s of (k.imgs || [])) { + if (s) { + nextV.push({ + storageUrl: s + }) + } + } + return nextV + })() + } + /> + + + + + }) + } + + + + } + }) + } + + + } + + const renderRepairInfo = () => { + return <> +
{"维修处理"}
+ + + + + { + let nextV = [] + for (let s of (editData?.patrolRecordIssueHandles[0]?.repairImage || [])) { + if (s) { + nextV.push({ + storageUrl: s + }) + } + } + return nextV + })() + } + /> + + + + + } + + const renderCheckInfo = () => { + return <> +
{"质检验收"}
+ + + + + + + { + let nextV = [] + for (let s of (editData?.patrolRecordIssueHandles[0]?.checkImage || [])) { + if (s) { + nextV.push({ + storageUrl: s + }) + } + } + return nextV + })() + } + /> + + + + + + + } + return ( + + {title || ''} + + } + width={1300} + layout="horizontal" + // grid={true} + {...formItemLayout} + modalProps={{ + destroyOnClose: true, + // onCancel: () => { }, + bodyStyle: { height: 620, overflowY: 'auto' } + }} + onFinish={async (values) => { + if (editData?.patrolRecordIssueHandles[0]?.state === 2 && title == '审核') { + approveHandle(values) + return true; + } else { + values.repairUnit = values?.repairUnits; + values.startTime = values?.dateRange[0]; + values.endTime = values?.dateRange[1]; + values.repairPerson = { id: users?.find(s => s.value == values.repairPerson)?.value, name: users?.find(s => s.id == values.repairPerson)?.label } + values.checkPerson = { id: users?.find(s => s.value == values.checkPerson)?.value, name: users?.find(s => s.id == values.checkPerson)?.label } + onFinish && await onFinish(values, editData) + //message.success('提交成功'); + return true; + } + }} + + submitter={editData?.patrolRecordIssueHandles[0]?.state === 2 && title != '修改计划' && title != '查看详情' ? { + render: (props, defaultDoms) => { + return [ + , + + ]; + } + } : (!readOnly)} + > +
+ {/*问题记录信息*/} + {renderPlanInfo()} + + {/*问题处理计划表单*/} + { + ((editData?.patrolRecordIssueHandles[0]?.state == 1 && title != '查看详情') || editData?.patrolRecordIssueHandles[0]?.state > 1) && + <> +
{"维修计划信息"}
+ + + {!readOnly ? : + + } + + + + {({ repairPerson }) => { + const department = users?.find(s => s.id == repairPerson)?.department?.name + + return ( + + ); + }} + + + + + + + + + {!readOnly ? : } + + + + {editData?.patrolRecordIssueHandles[0]?.state && editData?.patrolRecordIssueHandles[0]?.state > 3 && + + + } + + + } + + { + ((editData?.patrolRecordIssueHandles[0]?.state > 2) || title == '审核') && + <> +
{"维修计划审批"}
+
+ +
+ + } + + {(editData?.patrolRecordIssueHandles[0]?.state && editData?.patrolRecordIssueHandles[0]?.state > 4) && renderRepairInfo()} + {(editData?.patrolRecordIssueHandles[0]?.state && editData?.patrolRecordIssueHandles[0]?.state > 5) && renderCheckInfo()} +
+ + ); +}; \ No newline at end of file diff --git a/web-screen/client/src/sections/bigScreen/components/error/bottom.js b/web-screen/client/src/sections/bigScreen/components/error/bottom.js index c329f6f..9499545 100644 --- a/web-screen/client/src/sections/bigScreen/components/error/bottom.js +++ b/web-screen/client/src/sections/bigScreen/components/error/bottom.js @@ -1,19 +1,225 @@ import React, { useEffect, useState } from 'react' -import { Spin, Popconfirm, message, Button, Input } from 'antd' +import { Form, Input, Select, Button, Table, Modal, DatePicker, Checkbox, Row, Col, Collapse} from 'antd' import { connect } from 'react-redux' import ProTable from '@ant-design/pro-table' import moment from 'moment' import ReactEcharts from 'echarts-for-react' import PerfectScrollbar from 'perfect-scrollbar' -import '../style.less' +import IssueHandleModal from '../IssueHandleModal' +import './style.less' +import { useFsRequest, ApiTable, Func } from '$utils'; +const { Panel } = Collapse; +const ISSUEHANDLE_STATE = [1, 2, 3, 4, 5, 6, 7] +const STATE_TEXT = { 1: '待制定计划', 2: '待审核', 3: '计划驳回', 4: '待维修', 5: '待验收', 6: '验收通过', 7: '验收不通过', } const Bottom = props => { - const { dispatch, clientHeight, clientWidth, actions } = props + const { dispatch, clientHeight, clientWidth, actions,user } = props + const { bigScreen,patrolManage, issueHandle } = actions + const [tableList, settableList] = useState([]) + const [name, setName] = useState(''); + const [curState, setCurState] = useState('全部'); + const format = 'YYYY-MM-DD HH:mm:ss' + 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 { data: structsUsers = [] } = useFsRequest({ url: 'structures/users' }); + useEffect(() => { + queryData() +}, []) +const queryData = () => { + dispatch(bigScreen.getRecords(`patrolRecord/all/${times[0]}/${times[1]}/true/null`)).then(res => { + if (res.success) { + settableList(name != null ? res.payload.data + ?.filter(v => (v.points.itemData.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 onFinish = async (values, editData) => { + const dataToSave = { ...values }; + if (editData?.patrolRecordIssueHandles?.length > 0) { + let msg = ''; + if (editData?.patrolRecordIssueHandles[0]?.state == 3) { + dataToSave.state = 2; + msg = '维修计划修改'; + } + + if (editData?.patrolRecordIssueHandles[0]?.state == 1) { + dataToSave.state = 2; + dataToSave.creator = user; + dataToSave.createTime = moment(); + msg = '计划制定'; + } + return dispatch( + bigScreen.modifyPatrolRecordIssueHandle(editData?.patrolRecordIssueHandles[0]?.id, dataToSave, + values?.msg || msg), + ).then(() => { + queryData(); + }); + } + let state = ISSUEHANDLE_STATE[1]; + + return dispatch(bigScreen.addPatrolRecordIssueHandle({ + ...dataToSave, + state, + patrolRecordId: editData?.id, + creator: user, + createTime: moment() + })).then(() => { + queryData(); + }); +}; + +const renderOptionText = (currentState) => { + let text = '待制定计划' + + return STATE_TEXT[currentState] || text +} + +const columns = [ + { + title: '结构物名称', + dataIndex: 'name', + key: 'name', + width: '10%', + showInDetail: true, + render: (text, record, index) => { + return !record.points?.project ? '' :
{record.points.project.name}
+ } + }, + { + title: '上报人', + dataIndex: 'type', + key: 'type', + showInDetail: true, + width: '10%', + render: (text, record, index) => { + return !record.points?.user ? '' :
{record.points.user.name}
+ } + }, + { + title: '上报时间', + dataIndex: 'time', + key: 'time', + showInDetail: true, + render: (text, record, index) => moment(record.inspectionTime).format('YYYY-MM-DD HH:mm:ss') || '--' + }, { + title: '点位名称', + dataIndex: 'station', + key: 'station', + showInDetail: true, + render: (text, record, index) => record?.points?.itemData?.name + }, + { + title: '问题来源', + dataIndex: 'source', + key: 'source', + showInDetail: true, + render: (text, record, index) => record?.patrolPlanId == -1 ? '主动上报' : '巡检上报' //暂定巡检上报 后续会增加平台录入 + }, + { + title: '严重等级', + dataIndex: 'level', + key: 'level', + showInDetail: true, + render: (text, record, index) => { + const LEVELS_ = ['严重', '中度', '轻微']; + const recordLevels = [] + record?.points?.inspectContent ? Object.keys(record?.points?.inspectContent).map(key => { + recordLevels.push(record?.points?.inspectContent[key]?.level) + }) : '' + + + if (Array.isArray(record?.points?.inspectContent)) { + record?.points?.inspectContent?.map(x => { + x.checkItems?.map(v => { + recordLevels.push(v?.level) + }) + }) + } + + const level = LEVELS_.find(s => recordLevels.find(x => x == s)) + return level==='轻微'?
{level}
: + level==='中度'?
{level}
: + level==='严重'?
{level}
:'--' + || '-'; + } + }, + { + title: '当前状态', + dataIndex: 'state', + key: 'name', + width: '10%', + showInDetail: true, + render: (text, record, index) => { + return !record?.patrolRecordIssueHandles || record?.patrolRecordIssueHandles?.length == 0 ? '待制定计划' : + renderOptionText(record?.patrolRecordIssueHandles[0]?.state) + } + }, + { + title: '操作', + dataIndex: 'operation', + key: 'operation', + render: (text, record, index) => { + const options = []; + if ((!record?.patrolRecordIssueHandles || record?.patrolRecordIssueHandles?.length == 0 || record?.patrolRecordIssueHandles[0]?.state == 1)) { + options.push(制定计划} + user={user} + onFinish={onFinish} />) + } + + if ( (record?.patrolRecordIssueHandles[0]?.state == 3 || record?.patrolRecordIssueHandles[0]?.state == 2)) { + options.push(修改计划} + user={user} + onFinish={onFinish} />) + } + + if ( record?.patrolRecordIssueHandles[0]?.state == 2) { + options.push(审核} + user={user} + onFinish={onFinish} />) + } + + + options.push(查看详情} + user={user} + onFinish={onFinish} />) + return options; + } + } +] @@ -23,7 +229,41 @@ const Bottom = props => { return ( <> - +
+
+
+ { setName(e.target.value) }} + placeholder="请输入结构物名称或点位名称" allowClear /> +