From 2a25421efcdfc1d71634086668abb29c79ae9f0c Mon Sep 17 00:00:00 2001 From: lishenfeng Date: Mon, 29 Sep 2025 17:57:17 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E5=AE=8C=E6=88=90=E7=99=BD=E8=9A=81?= =?UTF-8?q?=E7=9B=91=E6=B5=8B=E5=9C=B0=E5=9B=BE=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/apiurl.js | 3 +- .../homePanelsLayoutPage/item_yujing/index.js | 32 +- src/views/rcgl/byfz/bypc/index.js | 63 +- src/views/rcgl/byfz/bypc/precessForm.js | 721 ++++++++++++++++++ 4 files changed, 812 insertions(+), 7 deletions(-) create mode 100644 src/views/rcgl/byfz/bypc/precessForm.js diff --git a/src/service/apiurl.js b/src/service/apiurl.js index fd04d7e0e..387ca0b9a 100644 --- a/src/service/apiurl.js +++ b/src/service/apiurl.js @@ -415,7 +415,8 @@ const apiurl = { detail: service_fxdd + "/termite/survey/detail", dictionary: service_fxdd + "/sysDictB/listByCd", allCd: service_fxdd + '/termite/survey/list/allOrder', - historyPage:service_fxdd + '/termite/survey/detail', + historyPage: service_fxdd + '/termite/survey/detail', + process:service_fxdd + '/termite/survey/process' }, fzxc: { page: service_fxdd + "/termite/adver/file/page", diff --git a/src/views/Home/homePanelsLayoutPage/item_yujing/index.js b/src/views/Home/homePanelsLayoutPage/item_yujing/index.js index fa7984389..8721c3e24 100644 --- a/src/views/Home/homePanelsLayoutPage/item_yujing/index.js +++ b/src/views/Home/homePanelsLayoutPage/item_yujing/index.js @@ -9,11 +9,15 @@ import Table_wy from './table_wy' import Table_sl from './table_sl' import Table_sy from './table_sy' import Table_AI from './table_AI' +import { useNavigate } from "react-router"; -const Page = ({mySetTms}) => { - const [ dataObj, setDataObj ] = useState({}) +const Page = ({ mySetTms }) => { + const navigator = useNavigate(); + const [dataObj, setDataObj] = useState({}) + const [count, setCount] = useState({}) + console.log(dataObj) const [ open, setOpen ] = useState(false) const [ key , setkey ] = useState('') @@ -22,6 +26,24 @@ const Page = ({mySetTms}) => { moment().format('YYYY-MM-DD HH:mm:ss'), ]) + // 获取白蚁统计数量 + const getCount = async () => { + const params = { + pageSo: { + pageNumber: 1, + pageSize: 99999, + }, + obDate:moment().format('YYYY-MM-DD') + } + try { + const res = await httppost2(apiurl.rcgl.byfz.bypc.count, params); + setCount(res.data); + } catch (error) { + console.log(error); + + } + } + useEffect(()=>{ (async()=>{ const params = { @@ -39,6 +61,7 @@ const Page = ({mySetTms}) => { ]) setDataObj(data) })() + getCount() },[]) @@ -85,6 +108,11 @@ const Page = ({mySetTms}) => {
AI告警
+
{navigator('/mgr/sg/byfz/bypc')}}> +
{count.hasAnt}
+
白蚁告警
+
+
{ // 点位弹框 const [modalVisible, setModalVisible] = useState(false) const [detailPoint, setDetailPoint] = useState({}) + + + // 白蚁处理弹框 + const [precessVisible, setPrecessVisible] = useState(false) + const [mode, setMode] = useState('save') + const dispatch = useDispatch(); @@ -123,7 +130,27 @@ const Page = () => { ); } - } + }, + { + title: '操作', + dataIndex: 'opreate', + key: 'opreate', + width: 120, + align: 'center', + render: (v, r) => { + let renderTag; + if (!r.isProcess && r.status == 1) { + renderTag = ; + } + if (r.hasInspectTask && r.jcskByRProcessVo) { + renderTag = ; + } + return (<> + {renderTag} + + ) + } + }, ]; const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); @@ -150,6 +177,19 @@ const Page = () => { refresh() } + + // 表格操作栏 查看按钮回调 + const viewDetail = (r) => { + setDetailPoint(r); + setModalVisible(true) + } +// 表格操作栏 处理按钮回调 + const handlerPrecess = (r,type) => { + setDetailPoint(r); + setPrecessVisible(true) + setMode(type) + } + // 获取白蚁统计数量 const getCount = async () => { const params = { @@ -319,7 +359,11 @@ const Page = () => { }; // 处理表格行点击事件 - const handleRowClick = (record) => { + const handleRowClick = (record,event) => { + // 如果点击的是操作列中的元素,不触发地图交互 + if (event && (event.target.closest('button') || event.target.closest('.ant-btn'))) { + return; + } const feature = findFeatureByDeviceId(record.order); if (feature) { highlightFeature(feature); @@ -475,7 +519,7 @@ const Page = () => { {...tableProps} scroll={{ x: width, y: "calc( 100vh - 400px )" }} onRow={(record) => ({ - onClick: () => handleRowClick(record), // 添加行点击事件 + onClick: (event) => handleRowClick(record,event), // 添加行点击事件 style: { cursor: 'pointer' } // 添加鼠标指针样式 })} /> @@ -488,12 +532,23 @@ const Page = () => { title={detailPoint?.order} open={modalVisible} onCancel={() => setModalVisible(false)} - width={800} + width={1000} footer={null} destroyOnClose > + {/*处理弹框 */} + setPrecessVisible(false)} + width={1000} + footer={null} + destroyOnClose + > + + { + 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) => { + debugger + 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, + response: { + data: { + 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;