From 08f2ff93486cb34456060fd7caa6e8ab9def9c80 Mon Sep 17 00:00:00 2001 From: lishenfeng Date: Mon, 5 Jan 2026 17:34:06 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E5=AE=89=E5=85=A8=E7=9B=91=E6=B5=8B?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/DashboardLayout/SiderMenu.tsx | 369 +++++++++--------- src/components/MultiPersonTree/index.js | 105 +++++ src/service/apiurl.js | 1 + .../InformationSearch/StaticTable/index.js | 12 +- src/views/Gcyx/xcxj/xjrw/index.js | 6 +- src/views/Home/gateMarkersConfig.js | 10 +- src/views/Home/index.js | 4 +- src/views/SafeWatch/Gzpz/form.js | 8 +- src/views/SafeWatch/TransformWatch/form.js | 24 +- src/views/SafeWatch/cdgx/form.js | 8 +- src/views/SafeWatch/cdgx/index.js | 1 - src/views/Sbwh/Kchsgl/form.js | 2 +- src/views/Sbwh/Whfabz/toolbar.js | 1 + src/views/Sbwh/Whxmys/toolbar.js | 7 +- src/views/Sbwh/Zhfxkh/form.js | 4 +- src/views/SystemMangant/UserInfo1/toolbar.js | 2 +- src/views/SystemMangant/role/rolePage/form.js | 2 +- src/views/WatchData/Jcsj/toolbar.js | 3 +- 18 files changed, 353 insertions(+), 216 deletions(-) create mode 100644 src/components/MultiPersonTree/index.js diff --git a/src/components/DashboardLayout/SiderMenu.tsx b/src/components/DashboardLayout/SiderMenu.tsx index 4ec60d4..a89b837 100644 --- a/src/components/DashboardLayout/SiderMenu.tsx +++ b/src/components/DashboardLayout/SiderMenu.tsx @@ -1,181 +1,188 @@ -import React, { useEffect, useMemo, useState } from 'react'; -import { Menu } from 'antd'; -import { FolderOutlined, ProfileOutlined } from '@ant-design/icons'; -import { useLocation, useNavigate } from 'react-router'; -import { MenuItem } from '../../models/_'; -import { useSelector } from 'react-redux'; -import { debug } from 'console'; - -const { SubMenu } = Menu; - -function selectedMenu(menu: MenuItem[], menuIndexes: string[]) { - if (!menuIndexes || !menuIndexes[0]) { - return []; - } - const menuItem = menu.find((o) => o.id === menuIndexes[0]); - return (menuItem && menuItem.children) || []; -} - -const SiderMenu: React.FC<{ - menu: MenuItem[], - menuIndexes: string[], -}> = ({ menu, menuIndexes }) => { - const isReadObject = useSelector((s: any) => s.runtime.isReadObject); - console.log("isReadObject",isReadObject); - const subMenu = useMemo(() => selectedMenu(menu, menuIndexes), [menu, menuIndexes]); - const [openKeys, setOpenKeys] = useState([`${menuIndexes[1]}`]); - console.log('openKeys', openKeys) - console.log(subMenu); - const [irSelect,setIr] =useState('') - const location = useLocation(); - - const pathname = location.pathname; - - const navigate = useNavigate(); - - function goto(url: string) { - setIr(url) - if (pathname !== url) { - navigate(url); - } - } - - const getIcon = (item: any) => { - - const idx = item.children?.findIndex((item:any)=>irSelect == item.path) - if(item.path == irSelect || (idx !== -1&&idx !== undefined)){ - return 'zcdSelect' - }else{ - return 'zcd' - } - } - - - // useEffect(() => { - // if (openKeys?.[0] === 'undefined') { - // setOpenKeys(menuIndexes[1]) - // } - // },[menuIndexes[1]]) - - - const onOpenChange = (keys: any) => { - let openLength = 0 - if(openKeys===undefined){ - openLength = 0 - }else{ - openLength = openKeys?.length - } - - if(keys?.length>openLength){ - const lastKey = keys?.[keys.length-1] - setOpenKeys([lastKey]) - }else{ - setOpenKeys(keys) - } - }; - - const renderPop = (tilte: any) => { - let isRead1 = isReadObject[1]; - let isRead2 = isReadObject[2]; - let isRead3 = isReadObject[3]; - switch (tilte) { - case "实时工情": - return isRead1 || isRead2; - case "运行情况": - return isRead1 - case "工程险情": - return isRead2 - case "实时灾情": - return isRead3 - default: - return false - } -} - - return ( - - { - subMenu.map((o: any) => ( - o.children && o.children.length > 0 ? ( - } - title={ - {o.title} - {renderPop(o.title) && - } - } - > - { - o.children.map((oo: any) => ( - <> - goto(oo.path)} - key={oo.id} - icon={} - >{oo.title} - - {renderPop(oo.title) &&
} - - )) - } -
- ) : ( - <> - } - onClick={() => goto(o.path)} key={o.id}> -
- {o.title} - {renderPop(o.title) &&
} -
- -
- - - - ) - )) - } -
- ); -} - -export default React.memo(SiderMenu); +import React, { useEffect, useMemo, useState } from 'react'; +import { Menu } from 'antd'; +import { FolderOutlined, ProfileOutlined } from '@ant-design/icons'; +import { useLocation, useNavigate } from 'react-router'; +import { MenuItem } from '../../models/_'; +import { useSelector } from 'react-redux'; +import { debug } from 'console'; + +const { SubMenu } = Menu; + +function selectedMenu(menu: MenuItem[], menuIndexes: string[]) { + if (!menuIndexes || !menuIndexes[0]) { + return []; + } + const menuItem = menu.find((o) => o.id === menuIndexes[0]); + return (menuItem && menuItem.children) || []; +} + +const SiderMenu: React.FC<{ + menu: MenuItem[], + menuIndexes: string[], +}> = ({ menu, menuIndexes }) => { + const isReadObject = useSelector((s: any) => s.runtime.isReadObject); + console.log("isReadObject",isReadObject); + const subMenu = useMemo(() => selectedMenu(menu, menuIndexes), [menu, menuIndexes]); + const [openKeys, setOpenKeys] = useState([`${menuIndexes[1]}`]); + console.log('openKeys', openKeys) + console.log(subMenu); + const [irSelect,setIr] =useState('') + const location = useLocation(); + + const pathname = location.pathname; + + const navigate = useNavigate(); + + // 当menuIndexes[1]变化时,更新openKeys + useEffect(() => { + if (menuIndexes[1]) { + setOpenKeys([`${menuIndexes[1]}`]); + } + }, [menuIndexes[1]]); + function goto(url: string) { + setIr(url) + if (pathname !== url) { + navigate(url); + } + } + + const getIcon = (item: any) => { + + const idx = item.children?.findIndex((item:any)=>irSelect == item.path) + if(item.path == irSelect || (idx !== -1&&idx !== undefined)){ + return 'zcdSelect' + }else{ + return 'zcd' + } + } + + + // useEffect(() => { + // if (openKeys?.[0] === 'undefined') { + // setOpenKeys(menuIndexes[1]) + // } + // },[menuIndexes[1]]) + + + const onOpenChange = (keys: any) => { + let openLength = 0 + if(openKeys===undefined){ + openLength = 0 + }else{ + openLength = openKeys?.length + } + + if(keys?.length>openLength){ + const lastKey = keys?.[keys.length-1] + setOpenKeys([lastKey]) + }else{ + setOpenKeys(keys) + } + }; + + const renderPop = (tilte: any) => { + let isRead1 = isReadObject[1]; + let isRead2 = isReadObject[2]; + let isRead3 = isReadObject[3]; + switch (tilte) { + case "实时工情": + return isRead1 || isRead2; + case "运行情况": + return isRead1 + case "工程险情": + return isRead2 + case "实时灾情": + return isRead3 + default: + return false + } +} + + return ( + + { + subMenu.map((o: any) => ( + o.children && o.children.length > 0 ? ( + } + title={ + {o.title} + {renderPop(o.title) && + } + } + > + { + o.children.map((oo: any) => ( + <> + goto(oo.path)} + key={oo.id} + icon={} + >{oo.title} + + {renderPop(oo.title) &&
} + + )) + } +
+ ) : ( + <> + } + onClick={() => goto(o.path)} key={o.id}> +
+ {o.title} + {renderPop(o.title) &&
} +
+ +
+ + + + ) + )) + } +
+ ); +} + +export default React.memo(SiderMenu); + \ No newline at end of file diff --git a/src/components/MultiPersonTree/index.js b/src/components/MultiPersonTree/index.js new file mode 100644 index 0000000..78ad114 --- /dev/null +++ b/src/components/MultiPersonTree/index.js @@ -0,0 +1,105 @@ +import React,{useState,useMemo,useEffect} from 'react' +import { TreeSelect } from "antd" +import apiurl from '../../service/apiurl' +import { xyt_httpget2 } from '../../utils/request' +export default function PersonTree({ value, onChange, allowClear = true, multiple = false, maxTagCount = 1, disabled, style, placeholder = '请选择人员', status }) { + 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 || u.userName + })) + } + }) + 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.xcxj.xjrw.deptlist); + if (result.code == 200) { + setDeptList(result.data); + getDeptUser() + } + + } catch (error) { + console.log(error); + } + } + + const getDeptUser = async() => { + try { + const result = await xyt_httpget2(apiurl.rcgl.xcxj.xjrw.userList, {pageNum:1,pageSize:9999}); + if (result.code == 200) { + setDeptUserList(result.rows) + } + } catch (error) { + console.log(error); + } + } + useEffect(() => { + getDeptList() + }, []) + return ( + <> + + + ) +} diff --git a/src/service/apiurl.js b/src/service/apiurl.js index 08d0107..3c061a1 100644 --- a/src/service/apiurl.js +++ b/src/service/apiurl.js @@ -120,6 +120,7 @@ const apiurl = { page: service_ykz + '/osmoticProfileRel/page', save: service_ykz + '/osmoticProfileRel/insert', delete: service_ykz + '/osmoticProfileRel/del', + edit: service_ykz + '/osmoticProfileRel/update', }, yjjl: { page: service_ykz + '/osmoticWarnRecord/page', diff --git a/src/views/Gcyx/InformationSearch/StaticTable/index.js b/src/views/Gcyx/InformationSearch/StaticTable/index.js index 3468896..37c257a 100644 --- a/src/views/Gcyx/InformationSearch/StaticTable/index.js +++ b/src/views/Gcyx/InformationSearch/StaticTable/index.js @@ -51,13 +51,14 @@ const Page = () => { {title: '监测值', key: 'data', dataIndex: 'data', width: 120, align: "center",} ]; const yearColumns = [ - // { title: '日期', key: 'date', dataIndex: 'date', width: 120, align: "center", fixed: "left" }, + { title: '序号', key: 'date', dataIndex: 'date', width: 120, align: "center", fixed: "left" }, ...Array(12).fill(0).map((item, index) => ({ title: `${index + 1}月`, key: `drpM${index + 1}`, dataIndex: `drpM${index + 1}`, width: 100, align: "center", + render: (v) => {v === null ? '':v} })) ]; @@ -208,6 +209,7 @@ const Page = () => { } if (searchVal.type1 == 1) { getStaData(searchVal) + getData(searchVal) } if (searchVal.type1 == 2) { @@ -238,7 +240,7 @@ const Page = () => { formatDate(searchVal.year):formatDate(searchVal.yearMonth) } {projectType[searchVal.type]}{bbType[searchVal.type1]} -
单位:{searchVal?.type != 1 ? 'm' : 'mm'}
+
单位:{searchVal?.type == 0 ? 'm³/s' :searchVal?.type == 1? 'mm':'m'}
)} columns={searchVal.type1 == 0 ? newTimeColumns : searchVal.type1 == 1 ? yearColumns : dayColumns} @@ -313,11 +315,11 @@ const Page = () => { 年统计 - 最高水位 + {searchVal.type == 0 ? '最高流量':'最高水位'} {staData?.max} - 最低水位 + {searchVal.type == 0 ? '最低流量':'最低水位'} {staData?.min} - 平均水位 + {searchVal.type == 0 ? '平均流量':'平均水位'} {staData?.avg} : diff --git a/src/views/Gcyx/xcxj/xjrw/index.js b/src/views/Gcyx/xcxj/xjrw/index.js index d85deb5..ce6b9df 100644 --- a/src/views/Gcyx/xcxj/xjrw/index.js +++ b/src/views/Gcyx/xcxj/xjrw/index.js @@ -14,8 +14,8 @@ import {CrudOpRender_text} from '../../../../components/crud/CrudOpRender'; const url = "http://223.75.53.141:9102/test.by-lyf.tmp" const Page = () => { const role = useSelector(state => state.auth.role); - const editBtn = role?.rule?.find(item => item.menuName == "编辑")||true; - const viewBtn = role?.rule?.find(item => item.menuName == "查看")||true; + const editBtn = role?.rule?.find(item => item.menuName == "编辑") || true; + const viewBtn = role?.rule?.find(item => item.menuName == "查看") || true; const delBtn = role?.rule?.find(item => item.menuName == "删除")||true; const task = { 0: "未完成", @@ -75,7 +75,7 @@ const Page = () => { () => command(cmd)(row)} />) }, ]; diff --git a/src/views/Home/gateMarkersConfig.js b/src/views/Home/gateMarkersConfig.js index 597d9d2..910b351 100644 --- a/src/views/Home/gateMarkersConfig.js +++ b/src/views/Home/gateMarkersConfig.js @@ -6,35 +6,35 @@ export const gateMarkersConfig = [ { id: 1, - name: '1号闸门', + name: '1号闸孔', workGate: '-', repairGate: '-', position: { left: 33, top: 45 } // 根据实际图片调整这些值 }, { id: 2, - name: '2号闸门', + name: '2号闸孔', workGate: '-', repairGate: '-', position: { left: 40, top: 45 } // 根据实际图片调整这些值 }, { id: 3, - name: '3号闸门', + name: '3号闸孔', workGate: '-', repairGate: '-', position: { left: 47, top: 45 } // 根据实际图片调整这些值 }, { id: 4, - name: '4号闸门', + name: '4号闸孔', workGate: '-', repairGate: '-', position: { left: 54, top: 45 } // 根据实际图片调整这些值 }, { id: 5, - name: '5号闸门', + name: '5号闸孔', workGate: '-', repairGate: '-', position: { left: 61, top: 45 } // 根据实际图片调整这些值 diff --git a/src/views/Home/index.js b/src/views/Home/index.js index 6d8d27a..acefc0f 100644 --- a/src/views/Home/index.js +++ b/src/views/Home/index.js @@ -421,7 +421,7 @@ export default function Home() {
{/* 操作日志 */}
-
七天操作日志
+
近7日操作日志
@@ -467,7 +467,7 @@ export default function Home() { - 6 ? 'scroll' : 'hidden' }} > + 6 ? 'scroll' : 'hidden' }} > {policeData.length > 0 ? policeData.map((item, i) => ( diff --git a/src/views/SafeWatch/Gzpz/form.js b/src/views/SafeWatch/Gzpz/form.js index fa95cb8..e789c4f 100644 --- a/src/views/SafeWatch/Gzpz/form.js +++ b/src/views/SafeWatch/Gzpz/form.js @@ -10,10 +10,10 @@ const url = "http://223.75.53.141:9102/test.by-lyf.tmp" const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { const types = [ - { - label: "位移", - value: 0, - }, + // { + // label: "位移", + // value: 0, + // }, { label: "结构缝", value: 1, diff --git a/src/views/SafeWatch/TransformWatch/form.js b/src/views/SafeWatch/TransformWatch/form.js index c9e8c2d..86a8183 100644 --- a/src/views/SafeWatch/TransformWatch/form.js +++ b/src/views/SafeWatch/TransformWatch/form.js @@ -4,6 +4,9 @@ import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayo import apiurl from '../../../service/apiurl'; import "./index.less" import moment from 'moment'; +import NormalSelect from '../../../components/Form/NormalSelect'; +import { httpget2 } from '../../../utils/request'; + const { RangePicker } = DatePicker const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -18,6 +21,23 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { } } + const [cdList, setCdList] = useState([]) + // 测点类型 + const getCdList = async (type) => { + try { + const res = await httpget2(apiurl.aqjc.dmgl.info + type) + if (res.code == 200) { + setCdList(res.data.map(item => ({ label: item.stationCode, value: item.stationCode }))) + } + } catch (error) { + console.log(error); + } + } + useEffect(() => { + getCdList(0) + }, []) + + return ( <> @@ -30,11 +50,11 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { - + diff --git a/src/views/SafeWatch/cdgx/form.js b/src/views/SafeWatch/cdgx/form.js index 6dd8c34..96ab20f 100644 --- a/src/views/SafeWatch/cdgx/form.js +++ b/src/views/SafeWatch/cdgx/form.js @@ -9,10 +9,10 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { const [form] = Form.useForm(); const onfinish = (values) => { if (mode === 'edit') { - onEdit(apiurl.aqjc.dmgl.edit,{...record,...values}) + onEdit(apiurl.aqjc.gl.edit,{...record,...values}) } if (mode === 'save') { - onSave(apiurl.aqjc.dmgl.save,values) + onSave(apiurl.aqjc.gl.save,values) } } @@ -36,7 +36,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { try { const res = await httpget2(apiurl.aqjc.dmgl.info + type) if (res.code == 200) { - setCdList(res.data.map(item => ({label: item.stationCode,value: item.stationCode}))) + setCdList(res.data.map(item => ({label: item.stationCode,value: item.id}))) } } catch (error) { console.log(error); @@ -71,7 +71,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { diff --git a/src/views/SafeWatch/cdgx/index.js b/src/views/SafeWatch/cdgx/index.js index 8ce0219..588dcdc 100644 --- a/src/views/SafeWatch/cdgx/index.js +++ b/src/views/SafeWatch/cdgx/index.js @@ -29,7 +29,6 @@ const Page = () => { title: '操作', key: 'operation', width: 200, fixed: 'right',align: 'center', render: (value, row, index) => ( () => command(cmd)(row)} />) }, diff --git a/src/views/Sbwh/Kchsgl/form.js b/src/views/Sbwh/Kchsgl/form.js index a6b953a..2e66cbd 100644 --- a/src/views/Sbwh/Kchsgl/form.js +++ b/src/views/Sbwh/Kchsgl/form.js @@ -122,7 +122,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { name="quantity" rules={[{ required: true }]} > - + diff --git a/src/views/Sbwh/Whfabz/toolbar.js b/src/views/Sbwh/Whfabz/toolbar.js index 0f8a44d..23bc1f2 100644 --- a/src/views/Sbwh/Whfabz/toolbar.js +++ b/src/views/Sbwh/Whfabz/toolbar.js @@ -50,6 +50,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role }) => { showTime style={{ width: "330px" }} format="YYYY-MM-DD HH:mm:ss" + placeholder={['开始时间','结束时间']} /> diff --git a/src/views/Sbwh/Whxmys/toolbar.js b/src/views/Sbwh/Whxmys/toolbar.js index 581300f..f14498e 100644 --- a/src/views/Sbwh/Whxmys/toolbar.js +++ b/src/views/Sbwh/Whxmys/toolbar.js @@ -25,8 +25,8 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role }) => { let dateTimeRangeSo; if (values.tm) { dateTimeRangeSo = { - start: moment(values.tm[0]).format('YYYY-MM-DD HH:mm:ss'), - end: moment(values.tm[1]).format('YYYY-MM-DD HH:mm:ss') + start: moment(values.tm[0]).format('YYYY-MM-DD 00:00:00'), + end: moment(values.tm[1]).format('YYYY-MM-DD 23:59:59') } } delete values.tm @@ -44,9 +44,8 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role }) => { diff --git a/src/views/Sbwh/Zhfxkh/form.js b/src/views/Sbwh/Zhfxkh/form.js index 3e8717f..5d08202 100644 --- a/src/views/Sbwh/Zhfxkh/form.js +++ b/src/views/Sbwh/Zhfxkh/form.js @@ -5,6 +5,7 @@ import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayo import {getCurrentQuarter,getQuarterStartEndDates} from "../../../utils/tools" import apiurl from '../../../service/apiurl'; import NormalSelect from '../../../components/Form/NormalSelect'; +import PersonTree from '../../../components/MultiPersonTree'; import "./index.less" import moment from 'moment'; const { RangePicker } = DatePicker @@ -87,7 +88,8 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { name="objectName" rules={[{ required: true }]} > - + + {/* */} diff --git a/src/views/SystemMangant/UserInfo1/toolbar.js b/src/views/SystemMangant/UserInfo1/toolbar.js index a23ff96..901259e 100644 --- a/src/views/SystemMangant/UserInfo1/toolbar.js +++ b/src/views/SystemMangant/UserInfo1/toolbar.js @@ -6,7 +6,7 @@ const ToolBar = ({ setSearchVal, onSave, dispatchBtn = false, setDashOpen }) =>
setSearchVal(v)}> - + diff --git a/src/views/SystemMangant/role/rolePage/form.js b/src/views/SystemMangant/role/rolePage/form.js index d1e0581..6847b5e 100644 --- a/src/views/SystemMangant/role/rolePage/form.js +++ b/src/views/SystemMangant/role/rolePage/form.js @@ -51,7 +51,7 @@ const ModalForm = ({ mode, record,onEdit,onSave, onCrudSuccess, close }) => { } },[]) - const getMenuIds = async (roleId)=>{ + const getMenuIds = async (roleId) => { const {code, checkedKeys } = await xyt_httpget2(apiurl.systemManagement.role.getMenuIds+roleId) if(code!==200){ message.error('查询权限失败') diff --git a/src/views/WatchData/Jcsj/toolbar.js b/src/views/WatchData/Jcsj/toolbar.js index ad54231..e1a3349 100644 --- a/src/views/WatchData/Jcsj/toolbar.js +++ b/src/views/WatchData/Jcsj/toolbar.js @@ -38,7 +38,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, exportFile1 }) => { } useEffect(() => { - const start = moment().subtract(7, 'days').format('YYYY-MM-DD 00:00:00') + const start = moment().subtract(6, 'days').format('YYYY-MM-DD 00:00:00') const end = moment().format('YYYY-MM-DD 23:59:59') form.setFieldsValue({ tm: [moment(start), moment(end)] @@ -62,6 +62,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, exportFile1 }) => { showTime style={{ width: "330px" }} format="YYYY-MM-DD HH:mm:ss" + placeholder={['开始时间','结束时间']} />
报警时间
{jcdType[item.type]}