From 7a17832dbe6e8aa45ef0f2cd5677f38e35063951 Mon Sep 17 00:00:00 2001 From: lishenfeng Date: Wed, 18 Dec 2024 17:53:30 +0800 Subject: [PATCH] =?UTF-8?q?feat():=20=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E7=BB=B4=E6=8A=A4=E9=A1=B9=E7=9B=AE=E9=AA=8C?= =?UTF-8?q?=E6=94=B6=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/images/touxiang.png | Bin 0 -> 36144 bytes src/components/Form/DeptTreeSelect_xyt.js | 54 ++ src/components/crud/BasicCrudModal.js | 52 + src/components/crud/CrudOpRender.js | 9 +- src/components/crud/_.js | 36 +- src/components/fileUpload/index.js | 4 +- src/index.tsx | 4 +- src/models/auth/_.ts | 165 ++-- src/service/apiurl.js | 73 +- src/utils/request.js | 90 ++ src/views/AppRouters.tsx | 13 +- .../InformationSearch/BasicSituation/index.js | 910 +++++++++--------- .../InformationSearch/OperateLog/index.js | 2 +- .../InformationSearch/StaticTable/index.js | 2 +- src/views/Sbwh/Cgtzgl/toolbar.js | 2 +- src/views/Sbwh/Ssgcjl/form.js | 6 +- src/views/SystemMangant/UserInfo/index.js | 2 +- src/views/SystemMangant/UserInfo1/form.js | 277 ++++++ src/views/SystemMangant/UserInfo1/index.js | 107 ++ src/views/SystemMangant/UserInfo1/toolbar.js | 27 + src/views/SystemMangant/dept/form.js | 107 ++ src/views/SystemMangant/dept/index.js | 153 +++ src/views/SystemMangant/dept/toolbar.js | 36 + src/views/SystemMangant/menuM/form.js | 178 ++++ src/views/SystemMangant/menuM/index.js | 170 ++++ src/views/SystemMangant/menuM/toolbar.js | 25 + src/views/SystemMangant/role/form.js | 98 ++ src/views/SystemMangant/role/index.js | 109 +++ .../SystemMangant/role/menuTree/index.js | 112 +++ .../SystemMangant/role/menuTree/index.less | 11 + src/views/SystemMangant/role/person/form.js | 373 +++++++ src/views/SystemMangant/role/person/index.js | 97 ++ .../SystemMangant/role/person/index.less | 9 + .../SystemMangant/role/person/toolbar.js | 49 + src/views/SystemMangant/role/rolePage/form.js | 113 +++ .../SystemMangant/role/rolePage/index.js | 91 ++ .../SystemMangant/role/rolePage/toolbar.js | 46 + src/views/SystemMangant/role/toolbar.js | 64 ++ .../PoliceMangant/PoliceRuleConfig/form.js | 22 +- .../PoliceMangant/PoliceRuleConfig/index.js | 30 +- .../PoliceMangant/PoliceRuleConfig/toolbar.js | 18 +- 41 files changed, 3170 insertions(+), 576 deletions(-) create mode 100644 public/assets/images/touxiang.png create mode 100644 src/components/Form/DeptTreeSelect_xyt.js create mode 100644 src/views/SystemMangant/UserInfo1/form.js create mode 100644 src/views/SystemMangant/UserInfo1/index.js create mode 100644 src/views/SystemMangant/UserInfo1/toolbar.js create mode 100644 src/views/SystemMangant/dept/form.js create mode 100644 src/views/SystemMangant/dept/index.js create mode 100644 src/views/SystemMangant/dept/toolbar.js create mode 100644 src/views/SystemMangant/menuM/form.js create mode 100644 src/views/SystemMangant/menuM/index.js create mode 100644 src/views/SystemMangant/menuM/toolbar.js create mode 100644 src/views/SystemMangant/role/form.js create mode 100644 src/views/SystemMangant/role/index.js create mode 100644 src/views/SystemMangant/role/menuTree/index.js create mode 100644 src/views/SystemMangant/role/menuTree/index.less create mode 100644 src/views/SystemMangant/role/person/form.js create mode 100644 src/views/SystemMangant/role/person/index.js create mode 100644 src/views/SystemMangant/role/person/index.less create mode 100644 src/views/SystemMangant/role/person/toolbar.js create mode 100644 src/views/SystemMangant/role/rolePage/form.js create mode 100644 src/views/SystemMangant/role/rolePage/index.js create mode 100644 src/views/SystemMangant/role/rolePage/toolbar.js create mode 100644 src/views/SystemMangant/role/toolbar.js diff --git a/public/assets/images/touxiang.png b/public/assets/images/touxiang.png new file mode 100644 index 0000000000000000000000000000000000000000..088f2605920123a52adf13e07818d363546fbad7 GIT binary patch literal 36144 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 { + const refModal = useRef(); + const [treeData, setTreeData] = useState([]); + + + + useEffect(()=>{ + getTree() + },[]) + + const getTree = async()=>{ + const {code, data} = await xyt_httpget2(apiurl.systemManagement.dept.tree) + if(code!==200){ + message.error('请求失败') + return + } + handelTreeData(data) + setTreeData(data) + } + + + const handelTreeData = (data) => { + if (data.length > 0) { + data.forEach(item => { + item.title = item.label; + item.key = item.id; + item.value = item.id; + if (item.children && item.children.length > 0) { + handelTreeData(item.children); + } + }); + } + } + + + return ( + + ); +} + +export default TreePage; diff --git a/src/components/crud/BasicCrudModal.js b/src/components/crud/BasicCrudModal.js index 759645a..26c2755 100644 --- a/src/components/crud/BasicCrudModal.js +++ b/src/components/crud/BasicCrudModal.js @@ -70,6 +70,33 @@ showUpdate(record) { if (this.props.onCrudSuccess) { this.props.onCrudSuccess(); } + + if (this.props.extraFun) { + this.props.extraFun(); + } + } else if (result?.code === 400) { + message.error(result?.description); + + } + else { + message.error(result?.msg||'修改失败'); + } + }) + } + + onUerEdit = (path, values) => { + createCrudService(path).userEdit(values).then((result) => { + if (result?.code === 200) { + message.success('修改成功'); + this.setState({ open: false }); + + if (this.props.onCrudSuccess) { + this.props.onCrudSuccess(); + } + + if (this.props.extraFun) { + this.props.extraFun(); + } } else if (result?.code === 400) { message.error(result?.description); @@ -107,6 +134,9 @@ showUpdate(record) { if (this.props.onCrudSuccess) { this.props.onCrudSuccess(); } + if (this.props.extraFun) { + this.props.extraFun(); + } } else if (result?.code === 400) { message.error(result?.description||'修改失败'); } @@ -124,6 +154,7 @@ showUpdate(record) { if (this.props.onCrudSuccess) { this.props.onCrudSuccess(); } + } else { message.error(result?.msg||'删除失败'); } @@ -138,6 +169,26 @@ showUpdate(record) { if (this.props.onCrudSuccess) { this.props.onCrudSuccess(); } + if (this.props.extraFun) { + this.props.extraFun(); + } + } else { + message.error(result?.msg||'删除失败'); + } + }) + } + + onUerDeleteGet = (path, values) => { + createCrudService(path).userDel(values).then((result) => { + if (result?.code === 200) { + message.success('删除成功'); + this.setState({ open: false }); + if (this.props.onCrudSuccess) { + this.props.onCrudSuccess(); + } + if (this.props.extraFun) { + this.props.extraFun(); + } } else { message.error(result?.msg||'删除失败'); } @@ -215,6 +266,7 @@ showUpdate(record) { onCrudSuccess={this.props.onCrudSuccess} record={record} onEdit={this.onEdit} + onUerEdit={this.onUerEdit} onSave={this.onSave} onSimilarSave={this.onSimilarSave} formProps={formProps} diff --git a/src/components/crud/CrudOpRender.js b/src/components/crud/CrudOpRender.js index 2099f23..8409e9a 100644 --- a/src/components/crud/CrudOpRender.js +++ b/src/components/crud/CrudOpRender.js @@ -38,9 +38,16 @@ export function CrudOpRender_icon({ command, edit, del, restore, add, view }) { ) } -export function CrudOpRender_text({ command,modify,edit,del,view}) { +export function CrudOpRender_text({ command,modify,edit,del,view,status}) { return (
+ { + status ? ( + + + + ) : null + } { edit ? ( diff --git a/src/components/crud/_.js b/src/components/crud/_.js index 1cf0298..4730e9f 100644 --- a/src/components/crud/_.js +++ b/src/components/crud/_.js @@ -1,4 +1,4 @@ -import {httppost2, download, httpPostFile, httpget, httpget2,httpget6} from "../../utils/request"; +import {httppost2, download, httpPostFile, httpget, httpget2,httpget6,xyt_httpget2,xyt_httpput,xyt_httpdelete} from "../../utils/request"; import apiurl from "../../service/apiurl"; import {config} from "../../config"; @@ -123,6 +123,22 @@ export async function paginate3(url, params = {}) { return {list: [], totalRow: 0}; } +export async function xyt_paginate_noCode(url, params = {}) { + const {pageNumber, pageSize, ...ret} = params; + const pam = { + pageNum:pageNumber, + pageSize:pageSize, + ...ret + } + const result = await xyt_httpget2(url, pam); + if (result && result.rows) { + return { + list: result.rows.map((m, index) => ({inx: (pageNumber - 1) * pageSize + index + 1, ...m})), + totalRow: result.total + }; + } + return {list: [], totalRow: 0}; +} export function createCrudService(urlSet) { const find = async (params) => { @@ -132,6 +148,9 @@ export function createCrudService(urlSet) { const find_noCode = async (params) => { return paginate_noCode(urlSet, params); } + const xyt_find_noCode = async (params) => { + return xyt_paginate_noCode(urlSet, params); + } const find_nopage = async (params) => { return paginate_nopage(urlSet, params); @@ -157,6 +176,11 @@ export function createCrudService(urlSet) { return resData; } + const userEdit = async (params) => { + const resData = await xyt_httpput(urlSet, params) || {}; + return resData; + } + const edit1 = async (params) => { const resData = await httppost2(urlSet, params) || {}; return resData; @@ -176,6 +200,11 @@ export function createCrudService(urlSet) { return resData; } + const userDel = async (params) => { + const resData = await xyt_httpdelete(urlSet, params) || {}; + return resData; + } + const treeList = async (params) => { const {data} = await httppost2(urlSet, params) || {}; return {list: data, totalRow: data?.length}; @@ -239,15 +268,18 @@ export function createCrudService(urlSet) { return { find: find, find_noCode: find_noCode, - find_nopage:find_nopage, + find_nopage: find_nopage, + xyt_find_noCode, find2: find2, find3:find3, list: list, todo: todo, save: save, edit: edit, + userEdit, edit1: edit1, del: del, + userDel, insert:insert, delGet:delGet, upLoad: upLoad, diff --git a/src/components/fileUpload/index.js b/src/components/fileUpload/index.js index 7a95b60..0392c07 100644 --- a/src/components/fileUpload/index.js +++ b/src/components/fileUpload/index.js @@ -152,9 +152,9 @@ export default function FileUpload({ mode, setFileIds, files, downloadUrl, uploa } {file.name}
-
deleteFile(file.response?.data?.fileId)}> + {mode != 'view' &&
deleteFile(file.response?.data?.fileId)}> -
+
} ) diff --git a/src/index.tsx b/src/index.tsx index b66ddc4..c0d866c 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { Suspense } from 'react'; import ReactDOM from 'react-dom/client'; import { ConfigProvider } from 'antd'; import zhCN from 'antd/lib/locale/zh_CN'; @@ -19,7 +19,7 @@ root.render( - + diff --git a/src/models/auth/_.ts b/src/models/auth/_.ts index cb0313d..fd12618 100644 --- a/src/models/auth/_.ts +++ b/src/models/auth/_.ts @@ -175,85 +175,94 @@ export function loadRole(data: any) { export async function loadMenu(): Promise { - // await wait(200) - // const { code, data } = await xyt_httpget2(apiurl.xytlogin.role) - // if( code!== 200){ - // message.error('获取用户权限失败') - // return [] - // } - // //获取到菜单后遍历 - // const id = idgen() - // // handelTreeData(data,id) - // const tree = buildTree(data,0) - // const tree2 = tree?.filter((item:any) =>(item.menuId != "1" && item.menuId != "2" && item.menuId != "3")) - // handelTreeData(tree2,id) - // return tree2 - - + await wait(200) + const { code, data } = await xyt_httpget2(apiurl.login.role) + if( code!== 200){ + message.error('获取用户权限失败') + return [] + } + //获取到菜单后遍历 const id = idgen() - return [ - { id: id(), title: '首页', path: '/home', icon: 'yzt' }, - { - id: id(), title: '监测数据', redirect: '/mgr/jcsj/jcsj', icon: 'sz', - children: [ - { - id: id(), title: '监测数据', path: '/mgr/jcsj/jcsj', - }, - { - id: id(), title: '报警管理', redirect: '/mgr/jcsj/bjgl/bjjl', - children: [ - { id: id(), title: '报警记录', path: '/mgr/jcsj/bjgl/bjjl' }, - { id: id(), title: '报警规则配置', path: '/mgr/jcsj/bjgl/bjgzpz' }, - ] - }, - ] - }, - { id: id(), title: '安全监测', path: '/mgr/aqjc', icon: 'sz' }, - { - id: id(), title: '设备维护', redirect: '/mgr/sbwh/wxyhgl/wxfabz', icon: 'sz', - children: [ - { - id: id(), title: '维修养护管理', redirect: '/mgr/sbwh/wxyhgl/wxfabz', - children: [ - { id: id(), title: '维护方案编制', path: '/mgr/sbwh/wxyhgl/wxfabz' }, - { id: id(), title: '实施过程记录', path: '/mgr/sbwh/wxyhgl/ssgcjl' }, - { id: id(), title: '维护项目验收', path: '/mgr/sbwh/wxyhgl/whxmys' }, - ] - }, - { - id: id(), title: '设备物资管理', redirect: '/mgr/sbwh/sbwzgl/cgtzgl', - children: [ - { id: id(), title: '采购台账管理', path: '/mgr/sbwh/sbwzgl/cgtzgl' }, - { id: id(), title: '库存核算管理', path: '/mgr/sbwh/sbwzgl/kchsgl' }, - { id: id(), title: '备品备件管理', path: '/mgr/sbwh/sbwzgl/bpbjgl' }, - { id: id(), title: '综合分析考核', path: '/mgr/sbwh/sbwzgl/zhfxkh' }, - ] - }, - ] - }, - { - id: id(), title: '工程运行', redirect: '/mgr/gcyx/xxcx/jbqk', icon: 'sz', - children: [ - { - id: id(), title: '信息查询', redirect: '/mgr/gcyx/xxcx/jbqk', - children: [ - { id: id(), title: '基本情况', path: '/mgr/gcyx/xxcx/jbqk' }, - { id: id(), title: '运行情况', path: '/mgr/gcyx/xxcx/yxqk' }, - { id: id(), title: '统计报表', path: '/mgr/gcyx/xxcx/tjbb' }, - { id: id(), title: '操作日志', path: '/mgr/gcyx/xxcx/czrz' }, - ] - }, - ] - }, - { - id: id(), title: '系统管理', redirect: '/mgr/xtgl/yhxx', icon: 'sz', - children: [ - { - id: id(), title: '用户信息', path: '/mgr/xtgl/yhxx', - }, - ] - }, - ] + // handelTreeData(data,id) + const tree = buildTree(data,0) + const tree2 = tree?.filter((item:any) =>(item.menuId != "1" && item.menuId != "2" && item.menuId != "3")) + handelTreeData(tree2,id) + return tree2 + + + // const id = idgen() + // return [ + // { id: id(), title: '首页', path: '/home', icon: 'yzt' }, + // { + // id: id(), title: '监测数据', redirect: '/mgr/jcsj/jcsj', icon: 'sz', + // children: [ + // { + // id: id(), title: '监测数据', path: '/mgr/jcsj/jcsj', + // }, + // { + // id: id(), title: '报警管理', redirect: '/mgr/jcsj/bjgl/bjjl', + // children: [ + // { id: id(), title: '报警记录', path: '/mgr/jcsj/bjgl/bjjl' }, + // { id: id(), title: '报警规则配置', path: '/mgr/jcsj/bjgl/bjgzpz' }, + // ] + // }, + // ] + // }, + // { id: id(), title: '安全监测', path: '/mgr/aqjc', icon: 'sz' }, + // { + // id: id(), title: '设备维护', redirect: '/mgr/sbwh/wxyhgl/wxfabz', icon: 'sz', + // children: [ + // { + // id: id(), title: '维修养护管理', redirect: '/mgr/sbwh/wxyhgl/wxfabz', + // children: [ + // { id: id(), title: '维护方案编制', path: '/mgr/sbwh/wxyhgl/wxfabz' }, + // { id: id(), title: '实施过程记录', path: '/mgr/sbwh/wxyhgl/ssgcjl' }, + // { id: id(), title: '维护项目验收', path: '/mgr/sbwh/wxyhgl/whxmys' }, + // ] + // }, + // { + // id: id(), title: '设备物资管理', redirect: '/mgr/sbwh/sbwzgl/cgtzgl', + // children: [ + // { id: id(), title: '采购台账管理', path: '/mgr/sbwh/sbwzgl/cgtzgl' }, + // { id: id(), title: '库存核算管理', path: '/mgr/sbwh/sbwzgl/kchsgl' }, + // { id: id(), title: '备品备件管理', path: '/mgr/sbwh/sbwzgl/bpbjgl' }, + // { id: id(), title: '综合分析考核', path: '/mgr/sbwh/sbwzgl/zhfxkh' }, + // ] + // }, + // ] + // }, + // { + // id: id(), title: '工程运行', redirect: '/mgr/gcyx/xxcx/jbqk', icon: 'sz', + // children: [ + // { + // id: id(), title: '信息查询', redirect: '/mgr/gcyx/xxcx/jbqk', + // children: [ + // { id: id(), title: '基本情况', path: '/mgr/gcyx/xxcx/jbqk' }, + // { id: id(), title: '运行情况', path: '/mgr/gcyx/xxcx/yxqk' }, + // { id: id(), title: '统计报表', path: '/mgr/gcyx/xxcx/tjbb' }, + // { id: id(), title: '操作日志', path: '/mgr/gcyx/xxcx/czrz' }, + // ] + // }, + // ] + // }, + // { + // id: id(), title: '系统管理', redirect: '/mgr/xtgl/yhxx', icon: 'sz', + // children: [ + // { + // id: id(), title: '用户信息', path: '/mgr/xtgl/yhxx', + // }, + // { + // id: id(), title: '部门管理', path: '/mgr/xtgl/bmgl', + // }, + // { + // id: id(), title: '角色管理', path: '/mgr/xtgl/jsgl', + // }, + // { + // id: id(), title: '菜单管理', path: '/mgr/xtgl/cdgl', + // }, + // ] + // }, + // ] } export function defaultHomePage() { diff --git a/src/service/apiurl.js b/src/service/apiurl.js index f225685..8079702 100644 --- a/src/service/apiurl.js +++ b/src/service/apiurl.js @@ -7,10 +7,10 @@ const apiurl = { setMenu: service_fxdd + '/visitMenuLog/insert', setPassword: service_fxdd + '/user/updateSecretKey', login: { - login: service_xyt + '/login', - info: service_xyt + '/getInfo', - router: service_xyt + '/getRouters', - role: service_xyt + '/system/menu/list' + login: service_ykz + '/login', + info: service_ykz + '/getInfo', + router: service_ykz + '/getRouters', + role: service_ykz + '/system/menu/list' }, home: { @@ -23,6 +23,16 @@ const apiurl = { getDamData: service_xyt + '/gatePore/listByStcd', getVideo: service_xyt + '/gateValveCctvRel/list' }, + jcsj: { + bjgl: { + bjgzpz: { + page: service_ykz + '/warnRule/page', + save: service_ykz +'/warnRule/insert', + edit: service_ykz +'/warnRule/update', + delete:service_ykz +'/warnRule/del' + } + } + }, sbwh: { whfabz: { page: service_ykz + '/maintainPlan/page', @@ -80,9 +90,58 @@ const apiurl = { downloadUrl: service_ykz + '/sparePartsInfo/file/download', export:service_ykz + '/sparePartsInfo/export' } - } - - + }, + gcyx: { + jbqk: { + list: service_ykz + '/projectBasicInfo/list', + edit: service_ykz + '/projectBasicInfo/update', + export:service_ykz + '/projectBasicInfo/export' + } + }, + systemM: { + userM: { + page: service_ykz + "/system/user/list", + save: service_ykz + "/system/user", + list: service_ykz + "/system/role/list", + update: service_ykz + "/system/user/profile/updatePwd", + profile: service_ykz + "/system/user/profile", + avatar:service_ykz + "/common/download/resource" + }, + menuM: { + page: service_ykz + "/system/menu/list", + menu:service_ykz + "/system/menu" + }, + log: { + page: service_ykz + "/monitor/operlog/list" + }, + action: { + todayData: service_fxdd + "/userLoginLog/todayCount", + activeCount: service_fxdd + "/userLoginLog/userCount", + userCount: service_fxdd + "/userLoginLog/visitCount", + hotData:service_fxdd + "/visitMenuLog/count" + } + }, + //系统管理 + systemManagement:{ + //部门管理 + dept:{ + tree: service_ykz + '/system/user/deptTree', + list: service_ykz + '/system/dept/list', + deptSave: service_ykz + '/system/dept', + delete: service_ykz + '/system/dept/', + menuTree: service_ykz + '/system/menu/list' + }, + user:{ + list: service_ykz + '/system/user/list', + save: service_ykz + '/system/user', + }, + role:{ + list: service_ykz + '/system/role/list', + save: service_ykz + '/system/role', + getMenuIds: service_ykz + '/system/menu/roleMenuTreeselect/', + delete: service_ykz + '/system/role/', + } + }, } export default apiurl diff --git a/src/utils/request.js b/src/utils/request.js index 4f5d83e..21a0678 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -182,6 +182,95 @@ export function xyt_httpget2(url, data = {}) { return send(url, options); } + +export function xyt_httpput1(url, data = {}) { + const options = { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'adcd': localStorage.getItem('ADCD6'), + "authorization":"Bearer" + ' ' + localStorage.getItem('access_token') + }, + body: JSON.stringify(data), + }; + + return send(url, options); +} +export function xyt_httpput(url, data = {}) { + const options = { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'adcd': localStorage.getItem('ADCD6'), + "authorization":"Bearer" + ' ' + localStorage.getItem('access_token') + }, + body: JSON.stringify(data), + }; + + return send(url, options); +} + +export function xyt_httpget3(url, data = {}) { + const options = { + method: 'GET', + headers: { + "cookie":'Token=' + localStorage.getItem('access_token'), + "dataScope":"CUSTOM_WATERSHED", + "customWatershedCode":localStorage.getItem('customWatershedCode'), + "SHOW_LOADING": true, + "authorization": "Bearer" + ' ' + localStorage.getItem('access_token'), + "responseType":"arraybuffer" + }, + }; + return sendFile(url, options); +} +export function xyt_httpdelete(url, data = {}) { + const options = { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'adcd': localStorage.getItem('ADCD6'), + "authorization":"Bearer" + ' ' + localStorage.getItem('access_token') + }, + body: JSON.stringify(data), + }; + + return send(url, options); +} + +export function qzc_xyt_httppost(url, data = {}) { + const options = { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + "cookie":'Token=' + localStorage.getItem('access_token'), + "dataScope":"CUSTOM_WATERSHED", + "customWatershedCode":localStorage.getItem('customWatershedCode'), + "SHOW_LOADING": true, + "authorization":"Bearer" + ' ' + localStorage.getItem('access_token') + }, + body: JSON.stringify(data), + }; + + return send(url, options); +} + +export function qzc_xyt_httpput(url, data = {}) { + const options = { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + "cookie":'Token=' + localStorage.getItem('access_token'), + "dataScope":"CUSTOM_WATERSHED", + "customWatershedCode":localStorage.getItem('customWatershedCode'), + "SHOW_LOADING": true, + "authorization":"Bearer" + ' ' + localStorage.getItem('access_token') + }, + body: JSON.stringify(data), + }; + + return send(url, options); +} export function httpget3(url, data = {}) { if (url.indexOf('?') > 0) { @@ -330,6 +419,7 @@ export function httppost2(url, data = {}) { 'Content-Type': 'application/json', 'adcd': localStorage.getItem('ADCD6'), "gs-token": localStorage.getItem('access_token'), + "authorization":"Bearer" + ' ' + localStorage.getItem('access_token') }, body: JSON.stringify(data), }; diff --git a/src/views/AppRouters.tsx b/src/views/AppRouters.tsx index 64d5d44..d8f55ba 100644 --- a/src/views/AppRouters.tsx +++ b/src/views/AppRouters.tsx @@ -4,6 +4,7 @@ import { Navigate, useRoutes } from 'react-router' import DashboardLayout from '../components/DashboardLayout' import { Dispatch } from '../models/store' import LoginPage from './Login/index1' +import HomePage from './Home' import Whfabz from "./Sbwh/Whfabz"; import Ssgcjl from "./Sbwh/Ssgcjl"; import Whxmys from "./Sbwh/Whxmys"; @@ -17,10 +18,11 @@ import OperateLog from "./Gcyx/InformationSearch/OperateLog"; import Jcsj from './WatchData/Jcsj'; import PoliceRecord from './WatchData/PoliceMangant/PoliceRecord' import PoliceRuleConfig from './WatchData/PoliceMangant/PoliceRuleConfig' - -import UserInfo from './SystemMangant/UserInfo' -const HomePage = lazy(() => import('./Home')) - +import UserInfo from './SystemMangant/UserInfo1' +import Dept from './SystemMangant/dept' +import Role from './SystemMangant/role' +import MenuM from './SystemMangant/menuM' +// const HomePage = lazy(() => import('./Home')) const AppRouters: React.FC = () => { const dispatch = useDispatch() @@ -60,6 +62,9 @@ const AppRouters: React.FC = () => { // 系统管理 { path: 'xtgl/yhxx', element: }, + { path: 'xtgl/bmgl', element: }, + { path: 'xtgl/jsgl', element: }, + { path: 'xtgl/cdgl', element: }, ], }, diff --git a/src/views/Gcyx/InformationSearch/BasicSituation/index.js b/src/views/Gcyx/InformationSearch/BasicSituation/index.js index 31d7efe..cb806e4 100644 --- a/src/views/Gcyx/InformationSearch/BasicSituation/index.js +++ b/src/views/Gcyx/InformationSearch/BasicSituation/index.js @@ -1,445 +1,481 @@ -import React,{useState,useEffect} from 'react' +import React, { useState, useEffect } from 'react' import { Row, Col, Form, Input, DatePicker, Button, Upload, message, Modal, Divider } from "antd" import { formItemLayout } from '../../../../components/crud/FormLayoutProps' -import moment from 'moment'; +import { httppost2,httppost5 } from '../../../../utils/request' +import apiurl from '../../../../service/apiurl' +import { exportFile } from '../../../../utils/tools' import './index.less' export default function BasicSituation() { - const [form] = Form.useForm(); - const [skdisabled, setSkDisabled] = useState(true) + const [form] = Form.useForm(); + const [skdisabled, setSkDisabled] = useState(true) + const [basicObj, setBasicObj] = useState({}) + const getBasicInfo = async () => { + try { + const res = await httppost2(apiurl.gcyx.jbqk.list) + if (res.code == 200) { + setBasicObj(res.data) + form.setFieldsValue(res.data) + } + } catch (error) { + console.log(error); + + } + } + const onFinish = async (val) => { + try { + const res = await httppost2(apiurl.gcyx.jbqk.edit, { ...basicObj, ...val }) + if (res.code == 200) { + setSkDisabled(true) + message.success('编辑成功') + } + } catch (error) { + console.log(error); + } + } + // 导出 + const exportExcel = () => { + httppost5(apiurl.gcyx.jbqk.export).then(res => { + exportFile(`基本情况.xlsx`, res.data) + }) + } + useEffect(() => { + getBasicInfo() + }, []) + return ( - -
-
-
- - - -
- { - skdisabled ? : -
- - -
- } - - -
-
- -
-
水文
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
工程规模
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
建设征地与移民安置
- - - - - - - - - - - - - - - - - -
主要建筑物及设备
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
+ +
+
+
+ + + +
+ { + skdisabled ? : +
+ + +
+ } + + +
+
+ +
+
水文
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
工程规模
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
建设征地与移民安置
+ + + + + + + + + + + + + + + + + +
主要建筑物及设备
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- +
+ ) } diff --git a/src/views/Gcyx/InformationSearch/OperateLog/index.js b/src/views/Gcyx/InformationSearch/OperateLog/index.js index e6bdd68..f79162c 100644 --- a/src/views/Gcyx/InformationSearch/OperateLog/index.js +++ b/src/views/Gcyx/InformationSearch/OperateLog/index.js @@ -53,7 +53,7 @@ const Page = () => { return ( <> -
+
{ return ( <> -
+
{ diff --git a/src/views/Sbwh/Ssgcjl/form.js b/src/views/Sbwh/Ssgcjl/form.js index de0e4ae..dd4762e 100644 --- a/src/views/Sbwh/Ssgcjl/form.js +++ b/src/views/Sbwh/Ssgcjl/form.js @@ -33,13 +33,11 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { values.createUserName = userName; values.startTime = values.tm ? moment(values.tm[0]).format("YYYY-MM-DD 00:00:00") : ''; values.endTime = values.tm ? moment(values.tm[1]).format("YYYY-MM-DD 00:00:00") : ''; + values.files = fileIds; if (mode === 'edit') { - values.files = fileIds; - values.id = record.id; - onEdit(apiurl.sbwh.ssgcjl.edit, values) + onEdit(apiurl.sbwh.ssgcjl.edit,{...record,...values}); } if (mode === 'save') { - values.files = fileIds onSave(apiurl.sbwh.ssgcjl.save, values) } } diff --git a/src/views/SystemMangant/UserInfo/index.js b/src/views/SystemMangant/UserInfo/index.js index 0066b01..253f427 100644 --- a/src/views/SystemMangant/UserInfo/index.js +++ b/src/views/SystemMangant/UserInfo/index.js @@ -87,7 +87,7 @@ const Page = () => { return ( <> -
+
{ + if (record.prodDate) { + record.myTm = moment(record.prodDate) + } + const defaultAvatar = `${process.env.PUBLIC_URL}/assets/images/touxiang.png` + const [form] = Form.useForm(); + const [fileList, setFileList] = useState([]) //上传文件列表 + const [fileIds, setFileIds] = useState('') + const [flag, setFlag] = useState(true) + const [loading, setLoading] = useState(false) + const [userParams, setUserParams] = useState({}) + const [roleOptions, setRoleOptions] = useState([]) + const [imageSrc, setImageSrc] = useState(defaultAvatar) + /** + * @description 上传图片 + * @param {string} file 上传的文件 + */ + const fileChange = (info) => { + console.log("info", info); + if (info.file.status === "done") { + setLoading(false); + } + if (info.file.status === "uploading") { + setLoading(true); + } + if (info.file.status === "error") { + message.error("文件上传失败") + setLoading(false); + } + + setFileIds(info.file?.response?.imgUrl) + setFileList(info.fileList) + setFlag(false) + getImgFlow(info.file?.response?.imgUrl) + } + + const getUserInfo = async (id) => { + try { + const res = await xyt_httpget2(`${apiurl.systemM.userM.save}/${id}`) + const result = { ...res.data, roleIds: res.roleIds, postIds: res.postIds } + setUserParams(result) + form.setFieldValue("roleIds", result?.roleIds) + } catch (error) { + console.log(error); + } + } + + const getroleList = async () => { + try { + const res = await xyt_httpget2(apiurl.systemM.userM.list, { pageNum: 1, pageSize: 9999 }) + setRoleOptions(res.rows.map(item => ({ label: item.roleName, value: item.roleId }))) + } catch (error) { + + } + } + const onFinish = () => { + let values = form.getFieldsValue() + values.avatar = fileIds; + if (mode === 'edit') { + onEdit(apiurl.systemM.userM.save, { ...userParams, ...values }) + } + if (mode === 'save') { + onSave(apiurl.systemM.userM.save, values) + } + } + /** + * @description 获取查看时文件 + * @param {*} type + * @returns + */ + const getFileInfo = async (params) => { + try { + const res = xyt_httpget2(apiurl.systemM.userM.profile) + setImageSrc(res.data?.avatar) + // return { + // name: item.data.fileName, + // response: { + // data: { + // filePath: item.data.filePath, + // fileId:item.data.fileId + // } + // }, + // } + } catch (error) { + console.log(error); + } + } + + + // 获取用户头像 + const getImgFlow = async (avatar) => { + try { + if (avatar) { + const res = await xyt_httpget3(apiurl.systemM.userM.avatar + `?resource=${avatar}`) + let blob = new Blob([res.data], { type: 'application/octet-stream' }) + const downloadUrl = URL.createObjectURL(blob); + setImageSrc(downloadUrl) + } else { + setImageSrc(defaultAvatar) + } + } catch (error) { + console.log(error); + } + } + useEffect(() => { + console.log(record); + if (mode != "save") { + // getFileInfo() + getImgFlow(record.avatar) + } + }, [record, mode]) + + useEffect(() => { + if (record.userId) { + getUserInfo(record.userId) + } + }, [record]) + + useEffect(() => { + if (mode != 'save') { + form.setFieldValue("password", localStorage.getItem("password") || "") + } else { + form.setFieldValue('sex','0') + } + getroleList() + }, []) + + return ( +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + {mode !== "view" && + + + + } + {mode != "view" ?
+ + +
: null} +
+
+ ); +} + +export default ModalForm; diff --git a/src/views/SystemMangant/UserInfo1/index.js b/src/views/SystemMangant/UserInfo1/index.js new file mode 100644 index 0000000..eb20fd3 --- /dev/null +++ b/src/views/SystemMangant/UserInfo1/index.js @@ -0,0 +1,107 @@ +import React, { Fragment, useRef, useMemo, useEffect, useState } from 'react'; +import BasicCrudModal from '../../../components/crud/BasicCrudModal'; +import { Table, Card, Dropdown, Space, Divider, Form, Row, Col, Input, Button, Modal, Popconfirm, message } from 'antd'; +import { DownOutlined } from "@ant-design/icons" +import ToolBar from './toolbar'; +import ModalForm from './form'; +import apiurl from '../../../service/apiurl'; +import usePageTable from '../../../components/crud/usePageTable2'; +import { createCrudService } from '../../../components/crud/_'; +import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; +import moment from 'moment'; +import { xyt_httpput1 } from '../../../utils/request'; + +const Page = () => { + const [form] = Form.useForm(); + const refModal = useRef(); + const [searchVal, setSearchVal] = useState({}) + + const [selectedRowKeys, setselectedRowKeys] = useState([]) + const [dropItem, setDropItem] = useState({}) + const [passwordOpen, setPasswordOpen] = useState(false) + const [dashOpen, setDashOpen] = useState(false) + const columns = [ + { title: '用户帐号', key: 'userName', dataIndex: 'userName', width: 150, align: "center" }, + { title: '用户姓名', key: 'nickName', dataIndex: 'nickName', width: 150, align: "center" }, + { title: '手机号码', key: 'phonenumber', dataIndex: 'phonenumber', width: 140, align: "center" }, + // { title: '入职日期', key: 'prodDate', dataIndex: 'prodDate', width: 140,align:"center" }, + // { title: '工号', key: 'departNum', dataIndex: 'departNum', width: 150, align:"center" }, + { + title: '部门', key: 'departmentName', dataIndex: 'departmentName', width: 150, align: "center", + render: (v, r) => {r?.dept?.deptName} + }, + { title: '状态', key: 'status', dataIndex: 'status', width: 100, align: "center", render: (v) => {!v ? "正常" : "异常"} }, + { + title: '创建日期', key: 'createTime', dataIndex: 'createTime', width: 150, align: "center", + }, + { + title: '操作', key: 'action', dataIndex: 'action', width: 150, align: "center", + render: (v, r) => ( + + command("view")(r)}>查看 + command("edit")(r)}>编辑 + command("del")(r)}> + + + + ) + }, + ]; + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + 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.onUerDeleteGet(`${apiurl.systemM.userM.save}/${params.userId}`); + } + } + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.systemM.userM.page).xyt_find_noCode); + useEffect(() => { + if (searchVal) { + const params = { + search: searchVal + }; + search(params) + } + }, [searchVal]) + + return ( + <> +
+
+ + 0 ? true : false} + setDashOpen={setDashOpen} + /> + + +
+ + + + + { refresh({ addvcd: localStorage.getItem('ADCD6') }) }} + /> + + + ); +} + +export default Page; diff --git a/src/views/SystemMangant/UserInfo1/toolbar.js b/src/views/SystemMangant/UserInfo1/toolbar.js new file mode 100644 index 0000000..a23ff96 --- /dev/null +++ b/src/views/SystemMangant/UserInfo1/toolbar.js @@ -0,0 +1,27 @@ +import { Form, Input, Button } from 'antd'; + + +const ToolBar = ({ setSearchVal, onSave, dispatchBtn = false, setDashOpen }) => { + return ( +
+
setSearchVal(v)}> + + + + + + + + + + + + + {/* */} + {/* {dispatchBtn ? : null} */} + +
+ ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/SystemMangant/dept/form.js b/src/views/SystemMangant/dept/form.js new file mode 100644 index 0000000..c56c682 --- /dev/null +++ b/src/views/SystemMangant/dept/form.js @@ -0,0 +1,107 @@ +import React,{useEffect,useState} from 'react'; +import { Form, Button, Input, Row, Col, DatePicker, InputNumber, message } from 'antd'; +import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; +import apiurl from '../../../service/apiurl'; +import DeptTreeSelect from '../../../components/Form/DeptTreeSelect_xyt' +import moment from 'moment'; +import { qzc_xyt_httppost, qzc_xyt_httpput } from '../../../utils/request'; + + +const ModalForm = ({ mode, record,onEdit,onSave, onCrudSuccess, close }) => { + + const [form] = Form.useForm(); + + + const onFinish = async(values) => { + values.status = "0" + + + + + if (mode === 'edit') { + values.deptId = record.deptId + const res = await qzc_xyt_httpput(apiurl.systemManagement.dept.deptSave,values) + if(res?.code===200){ + message.success('修改成功') + onCrudSuccess() + close() + }else{ + message.error('修改失败') + } + } + if (mode === 'save') { + const res = await qzc_xyt_httppost(apiurl.systemManagement.dept.deptSave,values) + if(res?.code===200){ + message.success('新增成功') + onCrudSuccess() + close() + }else{ + message.error('新增失败') + } + } + } + + + + return ( + <> +
+ + + + + + + + + + + + + + + + + + + { + mode==='view'?null:( + <> + + + + + ) + } + + + ); +} + +export default ModalForm; diff --git a/src/views/SystemMangant/dept/index.js b/src/views/SystemMangant/dept/index.js new file mode 100644 index 0000000..4ce69c4 --- /dev/null +++ b/src/views/SystemMangant/dept/index.js @@ -0,0 +1,153 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import BasicCrudModal from '../../../components/crud/BasicCrudModal'; +import { Table, Card, message } from 'antd'; +import {DownOutlined} from "@ant-design/icons" +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'; +import moment from 'moment'; +import { httpget2, xyt_httpget2, httpdelete } from '../../../utils/request'; + +const Page = () => { + const refModal = useRef(); + const [searchVal, setSearchVal] = useState(false) + const [data, setData] = useState([]) + const [expandedRowKeys, setExpandedRowKeys] = useState([]) + const columns = [ + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center", render: (v, r, i) => {i + 1}}, + { title: '排序号', key: 'orderNum', dataIndex: 'orderNum', width: 80,align:"center" }, + { title: '名称', key: 'deptName', dataIndex: 'deptName', width: 150, align:"center" }, + { title: '备注', key: 'remark', dataIndex: 'remark', width: 230,align:"center" }, + { title: '数据更新时间', key: 'createTime', dataIndex: 'createTime', width: 150,align:"center",}, + { + title: '操作', key: 'operation', width: 240, fixed: 'right', align: 'center', + render: (value, row, index) => ( () => command(cmd)(row)} />) + }, + ]; + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + const command = (type) => async(params) => { + if (type === 'save') { + refModal.current.showSave({tree:data}); + } else if (type === 'edit') { + refModal.current.showEdit({...params, tree:data}); + } else if (type === 'view') { + refModal.current.showView(params); + } else if (type === 'del') { + const {code, msg} = await httpdelete(apiurl.systemManagement.dept.delete+params.deptId) + if(code===200){ + getData(searchVal) + message.success('删除成功') + }else{ + message.error(msg) + } + } + } + + + + const onEdit = (path,values) => { + createCrudService(path).edit(values).then((result) => { + if (result?.code === 200) { + getData() + } + }) + } + const convertToTree = (flatData, parentId = null) => { + const result = []; + const map = {}; + + // 先构建一个id映射表 + flatData.forEach((item,i) => { + map[item.deptId] = { ...item, inx:i+1,children: [] }; + }); + // 然后根据parentId将子节点添加到父节点的children属性下 + flatData.forEach((item,i) => { + if (item.parentId !== 0) { + map[item.parentId].children.push(map[item.deptId]); + } else { + result.push(map[item.deptId]); + } + }); + + return result; + + } + const buildTree = (data, parentId)=> { + let tree = []; + data.forEach((node) => { + node.title = node.deptName; + node.key = node.deptId; + + if (node.parentId === parentId) { + let children = buildTree(data, node.deptId); + if (children.length) { + node.children = children; + } + tree.push(node); + } + }); + return tree; + } + + const getData = async(params) => { + try { + const res = await xyt_httpget2(apiurl.systemManagement.dept.list,params) + let data = [] + if(params.deptName){ + data = res.data + }else{ + data = convertToTree(res.data) + } + setData(data) + } catch (error) { + + } + } + useEffect(() => { + getData(searchVal) + }, [searchVal]) + + return ( + <> +
+
+ + + +
+
{ + console.log(v,r); + setExpandedRowKeys(v) + } + }} + /> + + + + {getData(searchVal)}} + /> + + + ); +} + +export default Page; diff --git a/src/views/SystemMangant/dept/toolbar.js b/src/views/SystemMangant/dept/toolbar.js new file mode 100644 index 0000000..cfd0480 --- /dev/null +++ b/src/views/SystemMangant/dept/toolbar.js @@ -0,0 +1,36 @@ +import React, { useEffect,useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; +import moment from 'moment'; +// import '../../../index.less' + + +const ToolBar = ({ setSearchVal, onSave, onChecked }) => { + const [form] = Form.useForm(); + // const [source,setSource] = useState([]) + // const [sttp,setSttp] = useState([]) + + const onFinish = (val) => { + setSearchVal(val); + } + + + return ( + <> +
+
+ + + + + + + + + + +
+ + ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/SystemMangant/menuM/form.js b/src/views/SystemMangant/menuM/form.js new file mode 100644 index 0000000..ab79ff8 --- /dev/null +++ b/src/views/SystemMangant/menuM/form.js @@ -0,0 +1,178 @@ +import React, { useEffect, useState } from 'react'; +import { Form, Button, Input, message, Row, Col, DatePicker, Upload, Image, Radio, TreeSelect } from 'antd'; +import apiurl from '../../../service/apiurl'; +import {btnItemLayout,formItemLayout } from '../../../components/crud/FormLayoutProps'; +const ModalForm = ({ mode, record, onUerEdit, onSave, close }) => { + console.log("record", record); + + const [form] = Form.useForm(); + const [treeData, setTreeData] = useState([]) + const [menuType, setMenuType] = useState('') + + const onFinish = () => { + const values = form.getFieldsValue() + if (mode === 'edit') { + onUerEdit(apiurl.systemM.menuM.menu, { ...record, ...values, tree: undefined, menuId: record?.menuId }) + } + if (mode === 'save') { + onSave(apiurl.systemM.menuM.menu, + { + ...values, + parentId: + values.menuId, + menuId: undefined, + // visible: "0", + // isCache: "0", + // isFrame:"1" + }) + } + } + + + const onValuesChange = (values) => { + if (Object.keys(values)[0] == "menuType") { + setMenuType(values.menuType) + } + } + + + useEffect(() => { + if (mode !== "view") { + const data = [ + { + children: record.tree, + menuId: 0, + parentId: 0, + menuName: "根目录" + } + ] + setTreeData(data) + } + + if (record.menuType) { + setMenuType(record.menuType) + } + if (mode != "save") { + console.log("record", record); + + form.setFieldValue("menuId", record?.parentId) + form.setFieldValue("status", Number(record.status)) + } + }, [record, mode]) + + return ( + <> +
+
+ +
+ + + 目录 + 菜单 + 按钮 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 启用 + 禁用 + + + + + { + mode === 'view' ? null : ( + <> + + + + + ) + } + + + + ); +} + +export default ModalForm; diff --git a/src/views/SystemMangant/menuM/index.js b/src/views/SystemMangant/menuM/index.js new file mode 100644 index 0000000..95a395d --- /dev/null +++ b/src/views/SystemMangant/menuM/index.js @@ -0,0 +1,170 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import BasicCrudModal from '../../../components/crud/BasicCrudModal'; +import { Table, Card, Switch } from 'antd'; +import {DownOutlined} from "@ant-design/icons" +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'; +import moment from 'moment'; +import { httpget2, xyt_httpget2 } from '../../../utils/request'; + +const Page = () => { + const refModal = useRef(); + const [searchVal, setSearchVal] = useState(false) + const [data, setData] = useState([]) + const [expandedRowKeys, setExpandedRowKeys] = useState([]) + const [allOpen, setAllOpen] = useState(false) + const columns = [ + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center", render: (v, r, i) => {i + 1}}, + // { title: '类型', key: 'type', dataIndex: 'type', width: 100, align:"center" }, + { title: '名称', key: 'menuName', dataIndex: 'menuName', width: 150, align:"center" }, + { title: '地址', key: 'path', dataIndex: 'path', width: 230,align:"center" }, + { title: '排序号', key: 'orderNum', dataIndex: 'orderNum', width: 80,align:"center" }, + { + title: '状态', key: 'status', dataIndex: 'status', width: 100, align: "center", + render: (v, r) => { + onEdit(apiurl.systemM.menuM.menu,{...r, status:e ? 0 : 1}) + }} /> + }, + { + title: '数据更新时间', key: 'createTime', dataIndex: 'createTime', width: 150,align:"center", + }, + { + title: '操作', key: 'operation', width: 240, fixed: 'right', align: 'center', + render: (value, row, index) => ( () => command(cmd)(row)} />) + }, + ]; + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + const command = (type) => (params) => { + if (type === 'save') { + refModal.current.showSave({tree:data}); + } else if (type === 'edit') { + refModal.current.showEdit({...params, tree:data}); + } else if (type === 'view') { + refModal.current.showView(params); + } else if (type === 'del') { + refModal.current.onUerDeleteGet(`${apiurl.systemM.menuM.menu}/${params.menuId}`); + } + } + + + const onEdit = (path,values) => { + createCrudService(path).edit(values).then((result) => { + if (result?.code === 200) { + getData() + } + }) + } + const convertToTree = (flatData, parentId = null) => { + const result = []; + const map = {}; + + // 先构建一个id映射表 + flatData.forEach((item,i) => { + map[item.menuId] = { ...item, inx:i+1,children: [] }; + }); + + // 然后根据parentId将子节点添加到父节点的children属性下 + flatData.forEach((item,i) => { + if (item.parentId !== 0) { + map[item.parentId].children.push(map[item.menuId]); + } else { + result.push(map[item.menuId]); + } + }); + + return result; + + } + const getData = async() => { + try { + const res = await xyt_httpget2(apiurl.systemM.menuM.page) + let data = convertToTree(res.data) + console.log("data",data); + const result = data.filter(item =>(item.menuId != "1" && item.menuId != "2" && item.menuId != "3")) + setData(result) + } catch (error) { + console.log(error); + } + } + // useEffect(() => { + // if(searchVal){ + // const params = { + // search: searchVal + // }; + // search(params) + // } + // }, [searchVal]) + + + useEffect(() => { + if (allOpen.num == 2) { + const res = data.filter(item => item.children) + const res1 = res.map(item => { + if (item.children.length > 0) { + return item.children.map(o => o.menuId) + } else { + return item.menuId + } + }) + let t =[...res1,data.map(item=>item.menuId)].flat() + setExpandedRowKeys([...t]) + } else { + setExpandedRowKeys([]) + } + console.log("allOpen",allOpen); + }, [allOpen]) + +useEffect(() => { + getData() +}, []) + + + return ( + <> +
+
+ + + +
+
{ + console.log(v,r); + setExpandedRowKeys(v) + } + }} + /> + + + + { refresh({ addvcd: localStorage.getItem('ADCD6') }) }} + /> + + + ); +} + +export default Page; diff --git a/src/views/SystemMangant/menuM/toolbar.js b/src/views/SystemMangant/menuM/toolbar.js new file mode 100644 index 0000000..dbcf782 --- /dev/null +++ b/src/views/SystemMangant/menuM/toolbar.js @@ -0,0 +1,25 @@ +import { Form, Input, Button } from 'antd'; + + +const ToolBar = ({ setSearchVal, onSave,setAllOpen }) => { + + return ( + <> +
+
setSearchVal(v)}> + + + + + + + + + + +
+ + ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/SystemMangant/role/form.js b/src/views/SystemMangant/role/form.js new file mode 100644 index 0000000..8656cfe --- /dev/null +++ b/src/views/SystemMangant/role/form.js @@ -0,0 +1,98 @@ +import React,{useEffect,useState} from 'react'; +import { Form, Button, Input, Row, Col, DatePicker, InputNumber } from 'antd'; +import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; +import { getDictService } from '../../../service/SelectValue' +import { validlgtd , validlttd } from '../../../utils/validators'; +import apiurl from '../../../service/apiurl'; +import {mobile} from '../../../utils/validators' +import AdcdTreeSelect from '../../../components/Form/AdcdTreeSelect' +import NormalSelect from '../../../components/Form/NormalSelect'; +import { config } from '../../../config'; +import DeptTreeSelect from '../../../components/Form/DeptTreeSelect_xyt' +import moment from 'moment'; + + +const ModalForm = ({ mode, record,onEdit,onSave }) => { + + const [form] = Form.useForm(); + const [sttp,setSttp] = useState([]) + const [frgrd,setFrgrd] = useState([]) + const [stbk,setStbk] = useState([]) + const [usfl,setUsfl] = useState([]) + const [locality,setLocality] = useState([]) + + + const onFinish = (values) => { + + if (mode === 'edit') { + // onEdit(apiurl.informationManagement.stcd.edit,values) + } + if (mode === 'save') { + // onSave(apiurl.informationManagement.stcd.save,values) + } + } + + useEffect(()=>{ + getOptions() + },[]) + + const getOptions = async ()=>{ + // setSttp(await getDictService({dictType:'sttp'})) + // setFrgrd(await getDictService({dictType:'frgrd'})) + // setStbk(await getDictService({dictType:'stbk'})) + // setUsfl(await getDictService({dictType:'usfl'})) + // setLocality(await getDictService({dictType:'locality'})) + } + + + return ( + <> +
+ + + + + + + + + + + + + + { + mode==='view'?null:( + <> + + + + + ) + } + + + ); +} + +export default ModalForm; diff --git a/src/views/SystemMangant/role/index.js b/src/views/SystemMangant/role/index.js new file mode 100644 index 0000000..b9368c5 --- /dev/null +++ b/src/views/SystemMangant/role/index.js @@ -0,0 +1,109 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import { useSelector } from 'react-redux'; +import BasicCrudModal from '../../../components/crud/BasicCrudModal'; +import { Table, Card, Tabs } from 'antd'; +import ToolBar from './toolbar'; +import ModalForm from './form'; +import apiurl from '../../../service/apiurl'; +import { getDictService } from '../../../service/SelectValue' +import usePageTable from '../../../components/crud/usePageTable'; +import { createCrudService } from '../../../components/crud/_'; +import {CrudOpRender_text} from '../../../components/crud/CrudOpRender'; +import RolePage from './rolePage/index' +import PersonTable from './person' +import MenuTree from './menuTree' + +const Page = () => { + const refModal = useRef(); + const refModal2 = useRef(); + const [adcd, setAdcd] = useState(null) + const [searchVal, setSearchVal] = useState({}) + + const columns = [ + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" }, + { title: '测站名称', key: 'stnm', dataIndex: 'stnm', width: 200, ellipsis: true }, + { title: '测站编码', key: 'stcd', dataIndex: 'stcd', width: 140 }, + { title: '行政区划', key: 'adnm', dataIndex: 'adnm', width: 140 }, + { title: '站址', key: 'stlc', dataIndex: 'stlc', width: 150, ellipsis: true }, + { + title: '操作', key: 'operation', width: 240, fixed: 'right',align: 'center', + render: (value, row, index) => ( () => command(cmd)(row)} />) + }, + ]; + + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + + 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.onDelete(apiurl.informationManagement.stcd.del,{stcd:params?.stcd,source:params?.source,countycode:params?.countycode?params?.countycode:''}); + } else if (type === 'cjxgl') { + refModal2.current.show(params) + } + } + + // 页面初始默认查询参数 + const options = { + search:{ + adcd:'' + }, + }; + + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.systemManagement).find_noCode,options); + + useEffect(()=>{ + },[]) + + useEffect(()=>{ + if(adcd!==null && searchVal){ + const params = { + search: { + adcd, + ...searchVal + } + }; + search(params) + } + + },[adcd,searchVal]) + + + + return ( + <> +
+
+ +
+ {/*
+ + + + + + + + + + + +
*/} + + {}} + /> +
+ + ); +} + +export default Page; diff --git a/src/views/SystemMangant/role/menuTree/index.js b/src/views/SystemMangant/role/menuTree/index.js new file mode 100644 index 0000000..37f7253 --- /dev/null +++ b/src/views/SystemMangant/role/menuTree/index.js @@ -0,0 +1,112 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import { Tree, Card, Button, message } from 'antd'; +import { PlusCircleOutlined, CloseCircleOutlined } from '@ant-design/icons'; +import BasicCrudModal from '../../../../components/crud/BasicCrudModal'; +import apiurl from '../../../../service/apiurl'; +import { xyt_httpget2 } from '../../../../utils/request'; +import './index.less' + +const TreePage = ({onChange, value, setParentId}) => { + const refModal = useRef(); + const [treeData, setTreeData] = useState([]); + const [menuObj,setMenuObj] = useState({}) + + useEffect(()=>{ + getTree() + },[]) + + const getTree = async()=>{ + const {code, data} = await xyt_httpget2(apiurl.systemManagement.dept.menuTree) + if(code!==200){ + message.error('请求失败') + return + } + const obj = {} + data.map((item)=>{ + obj[item.menuId] = item + }) + setMenuObj(obj) + const tree = buildTree(data,0) + const tree2 = tree?.filter(item =>(item.menuId != "1" && item.menuId != "2" && item.menuId != "3")) + setTreeData(tree2) + } + + + const buildTree = (data, parentId)=> { + let tree = []; + data.forEach((node) => { + node.title = node.menuName; + node.key = node.menuId; + + if (node.parentId === parentId) { + let children = buildTree(data, node.menuId); + if (children.length) { + node.children = children; + } + tree.push(node); + } + }); + return tree; + } + + + + const handelTreeData = (data) => { + if (data.length > 0) { + data.forEach(item => { + item.title = item.label; + item.key = item.id; + if (item.children && item.children.length > 0) { + handelTreeData(item.children); + } + }); + } + } + + const onCheck = (a,b,c)=>{ + const parentList = [] + const getParentId = (id)=>{ + const data = menuObj[id] + if(data.parentId!==0){ + parentList.push(data.parentId) + getParentId(data.parentId) + } + } + b?.checkedNodes?.map(item=>{ + getParentId(item.menuId) + }) + if(setParentId){ + setParentId(parentList) + } + onChange(a) + } + + return ( +
+
+ { + // return (<> + //
{ + // e.stopPropagation() + // }}> + // refModal.current.showSave(v)}/> + // + //
+ //
{v.title}
+ // ) + // }} + /> +
+
+ ); +} + +export default TreePage; diff --git a/src/views/SystemMangant/role/menuTree/index.less b/src/views/SystemMangant/role/menuTree/index.less new file mode 100644 index 0000000..1b37cc8 --- /dev/null +++ b/src/views/SystemMangant/role/menuTree/index.less @@ -0,0 +1,11 @@ +.deptPage_deptTree{ + .ant-tree-treenode{ + width: 100%; + + .ant-tree-node-content-wrapper{ + // width: 100%; + // padding-right: 15px; + // position: static; + } + } +} \ No newline at end of file diff --git a/src/views/SystemMangant/role/person/form.js b/src/views/SystemMangant/role/person/form.js new file mode 100644 index 0000000..33c7632 --- /dev/null +++ b/src/views/SystemMangant/role/person/form.js @@ -0,0 +1,373 @@ +import React,{useEffect,useState} from 'react'; +import { Form, Button, Input, Row, Col, DatePicker, InputNumber } from 'antd'; +import { formItemLayout, btnItemLayout } from '../../../../components/crud/FormLayoutProps'; +import { getDictService } from '../../../../service/SelectValue' +import { validlgtd , validlttd } from '../../../../utils/validators'; +import apiurl from '../../../../service/apiurl'; +import AdcdTreeSelect from '../../../../components/Form/AdcdTreeSelect' +import NormalSelect from '../../../../components/Form/NormalSelect'; +import moment from 'moment'; + + +const ModalForm = ({ mode, record,onEdit,onSave }) => { + + const [form] = Form.useForm(); + const [sttp,setSttp] = useState([]) + const [frgrd,setFrgrd] = useState([]) + const [stbk,setStbk] = useState([]) + const [usfl,setUsfl] = useState([]) + const [locality,setLocality] = useState([]) + + + + const onFinish = (values) => { + + if (mode === 'edit') { + // onEdit(apiurl.informationManagement.stcd.edit,values) + } + if (mode === 'save') { + // onSave(apiurl.informationManagement.stcd.save,values) + } + } + + useEffect(()=>{ + getOptions() + },[]) + + const getOptions = async ()=>{ + setSttp(await getDictService({dictType:'sttp'})) + setFrgrd(await getDictService({dictType:'frgrd'})) + setStbk(await getDictService({dictType:'stbk'})) + setUsfl(await getDictService({dictType:'usfl'})) + setLocality(await getDictService({dictType:'locality'})) + } + + + return ( + <> +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + mode==='view'?null:( + <> + + + + + ) + } + + + ); +} + +export default ModalForm; diff --git a/src/views/SystemMangant/role/person/index.js b/src/views/SystemMangant/role/person/index.js new file mode 100644 index 0000000..adcc973 --- /dev/null +++ b/src/views/SystemMangant/role/person/index.js @@ -0,0 +1,97 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import { useSelector } from 'react-redux'; +import BasicCrudModal from '../../../../components/crud/BasicCrudModal'; +import { Table, Card, Tabs } 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 Page = () => { + const refModal = useRef(); + const refModal2 = useRef(); + const [adcd, setAdcd] = useState(null) + const [searchVal, setSearchVal] = useState({}) + + const columns = [ + // { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" }, + { title: '用户帐号', key: 'stnm', dataIndex: 'stnm', width: 200, ellipsis: true }, + { title: '用户姓名', key: 'stcd', dataIndex: 'stcd', width: 140 }, + { title: '部门', key: 'adnm', dataIndex: 'adnm', width: 140 }, + { + title: '操作', key: 'operation', width: 240, fixed: 'right',align: 'center', + render: (value, row, index) => ( () => command(cmd)(row)} />) + }, + ]; + + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + + 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.onDelete(apiurl.informationManagement.stcd.del,{stcd:params?.stcd,source:params?.source,countycode:params?.countycode?params?.countycode:''}); + } else if (type === 'cjxgl') { + refModal2.current.show(params) + } + } + + // 页面初始默认查询参数 + const options = { + search:{ + adcd:'' + }, + }; + + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.ddjc.ddjz.page).find_noCode,options); + + useEffect(()=>{ + getDictValue() + },[]) + + useEffect(()=>{ + if(adcd!==null && searchVal){ + const params = { + search: { + adcd, + ...searchVal + } + }; + search(params) + } + + },[adcd,searchVal]) + + const getDictValue = async()=>{ + }; + + + return ( + <> +
+ + + +
+
+ + + {refresh({addvcd:localStorage.getItem('ADCD6')})}} + /> + + + ); +} + +export default Page; diff --git a/src/views/SystemMangant/role/person/index.less b/src/views/SystemMangant/role/person/index.less new file mode 100644 index 0000000..44f284b --- /dev/null +++ b/src/views/SystemMangant/role/person/index.less @@ -0,0 +1,9 @@ +.deptPage{ + + + .deptPage_deptTree{ + width: 100%; + height: 100%; + padding: 10px 10px; + } +} \ No newline at end of file diff --git a/src/views/SystemMangant/role/person/toolbar.js b/src/views/SystemMangant/role/person/toolbar.js new file mode 100644 index 0000000..d22a9d8 --- /dev/null +++ b/src/views/SystemMangant/role/person/toolbar.js @@ -0,0 +1,49 @@ +import React, { useEffect,useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; +import moment from 'moment'; +// import '../../../index.less' + + +const ToolBar = ({ setSearchVal, onSave }) => { + const [form] = Form.useForm(); + // const [source,setSource] = useState([]) + // const [sttp,setSttp] = useState([]) + + const onFinish = (val) => { + val.buildYear=val.buildYear?moment(val.buildYear).format('YYYY'):undefined + setSearchVal(val); + } + + useEffect(()=>{ + getSelect() + },[]) + + const getSelect = async()=>{ + // setSource(await getDictService({dictType:'source'})) + // setSttp(await getDictService({dictType:'sttp'})) + } + + return ( + <> +
+
+ + + + + + + + + + + {/* + + */} + +
+ + ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/SystemMangant/role/rolePage/form.js b/src/views/SystemMangant/role/rolePage/form.js new file mode 100644 index 0000000..d1e0581 --- /dev/null +++ b/src/views/SystemMangant/role/rolePage/form.js @@ -0,0 +1,113 @@ +import React,{useEffect,useState} from 'react'; +import { Form, Button, Input, Row, Col, DatePicker, InputNumber, message } from 'antd'; +import { formItemLayout, btnItemLayout } from '../../../../components/crud/FormLayoutProps'; +import { getDictService } from '../../../../service/SelectValue' +import { validlgtd , validlttd } from '../../../../utils/validators'; +import apiurl from '../../../../service/apiurl'; +import AdcdTreeSelect from '../../../../components/Form/AdcdTreeSelect' +import MenuTree from '../menuTree/index' +import NormalSelect from '../../../../components/Form/NormalSelect'; +import moment from 'moment'; +import { qzc_xyt_httppost, qzc_xyt_httpput, xyt_httpget2 } from '../../../../utils/request'; + + +const ModalForm = ({ mode, record,onEdit,onSave, onCrudSuccess, close }) => { + const [form] = Form.useForm(); + const [list, setList] = useState([]) + const [parentId,setParentId] = useState([]) + + const onFinish = async(values) => { + const arr = [111,112,113,114,1046,1047,1048,1049,1050,1051,1052,1053,1054,109,110,2,1,100,101,102,103,104,105,106,107,108,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,500,501,1039,1040,1041,1042,1043,1044,1045,3,115,116,117,1055,1056,1057,1058,1059,1060] + values.status = 0 + values.menuCheckStrictly = 1 + values.menuIds = values.menuIds?Array.from(new Set([...values.menuIds,...arr,...parentId])):Array.from(new Set([...arr,...parentId])) + if (mode === 'edit') { + values.roleId = record.roleId + const {code} = await qzc_xyt_httpput(apiurl.systemManagement.role.save,values) + if(code===200){ + message.success('新增成功') + onCrudSuccess() + close() + }else{ + message.error('新增失败') + } + } + if (mode === 'save') { + const {code} = await qzc_xyt_httppost(apiurl.systemManagement.role.save,values) + if(code===200){ + message.success('新增成功') + onCrudSuccess() + close() + }else{ + message.error('新增失败') + } + } + } + + useEffect(()=>{ + const {roleId} = record + if(mode==='edit'&& roleId){ + getMenuIds(roleId) + } + },[]) + + const getMenuIds = async (roleId)=>{ + const {code, checkedKeys } = await xyt_httpget2(apiurl.systemManagement.role.getMenuIds+roleId) + if(code!==200){ + message.error('查询权限失败') + }else{ + form.setFieldsValue({ + 'menuIds':checkedKeys + }) + } + } + + + return ( + <> +
+ + + + + + + + + + + + + + { + mode==='view'?null:( + <> + + + + + ) + } + + + ); +} + +export default ModalForm; diff --git a/src/views/SystemMangant/role/rolePage/index.js b/src/views/SystemMangant/role/rolePage/index.js new file mode 100644 index 0000000..3b3b4ce --- /dev/null +++ b/src/views/SystemMangant/role/rolePage/index.js @@ -0,0 +1,91 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import { useSelector } from 'react-redux'; +import BasicCrudModal from '../../../../components/crud/BasicCrudModal'; +import { Table, Card, message } 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'; +import { httpdelete } from '../../../../utils/request'; + +const Page = () => { + const refModal = useRef(); + const refModal2 = useRef(); + const [searchVal, setSearchVal] = useState({}) + + const columns = [ + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" }, + { title: '角色编码', key: 'roleKey', dataIndex: 'roleKey', width: 200, ellipsis: true }, + { title: '角色名称', key: 'roleName', dataIndex: 'roleName', width: 140 }, + { title: '创建日期', key: 'createTime', dataIndex: 'createTime', width: 140 }, + { + title: '操作', key: 'operation', width: 240, fixed: 'right',align: 'center', + render: (value, row, index) => ( () => command(cmd)(row)} />) + }, + ]; + + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + + const command = (type) => async(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') { + const {code, msg} = await httpdelete(apiurl.systemManagement.role.delete+params.roleId) + if(code===200){ + refresh() + message.success('删除成功') + }else{ + message.error(msg) + } + } else if (type === 'cjxgl') { + refModal2.current.show(params) + } + } + + + + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.systemManagement.role.list).xyt_find_noCode); + + + // useEffect(()=>{ + // if(searchVal){ + // const params = { + // search: { + // ...searchVal + // } + // }; + // search(params) + // } + + // },[searchVal]) + + + return ( + <> +
+ + + +
+
+ + + + + + ); +} + +export default Page; diff --git a/src/views/SystemMangant/role/rolePage/toolbar.js b/src/views/SystemMangant/role/rolePage/toolbar.js new file mode 100644 index 0000000..213625e --- /dev/null +++ b/src/views/SystemMangant/role/rolePage/toolbar.js @@ -0,0 +1,46 @@ +import React, { useEffect,useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; +import moment from 'moment'; +// import '../../../index.less' + + +const ToolBar = ({ search, onSave }) => { + const [form] = Form.useForm(); + // const [source,setSource] = useState([]) + // const [sttp,setSttp] = useState([]) + + const onFinish = (val) => { + search({ + search:val + }); + } + + useEffect(()=>{ + getSelect() + },[]) + + const getSelect = async()=>{ + // setSource(await getDictService({dictType:'source'})) + // setSttp(await getDictService({dictType:'sttp'})) + } + + return ( + <> +
+
+ + + + + + + + + + +
+ + ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/SystemMangant/role/toolbar.js b/src/views/SystemMangant/role/toolbar.js new file mode 100644 index 0000000..37ad39d --- /dev/null +++ b/src/views/SystemMangant/role/toolbar.js @@ -0,0 +1,64 @@ +import React, { useEffect,useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; +import moment from 'moment'; +// import '../../../index.less' + + +const ToolBar = ({ setSearchVal, onSave }) => { + const [form] = Form.useForm(); + // const [source,setSource] = useState([]) + // const [sttp,setSttp] = useState([]) + + const onFinish = (val) => { + val.buildYear=val.buildYear?moment(val.buildYear).format('YYYY'):undefined + setSearchVal(val); + } + + useEffect(()=>{ + getSelect() + },[]) + + const getSelect = async()=>{ + // setSource(await getDictService({dictType:'source'})) + // setSttp(await getDictService({dictType:'sttp'})) + } + + return ( + <> +
+
+ + + + + + + {/* + + */} + {/* + + */} + + + + {/* + + */} + + + + { + onSave && ( + + + + ) + } + +
+ + ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/WatchData/PoliceMangant/PoliceRuleConfig/form.js b/src/views/WatchData/PoliceMangant/PoliceRuleConfig/form.js index 39f4b01..e245dd3 100644 --- a/src/views/WatchData/PoliceMangant/PoliceRuleConfig/form.js +++ b/src/views/WatchData/PoliceMangant/PoliceRuleConfig/form.js @@ -16,27 +16,27 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { value: 0, }, { - label: "闸前水位", + label: "雨量", value: 1, + }, + { + label: "闸前水位", + value:2, }, { label: "闸后水位", - value: 2, - }, - { - label: "雨量", value: 3, }, + ] const [form] = Form.useForm(); const onfinish = (values) => { values.eventsDate = values.eventsDate?moment(values.eventsDate).format("YYYY-MM-DD 00:00:00"):'' if (mode === 'edit') { - values.id = record.id; - onEdit(apiurl.rcgl.gcdsj.edit,values) + onEdit(apiurl.jcsj.bjgl.bjgzpz.edit,{...record,...values}) } if (mode === 'save') { - onSave(apiurl.rcgl.gcdsj.save,values) + onSave(apiurl.jcsj.bjgl.bjgzpz.save,values) } } @@ -52,7 +52,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
@@ -61,7 +61,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -73,7 +73,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { diff --git a/src/views/WatchData/PoliceMangant/PoliceRuleConfig/index.js b/src/views/WatchData/PoliceMangant/PoliceRuleConfig/index.js index 2ce5212..037879d 100644 --- a/src/views/WatchData/PoliceMangant/PoliceRuleConfig/index.js +++ b/src/views/WatchData/PoliceMangant/PoliceRuleConfig/index.js @@ -11,9 +11,10 @@ import {CrudOpRender_text} from '../../../../components/crud/CrudOpRender'; const url = "http://223.75.53.141:9102/test.by-lyf.tmp" const Page = () => { const types = { - 0: "设备维修", - 1: '设备更换', - 2:"结构加固" + 0: "闸后流量", + 1: '雨量', + 2: "闸前水位", + 3:'闸后水位' } const refModal = useRef(); const [searchVal, setSearchVal] = useState(false) @@ -21,15 +22,17 @@ const Page = () => { { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" }, { - title: '监测项目', key: 'name', dataIndex: 'name', width: 150, + title: '监测点', key: 'type', dataIndex: 'type', width: 150, render: (v) => {types[v]} }, - { title: '监测值', key: 'adress', dataIndex: 'adress', width: 150}, - { title: '阈值下限', key: 'adress', dataIndex: 'adress', width: 150}, - { title: '阈值上限', key: 'adress', dataIndex: 'adress', width: 150}, - { title: '是否启用', key: 'adress', dataIndex: 'adress', width: 150}, + { title: '阈值下限', key: 'upperLimit', dataIndex: 'upperLimit', width: 150}, + { title: '阈值上限', key: 'lowerLimit ', dataIndex: 'lowerLimit', width: 150}, { - title: '配置时间', key: 'adress', dataIndex: 'adress', width: 150, + title: '是否启用', key: 'status', dataIndex: 'status', width: 150, + render: (v) => { v == 1 ? '停用': '启用'} + }, + { + title: '配置时间', key: 'createTime', dataIndex: 'createTime', width: 150, }, { title: '最近报警时间', key: 'eventsDate', dataIndex: 'eventsDate', width: 140, @@ -40,7 +43,8 @@ const Page = () => { () => command(cmd)(row)} />) + status={{status:row.status,bol:true}} + command={(cmd) => () => command(cmd)(row)} />) }, ]; @@ -55,13 +59,13 @@ const Page = () => { } else if (type === 'view') { refModal.current.showView(params); } else if (type === 'del') { - refModal.current.onDeleteGet(apiurl.rcgl.gcdsj.delete + `/${params.id}`); + refModal.current.onDeleteGet(apiurl.jcsj.bjgl.bjgzpz.delete + `/${params.id}`); } } - const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.sbwh.whfabz.page).find_noCode); + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.jcsj.bjgl.bjgzpz.page).find_noCode); /** * @description 处理成功的回调 @@ -82,7 +86,7 @@ const Page = () => { return ( <> -
+
{ value: 0, }, { - label: "闸前水位", + label: "雨量", value: 1, }, { - label: "闸后水位", + label: "闸前水位", value: 2, + }, + { + label: "闸后水位", + value: 3, }, ] const [form] = Form.useForm(); const onFinish = (values) => { - let dateSo; - if (values.tm) { - dateSo = { - start: moment(values.tm[0]).format('YYYY-MM-DD HH:mm:ss'), - end: moment(values.tm[1]).format('YYYY-MM-DD HH:mm:ss') - } - } - delete values.tm - setSearchVal({...values, dateSo}); + setSearchVal({...values}); }