From d13a76e316aef5b2e9cd5b86676db31f8d57bba4 Mon Sep 17 00:00:00 2001 From: lishenfeng Date: Tue, 1 Jul 2025 17:12:27 +0800 Subject: [PATCH] =?UTF-8?q?feat():=20=E5=A2=9E=E5=8A=A0=E6=B0=B4=E5=8E=82?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/demodata/department.json | 6 +-- public/demodata/dir.json | 26 +++++------ public/demodata/lsy.json | 2 +- public/demodata/zf.json | 12 ++--- src/models/auth/_.ts | 5 +- src/views/AppRouters.tsx | 3 +- src/views/Base/Personel/DataTable.tsx | 29 ++++++------ src/views/Base/WaterPro/DataTable.tsx | 59 +++++++++++++++++++++++ src/views/Base/WaterPro/SearchBar.tsx | 53 +++++++++++++++++++++ src/views/Base/WaterPro/_.ts | 67 +++++++++++++++++++++++++++ src/views/Base/WaterPro/index.tsx | 19 ++++++++ src/views/Eng/Res/DataTable.tsx | 8 ++-- 12 files changed, 245 insertions(+), 44 deletions(-) create mode 100644 src/views/Base/WaterPro/DataTable.tsx create mode 100644 src/views/Base/WaterPro/SearchBar.tsx create mode 100644 src/views/Base/WaterPro/_.ts create mode 100644 src/views/Base/WaterPro/index.tsx diff --git a/public/demodata/department.json b/public/demodata/department.json index 82348df..6b6300d 100644 --- a/public/demodata/department.json +++ b/public/demodata/department.json @@ -1,8 +1,8 @@ { "records":[ - {"序号":"1","部门编码":"A01","部门名称":"办公室","上级部门":"","排序号":"1","备注":"","创建日期":"2023-08-30"}, - {"序号":"2","部门编码":"A02","部门名称":"工程科","上级部门":"","排序号":"2","备注":"","创建日期":"2023-08-30"}, - {"序号":"3","部门编码":"A03","部门名称":"养护科","上级部门":"","排序号":"3","备注":"","创建日期":"2023-08-29"} + {"序号":"1","部门编码":"A01","部门名称":"办公室","上级部门":"","排序号":"1","备注":"","创建日期":"2025-05-30"}, + {"序号":"2","部门编码":"A02","部门名称":"工程科","上级部门":"","排序号":"2","备注":"","创建日期":"2025-05-30"}, + {"序号":"3","部门编码":"A03","部门名称":"养护科","上级部门":"","排序号":"3","备注":"","创建日期":"2025-05-30"} ], "total": 10, "pages": 1 diff --git a/public/demodata/dir.json b/public/demodata/dir.json index a6cb0ed..10f755f 100644 --- a/public/demodata/dir.json +++ b/public/demodata/dir.json @@ -8,7 +8,7 @@ "serviceAddr": "172.20.1.101", "port": "18300", "route": "", - "registerTime": "2023-05-24 12:00:30", + "registerTime": "2025-05-24 12:00:30", "provider": "江苏德高物联技术有限公司", "stNum": 1, "contacts": "", @@ -16,7 +16,7 @@ "target": "DB_ZHSK.ST_FLOW_R", "enable": "1", "服务状态": "1", - "maxTime": "2023-10-09 15:00:00", + "maxTime": "2025-10-09 15:00:00", "countVo": { "allCount": 6495, "todayCount": 16, @@ -33,7 +33,7 @@ "serviceAddr": "121.40.63.15", "port": "7889", "route": "", - "registerTime": "2023-05-24 12:00:29", + "registerTime": "2025-05-24 12:00:29", "provider": "江苏德高物联技术有限公司", "stNum": 1, "contacts": "", @@ -41,7 +41,7 @@ "target": "DB_ZHSK.ST_FLOW_R", "enable": "1", "服务状态": "1", - "maxTime": "2023-10-09 15:00:00", + "maxTime": "2025-10-09 15:00:00", "countVo": { "allCount": 6495, "todayCount": 16, @@ -58,7 +58,7 @@ "serviceAddr": "10.42.160.53", "port": "9527", "route": "", - "registerTime": "2023-05-24 12:00:28", + "registerTime": "2025-05-24 12:00:28", "provider": "襄阳气象局", "stNum": 1, "contacts": "", @@ -84,7 +84,7 @@ "serviceAddr": "58.19.239.227", "port": "10088", "route": "", - "registerTime": "2023-05-24 12:00:26", + "registerTime": "2025-05-24 12:00:26", "provider": "襄阳气象局", "stNum": 176, "contacts": "", @@ -92,7 +92,7 @@ "target": "DB_ZHSK.WEATHER_XY_SK", "enable": "1", "服务状态": "1", - "maxTime": "2023-10-09 15:30:00", + "maxTime": "2025-10-09 15:30:00", "countVo": { "allCount": 3719924, "todayCount": 16389, @@ -109,7 +109,7 @@ "serviceAddr": "218.200.85.79", "port": "4505", "route": "", - "registerTime": "2023-05-24 12:00:00", + "registerTime": "2025-05-24 12:00:00", "provider": "力合科技(湖南)股份有限公司", "stNum": 1, "contacts": "李晶晶", @@ -117,7 +117,7 @@ "target": "DB_ZHSK.HYD_RI_WQAMD_W", "enable": "1", "服务状态": "1", - "maxTime": "2023-10-09 15:00:00", + "maxTime": "2025-10-09 15:00:00", "countVo": { "allCount": 18271, "todayCount": 15, @@ -134,7 +134,7 @@ "serviceAddr": "47.112.66.254", "port": "80", "route": "", - "registerTime": "2023-05-24 12:00:00", + "registerTime": "2025-05-24 12:00:00", "provider": "鲧石", "stNum": 215, "contacts": "曾杰", @@ -142,7 +142,7 @@ "target": "DB_ZHSK.REL_ST_STTP,DB_ZHSK.ST_RIVER_R", "enable": "1", "服务状态": "1", - "maxTime": "2023-10-09 15:00:00", + "maxTime": "2025-10-09 15:00:00", "countVo": { "allCount": 3866780, "todayCount": 1504, @@ -159,7 +159,7 @@ "serviceAddr": "10.42.160.200", "port": "1433", "route": "", - "registerTime": "2023-05-24 12:00:00", + "registerTime": "2025-05-24 12:00:00", "provider": "鲧石", "stNum": 372, "contacts": "曾杰", @@ -167,7 +167,7 @@ "target": "DB_ZHSK.REL_ST_STTP,DB_ZHSK.ST_RSVR_R", "enable": "1", "服务状态": "1", - "maxTime": "2023-10-09 16:00:00", + "maxTime": "2025-10-09 16:00:00", "countVo": { "allCount": 8813744, "todayCount": 10226, diff --git a/public/demodata/lsy.json b/public/demodata/lsy.json index fd186be..56d0115 100644 --- a/public/demodata/lsy.json +++ b/public/demodata/lsy.json @@ -1,5 +1,5 @@ { - "records": [{"序号":"1","量水设施代码":"HP0024208020000063","量水设施名称":"量水堰1#","设施类别":"量水槽","经度":"114. 989405","纬度":"31. 36019","所在位置":"溢洪道下游","喉道尺寸(m*m)":"1.5*1.2","设计流量(m³/s)":"2","实达流量(m³/s)":"2","创建日期":"2023-08-30"}], + "records": [{"序号":"1","量水设施代码":"HP0024208020000063","量水设施名称":"量水堰1#","设施类别":"量水槽","经度":"114. 989405","纬度":"31. 36019","所在位置":"溢洪道下游","喉道尺寸(m*m)":"1.5*1.2","设计流量(m³/s)":"2","实达流量(m³/s)":"2","创建日期":"2025-05-30"}], "total": 10, "pages": 1 } \ No newline at end of file diff --git a/public/demodata/zf.json b/public/demodata/zf.json index ef896c4..d126e4c 100644 --- a/public/demodata/zf.json +++ b/public/demodata/zf.json @@ -1,11 +1,11 @@ { "records": [ - {"闸阀代码":"HP0024208020000063","闸阀名称":"电动蝶阀1#","产品名称":"暗杆闸阀","经度":"114.989405","纬度":"31.36019","所在位置":"取水塔1楼","型号":"Z45H-PN10","规格":"DN40","结构长度":"GB/T12221-2005","创建日期":"2023-08-30"}, - {"闸阀代码":"HP0024208020000078","闸阀名称":"电动蝶阀2#","产品名称":"暗杆闸阀","经度":"114.078096","纬度":"30.953825","所在位置":"取水塔2楼","型号":"Z45H-PN10","规格":"DN60","结构长度":"GB/T12221-2005","创建日期":"2023-08-30"}, - {"闸阀代码":"HP0024208020000082","闸阀名称":"电动蝶阀3#","产品名称":"暗杆闸阀","经度":"114.118889","纬度":"30.974167","所在位置":"取水塔3楼","型号":"Z45H-PN10","规格":"DN80","结构长度":"GB/T12221-2005","创建日期":"2023-08-29"}, - {"闸阀代码":"HP0024208020000085","闸阀名称":"电动活塞阀1#","产品名称":"电磁阀","经度":"114.989405","纬度":"31.36019","所在位置":"取水塔1楼","型号":"Z45H-PN10","规格":"DN40","结构长度":"GB/T12221-2005","创建日期":"2023-08-30"}, - {"闸阀代码":"HP0024208020000087","闸阀名称":"电动活塞阀2#","产品名称":"电磁阀","经度":"114.078096","纬度":"30.953825","所在位置":"取水塔2楼","型号":"Z45H-PN10","规格":"DN60","结构长度":"GB/T12221-2005","创建日期":"2023-08-30"}, - {"闸阀代码":"HP0024208020000089","闸阀名称":"电动活塞阀3#","产品名称":"电磁阀","经度":"114.118889","纬度":"30.974167","所在位置":"取水塔3楼","型号":"Z45H-PN10","规格":"DN80","结构长度":"GB/T12221-2005","创建日期":"2023-08-29"} + {"闸阀代码":"HP0024208020000063","闸阀名称":"电动蝶阀1#","产品名称":"暗杆闸阀","经度":"114.989405","纬度":"31.36019","所在位置":"取水塔1楼","型号":"Z45H-PN10","规格":"DN40","结构长度":"GB/T12221-2005","创建日期":"2025-05-30"}, + {"闸阀代码":"HP0024208020000078","闸阀名称":"电动蝶阀2#","产品名称":"暗杆闸阀","经度":"114.078096","纬度":"30.953825","所在位置":"取水塔2楼","型号":"Z45H-PN10","规格":"DN60","结构长度":"GB/T12221-2005","创建日期":"2025-05-30"}, + {"闸阀代码":"HP0024208020000082","闸阀名称":"电动蝶阀3#","产品名称":"暗杆闸阀","经度":"114.118889","纬度":"30.974167","所在位置":"取水塔3楼","型号":"Z45H-PN10","规格":"DN80","结构长度":"GB/T12221-2005","创建日期":"2025-05-30"}, + {"闸阀代码":"HP0024208020000085","闸阀名称":"电动活塞阀1#","产品名称":"电磁阀","经度":"114.989405","纬度":"31.36019","所在位置":"取水塔1楼","型号":"Z45H-PN10","规格":"DN40","结构长度":"GB/T12221-2005","创建日期":"2025-05-30"}, + {"闸阀代码":"HP0024208020000087","闸阀名称":"电动活塞阀2#","产品名称":"电磁阀","经度":"114.078096","纬度":"30.953825","所在位置":"取水塔2楼","型号":"Z45H-PN10","规格":"DN60","结构长度":"GB/T12221-2005","创建日期":"2025-05-30"}, + {"闸阀代码":"HP0024208020000089","闸阀名称":"电动活塞阀3#","产品名称":"电磁阀","经度":"114.118889","纬度":"30.974167","所在位置":"取水塔3楼","型号":"Z45H-PN10","规格":"DN80","结构长度":"GB/T12221-2005","创建日期":"2025-05-30"} ], "total": 10, "pages": 1 diff --git a/src/models/auth/_.ts b/src/models/auth/_.ts index 2bc48f1..52b367e 100644 --- a/src/models/auth/_.ts +++ b/src/models/auth/_.ts @@ -77,7 +77,7 @@ export function loadMenu(user: LoginUser): MenuItem[] { id: id(), title: '资源目录', redirect: '/mgr/res', icon: 'xtgl.png', children: [ { id: id(), title: '工程及水系', redirect: '/mgr/res', children: [ - { id: id(), title: '水库', path: '/mgr/res' }, + { id: id(), title: '水源地', path: '/mgr/res' }, { id: id(), title: '河流', path: '/mgr/rivl' }, { id: id(), title: '大坝', path: '/mgr/dam' }, // { id: id(), title: '水电站', path: '/mgr/elst' }, @@ -92,8 +92,9 @@ export function loadMenu(user: LoginUser): MenuItem[] { //{ id: id(), title: '水位流量曲线', path: '/mgr/rzhis' }, { id: id(), title: '管理单位', path: '/mgr/unit' }, { id: id(), title: '行政区划', path: '/mgr/ad' }, - { id: id(), title: '人员管理', path: '/mgr/personel' }, + { id: id(), title: '用水户信息', path: '/mgr/personel' }, { id: id(), title: '部门管理', path: '/mgr/department' }, + { id: id(), title: '水厂信息', path: '/mgr/waterPro' }, ], } ], diff --git a/src/views/AppRouters.tsx b/src/views/AppRouters.tsx index e38fcb6..9aa1fe6 100644 --- a/src/views/AppRouters.tsx +++ b/src/views/AppRouters.tsx @@ -23,7 +23,7 @@ import DirPage from './Serv/Dir'; import WatchPage from './Serv/Watch'; import MgrPage from './Serv/Mgr'; - +import WaterPage from './Base/WaterPro' const AppRouters: React.FC = () => { const dispatch = useDispatch(); @@ -52,6 +52,7 @@ const AppRouters: React.FC = () => { { path: 'unit', element: }, { path: 'ad', element: }, { path: 'personel', element: }, + { path: 'waterPro', element: }, { path: 'department', element: }, { path: 'dir', element: }, { path: 'servreg', element: }, diff --git a/src/views/Base/Personel/DataTable.tsx b/src/views/Base/Personel/DataTable.tsx index 621bfe7..f500161 100644 --- a/src/views/Base/Personel/DataTable.tsx +++ b/src/views/Base/Personel/DataTable.tsx @@ -20,20 +20,21 @@ const DataTable: React.FC<{ { title: '用户帐号', key: '用户帐号', dataIndex: '用户帐号', width: 120, align: 'center' }, { title: '用户姓名', key: '用户姓名', dataIndex: '用户姓名', width: 120, align: 'center' }, { title: '手机号码', key: '手机号码', dataIndex: '手机号码', width: 120, align: 'center' }, - { title: '部门', key: '部门', dataIndex: '部门', width: 120, align: 'center' }, - { title: '职务', key: '职务', dataIndex: '职务', width: 120, align: 'center' }, - { title: '状态', key: '状态', dataIndex: '状态', width: 120, align: 'center' }, - { - title: '操作', key: 'op', align: 'center', width: 200, render: rec => - (}> - - - - - - - ) - } + { title: '行政区划', key: '行政区划', dataIndex: '行政区划', width: 120, align: 'center' }, + { title: '用水户类型', key: '用水户类型', dataIndex: '用水户类型', width: 120, align: 'center' }, + { title: '人口数量', key: '人口数量', dataIndex: '人口数量', width: 120, align: 'center' }, + { title: '水价方案', key: '水价方案', dataIndex: '水价方案', width: 120, align: 'center' }, + // { + // title: '操作', key: 'op', align: 'center', width: 200, render: rec => + // (}> + // + // + // + // + // + // + // ) + // } ], []); return ( diff --git a/src/views/Base/WaterPro/DataTable.tsx b/src/views/Base/WaterPro/DataTable.tsx new file mode 100644 index 0000000..9484b32 --- /dev/null +++ b/src/views/Base/WaterPro/DataTable.tsx @@ -0,0 +1,59 @@ +import { Divider, Space, Table } from 'antd'; +import { ColumnsType } from 'antd/lib/table'; +import moment from 'moment'; +import React, { useMemo } from 'react'; +import OpButton, { DelOpButton, EditOpButton } from '../../../components/crud/OpButton'; +import { SysUserItem } from '../../../models/_/defs'; +import { IContextProp } from './_'; + + + + + +const DataTable: React.FC<{ + ctx: IContextProp +}> = ({ ctx }) => { + + const { pager, crud } = ctx; + const columns = useMemo>(() => [ + { title: '序号', key: 'id', align: 'center', width: 80, render: (_1: any, _2: any, index: number) => ctx.pager.noRender(index) }, + { title: '水厂名称', key: '水厂名称', dataIndex: '水厂名称', width: 120, align: 'center' }, + { title: '经营性质', key: '经营性质', dataIndex: '经营性质', width: 120, align: 'center' }, + { title: '行政区划', key: '行政区划', dataIndex: '行政区划', width: 120, align: 'center' }, + { title: '地理位置', key: '地理位置', dataIndex: '地理位置', width: 120, align: 'center' }, + { title: '许可证号', key: '许可证号', dataIndex: '许可证号', width: 120, align: 'center' }, + { title: '净水工艺', key: '净水工艺', dataIndex: '净水工艺', width: 120, align: 'center' }, + { title: '水质级别', key: '水质级别', dataIndex: '水质级别', width: 120, align: 'center' }, + { title: '生产能力', key: '生产能力', dataIndex: '生产能力', width: 120, align: 'center' }, + { title: '取用水源', key: '取用水源', dataIndex: '取用水源', width: 120, align: 'center' }, + { title: '供水对象', key: '供水对象', dataIndex: '供水对象', width: 120, align: 'center' }, + { title: '供水人口', key: '供水人口', dataIndex: '供水人口', width: 120, align: 'center' }, + { title: '负责人', key: '负责人', dataIndex: '负责人', width: 120, align: 'center' }, + { title: '联系方式', key: '联系方式', dataIndex: '联系方式', width: 120, align: 'center' }, + // { + // title: '操作', key: 'op', align: 'center', width: 200, render: rec => + // (}> + // + // + // + // + // + // + // ) + // } + ], []); + + return ( + <> + row.用户账号} + {...pager.tableProps} + dataSource={[]} + + /> + + ) +} + +export default DataTable \ No newline at end of file diff --git a/src/views/Base/WaterPro/SearchBar.tsx b/src/views/Base/WaterPro/SearchBar.tsx new file mode 100644 index 0000000..493459e --- /dev/null +++ b/src/views/Base/WaterPro/SearchBar.tsx @@ -0,0 +1,53 @@ +import { SearchOutlined } from '@ant-design/icons' +import { Button, Col, Form, Input, Row, Space } from 'antd' +import React from 'react' +import { IContextProp } from './_' + +const SearchBar: React.FC<{ + ctx: IContextProp +}> = ({ ctx }) => { + const { pager } = ctx; + + const doSearch = (data: any) => { + pager.search({ + search: { + username: data.name, + } + }) + } + + return ( + + + + + + + + {/* + + + + + + + + + */} + + + + + {/* */} + + + + + ) +} + +export default SearchBar \ No newline at end of file diff --git a/src/views/Base/WaterPro/_.ts b/src/views/Base/WaterPro/_.ts new file mode 100644 index 0000000..05e09c6 --- /dev/null +++ b/src/views/Base/WaterPro/_.ts @@ -0,0 +1,67 @@ +import { message } from "antd"; +import useCrud, { BasicCrudType, CrudContext } from "../../../components/crud/useCrud"; +import usePageTable, { PageTableContext } from "../../../components/crud/usePageTable"; +import { SysUserItem } from "../../../models/_/defs"; +import { httpGet, httpPost, paginate, paginateDemo } from "../../../utils/request"; + + +type CRUD_TYPER = BasicCrudType; + + +export type IContextProp = { + pager: PageTableContext; + crud: CrudContext; + saveOrUpdate: (val: FormPropType) => Promise; + del: (val: any) => Promise; +} + + +export type FormPropType = { +} + + +export function usePageContext(): IContextProp { + const crud = useCrud(); + const pager = usePageTable((opt: any) => paginateDemo('sysUser.json', opt)); + + + const saveOrUpdate = async (val: FormPropType): Promise => { + + if (crud.loading || (crud.mode !== 'add' && crud.mode !== 'edit')) { + return; + } + + crud.setLoading(true); + + /* + const res: any = await httpPost(apiPaths.whitelist[crud.mode], val); + if (res) { + message.success('操作成功'); + pager.refresh(); + crud.goto(null, null); + } + */ + + crud.setLoading(false); + } + + const del = async (val: any) => { + + crud.setLoading(true); + /* + const res: any = await httpGet(`${apiPaths.whitelist.del}/${val?.userId}`); + if (res) { + message.success('操作成功'); + pager.refresh(); + } + */ + crud.setLoading(false); + } + + return { + crud, + pager, + saveOrUpdate, + del + } +} diff --git a/src/views/Base/WaterPro/index.tsx b/src/views/Base/WaterPro/index.tsx new file mode 100644 index 0000000..499a640 --- /dev/null +++ b/src/views/Base/WaterPro/index.tsx @@ -0,0 +1,19 @@ +import { Modal } from 'antd' +import React from 'react' +import DataTable from './DataTable' +import SearchBar from './SearchBar' +import { usePageContext } from './_' + +const SysUserPage: React.FC = () => { + + const ctx = usePageContext(); + + return ( +
+ {/* */} + +
+ ) +} + +export default SysUserPage \ No newline at end of file diff --git a/src/views/Eng/Res/DataTable.tsx b/src/views/Eng/Res/DataTable.tsx index 70f0167..9f940ff 100644 --- a/src/views/Eng/Res/DataTable.tsx +++ b/src/views/Eng/Res/DataTable.tsx @@ -17,13 +17,13 @@ const DataTable: React.FC<{ const { pager, crud } = ctx; const columns = useMemo>(() => [ { title: '序号', key: 'id', align: 'center', width: 80, render: (_1: any, _2: any, index: number) => ctx.pager.noRender(index) }, - { title: '水库代码', key: '水库代码', dataIndex: '水库代码', width: 120, align: 'center' }, - { title: '水库名称', key: '水库名称', dataIndex: '水库名称', width: 120, align: 'center' }, - { title: '测站编码', key: '测站编码', dataIndex: '测站编码', width: 120, align: 'center' }, + // { title: '水库代码', key: '水库代码', dataIndex: '水库代码', width: 120, align: 'center' }, + // { title: '水库名称', key: '水库名称', dataIndex: '水库名称', width: 120, align: 'center' }, + // { title: '测站编码', key: '测站编码', dataIndex: '测站编码', width: 120, align: 'center' }, { title: '行政区划', key: '行政区划', dataIndex: '行政区划', width: 120, align: 'center' }, { title: '经度', key: '经度', dataIndex: '经度', width: 120, align: 'center' }, { title: '纬度', key: '纬度', dataIndex: '纬度', width: 120, align: 'center' }, - { title: '水库规模', key: '水库规模', dataIndex: '水库规模', width: 120, align: 'center' }, + // { title: '水库规模', key: '水库规模', dataIndex: '水库规模', width: 120, align: 'center' }, { title: '集雨面积(km²)', key: '集雨面积(km²)', dataIndex: '集雨面积(km²)', width: 120, align: 'center' }, { title: '总库容(万m³)', key: '总库容(万m³)', dataIndex: '总库容(万m³)', width: 120, align: 'center' }, { title: '创建日期', key: '创建日期', dataIndex: '创建日期', width: 120, align: 'center' },