feat(ide): 添加运行时数据展示组件
parent
010f8d99f0
commit
c6b1eb6e9a
@ -0,0 +1,101 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import dayjs from 'dayjs';
|
||||||
|
import { Tabs, Table, TableColumnProps, Input } from '@arco-design/web-react';
|
||||||
|
import { IconCheckCircleFill, IconLoading, IconCloseCircleFill } from '@arco-design/web-react/icon';
|
||||||
|
import { formatSeconds } from '@/utils/common';
|
||||||
|
|
||||||
|
const TabPane = Tabs.TabPane;
|
||||||
|
|
||||||
|
const columns: TableColumnProps[] = [
|
||||||
|
{
|
||||||
|
title: '节点',
|
||||||
|
dataIndex: 'name'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '时间',
|
||||||
|
render: (_: any, record) => (
|
||||||
|
<>
|
||||||
|
<span>开始{dayjs(record.startTime).format('YYYY-MM-DD HH:mm:ss')}</span>
|
||||||
|
<br></br>
|
||||||
|
{record.endTime > 0 && <span>结束{dayjs(record.endTime).format('YYYY-MM-DD HH:mm:ss')}</span>}
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '耗时',
|
||||||
|
dataIndex: 'duration',
|
||||||
|
render: (_: any, record) => (
|
||||||
|
record.duration > 1000 ?
|
||||||
|
<span>{formatSeconds((record.duration / 1000).toString())}</span> :
|
||||||
|
<span>{record.duration}毫秒</span>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '状态',
|
||||||
|
dataIndex: 'state',
|
||||||
|
render: (_: any, record) => (
|
||||||
|
<>
|
||||||
|
{record.state === 1 && <IconCheckCircleFill fontSize={30} style={{ color: 'rgb(var(--green-6))' }} />}
|
||||||
|
{record.state === 0 && <IconLoading fontSize={30} style={{ color: 'rgb(var(--arcoblue-4))' }} />}
|
||||||
|
{record.state === -1 && <IconCloseCircleFill fontSize={30} style={{ color: 'rgb(var(--red-6))' }} />}
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '输入参数',
|
||||||
|
dataIndex: 'input',
|
||||||
|
render: (_: any, record) => (
|
||||||
|
<span>{JSON.stringify(record.input)}</span>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '输出参数',
|
||||||
|
dataIndex: 'output',
|
||||||
|
render: (_: any, record) => (
|
||||||
|
<span>{JSON.stringify(record.output)}</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const RunTimeData = ({ logData }) => {
|
||||||
|
const [currentTab, setCurrentTab] = useState('0');
|
||||||
|
const [tabList, setTabList] = useState([]);
|
||||||
|
const [keyMap, setKeyMap] = useState({});
|
||||||
|
const [data, setData] = useState([]);
|
||||||
|
|
||||||
|
const onTabChange = (key) => {
|
||||||
|
setCurrentTab(key);
|
||||||
|
setData(keyMap[key]);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const tempMap = {};
|
||||||
|
const list = logData.map((item, index) => {
|
||||||
|
tempMap[index] = item.nodes;
|
||||||
|
return {
|
||||||
|
key: index,
|
||||||
|
title: item.parent
|
||||||
|
};
|
||||||
|
});
|
||||||
|
setKeyMap(tempMap);
|
||||||
|
setTabList(list);
|
||||||
|
}, [logData]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (tabList.length > 0) {
|
||||||
|
setData(keyMap[0]);
|
||||||
|
onTabChange(0); // 默认选中第一个
|
||||||
|
}
|
||||||
|
}, [tabList]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Tabs type="card" onChange={onTabChange} activeTab={currentTab}>
|
||||||
|
{tabList.map((item) => (<TabPane key={item.key} title={item.title}></TabPane>))}
|
||||||
|
</Tabs>
|
||||||
|
<Table columns={columns} data={data} />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default RunTimeData;
|
||||||
Loading…
Reference in New Issue