import AuditContent from '@/components/AuditContent' import { ZhAuditBackButton, ZhCloseButton, ZhSubmitButton, ZhUploadButton } from '@/components/Button' import DatePicker from '@/components/DatePicker' import Header from '@/components/Header' import Slot from '@/components/Header/slot' import OssUploadModal from '@/components/OssUpload' import SvgIcon from '@/components/SvgIcon' import { userStore } from '@/store/mobx' import { iDetailState } from '@/types/auditDetail' import { iFile } from '@/types/file' import { iAuditor } from '@/types/safe' import { iUserInfo } from '@/types/setting' import { apiDelFile, apiGetFileList, apiSaveFileInfo } from '@/utils/common/api' import { auditProgress } from '@/utils/common/constStatus' import consts from '@/utils/consts' import { dayjsFormat } from '@/utils/util' import { Button, Input, message, Pagination, Tooltip } from 'antd' import locale from 'antd/es/date-picker/locale/zh_CN' import dayjs from 'dayjs' import React, { useEffect, useState, useMemo } from 'react' import { RouteComponentProps } from 'react-router' import { apiGetSafeDetail, apiResfulSafeAudit } from './api' import AuditModal from '@/pages/Quality/Content/Info/Detail/components/Modal' import styles from './index.module.scss' import Authorization from '@/components/Authorization' const { TextArea } = Input interface iModalObj { ossModal: boolean auditModal: boolean auditType: string curPage: number loading: boolean } const Detail: React.FC = props => { const { id = '' } = props.location.state as any const [ modalObj, setModalObj ] = useState({ ossModal: false, auditModal: false, auditType: '', loading: false, curPage: 1 }) const [ detail, setDetail ] = useState({ auditName: '', uid: '', auditors: [], bidsectionId: '', code: '', createTime: new Date().toDateString(), demand: '', file: { fileList: [], total: 0 }, id: '', inspection: '', inspectionDetail: '', position: '', status: 0, checkOrder: { // 整改单 name: '', status: 0, opinion: '', create_time: new Date().toDateString() }, auditHistory: [], rectifiedInfo: [], latestAuditor: { auditId: '', auditOrder: 0, bidsectionId: '', dataId: '', dataType: 0, id: '', progress: '', projectId: '', status: 0 }, times: 0 }) const isEdited = useMemo(() => { return !!detail.status }, [ detail.status ]) useEffect(() => { initData() }, []) const initData = async () => { const { code = -1, data = {} } = await apiGetSafeDetail(id) if (code === consts.RET_CODE.SUCCESS) { setDetail({ ...detail, ...data }) } if (!userStore.groupList.length) { userStore.getGroupList() } } const onCreate = async (fileList: iFile[]) => { const { code = -1 } = await apiSaveFileInfo(fileList, consts.DATA_TYPE.SAFE, detail.id) if (code === consts.RET_CODE.SUCCESS) { const newFiles = detail.file.fileList.concat( fileList.map(file => { return { ...file, accountName: userStore.userInfo.name } }) ) setDetail({ ...detail, file: { ...detail.file, total: newFiles.length } }) await fileListChange(modalObj.curPage) } } const onOssModalShow = (show: boolean) => setModalObj({ ...modalObj, ossModal: show }) const fileListChange = async (pageNo: number = 1, pageSize: number = 10) => { const { code = -1, data, total } = await apiGetFileList(consts.DATA_TYPE.SAFE, detail.id, pageNo, pageSize) if (code === consts.RET_CODE.SUCCESS) { setModalObj({ ...modalObj, curPage: pageNo, ossModal: false }) setDetail({ ...detail, file: { ...detail.file, fileList: data, total } }) } } const delFile = async (id: string, isLast: boolean) => { const { code = -1 } = await apiDelFile(id) if (code === consts.RET_CODE.SUCCESS) { await fileListChange(isLast ? modalObj.curPage - 1 : modalObj.curPage) isLast && (setModalObj({ ...modalObj, curPage: modalObj.curPage - 1 })) } } const addAuditor = (type: string, user: iUserInfo) => { if (detail.auditors.find(item => item.progress === (type === 'check' ? '0' : '2') && item.auditId === user.id)) { return message.error('该审批组下已存在该审批人,请勿重复添加') } if (type === 'check') { const newAuditors = detail.auditors const len = detail.auditors.filter((item: iAuditor) => item.progress === '0').length newAuditors.push({ id: '', mobile: '', audit_id: user.id, audit_order: len + 1, position: user.position, progress: '0', name: user.name, accountGroup: user.accountGroup, company: user.company, status: 0 }) setDetail({ ...detail, auditors: newAuditors }) } else { const newAuditors = detail.auditors const len = detail.auditors.filter((item: iAuditor) => item.progress === '2').length newAuditors.push({ id: '', audit_id: user.id, mobile: '', auditOrder: len + 1, position: user.position, progress: '2', name: user.name, accountGroup: user.accountGroup, company: user.company, status: 0 }) setDetail({ ...detail, auditors: newAuditors }) } } const delAuditor = (id: string, progress: string) => { const newAuditors = detail.auditors.filter(item => item.progress !== progress) const auditor = detail.auditors.find(item => item.progress === progress && item.audit_id !== id) if (auditor) { newAuditors.push(auditor) } setDetail({ ...detail, auditors: newAuditors }) } const btnClick = (type: string) => { if (type === 'start') { if (!detail.inspectionDetail || !detail.demand) { return message.error('现场检查情况或处理要求措施不能为空') } } if (type === 'pass' && detail.latestAuditor.progress === '1' && !detail.checkOrder.opinion) { return message.error('请填写整改单') } setModalObj({ ...modalObj, auditType: type, auditModal: true }) } const onModalConfirm = (values?: object) => { let payload: any = { safe_id: detail.id, bidsection_id: detail.bidsectionId, ...values } if (modalObj.auditType === 'start') { payload.inspection = detail.inspection payload.inspectionDetail = detail.inspectionDetail payload.demand = detail.demand payload.createTime = detail.createTime payload.auditors = detail.auditors.filter(item => item.progress === '0').map(item => item.audit_id) payload.reAuditors = detail.auditors.filter(item => item.progress === '2').map(item => item.audit_id) payload.times = detail.times if (!payload.auditors.length || !payload.reAuditors.length) { return message.error('审批人或复查人不能为空') } } if (modalObj.auditType === 'delete') { payload = { id: detail.id } } if (modalObj.auditType === 'pass' || modalObj.auditType === 'back') { payload.id = detail.latestAuditor.id if (detail.latestAuditor.progress === '1') { // if (!detail.checkOrder.opinion) { // return message.error("请填写整改单") // } else { // } payload.rectifiedInfo = detail.checkOrder.opinion } } if (modalObj.auditType === 'close') { payload.id = detail.latestAuditor.id } apiResful(modalObj.auditType, payload) } const apiResful = async (type: string, payload: any) => { setModalObj({ ...modalObj, loading: true }) const { code } = await apiResfulSafeAudit(type, payload) if (code === consts.RET_CODE.SUCCESS) { setModalObj({ ...modalObj, auditModal: false, loading: false }) if (type === 'delete') { props.history.goBack() } else { initData() } } else { setModalObj({ ...modalObj, loading: false }) } } const renderHeaderBtn = (status: number) => { if (!detail.latestAuditor.auditId && userStore.userInfo.id !== detail.uid) return null if (detail.latestAuditor.auditId && userStore.userInfo.id !== detail.latestAuditor.auditId) return null if (!status) { return (
btnClick('delete')}>删除巡检 btnClick('start')}>提交审批
) } else if (status === auditProgress.checking || status === auditProgress.checkNo) { return (
btnClick('back')}>审批退回 btnClick('pass')}>审批通过
) } else if (status === auditProgress.checked) { return (
btnClick('back')}>审批退回 btnClick('pass')}>整改完成
) } } const modalProps = { visible: modalObj.auditModal, loading: modalObj.loading, type: modalObj.auditType } const auditData = { auditors: detail.auditors, auditHistory: detail.auditHistory, status: detail.status, uName: detail.auditName, uid: detail.uid } return (
{renderHeaderBtn(detail.status)}

{detail.code}

安全巡检单
检查项目 { isEdited ? {detail.inspection} :