From 69648dfe1f18611ed9c654760730899ba65ac479 Mon Sep 17 00:00:00 2001
From: baiJinjin <66710700+baiJinjin@users.noreply.github.com>
Date: Tue, 19 Sep 2023 23:50:22 +0800
Subject: [PATCH] Feature htl (#1471)
* Add user log item Manage
* edit Item Management
* merge from develop
* add router
---
threadpool/console-new/craco.config.js | 6 +
threadpool/console-new/package.json | 3 +
threadpool/console-new/src/App.tsx | 1 +
.../components/layout-com/index.module.less | 2 +-
.../console-new/src/config/theme/index.ts | 2 +-
threadpool/console-new/src/hooks/useUrlSet.ts | 18 +++
.../src/page/item/index.module.less | 5 +
.../console-new/src/page/item/index.tsx | 120 ++++++++++++++++++
.../console-new/src/page/item/router.tsx | 8 ++
.../console-new/src/page/item/service.ts | 75 +++++++++++
.../src/page/log/index.module.less | 5 +
threadpool/console-new/src/page/log/index.tsx | 120 ++++++++++++++++++
.../console-new/src/page/log/router.tsx | 8 ++
.../console-new/src/page/log/service.ts | 79 ++++++++++++
.../src/page/tenant/index.module.less | 5 +
.../console-new/src/page/tenant/index.tsx | 65 +++++++---
.../console-new/src/page/tenant/service.ts | 95 +++++++++-----
.../src/page/user/index.module.less | 5 +
.../console-new/src/page/user/index.tsx | 120 ++++++++++++++++++
.../console-new/src/page/user/router.tsx | 8 ++
.../console-new/src/page/user/service.ts | 78 ++++++++++++
threadpool/console-new/src/route/index.tsx | 3 +
.../console-new/src/utils/common/index.ts | 31 ++++-
.../console-new/src/utils/request/index.ts | 4 +-
yarn.lock | 76 -----------
25 files changed, 815 insertions(+), 127 deletions(-)
create mode 100644 threadpool/console-new/src/hooks/useUrlSet.ts
create mode 100644 threadpool/console-new/src/page/item/index.module.less
create mode 100644 threadpool/console-new/src/page/item/index.tsx
create mode 100644 threadpool/console-new/src/page/item/router.tsx
create mode 100644 threadpool/console-new/src/page/item/service.ts
create mode 100644 threadpool/console-new/src/page/log/index.module.less
create mode 100644 threadpool/console-new/src/page/log/index.tsx
create mode 100644 threadpool/console-new/src/page/log/router.tsx
create mode 100644 threadpool/console-new/src/page/log/service.ts
create mode 100644 threadpool/console-new/src/page/tenant/index.module.less
create mode 100644 threadpool/console-new/src/page/user/index.module.less
create mode 100644 threadpool/console-new/src/page/user/index.tsx
create mode 100644 threadpool/console-new/src/page/user/router.tsx
create mode 100644 threadpool/console-new/src/page/user/service.ts
delete mode 100644 yarn.lock
diff --git a/threadpool/console-new/craco.config.js b/threadpool/console-new/craco.config.js
index 5ad94a67..f94068ae 100644
--- a/threadpool/console-new/craco.config.js
+++ b/threadpool/console-new/craco.config.js
@@ -48,5 +48,11 @@ module.exports = {
headers: {
'Access-Control-Allow-Origin': '*',
},
+ proxy: {
+ '/hippo4j': {
+ target: 'http://console.hippo4j.cn',
+ changeOrigin: true,
+ },
+ },
},
};
diff --git a/threadpool/console-new/package.json b/threadpool/console-new/package.json
index 353e4cf1..43c1e5f8 100644
--- a/threadpool/console-new/package.json
+++ b/threadpool/console-new/package.json
@@ -5,6 +5,7 @@
"dependencies": {
"@ahooksjs/use-url-state": "^3.5.1",
"@ant-design/icons": "^5.2.6",
+ "@tanem/react-nprogress": "^5.0.51",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
@@ -13,6 +14,7 @@
"dayjs": "^1.11.9",
"i18next": "^23.5.1",
"i18next-browser-languagedetector": "^7.1.0",
+ "lodash": "^4.17.21",
"qs": "^6.11.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
@@ -50,6 +52,7 @@
"@craco/craco": "^7.1.0",
"@types/http-errors": "^2.0.1",
"@types/jest": "^27.5.2",
+ "@types/lodash": "^4.14.198",
"@types/node": "^16.18.26",
"@types/react": "^18.2.6",
"@types/react-dom": "^18.2.4",
diff --git a/threadpool/console-new/src/App.tsx b/threadpool/console-new/src/App.tsx
index d03544f5..c983e76a 100644
--- a/threadpool/console-new/src/App.tsx
+++ b/threadpool/console-new/src/App.tsx
@@ -1,3 +1,4 @@
+// import { Suspense } from 'react';
import LayoutCom from './components/layout-com';
import { Routes, Route, Link } from 'react-router-dom';
diff --git a/threadpool/console-new/src/components/layout-com/index.module.less b/threadpool/console-new/src/components/layout-com/index.module.less
index 05eeadc3..073f6d40 100644
--- a/threadpool/console-new/src/components/layout-com/index.module.less
+++ b/threadpool/console-new/src/components/layout-com/index.module.less
@@ -12,7 +12,7 @@
padding-top: 24px;
}
.content {
- margin: 10px 10px 0px;
+ margin: 0;
border-radius: 12px 12px 0 0;
flex: 1;
padding: 16px;
diff --git a/threadpool/console-new/src/config/theme/index.ts b/threadpool/console-new/src/config/theme/index.ts
index c1c656b4..7e40b52d 100644
--- a/threadpool/console-new/src/config/theme/index.ts
+++ b/threadpool/console-new/src/config/theme/index.ts
@@ -1,7 +1,7 @@
import { DefaultTheme } from 'styled-components';
export const lightDefaultTheme: DefaultTheme = {
- primary: '#0d68a8',
+ primary: '#1890ff',
baseColor: {
// 前两个是固定的,用于,有颜色按钮 字体颜色等固定不会变的颜色值
bc1: '#fff',
diff --git a/threadpool/console-new/src/hooks/useUrlSet.ts b/threadpool/console-new/src/hooks/useUrlSet.ts
new file mode 100644
index 00000000..7669d5f3
--- /dev/null
+++ b/threadpool/console-new/src/hooks/useUrlSet.ts
@@ -0,0 +1,18 @@
+import useUrlState from '@ahooksjs/use-url-state';
+
+export const useUrlSet = (options: { form: any }) => {
+ const { form } = options;
+ const [state, setState] = useUrlState({});
+
+ const setUrl = () => {
+ const params = form.getFieldsValue();
+ Object.keys(params).forEach(key => {
+ if (!params[key]) {
+ params[key] = undefined;
+ }
+ });
+ setState({ ...params });
+ };
+
+ return { setUrl };
+};
diff --git a/threadpool/console-new/src/page/item/index.module.less b/threadpool/console-new/src/page/item/index.module.less
new file mode 100644
index 00000000..5f59dc72
--- /dev/null
+++ b/threadpool/console-new/src/page/item/index.module.less
@@ -0,0 +1,5 @@
+.tenant_wrapper {
+ .opreate_btn {
+ padding: 0px;
+ }
+}
\ No newline at end of file
diff --git a/threadpool/console-new/src/page/item/index.tsx b/threadpool/console-new/src/page/item/index.tsx
new file mode 100644
index 00000000..8684894a
--- /dev/null
+++ b/threadpool/console-new/src/page/item/index.tsx
@@ -0,0 +1,120 @@
+import { useAntdTable } from 'ahooks';
+import { Button, Form, Input, Row, Space, Table, Col } from 'antd';
+import { SearchOutlined, EditOutlined } from '@ant-design/icons';
+import React, { useState } from 'react';
+import { fetchItemList } from './service';
+import { useUrlSet } from '@/hooks/useUrlSet';
+import style from './index.module.less';
+
+const baseColumns = [
+ {
+ title: '序号',
+ dataIndex: 'index',
+ },
+ {
+ title: '租户',
+ dataIndex: 'tenantId',
+ },
+ {
+ title: '项目名称',
+ dataIndex: 'itemName',
+ },
+ {
+ title: '负责人',
+ dataIndex: 'owner',
+ },
+ {
+ title: '修改时间',
+ dataIndex: 'gmtModified',
+ },
+];
+
+const Tenant: React.FC = () => {
+ const [editVisible, setEditVisible] = useState(false);
+ const [type, setType] = useState('add');
+ const [form] = Form.useForm();
+ const { setUrl } = useUrlSet({ form });
+ const { tableProps, search } = useAntdTable(fetchItemList, { form });
+ // const {run: delete} = useRequest(fetchDeleteTenant, { manual: true });
+ const actions = (type: string, item?: any) => {
+ switch (type) {
+ case 'add':
+ setEditVisible(true);
+ break;
+ case 'edit':
+ setEditVisible(true);
+ break;
+ case 'delete':
+ // handleDelete();
+ break;
+ default:
+ break;
+ }
+ };
+ const handleSearch = () => {
+ setUrl();
+ search.submit();
+ };
+ // const handleDelete = (item: any) => {
+ // Modal.confirm({
+ // title: `此操作将删除${item.tenantName}, 是否继续?`,
+ // onOk: () => {
+ // search.submit();
+ // },
+ // });
+ // };
+
+ return (
+
+
+
{
+ return (
+
+
+
+
+ );
+ },
+ },
+ ]}
+ />
+
+ );
+};
+
+export default Tenant;
diff --git a/threadpool/console-new/src/page/item/router.tsx b/threadpool/console-new/src/page/item/router.tsx
new file mode 100644
index 00000000..c11cce05
--- /dev/null
+++ b/threadpool/console-new/src/page/item/router.tsx
@@ -0,0 +1,8 @@
+import { lazy } from 'react';
+import { IRouterList } from '@/typings';
+
+const ItemManage = lazy(() => import('./index'));
+
+const routerList: IRouterList[] = [{ path: '/item', component: () => }];
+
+export default routerList;
diff --git a/threadpool/console-new/src/page/item/service.ts b/threadpool/console-new/src/page/item/service.ts
new file mode 100644
index 00000000..cd426860
--- /dev/null
+++ b/threadpool/console-new/src/page/item/service.ts
@@ -0,0 +1,75 @@
+import request from '@/utils';
+
+const fetchItemList = async (
+ pageProps: { current: number; pageSize: number },
+ formData: { tencent: string | number }
+): Promise<{ total: number; list: Array }> => {
+ const res: any = await request('/hippo4j/v1/cs/item/query/page', {
+ method: 'POST',
+ headers: {
+ Authorization:
+ 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI3LGJhb3hpbnlpX2FkbWluIiwiaXNzIjoiYWRtaW4iLCJleHAiOjE2OTUzOTg4NDksImlhdCI6MTY5NDc5NDA0OSwicm9sIjoiUk9MRV9BRE1JTiJ9.syRDshKpd-xETsSdeMPRtk956f4BJkPt4utVsUl4smgH71Woj8SUq4w2RX1YtGTC4aTZRJYdKOfkTqwK0g_dHQ',
+ cookie:
+ 'Admin-Token=Bearer%20eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI3LGJhb3hpbnlpX2FkbWluIiwiaXNzIjoiYWRtaW4iLCJleHAiOjE2OTUzOTg4NDksImlhdCI6MTY5NDc5NDA0OSwicm9sIjoiUk9MRV9BRE1JTiJ9.syRDshKpd-xETsSdeMPRtk956f4BJkPt4utVsUl4smgH71Woj8SUq4w2RX1YtGTC4aTZRJYdKOfkTqwK0g_dHQ; userName=baoxinyi_admin',
+ },
+ body: {
+ ...formData,
+ current: pageProps.current,
+ size: pageProps.pageSize,
+ desc: true,
+ },
+ });
+ if (res && res.success) {
+ return {
+ total: res.data.total,
+ list: res.data.records.map((item: any, index: number) => ({ index: index + 1, ...item })),
+ };
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+const fetchAddTenant = async (params: {
+ itemDesc: string; // 项目简介
+ itemId: string; // 项目
+ itemName: string; // 项目名称
+ owner: string; // 负责人
+ tenantId: string; // 租户
+ tenantDesc?: string;
+ tenantName?: string;
+}) => {
+ const res = await request('/hippo4j/v1/cs/tenant/save', {
+ method: 'POST',
+ body: { ...params },
+ });
+
+ if (res && res.success) {
+ return res;
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+const fetchDeleteItem = async (id: string) => {
+ const url = 'hippo4j/v1/cs/item/delete/prescription/' + id;
+ const res = await request(url, {
+ method: 'DELETE',
+ });
+
+ if (res && res.success) {
+ return res;
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+const fetchUpdateItem = async (id: string) => {
+ const res = await request('/hippo4j/v1/cs/item/update', {
+ method: 'POST',
+ params: { id },
+ });
+
+ if (res && res.success) {
+ return res;
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+export { fetchItemList, fetchAddTenant, fetchDeleteItem, fetchUpdateItem };
diff --git a/threadpool/console-new/src/page/log/index.module.less b/threadpool/console-new/src/page/log/index.module.less
new file mode 100644
index 00000000..5f59dc72
--- /dev/null
+++ b/threadpool/console-new/src/page/log/index.module.less
@@ -0,0 +1,5 @@
+.tenant_wrapper {
+ .opreate_btn {
+ padding: 0px;
+ }
+}
\ No newline at end of file
diff --git a/threadpool/console-new/src/page/log/index.tsx b/threadpool/console-new/src/page/log/index.tsx
new file mode 100644
index 00000000..a7c0b23f
--- /dev/null
+++ b/threadpool/console-new/src/page/log/index.tsx
@@ -0,0 +1,120 @@
+import { useAntdTable } from 'ahooks';
+import { Button, Form, Input, Row, Space, Table, Col, Modal } from 'antd';
+import { SearchOutlined, EditOutlined } from '@ant-design/icons';
+import React, { useState } from 'react';
+import { fetchTenantList } from './service';
+import { useUrlSet } from '@/hooks/useUrlSet';
+import style from './index.module.less';
+
+const baseColumns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ },
+ {
+ title: '租户',
+ dataIndex: 'tenantId',
+ },
+ {
+ title: '租户名称',
+ dataIndex: 'tenantName',
+ },
+ {
+ title: '负责人',
+ dataIndex: 'owner',
+ },
+ {
+ title: '修改时间',
+ dataIndex: 'gmtModified',
+ },
+];
+
+const Tenant: React.FC = () => {
+ const [editVisible, setEditVisible] = useState(false);
+ const [type, setType] = useState('add');
+ const [form] = Form.useForm();
+ const { setUrl } = useUrlSet({ form });
+ const { tableProps, search } = useAntdTable(fetchTenantList, { form });
+ // const {run: delete} = useRequest(fetchDeleteTenant, { manual: true });
+ const actions = (type: string, item?: any) => {
+ switch (type) {
+ case 'add':
+ setEditVisible(true);
+ break;
+ case 'edit':
+ setEditVisible(true);
+ break;
+ case 'delete':
+ // handleDelete();
+ break;
+ default:
+ break;
+ }
+ };
+ const handleSearch = () => {
+ setUrl();
+ search.submit();
+ };
+ // const handleDelete = (item: any) => {
+ // Modal.confirm({
+ // title: `此操作将删除${item.tenantName}, 是否继续?`,
+ // onOk: () => {
+ // search.submit();
+ // },
+ // });
+ // };
+
+ return (
+
+
+
{
+ return (
+
+
+
+
+ );
+ },
+ },
+ ]}
+ />
+
+ );
+};
+
+export default Tenant;
diff --git a/threadpool/console-new/src/page/log/router.tsx b/threadpool/console-new/src/page/log/router.tsx
new file mode 100644
index 00000000..d778e8be
--- /dev/null
+++ b/threadpool/console-new/src/page/log/router.tsx
@@ -0,0 +1,8 @@
+import { lazy } from 'react';
+import { IRouterList } from '@/typings';
+
+const LogManage = lazy(() => import('./index'));
+
+const routerList: IRouterList[] = [{ path: '/log', component: () => }];
+
+export default routerList;
diff --git a/threadpool/console-new/src/page/log/service.ts b/threadpool/console-new/src/page/log/service.ts
new file mode 100644
index 00000000..2fab1ef7
--- /dev/null
+++ b/threadpool/console-new/src/page/log/service.ts
@@ -0,0 +1,79 @@
+import request from '@/utils';
+
+const fetchTenantList = async (
+ pageProps: { current: number; pageSize: number },
+ formData: { tencent: string | number }
+): Promise<{ total: number; list: Array }> => {
+ const res: any = await request('/hippo4j/v1/cs/tenant/query/page', {
+ method: 'POST',
+ headers: {
+ Authorization:
+ 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI3LGJhb3hpbnlpX2FkbWluIiwiaXNzIjoiYWRtaW4iLCJleHAiOjE2OTUzOTg4NDksImlhdCI6MTY5NDc5NDA0OSwicm9sIjoiUk9MRV9BRE1JTiJ9.syRDshKpd-xETsSdeMPRtk956f4BJkPt4utVsUl4smgH71Woj8SUq4w2RX1YtGTC4aTZRJYdKOfkTqwK0g_dHQ',
+ cookie:
+ 'Admin-Token=Bearer%20eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI3LGJhb3hpbnlpX2FkbWluIiwiaXNzIjoiYWRtaW4iLCJleHAiOjE2OTUzOTg4NDksImlhdCI6MTY5NDc5NDA0OSwicm9sIjoiUk9MRV9BRE1JTiJ9.syRDshKpd-xETsSdeMPRtk956f4BJkPt4utVsUl4smgH71Woj8SUq4w2RX1YtGTC4aTZRJYdKOfkTqwK0g_dHQ; userName=baoxinyi_admin',
+ },
+ body: {
+ ...formData,
+ current: pageProps.current,
+ size: pageProps.pageSize,
+ desc: true,
+ },
+ });
+ if (res && res.success) {
+ return {
+ total: res.data.total,
+ list: res.data.records,
+ };
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+const fetchAddTenant = async (id: string) => {
+ const res = await request('/hippo4j/v1/cs/tenant/save', {
+ method: 'POST',
+ params: { id },
+ });
+
+ if (res && res.success) {
+ return res;
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+const fetchDeleteTenant = async (id: string) => {
+ const res = await request('/tenants', {
+ method: 'POST',
+ params: { id },
+ });
+
+ if (res && res.success) {
+ return res;
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+const fetchUpdateTenant = async (id: string) => {
+ const res = await request('hippo4j/v1/cs/tenant/update', {
+ method: 'POST',
+ params: { id },
+ });
+
+ if (res && res.success) {
+ return res;
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+const fetchTenantDetail = async (id: string) => {
+ const res = await request('/tenants', {
+ method: 'POST',
+ params: { id },
+ });
+
+ if (res && res.success) {
+ return res;
+ }
+ throw new Error(res.msg || '服务器开小差啦~');
+};
+
+export { fetchTenantList, fetchAddTenant, fetchDeleteTenant, fetchUpdateTenant, fetchTenantDetail };
diff --git a/threadpool/console-new/src/page/tenant/index.module.less b/threadpool/console-new/src/page/tenant/index.module.less
new file mode 100644
index 00000000..5f59dc72
--- /dev/null
+++ b/threadpool/console-new/src/page/tenant/index.module.less
@@ -0,0 +1,5 @@
+.tenant_wrapper {
+ .opreate_btn {
+ padding: 0px;
+ }
+}
\ No newline at end of file
diff --git a/threadpool/console-new/src/page/tenant/index.tsx b/threadpool/console-new/src/page/tenant/index.tsx
index cecb767e..0d80beff 100644
--- a/threadpool/console-new/src/page/tenant/index.tsx
+++ b/threadpool/console-new/src/page/tenant/index.tsx
@@ -1,16 +1,20 @@
-import { useAntdTable } from 'ahooks';
-import { Button, Form, Input, Row, Space, Table, Col } from 'antd';
import React, { useState } from 'react';
+import { useAntdTable } from 'ahooks';
+import { Button, Form, Input, Row, Space, Table, Col, Modal } from 'antd';
+import { SearchOutlined, EditOutlined } from '@ant-design/icons';
+import { useUrlSet } from '@/hooks/useUrlSet';
import { fetchTenantList } from './service';
+import style from './index.module.less';
+
const baseColumns = [
{
title: '序号',
- dataIndex: 'num',
+ dataIndex: 'id',
},
{
title: '租户',
- dataIndex: 'tenant',
+ dataIndex: 'tenantId',
},
{
title: '租户名称',
@@ -18,53 +22,78 @@ const baseColumns = [
},
{
title: '负责人',
- dataIndex: 'creator',
+ dataIndex: 'owner',
},
{
title: '修改时间',
- dataIndex: 'data',
+ dataIndex: 'gmtModified',
},
];
const Tenant: React.FC = () => {
const [editVisible, setEditVisible] = useState(false);
+ const [type, setType] = useState('add');
const [form] = Form.useForm();
+ const { setUrl } = useUrlSet({ form });
const { tableProps, search } = useAntdTable(fetchTenantList, { form });
- const actions = (type: string) => {
+ // const {run: delete} = useRequest(fetchDeleteTenant, { manual: true });
+ const actions = (type: string, item?: any) => {
switch (type) {
- case 'create':
+ case 'add':
setEditVisible(true);
break;
case 'edit':
setEditVisible(true);
break;
case 'delete':
+ // handleDelete();
break;
default:
break;
}
};
+ const handleSearch = () => {
+ setUrl();
+ search.submit();
+ };
+ // const handleDelete = (item: any) => {
+ // Modal.confirm({
+ // title: `此操作将删除${item.tenantName}, 是否继续?`,
+ // onOk: () => {
+ // search.submit();
+ // },
+ // });
+ // };
return (
-