巴林闲侠
2 years ago
21 changed files with 955 additions and 5 deletions
@ -0,0 +1,161 @@ |
|||||
|
/* eslint-disable*/ |
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
module.exports = dc => { |
||||
|
const DataTypes = dc.ORM; |
||||
|
const sequelize = dc.orm; |
||||
|
const PatrolRecordIssueHandle = sequelize.define("patrolRecordIssueHandle", { |
||||
|
id: { |
||||
|
type: DataTypes.INTEGER, |
||||
|
allowNull: false, |
||||
|
defaultValue: null, |
||||
|
comment: null, |
||||
|
primaryKey: true, |
||||
|
field: "id", |
||||
|
autoIncrement: true, |
||||
|
unique: "patrol_record_issue_handle_id_uindex" |
||||
|
}, |
||||
|
patrolRecordId: { |
||||
|
type: DataTypes.INTEGER, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "巡检记录id", |
||||
|
primaryKey: false, |
||||
|
field: "patrol_record_id", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
repairPerson: { |
||||
|
type: DataTypes.JSONB, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "维修人", |
||||
|
primaryKey: false, |
||||
|
field: "repair_person", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
repairUnit: { |
||||
|
type: DataTypes.STRING, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "维修单位", |
||||
|
primaryKey: false, |
||||
|
field: "repair_unit", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
startTime: { |
||||
|
type: DataTypes.DATE, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: null, |
||||
|
primaryKey: false, |
||||
|
field: "start_time", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
endTime: { |
||||
|
type: DataTypes.DATE, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: null, |
||||
|
primaryKey: false, |
||||
|
field: "end_time", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
repairAsk: { |
||||
|
type: DataTypes.STRING, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "维修要求", |
||||
|
primaryKey: false, |
||||
|
field: "repair_ask", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
checkPerson: { |
||||
|
type: DataTypes.JSONB, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "质检验收人", |
||||
|
primaryKey: false, |
||||
|
field: "check_person", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
state: { |
||||
|
type: DataTypes.INTEGER, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "流程状态 \n1 制定计划 待审核\n2 \n3\n4\n5\n6\n7", |
||||
|
primaryKey: false, |
||||
|
field: "state", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
approvePerson: { |
||||
|
type: DataTypes.JSONB, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "审批人", |
||||
|
primaryKey: false, |
||||
|
field: "approve_person", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
approveDate: { |
||||
|
type: DataTypes.DATE, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "审批日期", |
||||
|
primaryKey: false, |
||||
|
field: "approve_date", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
approveOpinion: { |
||||
|
type: DataTypes.STRING, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "审批意见", |
||||
|
primaryKey: false, |
||||
|
field: "approve_opinion", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
repairDesc: { |
||||
|
type: DataTypes.STRING, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "维修情况描述", |
||||
|
primaryKey: false, |
||||
|
field: "repair_desc", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
repairImage: { |
||||
|
type: DataTypes.JSONB, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: null, |
||||
|
primaryKey: false, |
||||
|
field: "repair_image", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
creator: { |
||||
|
type: DataTypes.JSONB, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "审批人", |
||||
|
primaryKey: false, |
||||
|
field: "creator", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
createTime: { |
||||
|
type: DataTypes.DATE, |
||||
|
allowNull: true, |
||||
|
defaultValue: null, |
||||
|
comment: "制定日期", |
||||
|
primaryKey: false, |
||||
|
field: "create_time", |
||||
|
autoIncrement: false |
||||
|
}, |
||||
|
}, { |
||||
|
tableName: "patrol_record_issue_handle", |
||||
|
comment: "", |
||||
|
indexes: [] |
||||
|
}); |
||||
|
dc.models.PatrolRecordIssueHandle = PatrolRecordIssueHandle; |
||||
|
return PatrolRecordIssueHandle; |
||||
|
}; |
@ -0,0 +1,60 @@ |
|||||
|
DROP TABLE IF EXISTS "public"."patrol_record_issue_handle"; |
||||
|
create table patrol_record_issue_handle |
||||
|
( |
||||
|
id serial |
||||
|
constraint patrol_record_issue_handle_pk |
||||
|
primary key, |
||||
|
patrol_record_id integer, |
||||
|
repair_person jsonb, |
||||
|
repair_unit varchar(255), |
||||
|
start_time timestamp(6) with time zone, |
||||
|
end_time timestamp(6) with time zone, |
||||
|
repair_ask varchar(255), |
||||
|
check_person jsonb, |
||||
|
state integer, |
||||
|
approve_person jsonb, |
||||
|
approve_date timestamp(6) with time zone, |
||||
|
approve_opinion varchar(255), |
||||
|
repair_desc varchar(255), |
||||
|
repair_image jsonb, |
||||
|
creator jsonb, |
||||
|
create_time timestamp(6) with time zone, |
||||
|
); |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.patrol_record_id is '巡检记录id'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.repair_person is '维修人'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.repair_unit is '维修单位'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.repair_ask is '维修要求'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.check_person is '质检验收人'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.state is '流程状态 |
||||
|
1 待制定计划 |
||||
|
2 待审核 |
||||
|
3 计划驳回 |
||||
|
4 待维修 |
||||
|
5 待验收 |
||||
|
6 验收通过 |
||||
|
7 验收不通过'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.approve_person is '审批人'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.approve_date is '审批日期'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.approve_opinion is '审批意见'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.repair_desc is '维修情况描述'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.creator is '制定人'; |
||||
|
|
||||
|
comment on column patrol_record_issue_handle.create_time is '制定日期'; |
||||
|
|
||||
|
alter table patrol_record_issue_handle |
||||
|
owner to "FashionAdmin"; |
||||
|
|
||||
|
create unique index patrol_record_issue_handle_id_uindex |
||||
|
on patrol_record_issue_handle (id); |
||||
|
|
@ -0,0 +1,11 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
|
||||
|
import * as record from './record' |
||||
|
|
||||
|
|
||||
|
export default { |
||||
|
|
||||
|
...record, |
||||
|
|
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
'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 || '维修计划审批', |
||||
|
}, |
||||
|
}); |
||||
|
} |
||||
|
|
@ -0,0 +1,280 @@ |
|||||
|
import React, { useState, useRef } from 'react'; |
||||
|
import { Button, Form, Row, Col, Table, Popconfirm, Input, message } from 'antd'; |
||||
|
import { |
||||
|
ModalForm, |
||||
|
ProFormText, |
||||
|
ProFormSelect, |
||||
|
ProFormTextArea, |
||||
|
ProFormDatePicker, |
||||
|
ProFormDateRangePicker |
||||
|
} 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, companyList, user } = props; |
||||
|
const formItemLayout = { labelCol: { span: 7 }, wrapperCol: { span: 16 } }; |
||||
|
const formRef = useRef(); |
||||
|
|
||||
|
const initialValues = editData ? { |
||||
|
...editData, |
||||
|
...editData?.patrolRecordIssueHandles[0], |
||||
|
|
||||
|
} : {}; |
||||
|
if (editData?.patrolRecordIssueHandles?.length > 0) { |
||||
|
initialValues.dateRange = [editData?.patrolRecordIssueHandles[0]?.startTime, editData?.patrolRecordIssueHandles[0]?.endTime] |
||||
|
} |
||||
|
const [reason, setReason] = useState('') |
||||
|
|
||||
|
|
||||
|
const approve = async (approve) => { |
||||
|
formRef.current.validateFields().then(async (values) => { |
||||
|
|
||||
|
onFinish && await onFinish({ |
||||
|
msg: approve ? '计划同意' : '计划驳回', |
||||
|
state: approve ? 4 : 3, |
||||
|
approveOpinion: values?.approveOpinion, |
||||
|
approvePerson: user, |
||||
|
approveDate: moment() |
||||
|
}, editData) |
||||
|
return true; |
||||
|
}) |
||||
|
.catch((errors) => { |
||||
|
if (errors) { |
||||
|
|
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
const renderPlanInfo = () => { |
||||
|
return <> |
||||
|
{/* <Card title={'巡检信息'}> */} |
||||
|
<div className="item-title">{"巡检信息"}</div> |
||||
|
<Form> |
||||
|
<Row> |
||||
|
<Col span={12}> |
||||
|
<Form.Item label="结构物名称:" {...formItemLayout}> |
||||
|
<Input value={editData?.points?.project?.name} readOnly /> |
||||
|
</Form.Item> |
||||
|
<Form.Item label="巡检人:" {...formItemLayout}> |
||||
|
<Input value={editData?.points?.user?.name} readOnly /> |
||||
|
</Form.Item> |
||||
|
</Col> |
||||
|
<Col span={12}> |
||||
|
<Form.Item label="巡检单位:" {...formItemLayout}> |
||||
|
<Input value={editData?.points?.user?.department?.name} readOnly title={222} /> |
||||
|
</Form.Item> |
||||
|
|
||||
|
<Form.Item label="巡检时间:" {...formItemLayout}> |
||||
|
<Input value={editData?.inspectionTime && moment(editData?.inspectionTime).format('YYYY-MM-DD HH:mm:ss')} readOnly /> |
||||
|
</Form.Item> |
||||
|
</Col> |
||||
|
</Row> |
||||
|
</Form> |
||||
|
|
||||
|
<div className="item-title">{"问题详情"}</div> |
||||
|
<Row> |
||||
|
<Col span={6}> |
||||
|
<Form.Item label="点位名称:" {...formItemLayout}> |
||||
|
<Input value={editData?.points?.itemData?.name} readOnly /> |
||||
|
</Form.Item> |
||||
|
</Col> |
||||
|
|
||||
|
<Col span={18}> |
||||
|
{ |
||||
|
Object.keys(editData?.points?.inspectContent).map(key => { |
||||
|
if (editData?.points?.inspectContent[key]?.isNormal == false) { |
||||
|
return <Row style={{ marginBottom: 15 }}> |
||||
|
<Col span={12}> |
||||
|
<Form.Item label="检查项:" {...formItemLayout}> |
||||
|
<Input value={key} readOnly /> |
||||
|
</Form.Item> |
||||
|
<Form.Item label="异常等级:" {...formItemLayout}> |
||||
|
<Input value={editData?.points?.inspectContent[key]?.level} readOnly /> |
||||
|
</Form.Item> |
||||
|
</Col> |
||||
|
<Col span={12}> |
||||
|
<Form.Item label="问题描述:" {...formItemLayout}> |
||||
|
<Input value={editData?.points?.inspectContent[key]?.msgInp} readOnly title={222} /> |
||||
|
</Form.Item> |
||||
|
|
||||
|
<Form.Item label="现场图片:" {...formItemLayout}> |
||||
|
<Uploads |
||||
|
listType='picture-card' |
||||
|
uploadType='project' |
||||
|
maxFilesNum={1} |
||||
|
maxFileSize={10} |
||||
|
isQiniu={true} |
||||
|
disabled={true} |
||||
|
fileTypes={["png", "jpg"]} |
||||
|
defaultValue={ |
||||
|
(() => { |
||||
|
let nextV = [] |
||||
|
for (let s of (editData?.points?.inspectContent[key].imgs || [])) { |
||||
|
if (s) { |
||||
|
nextV.push({ |
||||
|
storageUrl: s |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
return nextV |
||||
|
})() |
||||
|
} |
||||
|
/> |
||||
|
|
||||
|
</Form.Item> |
||||
|
</Col> |
||||
|
</Row> |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
</Col> |
||||
|
</Row></> |
||||
|
} |
||||
|
|
||||
|
return ( |
||||
|
<ModalForm |
||||
|
formRef={formRef} |
||||
|
title={title || ''} |
||||
|
initialValues={initialValues} |
||||
|
trigger={ |
||||
|
triggerRender ? triggerRender : <Button type="primary" > |
||||
|
{title || ''} |
||||
|
</Button> |
||||
|
} |
||||
|
width={1200} |
||||
|
layout="horizontal" |
||||
|
// grid={true}
|
||||
|
{...formItemLayout} |
||||
|
modalProps={{ |
||||
|
destroyOnClose: true, |
||||
|
// onCancel: () => { },
|
||||
|
bodyStyle: { height: 720, overflowY: 'auto' } |
||||
|
}} |
||||
|
onFinish={async (values) => { |
||||
|
values.startTime = values?.dateRange[0]; |
||||
|
values.endTime = values?.dateRange[1]; |
||||
|
onFinish && await onFinish(values, editData) |
||||
|
//message.success('提交成功');
|
||||
|
return true; |
||||
|
}} |
||||
|
|
||||
|
submitter={editData?.patrolRecordIssueHandles[0]?.state === 2 ? { |
||||
|
render: (props, defaultDoms) => { |
||||
|
return [ |
||||
|
<Button onClick={() => { approve(1); }} type='primary'>确定</Button>, |
||||
|
<Button onClick={() => { approve(0); }}>驳回</Button> |
||||
|
]; |
||||
|
} |
||||
|
} : !readOnly} |
||||
|
> |
||||
|
<div> |
||||
|
{/*问题记录信息*/} |
||||
|
{renderPlanInfo()} |
||||
|
|
||||
|
{/*维修处理计划表单*/} |
||||
|
{ |
||||
|
((editData?.patrolRecordIssueHandles?.length == 0 && !readOnly) || editData?.patrolRecordIssueHandles?.length > 0) && |
||||
|
<> |
||||
|
<div className="item-title">{"维修计划信息"}</div> |
||||
|
<Row> |
||||
|
<Col span={12}> |
||||
|
<ProFormSelect |
||||
|
rules={[{ required: true, message: '请选择维修人' }]} |
||||
|
options={[{ value: 1, label: '维修工1' }, { value: 2, label: '维修工2' }]} |
||||
|
disabled={readOnly} |
||||
|
name="repairPerson" |
||||
|
label="选择维修人" |
||||
|
fieldProps={{ |
||||
|
showSearch: true |
||||
|
}} |
||||
|
/> |
||||
|
</Col> |
||||
|
<Col span={12}> |
||||
|
<ProFormText |
||||
|
name="repairUnit" |
||||
|
label="维修单位:" |
||||
|
disabled={readOnly} |
||||
|
rules={[ |
||||
|
{ |
||||
|
max: 50, message: '维修单位长度不能大于50个字符' |
||||
|
}, |
||||
|
{ |
||||
|
whitespace: true, message: '请勿输入空格' |
||||
|
}]} |
||||
|
placeholder="请输入维修单位" |
||||
|
/> |
||||
|
</Col> |
||||
|
|
||||
|
<Col span={12}> |
||||
|
<ProFormDateRangePicker |
||||
|
disabled={readOnly} |
||||
|
name="dateRange" |
||||
|
label="计划开始时间~结束时间:" |
||||
|
rules={[{ required: true, message: '请选择计划时间范围' }]} |
||||
|
/> |
||||
|
</Col> |
||||
|
<Col span={12}> |
||||
|
<ProFormSelect |
||||
|
rules={[{ required: true, message: '请选择质检人' }]} |
||||
|
options={[{ value: 3, label: '质检人1' }, { value: 4, label: '质检人2' }]} |
||||
|
disabled={readOnly} |
||||
|
name="checkPerson" |
||||
|
label="选择质检人" |
||||
|
fieldProps={{ |
||||
|
showSearch: true |
||||
|
}} |
||||
|
/> |
||||
|
</Col> |
||||
|
<Col span={12}> |
||||
|
<ProFormTextArea |
||||
|
name="repairAsk" |
||||
|
label="维修要求:" |
||||
|
disabled={readOnly} |
||||
|
rules={[ |
||||
|
{ |
||||
|
max: 200, message: '维修要求长度不能大于200个字符' |
||||
|
}, |
||||
|
{ |
||||
|
whitespace: true, message: '请勿输入空格' |
||||
|
}]} |
||||
|
placeholder="请输入维修要求" |
||||
|
/></Col> |
||||
|
<Col span={12}></Col> |
||||
|
</Row> |
||||
|
</> |
||||
|
} |
||||
|
|
||||
|
{ |
||||
|
editData?.patrolRecordIssueHandles[0]?.state === 2 && |
||||
|
<> |
||||
|
<div className="item-title">{"维修计划审批"}</div> |
||||
|
<div> |
||||
|
<ProFormTextArea |
||||
|
labelCol={{ span: 5 }} |
||||
|
wrapperCol={{ span: 16 }} |
||||
|
name="approveOpinion" |
||||
|
label="审批意见:" |
||||
|
disabled={editData?.patrolRecordIssueHandles[0]?.state !== 2} |
||||
|
rules={[ |
||||
|
{ required: true, message: '请输入审批意见' }, |
||||
|
{ |
||||
|
max: 200, message: '审批意见长度不能大于200个字符' |
||||
|
}, |
||||
|
{ |
||||
|
whitespace: true, message: '请勿输入空格' |
||||
|
}]} |
||||
|
placeholder="请输入审批意见" |
||||
|
/> |
||||
|
</div> |
||||
|
</> |
||||
|
} |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
|
||||
|
</ ModalForm> |
||||
|
); |
||||
|
}; |
@ -0,0 +1,5 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
import PatrolReocrd from './patrolRecord'; |
||||
|
|
||||
|
export { PatrolReocrd }; |
@ -0,0 +1,234 @@ |
|||||
|
|
||||
|
'use strict' |
||||
|
|
||||
|
import React, { useEffect, useState } from 'react'; |
||||
|
import { connect } from 'react-redux'; |
||||
|
import { Form, Input, Select, Button, Table, Modal, DatePicker, Checkbox, Row, Col, Collapse } from 'antd'; |
||||
|
import moment from "moment"; |
||||
|
import Uploads from '$components/Uploads'; |
||||
|
import IssueHandleModal from '../components/isuue-handle-mdal' |
||||
|
import '../style.less' |
||||
|
|
||||
|
const { Panel } = Collapse; |
||||
|
const ISSUEHANDLE_STATE = [1, 2, 3, 4, 5, 6, 7] |
||||
|
const STATE_TEXT = { 1: '待制定计划', 2: '待审核', 3: '计划驳回', 4: '待维修', 5: '待验收', 6: '验收通过', 7: '验收不通过', } |
||||
|
|
||||
|
const PatrolRecord = (props) => { |
||||
|
const { dispatch, actions, user } = props |
||||
|
const { patrolManage, issueHandle } = actions |
||||
|
const [tableList, settableList] = useState([]) |
||||
|
const [name, setName] = useState(''); |
||||
|
const [curState, setCurState] = useState('null'); |
||||
|
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' }) |
||||
|
|
||||
|
useEffect(() => { |
||||
|
queryData() |
||||
|
}, []) |
||||
|
|
||||
|
const queryData = () => { |
||||
|
dispatch(patrolManage.records(`patrolRecord/all/${times[0]}/${times[1]}/true/null`)).then(res => { |
||||
|
if (res.success) { |
||||
|
settableList(name != null ? res.payload.data?.filter(v => |
||||
|
(v.points.user.name.indexOf(name) != -1 || v.points.project.name.indexOf(name) != -1)) |
||||
|
.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 = '维修计划修改'; |
||||
|
} |
||||
|
return dispatch( |
||||
|
issueHandle.modifyPatrolRecordIssueHandle(editData?.patrolRecordIssueHandles[0]?.id, dataToSave, |
||||
|
values?.msg || msg), |
||||
|
).then(() => { |
||||
|
queryData(); |
||||
|
}); |
||||
|
} |
||||
|
let state = ISSUEHANDLE_STATE[1]; |
||||
|
|
||||
|
return dispatch(issueHandle.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 ? '' : <div>{record.points.project.name}</div> |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
title: '上报人', |
||||
|
dataIndex: 'type', |
||||
|
key: 'type', |
||||
|
showInDetail: true, |
||||
|
width: '10%', |
||||
|
render: (text, record, index) => { |
||||
|
return !record.points?.user ? '' : <div>{record.points.user.name}</div> |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
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) => '巡检上报' //暂定巡检上报 后续会增加平台录入
|
||||
|
}, |
||||
|
{ |
||||
|
title: '严重等级', |
||||
|
dataIndex: 'level', |
||||
|
key: 'level', |
||||
|
showInDetail: true, |
||||
|
render: (text, record, index) => { |
||||
|
const LEVELS_ = ['严重', '中度', '轻微']; |
||||
|
const recordLevels = [] |
||||
|
Object.keys(record?.points?.inspectContent).map(key => { |
||||
|
recordLevels.push(record?.points?.inspectContent[key]?.level) |
||||
|
}) |
||||
|
const level = LEVELS_.find(s => recordLevels.find(x => x == s)) |
||||
|
return 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) { |
||||
|
options.push(<IssueHandleModal |
||||
|
editData={record} |
||||
|
readOnly={false} |
||||
|
key="edit" |
||||
|
title="制定计划" |
||||
|
triggerRender={<a style={{ marginRight: 6 }}>{renderOptionText(1)}</a>} |
||||
|
user={user} |
||||
|
onFinish={onFinish} />) |
||||
|
} |
||||
|
if (record?.patrolRecordIssueHandles[0]?.state == 2) { |
||||
|
options.push(<IssueHandleModal |
||||
|
editData={record} |
||||
|
readOnly={true} |
||||
|
key="edit" |
||||
|
title="审核" |
||||
|
triggerRender={<a style={{ marginRight: 6 }}>{renderOptionText(2)}</a>} |
||||
|
user={user} |
||||
|
onFinish={onFinish} />) |
||||
|
} |
||||
|
|
||||
|
if (record?.patrolRecordIssueHandles[0]?.state == 3) { |
||||
|
options.push(<IssueHandleModal |
||||
|
editData={record} |
||||
|
readOnly={false} |
||||
|
key="edit" |
||||
|
title="修改计划" |
||||
|
triggerRender={<a style={{ marginRight: 6 }}>修改计划</a>} |
||||
|
user={user} |
||||
|
onFinish={onFinish} />) |
||||
|
} |
||||
|
|
||||
|
options.push(<IssueHandleModal |
||||
|
editData={record} |
||||
|
readOnly={true} |
||||
|
key="edit" |
||||
|
title="查看详情" |
||||
|
triggerRender={<a>查看详情</a>} |
||||
|
user={user} |
||||
|
onFinish={onFinish} />) |
||||
|
|
||||
|
return options; |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
|
||||
|
return ( |
||||
|
<div id='patrol-record'> |
||||
|
<div style={{ marginBottom: 20 }}> |
||||
|
<Input style={{ width: 240, marginRight: 20 }} |
||||
|
value={name} onChange={e => { setName(e.target.value) }} |
||||
|
placeholder="请输入结构物名称或上报人" allowClear /> |
||||
|
<Select style={{ width: 140, marginRight: 20 }} allowClear |
||||
|
options={[ |
||||
|
{ value: 'null', label: '全部' }, |
||||
|
{ value: 1, label: '待制定计划' }, |
||||
|
{ value: 2, label: '待审核' }, |
||||
|
{ value: 3, label: '计划驳回' }, |
||||
|
{ value: 4, label: '待维修' }, |
||||
|
{ value: 5, label: '待验收' }, |
||||
|
{ value: 6, label: '验收通过' }, |
||||
|
{ value: 7, label: '验收不通过' }, |
||||
|
]} /> |
||||
|
<Button type='primary' onClick={() => { queryData() }}>搜索</Button> |
||||
|
</div> |
||||
|
<Table |
||||
|
columns={columns} |
||||
|
dataSource={tableList} |
||||
|
pagination={{ |
||||
|
showSizeChanger: true, |
||||
|
pageSizeOptions: [10, 20, 50], |
||||
|
|
||||
|
}} |
||||
|
/> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
function mapStateToProps(state) { |
||||
|
const { auth, global } = state; |
||||
|
return { |
||||
|
user: auth.user, |
||||
|
actions: global.actions, |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
export default connect(mapStateToProps)(PatrolRecord); |
@ -0,0 +1,15 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
import reducers from './reducers'; |
||||
|
import routes from './routes'; |
||||
|
import actions from './actions'; |
||||
|
import { getNavItem } from './nav-item'; |
||||
|
|
||||
|
export default { |
||||
|
key: 'issueHandle', |
||||
|
name: '', |
||||
|
reducers: reducers, |
||||
|
routes: routes, |
||||
|
actions: actions, |
||||
|
getNavItem: getNavItem |
||||
|
}; |
@ -0,0 +1,18 @@ |
|||||
|
import React from 'react'; |
||||
|
import { Link } from 'react-router-dom'; |
||||
|
import { Menu } from 'antd'; |
||||
|
import { SettingOutlined } from '@ant-design/icons'; |
||||
|
|
||||
|
const SubMenu = Menu.SubMenu; |
||||
|
|
||||
|
export function getNavItem(user, dispatch) { |
||||
|
// if (!Func.isAuthorized("ORG_MANAGE")) {
|
||||
|
// return null
|
||||
|
// }
|
||||
|
return ( |
||||
|
<Menu.Item icon={<SettingOutlined />} key="issueHandle"> |
||||
|
<Link to="/issueHandle">维修处理</Link> |
||||
|
</Menu.Item> |
||||
|
|
||||
|
); |
||||
|
} |
@ -0,0 +1,5 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
export default { |
||||
|
|
||||
|
}; |
@ -0,0 +1,32 @@ |
|||||
|
'use strict'; |
||||
|
import * as actionTypes from '../actions/record'; |
||||
|
import Immutable from 'immutable'; |
||||
|
|
||||
|
const initState = { |
||||
|
data: {}, |
||||
|
isRequesting: false, |
||||
|
error: null |
||||
|
}; |
||||
|
|
||||
|
function record(state = initState, action) { |
||||
|
const payload = action.payload; |
||||
|
switch (action.type){ |
||||
|
case actionTypes.GET_PATROL_RECORD_LIST: |
||||
|
return Immutable.fromJS(state).set('data', |
||||
|
payload.data).toJS(); |
||||
|
case actionTypes.GET_PATROL_RECORD_LIST_SUCCESS: |
||||
|
return Immutable.fromJS(state).merge({ |
||||
|
isRequesting: false, |
||||
|
data: payload.data |
||||
|
}).toJS(); |
||||
|
case actionTypes.GET_PATROL_RECORD_LIST_ERROR: |
||||
|
return Immutable.fromJS(state).merge({ |
||||
|
isRequesting: false, |
||||
|
error: payload.error |
||||
|
}).toJS(); |
||||
|
default: |
||||
|
return state; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default record; |
@ -0,0 +1,13 @@ |
|||||
|
'use strict'; |
||||
|
import { PatrolReocrd } from './containers'; |
||||
|
|
||||
|
export default [{ |
||||
|
type: 'inner', |
||||
|
route: { |
||||
|
path: '/issueHandle', |
||||
|
key: 'issueHandle', |
||||
|
breadcrumb: '维修处理', |
||||
|
component: PatrolReocrd, |
||||
|
|
||||
|
} |
||||
|
}]; |
@ -0,0 +1,13 @@ |
|||||
|
.patrol-record-detail-modal { |
||||
|
.ant-collapse>.ant-collapse-item>.ant-collapse-header { |
||||
|
padding: 0 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.item-title { |
||||
|
background-color: #4A93DF; |
||||
|
padding: 10px; |
||||
|
color: #fff; |
||||
|
margin-bottom: 20px; |
||||
|
padding-left: 20px; |
||||
|
} |
Loading…
Reference in new issue