lsf-dev
xielei 2024-09-23 14:07:06 +08:00
commit 65449e77a2
65 changed files with 1076 additions and 770 deletions

View File

@ -193,31 +193,153 @@ export async function loadMenu(): Promise<MenuItem[]> {
const id = idgen()
return [
{ id: id(), title: '水库一张图', path: '/mgr/home', icon: 'jbqk' },
{
id: id(), title: '四制', redirect: '/mgr/sz/gltx/zzjgck', icon: 'jbqk',
children: [
{
id: id(), title: '管理体系', redirect: '/mgr/sz/gltx/zzjgck',
children: [
{
id: id(), title: '管理体系', path: '/mgr/sz/gltx/zzjgck',
},
{
id: id(), title: '责任人管理', path: '/mgr/sz/gltx/zrrgl',
}
]
},
{
id: id(), title: '监督考核', redirect: '/mgr/sz/jdkh/khtj',
children: [
{
id: id(), title: '考核统计', path: '/mgr/sz/jdkh/khtj',
},
{
id: id(), title: '考核任务管理', path: '/mgr/sz/jdkh/khrwgl',
},
{
id: id(), title: '考核问题整改', path: '/mgr/sz/jdkh/khwtzg',
},
{
id: id(), title: '考核指标管理', path: '/mgr/sz/jdkh/khzbgl',
},
{
id: id(), title: '考核模板管理', path: '/mgr/sz/jdkh/khmbgl',
}
]
}
]
},
{ id: id(), title: '四预', redirect: '/mgr/sy/fhxzfx', icon: 'fxzb',
children: [
{ id: id(), title: '防洪形势', path: '/mgr/sy/fhxzfx'},
// { id: id(), title: '天气预报', path: '/mgr/fxzb/tqyb'},
// {
// id: id(), title: '洪水预报', redirect: '/mgr/fxzb/hsyb/hyybjs',
// children: [
// { id: id(), title: '洪水预报计算', path: '/mgr/fxzb/hsyb/hyybjs' },
// { id: id(), title: '预报方案管理', path: '/mgr/fxzb/hsyb/ybfagl' },
// { id: id(), title: '参数管理', path: '/mgr/fxzb/hsyb/csgl' },
// ]
// },
// { id: id(), title: '调度规程', path: '/mgr/fxzb/ddgc'},
// { id: id(), title: '防汛预案', path: '/mgr/fxzb/fxya'},
// {
// id: id(),
// title: '抢险物料',
// path: '/mgr/fxzb/qxwl',
// },
// {
// id: id(),
// title: '抢险队伍',
// path: '/mgr/fxzb/qxdw',
// },
{ id: id(), title: '天气预报', path: '/mgr/fxzb/tqyb'},
{
id: id(), title: '洪水预报', redirect: '/mgr/fxzb/hsyb/hyybjs',
children: [
{ id: id(), title: '洪水预报计算', path: '/mgr/fxzb/hsyb/hyybjs' },
{ id: id(), title: '预报方案管理', path: '/mgr/fxzb/hsyb/ybfagl' },
{ id: id(), title: '参数管理', path: '/mgr/fxzb/hsyb/csgl' },
]
},
{ id: id(), title: '防汛预案', path: '/mgr/sy/fxya'},
{ id: id(), title: '调度规程', path: '/mgr/sy/ddgc'},
{
id: id(),
title: '抢险物料',
path: '/mgr/sy/qxwl',
},
{
id: id(),
title: '抢险队伍',
path: '/mgr/sy/qxdw',
},
],
},
{ id: id(), title: '四管', redirect: '/mgr/sg/xcxj/xcrw', icon: 'fxzb',
children: [
{
id: id(), title: '巡查巡检', redirect: '/mgr/sg/xcxj/xcrw',
children: [
{ id: id(), title: '巡检任务', path: '/mgr/sg/xcxj/xcrw' },
{ id: id(), title: '巡检问题处理', path: '/mgr/sg/xcxj/xjwtcl' },
{ id: id(), title: '巡检项配置', path: '/mgr/sg/xcxj/xjxpz' },
]
},
{
id: id(), title: '安全管理', redirect: '/mgr/sg/aqgl/fxgkqd',
children: [
{ id: id(), title: '风险管控清单', path: '/mgr/sg/aqgl/fxgkqd' },
{ id: id(), title: '安全隐患排查', path: '/mgr/sg/aqgl/aqyhpc' },
{ id: id(), title: '安全检查管理', path: '/mgr/sg/aqgl/aqjcgl' },
{ id: id(), title: '安全事故登记', path: '/mgr/sg/aqgl/aqsgdj' },
{ id: id(), title: '安全鉴定台帐', path: '/mgr/sg/aqgl/aqjdtz' },
{ id: id(), title: '除险加固台帐', path: '/mgr/sg/aqgl/cxjgtz' },
]
},
{
id: id(), title: '白蚁防治', redirect: '/mgr/sg/byfz/bypc',
children: [
{ id: id(), title: '白蚁普查', path: '/mgr/sg/byfz/bypc' },
{ id: id(), title: '防治宣传', path: '/mgr/sg/byfz/byxc' },
]
},
{
id: id(), title: '维修养护', path: '/mgr/sg/wxyh',
},
{
id: id(), title: '值班管理', redirect: '/mgr/sg/zbgl/zbb',
children: [
{ id: id(), title: '值班表', path: '/mgr/sg/zbgl/zbb' },
{ id: id(), title: '值班日志', path: '/mgr/sg/zbgl/zbrz' },
]
},
{
id: id(), title: '报表管理', redirect: '/mgr/sg/btbb/sdjyrbb',
children: [
{ id: id(), title: '时段降雨日报表', path: '/mgr/sg/btbb/sdjyrbb' },
{ id: id(), title: '日降雨量年报表', path: '/mgr/sg/btbb/rjylnbb' },
{ id: id(), title: '时段水位日报表', path: '/mgr/sg/btbb/sdswbb' },
{ id: id(), title: '日均水位年报表', path: '/mgr/sg/btbb/rjswbb' },
]
},
{
id: id(), title: '告警管理', redirect: '/mgr/sg/gjgl/aigj',
children: [
{ id: id(), title: 'AI告警', path: '/mgr/sg/gjgl/aigj' },
{ id: id(), title: '广播预警', path: '/mgr/sg/gjgl/gbyj' },
]
},
],
},
{ id: id(), title: '工程安全监测', redirect: '/mgr/gcaqjc/gcaqyj/bzt', icon: 'fxzb',
children: [
{
id: id(), title: '布置图', path: '/mgr/gcaqjc/gcaqyj/bzt',
},
{
id: id(), title: '工程安全分析', redirect: '/mgr/gcaqjc/gcaqfx/jrx',
children: [
{ id: id(), title: '浸润线', path: '/mgr/gcaqjc/gcaqfx/jrx'},
]
},
{
id: id(), title: '工程安全预警', redirect: '/mgr/gcaqjc/gcaqyj/yhyj',
children: [
{ id: id(), title: '隐患预警', path: '/mgr/gcaqjc/gcaqyj/yhyj' },
{ id: id(), title: '预警规则配置', path: '/mgr/gcaqjc/gcaqyj/yjgzpz' },
]
},
{
id: id(), title: '数据统计查询', redirect: '/mgr/gcaqjc/sjtjcx/czcx',
children: [
{ id: id(), title: '测值查询', path: '/mgr/gcaqjc/sjtjcx/czcx' },
{ id: id(), title: '渗压监测', path: '/mgr/gcaqjc/sjtjcx/syjx' },
{ id: id(), title: '渗流监测 ', path: '/mgr/gcaqjc/sjtjcx/sljx' },
{ id: id(), title: '位移监测 ', path: '/mgr/gcaqjc/sjtjcx/wyjx' },
{ id: id(), title: '年度渗压统计表', path: '/mgr/gcaqjc/sjtjcx/ndsytjb' },
{ id: id(), title: '年度渗流统计表', path: '/mgr/gcaqjc/sjtjcx/ndsltjb' },
]
},
],
},
{ id:id(),title:'四全',redirect:'/mgr/sq/qfg/zcdjxx',
@ -245,7 +367,7 @@ export async function loadMenu(): Promise<MenuItem[]> {
},
// { id: id(), title: '基本2情况', path: '/mgr/home', icon: 'jbqk' },
// { id: id(), title: '基本情况', path: '/mgr/home', icon: 'jbqk' },
// {
// id: id(),
// title: '防汛调度',

View File

@ -6,7 +6,7 @@ import { parseGeoJSONFeature } from "../../utils/tools";
function initState() {
return {
layerVisible: {
AdcdLayer: true,//行政区划
AdcdLayer: false,//行政区划
AdcdBorderInLayer: true,//乡镇边界
AdcdAllLayer: false,//县行政区划图层
HeLiuZhuJiLayer:true,//12条河流注记

View File

@ -7,6 +7,13 @@ const zdkapi = 'https://slt-sh.chutianyun.gov.cn:8002' //中电科的市级平
const service_fxdd = '/gunshiApp/xyt'
const service_shzh = '/shzh'
const apiurl = {
fxya: {
page: service_fxdd + "/resPlanB/list",
update: service_fxdd + "/resPlanB/update",
save: service_fxdd + "/resPlanB/insert",
delete:service_fxdd + "/resPlanB/del",
getFile:service_fxdd + "/resPlanB/file/get"
},
setMenu: service_fxdd + '/visitMenuLog/insert',
setPassword: service_fxdd + '/user/updateSecretKey',
xytlogin: {
@ -418,7 +425,6 @@ const apiurl = {
zrrByCode:service_fxdd + '/hEHystSafePerson/hystCode',
gctp:service_fxdd + '/attHystBase/projectImgList',
sjzl:service_fxdd + '/attHystBase/desFileList',
fxya:service_fxdd + '/attHystBase/planList',
delGctp:service_fxdd + '/hEHystProjectImg/delete',
filedNameById:service_fxdd + '/hEHystProjectImg/file/get/'
},

View File

@ -92,6 +92,8 @@ import Gcdsj from './sq/qzq/gcdsj'
// import Zcdjxx from './sq/qfg/zcdjxx'
// import Zcdjxx from './sq/qfg/zcdjxx'
// 四制 - 组织机构查看
import Zzjgck from './sz/zzjgck'
const HomePage = lazy(() => import('./Home'))
@ -122,25 +124,26 @@ const AppRouters: React.FC = () => {
children: [
{ path: 'home', element: <HomePage /> },
// 防汛调度
//四预
{ path: 'sy/fhxzfx', element: <HomePage /> },
{ path: 'fxzb/tqyb', element: <HomePage /> },
//洪水预报
{ path: 'fxzb/hsyb/hyybjs', element: <Hsybjs /> },
{ path: 'fxzb/hsyb/ybfagl', element: <Ybfagl /> },
{ path: 'fxzb/hsyb/csgl', element: <Csgl /> },
{ path: 'sy/tqyb', element: <HomePage /> },
//四预-洪水预报
{ path: 'sy/hsyb/hyybjs', element: <Hsybjs /> },
{ path: 'sy/hsyb/ybfagl', element: <Ybfagl /> },
{ path: 'sy/hsyb/csgl', element: <Csgl /> },
// 调度规程
{ path: 'fxzb/ddgc', element: <Ddgc /> },
{ path: 'sy/ddgc', element: <Ddgc /> },
// 防汛预案
{ path: 'fxzb/fxya', element: <Fxya /> },
{ path: 'sy/fxya', element: <Fxya /> },
// 抢险物料
{ path: 'fxzb/qxwl', element: <Qxwl_Gc /> },
{ path: 'sy/qxwl', element: <Qxwl_Gc /> },
// 抢险队伍
{ path: 'fxzb/qxdw', element: <Qxdw_Gc /> },
{ path: 'sy/qxdw', element: <Qxdw_Gc /> },
// 工程安全监测
@ -162,33 +165,33 @@ const AppRouters: React.FC = () => {
{ path: 'gcaqjc/gcaqfx/jrx', element: <Jrx /> },
// 日常管理-水质整编
{ path: 'rcgl/btbb/rjswbb', element: <Rjswnbb /> },
{ path: 'rcgl/btbb/rjylnbb', element: <Rjylnbb /> },
{ path: 'rcgl/btbb/sdswbb', element: <Sdswrbb /> },
{ path: 'rcgl/btbb/sdjyrbb', element: <Sdjyrbb /> },
{ path: 'rcgl/xcxj/xcrw', element: <Xjrw /> },
{ path: 'rcgl/xcxj/xjwtcl', element: <Xjwtcl /> },
{ path: 'rcgl/xcxj/xjxpz', element: <Xjxpz/> },
{ path: 'byfz/fzxc', element: <Fzxc /> },
{ path: 'byfz/bypc', element: <Bypc /> },
{ path: 'rcgl/wxyh', element: <Wxyh /> },
{ path: 'rcgl/aqgl/aqjcgl', element: <Aqjcgl /> },
{ path: 'rcgl/aqgl/fxgkqd', element: <Fxgkqd /> },
{ path: 'rcgl/aqgl/cxjbtz', element: <Cxjgtz /> },
{ path: 'rcgl/aqgl/aqjdtz', element: <Aqjdtz /> },
{ path: 'rcgl/aqgl/aqyhpc', element: <Aqyhpc /> },
{ path: 'rcgl/aqgl/aqsgdj', element: <Aqsgdj /> },
{ path: 'rcgl/gcdsj', element: <Gcdsj /> },
{ path: 'rcgl/szzb', element: <Szzb /> },
{ path: 'sg/btbb/rjswbb', element: <Rjswnbb /> },
{ path: 'sg/btbb/rjylnbb', element: <Rjylnbb /> },
{ path: 'sg/btbb/sdswbb', element: <Sdswrbb /> },
{ path: 'sg/btbb/sdjyrbb', element: <Sdjyrbb /> },
{ path: 'sg/xcxj/xcrw', element: <Xjrw /> },
{ path: 'sg/xcxj/xjwtcl', element: <Xjwtcl /> },
{ path: 'sg/xcxj/xjxpz', element: <Xjxpz/> },
{ path: 'sg/byfz/byxc', element: <Fzxc /> },
{ path: 'sg/byfz/bypc', element: <Bypc /> },
{ path: 'sg/wxyh', element: <Wxyh /> },
{ path: 'sg/aqgl/aqjcgl', element: <Aqjcgl /> },
{ path: 'sg/aqgl/fxgkqd', element: <Fxgkqd /> },
{ path: 'sg/aqgl/cxjgtz', element: <Cxjgtz /> },
{ path: 'sg/aqgl/aqjdtz', element: <Aqjdtz /> },
{ path: 'sg/aqgl/aqyhpc', element: <Aqyhpc /> },
{ path: 'sg/aqgl/aqsgdj', element: <Aqsgdj /> },
{ path: 'sg/gcdsj', element: <Gcdsj /> },
{ path: 'sg/szzb', element: <Szzb /> },
{ path: 'rcgl/stlljc', element: <Stlljc /> },
{ path: 'rcgl/zbgl/zbb', element: <Zbb /> },
{ path: 'rcgl/zbgl/zbrz', element: <Zbrz /> },
{ path: 'sg/zbgl/zbb', element: <Zbb /> },
{ path: 'sg/zbgl/zbrz', element: <Zbrz /> },
// 日常管理-监督考核
{ path: 'rcgl/jdkh/khtj', element: <Khtj /> },
{ path: 'rcgl/jdkh/khzbgl', element: <Khzbgl /> },
{ path: 'rcgl/jdkh/khmbgl', element: <Khmbgl /> },
{ path: 'rcgl/jdkh/khwtzg', element: <Khwtzg /> },
{ path: 'rcgl/jdkh/khrwgl', element: <Khrwgl /> },
{ path: 'sz/jdkh/khtj', element: <Khtj /> },
{ path: 'sz/jdkh/khzbgl', element: <Khzbgl /> },
{ path: 'sz/jdkh/khmbgl', element: <Khmbgl /> },
{ path: 'sz/jdkh/khwtzg', element: <Khwtzg /> },
{ path: 'sz/jdkh/khrwgl', element: <Khrwgl /> },
// 供水兴利
@ -201,7 +204,7 @@ const AppRouters: React.FC = () => {
{ path: 'fxzb/jczw/sqz', element: <HomePage /> },
// 视频监控
{ path: 'spjk/spjk', element: <Spjk /> },
{ path: 'spjk/aiWarn', element: <AiWarn /> },
{ path: 'sg/gjgl/aigj', element: <AiWarn /> },
// { path: 'fxzb/zbb', element: <Zbb /> },
// { path: 'fxzb/txl', element: <Txl /> },
@ -229,6 +232,8 @@ const AppRouters: React.FC = () => {
{ path: 'sq/qys/xyys', element: <Xyys /> },
{ path: 'sq/qys/gcys', element: <Gcys /> },
{ path: 'sq/qzq/Gcdsj', element: <Gcdsj /> },
// 四制-组织机构查看
{ path: 'sz/gltx/zzjgck', element: <Zzjgck /> },
],
},
{ path: '/login', element: <LoginPage /> },

View File

@ -37,27 +37,34 @@ const { Panel } = Collapse;
const { RangePicker } = DatePicker;
const items = [
{ key:'1', label:'实时监测', children:[
{ key:'1', label:'综合监视', children:[
{ key:'11', label:'预警', labelRight:'预警', icon:'yujing' },
{ key:'12', label:'雨情', labelRight:'统计', icon:'yuqing' },
{ key:'13', label:'水库水情', labelRight:'实时水情', icon:'shuikushuiqing' },
{ key:'14', label:'供水', labelRight:'今日供水实况', icon:'gongshui' },
{ key:'13', label:'水情', labelRight:'实时水情', icon:'shuikushuiqing' },
{ key:'15', label:'工程安全', labelRight:'工程安全监测', icon:'gongchenganquan' },
{ key:'16', label:'监测设备状态', labelRight:'监测设备运行', icon:'jianceshebeizhuangtai' },
{ key:'17', label:'水质', labelRight:'水质', icon:'shuizhi' },
{ key:'18', label:'视频点', labelRight:'视频点', icon:'shipindian' },
] },
{ key:'2', label:'水库工程', children:[
{ key:'21', label:'水库', labelRight:'基本信息', icon:'shuiku' },
{ key:'22', label:'大坝', labelRight:'基本信息', icon:'daba' },
{ key:'23', label:'溢洪道', labelRight:'基本信息', icon:'yihongdao' },
// { key:'2', label:'水库工程', children:[
// { key:'21', label:'水库', labelRight:'基本信息', icon:'shuiku' },
// { key:'22', label:'大坝', labelRight:'基本信息', icon:'daba' },
// { key:'23', label:'溢洪道', labelRight:'基本信息', icon:'yihongdao' },
// ] },
{ key:'2', label:'巡查巡检', children:[
{ key:'21', label:'巡查巡检', labelRight:'工程巡检', icon:'shuiku' },
// { key:'22', label:'大坝', labelRight:'基本信息', icon:'daba' },
// { key:'23', label:'溢洪道', labelRight:'基本信息', icon:'yihongdao' },
] },
{ key:'3', label:'洪水影响范围', children:[
{ key:'3', label:'洪水防御', children:[
{ key:'31', label:'危险区', labelRight:'危险区列表', icon:'weixianqu' },
{ key:'32', label:'安置点', labelRight:'安置点列表', icon:'anzhidian' },
{ key:'33', label:'企事业单位', labelRight:'企事业单位列表', icon:'qishiyedanwei' },
{ key:'34', label:'沿河居民户', labelRight:'沿河居民户列表', icon:'yanhejuminhu' },
] },
{ key:'4', label:'水资源调度', children:[
{ key:'41', label:'供水', labelRight:'今日供水实况', icon:'gongshui' },
] },
]
@ -118,9 +125,9 @@ const HomePage = ({showPanels}) => {
dispatch.runtime.setHome()
setCheckedObj({ key:'11', label:'预警', labelRight:'预警', icon:'yujing' })
}else if(a==='2'){
setShowTable(true)
dispatch.runtime.setHome()
setCheckedObj({ key:'21', label:'水库', labelRight:'基本信息', icon:'shuiku' })
// setShowTable(true)
// dispatch.runtime.setHome()
setCheckedObj({ key:'21', label:'巡查巡检', labelRight:'工程巡检', icon:'shuiku' })
}else if(a==='3'){
dispatch.runtime.setCameraTarget({
center: [114.96, 31.453],
@ -129,8 +136,9 @@ const HomePage = ({showPanels}) => {
})
setShowTable(true)
setCheckedObj({ key:'31', label:'危险区', labelRight:'危险区列表', icon:'weixianqu' })
}else if(a==='4'){
setCheckedObj({ key:'41', label:'供水', labelRight:'今日供水实况', icon:'gongshui' })
}else{
}
}} expandIconPosition="end" accordion={true} bordered={false}>
{
@ -191,7 +199,7 @@ const HomePage = ({showPanels}) => {
}
{ checkedObj.label === '预警' ? <><Yujing mySetTms={setTms}/><Yuqing mySetTms={setTms} show={false}/></>:null }
{ checkedObj.label === '雨情' ? <Yuqing mySetTms={setTms} show={showTable}/>:null }
{ checkedObj.label === '水库水情' ? <ShuiKu/>:null }
{ checkedObj.label === '水情' ? <ShuiKu/>:null }
{ checkedObj.label === '供水' ? <GongShui/>:null }
{ checkedObj.label === '工程安全' ? <GongCheng/>:null }
{ checkedObj.label === '监测设备状态' ? <JianCe/>:null }
@ -221,7 +229,7 @@ const HomePage = ({showPanels}) => {
<div className='homePage_leftBottomBox'>
{ checkedObj.label==='雨情'?<Tuli/>:null }
{ checkedObj.label==='水库水情'?<Tuli2/>:null }
{ checkedObj.label==='水情'?<Tuli2/>:null }
{ checkedObj.label==='供水'?<Tuli3/>:null }
{ (checkedObj.label==='水库'||checkedObj.label==='大坝'||checkedObj.label==='溢洪道'||checkedObj.label==='视频点')?<Tuli4/>:null }
{ (checkedObj.label==='危险区'||checkedObj.label==='安置点'||checkedObj.label==='企事业单位'||checkedObj.label==='沿河居民户')?<Tuli5/>:null }

View File

@ -190,13 +190,13 @@ const HomePage = () => {
<HomePanelsLayoutPage showPanels={showPanels} />
) : null}
{/*防汛调度-防洪形势*/}
{pathname === '/mgr/fxzb/fhxs' ? (
{/*四预-防洪形势*/}
{pathname === '/mgr/sy/fhxzfx' ? (
<Fhxs showPanels={showPanels}/>
) : null}
{/*防汛调度-天气预报*/}
{pathname === '/mgr/fxzb/tqyb' ? (
{/*四预-天气预报*/}
{pathname === '/mgr/sy/tqyb' ? (
<Tqyb showPanels={showPanels}/>
) : null}

View File

@ -16,7 +16,7 @@ const Page = () => {
const refModal2 = useRef();
const refModal3 = useRef();
const role = useSelector(state => state.auth.role);
const editBtn = (role?.rule?.find(item => item.menuName == "编辑"))?true:false;
const editBtn = (role?.rule?.find(item => item.menuName == "编辑"))?true:true;
const [searchVal, setSearchVal] = useState(false)
const columns = [
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },

View File

@ -1,53 +1,26 @@
import React,{useEffect,useState} from 'react';
import { Form, Button, Input, message,Row, Col, DatePicker,Upload,Image,Modal } from 'antd';
import { DeleteOutlined,FileWordOutlined,FilePdfOutlined,FilePptOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons';
import React,{useEffect,useState,useRef} from 'react';
import { Form, Button, Input, Row, Col,Upload,DatePicker,Modal,message,Image } from 'antd';
import {PaperClipOutlined,DeleteOutlined,FileWordOutlined,FilePdfOutlined,FilePptOutlined,FileZipOutlined,FileExcelOutlined} from '@ant-design/icons';
import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
import apiurl from '../../../service/apiurl';
import { createCrudService } from '../../../components/crud/_';
import { httpget2 } from '../../../utils/request';
import moment from 'moment';
const { Dragger } = Upload;
import "./index.less";
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
const ModalForm = ({ mode, record,onEdit,onSave }) => {
if(record.prodDate){
record.myTm = moment(record.prodDate)
}
const ModalForm = ({ mode, record,onEdit,onSave,onCrudSuccess }) => {
const [form] = Form.useForm();
const [fileList, setFileList] = useState([]) //上传文件列表
const [fileIds, setFileIds] = useState([])
const [flag, setFlag] = useState(true)
const [iframeSrc, setIframeSrc] = useState('')
const [pdfViewOPen, setPdfViewOPen] = useState(false)
const [loading, setLoading] = useState(false)
/**
* @description 删除上传的图片
* @param {string} id 删除的id
*/
const deleteFile = (fileId) => {
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
setFileList(filterFile)
}
/**
* @description 文件下载
* @param {String} params 文件fileId
*/
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xfflood/xfIdeoImgB/file/download/${params}`;
downloadLink.download = `${params.fileName}`;
downloadLink.style.display = "none";
// 将链接添加到页面中
document.body.appendChild(downloadLink);
const [iframeId, setIframeId] = useState('')
const [perviewOpen, setPerviewOpen] = useState(false)
// 模拟点击事件,开始下载
downloadLink.click();
}
/**
* @description 上传图片
* @param {string} file 上传的文件
*/
const fileChange = (info) => {
console.log("file",info);
if (info.file.status === "done") {
setLoading(false);
setFileList(info.fileList)
}
if (info.file.status === "uploading") {
setLoading(true);
@ -56,137 +29,189 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
message.error("文件上传失败")
setLoading(false);
}
let fileIds = info.fileList.map(file => {
return file.response?.data?.fileId
})
setFileIds(fileIds)
setFileList(info.fileList)
setFlag(false)
if (fileList.length > 0) {
return
}
const onFinish = (values) => {
if(values.myTm){
values.prodDate = moment(values.myTm).format('YYYY-MM-DD')
delete values.myTm
setFileList(info.fileList)
}
const deleteFile = (fileId) => {
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
setFileList(filterFile)
}
const onFinish = async (values) => {
if (fileList.length <= 0) {
message.error("请上传预案文件")
return
}
let oldFiles = fileList.map(item => ({ fileId: item.response?.data?.fileId }))
values.resCode = "42120250085"
values.type = 2
values.files = oldFiles;
values.prepTime = moment(values.prepTime).format("YYYY-MM-DD 00:00:00")
values.apprTime = moment(values.apprTime).format("YYYY-MM-DD 00:00:00")
if (mode === 'edit') {
let oldFiles = fileList.map(item => item.response?.data?.fileId )
values.id = record.id
values.fileIds = oldFiles;
onEdit(apiurl.fxzb.sxfd.fxtj.edit,values)
values.id = record?.id;
onEdit(apiurl.fxya.update,values)
}
if (mode === 'save') {
values.fileIds = fileIds
onSave(apiurl.fxzb.sxfd.fxtj.save,values)
onSave(apiurl.fxya.save,values)
}
}
/**
* @description 获取查看时文件
* @param {*} type
* @returns
*/
const getFileInfo = (params) => {
let fetchArr = params?.attachList.map(item => {
return createCrudService(apiurl.fxzb.gczx.ytygc.getFile + `/${item.fileId}`)
.delGet()
const viewPdf = (params) => {
setIframeId(params)
setPerviewOpen(true)
}
);
Promise.all(fetchArr).then(res => {
let fileArr = res.map(item => {
return {
name: item.data.fileName,
const beforeUpload = () => {
if (fileList.length > 0) {
message.error("只能上传一个附件");
return false;
}
}
const getFileInfo = async(id) => {
try {
const res = await httpget2(`${apiurl.dataResourcesCenter.projectAndWater.fxya.getFile}/${id}`)
let obj ={
name: res.data.fileName,
response: {
data: {
filePath: item.data.filePath,
fileId:item.data.fileId
filePath: res.data.filePath,
fileId:res.data.fileId
}
},
}
})
setFlag(true)
setFileList(fileArr)
}).catch(err => console.log(err))
}
/**
* @description pdf文件预览
* @param {String} params 文件预览url
*/
const viewPdf = (params) => {
if (params) {
setIframeSrc(params)
setPdfViewOPen(true)
setFileList([obj])
} catch (error) {
console.log(error);
}
}
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/resPlanB/file/download/${params}`;
downloadLink.download = `${params.fileName}`;
downloadLink.style.display = "none";
// 将链接添加到页面中
document.body.appendChild(downloadLink);
// 模拟点击事件,开始下载
downloadLink.click();
}
useEffect(() => {
console.log(record);
if ((mode === "view" || mode === "edit") && record.attachList?.length) {
getFileInfo(record)
if (record && mode != "save") {
getFileInfo(record?.files[0]?.fileId)
}
}, [record,mode])
return (
<>
<Form form={form} {...formItemLayout} onFinish={onFinish} initialValues={record}>
<Row>
<Col span={24}>
<Form.Item
label="图件名称"
name="imgName"
label="调度规程名称"
name="planName"
labelCol={{ span: 3, offset: 0 }}
wrapperCol={{span:21,offset:0}}
rules={[{ required: true }]}
>
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="制作单位"
name="prodUnitName"
rules={[{ required: true }]}
>
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="制作时间"
name="myTm"
rules={[{ required: true }]}
>
<DatePicker
disabled={mode==='view'}
format="YYYY-MM-DD"
<Input
style={{ width: '100%' }}
allowClear
/>
</Form.Item>
</Col>
</Row>
<Row>
<Col span={12}>
<Form.Item
label="编制单位"
name="prepOrg"
rules={[{ required: true }]}
>
<Input
style={{ width: '100%' }}
allowClear
/>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="编制日期"
name="prepTime"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={value => ({
value: value ? moment(value) : undefined
})}
rules={[{ required: true }]}
>
<DatePicker allowClear style={{width:'280px'}} />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={12}>
<Form.Item
label="批复部门"
name="apprOrg"
rules={[{ required: true }]}
>
<Input
style={{ width: '100%' }}
allowClear
/>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="批复日期"
name="apprTime"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={value => ({
value: value ? moment(value) : undefined
})}
rules={[{ required: true }]}
>
<DatePicker allowClear style={{width:'280px'}} />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="附件"
// label={mode !== "view" ? "附件" : ''}
name="fieldId"
label="预案文件"
name="files"
labelCol={{ span: 3, offset: 0 }}
wrapperCol={{span:21,offset:0}}
rules={[{ required: true }]}
>
{mode !== "view" &&
<Dragger
<Upload
name='file'
// multiple
action="/gunshiApp/xfflood/xfIdeoImgB/file/upload/singleSimple"
action="/gunshiApp/xyt/resPlanB/file/upload/singleSimple"
onChange={fileChange}
onDrop={(info) => { console.log(info.dataTransfer.files); }}
fileList={fileList}
maxCount={1}
disabled={loading}
// onSuccess={handleSuccess}
showUploadList={false}
beforeUpload={beforeUpload}
>
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p>
<p className="ant-upload-hint">
支持扩展名.rar .zip .doc .docx .pdf .jpg .png .ppt
</p>
</Dragger>
{mode == "view" ? null :
<div style={{display:"flex",alignItems:"center",columnGap:10,color:"#4f85ec",cursor:"pointer"}}>
<PaperClipOutlined />
<a style={{ cursor: "pointer" }}>上传PDF文件
<span style={{ marginLeft:10,color:"#dfdfdf" }}>(支持扩展名.xls .xlsx .doc .docx .pdf .jpg .png)</span></a>
</div>
}
</Upload>
</Form.Item>
</Col>
</Row>
<Row gutter={[16]}>
{
loading ? <span>文件正在上传中请等待</span> :
@ -240,24 +265,27 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
}
<span>{file.name}</span>
</div>
<div className={mode == "view" ? 'delete-icon disable-icon' : 'delete-icon'} onClick={() => deleteFile(file.response?.data?.fileId)}>
{mode !== "view" &&
<div
className="delete-icon"
onClick={() => deleteFile(file.response?.data?.fileId)}
>
<DeleteOutlined />
</div>
}
</div>
</Col>
)
})
}
</Row>
</Form.Item>
</Col>
</Row>
{
mode==='view'?null:(
<>
<Form.Item {...btnItemLayout}>
<Button type="primary" htmlType="submit">
{mode === 'save' ? '增加' : '修改'}
{mode === 'save' ? '提交' : '修改'}
</Button>
</Form.Item>
</>
@ -265,13 +293,13 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
}
</Form>
<Modal
open={pdfViewOPen}
open={perviewOpen}
width={1000}
title=""
footer={null}
style={{marginTop:"-5%"}}
onCancel={() => {
setPdfViewOPen(false)
setPerviewOpen(false)
}}
>
<iframe
@ -281,7 +309,7 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
border: 0,
marginTop: 20,
}}
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xfflood/xfIdeoImgB/file/download/${iframeSrc}`)}`}
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/resPlanB/file/download/${iframeId}`)}`}
/>
</Modal>
</>

View File

@ -1,66 +1,50 @@
import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react';
import { Table, Modal, Image } from 'antd';
import { useSelector } from 'react-redux';
import React,{useEffect,useState,useRef,useMemo} from 'react'
import { Table, Button,Modal} from 'antd'
import ModalForm from './form';
import apiurl from '../../../service/apiurl';
import usePageTable from '../../../components/crud/usePageTable';
import { createCrudService } from '../../../components/crud/_';
import { httppost2 } from '../../../utils/request';
import moment from 'moment';
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
const Page = () => {
const role = useSelector(state => state.auth.role);
const downloadBtn = role?.rule?.find(item => item.menuName == "下载");
const [visible, setVisible] = useState(false);
import { CrudOpRender_text } from '../../../components/crud/CrudOpRender';
import BasicCrudModal from '../../../components/crud/BasicCrudModal2';
import moment from "moment"
export default function Zrtx() {
const refModal = useRef();
const [iframeSrc, setIframeSrc] = useState('')
const [pdfViewOPen, setPdfViewOPen] = useState(false)
const columns = [
{ title: '序号', key: 'idx', dataIndex: 'idx', width: 60, align:"center" },
{ title: '调度规程名称', key: 'planName', dataIndex: 'planName', width: 200,align:"center" },
{ title: '编制单位', key: 'prepOrg', dataIndex: 'prepOrg', width: 200 ,align:"center" },
{
title: '编制日期', key: 'prepTime', dataIndex: 'prepTime', width: 200, align: "center",
render: (rec) => <span>{rec?moment(rec).format("YYYY-MM-DD"):''}</span>
render: (r) => <span>{r ? moment(r).format("YYYY-MM-DD") : ''}</span>
},
{ title: '批复部门', key: 'apprOrg', dataIndex: 'apprOrg', width: 200 ,align:"center" },
{
title: '批复日期', key: 'apprTime', dataIndex: 'apprTime', width: 200, align: "center",
render: (rec) => <span>{rec?moment(rec).format("YYYY-MM-DD"):''}</span>
render: (r) => <span>{r ? moment(r).format("YYYY-MM-DD") : ''}</span>
},
{
title: '文件', key: 'planName', dataIndex: 'planName', width: 200, align: "center",
render: (rec, record) =>
(<div>
<a onClick={() => reviewFile(record?.files[0])}>{record?.files[0]?.fileName}</a>
<Image
src={url + record?.files[0]?.filePath}
style={{
display: 'none',
}}
preview={{
visible,
src:url + record?.files[0]?.filePath ,
onVisibleChange: (value) => {
setVisible(value);
},
}}
/>
</div>)
render: (rec, record) => <a onClick={() => reviewFile(record?.files[0])}>{record?.files[0]?.fileName}</a>
},
{ title: '上传时间', key: 'moditime', dataIndex: 'moditime', width: 150,align:"center" },
{
title: '操作', key: 'operation', width: 240, fixed: 'right',align: 'center',
render: (value, row, index) => (downloadBtn ?<a onClick={() => download(row?.files[0])}>下载</a> : null)
title: '操作', dataIndex: 'orgName', key: 'orgName', align: "center",width: 240, fixed: 'right',
render: (value, row, index) => (<CrudOpRender_text view={true} del={true} edit={true} command={(cmd) => () => command(cmd)(row)} />)
},
];
const [dataSources, setDataSources] = useState([])
const [iframeSrc, setIframeSrc] = useState('')
const [pdfViewOPen, setPdfViewOPen] = useState(false)
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
const [data, setData] = useState([])
const getData = async () => {
try {
const res = await httppost2(apiurl.fxya.page, { resCode: "42120250085",type:2 })
let newData = res.data.filter(s => s.type == 2)
setData(newData.map((item,i) => ({...item,idx:i+1})))
} catch (error) {
console.log(error);
/**
* @description 文件下载
* @param {String} params 文件fileId
*/
}
}
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/resPlanB/file/download/${params?.fileId}`;
@ -73,48 +57,50 @@ const Page = () => {
downloadLink.click();
}
const reviewFile = (params) => {
if (params?.fileName.split('.').pop() == "pdf") {
if (params.fileName.split('.').pop() == "pdf") {
setPdfViewOPen(true)
setIframeSrc(params)
} else if (params.fileName.split('.').pop() == "png" ||
params.fileName.split('.').pop() == "jpg" ||
params.fileName.split('.').pop() == "jpeg"
) {
setVisible(true)
}
else{
} else {
download(params)
}
}
const getList = async() => {
try {
const res = await httppost2(apiurl.fxzb1.ddgc.page, { resCode: "42120250085" })
let newData = res.data.filter(s => s.type == 2)
setDataSources(newData.map((item,i) => ({...item,idx:i+1})))
} catch (error) {
console.log(error);
const command = (type) => (params) => {
if (type === 'save') {
refModal.current.showSave({});
} else if (type === 'edit') {
refModal.current.showEdit(params)
} else if (type === 'view') {
refModal.current.showView(params);
} else if (type === 'del') {
refModal.current.onDeleteGet(apiurl.fxya.delete + `/${params.id}`);
}
}
useEffect(() => {
getList()
getData();
}, [])
return (
<>
<div className='content-root clearFloat xybm' style={{paddingRight:"0",paddingBottom:"0"}}>
<div className='adcdTableBox'>
<div className="ant-card-body" style={{ padding: "20px 0 0 0" }}>
<div style={{background:"#fff",padding:10}}>
<h1><Button type='primary' onClick={() => {refModal.current.showSave({})}}>新增</Button></h1>
<Table
columns={columns}
rowKey="id"
dataSource={dataSources}
columns={columns}
dataSource={data}
pagination={false}
scroll={{
x: width,
y: "calc( 100vh - 400px )"
}} />
</div>
</div>
}}
/>
<BasicCrudModal
width={800}
ref={refModal}
title=""
component={ModalForm}
onCrudSuccess={getData}
/>
<Modal
open={pdfViewOPen}
width={1000}
@ -136,8 +122,5 @@ const Page = () => {
/>
</Modal>
</div>
</>
);
)
}
export default Page;

View File

@ -0,0 +1,23 @@
.file-item{
display: flex;
width: 100%;
margin-top: -10px;
align-items: center;
border: 1px solid #dedede;
justify-content: space-between;
padding: 1%;
.file-description{
display: flex;
align-items: center;
column-gap: 10px;
img{
width: 40px;
height: 40px;
// margin-right: 10px;
}
}
.delete-icon{
// margin-left: 1%;
cursor: pointer;
}
}

View File

@ -1,29 +0,0 @@
import { Form, Input, Button } from 'antd';
const ToolBar = ({ setSearchVal, onSave }) => {
return (
<>
<div style={{display:'flex',justifyContent:'space-between'}}>
<Form className='toolbarBox' layout="inline" onFinish={(v)=>setSearchVal(v)}>
<Form.Item label="图件名称" name="imgName">
<Input allowClear placeholder='请输入图件名称' style={{width:'180px'}}/>
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">查询</Button>
</Form.Item>
{
onSave && (
<Form.Item>
<Button onClick={onSave}>新增</Button>
</Form.Item>
)
}
</Form>
</div>
</>
);
}
export default ToolBar;

View File

@ -1,53 +1,26 @@
import React,{useEffect,useState} from 'react';
import { Form, Button, Input, message,Row, Col, DatePicker,Upload,Image,Modal } from 'antd';
import { DeleteOutlined,FileWordOutlined,FilePdfOutlined,FilePptOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons';
import React,{useEffect,useState,useRef} from 'react';
import { Form, Button, Input, Row, Col,Upload,DatePicker,Modal,message,Image } from 'antd';
import {PaperClipOutlined,DeleteOutlined,FileWordOutlined,FilePdfOutlined,FilePptOutlined,FileZipOutlined,FileExcelOutlined} from '@ant-design/icons';
import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
import apiurl from '../../../service/apiurl';
import { createCrudService } from '../../../components/crud/_';
import { httpget2 } from '../../../utils/request';
import moment from 'moment';
const { Dragger } = Upload;
import "./index.less";
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
const ModalForm = ({ mode, record,onEdit,onSave }) => {
if(record.prodDate){
record.myTm = moment(record.prodDate)
}
const ModalForm = ({ mode, record,onEdit,onSave,onCrudSuccess }) => {
const [form] = Form.useForm();
const [fileList, setFileList] = useState([]) //上传文件列表
const [fileIds, setFileIds] = useState([])
const [flag, setFlag] = useState(true)
const [iframeSrc, setIframeSrc] = useState('')
const [pdfViewOPen, setPdfViewOPen] = useState(false)
const [loading, setLoading] = useState(false)
/**
* @description 删除上传的图片
* @param {string} id 删除的id
*/
const deleteFile = (fileId) => {
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
setFileList(filterFile)
}
/**
* @description 文件下载
* @param {String} params 文件fileId
*/
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xfflood/xfIdeoImgB/file/download/${params}`;
downloadLink.download = `${params.fileName}`;
downloadLink.style.display = "none";
// 将链接添加到页面中
document.body.appendChild(downloadLink);
const [iframeId, setIframeId] = useState('')
const [perviewOpen, setPerviewOpen] = useState(false)
// 模拟点击事件,开始下载
downloadLink.click();
}
/**
* @description 上传图片
* @param {string} file 上传的文件
*/
const fileChange = (info) => {
console.log("file",info);
if (info.file.status === "done") {
setLoading(false);
setFileList(info.fileList)
}
if (info.file.status === "uploading") {
setLoading(true);
@ -56,137 +29,189 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
message.error("文件上传失败")
setLoading(false);
}
let fileIds = info.fileList.map(file => {
return file.response?.data?.fileId
})
setFileIds(fileIds)
setFileList(info.fileList)
setFlag(false)
if (fileList.length > 0) {
return
}
const onFinish = (values) => {
if(values.myTm){
values.prodDate = moment(values.myTm).format('YYYY-MM-DD')
delete values.myTm
setFileList(info.fileList)
}
const deleteFile = (fileId) => {
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
setFileList(filterFile)
}
const onFinish = async (values) => {
if (fileList.length <= 0) {
message.error("请上传预案文件")
return
}
let oldFiles = fileList.map(item => ({ fileId: item.response?.data?.fileId }))
values.resCode = "42120250085"
values.type = 1
values.files = oldFiles;
values.prepTime = moment(values.prepTime).format("YYYY-MM-DD 00:00:00")
values.apprTime = moment(values.apprTime).format("YYYY-MM-DD 00:00:00")
if (mode === 'edit') {
let oldFiles = fileList.map(item => item.response?.data?.fileId )
values.id = record.id
values.fileIds = oldFiles;
onEdit(apiurl.fxzb.sxfd.fxtj.edit,values)
values.id = record?.id;
onEdit(apiurl.fxya.update,values)
}
if (mode === 'save') {
values.fileIds = fileIds
onSave(apiurl.fxzb.sxfd.fxtj.save,values)
onSave(apiurl.fxya.save,values)
}
}
/**
* @description 获取查看时文件
* @param {*} type
* @returns
*/
const getFileInfo = (params) => {
let fetchArr = params?.attachList.map(item => {
return createCrudService(apiurl.fxzb.gczx.ytygc.getFile + `/${item.fileId}`)
.delGet()
const viewPdf = (params) => {
setIframeId(params)
setPerviewOpen(true)
}
);
Promise.all(fetchArr).then(res => {
let fileArr = res.map(item => {
return {
name: item.data.fileName,
const beforeUpload = () => {
if (fileList.length > 0) {
message.error("只能上传一个附件");
return false;
}
}
const getFileInfo = async(id) => {
try {
const res = await httpget2(`${apiurl.fxya.getFile}/${id}`)
let obj ={
name: res.data.fileName,
response: {
data: {
filePath: item.data.filePath,
fileId:item.data.fileId
filePath: res.data.filePath,
fileId:res.data.fileId
}
},
}
})
setFlag(true)
setFileList(fileArr)
}).catch(err => console.log(err))
}
/**
* @description pdf文件预览
* @param {String} params 文件预览url
*/
const viewPdf = (params) => {
if (params) {
setIframeSrc(params)
setPdfViewOPen(true)
setFileList([obj])
} catch (error) {
console.log(error);
}
}
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/resPlanB/file/download/${params}`;
downloadLink.download = `${params.fileName}`;
downloadLink.style.display = "none";
// 将链接添加到页面中
document.body.appendChild(downloadLink);
// 模拟点击事件,开始下载
downloadLink.click();
}
useEffect(() => {
console.log(record);
if ((mode === "view" || mode === "edit") && record.attachList?.length) {
getFileInfo(record)
if (record && mode != "save") {
getFileInfo(record?.files[0]?.fileId)
}
}, [record,mode])
return (
<>
<Form form={form} {...formItemLayout} onFinish={onFinish} initialValues={record}>
<Row>
<Col span={24}>
<Form.Item
label="图件名称"
name="imgName"
label="预案名称"
name="planName"
labelCol={{ span: 3, offset: 0 }}
wrapperCol={{span:21,offset:0}}
rules={[{ required: true }]}
>
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="制作单位"
name="prodUnitName"
rules={[{ required: true }]}
>
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="制作时间"
name="myTm"
rules={[{ required: true }]}
>
<DatePicker
disabled={mode==='view'}
format="YYYY-MM-DD"
<Input
style={{ width: '100%' }}
allowClear
/>
</Form.Item>
</Col>
</Row>
<Row>
<Col span={12}>
<Form.Item
label="编制单位"
name="prepOrg"
rules={[{ required: true }]}
>
<Input
style={{ width: '100%' }}
allowClear
/>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="编制日期"
name="prepTime"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={value => ({
value: value ? moment(value) : undefined
})}
rules={[{ required: true }]}
>
<DatePicker allowClear style={{width:'280px'}} />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={12}>
<Form.Item
label="批复部门"
name="apprOrg"
rules={[{ required: true }]}
>
<Input
style={{ width: '100%' }}
allowClear
/>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="批复日期"
name="apprTime"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={value => ({
value: value ? moment(value) : undefined
})}
rules={[{ required: true }]}
>
<DatePicker allowClear style={{width:'280px'}} />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="附件"
// label={mode !== "view" ? "附件" : ''}
name="fieldId"
label="预案文件"
name="files"
labelCol={{ span: 3, offset: 0 }}
wrapperCol={{span:21,offset:0}}
rules={[{ required: true }]}
>
{mode !== "view" &&
<Dragger
<Upload
name='file'
// multiple
action="/gunshiApp/xfflood/xfIdeoImgB/file/upload/singleSimple"
action="/gunshiApp/xyt/resPlanB/file/upload/singleSimple"
onChange={fileChange}
onDrop={(info) => { console.log(info.dataTransfer.files); }}
fileList={fileList}
maxCount={1}
disabled={loading}
// onSuccess={handleSuccess}
showUploadList={false}
beforeUpload={beforeUpload}
>
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p>
<p className="ant-upload-hint">
支持扩展名.rar .zip .doc .docx .pdf .jpg .png .ppt
</p>
</Dragger>
{mode == "view" ? null :
<div style={{display:"flex",alignItems:"center",columnGap:10,color:"#4f85ec",cursor:"pointer"}}>
<PaperClipOutlined />
<a style={{ cursor: "pointer" }}>上传PDF文件
<span style={{ marginLeft:10,color:"#dfdfdf" }}>(支持扩展名.xls .xlsx .doc .docx .pdf .jpg .png)</span></a>
</div>
}
</Upload>
</Form.Item>
</Col>
</Row>
<Row gutter={[16]}>
{
loading ? <span>文件正在上传中请等待</span> :
@ -240,24 +265,27 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
}
<span>{file.name}</span>
</div>
<div className={mode == "view" ? 'delete-icon disable-icon' : 'delete-icon'} onClick={() => deleteFile(file.response?.data?.fileId)}>
{mode !== "view" &&
<div
className="delete-icon"
onClick={() => deleteFile(file.response?.data?.fileId)}
>
<DeleteOutlined />
</div>
}
</div>
</Col>
)
})
}
</Row>
</Form.Item>
</Col>
</Row>
{
mode==='view'?null:(
<>
<Form.Item {...btnItemLayout}>
<Button type="primary" htmlType="submit">
{mode === 'save' ? '增加' : '修改'}
{mode === 'save' ? '提交' : '修改'}
</Button>
</Form.Item>
</>
@ -265,13 +293,13 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
}
</Form>
<Modal
open={pdfViewOPen}
open={perviewOpen}
width={1000}
title=""
footer={null}
style={{marginTop:"-5%"}}
onCancel={() => {
setPdfViewOPen(false)
setPerviewOpen(false)
}}
>
<iframe
@ -281,7 +309,7 @@ const ModalForm = ({ mode, record,onEdit,onSave }) => {
border: 0,
marginTop: 20,
}}
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xfflood/xfIdeoImgB/file/download/${iframeSrc}`)}`}
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/resPlanB/file/download/${iframeId}`)}`}
/>
</Modal>
</>

View File

@ -1,66 +1,50 @@
import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react';
import { Table, Card, Modal, Image } from 'antd';
import { useSelector } from 'react-redux';
import React,{useEffect,useState,useRef,useMemo} from 'react'
import { Table, Button,Modal} from 'antd'
import ModalForm from './form';
import apiurl from '../../../service/apiurl';
import usePageTable from '../../../components/crud/usePageTable';
import { createCrudService } from '../../../components/crud/_';
import { httppost2 } from '../../../utils/request';
import moment from 'moment';
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
const Page = () => {
const role = useSelector(state => state.auth.role);
const downloadBtn = role?.rule?.find(item => item.menuName == "下载");
const [visible, setVisible] = useState(false);
import { CrudOpRender_text } from '../../../components/crud/CrudOpRender';
import BasicCrudModal from '../../../components/crud/BasicCrudModal2';
import moment from "moment"
export default function Zrtx() {
const refModal = useRef();
const [iframeSrc, setIframeSrc] = useState('')
const [pdfViewOPen, setPdfViewOPen] = useState(false)
const columns = [
{ title: '序号', key: 'idx', dataIndex: 'idx', width: 60, align:"center" },
{ title: '预案名称', key: 'planName', dataIndex: 'planName', width: 200,align:"center" },
{ title: '编制单位', key: 'prepOrg', dataIndex: 'prepOrg', width: 200 ,align:"center" },
{
title: '编制日期', key: 'prepTime', dataIndex: 'prepTime', width: 200, align: "center",
render: (rec) => <span>{rec?moment(rec).format("YYYY-MM-DD"):''}</span>
render: (r) => <span>{r ? moment(r).format("YYYY-MM-DD") : ''}</span>
},
{ title: '批复部门', key: 'apprOrg', dataIndex: 'apprOrg', width: 200 ,align:"center" },
{
title: '批复日期', key: 'apprTime', dataIndex: 'apprTime', width: 200, align: "center",
render: (rec) => <span>{rec?moment(rec).format("YYYY-MM-DD"):''}</span>
render: (r) => <span>{r ? moment(r).format("YYYY-MM-DD") : ''}</span>
},
{
title: '文件', key: 'planName', dataIndex: 'planName', width: 200, align: "center",
render: (rec, record) =>
(<div>
<a onClick={() => reviewFile(record?.files[0])}>{record?.files[0]?.fileName}</a>
<Image
src={url + record?.files[0]?.filePath}
style={{
display: 'none',
}}
preview={{
visible,
src:url + record?.files[0]?.filePath ,
onVisibleChange: (value) => {
setVisible(value);
},
}}
/>
</div>)
render: (rec, record) => <a onClick={() => reviewFile(record?.files[0])}>{record?.files[0]?.fileName}</a>
},
{ title: '上传时间', key: 'moditime', dataIndex: 'moditime', width: 150,align:"center" },
{
title: '操作', key: 'operation', width: 240, fixed: 'right',align: 'center',
render: (value, row, index) => (downloadBtn ?<a onClick={() => download(row?.files[0])}>下载</a> : null)
title: '操作', dataIndex: 'orgName', key: 'orgName', align: "center",width: 240, fixed: 'right',
render: (value, row, index) => (<CrudOpRender_text view={true} del={true} edit={true} command={(cmd) => () => command(cmd)(row)} />)
},
];
const [dataSources, setDataSources] = useState([])
const [iframeSrc, setIframeSrc] = useState('')
const [pdfViewOPen, setPdfViewOPen] = useState(false)
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
const [data, setData] = useState([])
const getData = async () => {
try {
const res = await httppost2(apiurl.fxya.page, { resCode: "42120250085",type:"1" })
let newData = res.data.filter(s => s.type == 1)
setData(newData.map((item,i) => ({...item,idx:i+1})))
} catch (error) {
console.log(error);
/**
* @description 文件下载
* @param {String} params 文件fileId
*/
}
}
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/resPlanB/file/download/${params?.fileId}`;
@ -72,55 +56,51 @@ const Page = () => {
// 模拟点击事件,开始下载
downloadLink.click();
}
const reviewFile = (params) => {
console.log("params",params);
if (params?.fileName.split('.').pop() == "pdf") {
if (params.fileName.split('.').pop() == "pdf") {
setPdfViewOPen(true)
setIframeSrc(params)
} else if (params.fileName.split('.').pop() == "png" ||
params.fileName.split('.').pop() == "jpg" ||
params.fileName.split('.').pop() == "jpeg"
) {
setVisible(true)
}
else{
} else {
download(params)
}
}
const getList = async() => {
try {
const res = await httppost2(apiurl.fxzb1.ddgc.page, { resCode: "42120250085",type:"1" })
let newData = res.data.filter(s => s.type == 1)
setDataSources(newData.map((item,i) => ({...item,idx:i+1})))
} catch (error) {
console.log(error);
const command = (type) => (params) => {
if (type === 'save') {
refModal.current.showSave({});
} else if (type === 'edit') {
refModal.current.showEdit(params)
} else if (type === 'view') {
refModal.current.showView(params);
} else if (type === 'del') {
refModal.current.onDeleteGet(apiurl.fxya.delete + `/${params.id}`);
}
}
useEffect(() => {
getList()
getData();
}, [])
return (
<>
<div className='content-root clearFloat xybm' style={{paddingRight:"0",paddingBottom:"0"}}>
<div className='adcdTableBox'>
<div className="ant-card-body" style={{ padding: "20px 0 0 0" }}>
<div style={{background:"#fff",padding:10}}>
<h1><Button type='primary' onClick={() => {refModal.current.showSave({})}}>新增</Button></h1>
<Table
columns={columns}
rowKey="id"
dataSource={dataSources}
columns={columns}
dataSource={data}
pagination={false}
scroll={{
x: width,
y: "calc( 100vh - 400px )"
}} />
</div>
</div>
}}
/>
<BasicCrudModal
width={800}
ref={refModal}
title=""
component={ModalForm}
onCrudSuccess={getData}
/>
</div>
<Modal
open={pdfViewOPen}
width={1000}
@ -141,8 +121,6 @@ const Page = () => {
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/resPlanB/file/download/${iframeSrc.fileId}`)}`}
/>
</Modal>
</>
);
</div>
)
}
export default Page;

View File

@ -0,0 +1,23 @@
.file-item{
display: flex;
width: 100%;
margin-top: -10px;
align-items: center;
border: 1px solid #dedede;
justify-content: space-between;
padding: 1%;
.file-description{
display: flex;
align-items: center;
column-gap: 10px;
img{
width: 40px;
height: 40px;
// margin-right: 10px;
}
}
.delete-icon{
// margin-left: 1%;
cursor: pointer;
}
}

View File

@ -1,29 +0,0 @@
import { Form, Input, Button } from 'antd';
const ToolBar = ({ setSearchVal, onSave }) => {
return (
<>
<div style={{display:'flex',justifyContent:'space-between'}}>
<Form className='toolbarBox' layout="inline" onFinish={(v)=>setSearchVal(v)}>
<Form.Item label="图件名称" name="imgName">
<Input allowClear placeholder='请输入图件名称' style={{width:'180px'}}/>
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">查询</Button>
</Form.Item>
{
onSave && (
<Form.Item>
<Button onClick={onSave}>新增</Button>
</Form.Item>
)
}
</Form>
</div>
</>
);
}
export default ToolBar;

View File

@ -16,9 +16,9 @@ import {getAdcdTreeData1, getGcTreeData5} from '../../../../service/warn';
const Page = () => {
const role = useSelector(state => state.auth.role);
const editBtn = role?.rule?.find(item => item.menuName == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 refModal = useRef();
const [searchVal, setSearchVal] = useState(false)
const [isFetch, setIsFetch] = useState(false)

View File

@ -8,8 +8,8 @@ import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role = [] }) => {
const [form] = Form.useForm();
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const onFinish = (values) => {
let dateSo;
if (values.tm) {

View File

@ -16,9 +16,9 @@ import {getAdcdTreeData1, getGcTreeData4} from '../../../../service/warn';
const Page = () => {
const role = useSelector(state => state.auth.role);
const editBtn = role?.rule?.find(item => item.menuName == "编辑");
const copyBtn = role?.rule?.find(item => item.menuName == "复制");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
const editBtn = role?.rule?.find(item => item.menuName == "编辑") || true;
const copyBtn = role?.rule?.find(item => item.menuName == "复制") || true;
const delBtn = role?.rule?.find(item => item.menuName == "删除") || true;
const refModal = useRef();
const treeRef = useRef();
const [form1] = Form.useForm();

View File

@ -7,8 +7,8 @@ import { config } from '../../../../config';
import moment from 'moment';
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const [form] = Form.useForm();
const onFinish = (val) => {

View File

@ -11,9 +11,9 @@ import {CrudOpRender_text} from '../../../components/crud/CrudOpRender';
import { httpget2 } from '../../../utils/request';
const Page = () => {
const role = useSelector(state => state.auth.role);
const editBtn = (role?.rule?.find(item => item.menuName == "查询"))?true:false;
const viewBtn = (role?.rule?.find(item => item.menuName == "详情"))?true:false;
const delBtn = (role?.rule?.find(item => item.menuName == "删除"))?true:false;
const editBtn = (role?.rule?.find(item => item.menuName == "查询"))?true:true;
const viewBtn = (role?.rule?.find(item => item.menuName == "详情"))?true:true;
const delBtn = (role?.rule?.find(item => item.menuName == "删除"))?true:true;
const [open, setOpen] = useState(false)
const [projectId, setProjectId] = useState('')

View File

@ -5,8 +5,8 @@ import { AppstoreOutlined, BarsOutlined } from '@ant-design/icons'
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave,setSwiper,exportFile,role }) => {
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -7,7 +7,7 @@ import { config } from '../../../../config';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const optionsType = [
{
label: "渗压监测",

View File

@ -11,9 +11,9 @@ import {CrudOpRender_text} from '../../../../components/crud/CrudOpRender';
import "./index.less"
const Page = () => {
const role = useSelector(state => state.auth.role);
const editBtn = role?.rule?.find(item => item.menuName == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 typeObj = {
1: "渗压监测",
2: "渗流监测",

View File

@ -7,8 +7,8 @@ import { config } from '../../../../config';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const optionsType = [
{
label: "渗压监测",

View File

@ -5,7 +5,7 @@ import { AppstoreOutlined, BarsOutlined } from '@ant-design/icons'
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, onChecked,role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const [checked, setChecked] = useState("多图单线")
const options = [

View File

@ -8,8 +8,8 @@ import moment from 'moment';
import { httppost2 } from '../../../../utils/request';
import apiurl from '../../../../service/apiurl';
const ToolBar = ({ setSearchVal, setDmName, exportFile,role }) => {
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const onFinish = (values) => {
let dataSo;

View File

@ -8,8 +8,8 @@ import moment from 'moment';
import { httppost2 } from '../../../../utils/request';
import apiurl from '../../../../service/apiurl';
const ToolBar = ({ setSearchVal, setDmName, exportFile,role }) => {
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const [dmList, setDmList] = useState([])
const getDmList = async () => {

View File

@ -8,8 +8,8 @@ import moment from 'moment';
import { httppost2 } from '../../../../utils/request';
import apiurl from '../../../../service/apiurl';
const ToolBar = ({ setSearchVal, setDmName, exportFile, role }) => {
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const onFinish = (values) => {
let dataSo;

View File

@ -7,7 +7,7 @@ import { config } from '../../../../config';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const optionsType = [
{
label: "今日",

View File

@ -9,7 +9,7 @@ import { httppost2 } from '../../../../utils/request';
import apiurl from '../../../../service/apiurl';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const optionsType = [
{
label: "今日",

View File

@ -9,7 +9,7 @@ import { httppost2 } from '../../../../utils/request';
import apiurl from '../../../../service/apiurl';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const optionsType = [
{

View File

@ -13,9 +13,9 @@ 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 == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 checkType = {
1: "日常检查",
2: "年度检查",

View File

@ -4,8 +4,8 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -4,7 +4,7 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const addBtn = role?.rule?.find(item => item.menuName == "新增")||true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -13,9 +13,9 @@ 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 == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 level = {
1: "一般事故",
2: "较大事故",

View File

@ -4,8 +4,8 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -13,9 +13,9 @@ 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 == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 refModal = useRef();
const [searchVal, setSearchVal] = useState(false)
const columns = [

View File

@ -4,8 +4,8 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -13,9 +13,9 @@ 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 == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 checkType = {
1: "地方自行组织",
2: "中央规划",

View File

@ -4,7 +4,7 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const addBtn = role?.rule?.find(item => item.menuName == "新增")||true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -16,9 +16,9 @@ const Page = () => {
const role = useSelector(state => state.auth.role);
console.log(role);
const editBtn = role?.rule?.find(item => item.menuName == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 checkType = {
1: "低风险",
2: "一般风险",

View File

@ -6,7 +6,7 @@ const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
console.log("role",role);
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const addBtn = role?.rule?.find(item => item.menuName == "新增")||true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -4,8 +4,8 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, exportFile, role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const exportBtn = role?.rule?.find(item => item.menuName == "导出")|| true;
const [form] = Form.useForm();
const onFinish = (values) => {
let dataSo;

View File

@ -4,8 +4,8 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, exportFile, role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const exportBtn = role?.rule?.find(item => item.menuName == "导出")|| true;
const [form] = Form.useForm();
const onFinish = (values) => {
let dataSo;

View File

@ -4,8 +4,8 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, exportFile, role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const exportBtn = role?.rule?.find(item => item.menuName == "导出")|| true;
const [form] = Form.useForm();
const onFinish = (values) => {
let dataSo;

View File

@ -4,8 +4,8 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, exportFile, role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const exportBtn = role?.rule?.find(item => item.menuName == "导出");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const exportBtn = role?.rule?.find(item => item.menuName == "导出")|| true;
const [form] = Form.useForm();
const onFinish = (values) => {
let dataSo;

View File

@ -13,9 +13,9 @@ 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 == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 surveyType = {
1: "日常检查排查",
2: "定期普查",

View File

@ -5,8 +5,8 @@ import moment from 'moment';
import NormalSelect from '../../../../components/Form/NormalSelect';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -13,7 +13,7 @@ const Page = () => {
const role = useSelector(state => state.auth.role);
console.log("role",role);
const uploadBtn = role?.rule?.find(item => item.menuName == "上传");
const uploadBtn = role?.rule?.find(item => item.menuName == "上传") || true;
const refModal = useRef();
const [fileList, setFileList] = useState([]) //上传文件列表
const [loading, setLoading] = useState(false)

View File

@ -6,7 +6,7 @@ const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
console.log("role",role);
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const addBtn = role?.rule?.find(item => item.menuName == "新增") || true;
const [form] = Form.useForm();
const onFinish = (values) => {

View File

@ -13,8 +13,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 == "编辑");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
const editBtn = role?.rule?.find(item => item.menuName == "编辑") || true;
const delBtn = role?.rule?.find(item => item.menuName == "删除") || true;
const refModal = useRef();
const columns = [
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" },

View File

@ -4,7 +4,7 @@ import { Form, Input, Button, DatePicker } from 'antd';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true;
const [form] = Form.useForm();
const onFinish = (values) => {
setSearchVal({...values});

View File

@ -14,7 +14,7 @@ import { httpget2 } from '../../../../utils/request';
import "./index.less"
const Page = () => {
const role = useSelector(state => state.auth.role);
const qd = role?.rule?.find(item => item.menuName == "清单");
const qd = role?.rule?.find(item => item.menuName == "清单") || true;
const khLevel = {
1: "优秀",
2: "良好",

View File

@ -4,7 +4,7 @@ import moment from 'moment';
import NormalSelect from '../../../../components/Form/NormalSelect';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const addBtn = role?.rule?.find(item => item.menuName == "新增") || true;
const types = [
{label:"未启动",value:0},
{label:"评分中",value:1},

View File

@ -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 == "编辑");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
const editBtn = role?.rule?.find(item => item.menuName == "编辑") || true;
const delBtn = role?.rule?.find(item => item.menuName == "删除") || true;
const refModal = useRef();
const columns = [
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" },

View File

@ -13,9 +13,9 @@ 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 == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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 types = {
1: '溢洪道淸障',

View File

@ -5,8 +5,8 @@ import moment from 'moment';
import NormalSelect from '../../../components/Form/NormalSelect';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const types = [
{label:"溢洪道淸障",value:1},

View File

@ -14,9 +14,9 @@ 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 == "编辑");
const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
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: "未完成",
1: "进行中",

View File

@ -5,8 +5,8 @@ import moment from 'moment';
import NormalSelect from '../../../../components/Form/NormalSelect';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "创建任务");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "创建任务")||true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const types = [
{label:"日常巡查",value:1},

View File

@ -6,7 +6,7 @@ import { httppost2 } from '../../../utils/request';
import apiurl from '../../../service/apiurl';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const warnTypes = [
{

View File

@ -0,0 +1,23 @@
import React, { useState, useMemo, useEffect } from 'react'
import ReactEcharts from 'echarts-for-react';
import jgOption from './jgoption'
import "./index.less"
export default function Zzjgck() {
const jgOptions = useMemo(() => {
return jgOption();
}, [])
return (
<div className='content-box' style={{ backgroundColor: '#fff', height: '100%', display: 'flex', padding: '10px' }}>
<div className='lf' style={{ height: 'calc(100vh - 168px)',width:"100%" }}>
<div style={{width:"100%",height:"100%"}}>
<ReactEcharts
option={jgOptions || {}}
style={{ width: "100%", height: '100%' }}
notMerge={true}
/>
</div>
</div>
</div>
)
}

View File

View File

@ -0,0 +1,137 @@
export default function jgOption() {
return {
tooltip: {
trigger: "item",
triggerOn: "mousemove",
color: "#fff",
backgroundColor: "skyblue",
borderColor: "skyblue",
},
animationDurationUpdate: 1500,
animationEasingUpdate: "quinticInOut",
series: [
{
type: "tree",
symbolSize: 75,
symbol: "roundRect",
edgeShape: "polyline",
edgeForkPosition: "50%",
edgeSymbol: ["circle", "arrow"],
edgeSymbolSize: [4, 10],
edgeLabel: {
normal: {
textStyle: {
fontSize: 18,
},
},
},
initialTreeDepth: 2,
orient: "vertical",
itemStyle: {
color: "#FFC125",
borderColor: "#FFC125",
},
roam: true, // 可移动,可缩放
expandAndCollapse: true,
animationDuration: 550,
animationDurationUpdate: 750,
//线条的颜色
lineStyle: {
normal: {
opacity: 0.9,
color: "#93beff",
// type: "dashed",
width: 2,
},
},
label: {
show: true,
position: "inside",
textStyle: {
fontSize: 15,
color: "#fff",
},
},
leaves: {
label: {
position: "inside",
color: "#fff",
},
itemStyle: {
color: "#dfdfdf",
borderColor: "#dfdfdf",
},
},
data: [
{
name: "根节点",
url: "",
// 根节点样式设置
itemStyle: {
color: "#18a849",
borderColor: "#18a849",
},
children: [
{
name: "子节点1",
children: [
{
name: "叶子节点1",
itemStyle: {
color: "#5470C6",
borderColor: "#5470C6",
},
},
{
name: "叶子节点2",
itemStyle: {
color: "#5470C6",
borderColor: "#5470C6",
},
},
{
name: "叶子节点3",
itemStyle: {
color: "#5470C6",
borderColor: "#5470C6",
},
},
],
},
{
name: "子节点2",
children: [
{
name: "叶子节点4",
itemStyle: {
color: "#5470C6",
borderColor: "#5470C6",
},
},
{
name: "叶子节点5",
itemStyle: {
color: "#5470C6",
borderColor: "#5470C6",
},
},
{
name: "叶子节点6",
itemStyle: {
color: "#5470C6",
borderColor: "#5470C6",
},
},
],
},
],
},
],
},
],
};
}

View File

@ -17,9 +17,9 @@ import { httppost5, httppost2 } from '../../../utils/request';
import "./index.less"
const Page = () => {
const role = useSelector(state => state.auth.role);
const editBtn = role?.rule?.find(item => item.menuName == "编辑");
const editBtn = role?.rule?.find(item => item.menuName == "编辑")|| true;
// const viewBtn = role?.rule?.find(item => item.menuName == "查看");
const delBtn = role?.rule?.find(item => item.menuName == "删除");
const delBtn = role?.rule?.find(item => item.menuName == "删除")|| true;
const refModal = useRef();
const [searchVal, setSearchVal] = useState(false)

View File

@ -5,8 +5,8 @@ import NormalSelect from '../../../components/Form/NormalSelect';
import moment from 'moment';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, exportFile,role }) => {
const addBtn = role?.rule?.find(item => item.menuName == "新增");
const searchBtn = role?.rule?.find(item => item.menuName == "查询");
const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true;
const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true;
const [form] = Form.useForm();