import React, { useEffect, useState, useMemo, useRef } from 'react'; import { Form, Button, Input, Row, Upload, Col, Table, TreeSelect, DatePicker, InputNumber, message, Image, Radio, Modal, Descriptions, Tabs, Tooltip } from 'antd'; import { VideoCameraOutlined } from '@ant-design/icons'; import { formItemLayout, btnItemLayout } from '../../../../components/crud/FormLayoutProps'; import BasicCrudModal from '../../../../components/crud/BasicCrudModal'; import { CrudOpRender_text } from '../../../../components/crud/CrudOpRender'; import apiurl from '../../../../service/apiurl'; import FormComponent from "./formCom" import NormalSelect from '../../../../components/Form/NormalSelect'; import "./index.less" import moment from 'moment'; import { httpget2, xyt_httpget2, httppost2 } from '../../../../utils/request'; const { RangePicker } = DatePicker const { Dragger } = Upload; const url = "http://223.75.53.141:9100/gs-tsg" const ModalForm = ({ mode, record, refresh, setPrecessVisible }) => { const taskTypes = [ { label: "日常巡查", value: 1 }, { label: "特别检查", value: 2 }, { label: "汛前巡检", value: 3 }, ] const xjStatus = { 0: "cha", 1: "gou" } const [form] = Form.useForm(); const [form1] = Form.useForm(); const [precessType, setPrecessType] = useState() const [itemList, setItemList] = useState([]) const [itemParams, setItemParams] = useState([]) const [list, setList] = useState([]) const [totals, setTotals] = useState({}) const [tabsRender, setTabsRender] = useState([]) const [imgVisible, setImgVisible] = useState(false) const [imgList, setImgList] = useState([]) const [videoOpen, setVideoOpen] = useState(false) const [videoParams, setVideoParams] = useState({}) const [handleDetailsOpen, setHandleDetailsOpen] = useState(false) const [handleDetails, setHandleDetails] = useState({}) const [handleImgfileList, setHandleImgFileList] = useState([]) //上传文件列表 const [handleVideoFileList, setHandleVideoFileList] = useState([]) //上传文件列表 const handleDetail = (row) => { setHandleDetailsOpen(true) setHandleDetails(row) } const reviewPic = (arrPic) => { if (arrPic.length > 0) { setImgVisible(true) setImgList(arrPic) } } const reviewVideo = (arrVideo) => { if (arrVideo.length > 0) { setVideoOpen(true) setVideoParams(arrVideo[0]) } } const renderTooltip = (value) => { return ( <> {value?.itemProblemDesc} {value?.handleSuggestion} ) } const columns = [ { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center", render: (value, row, index) => {index + 1} }, { title: '巡查项', key: 'itemDesc', dataIndex: 'itemDesc', width: 200, render: (value, row, index) =>
{value}
}, { title: '巡查状态', key: 'isNormal', dataIndex: 'isNormal', width: 100, align: "center", render: (value) =>
{value === null ? '' : }
}, { title: '巡查问题描述', key: 'problemDesc', dataIndex: 'problemDesc', width: 300, ellipsis: true }, { title: '巡查图片', key: 'inspectPics', dataIndex: 'inspectPics', width: 100, align: "center", render: (value) =>
{value ? reviewPic(value)}> {value.length} : ''}
}, { title: '巡查视频', key: 'inspectVideos', dataIndex: 'inspectVideos', width: 100, align: "center", render: (value) =>
{value ? reviewVideo(value)}> {value.length} : ''}
}, { title: '是否处理', key: 'isHandle', dataIndex: 'isHandle', width: 100, align: "center", render: (value) => {value ? "是" : "否"} }, { title: '处理人', key: 'handleUserName', dataIndex: 'handleUserName', width: 150 }, { title: '操作', key: 'operator', dataIndex: 'operator', width: 150, render: (value, row) => handleDetail(row)}>处理详情 }, ] const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); const renderItems = (items) => { const result = items.map(o => ({ key: o.pointId, label: o.name + `(${o.children.filter(r => r.isNormal == 0).length})`, children: })) setTabsRender(result) } const getTabsDetail = async (id) => { let items = {}; try { const res = await httpget2(apiurl.rcgl.xcxj.xjrw.info, { taskId: id }); renderItems(res.data) res.data.forEach(o => { items.isNormalTotal = o.children.filter(item => item.isNormal == 0).length; items.normalTotal = o.children.filter(item => item.isNormal == 1).length; }) setTotals(items); } catch (error) { console.log(error); } } const handleTree = (arr) => { const res = arr.map(item => { item.value = item.id; item.title = item.itemDesc; if (item.children) { item.children = handleTree(item.children) } return item; }) return res } const getItemList = async () => { try { const res = await httpget2(apiurl.rcgl.xcxj.xjrw.list); if (res.code === 200) { const arr1 = res.data.map(item => ({ id: item.id, itemDesc: item.name, children: item.children, disabled: item.children.length > 0 ? false : true })); const result = handleTree(arr1) setList(res.data) console.log(result); setItemList(result) } } catch (error) { console.log(error); } } const onfinish = (values) => { const userId = localStorage.getItem('userId') const userName = localStorage.getItem('userName') values.inspectTask = values.isWarn == 2 ? { startDate: values.startDate || '', endDate: values.endDate || '', inspectUserName: deptUserList?.find(item => item.userId == values.inspectUserId)?.nickName, items: itemParams, inspectUserId: values?.inspectUserId, taskContent: values?.taskContent, taskTitle: values?.taskTitle, taskType: values?.taskType, createUserId: userId, createUserName: userName } : null if (mode === 'save') { onSave(apiurl.rcgl.byfz.bypc.process, values) } } const onSave = async (url, params) => { const newParams = { ...params, order: record?.order, obDate: record?.obDate } try { const { code, data } = await httppost2(url, newParams); if (code == 200) { message.success('处理成功') setPrecessVisible(false) refresh(); } } catch (error) { console.log(error); } } const onValuesChange = (v, r) => { setPrecessType(r.isWarn) } const itemChange = (a, b, c) => { const itemArr = a.map(item => { let pointId; list.forEach(o => { if (o.id != item && !pointId) { pointId = o.children?.find(t => t.id == item)?.pointId; } }) return { itemId: item, pointId } }) setItemParams(itemArr) } const [deptList, setDeptList] = useState([]) const [deptUserList, setDeptUserList] = useState([]) const buildTree = (data, parentId) => { let tree = []; data.forEach((node) => { node.title = node.deptName; node.key = node.deptId; if (node.parentId === parentId) { let children = buildTree(data, node.deptId); if (children.length) { node.children = children; } tree.push(node); } }); return tree; } const handleTreeList = (dept, user) => { const deptArr = dept.map(item => { return { ...item, value: item.deptId, title: item.deptName, disabled: item.userId ? false : true, children: user.filter(u => u.deptId == item.deptId).map(u => ({ ...u, value: u.userId, title: u.nickName })) } }) console.log("deptArr", deptArr); const treelist = buildTree(deptArr, 0) return treelist } const treeList = useMemo(() => { if (deptUserList?.length > 0 && deptList?.length > 0) { return handleTreeList(deptList, deptUserList) } else { return [] } }, [deptUserList, deptList]) // 获取部门数据 const getDeptList = async () => { try { const result = await xyt_httpget2(apiurl.rcgl.zbgl.zbb.deptlist); if (result.code == 200) { setDeptList(result.data); getDeptUser(result.data[0]) } } catch (error) { console.log(error); } } // 获取部门人员数据 const getDeptUser = async () => { try { const result = await xyt_httpget2(apiurl.rcgl.zbgl.zbb.userList, { pageNum: 1, pageSize: 9999 }); if (result.code == 200) { setDeptUserList(result.rows) } } catch (error) { console.log(error); } } useEffect(() => { getDeptList() getItemList() }, []) const handleFile = (arr = []) => { const newArr = arr?.map(item => ({ name: item.fileName, filePath: item.filePath, fileId: item.fileId })) return newArr } useEffect(() => { const handleImgFile = handleFile(handleDetails?.handlePics || []); const hanldeVideoFile = handleFile(handleDetails?.handleVideos || []); setHandleImgFileList(handleImgFile) setHandleVideoFileList(hanldeVideoFile) }, [handleDetails]) useEffect(() => { if (mode != 'save' && record.jcskByRProcessVo) { const backParmas = { ...record.jcskByRProcessVo, isWarn: 2, } form.setFieldsValue(backParmas) setPrecessType(2) getTabsDetail(record?.jcskByRProcessVo?.id) } }, [mode, record]) return (
{mode == 'view' &&
基本信息
}
误报并取消报警 取消报警并创建工单 {precessType == 2 ? { mode != 'view' && } dateString} getValueProps={(value) => ({ value: value ? moment(value) : undefined })} > dateString} getValueProps={(value) => ({ value: value ? moment(value) : undefined })} > : null } {(mode == 'view') && <>
巡查信息 {record?.jcskByRProcessVo?.status == 2 ? (异常项:{totals?.isNormalTotal},正常项:{totals?.normalTotal}) : null }
{ record?.jcskByRProcessVo?.status == 2 ? : } } { mode === 'view' ? null : ( <> ) }
setImgVisible(vis), }} > { imgList.length > 0 ? imgList.map(item => ( )) : null }
setVideoOpen(false)} > setHandleDetailsOpen(false)} > <>
{ handleImgfileList.length > 0 && handleImgfileList.map(file => { return (
{file.name}
) }) } { handleVideoFileList.length > 0 && handleVideoFileList.map(file => { return (
{setVideoOpen(true); setVideoParams(file) }} style={{ cursor: 'pointer' }} >
{file.name}
) }) } ); } export default ModalForm;