|
@@ -1,6 +1,8 @@
|
|
|
-import React, { useState } from 'react'
|
|
|
+import React, { useMemo, useState } from 'react'
|
|
|
import styled from 'styled-components'
|
|
|
-import { Tree, Tabs } from 'antd'
|
|
|
+import { Tree, Tabs, Table } from 'antd'
|
|
|
+import { getTableData, getTableSchema } from '../services'
|
|
|
+
|
|
|
const { DirectoryTree } = Tree
|
|
|
const { TabPane } = Tabs
|
|
|
|
|
@@ -23,36 +25,109 @@ const DatasourceWrapper = styled.div`
|
|
|
}
|
|
|
`
|
|
|
|
|
|
-const treeData = [
|
|
|
- {
|
|
|
- title: 'node1',
|
|
|
- key: '1',
|
|
|
- isLeaf: true,
|
|
|
- },
|
|
|
- {
|
|
|
- title: 'node2',
|
|
|
- key: '2',
|
|
|
- isLeaf: true,
|
|
|
- },
|
|
|
- {
|
|
|
- title: 'node3',
|
|
|
- key: '3',
|
|
|
- isLeaf: true,
|
|
|
- },
|
|
|
- {
|
|
|
- title: 'node4',
|
|
|
- key: '4',
|
|
|
- isLeaf: true,
|
|
|
- },
|
|
|
-]
|
|
|
+const DatasourceData = props => {
|
|
|
+ const { data, datasourceId } = props
|
|
|
+
|
|
|
+ // 表内容表头
|
|
|
+ const [contentCols, setContentCols] = useState([])
|
|
|
+ // 表内容表数据
|
|
|
+ const [contentData, setContentData] = useState([])
|
|
|
+ // 表内容表格Loading状态
|
|
|
+ const [contentLoading, setContentLoading] = useState(false)
|
|
|
+ // 表结构表头
|
|
|
+ const [schemaCols, setScheamCols] = useState([])
|
|
|
+ // 表结构表数据
|
|
|
+ const [schemaData, setScheamData] = useState([])
|
|
|
+ // 表结构表格Loading状态
|
|
|
+ const [schemaLoading, setSchemaLoading] = useState(false)
|
|
|
+
|
|
|
+ const treeData = useMemo(() => {
|
|
|
+ return data.map(item => {
|
|
|
+ return {
|
|
|
+ key: item,
|
|
|
+ title: item,
|
|
|
+ isLeaf: true,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }, [data])
|
|
|
|
|
|
-const DatasourceData = () => {
|
|
|
const onSelect = selectedKeys => {
|
|
|
- console.log('selected', selectedKeys)
|
|
|
+ const params = {
|
|
|
+ id: datasourceId,
|
|
|
+ table_name: selectedKeys,
|
|
|
+ }
|
|
|
+ fetchTableData(params)
|
|
|
+ fetchTableSchema(params)
|
|
|
+ }
|
|
|
+
|
|
|
+ const fetchTableData = async params => {
|
|
|
+ setContentLoading(true)
|
|
|
+ const { data } = await getTableData(params)
|
|
|
+ if (data.code) {
|
|
|
+ handleContent(data.data)
|
|
|
+ }
|
|
|
+ setContentLoading(false)
|
|
|
+ }
|
|
|
+
|
|
|
+ const fetchTableSchema = async params => {
|
|
|
+ setSchemaLoading(true)
|
|
|
+ const { data } = await getTableSchema(params)
|
|
|
+ if (data.code) {
|
|
|
+ handleSchema(data.data)
|
|
|
+ }
|
|
|
+ setSchemaLoading(false)
|
|
|
+ }
|
|
|
+
|
|
|
+ const handleContent = contentData => {
|
|
|
+ const colsList = contentData.header.map(item => {
|
|
|
+ return {
|
|
|
+ title: item,
|
|
|
+ dataIndex: item,
|
|
|
+ key: item,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ const dataList = contentData.content.map((item, index) => {
|
|
|
+ const row = {}
|
|
|
+ row['key'] = index + 1
|
|
|
+ item.forEach((val, index) => {
|
|
|
+ const title = contentData.header[index]
|
|
|
+ row[title] = val
|
|
|
+ })
|
|
|
+ return row
|
|
|
+ })
|
|
|
+ setContentCols(colsList)
|
|
|
+ setContentData(dataList)
|
|
|
}
|
|
|
|
|
|
- const onChange = key => {
|
|
|
- console.log('key', key)
|
|
|
+ const handleSchema = schemaData => {
|
|
|
+ const colsList = [
|
|
|
+ {
|
|
|
+ title: '序号',
|
|
|
+ dataIndex: 'order',
|
|
|
+ key: 'order',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '字段',
|
|
|
+ dataIndex: 'field',
|
|
|
+ key: 'field',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '属性',
|
|
|
+ dataIndex: 'attribute',
|
|
|
+ key: 'attribute',
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ const dataList = schemaData.map((item, index) => {
|
|
|
+ const row = {}
|
|
|
+ row['key'] = index + 1
|
|
|
+ const [order, field, attribute] = item.split(':')
|
|
|
+ row['order'] = order
|
|
|
+ row['field'] = field
|
|
|
+ row['attribute'] = attribute
|
|
|
+ return row
|
|
|
+ })
|
|
|
+ setScheamCols(colsList)
|
|
|
+ setScheamData(dataList)
|
|
|
}
|
|
|
|
|
|
const tree = (
|
|
@@ -66,12 +141,22 @@ const DatasourceData = () => {
|
|
|
return (
|
|
|
<DatasourceWrapper>
|
|
|
{tree}
|
|
|
- <Tabs onChange={onChange} className="datasource__table" size={'small'}>
|
|
|
- <TabPane tab="预览表内容" key="1">
|
|
|
- Content of Tab Pane 1
|
|
|
+ <Tabs className="datasource__table" size={'small'}>
|
|
|
+ <TabPane tab="预览表内容" key="content">
|
|
|
+ <Table
|
|
|
+ columns={contentCols}
|
|
|
+ dataSource={contentData}
|
|
|
+ bordered
|
|
|
+ loading={contentLoading}
|
|
|
+ />
|
|
|
</TabPane>
|
|
|
- <TabPane tab="预览表结构" key="2">
|
|
|
- Content of Tab Pane 2
|
|
|
+ <TabPane tab="预览表结构" key="schema">
|
|
|
+ <Table
|
|
|
+ columns={schemaCols}
|
|
|
+ dataSource={schemaData}
|
|
|
+ bordered
|
|
|
+ loading={schemaLoading}
|
|
|
+ />
|
|
|
</TabPane>
|
|
|
</Tabs>
|
|
|
</DatasourceWrapper>
|