From 00b5e549ce6d690561bf86576245737c4892411d Mon Sep 17 00:00:00 2001 From: qujay <371226673@qq.com> Date: Fri, 14 Oct 2022 23:49:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8F=9C=E5=8D=95CRUD?= =?UTF-8?q?=EF=BC=8Ctoken=E5=88=A0=E9=99=A4=EF=BC=8C=E6=85=A2sql=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=EF=BC=8C=E6=89=80=E5=B1=9E=E5=BA=94=E7=94=A8=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/log/SlowSqlLog/index.tsx | 13 +- .../system/Menu/components/UpdateForm.tsx | 170 +++++++++++ .../frontend/src/pages/system/Menu/index.tsx | 281 +++++++++++++++++- .../frontend/src/pages/system/Role/index.tsx | 3 + .../frontend/src/pages/system/Token/index.tsx | 49 ++- .../system/User/components/UpdateForm.tsx | 1 - .../frontend/src/pages/system/User/index.tsx | 1 - .../src/pages/system/UserInfo/index.tsx | 61 +++- .../main/frontend/src/services/search/api.ts | 2 +- .../frontend/src/services/search/typings.d.ts | 7 +- .../main/frontend/src/services/system/api.ts | 41 +++ .../frontend/src/services/system/typings.d.ts | 2 +- 12 files changed, 590 insertions(+), 41 deletions(-) create mode 100644 zlt-web/src/main/frontend/src/pages/system/Menu/components/UpdateForm.tsx diff --git a/zlt-web/src/main/frontend/src/pages/log/SlowSqlLog/index.tsx b/zlt-web/src/main/frontend/src/pages/log/SlowSqlLog/index.tsx index 967a7e0..0fe8b5b 100644 --- a/zlt-web/src/main/frontend/src/pages/log/SlowSqlLog/index.tsx +++ b/zlt-web/src/main/frontend/src/pages/log/SlowSqlLog/index.tsx @@ -12,7 +12,7 @@ import React, { useState } from 'react'; const SlowSqlLog: React.FC = () => { const [params, setParams] = useState>(); - const columns: ProColumns[] = [ + const columns: ProColumns[] = [ { dataIndex: 'index', valueType: 'indexBorder', @@ -75,20 +75,15 @@ const SlowSqlLog: React.FC = () => { - + className="audit-log" rowKey="id" headerTitle="慢查询日志" diff --git a/zlt-web/src/main/frontend/src/pages/system/Menu/components/UpdateForm.tsx b/zlt-web/src/main/frontend/src/pages/system/Menu/components/UpdateForm.tsx new file mode 100644 index 0000000..0a52cd3 --- /dev/null +++ b/zlt-web/src/main/frontend/src/pages/system/Menu/components/UpdateForm.tsx @@ -0,0 +1,170 @@ +import { menuOnes } from '@/services/system/api'; +import { + ModalForm, + ProForm, + ProFormDigit, + ProFormRadio, + ProFormSelect, + ProFormText, + ProFormTreeSelect, +} from '@ant-design/pro-components'; +import { treeify } from '@/util/treeify'; +import { Form } from 'antd'; +import React, { useEffect } from 'react'; + +export type FormValueType = { + roleIds?: number[]; +} & Partial; + +export type UpdateFormProps = { + onVisibleChange: (flag: boolean) => void; + onSubmit: (values: FormValueType) => Promise; + updateModalVisible: boolean; + values?: SYSTEM.Menu; +}; + +const UpdateForm: React.FC = (props) => { + const [form] = Form.useForm(); + const { values } = props; + + useEffect(() => { + form.setFieldsValue(values); + }, [form, values]); + + return ( + + + { + const menus = await menuOnes(); + if (menus) { + let a = menus.map(item => { + return { ...item, key: item.id, title: item.name, value: item.id } + }) + let treeData = treeify(a, {}); + let root = { + title: '顶级目录', + value: -1, + key: -1, + }; + treeData.unshift(root); + return treeData; + } + return []; + }} + fieldProps={{ + fieldNames: { + label: 'title', + }, + // treeCheckable: true, + // showCheckedStrategy: TreeSelect.SHOW_PARENT, + placeholder: '选择上级菜单名', + }} + /> + + + + + + + + + + + ); +}; + +export default UpdateForm; diff --git a/zlt-web/src/main/frontend/src/pages/system/Menu/index.tsx b/zlt-web/src/main/frontend/src/pages/system/Menu/index.tsx index a87b7e8..8321386 100644 --- a/zlt-web/src/main/frontend/src/pages/system/Menu/index.tsx +++ b/zlt-web/src/main/frontend/src/pages/system/Menu/index.tsx @@ -1,26 +1,89 @@ -import { menu } from '@/services/system/api'; +import { deleteMenus, menu, menuOnes, saveOrUpdateMenus } from '@/services/system/api'; import { treeify } from '@/util/treeify'; -import { FolderOpenOutlined, MenuOutlined, PlusOutlined, ProfileOutlined } from '@ant-design/icons'; -import type { ProColumns } from '@ant-design/pro-components'; -import { ProFormSelect } from '@ant-design/pro-components'; -import { PageContainer, ProFormText, ProTable, QueryFilter } from '@ant-design/pro-components'; -import { Button, Space, Tag, Typography } from 'antd'; -import React, { useEffect, useState } from 'react'; +import { FolderOpenOutlined, MenuOutlined, PlusOutlined, ProfileOutlined, } from '@ant-design/icons'; +import { idIDIntl, ProColumns, ProFormDigit } from '@ant-design/pro-components'; +import { ProFormRadio, ProFormTreeSelect, ProForm, ProFormSelect } from '@ant-design/pro-components'; +import { PageContainer, ProFormText, ProTable, QueryFilter, ModalForm } from '@ant-design/pro-components'; +import { Button, Space, Tag, Typography, TreeSelect, message, Popconfirm } from 'antd'; +import React, { useRef, useEffect, useState } from 'react'; +import UpdateForm from './components/UpdateForm'; const { Link } = Typography; +const handleAdd = async (fields: SYSTEM.Menu) => { + const hide = message.loading('正在添加'); + try { + const result = await saveOrUpdateMenus({ ...fields }); + hide(); + if (result.resp_code === 0) { + message.success('添加菜单成功'); + return true; + } else { + message.error(result.resp_msg); + return false; + } + } catch (error) { + hide(); + message.error('添加菜单失败'); + return false; + } +}; + +const handleEdit = async (fields: SYSTEM.Menu) => { + const hide = message.loading('正在更新'); + try { + const result = await saveOrUpdateMenus({ ...fields }); + hide(); + if (result.resp_code === 0) { + message.success('修改菜单成功'); + return true; + } else { + message.error(result.resp_msg); + return false; + } + } catch (error) { + hide(); + message.error('修改菜单失败'); + return false; + } +}; + +const handleDelete = async (sysUser: SYSTEM.Menu) => { + const hide = message.loading('正在删除'); + try { + const result = await deleteMenus(sysUser.id); + hide(); + if (result.resp_code === 0) { + message.success('删除菜单成功'); + return true; + } else { + message.error(result.resp_msg); + return false; + } + } catch (error) { + hide(); + message.error('删除菜单失败'); + return false; + } +}; const Generator: React.FC = () => { + + const [params, setParams] = useState>({}); + const actionRef = useRef(); + const [createModalVisible, handleModalVisible] = useState(false); + const [updateModalVisible, handleUpdateModalVisible] = useState(false); + const [currentRow, setCurrentRow] = useState(); const [data, setData] = useState(); const [keys, setKeys] = useState<(React.Key)[]>([]); const [expandedRowKeys, setExpandedRowKeys] = useState<(React.Key)[]>([]); + const query = async (params: Record) => { const menus = await menu(params); const treeData = treeify(menus, {}); menus.forEach((node) => { if (node.children && node.children.length === 0) delete node.children; }); - // debugger; - setKeys(menus.map(m=>m.id)); + setKeys(menus.map(m => m.id)); setData(treeData); }; @@ -102,10 +165,29 @@ const Generator: React.FC = () => { key: 'action', fixed: 'right', width: 80, - render: () => ( + render: (_, entity) => ( - {}}>修改 - {}}>删除 + { + setCurrentRow(entity); + handleUpdateModalVisible(true); + }} + > + 修改 + + { + const success = await handleDelete(entity); + if (success) { + if (actionRef.current) { + actionRef.current.reload(); + } + } + }} + > + 删除 + ), }, @@ -118,11 +200,14 @@ const Generator: React.FC = () => { span={6} className="query-filter" onFinish={async (values) => query(values)} - // onReset={() => setParams({})} + // onReset={() => setParams({})} > query({ tenantId: values }) + }} valueEnum={{ webApp: 'pc端', app: '移动端', @@ -134,6 +219,16 @@ const Generator: React.FC = () => { rowKey="id" headerTitle="菜单管理" + actionRef={actionRef} + request={async () => { + const menus = await menu(params); + const treeData = treeify(menus, {}); + menus.forEach((node) => { + if (node.children && node.children.length === 0) delete node.children; + }); + setKeys(menus.map(m => m.id)); + setData(treeData); + }} dataSource={data} columns={columns} search={false} @@ -144,7 +239,7 @@ const Generator: React.FC = () => { }} toolBarRender={() => [ <> -