Commit 947a6457 authored by 张烨's avatar 张烨
parents 47754fe1 e4bf4808
......@@ -5,27 +5,20 @@ import {
Row,
Col,
Button,
Select,
Menu,
notification,
message,
Spin,
} from 'antd';
import { SwapRightOutlined } from '@ant-design/icons';
import { SwapRightOutlined, DownOutlined } from '@ant-design/icons';
import { Chart, Interval, Tooltip, Axis } from 'bizcharts';
import { DataSet } from '@antv/data-set';
import moment from 'moment';
import { post, PUBLISH_SERVICE } from '@/services/index';
const { Option } = Select;
// const data = [
// { value: 251, name: '接口名称一', subName: '子事例一' },
// { value: 1041, name: '接口名称三', subName: '子事例二' },
// { value: 610, name: '接口名称二', subName: '子事例二' },
// { value: 434, name: '接口名称二', subName: '子事例四' },
// { value: 335, name: '接口名称二', subName: '子事例五' },
// { value: 250, name: '接口名称三', subName: '子事例二' },
// ];
// const data = [];
const Demo = () => {
const ServiceLog = () => {
const [loading, setLoading] = useState(false); // 源数据
const [data0, setData0] = useState([]); // 源数据
const [pathCount, setPathCount] = useState([]); // 接口调用次数,统计数据
......@@ -35,6 +28,7 @@ const Demo = () => {
const [endTime, setEndTime] = useState(
moment(new Date(), 'YYYY-MM-DD HH:mm:ss'), // 默认值当前时间
);
const [logType, setLogType] = useState(0); // 请求参数,日志类型,默认是正常,0:成功 -1:错误 9999:全部
const [tableColumns, setTableColumns] = useState([]); // 源数据
console.log(startTime.format('HH:mm:ss'));
......@@ -46,7 +40,7 @@ const Demo = () => {
setLoading(true);
getData();
}
}, [startTime, endTime]);
}, [startTime, endTime, logType]);
const getData = () => {
post(`${PUBLISH_SERVICE}/LogCenter/GetOMSLog`, {
PageIndex: 0,
......@@ -57,7 +51,7 @@ const Demo = () => {
HourTo: endTime.format('HH:mm:ss'),
IP: '',
Module: '',
LogType: 0,
LogType: +logType,
Description: '',
LoginName: '',
UserName: '',
......@@ -154,43 +148,51 @@ const Demo = () => {
),
);
};
const selectChange = value => {
setLogType(value);
};
return (
<>
<Row>
<div style={{ lineHeight: 2 }}>时间:</div>
<DatePicker
showTime
format="YYYY-MM-DD HH:mm:ss"
placeholder="起始时间"
value={startTime}
onChange={changeStartTime}
allowClear={false}
/>
<SwapRightOutlined style={{ lineHeight: 2 }} />
<DatePicker
showTime
format="YYYY-MM-DD HH:mm:ss"
placeholder="结束时间"
value={endTime}
onChange={changeEndTime}
style={{ marginRight: '10px' }}
allowClear={false}
/>
<Col span={12}>
<Row style={{ padding: '10px', background: 'white' }}>
<Col span={24}>
<span style={{ lineHeight: 2 }}>时间:</span>
<DatePicker
showTime
format="YYYY-MM-DD HH:mm:ss"
placeholder="起始时间"
value={startTime}
onChange={changeStartTime}
allowClear={false}
/>
<SwapRightOutlined style={{ lineHeight: 2 }} />
<DatePicker
showTime
format="YYYY-MM-DD HH:mm:ss"
placeholder="结束时间"
value={endTime}
onChange={changeEndTime}
style={{ marginRight: '10px' }}
allowClear={false}
/>
<Button onClick={() => setTime(1)}>1小时</Button>
<Button onClick={() => setTime(6)}>6小时</Button>
<Button onClick={() => setTime(12)}>12小时</Button>
<Button onClick={() => setTime(24)}>1</Button>
<Button onClick={() => setTime(24 * 7)}>1</Button>
<span style={{ lineHeight: 2, marginLeft: '20px' }}>日志类型:</span>
<Select defaultValue="正常" onChange={selectChange}>
<Option value="9999">全部</Option>
<Option value="0">正常</Option>
<Option value="-1">错误</Option>
</Select>
</Col>
{/* <div style={{ lineHeight: 2 }}>类型:</div> */}
</Row>
<Spin spinning={loading} tip="loading">
<Row style={{ padding: '10px' }}>
<Row style={{ padding: '10px', background: 'white' }}>
<Col span={12}>
<Chart
height={340}
height={316}
width={400}
autoFit
data={pathCount}
......@@ -200,6 +202,7 @@ const Demo = () => {
>
<Axis
name="Path"
// label={{ autoEllipsis: 'true', autoHide: 'true' }}
label="null"
title={{ offset: 20, position: 'end' }}
/>
......@@ -210,7 +213,7 @@ const Demo = () => {
</Col>
<Col span={12}>
<Chart
height={340}
height={316}
width={400}
autoFit
data={reponseTime}
......@@ -234,7 +237,6 @@ const Demo = () => {
bordered
columns={tableColumns || []}
dataSource={data0}
// loading={tableLoading}
scroll={{ x: 'max-content' }}
pagination={{
showTotal: (total, range) =>
......@@ -249,98 +251,4 @@ const Demo = () => {
</>
);
};
export default Demo;
// dv.transform({
// type: 'aggregate', // 别名summary
// fields: ['name', 'value'], // 统计字段集
// operations: ['count', 'mean'], // 统计操作集
// as: ['计数', '平均值'], // 存储字段集
// groupBy: ['name'], // 分组字段集
// }).transform({
// type: 'sort-by',
// fields: ['计数'], // 根据指定的字段集进行排序,与lodash的sortBy行为一致
// order: 'DESC', // 默认为 ASC,DESC 则为逆序
// });
// const data = [
// {
// ID: '215341',
// loginName: 'gcwqgps',
// userName: 'gcwqgps',
// systemType: 'solution',
// terminal: 'Browser',
// IP: '192.168.10.150',
// logTime: '2020/11/23 18:56:27',
// },
// {
// ID: '215342',
// loginName: 'luojian',
// userName: 'gwcj',
// systemType: 'city',
// terminal: 'Browser',
// IP: '127.0.0.1',
// logTime: '2020/11/23 19:17:51',
// },
// {
// ID: '215343',
// loginName: 'luojian',
// userName: 'gwcj',
// systemType: 'city',
// terminal: 'Browser',
// IP: '127.0.0.1',
// logTime: '2020/11/23 19:41:12',
// },
// {
// ID: '215344',
// loginName: 'luojian',
// userName: 'gwcj',
// systemType: 'city',
// terminal: 'Browser',
// IP: '127.0.0.1',
// logTime: '2020/11/23 19:42:04',
// },
// {
// ID: '215345',
// loginName: 'luojian',
// userName: 'gwcj',
// systemType: 'city',
// terminal: 'Browser',
// IP: '127.0.0.1',
// logTime: '2020/11/23 19:45:56',
// },
// {
// ID: '215346',
// loginName: 'panda',
// userName: '熊猫智慧水务',
// systemType: 'city',
// terminal: 'Browser',
// IP: '192.168.10.150',
// logTime: '2020/11/23 19:55:20',
// },
// {
// ID: '215347',
// loginName: 'luojian',
// userName: 'gwcj',
// systemType: 'city',
// terminal: 'Browser',
// IP: '127.0.0.1',
// logTime: '2020/11/23 19:55:39',
// },
// {
// ID: '215348',
// loginName: '17671748304',
// userName: '邹小仙',
// systemType: 'city',
// terminal: 'Browser',
// IP: '192.168.10.150',
// logTime: '2020/11/23 20:01:34',
// },
// {
// ID: '215349',
// loginName: 'luojian',
// userName: 'gwcj',
// systemType: 'city',
// terminal: 'Browser',
// IP: '127.0.0.1',
// logTime: '2020/11/23 20:16:51',
// },
// ];
export default ServiceLog;
......@@ -103,7 +103,7 @@ const SiteConfig = props => {
>
<Input placeholder="请输入应用名称" allowClear />
</Item>
<Item
{/* <Item
label="系统图标:"
name="shortcutIcon"
rules={[
......@@ -114,7 +114,7 @@ const SiteConfig = props => {
]}
>
<Input placeholder="请输入系统图标名称" allowClear />
</Item>
</Item> */}
<Item label="系统图标预览:" name="shortcutIcon">
<PicturesWall />
</Item>
......
......@@ -9,7 +9,7 @@ const AddForm = props => {
// const [type, setType] = useState(2);
const [form] = Form.useForm();
const [otherForm] = Form.useForm();
console.log(nodeObj, 'nodeObj');
const layout = {
layout: 'horizontal',
labelCol: { span: 4, offset: 1 },
......@@ -25,29 +25,74 @@ const AddForm = props => {
submitCallback(obj, nodeObj);
}
};
const finish = () => {
submit();
};
return (
<div>
{(addType === 1 || addType === 2) && (
<Form form={form} {...layout} className={styles.formStyle}>
<Item label="分组名称" name="menuName">
<Form
form={form}
name="groupform"
{...layout}
className={styles.formStyle}
onFinish={finish}
>
<Item
label="分组名称"
name="menuName"
rules={[
{
required: true,
message: '请输入分组名称',
},
]}
>
<Input />
</Item>
<Item label="分组别名" name="shortName">
<Input />
</Item>
{addType === 1 && (
<Item label="在线图标" name="imageUrl">
<Item
label="在线图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择在线图标',
},
]}
>
<PicturesWall />
</Item>
)}
{addType === 1 && (
<Item label="离线图标" name="offlineImgUrl">
<Item
label="离线图标"
name="offlineImgUrl"
rules={[
{
required: true,
message: '请选择离线图标',
},
]}
>
<PicturesWall />
</Item>
)}
{addType === 2 && (
<Item label="分组图标" name="imageUrl">
<Item
label="分组图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择分组图标',
},
]}
>
<PicturesWall />
</Item>
)}
......@@ -55,7 +100,7 @@ const AddForm = props => {
<Input />
</Item>
<Item wrapperCol={{ offset: 5 }} style={{ marginTop: '40px' }}>
<Button type="primary" onClick={() => submit()}>
<Button type="primary" htmlType="submit">
提交
</Button>
</Item>
......@@ -63,37 +108,87 @@ const AddForm = props => {
)}
{(addType === 3 || addType === 4) && (
<Form form={otherForm} {...layout} className={styles.formStyle}>
<Item label="菜单名称" name="menuName">
<Form
form={otherForm}
name="menuform"
{...layout}
onFinish={finish}
className={styles.formStyle}
>
<Item
label="菜单名称"
name="menuName"
rules={[
{
required: true,
message: '请输入菜单名称',
},
]}
>
<Input />
</Item>
<Item label="菜单别名" name="shortName">
<Input />
</Item>
{addType === 3 && (
<Item label="在线图标" name="imageUrl">
<Item
label="在线图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择在线图标',
},
]}
>
<PicturesWall />
</Item>
)}
{addType === 3 && (
<Item label="离线图标" name="offlineImgUrl">
{/* {otherForm.getFieldsValue().offlineImgUrl && <PicturesWall />} */}
<Item
label="离线图标"
name="offlineImgUrl"
rules={[
{
required: true,
message: '请选择离线图标',
},
]}
>
<PicturesWall />
</Item>
)}
{addType === 4 && (
<Item label="菜单图标" name="imageUrl">
<Item
label="菜单图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择菜单图标',
},
]}
>
<PicturesWall />
</Item>
)}
<Item label="功能路径" name="pageUrl">
<Item
label="功能路径"
name="pageUrl"
rules={[
{
required: true,
message: '请输入功能路径',
},
]}
>
<Input />
</Item>
<Item label="功能参数" name="funParam">
<Input />
</Item>
<Item wrapperCol={{ offset: 5 }} style={{ marginTop: '40px' }}>
<Button type="primary" onClick={() => submit()}>
<Button type="primary" htmlType="submit">
提交
</Button>
</Item>
......
......@@ -50,29 +50,74 @@ const EditForm = props => {
submitCallback(obj);
}
};
const onFinish = () => {
submit();
};
return (
<div>
{(nodeType === 1 || nodeType === 2) && (
<Form form={form} {...layout} className={styles.formStyle}>
<Item label="分组名称" name="menuName">
<Form
form={form}
name="editGroup"
{...layout}
className={styles.formStyle}
onFinish={onFinish}
>
<Item
label="分组名称"
name="menuName"
rules={[
{
required: true,
message: '请输入分组名称',
},
]}
>
<Input />
</Item>
<Item label="分组别名" name="shortName">
<Input />
</Item>
{nodeType === 1 && (
<Item label="在线图标" name="imageUrl">
<Item
label="在线图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择在线图标',
},
]}
>
<PicturesWall />
</Item>
)}
{nodeType === 1 && (
<Item label="离线图标" name="offlineImgUrl">
<Item
label="离线图标"
name="offlineImgUrl"
rules={[
{
required: true,
message: '请选择离线图标',
},
]}
>
<PicturesWall />
</Item>
)}
{nodeType === 2 && (
<Item label="分组图标" name="imageUrl">
<Item
label="分组图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择分组图标',
},
]}
>
<PicturesWall />
</Item>
)}
......@@ -80,7 +125,7 @@ const EditForm = props => {
<Input />
</Item>
<Item wrapperCol={{ offset: 5 }} style={{ marginTop: '40px' }}>
<Button type="primary" onClick={() => submit()}>
<Button type="primary" htmlType="submit">
提交
</Button>
</Item>
......@@ -88,37 +133,88 @@ const EditForm = props => {
)}
{(nodeType === 3 || nodeType === 4) && (
<Form form={otherForm} {...layout} className={styles.formStyle}>
<Item label="菜单名称" name="menuName">
<Form
form={otherForm}
name="editMenu"
{...layout}
onFinish={onFinish}
className={styles.formStyle}
>
<Item
label="菜单名称"
name="menuName"
rules={[
{
required: true,
message: '请输入菜单名称',
},
]}
>
<Input />
</Item>
<Item label="菜单别名" name="shortName">
<Input />
</Item>
{nodeType === 3 && (
<Item label="在线图标" name="imageUrl">
<Item
label="在线图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择在线图标',
},
]}
>
<PicturesWall />
</Item>
)}
{nodeType === 3 && (
<Item label="离线图标" name="offlineImgUrl">
<Item
label="离线图标"
name="offlineImgUrl"
rules={[
{
required: true,
message: '请选择离线图标',
},
]}
>
{/* {otherForm.getFieldsValue().offlineImgUrl && <PicturesWall />} */}
<PicturesWall />
</Item>
)}
{nodeType === 4 && (
<Item label="菜单图标" name="imageUrl">
<Item
label="菜单图标"
name="imageUrl"
rules={[
{
required: true,
message: '请选择菜单图标',
},
]}
>
<PicturesWall />
</Item>
)}
<Item label="功能路径" name="pageUrl">
<Item
label="功能路径"
name="pageUrl"
rules={[
{
required: true,
message: '请输入功能路径',
},
]}
>
<Input />
</Item>
<Item label="功能参数" name="funParam">
<Input />
</Item>
<Item wrapperCol={{ offset: 5 }} style={{ marginTop: '40px' }}>
<Button type="primary" onClick={() => submit()}>
<Button type="primary" htmlType="submit">
提交
</Button>
</Item>
......
......@@ -46,6 +46,7 @@ const MiniMenu = props => {
const [addFlag, setAddFlag] = useState('root'); // 设置新增标志
const [nodeObj, setNodeObj] = useState({});
const [addType, setAddType] = useState(''); // 添加下级类型
const [modalTitle, setModalTitle] = useState('');
// 获取菜单树
useEffect(() => {
updateTrees();
......@@ -121,10 +122,10 @@ const MiniMenu = props => {
icon:
obj.menuType !== 'MiniAppMenuThree' &&
obj.menuType !== 'MiniAppMenu' ? (
<FolderFilled />
) : (
<FileOutlined />
),
<FolderFilled />
) : (
<FileOutlined />
),
menuType: obj.menuType,
children: hasChild ? obj.children.map(i => mapTree(i)) : [],
};
......@@ -222,12 +223,14 @@ const MiniMenu = props => {
// 新增菜单组
const addMenuGroupTip = val => {
console.log(val, 'addgroup');
setModalTitle(val.text);
setNodeObj(val);
setAddVisible(true);
};
const rootAddGroup = () => {
setNodeObj('');
setNodeType(1);
setModalTitle('根目录');
setAddType(1);
setAddVisible(true);
};
......@@ -235,15 +238,17 @@ const MiniMenu = props => {
const addMenuTip = val => {
console.log(val, 'add');
setNodeObj(val);
setModalTitle(val.text);
setAddTwoVisible(true);
};
const rootAdd = () => {
setModalTitle('根目录');
setNodeObj('');
setNodeType(3);
setAddType(3);
setAddTwoVisible(true);
};
// 提交的回调
// 新增提交的回调
const submitCallback = (prop, item) => {
console.log(prop, item);
let obj = { ...prop };
......@@ -365,7 +370,7 @@ const MiniMenu = props => {
</div>
<Modal
visible={addVisible}
title="新增菜单组"
title={`在${modalTitle}下新增菜单组`}
bodyStyle={{ width: '100%', minHeight: '100px' }}
style={{ top: 20 }}
width="600px"
......@@ -387,7 +392,7 @@ const MiniMenu = props => {
</Modal>
<Modal
visible={addTwoVisible}
title="新增功能菜单"
title={`在${modalTitle}下新增功能菜单`}
bodyStyle={{ width: '100%', minHeight: '100px' }}
style={{ top: 20 }}
width="600px"
......@@ -417,6 +422,13 @@ const MiniMenu = props => {
/>
)}
</div>
<div
className={classnames({
[styles.rightBox]: true,
})}
>
关联角色
</div>
</div>
</Spin>
);
......
.box{
min-height: calc( 100vh - 172px);
display: flex;
}
.left{
......@@ -69,4 +68,11 @@
.fs{
font-size: 18px;
margin-left: 10px;
}
.rightBox{
min-width: 600px;
// width: 600px;
min-height: 100%;
border: 1px solid #eee;
padding: 10px;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment