|
@@ -1,11 +1,13 @@
|
|
|
import React, { useState, useEffect } from 'react'
|
|
|
import { Form, Select, Input, message } from 'antd'
|
|
|
-import { getTableNamesList } from '../services'
|
|
|
+import { getTableNamesList, getAilabList, getLakeTable } from '../services'
|
|
|
|
|
|
export default function StepOne({
|
|
|
drawDataForm,
|
|
|
dataSourceList,
|
|
|
updateTableStruct,
|
|
|
+ updateDrawAilabStruct,
|
|
|
+ updateDrawLakeStruct,
|
|
|
}) {
|
|
|
const [datasourceType, setDatasourceType] = useState(null)
|
|
|
|
|
@@ -13,6 +15,8 @@ export default function StepOne({
|
|
|
|
|
|
const [tableList, setTableList] = useState([])
|
|
|
|
|
|
+ const [dsType, setDsType] = useState(null)
|
|
|
+
|
|
|
// 获取数据源列表
|
|
|
useEffect(() => {
|
|
|
if (dataSourceList.length !== 0) {
|
|
@@ -31,6 +35,7 @@ export default function StepOne({
|
|
|
useEffect(() => {
|
|
|
const ds_id = drawDataForm.getFieldValue('datasource_name')
|
|
|
const table_name = drawDataForm.getFieldValue('datasource_table')
|
|
|
+ setDsType(drawDataForm.getFieldValue('datasource_type'))
|
|
|
if (ds_id) {
|
|
|
const type = dataSourceList.find(item => item.key === ds_id).datasource
|
|
|
setDatasourceType(type)
|
|
@@ -42,7 +47,7 @@ export default function StepOne({
|
|
|
// 选择数据源
|
|
|
const selectDatasource = async val => {
|
|
|
drawDataForm.setFieldValue('datasource_table', null)
|
|
|
- const type = dataSourceList.find(item => item.key === val).datasource
|
|
|
+ const type = dataSourceList.find(item => item.key === val)?.datasource
|
|
|
setDatasourceType(type)
|
|
|
const { data } = await getTableNamesList(val)
|
|
|
if (data.code === 200) {
|
|
@@ -56,10 +61,75 @@ export default function StepOne({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ const selectAilab = async () => {
|
|
|
+ const { data } = await getAilabList()
|
|
|
+ if (data.code === 200) {
|
|
|
+ const list = data.data.map((item, index) => {
|
|
|
+ return {
|
|
|
+ key: index,
|
|
|
+ label: item,
|
|
|
+ value: item,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ setTableList(list)
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const selectLake = async () => {
|
|
|
+ const { data } = await getLakeTable()
|
|
|
+ if (data.code === 200) {
|
|
|
+ const list = data.data.map((item, index) => {
|
|
|
+ return {
|
|
|
+ key: index,
|
|
|
+ label: item.table_name,
|
|
|
+ value: item.table_name,
|
|
|
+ table_path: item.table_path,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ setTableList(list)
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 选择表
|
|
|
const selectTable = val => {
|
|
|
- const ds_id = drawDataForm.getFieldValue('datasource_name')
|
|
|
- updateTableStruct(ds_id, val)
|
|
|
+ const currentTable = drawDataForm.getFieldValue('datasource_table')
|
|
|
+ switch (dsType) {
|
|
|
+ case 'datasource':
|
|
|
+ const ds_id = drawDataForm.getFieldValue('datasource_name')
|
|
|
+ updateTableStruct(ds_id, val)
|
|
|
+ break
|
|
|
+ case 'datalake':
|
|
|
+ updateDrawLakeStruct(currentTable)
|
|
|
+ drawDataForm.setFieldValue(
|
|
|
+ 'reader_path',
|
|
|
+ tableList.find(item => (item.value = currentTable)?.table_path)
|
|
|
+ )
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ updateDrawAilabStruct(currentTable)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const selectDsType = val => {
|
|
|
+ setDsType(val)
|
|
|
+ switch (val) {
|
|
|
+ case 'datasource':
|
|
|
+ selectDatasource(drawDataForm.getFieldValue('datasource_name'))
|
|
|
+ break
|
|
|
+ case 'datalake':
|
|
|
+ setDatasourceType('hive')
|
|
|
+ selectLake()
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ setDatasourceType('hive')
|
|
|
+ selectAilab()
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return (
|
|
@@ -88,23 +158,49 @@ export default function StepOne({
|
|
|
delimiter: '',
|
|
|
}}>
|
|
|
<Form.Item
|
|
|
- label="选择数据源"
|
|
|
- name="datasource_name"
|
|
|
+ label="数据源分类"
|
|
|
+ name="datasource_type"
|
|
|
rules={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择数据源!',
|
|
|
+ message: '请选择数据源分类!',
|
|
|
},
|
|
|
]}>
|
|
|
<Select
|
|
|
- showSearch
|
|
|
- optionFilterProp="label"
|
|
|
allowClear
|
|
|
- options={datasources}
|
|
|
- onSelect={selectDatasource}
|
|
|
- placeholder="请选择数据源"
|
|
|
+ options={
|
|
|
+ ['1', '2', '3'].includes(sessionStorage.getItem('role'))
|
|
|
+ ? [
|
|
|
+ { label: '自添加数据源', value: 'datasource' },
|
|
|
+ { label: 'AIlab', value: 'ailab' },
|
|
|
+ { label: '数据湖', value: 'datalake' },
|
|
|
+ ]
|
|
|
+ : [{ label: 'AIlab', value: 'ailab' }]
|
|
|
+ }
|
|
|
+ onSelect={selectDsType}
|
|
|
+ placeholder="请选择数据源分类"
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
+ {dsType === 'datasource' && (
|
|
|
+ <Form.Item
|
|
|
+ label="选择数据源"
|
|
|
+ name="datasource_name"
|
|
|
+ rules={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择数据源!',
|
|
|
+ },
|
|
|
+ ]}>
|
|
|
+ <Select
|
|
|
+ showSearch
|
|
|
+ optionFilterProp="label"
|
|
|
+ allowClear
|
|
|
+ options={datasources}
|
|
|
+ onSelect={selectDatasource}
|
|
|
+ placeholder="请选择数据源"
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ )}
|
|
|
<Form.Item
|
|
|
label="选择表"
|
|
|
name="datasource_table"
|