-
diff --git a/src/views/Home/MapCtrl/Pops/index.less b/src/views/Home/MapCtrl/Pops/index.less
index 0d4239e..5018f1b 100644
--- a/src/views/Home/MapCtrl/Pops/index.less
+++ b/src/views/Home/MapCtrl/Pops/index.less
@@ -20,15 +20,27 @@
box-shadow: 0 1px 2px rgba(0,0,0,.1);
pointer-events: auto;
//background: rgba(4, 8, 27, 0.9);
- background: rgba(255, 255, 255, 0.9);
+ // background: rgba(255, 255, 255, 0.9);
+ background: linear-gradient(135deg, rgba(10, 75, 150, 0.9), rgba(14, 17, 22, 0.8),rgba(14, 17, 22, 0.8),rgba(14, 17, 22, 0.8));
border-radius: 0px;
padding: 0;
}
.content-body {
- color: #333;
+ // color: #333;
+ color: #fff;
// padding: 0.4rem 0.4rem 0.2rem 0.4rem;
position: relative;
+
+
+ //antd描述列表
+ .ant-descriptions{
+ .ant-descriptions-item-container{
+ .ant-descriptions-item-label,.ant-descriptions-item-content{
+ color: #ffffff;
+ }
+ }
+ }
.cursor-pointer1, .cursor-pointer2, .cursor-pointer3{
position: absolute;
@@ -50,7 +62,7 @@
display: flex;
align-items: center;
border-bottom: 1px solid rgba(36, 136, 223, 0.60);
- padding: 0.2rem 0.6rem 0.4rem 0.6rem;
+ padding: 0.2rem 0.6rem 0.4rem 0.2rem;
line-height:30px;
font-size:16px;
@@ -62,6 +74,9 @@
}
.name {
+ margin: 7px 0 5px 0;
+ background-repeat: no-repeat;
+ padding-left: 20px;
flex-grow: 1;
font-weight:bold;
}
diff --git a/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js b/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js
index 09e8034..40d4bcf 100644
--- a/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js
+++ b/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js
@@ -1,5 +1,5 @@
import React, { useState, useEffect } from 'react';
-import { useSelector } from 'react-redux';
+import { useDispatch, useSelector } from 'react-redux';
import { Table } from 'antd';
import CommonModal from '@/views/Home/components/UI/CommonModal';
import arrowIcon from '@/assets/images/card/arrow.png';
@@ -14,6 +14,7 @@ import VideoList from '../ModalComponents/VideoList'
import UAVModal from '../ModalComponents/UAVModal';
const AllWeatherControl = () => {
+ const dispatch = useDispatch()
const isFullScreen = useSelector(s => s.runtime.isFullScreen);
const [reservoirItem, setReservoirItem] = useState({})
const [rainList, setRainList] = useState([])
@@ -155,6 +156,21 @@ const AllWeatherControl = () => {
style={{ backgroundImage: `url(${smallCard})`, cursor: item.clickable ? 'pointer' : 'default' }}
onClick={() => {
if (item.clickable) {
+ const { label } = item
+ if(label==='主坝坝前'){
+ dispatch.runtime.setCameraTarget({
+ center: [114.15437134051429, 29.743689445729758],
+ zoom: 18,
+ pitch: 60
+ })
+ }
+ if(label==='副坝坝前'){
+ dispatch.runtime.setCameraTarget({
+ center: [114.18263599215172, 29.747020722346193],
+ zoom: 18,
+ pitch: 60
+ })
+ }
setReservoirVisible(true)
}
}}
diff --git a/src/views/Home/components/Business/SiQuan/components/MonitoringElements/index.js b/src/views/Home/components/Business/SiQuan/components/MonitoringElements/index.js
index 002779e..ef356ae 100644
--- a/src/views/Home/components/Business/SiQuan/components/MonitoringElements/index.js
+++ b/src/views/Home/components/Business/SiQuan/components/MonitoringElements/index.js
@@ -1,11 +1,12 @@
import React,{useMemo} from 'react';
-import { useSelector } from 'react-redux';
+import { useDispatch, useSelector } from 'react-redux';
import arrowIcon from '@/assets/images/card/arrow.png';
import qysIcon from '@/assets/images/business/qys.png';
import textBg from '@/assets/images/card/textbg.png';
import './index.less';
const MonitoringElements = ({ data }) => {
+ const dispatch = useDispatch()
const isFullScreen = useSelector(s => s.runtime.isFullScreen);
const reservoirInfo = [
{ label: '总库容(万m³):', value: '', highlight: false,type:1 },
@@ -55,7 +56,17 @@ const MonitoringElements = ({ data }) => {
{newReservoirInfo.map((item, index) => (
{item.label}
- {item.value}
+ {
+ const {type} = item
+ if(type===2){
+ //点击承雨面积
+ dispatch.runtime.setCameraTarget({
+ center: [114.15437134051429, 29.744689445729758],
+ zoom: 14,
+ pitch: 60
+ })
+ }
+ }}>{item.value}
))}
(水库直接承雨面积{data?.directCatchmentArea || '-'},库区内赛丰水库承雨面积{data?.reservoirWaterSurfaceArea || '-'})
diff --git a/src/views/Home/mapToolBox/globalSearch.js b/src/views/Home/mapToolBox/globalSearch.js
index 76ea5fa..13aa8a1 100644
--- a/src/views/Home/mapToolBox/globalSearch.js
+++ b/src/views/Home/mapToolBox/globalSearch.js
@@ -13,14 +13,14 @@ export default function Btn({open, mode, layerVisible, setOpen, mapType, layerVi
const [ tableData, setTableData ] = useState([])
const dispatch = useDispatch()
const columns = [
- { title: '名称', key: 'name', dataIndex: 'name',align: "center",width:150, ellipsis: true, },
- { title: '类型', key: 'type', dataIndex: 'type',align: "center",width: 50, ellipsis: true },
+ { title: '名称', key: 'name', dataIndex: 'name',align: "center",width:'60%', ellipsis: true, },
+ { title: '类型', key: 'type', dataIndex: 'type',align: "center",width:'40%', ellipsis: true },
];
- // const importMap = {
- // '业务规则库': () => import('../../../sz/ywgz/form'),
- // '调度方案库': () => import('../../../sz/ddfa/form'),
- // '工程安全知识库': () => import('../../../sz/khzbgl/form')
- // };
+ const importMap = {
+ '业务规则库': () => import('../../sz/ywgz/form'),
+ '调度方案库': () => import('../../sz/ddfa/form'),
+ '工程安全知识库': () => import('../../sz/khzbgl/form')
+ };
const onFinish = ({name}) => {
if(name){
@@ -41,7 +41,7 @@ export default function Btn({open, mode, layerVisible, setOpen, mapType, layerVi
const clickItem = (item)=>{
// 业务规则库
if (item.type == '业务规则库' || item.type == '调度方案库' || item.type == '工程安全知识库') {
- // regularOpen(item)
+ regularOpen(item)
return; // 添加return避免继续执行
}
@@ -215,45 +215,45 @@ export default function Btn({open, mode, layerVisible, setOpen, mapType, layerVi
}
// 业务规则库弹框
- // const regularOpen = async (record) => {
- // const id = record?.unionCode
- // const com = record.type == '业务规则库' ?
- // { url: apiurl.zsk.ywgz.getOne } :
- // record.type == '调度方案库' ?
- // { url: apiurl.zsk.ddfa.getOne } :
- // { url: apiurl.zsk.gcaq.getOne };
- // const res = await httpget(com.url + id)
- // // 导入业务规则库的Modal组件
- // // 使用映射函数进行导入
- // try {
- // const ModalForm = await importMap[record.type]();
+ const regularOpen = async (record) => {
+ const id = record?.unionCode
+ const com = record.type == '业务规则库' ?
+ { url: apiurl.zsk.ywgz.getOne } :
+ record.type == '调度方案库' ?
+ { url: apiurl.zsk.ddfa.getOne } :
+ { url: apiurl.zsk.gcaq.getOne };
+ const res = await httpget(com.url + id)
+ // 导入业务规则库的Modal组件
+ // 使用映射函数进行导入
+ try {
+ const ModalForm = await importMap[record.type]();
- // Modal.destroyAll(); // 先销毁可能存在的其他Modal
- // const modal = Modal.confirm({
- // title:
- //
{record.name}详情
- //
,
- // width: 1000,
- // content: (
- // <>
- //
- //
- // >
- // ),
- // icon: null,
- // okButtonProps: { style: { display: 'none' } },
- // cancelButtonProps: { style: { display: 'none' } },
- // closable: true
- // });
- // } catch (error) {
- // console.error('模块导入失败:', error);
- // message.error(`无法加载${record.type}详情,请稍后再试`);
- // }
- // return;
- // }
+ Modal.destroyAll(); // 先销毁可能存在的其他Modal
+ const modal = Modal.confirm({
+ title:
,
+ width: 1000,
+ content: (
+ <>
+
+
+ >
+ ),
+ icon: null,
+ okButtonProps: { style: { display: 'none' } },
+ cancelButtonProps: { style: { display: 'none' } },
+ closable: true
+ });
+ } catch (error) {
+ console.error('模块导入失败:', error);
+ message.error(`无法加载${record.type}详情,请稍后再试`);
+ }
+ return;
+ }
// 工程安全监测点
const renderGCaqModal = (record) => {
@@ -298,7 +298,7 @@ export default function Btn({open, mode, layerVisible, setOpen, mapType, layerVi
return (
-
+
搜索
@@ -316,10 +316,11 @@ export default function Btn({open, mode, layerVisible, setOpen, mapType, layerVi
columns={columns}
pagination={false}
dataSource={tableData}
- scroll={{ y: "400px"}}
+ scroll={{x:false, y: "430px"}}
onRow={
(row)=>({
- // onClick:()=>clickItem(row)
+ onClick:()=>clickItem(row),
+ style: { cursor: 'pointer' }
})
}
/>
diff --git a/src/views/Home/mapToolBox/index.less b/src/views/Home/mapToolBox/index.less
index 21f26b9..388133b 100644
--- a/src/views/Home/mapToolBox/index.less
+++ b/src/views/Home/mapToolBox/index.less
@@ -131,7 +131,7 @@
position: absolute;
background: #1c3965f0;
border: 1px solid #2755a1;
- width: 260px;
+ width: 300px;
height: 100%;
border-radius: 4px;
top: 0;
@@ -177,8 +177,8 @@
}
}
- .width260{
- width: 260px;
+ .width300{
+ width: 300px;
}
.width160{
width: 160px;
diff --git a/src/views/sz/ddfa/form.js b/src/views/sz/ddfa/form.js
new file mode 100644
index 0000000..a45df08
--- /dev/null
+++ b/src/views/sz/ddfa/form.js
@@ -0,0 +1,149 @@
+import React, { useEffect, useState } from 'react';
+import { Form, Button, Input, Row, Col, DatePicker, Select } from 'antd';
+import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
+import apiurl from '../../../service/apiurl';
+import FileUpload from '../../../components/Form/FileUpload'
+import moment from 'moment';
+import './index.less'
+
+
+ const opntios = [
+ {value:1,label:'防洪调度'},
+ {value:2,label:'兴利调度'},
+ {value:3,label:'生态调度'},
+ {value:4,label:'应急调度'},
+ {value:5,label:'其他'},
+]
+
+const opntios1 = [
+ {value:0,label:'已废弃'},
+ {value:1,label:'生效中'},
+ ]
+const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
+ const [form] = Form.useForm();
+ const [loading, setLoading] = useState(false)
+ const [filesParams, setFilesParams] = useState([])
+ const [fileUploading, setFileUploading] = useState(false) // 新增文件上传状态
+ const onfinish = (values) => {
+ const userId = localStorage.getItem("userId");
+ const userName = localStorage.getItem("userName");
+ values.tm = moment(values.bzsj).format("YYYY-MM-DD")
+ if (mode === 'edit') {
+ onEdit(apiurl.zsk.ddfa.edit, {...record,...values,createUser:userName,files: filesParams})
+ }
+ if (mode === 'save') {
+ onSave(apiurl.zsk.ddfa.save, {...values,createUser:userName,files: filesParams})
+ }
+ }
+
+useEffect(() => {
+ if (mode != 'save') {
+ const tm = record?.tm ? moment(record?.tm) : '';
+ form.setFieldValue('bzsj', tm)
+ if (record?.files.length > 0) {
+ setFilesParams(record?.files)
+ }
+ }
+}, [mode])
+
+
+
+ return (
+ <>
+
+
+
+ >
+ )
+ }
+
+ >
+ );
+}
+
+export default ModalForm;
diff --git a/src/views/sz/ddfa/index.js b/src/views/sz/ddfa/index.js
new file mode 100644
index 0000000..fb3ae61
--- /dev/null
+++ b/src/views/sz/ddfa/index.js
@@ -0,0 +1,93 @@
+import React, { Fragment, useRef, useMemo, useEffect, useState } from 'react';
+import BasicCrudModal from '../../../components/crud/BasicCrudModal';
+import { Table, Card } from 'antd';
+import ToolBar from './toolbar';
+import ModalForm from './form';
+import apiurl from '../../../service/apiurl';
+import usePageTable from '../../../components/crud/usePageTable';
+import { createCrudService } from '../../../components/crud/_';
+import { CrudOpRender_text } from '../../../components/crud/CrudOpRender';
+
+const obj = { 1: "防洪调度", 2: "兴利调度", 3: "生态调度", 4: "应急调度", 5: "其他" }
+const sobj = {0:'已废弃',1:'生效中'}
+const Page = () => {
+
+ const refModal = useRef();
+ const [searchVal, setSearchVal] = useState(false)
+ const columns = [
+ { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" },
+ { title: '方案名称', key: 'name', dataIndex: 'name', ellipsis: true },
+ { title: '调度类型', key: 'type', dataIndex: 'type',render:(v)=><>{obj[v]}>},
+ { title: '简介', key: 'content', dataIndex: 'content'},
+ { title: '编制时间', key: 'tm', dataIndex: 'tm'},
+ { title: '附件数', key: 'fileCount', dataIndex: 'fileCount'},
+ { title: '状态', key: 'status', dataIndex: 'status',render:(v)=><>{sobj[v]}>},
+ { title: '创建人', key: 'createUser', dataIndex: 'createUser'},
+ { title: '最后更新时间', key: 'updateTm', dataIndex: 'updateTm'},
+ {
+ title: '操作', key: 'operation', fixed: 'right', align: 'center',
+ render: (value, row, index) => (
+
() => command(cmd)(row)}
+ />
+ )
+ },
+ ];
+
+ 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.zsk.ddfa.del + `/${params.id}`);
+ }
+ }
+
+
+ const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.zsk.ddfa.page).find);
+
+
+ useEffect(() => {
+ const params = {
+ search: {
+ ...searchVal,
+ }
+ };
+ search(params)
+ }, [searchVal])
+
+
+ return (
+ <>
+
+ >
+ );
+}
+
+export default Page;
diff --git a/src/views/sz/ddfa/index.less b/src/views/sz/ddfa/index.less
new file mode 100644
index 0000000..2989893
--- /dev/null
+++ b/src/views/sz/ddfa/index.less
@@ -0,0 +1,8 @@
+.ModalFormClass{
+
+ .ant-form-item-label{
+ label{
+ color: #fff;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/sz/ddfa/toolbar.js b/src/views/sz/ddfa/toolbar.js
new file mode 100644
index 0000000..e0c4537
--- /dev/null
+++ b/src/views/sz/ddfa/toolbar.js
@@ -0,0 +1,67 @@
+import { Form, Input, Button, DatePicker, Select } from 'antd';
+
+import moment from 'moment';
+const { RangePicker } = DatePicker;
+const ToolBar = ({ setSearchVal, onSave }) => {
+ const [form] = Form.useForm();
+ const onFinish = (values) => {
+ const {releaseDate,...ret} = values
+ if(releaseDate){
+ ret.stm = moment(values.releaseDate[0]).format('YYYY-MM-DD')
+ ret.etm = moment(values.releaseDate[1]).format('YYYY-MM-DD')
+ }
+ setSearchVal(ret);
+ }
+
+ const opntios = [
+ {value:1,label:'防洪调度'},
+ {value:2,label:'兴利调度'},
+ {value:3,label:'生态调度'},
+ {value:4,label:'应急调度'},
+ {value:5,label:'其他'},
+ ]
+
+ const opntios1 = [
+ {value:0,label:'已废弃'},
+ {value:1,label:'生效中'},
+ ]
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ (onSave) ?
+
+
+
+ : null
+ }
+
+
+
+ >
+ );
+}
+
+export default ToolBar;
\ No newline at end of file
diff --git a/src/views/sz/khzbgl/AdcdTreeSelector/index.less b/src/views/sz/khzbgl/AdcdTreeSelector/index.less
new file mode 100644
index 0000000..ac6ad25
--- /dev/null
+++ b/src/views/sz/khzbgl/AdcdTreeSelector/index.less
@@ -0,0 +1,47 @@
+li.ant-tree-treenode-disabled > span:not(.ant-tree-switcher),
+li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper,
+li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper span{
+ color: #000 !important;
+ font-weight: bold;
+}
+
+.treeBox1{
+ .ant-tree-node-content-wrapper{
+ position: static !important;
+ }
+ .hover-ele{
+ &:hover{
+ color:#259dff
+ }
+ }
+}
+.AdcdTreeSelectorStyle{
+ .ant-input-wrapper{
+
+ .ant-input-affix-wrapper{
+ width: 98%;
+ }
+ .ant-input-group-addon{
+ .ant-btn{
+ width: 34px;
+ height: 34px;
+ }
+ }
+ }
+
+ .treeTitle {
+ display: flex;
+ justify-content: space-between;
+ .treeBtn {
+ display: none;
+ }
+}
+.treeTitle:hover {
+ .treeBtn {
+ display: flex;
+ }
+}
+}
+.no-matter{
+ opacity: 0.5;
+}
\ No newline at end of file
diff --git a/src/views/sz/khzbgl/AdcdTreeSelector/index.tsx b/src/views/sz/khzbgl/AdcdTreeSelector/index.tsx
new file mode 100644
index 0000000..a68e2fc
--- /dev/null
+++ b/src/views/sz/khzbgl/AdcdTreeSelector/index.tsx
@@ -0,0 +1,318 @@
+import React, { useState, useEffect } from 'react';
+import { Tree, Input, Spin,Modal,Form,Col,Row,message,Space } from 'antd';
+import { EditOutlined, DeleteOutlined,ExclamationCircleOutlined} from '@ant-design/icons';
+import './index.less';
+import { formItemLayout } from '../../../../components/crud/FormLayoutProps';
+import apiurl from '../../../../service/apiurl';
+import { httppost, httpget } from '../../../../utils/request';
+
+
+type IProps = {
+ onSelectFun?: any;
+ setAdcd?: any;
+ showCheckbox: any;
+ tableName?: any;
+ onChangeOpen?: any;
+ hasAlertBox?: boolean;//顶部是否有预警条
+ isFetch?: boolean;
+}
+const { confirm } = Modal;
+const AdcdTreeSelector: React.FC = ({ onSelectFun, setAdcd, showCheckbox, tableName, hasAlertBox }) => {
+ const [loading, setLoading] = useState(true);
+ const [treeData, setTreeData] = useState([]);
+ const [newTreeData, setNewTreeData] = useState([]);
+ const [isFiter, setIsFiter] = useState(false);
+ const [expandedKeys, setExpandedKeys] = useState([]);
+ const [checkedKeys, setCheckedKeys] = useState([]);
+ const [selectedKeys, setSelectedKeys] = useState([]);
+ const [selectedItem, setSelectedItem] = useState({});
+ const [autoExpandParent, setAutoExpandParent] = useState(true);
+ const [treeBoxHeight, setTreeBoxHeight] = useState({});
+ const [jdOpen, setJdOpen] = useState(false)
+ const [form] = Form.useForm();
+ const [mode, setMode] = useState('')
+ const [itemDetail, setItemDetail] = useState({})
+ const [orderMax, setOrderMax] = useState(0)
+ useEffect(() => {
+ getCustomerTreeData();
+ }, []);
+
+ useEffect(() => {
+ if(tableName){
+ setSelectedKeys([]);
+ }
+ }, [tableName]);
+
+ useEffect(()=>{
+ //根据预警条计/多选框计算高度
+ if(hasAlertBox){
+ if(showCheckbox){
+ setTreeBoxHeight({height:"calc( 100vh - 240px )"})
+ }else{
+ setTreeBoxHeight({height:"calc( 100vh - 210px )"})
+ }
+ }else{
+ if(showCheckbox){
+ setTreeBoxHeight({height:"calc( 100vh - 224px )"})
+ }else{
+ setTreeBoxHeight({height:"calc( 100vh - 194px )"})
+ }
+ }
+ },[hasAlertBox])
+
+ const getCustomerTreeData = async () => {
+ const { data, code, msg} = await httpget(apiurl.zsk.gcaq.tree);
+ let adcdTreedata = []
+ if (code !== 200) {
+ message.error(msg || '请求失败');
+ }
+ adcdTreedata = data
+
+ const item:any = adcdTreedata
+ if (item) {
+ setSelectedKeys([item[0]?.id])
+ setAdcd(item[0]?.id)
+ }
+ if (adcdTreedata.length > 0) {
+ handelTreeData(adcdTreedata);
+ setTreeData(adcdTreedata);
+ setLoading(false);
+ setOrderMax(Math.max(...adcdTreedata.map((item:any) => item?.orderIndex)))
+ } else {
+ setLoading(false);
+ setTreeData([])
+ }
+ };
+ // @ts-ignore
+ const handelTreeData = (data) => {
+ if (data.length > 0) {
+ // @ts-ignore
+ data.forEach(item => {
+ item.title = item.name;
+ item.key = item.id;
+ if (item.children && item.children.length > 0) {
+ handelTreeData(item.children);
+ }
+ });
+ }
+ }
+
+ const onExpand = (expandedKeysValue:any) => {
+ setExpandedKeys(expandedKeysValue);
+ setAutoExpandParent(false);
+ };
+
+
+ const onSelect = (selectedKeysValue:any, info:any) => {
+ setSelectedKeys(selectedKeysValue);
+ setSelectedItem(info);
+
+ if (info.selectedNodes.length > 0) {
+ let selectData = info.selectedNodes[0];
+ let adcdVal = "";
+ adcdVal = selectData.id;
+
+ let params = { id: adcdVal };
+ if(onSelectFun){
+ onSelectFun(params);
+ }
+ if(setAdcd){
+ setAdcd(adcdVal)
+ }
+ } else {
+ let params = { id: "" };
+ if(onSelectFun){
+ onSelectFun(params);
+ }
+ if(setAdcd){
+ setAdcd("")
+ }
+ }
+ };
+
+
+
+
+
+ // 删除
+ const deleteJd = (v: any) => {
+ confirm({
+ title: '删除',
+ icon: ,
+ content: '确认删除此数据',
+ okText: '确定',
+ okType: 'primary',
+ cancelText: '取消',
+ onOk: async() => {
+ try {
+ debugger
+ const res = await httpget(apiurl.zsk.gcaq.deleteTree + `/${v.id}`)
+ if (res.code === 200) {
+ message.success('删除成功');
+ getCustomerTreeData();
+ }
+ if (res.code === 400) {
+ message.error(res.description);
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ },
+ onCancel() {
+ console.log('Cancel');
+ },
+ });
+ }
+
+ // 新增节点
+ const saveJd = (v: any) => {
+ if (v) {
+ // form.setFieldValue('name', v.title);
+ setItemDetail(v);
+ }
+ setJdOpen(true);
+ setMode("save");
+ }
+
+ // 编辑节点
+ const editJd = (v: any) => {
+ setJdOpen(true);
+ form.setFieldsValue(v);
+ setMode("edit");
+ setItemDetail(v);
+ }
+
+ const onOk = async () => {
+ const name = form.getFieldValue('name').replace(/\s/g,"");
+ if(!name) return
+ const url = mode == "save" ? apiurl.zsk.gcaq.saveTree : apiurl.zsk.gcaq.editTree;
+ let saveParams = {
+ name,
+ // parentId: itemDetail?.id || undefined,
+ // orderIndex:itemDetail?.orderIndex || orderMax
+ }
+ let editParams = {
+ ...itemDetail,
+ name
+ }
+ try {
+ const res = mode != 'save' ? await httppost(url,editParams):await httpget(url, saveParams)
+ if (res.code == 200) {
+ message.success(mode == "save" ? '新增成功' : '编辑成功');
+ setJdOpen(false);
+ getCustomerTreeData();
+ form.resetFields();
+ } else if (res.code == 400) {
+ message.error(res.description);
+ }
+ } catch (error) {
+ console.log(error);
+
+ }
+ }
+ return (
+
+
新增知识库类型
+ {
+ loading?
+
+
+
:null
+ }
+
+
+
+ {
+ treeData.length > 0 &&
+
{
+ return (
+
+
{v.title}
+
+ {/* {
+ e.stopPropagation();
+ saveJd(v);
+ }}
+ className='hover-ele'
+ /> */}
+ {
+ e.stopPropagation();
+ editJd(v);
+ }}
+ className='hover-ele'
+ />
+ {
+ e.stopPropagation();
+ deleteJd(v);
+ }}
+ className='hover-ele'
+ />
+
+
+
+ )
+ }}
+ />
+ }
+
+
+
+
{ setJdOpen(false); form.resetFields()}}
+ onOk={onOk}
+ >
+
+
+
+ );
+};
+
+export default AdcdTreeSelector;
diff --git a/src/views/sz/khzbgl/form.js b/src/views/sz/khzbgl/form.js
new file mode 100644
index 0000000..895ef2d
--- /dev/null
+++ b/src/views/sz/khzbgl/form.js
@@ -0,0 +1,136 @@
+import React, { useEffect, useState, useMemo, useRef } from 'react';
+import { Form, Button, Input, Row, Upload, Col, Table, DatePicker, InputNumber, message, Image, Modal, Typography, Select } from 'antd';
+import { DeleteOutlined, FileWordOutlined, FilePdfOutlined, FileZipOutlined, FileExcelOutlined } from '@ant-design/icons';
+import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
+import apiurl from '../../../service/apiurl';
+import NormalSelect from '../../../components/Form/NormalSelect';
+import FileUpload from '../../../components/Form/FileUpload'
+import './index.less'
+
+
+// import "./index.less"
+import moment from 'moment';
+import TextArea from 'antd/lib/input/TextArea';
+
+ const opntios = [
+ {value:1,label:'水资源调度'},
+ {value:2,label:'防洪调度'},
+ {value:3,label:'工程安全'},
+ {value:4,label:'应急抢险'},
+ {value:5,label:'其他'},
+ ]
+
+const opntios1 = [
+ {value:0,label:'已废弃'},
+ {value:1,label:'生效中'},
+ ]
+const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
+ const [form] = Form.useForm();
+ const [loading, setLoading] = useState(false)
+ const [filesParams, setFilesParams] = useState([])
+ const [fileUploading, setFileUploading] = useState(false) // 新增文件上传状态
+
+ const onfinish = (values) => {
+ const userId = localStorage.getItem("userId");
+ const userName = localStorage.getItem("userName");
+ values.tm = moment(values.bzsj).format("YYYY-MM-DD")
+ if (mode === 'edit') {
+ onEdit(apiurl.zsk.gcaq.edit, { ...record, ...values, createUser: userName, files: filesParams})
+ }
+ if (mode === 'save') {
+ onSave(apiurl.zsk.gcaq.save, {...values,createUser:userName,files:filesParams,type:record?.code})
+ }
+ }
+
+useEffect(() => {
+ if (mode != 'save') {
+ const tm = record?.tm ? moment(record?.tm) : '';
+ form.setFieldValue('bzsj', tm)
+ if (record?.files.length > 0) {
+ setFilesParams(record?.files)
+ }
+ }
+}, [mode,record])
+
+
+
+
+ return (
+ <>
+
+
+
+ >
+ )
+ }
+
+ >
+ );
+}
+
+export default ModalForm;
diff --git a/src/views/sz/khzbgl/index.js b/src/views/sz/khzbgl/index.js
new file mode 100644
index 0000000..ae06884
--- /dev/null
+++ b/src/views/sz/khzbgl/index.js
@@ -0,0 +1,112 @@
+import React, { useRef, useMemo, useEffect, useState } from 'react';
+import BasicCrudModal from '../../../components/crud/BasicCrudModal';
+import { Table, Card } from 'antd';
+import { useSelector } from 'react-redux';
+import AdcdTreeSelector from "./AdcdTreeSelector";
+import ToolBar from './toolbar';
+import ModalForm from './form';
+import apiurl from '../../../service/apiurl';
+import usePageTable from '../../../components/crud/usePageTable';
+import { createCrudService } from '../../../components/crud/_';
+import { CrudOpRender_text } from '../../../components/crud/CrudOpRender';
+
+const url = "http://223.75.53.141:9100/gs-tsg"
+const Page = () => {
+ const role = useSelector(state => state.auth.role);
+ 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" },
+ { title: '标题', key: 'name', dataIndex: 'name', width: 200 },
+ { title: '简介', key: 'content', dataIndex: 'content' },
+ { title: '编制时间', key: 'tm', dataIndex: 'tm' },
+ { title: '附件数', key: 'fileCount', dataIndex: 'fileCount' },
+ { title: '创建人', key: 'createUser', dataIndex: 'createUser' },
+ { title: '最后更新时间', key: 'updateTm', dataIndex: 'updateTm' },
+ {
+ title: '操作', key: 'operation', width: 200, fixed: 'right', align: 'center',
+ render: (value, row, index) => (
+ () => command(cmd)(row)} />)
+ },
+ ];
+ const [code, setCode] = useState()
+ const [searchVal, setSearchVal] = useState(false)
+
+
+ const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
+
+
+
+ const command = (type) => (params) => {
+ if (type === 'save') {
+ refModal.current.showSave({ code });
+ } else if (type === 'edit') {
+ refModal.current.showEdit({ ...params, code });
+ } else if (type === 'view') {
+ refModal.current.showView(params);
+ } else if (type === 'del') {
+ refModal.current.onDeleteGet(apiurl.zsk.gcaq.del + `/${params.id}`);
+ }
+ }
+
+
+
+ const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.zsk.gcaq.page).find);
+
+ useEffect(() => {
+ if (code) {
+ let params = {
+ search: {
+ type: code,
+ ...searchVal,
+ }
+ };
+ search(params)
+ }
+ }, [code, searchVal]);
+
+
+ return (
+ <>
+
+ >
+ );
+}
+
+export default Page;
diff --git a/src/views/sz/khzbgl/index.less b/src/views/sz/khzbgl/index.less
new file mode 100644
index 0000000..2989893
--- /dev/null
+++ b/src/views/sz/khzbgl/index.less
@@ -0,0 +1,8 @@
+.ModalFormClass{
+
+ .ant-form-item-label{
+ label{
+ color: #fff;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/sz/khzbgl/toolbar.js b/src/views/sz/khzbgl/toolbar.js
new file mode 100644
index 0000000..591e40c
--- /dev/null
+++ b/src/views/sz/khzbgl/toolbar.js
@@ -0,0 +1,54 @@
+import React, { useEffect, useState } from 'react';
+import { Form, Input, Button, DatePicker } from 'antd';
+
+import moment from 'moment';
+const { RangePicker } = DatePicker;
+const ToolBar = ({ setSearchVal, onSave, storeData, role }) => {
+ console.log("role", role);
+
+ const addBtn = role?.rule?.find(item => item.menuName == "新增");
+ const [form] = Form.useForm();
+
+ const onFinish = (values) => {
+ debugger
+ const { releaseDate, ...ret } = values
+ if (releaseDate) {
+ ret.stm = moment(values.releaseDate[0]).format('YYYY-MM-DD')
+ ret.etm = moment(values.releaseDate[1]).format('YYYY-MM-DD')
+ }
+ setSearchVal(ret);
+ }
+
+
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+
+ (onSave) ?
+
+
+
+ : null
+ }
+
+
+ >
+ );
+}
+
+export default ToolBar;
\ No newline at end of file
diff --git a/src/views/sz/ywgz/form.js b/src/views/sz/ywgz/form.js
new file mode 100644
index 0000000..bb4986b
--- /dev/null
+++ b/src/views/sz/ywgz/form.js
@@ -0,0 +1,147 @@
+import React, { useEffect, useState } from 'react';
+import { Form, Button, Input, Row, Col, DatePicker, Select } from 'antd';
+import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
+import apiurl from '../../../service/apiurl';
+import FileUpload from '../../../components/Form/FileUpload'
+import moment from 'moment';
+import './index.less'
+
+ const opntios = [
+ {value:1,label:'水资源调度'},
+ {value:2,label:'防洪调度'},
+ {value:3,label:'工程安全'},
+ {value:4,label:'应急抢险'},
+ {value:5,label:'其他'},
+ ]
+
+const opntios1 = [
+ {value:0,label:'已废弃'},
+ {value:1,label:'生效中'},
+ ]
+const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
+ console.log('ccczx',record);
+ const [form] = Form.useForm();
+ const [loading, setLoading] = useState(false)
+ const [filesParams, setFilesParams] = useState([])
+ const [fileUploading, setFileUploading] = useState(false) // 新增文件上传状态
+ const onfinish = (values) => {
+ const userId = localStorage.getItem("userId");
+ const userName = localStorage.getItem("userName");
+ values.tm = moment(values.bzsj).format("YYYY-MM-DD")
+ if (mode === 'edit') {
+ onEdit(apiurl.zsk.ywgz.edit, { ...record, ...values, createUser: userName, files: filesParams})
+ }
+ if (mode === 'save') {
+ onSave(apiurl.zsk.ywgz.save, {...values,createUser:userName,files:filesParams})
+ }
+ }
+
+useEffect(() => {
+ if (mode != 'save') {
+ const tm = record?.tm ? moment(record?.tm) : '';
+ form.setFieldValue('bzsj', tm)
+ if (record?.files.length > 0) {
+ setFilesParams(record?.files)
+ }
+ }
+}, [mode,record])
+
+
+
+
+ return (
+ <>
+
+
+
+ >
+ )
+ }
+
+ >
+ );
+}
+
+export default ModalForm;
diff --git a/src/views/sz/ywgz/index.js b/src/views/sz/ywgz/index.js
new file mode 100644
index 0000000..74f9543
--- /dev/null
+++ b/src/views/sz/ywgz/index.js
@@ -0,0 +1,93 @@
+import React, { useRef, useEffect, useState } from 'react';
+import BasicCrudModal from '../../../components/crud/BasicCrudModal';
+import { Table, Card } from 'antd';
+import ToolBar from './toolbar';
+import ModalForm from './form';
+import apiurl from '../../../service/apiurl';
+import usePageTable from '../../../components/crud/usePageTable';
+import { createCrudService } from '../../../components/crud/_';
+import { CrudOpRender_text } from '../../../components/crud/CrudOpRender';
+
+const obj = { 1: "水资源调度", 2: "防洪调度", 3: "工程安全", 4: "应急抢险", 5: "其他" }
+const sobj = {0:'已废弃',1:'生效中'}
+const Page = () => {
+
+ const refModal = useRef();
+ const [searchVal, setSearchVal] = useState(false)
+ const columns = [
+ { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" },
+ { title: '规则名称', key: 'name', dataIndex: 'name', ellipsis: true },
+ { title: '规则类型', key: 'type', dataIndex: 'type',render:(v)=><>{obj[v]}>},
+ { title: '简介', key: 'content', dataIndex: 'content'},
+ { title: '编制时间', key: 'tm', dataIndex: 'tm'},
+ { title: '附件数', key: 'fileCount', dataIndex: 'fileCount'},
+ { title: '状态', key: 'status', dataIndex: 'status',render:(v)=><>{sobj[v]}>},
+ { title: '创建人', key: 'createUser', dataIndex: 'createUser'},
+ { title: '最后更新时间', key: 'updateTm', dataIndex: 'updateTm'},
+ {
+ title: '操作', key: 'operation', fixed: 'right', align: 'center',
+ render: (value, row, index) => (
+ () => command(cmd)(row)}
+ />
+ )
+ },
+ ];
+
+ 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.zsk.ywgz.del + `/${params.id}`);
+ }
+ }
+
+
+ const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.zsk.ywgz.page).find);
+
+
+ useEffect(() => {
+ const params = {
+ search: {
+ ...searchVal,
+ }
+ };
+ search(params)
+ }, [searchVal])
+
+
+ return (
+ <>
+
+ >
+ );
+}
+
+export default Page;
diff --git a/src/views/sz/ywgz/index.less b/src/views/sz/ywgz/index.less
new file mode 100644
index 0000000..2989893
--- /dev/null
+++ b/src/views/sz/ywgz/index.less
@@ -0,0 +1,8 @@
+.ModalFormClass{
+
+ .ant-form-item-label{
+ label{
+ color: #fff;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/sz/ywgz/toolbar.js b/src/views/sz/ywgz/toolbar.js
new file mode 100644
index 0000000..2befb3d
--- /dev/null
+++ b/src/views/sz/ywgz/toolbar.js
@@ -0,0 +1,67 @@
+import { Form, Input, Button, DatePicker, Select } from 'antd';
+
+import moment from 'moment';
+const { RangePicker } = DatePicker;
+const ToolBar = ({ setSearchVal, onSave }) => {
+ const [form] = Form.useForm();
+ const onFinish = (values) => {
+ const {releaseDate,...ret} = values
+ if(releaseDate){
+ ret.stm = moment(values.releaseDate[0]).format('YYYY-MM-DD')
+ ret.etm = moment(values.releaseDate[1]).format('YYYY-MM-DD')
+ }
+ setSearchVal(ret);
+ }
+
+ const opntios = [
+ {value:1,label:'水资源调度'},
+ {value:2,label:'防洪调度'},
+ {value:3,label:'工程安全'},
+ {value:4,label:'应急抢险'},
+ {value:5,label:'其他'},
+ ]
+
+ const opntios1 = [
+ {value:0,label:'已废弃'},
+ {value:1,label:'生效中'},
+ ]
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ (onSave) ?
+
+
+
+ : null
+ }
+
+
+
+ >
+ );
+}
+
+export default ToolBar;
\ No newline at end of file