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