Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dlink
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhaowei
dlink
Commits
f195f7d7
Commit
f195f7d7
authored
Feb 18, 2022
by
godkaikai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
数据源flink配置片段和扩展phoenix
parent
bfdac7ca
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
134 additions
and
853 deletions
+134
-853
pom.xml
dlink-admin/pom.xml
+9
-2
DataBase.java
dlink-admin/src/main/java/com/dlink/model/DataBase.java
+2
-0
DataBaseServiceImpl.java
...main/java/com/dlink/service/impl/DataBaseServiceImpl.java
+3
-3
DataBaseMapper.xml
dlink-admin/src/main/resources/mapper/DataBaseMapper.xml
+0
-27
pom.xml
dlink-client/dlink-client-1.14/pom.xml
+22
-0
pom.xml
dlink-client/dlink-client-hadoop/pom.xml
+11
-0
dlink.sql
dlink-doc/sql/dlink.sql
+1
-0
dlink_history.sql
dlink-doc/sql/dlink_history.sql
+6
-1
PhoenixTest.java
...phoenix/src/test/java/com/dlink/metadata/PhoenixTest.java
+2
-1
phoenix.png
dlink-web/public/database/phoenix.png
+0
-0
DB.ts
dlink-web/src/pages/DataBase/DB.ts
+6
-2
DBForm.tsx
dlink-web/src/pages/DataBase/components/DBForm.tsx
+10
-58
DataBaseForm.tsx
dlink-web/src/pages/DataBase/components/DataBaseForm.tsx
+30
-16
DorisForm.tsx
dlink-web/src/pages/DataBase/components/DorisForm.tsx
+0
-181
MySqlForm.tsx
dlink-web/src/pages/DataBase/components/MySqlForm.tsx
+0
-181
OracleForm.tsx
dlink-web/src/pages/DataBase/components/OracleForm.tsx
+0
-181
SqlServerForm.tsx
dlink-web/src/pages/DataBase/components/SqlServerForm.tsx
+0
-181
data.d.ts
dlink-web/src/pages/DataBase/data.d.ts
+1
-16
service.ts
dlink-web/src/pages/DataBase/service.ts
+1
-3
pom.xml
pom.xml
+30
-0
No files found.
dlink-admin/pom.xml
View file @
f195f7d7
...
...
@@ -132,12 +132,19 @@
<!--<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-metadata-mysql</artifactId>
<version>0.6.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-metadata-doris</artifactId>
<version>0.6.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-metadata-phoenix</artifactId>
</dependency>
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.14.2-HBase-1.4</version>
</dependency>-->
<!--<dependency>
<groupId>org.apache.flink</groupId>
...
...
dlink-admin/src/main/java/com/dlink/model/DataBase.java
View file @
f195f7d7
...
...
@@ -40,6 +40,8 @@ public class DataBase extends SuperEntity {
private
String
flinkConfig
;
private
String
flinkTemplate
;
private
String
dbVersion
;
private
boolean
status
;
...
...
dlink-admin/src/main/java/com/dlink/service/impl/DataBaseServiceImpl.java
View file @
f195f7d7
...
...
@@ -96,7 +96,7 @@ public class DataBaseServiceImpl extends SuperServiceImpl<DataBaseMapper, DataBa
Driver
driver
=
Driver
.
build
(
dataBase
.
getDriverConfig
());
List
<
Column
>
columns
=
driver
.
listColumns
(
schemaName
,
tableName
);
Table
table
=
Table
.
build
(
tableName
,
schemaName
,
columns
);
return
table
.
getFlinkTableSql
(
dataBase
.
getName
(),
dataBase
.
getFlink
Config
());
return
table
.
getFlinkTableSql
(
dataBase
.
getName
(),
dataBase
.
getFlink
Template
());
}
@Override
...
...
@@ -126,7 +126,7 @@ public class DataBaseServiceImpl extends SuperServiceImpl<DataBaseMapper, DataBa
Driver
driver
=
Driver
.
build
(
dataBase
.
getDriverConfig
());
Table
table
=
driver
.
getTable
(
schemaName
,
tableName
);
SqlGeneration
sqlGeneration
=
new
SqlGeneration
();
sqlGeneration
.
setFlinkSqlCreate
(
table
.
getFlinkTableSql
(
dataBase
.
getName
(),
dataBase
.
getFlink
Config
()));
sqlGeneration
.
setFlinkSqlCreate
(
table
.
getFlinkTableSql
(
dataBase
.
getName
(),
dataBase
.
getFlink
Template
()));
sqlGeneration
.
setSqlSelect
(
table
.
getSqlSelect
(
dataBase
.
getName
()));
sqlGeneration
.
setSqlCreate
(
driver
.
getCreateTableSql
(
table
));
return
sqlGeneration
;
...
...
@@ -138,7 +138,7 @@ public class DataBaseServiceImpl extends SuperServiceImpl<DataBaseMapper, DataBa
List
<
String
>
list
=
new
ArrayList
<>();
for
(
DataBase
dataBase
:
dataBases
)
{
if
(
Asserts
.
isNotNullString
(
dataBase
.
getFlinkConfig
()))
{
list
.
add
(
dataBase
.
getName
()
+
":="
+
dataBase
.
getFlinkConfig
()
+
";\n"
);
list
.
add
(
dataBase
.
getName
()
+
":="
+
dataBase
.
getFlinkConfig
()
+
"
\n
;\n"
);
}
}
return
list
;
...
...
dlink-admin/src/main/resources/mapper/DataBaseMapper.xml
View file @
f195f7d7
...
...
@@ -2,33 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.dlink.mapper.DataBaseMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.dlink.model.DataBase"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"name"
property=
"name"
/>
<result
column=
"alias"
property=
"alias"
/>
<result
column=
"group_name"
property=
"groupName"
/>
<result
column=
"type"
property=
"type"
/>
<result
column=
"url"
property=
"url"
/>
<result
column=
"username"
property=
"username"
/>
<result
column=
"password"
property=
"password"
/>
<result
column=
"db_version"
property=
"dbVersion"
/>
<result
column=
"note"
property=
"note"
/>
<result
column=
"flink_config"
property=
"flinkConfig"
/>
<result
column=
"status"
property=
"status"
/>
<result
column=
"health_time"
property=
"healthTime"
/>
<result
column=
"heartbeat_time"
property=
"heartbeatTime"
/>
<result
column=
"enabled"
property=
"enabled"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
id, name, alias,group_name, type,url,username,password,db_version,note,flink_config,status,health_time,heartbeat_time, enabled, create_time, update_time
</sql>
<select
id=
"selectForProTable"
resultType=
"com.dlink.model.DataBase"
>
select
a.*
...
...
dlink-client/dlink-client-1.14/pom.xml
View file @
f195f7d7
...
...
@@ -16,6 +16,7 @@
<flink.version>
1.14.3
</flink.version>
<flinkcdc.version>
2.1.1
</flinkcdc.version>
<commons.version>
1.3.1
</commons.version>
<commons-lang3.version>
3.1
</commons-lang3.version>
<scala.binary.version>
2.11
</scala.binary.version>
<maven.compiler.source>
1.8
</maven.compiler.source>
<maven.compiler.target>
1.8
</maven.compiler.target>
...
...
@@ -47,6 +48,10 @@
<groupId>
org.slf4j
</groupId>
<artifactId>
slf4j-api
</artifactId>
</exclusion>
<exclusion>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
</exclusion>
</exclusions>
<version>
${flink.version}
</version>
</dependency>
...
...
@@ -80,6 +85,12 @@
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-client-hadoop
</artifactId>
<exclusions>
<exclusion>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.apache.flink
</groupId>
...
...
@@ -95,6 +106,12 @@
<groupId>
com.ververica
</groupId>
<artifactId>
flink-connector-mysql-cdc
</artifactId>
<version>
${flinkcdc.version}
</version>
<exclusions>
<exclusion>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.slf4j
</groupId>
...
...
@@ -109,5 +126,10 @@
<artifactId>
commons-cli
</artifactId>
<version>
${commons.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
${commons-lang3.version}
</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
dlink-client/dlink-client-hadoop/pom.xml
View file @
f195f7d7
...
...
@@ -14,6 +14,7 @@
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<!--<scope.type>provided</scope.type>-->
<hadoop.version>
3.1.0
</hadoop.version>
<commons-lang3.version>
3.1
</commons-lang3.version>
<scope.type>
compile
</scope.type>
</properties>
...
...
@@ -30,6 +31,10 @@
<groupId>
javax.servlet
</groupId>
<artifactId>
servlet-api
</artifactId>
</exclusion>
<exclusion>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
</exclusion>
</exclusions>
<version>
${hadoop.version}
</version>
</dependency>
...
...
@@ -103,6 +108,12 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
${commons-lang3.version}
</version>
</dependency>
</dependencies>
<build>
...
...
dlink-doc/sql/dlink.sql
View file @
f195f7d7
...
...
@@ -94,6 +94,7 @@ CREATE TABLE `dlink_database` (
`password`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'密码'
,
`note`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'注释'
,
`flink_config`
text
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'Flink配置'
,
`flink_template`
text
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'Flink模板'
,
`db_version`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'版本,如oracle的11g,hbase的2.2.3'
,
`status`
tinyint
(
1
)
NULL
DEFAULT
0
COMMENT
'状态'
,
`health_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'最近健康时间'
,
...
...
dlink-doc/sql/dlink_history.sql
View file @
f195f7d7
...
...
@@ -489,7 +489,7 @@ ADD COLUMN `env_id` int(11) NULL COMMENT '环境ID' AFTER `jar_id`;
-- 0.6.0-SNAPSHOT 2022-01-28
-- ----------------------------
ALTER
TABLE
`dlink_database`
ADD
COLUMN
`flink_config`
text
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
COMMENT
'
环境ID
'
AFTER
`note`
;
ADD
COLUMN
`flink_config`
text
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
COMMENT
'
Flink配置
'
AFTER
`note`
;
-- ----------------------------
-- 0.6.0-SNAPSHOT 2022-02-02
...
...
@@ -529,5 +529,10 @@ update dlink_catalogue set type = 'FlinkJar' where task_id in (select id as task
-- ----------------------------
ALTER
TABLE
`dlink_task`
ADD
COLUMN
`batch_model`
tinyint
(
1
)
NULL
DEFAULT
0
COMMENT
'使用批模式'
AFTER
`statement_set`
;
-- ----------------------------
-- 0.6.0-SNAPSHOT 2022-02-18
-- ----------------------------
ALTER
TABLE
`dlink_database`
ADD
COLUMN
`flink_template`
text
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
COMMENT
'Flink模板'
AFTER
`flink_config`
;
SET
FOREIGN_KEY_CHECKS
=
1
;
dlink-metadata/dlink-metadata-phoenix/src/test/java/com/dlink/metadata/PhoenixTest.java
View file @
f195f7d7
...
...
@@ -19,8 +19,9 @@ public class PhoenixTest {
@Before
public
void
init
()
{
DriverConfig
config
=
new
DriverConfig
();
config
.
setName
(
"phoenix"
);
config
.
setType
(
"Phoenix"
);
config
.
setUrl
(
"jdbc:phoenix:
xxx
"
);
config
.
setUrl
(
"jdbc:phoenix:
10.1.51.24:2181
"
);
try
{
driver
=
Driver
.
build
(
config
);
}
catch
(
Exception
e
)
{
...
...
dlink-web/public/database/phoenix.png
0 → 100644
View file @
f195f7d7
10.9 KB
dlink-web/src/pages/DataBase/DB.ts
View file @
f195f7d7
export
function
getDBImage
(
type
:
string
)
{
let
imageUrl
=
'database/'
;
switch
(
type
.
toLowerCase
()){
switch
(
type
.
toLowerCase
())
{
case
'mysql'
:
imageUrl
+=
'mysql.jpg'
;
break
;
...
...
@@ -20,8 +19,13 @@ export function getDBImage(type: string) {
case
'doris'
:
imageUrl
+=
'doris.jpeg'
;
break
;
case
'phoenix'
:
imageUrl
+=
'phoenix.png'
;
break
;
default
:
imageUrl
+=
'db.jpg'
;
}
return
imageUrl
;
}
export
const
FALLBACK
=
"data:image/png;base64,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"
;
dlink-web/src/pages/DataBase/components/DBForm.tsx
View file @
f195f7d7
import
React
,
{
useState
}
from
'react'
;
import
{
Modal
,
Image
,
message
,
List
,
Card
}
from
'antd'
;
import
{
Modal
,
Image
,
List
,
Card
}
from
'antd'
;
import
{
DataBaseItem
}
from
'../data.d'
;
import
{
connect
}
from
"umi"
;
import
{
StateType
}
from
"@/pages/FlinkSqlStudio/model"
;
import
{
getDBImage
}
from
"@/pages/DataBase/DB"
;
import
MysqlForm
from
"@/pages/DataBase/components/MySqlForm"
;
import
OracleForm
from
"@/pages/DataBase/components/OracleForm"
;
import
SqlServerForm
from
"@/pages/DataBase/components/SqlServerForm"
;
import
DorisForm
from
"@/pages/DataBase/components/DorisForm"
;
import
ClickHouseForm
from
"@/pages/DataBase/components/ClickHouseForm"
;
import
{
FALLBACK
,
getDBImage
}
from
"@/pages/DataBase/DB"
;
import
DataBaseForm
from
"@/pages/DataBase/components/DataBaseForm"
;
import
{
createOrModifyDatabase
,
testDatabaseConnect
}
from
"@/pages/DataBase/service"
;
export
type
UpdateFormProps
=
{
...
...
@@ -38,6 +34,9 @@ const data:any = [
{
type
:
'Doris'
,
},
{
type
:
'Phoenix'
,
},
];
const
DBForm
:
React
.
FC
<
UpdateFormProps
>
=
(
props
)
=>
{
...
...
@@ -52,10 +51,6 @@ const DBForm: React.FC<UpdateFormProps> = (props) => {
const
[
dbType
,
setDbType
]
=
useState
<
string
>
();
const
chooseOne
=
(
item
:
DataBaseItem
)
=>
{
/*if((item.type!='ClickHouse')&&(item.type !='MySql')){
message.success('敬请期待');
return;
}*/
setDbType
(
item
.
type
);
};
...
...
@@ -104,60 +99,17 @@ const DBForm: React.FC<UpdateFormProps> = (props) => {
height=
{
80
}
preview=
{
false
}
src=
{
getDBImage
(
item
.
type
)
}
fallback=
"data:image/png;base64,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"
fallback=
{
FALLBACK
}
/>
</
Card
>
</
List
.
Item
>
)
}
/>)
}
<
MysqlForm
onCancel=
{
()
=>
setDbType
(
undefined
)
}
modalVisible=
{
dbType
==
'MySql'
||
values
.
type
==
'MySql'
}
values=
{
values
}
onSubmit=
{
(
value
)
=>
{
onSubmit
(
value
);
}
}
onTest=
{
(
value
)
=>
{
onTest
(
value
);
}
}
/>
<
OracleForm
onCancel=
{
()
=>
setDbType
(
undefined
)
}
modalVisible=
{
dbType
==
'Oracle'
||
values
.
type
==
'Oracle'
}
values=
{
values
}
onSubmit=
{
(
value
)
=>
{
onSubmit
(
value
);
}
}
onTest=
{
(
value
)
=>
{
onTest
(
value
);
}
}
/>
<
SqlServerForm
onCancel=
{
()
=>
setDbType
(
undefined
)
}
modalVisible=
{
dbType
==
'SqlServer'
||
values
.
type
==
'SqlServer'
}
values=
{
values
}
onSubmit=
{
(
value
)
=>
{
onSubmit
(
value
);
}
}
onTest=
{
(
value
)
=>
{
onTest
(
value
);
}
}
/>
<
DorisForm
onCancel=
{
()
=>
setDbType
(
undefined
)
}
modalVisible=
{
dbType
==
'Doris'
||
values
.
type
==
'Doris'
}
values=
{
values
}
onSubmit=
{
(
value
)
=>
{
onSubmit
(
value
);
}
}
onTest=
{
(
value
)
=>
{
onTest
(
value
);
}
}
/>
<
ClickHouseForm
<
DataBaseForm
onCancel=
{
()
=>
setDbType
(
undefined
)
}
modalVisible=
{
dbType
==
'ClickHouse'
||
values
.
type
==
'ClickHouse'
}
modalVisible=
{
!!
values
.
type
||!!
dbType
}
type=
{
(
!
values
.
type
)?
dbType
:
values
.
type
}
values=
{
values
}
onSubmit=
{
(
value
)
=>
{
onSubmit
(
value
);
...
...
dlink-web/src/pages/DataBase/components/
ClickHou
seForm.tsx
→
dlink-web/src/pages/DataBase/components/
DataBa
seForm.tsx
View file @
f195f7d7
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Form
,
Button
,
Input
,
Space
,
Select
}
from
'antd'
;
import
{
Form
,
Button
,
Input
,
Space
,
Select
,
Divider
}
from
'antd'
;
import
Switch
from
"antd/es/switch"
;
import
TextArea
from
"antd/es/input/TextArea"
;
import
{
DataBaseItem
}
from
"@/pages/DataBase/data"
;
import
{
FALLBACK
,
getDBImage
}
from
"@/pages/DataBase/DB"
;
export
type
ClickHouseFormProps
=
{
...
...
@@ -12,6 +13,7 @@ export type ClickHouseFormProps = {
onTest
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
modalVisible
:
boolean
;
values
:
Partial
<
DataBaseItem
>
;
type
?:
string
;
};
const
Option
=
Select
.
Option
;
...
...
@@ -20,18 +22,18 @@ const formLayout = {
wrapperCol
:
{
span
:
13
},
};
const
ClickHou
seForm
:
React
.
FC
<
ClickHouseFormProps
>
=
(
props
)
=>
{
const
DataBa
seForm
:
React
.
FC
<
ClickHouseFormProps
>
=
(
props
)
=>
{
const
[
formVals
,
setFormVals
]
=
useState
<
Partial
<
DataBaseItem
>>
({
id
:
props
.
values
.
id
,
name
:
props
.
values
.
name
,
alias
:
props
.
values
.
alias
,
type
:
"ClickHouse"
,
groupName
:
props
.
values
.
groupName
,
url
:
props
.
values
.
url
,
username
:
props
.
values
.
username
,
password
:
props
.
values
.
password
,
dbVersion
:
props
.
values
.
dbVersion
,
flinkConfig
:
props
.
values
.
flinkConfig
,
flinkTemplate
:
props
.
values
.
flinkTemplate
,
note
:
props
.
values
.
note
,
enabled
:
props
.
values
.
enabled
,
});
...
...
@@ -43,18 +45,19 @@ const ClickHouseForm: React.FC<ClickHouseFormProps> = (props) => {
onCancel
:
handleModalVisible
,
modalVisible
,
values
,
type
}
=
props
;
const
submitForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleUpdate
({...
formVals
,
...
fieldsValue
});
setFormVals
({
type
,
...
formVals
,
...
fieldsValue
});
handleUpdate
({
type
,
...
formVals
,
...
fieldsValue
});
};
const
testForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleTest
({...
formVals
,
...
fieldsValue
});
setFormVals
({
type
,
...
formVals
,
...
fieldsValue
});
handleTest
({
type
,
...
formVals
,
...
fieldsValue
});
};
const
onReset
=
()
=>
{
...
...
@@ -64,6 +67,7 @@ const ClickHouseForm: React.FC<ClickHouseFormProps> = (props) => {
const
renderContent
=
(
formVals
)
=>
{
return
(
<>
<
Divider
>
{
type
}
</
Divider
>
<
Form
.
Item
name=
"name"
label=
"名称"
...
...
@@ -92,7 +96,7 @@ const ClickHouseForm: React.FC<ClickHouseFormProps> = (props) => {
name=
"url"
label=
"url"
>
<
TextArea
placeholder=
"
jdbc:clickhouse://{host}:{port}/{database}
"
allowClear
<
TextArea
placeholder=
"
请输入格式正确的 url 连接
"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
...
...
@@ -109,9 +113,16 @@ const ClickHouseForm: React.FC<ClickHouseFormProps> = (props) => {
</
Form
.
Item
>
<
Form
.
Item
name=
"flinkConfig"
label=
"Flink
With 模板
"
label=
"Flink
连接配置
"
>
<
TextArea
placeholder=
"'connector' = 'jdbc',..."
allowClear
<
TextArea
placeholder=
"请指定 Flink With 的默认配置"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"flinkTemplate"
label=
"Flink 连接模板"
>
<
TextArea
placeholder=
"请指定 Flink With 的生成模板"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
...
...
@@ -149,17 +160,20 @@ const ClickHouseForm: React.FC<ClickHouseFormProps> = (props) => {
password
:
formVals
.
password
,
note
:
formVals
.
note
,
flinkConfig
:
formVals
.
flinkConfig
,
flinkTemplate
:
formVals
.
flinkTemplate
,
enabled
:
formVals
.
enabled
,
}
}
>
{
renderContent
(
formVals
)
}
<
Form
.
Item
wrapperCol=
{
{
offset
:
8
,
span
:
16
}
}
>
<
Space
>
<
Button
htmlType=
"button"
onClick=
{
()
=>
{
handleModalVisible
(
false
)
}
}
>
返回
</
Button
>
{
!
formVals
.
id
?
<
Button
htmlType=
"button"
onClick=
{
()
=>
{
handleModalVisible
(
false
)
}
}
>
返回
</
Button
>:
undefined
}
<
Button
htmlType=
"button"
onClick=
{
onReset
}
>
重置
</
Button
>
...
...
@@ -178,4 +192,4 @@ const ClickHouseForm: React.FC<ClickHouseFormProps> = (props) => {
);
};
export
default
ClickHou
seForm
;
export
default
DataBa
seForm
;
dlink-web/src/pages/DataBase/components/DorisForm.tsx
deleted
100644 → 0
View file @
bfdac7ca
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Form
,
Button
,
Input
,
Space
,
Select
}
from
'antd'
;
import
Switch
from
"antd/es/switch"
;
import
TextArea
from
"antd/es/input/TextArea"
;
import
{
DataBaseItem
}
from
"@/pages/DataBase/data"
;
export
type
DorisFormProps
=
{
onCancel
:
(
flag
?:
boolean
,
formVals
?:
Partial
<
DataBaseItem
>
)
=>
void
;
onSubmit
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
onTest
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
modalVisible
:
boolean
;
values
:
Partial
<
DataBaseItem
>
;
};
const
Option
=
Select
.
Option
;
const
formLayout
=
{
labelCol
:
{
span
:
7
},
wrapperCol
:
{
span
:
13
},
};
const
DorisForm
:
React
.
FC
<
DorisFormProps
>
=
(
props
)
=>
{
const
[
formVals
,
setFormVals
]
=
useState
<
Partial
<
DataBaseItem
>>
({
id
:
props
.
values
.
id
,
name
:
props
.
values
.
name
,
alias
:
props
.
values
.
alias
,
type
:
"Doris"
,
groupName
:
props
.
values
.
groupName
,
url
:
props
.
values
.
url
,
username
:
props
.
values
.
username
,
password
:
props
.
values
.
password
,
dbVersion
:
props
.
values
.
dbVersion
,
flinkConfig
:
props
.
values
.
flinkConfig
,
note
:
props
.
values
.
note
,
enabled
:
props
.
values
.
enabled
,
});
const
[
form
]
=
Form
.
useForm
();
const
{
onSubmit
:
handleUpdate
,
onTest
:
handleTest
,
onCancel
:
handleModalVisible
,
modalVisible
,
values
,
}
=
props
;
const
submitForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleUpdate
({...
formVals
,
...
fieldsValue
});
};
const
testForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleTest
({...
formVals
,
...
fieldsValue
});
};
const
onReset
=
()
=>
{
form
.
resetFields
();
};
const
renderContent
=
(
formVals
)
=>
{
return
(
<>
<
Form
.
Item
name=
"name"
label=
"名称"
rules=
{
[{
required
:
true
,
message
:
'请输入名称!'
}]
}
>
<
Input
placeholder=
"请输入唯一英文标识"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"alias"
label=
"别名"
>
<
Input
placeholder=
"请输入别名"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"groupName"
label=
"分组类型"
>
<
Select
>
<
Option
value=
"来源"
>
来源
</
Option
>
<
Option
value=
"数仓"
>
数仓
</
Option
>
<
Option
value=
"应用"
>
应用
</
Option
>
<
Option
value=
"备份"
>
备份
</
Option
>
<
Option
value=
"其他"
>
其他
</
Option
>
</
Select
>
</
Form
.
Item
>
<
Form
.
Item
name=
"url"
label=
"url"
>
<
TextArea
placeholder=
"jdbc:mysql://{host}:{port}/{database}"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"username"
label=
"用户名"
>
<
Input
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"password"
label=
"密码"
>
<
Input
.
Password
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"flinkConfig"
label=
"Flink With 模板"
>
<
TextArea
placeholder=
"'connector' = 'doris',..."
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"note"
label=
"注释"
>
<
Input
placeholder=
"请输入"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"enabled"
label=
"是否启用"
>
<
Switch
checkedChildren=
"启用"
unCheckedChildren=
"禁用"
defaultChecked=
{
formVals
.
enabled
}
/>
</
Form
.
Item
>
</>
);
};
return
(
<>
{
modalVisible
&&
(
<>
<
Form
{
...
formLayout
}
form=
{
form
}
initialValues=
{
{
id
:
formVals
.
id
,
name
:
formVals
.
name
,
alias
:
formVals
.
alias
,
type
:
formVals
.
type
,
groupName
:
formVals
.
groupName
,
url
:
formVals
.
url
,
username
:
formVals
.
username
,
password
:
formVals
.
password
,
note
:
formVals
.
note
,
flinkConfig
:
formVals
.
flinkConfig
,
enabled
:
formVals
.
enabled
,
}
}
>
{
renderContent
(
formVals
)
}
<
Form
.
Item
wrapperCol=
{
{
offset
:
8
,
span
:
16
}
}
>
<
Space
>
<
Button
htmlType=
"button"
onClick=
{
()
=>
{
handleModalVisible
(
false
)
}
}
>
返回
</
Button
>
<
Button
htmlType=
"button"
onClick=
{
onReset
}
>
重置
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
testForm
}
>
测试
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
submitForm
}
>
保存
</
Button
>
</
Space
>
</
Form
.
Item
>
</
Form
>
</>
)
}
</>
);
};
export
default
DorisForm
;
dlink-web/src/pages/DataBase/components/MySqlForm.tsx
deleted
100644 → 0
View file @
bfdac7ca
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Form
,
Button
,
Input
,
Space
,
Select
}
from
'antd'
;
import
Switch
from
"antd/es/switch"
;
import
TextArea
from
"antd/es/input/TextArea"
;
import
{
DataBaseItem
}
from
"@/pages/DataBase/data"
;
export
type
MysqlFormProps
=
{
onCancel
:
(
flag
?:
boolean
,
formVals
?:
Partial
<
DataBaseItem
>
)
=>
void
;
onSubmit
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
onTest
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
modalVisible
:
boolean
;
values
:
Partial
<
DataBaseItem
>
;
};
const
Option
=
Select
.
Option
;
const
formLayout
=
{
labelCol
:
{
span
:
7
},
wrapperCol
:
{
span
:
13
},
};
const
MysqlForm
:
React
.
FC
<
MysqlFormProps
>
=
(
props
)
=>
{
const
[
formVals
,
setFormVals
]
=
useState
<
Partial
<
DataBaseItem
>>
({
id
:
props
.
values
.
id
,
name
:
props
.
values
.
name
,
alias
:
props
.
values
.
alias
,
type
:
"MySql"
,
groupName
:
props
.
values
.
groupName
,
url
:
props
.
values
.
url
,
username
:
props
.
values
.
username
,
password
:
props
.
values
.
password
,
dbVersion
:
props
.
values
.
dbVersion
,
flinkConfig
:
props
.
values
.
flinkConfig
,
note
:
props
.
values
.
note
,
enabled
:
props
.
values
.
enabled
,
});
const
[
form
]
=
Form
.
useForm
();
const
{
onSubmit
:
handleUpdate
,
onTest
:
handleTest
,
onCancel
:
handleModalVisible
,
modalVisible
,
values
,
}
=
props
;
const
submitForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleUpdate
({...
formVals
,
...
fieldsValue
});
};
const
testForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleTest
({...
formVals
,
...
fieldsValue
});
};
const
onReset
=
()
=>
{
form
.
resetFields
();
};
const
renderContent
=
(
formVals
)
=>
{
return
(
<>
<
Form
.
Item
name=
"name"
label=
"名称"
rules=
{
[{
required
:
true
,
message
:
'请输入名称!'
}]
}
>
<
Input
placeholder=
"请输入唯一英文标识"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"alias"
label=
"别名"
>
<
Input
placeholder=
"请输入别名"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"groupName"
label=
"分组类型"
>
<
Select
>
<
Option
value=
"来源"
>
来源
</
Option
>
<
Option
value=
"数仓"
>
数仓
</
Option
>
<
Option
value=
"应用"
>
应用
</
Option
>
<
Option
value=
"备份"
>
备份
</
Option
>
<
Option
value=
"其他"
>
其他
</
Option
>
</
Select
>
</
Form
.
Item
>
<
Form
.
Item
name=
"url"
label=
"url"
>
<
TextArea
placeholder=
"jdbc:mysql://{host}:{port}/{database}"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"username"
label=
"用户名"
>
<
Input
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"password"
label=
"密码"
>
<
Input
.
Password
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"flinkConfig"
label=
"Flink With 模板"
>
<
TextArea
placeholder=
"'connector' = 'jdbc',..."
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"note"
label=
"注释"
>
<
Input
placeholder=
"请输入"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"enabled"
label=
"是否启用"
>
<
Switch
checkedChildren=
"启用"
unCheckedChildren=
"禁用"
defaultChecked=
{
formVals
.
enabled
}
/>
</
Form
.
Item
>
</>
);
};
return
(
<>
{
modalVisible
&&
(
<>
<
Form
{
...
formLayout
}
form=
{
form
}
initialValues=
{
{
id
:
formVals
.
id
,
name
:
formVals
.
name
,
alias
:
formVals
.
alias
,
type
:
formVals
.
type
,
groupName
:
formVals
.
groupName
,
url
:
formVals
.
url
,
username
:
formVals
.
username
,
password
:
formVals
.
password
,
note
:
formVals
.
note
,
flinkConfig
:
formVals
.
flinkConfig
,
enabled
:
formVals
.
enabled
,
}
}
>
{
renderContent
(
formVals
)
}
<
Form
.
Item
wrapperCol=
{
{
offset
:
8
,
span
:
16
}
}
>
<
Space
>
<
Button
htmlType=
"button"
onClick=
{
()
=>
{
handleModalVisible
(
false
)
}
}
>
返回
</
Button
>
<
Button
htmlType=
"button"
onClick=
{
onReset
}
>
重置
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
testForm
}
>
测试
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
submitForm
}
>
保存
</
Button
>
</
Space
>
</
Form
.
Item
>
</
Form
>
</>
)
}
</>
);
};
export
default
MysqlForm
;
dlink-web/src/pages/DataBase/components/OracleForm.tsx
deleted
100644 → 0
View file @
bfdac7ca
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Form
,
Button
,
Input
,
Space
,
Select
}
from
'antd'
;
import
Switch
from
"antd/es/switch"
;
import
TextArea
from
"antd/es/input/TextArea"
;
import
{
DataBaseItem
}
from
"@/pages/DataBase/data"
;
export
type
OracleFormProps
=
{
onCancel
:
(
flag
?:
boolean
,
formVals
?:
Partial
<
DataBaseItem
>
)
=>
void
;
onSubmit
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
onTest
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
modalVisible
:
boolean
;
values
:
Partial
<
DataBaseItem
>
;
};
const
Option
=
Select
.
Option
;
const
formLayout
=
{
labelCol
:
{
span
:
7
},
wrapperCol
:
{
span
:
13
},
};
const
OracleForm
:
React
.
FC
<
OracleFormProps
>
=
(
props
)
=>
{
const
[
formVals
,
setFormVals
]
=
useState
<
Partial
<
DataBaseItem
>>
({
id
:
props
.
values
.
id
,
name
:
props
.
values
.
name
,
alias
:
props
.
values
.
alias
,
type
:
"Oracle"
,
groupName
:
props
.
values
.
groupName
,
url
:
props
.
values
.
url
,
username
:
props
.
values
.
username
,
password
:
props
.
values
.
password
,
dbVersion
:
props
.
values
.
dbVersion
,
flinkConfig
:
props
.
values
.
flinkConfig
,
note
:
props
.
values
.
note
,
enabled
:
props
.
values
.
enabled
,
});
const
[
form
]
=
Form
.
useForm
();
const
{
onSubmit
:
handleUpdate
,
onTest
:
handleTest
,
onCancel
:
handleModalVisible
,
modalVisible
,
values
,
}
=
props
;
const
submitForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleUpdate
({...
formVals
,
...
fieldsValue
});
};
const
testForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleTest
({...
formVals
,
...
fieldsValue
});
};
const
onReset
=
()
=>
{
form
.
resetFields
();
};
const
renderContent
=
(
formVals
)
=>
{
return
(
<>
<
Form
.
Item
name=
"name"
label=
"名称"
rules=
{
[{
required
:
true
,
message
:
'请输入名称!'
}]
}
>
<
Input
placeholder=
"请输入唯一英文标识"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"alias"
label=
"别名"
>
<
Input
placeholder=
"请输入别名"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"groupName"
label=
"分组类型"
>
<
Select
>
<
Option
value=
"来源"
>
来源
</
Option
>
<
Option
value=
"数仓"
>
数仓
</
Option
>
<
Option
value=
"应用"
>
应用
</
Option
>
<
Option
value=
"备份"
>
备份
</
Option
>
<
Option
value=
"其他"
>
其他
</
Option
>
</
Select
>
</
Form
.
Item
>
<
Form
.
Item
name=
"url"
label=
"url"
>
<
TextArea
placeholder=
"jdbc:oracle:thin:@{host}:{port}:{database}"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"username"
label=
"用户名"
>
<
Input
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"password"
label=
"密码"
>
<
Input
.
Password
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"flinkConfig"
label=
"Flink With 模板"
>
<
TextArea
placeholder=
"'connector' = 'jdbc',..."
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"note"
label=
"注释"
>
<
Input
placeholder=
"请输入"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"enabled"
label=
"是否启用"
>
<
Switch
checkedChildren=
"启用"
unCheckedChildren=
"禁用"
defaultChecked=
{
formVals
.
enabled
}
/>
</
Form
.
Item
>
</>
);
};
return
(
<>
{
modalVisible
&&
(
<>
<
Form
{
...
formLayout
}
form=
{
form
}
initialValues=
{
{
id
:
formVals
.
id
,
name
:
formVals
.
name
,
alias
:
formVals
.
alias
,
type
:
formVals
.
type
,
groupName
:
formVals
.
groupName
,
url
:
formVals
.
url
,
username
:
formVals
.
username
,
password
:
formVals
.
password
,
note
:
formVals
.
note
,
flinkConfig
:
formVals
.
flinkConfig
,
enabled
:
formVals
.
enabled
,
}
}
>
{
renderContent
(
formVals
)
}
<
Form
.
Item
wrapperCol=
{
{
offset
:
8
,
span
:
16
}
}
>
<
Space
>
<
Button
htmlType=
"button"
onClick=
{
()
=>
{
handleModalVisible
(
false
)
}
}
>
返回
</
Button
>
<
Button
htmlType=
"button"
onClick=
{
onReset
}
>
重置
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
testForm
}
>
测试
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
submitForm
}
>
保存
</
Button
>
</
Space
>
</
Form
.
Item
>
</
Form
>
</>
)
}
</>
);
};
export
default
OracleForm
;
dlink-web/src/pages/DataBase/components/SqlServerForm.tsx
deleted
100644 → 0
View file @
bfdac7ca
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Form
,
Button
,
Input
,
Space
,
Select
}
from
'antd'
;
import
Switch
from
"antd/es/switch"
;
import
TextArea
from
"antd/es/input/TextArea"
;
import
{
DataBaseItem
}
from
"@/pages/DataBase/data"
;
export
type
SqlServerFormProps
=
{
onCancel
:
(
flag
?:
boolean
,
formVals
?:
Partial
<
DataBaseItem
>
)
=>
void
;
onSubmit
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
onTest
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
modalVisible
:
boolean
;
values
:
Partial
<
DataBaseItem
>
;
};
const
Option
=
Select
.
Option
;
const
formLayout
=
{
labelCol
:
{
span
:
7
},
wrapperCol
:
{
span
:
13
},
};
const
SqlServerForm
:
React
.
FC
<
SqlServerFormProps
>
=
(
props
)
=>
{
const
[
formVals
,
setFormVals
]
=
useState
<
Partial
<
DataBaseItem
>>
({
id
:
props
.
values
.
id
,
name
:
props
.
values
.
name
,
alias
:
props
.
values
.
alias
,
type
:
"SqlServer"
,
groupName
:
props
.
values
.
groupName
,
url
:
props
.
values
.
url
,
username
:
props
.
values
.
username
,
password
:
props
.
values
.
password
,
dbVersion
:
props
.
values
.
dbVersion
,
flinkConfig
:
props
.
values
.
flinkConfig
,
note
:
props
.
values
.
note
,
enabled
:
props
.
values
.
enabled
,
});
const
[
form
]
=
Form
.
useForm
();
const
{
onSubmit
:
handleUpdate
,
onTest
:
handleTest
,
onCancel
:
handleModalVisible
,
modalVisible
,
values
,
}
=
props
;
const
submitForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleUpdate
({...
formVals
,
...
fieldsValue
});
};
const
testForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({...
formVals
,
...
fieldsValue
});
handleTest
({...
formVals
,
...
fieldsValue
});
};
const
onReset
=
()
=>
{
form
.
resetFields
();
};
const
renderContent
=
(
formVals
)
=>
{
return
(
<>
<
Form
.
Item
name=
"name"
label=
"名称"
rules=
{
[{
required
:
true
,
message
:
'请输入名称!'
}]
}
>
<
Input
placeholder=
"请输入唯一英文标识"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"alias"
label=
"别名"
>
<
Input
placeholder=
"请输入别名"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"groupName"
label=
"分组类型"
>
<
Select
>
<
Option
value=
"来源"
>
来源
</
Option
>
<
Option
value=
"数仓"
>
数仓
</
Option
>
<
Option
value=
"应用"
>
应用
</
Option
>
<
Option
value=
"备份"
>
备份
</
Option
>
<
Option
value=
"其他"
>
其他
</
Option
>
</
Select
>
</
Form
.
Item
>
<
Form
.
Item
name=
"url"
label=
"url"
>
<
TextArea
placeholder=
"jdbc:sqlserver://{host}:{port};DatabaseName={database}"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"username"
label=
"用户名"
>
<
Input
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"password"
label=
"密码"
>
<
Input
.
Password
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"flinkConfig"
label=
"Flink With 模板"
>
<
TextArea
placeholder=
"'connector' = 'jdbc',..."
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"note"
label=
"注释"
>
<
Input
placeholder=
"请输入"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"enabled"
label=
"是否启用"
>
<
Switch
checkedChildren=
"启用"
unCheckedChildren=
"禁用"
defaultChecked=
{
formVals
.
enabled
}
/>
</
Form
.
Item
>
</>
);
};
return
(
<>
{
modalVisible
&&
(
<>
<
Form
{
...
formLayout
}
form=
{
form
}
initialValues=
{
{
id
:
formVals
.
id
,
name
:
formVals
.
name
,
alias
:
formVals
.
alias
,
type
:
formVals
.
type
,
groupName
:
formVals
.
groupName
,
url
:
formVals
.
url
,
username
:
formVals
.
username
,
password
:
formVals
.
password
,
note
:
formVals
.
note
,
flinkConfig
:
formVals
.
flinkConfig
,
enabled
:
formVals
.
enabled
,
}
}
>
{
renderContent
(
formVals
)
}
<
Form
.
Item
wrapperCol=
{
{
offset
:
8
,
span
:
16
}
}
>
<
Space
>
<
Button
htmlType=
"button"
onClick=
{
()
=>
{
handleModalVisible
(
false
)
}
}
>
返回
</
Button
>
<
Button
htmlType=
"button"
onClick=
{
onReset
}
>
重置
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
testForm
}
>
测试
</
Button
>
<
Button
type=
"primary"
htmlType=
"button"
onClick=
{
submitForm
}
>
保存
</
Button
>
</
Space
>
</
Form
.
Item
>
</
Form
>
</>
)
}
</>
);
};
export
default
SqlServerForm
;
dlink-web/src/pages/DataBase/data.d.ts
View file @
f195f7d7
...
...
@@ -9,6 +9,7 @@ export type DataBaseItem = {
password
:
string
,
note
:
string
,
flinkConfig
:
string
,
flinkTemplate
:
string
,
dbVersion
:
string
,
status
:
boolean
,
healthTime
:
Date
,
...
...
@@ -18,22 +19,6 @@ export type DataBaseItem = {
updateTime
:
Date
,
};
export
type
DataBaseFormProps
=
{
name
:
string
,
alias
:
string
,
groupName
:
string
,
type
:
string
,
ip
:
string
,
port
:
number
,
url
:
string
,
username
:
string
,
password
:
string
,
note
:
string
,
flinkConfig
:
string
,
dbVersion
:
string
,
enabled
:
boolean
,
}
export
type
Column
=
{
name
:
string
,
type
:
string
,
...
...
dlink-web/src/pages/DataBase/service.ts
View file @
f195f7d7
import
request
from
"umi-request"
;
import
{
getInfoById
,
handleAddOrUpdate
,
handleOption
,
postAll
}
from
"@/components/Common/crud"
;
import
{
getInfoById
,
handleAddOrUpdate
,
postAll
}
from
"@/components/Common/crud"
;
import
{
DataBaseItem
}
from
"@/pages/DataBase/data"
;
import
{
message
}
from
"antd"
;
import
{
Protocol
}
from
"puppeteer-core"
;
export
async
function
createOrModifyDatabase
(
databse
:
DataBaseItem
)
{
return
handleAddOrUpdate
(
'/api/database'
,
databse
);
...
...
pom.xml
View file @
f195f7d7
...
...
@@ -230,6 +230,36 @@
<artifactId>
dlink-metadata-mysql
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-metadata-oracle
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-metadata-sqlserver
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-metadata-postgresql
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-metadata-clickhouse
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-metadata-doris
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-metadata-phoenix
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-gateway
</artifactId>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment