edit logmanage

pull/1477/head
hutanglong 2 years ago
parent 8002413269
commit b46f098e29

@ -25,12 +25,12 @@ export const defaultAlgorithm = {
// paddingContentVerticalLG: 4,
},
Modal: {
borderRadiusLG: 2,
borderRadiusSM: 2,
colorText: lightDefaultTheme.fontColor.fc3,
borderRadius: 2,
paddingContentHorizontalLG: 0,
paddingMD: 0,
// borderRadiusLG: 2,
// borderRadiusSM: 2,
// colorText: lightDefaultTheme.fontColor.fc3,
// borderRadius: 2,
// paddingContentHorizontalLG: 0,
// paddingMD: 0,
},
Menu: {
itemBg: lightDefaultTheme.backgroundColor.bg1,

@ -0,0 +1,33 @@
import { Descriptions, Modal } from 'antd';
import React from 'react';
const LogDetail: React.FC<{
data: any;
visible: boolean;
onClose: () => void;
}> = props => {
const { visible, onClose, data } = props;
return (
<Modal open={visible} onCancel={onClose} footer={null} width={600}>
<Descriptions title={'详情'} column={1}>
<Descriptions.Item span={1} label="业务类型">
{data.category}
</Descriptions.Item>
<Descriptions.Item span={1} label="业务标识">
{data.bizNo}
</Descriptions.Item>
<Descriptions.Item span={1} label="操作人">
{data.operator}
</Descriptions.Item>
<Descriptions.Item span={1} label="创建时间">
{data.createTime}
</Descriptions.Item>
<Descriptions.Item span={1} label="日志内容">
{data.action}
</Descriptions.Item>
</Descriptions>
</Modal>
);
};
export default LogDetail;

@ -1,85 +1,90 @@
import { useAntdTable } from 'ahooks';
import { Button, Form, Input, Row, Space, Table, Col, Modal } from 'antd';
import { SearchOutlined, EditOutlined } from '@ant-design/icons';
import { Button, Form, Input, Row, Space, Table, Col } from 'antd';
import { SearchOutlined, RedoOutlined } from '@ant-design/icons';
import React, { useState } from 'react';
import { fetchTenantList } from './service';
import { fetchLogList } from './service';
import { useUrlSet } from '@/hooks/useUrlSet';
import style from './index.module.less';
import LogDetail from './detail';
const baseColumns = [
{
title: '序号',
dataIndex: 'id',
width: 100,
// fixed: 'left',
},
{
title: '租户',
dataIndex: 'tenantId',
title: '业务类型',
dataIndex: 'category',
width: 200,
},
{
title: '租户名称',
dataIndex: 'tenantName',
title: '业务标识',
dataIndex: 'bizNo',
width: 380,
},
{
title: '负责人',
dataIndex: 'owner',
title: '日志内容',
dataIndex: 'action',
width: 380,
},
{
title: '修改时间',
dataIndex: 'gmtModified',
title: '操作人',
dataIndex: 'operator',
width: 100,
},
{
title: '操作时间',
dataIndex: 'createTime',
width: 200,
},
];
const Tenant: React.FC = () => {
const [editVisible, setEditVisible] = useState(false);
const [type, setType] = useState('add');
const [visible, setVisible] = useState(false);
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 { tableProps, search } = useAntdTable(fetchLogList, { form });
const [curItems, setCurItems] = useState({});
const handleSearch = () => {
setUrl();
search.submit();
};
// const handleDelete = (item: any) => {
// Modal.confirm({
// title: `此操作将删除${item.tenantName}, 是否继续?`,
// onOk: () => {
// search.submit();
// },
// });
// };
const handleDetail = (item: any) => {
setVisible(!visible);
setCurItems(item);
};
const handleClose = () => {
setVisible(false);
};
return (
<div className={style.tenant_wrapper}>
<Form form={form} wrapperCol={{ span: 23 }}>
<Row>
<Col span={6}>
<Form.Item name="note">
<Input placeholder="租户" />
<Col span={5}>
<Form.Item name="category">
<Input placeholder="业务类型" allowClear />
</Form.Item>
</Col>
<Col span={18}>
<Col span={5}>
<Form.Item name="bizNo">
<Input placeholder="业务标识" allowClear />
</Form.Item>
</Col>
<Col span={5}>
<Form.Item name="operator">
<Input placeholder="操作人" allowClear />
</Form.Item>
</Col>
<Col span={6}>
<Space>
<Button onClick={() => handleSearch()} type="primary" icon={<SearchOutlined />}>
</Button>
<Button onClick={() => setEditVisible(true)} type="primary" icon={<EditOutlined />}>
<Button onClick={() => search.reset()} type="primary" icon={<RedoOutlined />}>
</Button>
</Space>
</Col>
@ -93,26 +98,25 @@ const Tenant: React.FC = () => {
{...tableProps}
bordered
rowKey="id"
scroll={{ x: 1000 }}
columns={[
...baseColumns,
{
fixed: 'right',
width: 100,
title: '操作',
key: 'action',
render: (text: string, record: any) => {
return (
<Space>
<Button onClick={() => actions('edit', record)} type="link" className={style.opreate_btn}>
</Button>
<Button onClick={() => actions('edit', record)} type="link" className={style.opreate_btn}>
</Button>
</Space>
<Button onClick={() => handleDetail(record)} type="link" className={style.opreate_btn}>
</Button>
);
},
},
]}
/>
<LogDetail visible={visible} onClose={handleClose} data={curItems} />
</div>
);
};

@ -1,79 +1,24 @@
import request from '@/utils';
const fetchTenantList = async (
const fetchLogList = async (
pageProps: { current: number; pageSize: number },
formData: { tencent: string | number }
formData: { category: string | number; bizNo: string; operator: string }
): Promise<{ total: number; list: Array<any> }> => {
const res: any = await request('/hippo4j/v1/cs/tenant/query/page', {
const res: any = await request('/hippo4j/v1/cs/log/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,
list: res.data.records.map((item: any, index: number) => ({ id: index + 1, ...item })),
};
}
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 };
export { fetchLogList };

@ -4,7 +4,6 @@ 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 = [
@ -37,6 +36,19 @@ const Tenant: React.FC = () => {
const { setUrl } = useUrlSet({ form });
const { tableProps, search } = useAntdTable(fetchTenantList, { form });
// const {run: delete} = useRequest(fetchDeleteTenant, { manual: true });
const handleSearch = () => {
setUrl();
search.submit();
};
const handleDelete = (item: any) => {
Modal.confirm({
title: '提示',
content: `此操作将删除${item.tenantName},是否继续?`,
onOk: () => {
search.submit();
},
});
};
const actions = (type: string, item?: any) => {
switch (type) {
case 'add':
@ -46,24 +58,12 @@ const Tenant: React.FC = () => {
setEditVisible(true);
break;
case 'delete':
// handleDelete();
handleDelete(item);
break;
default:
break;
}
};
const handleSearch = () => {
setUrl();
search.submit();
};
// const handleDelete = (item: any) => {
// Modal.confirm({
// title: `此操作将删除${item.tenantName}, 是否继续?`,
// onOk: () => {
// search.submit();
// },
// });
// };
return (
<div className={style.tenant_wrapper}>
@ -105,7 +105,7 @@ const Tenant: React.FC = () => {
<Button onClick={() => actions('edit', record)} type="link" className={style.opreate_btn}>
</Button>
<Button onClick={() => actions('edit', record)} type="link" className={style.opreate_btn}>
<Button onClick={() => actions('delete', record)} type="link" className={style.opreate_btn}>
</Button>
</Space>

@ -6,12 +6,6 @@ const fetchTenantList = async (
): Promise<{ total: number; list: Array<any> }> => {
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,

@ -49,9 +49,19 @@ const isPlainObject = (obj: { [key: string]: any }): boolean => {
};
const setToken = (token: string) => {
localStorage.setItem(TokenKey, token);
Cookie.set(TokenKey, token);
};
const removeToken = () => {
localStorage.removeItem(TokenKey);
Cookie.remove(TokenKey);
};
const getToken = () => {
return localStorage.getItem(TokenKey) || Cookie.get(TokenKey);
};
/**
* @description object value
* @param obj
@ -79,4 +89,4 @@ const isEmpty = (value: any) => {
return typeof value === 'object' ? _.isEmpty(value) : isNilValue(value);
};
export { isPlainObject, isEmpty, filterEmptyField, setToken };
export { isPlainObject, isEmpty, filterEmptyField, setToken, removeToken, getToken };

@ -1,4 +1,4 @@
import { isPlainObject } from '../common';
import { getToken, isPlainObject } from '../common';
import { notification, message } from 'antd';
import Qs from 'qs';
@ -40,8 +40,6 @@ const inital: RequestOptions = {
body: null,
headers: {
'Content-Type': 'application/json',
Authorization:
'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMCxiYW94aW55aV91c2VyIiwiaXNzIjoiYWRtaW4iLCJleHAiOjE2OTU3MzAwNzYsImlhdCI6MTY5NTEyNTI3Niwicm9sIjoiUk9MRV9VU0VSIn0.4cWyhllP7u-aoRAIHs3nMggsgl4-LUCVBas8WE0FJYIe-YNS0wGf1_0RJq3TUGw00KmSaSRPKdoPgRTFqEphZA',
},
credentials: true,
responseType: 'JSON',
@ -85,6 +83,11 @@ function request<T>(url: string, config: RequestOptions): Promise<Response<T>> {
}
if (config.headers && isPlainObject(config.headers)) {
config.headers = Object.assign({}, inital.headers, config.headers);
if (!config.headers?.Authorization) {
config.headers.Authorization = getToken();
}
} else {
config.headers = { Authorization: getToken(), 'Content-Type': 'application/json' };
}
let { method, params, body, headers, credentials, responseType } = Object.assign({}, inital, config) as any;
if (typeof url !== 'string') throw new TypeError('url is not an string');

Loading…
Cancel
Save