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
fe14f1dd
Commit
fe14f1dd
authored
Jul 22, 2021
by
wenmo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chooseDB
parent
ae0d397c
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
336 additions
and
39 deletions
+336
-39
DataBase.java
dlink-admin/src/main/java/com/dlink/model/DataBase.java
+6
-0
DataBaseMapper.xml
dlink-admin/src/main/resources/mapper/DataBaseMapper.xml
+3
-1
dlink.sql
dlink-doc/sql/dlink.sql
+2
-0
clickhouse.png
dlink-web/public/database/clickhouse.png
+0
-0
mysql.jpg
dlink-web/public/database/mysql.jpg
+0
-0
oracle.jpg
dlink-web/public/database/oracle.jpg
+0
-0
postgresql.jpg
dlink-web/public/database/postgresql.jpg
+0
-0
SessionForm.tsx
...StudioLeftTool/StudioConnector/components/SessionForm.tsx
+0
-4
DB.ts
dlink-web/src/pages/DataBase/DB.ts
+21
-0
ChooseDB.tsx
dlink-web/src/pages/DataBase/components/ChooseDB.tsx
+97
-0
MySqlForm.tsx
dlink-web/src/pages/DataBase/components/MySqlForm.tsx
+133
-0
data.d.ts
dlink-web/src/pages/DataBase/data.d.ts
+19
-1
index.tsx
dlink-web/src/pages/DataBase/index.tsx
+55
-33
No files found.
dlink-admin/src/main/java/com/dlink/model/DataBase.java
View file @
fe14f1dd
...
@@ -5,6 +5,8 @@ import com.dlink.db.model.SuperEntity;
...
@@ -5,6 +5,8 @@ import com.dlink.db.model.SuperEntity;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
java.time.LocalDateTime
;
/**
/**
* DataBase
* DataBase
*
*
...
@@ -39,4 +41,8 @@ public class DataBase extends SuperEntity {
...
@@ -39,4 +41,8 @@ public class DataBase extends SuperEntity {
private
String
dbVersion
;
private
String
dbVersion
;
private
boolean
status
;
private
boolean
status
;
private
LocalDateTime
healthTime
;
private
LocalDateTime
heartbeatTime
;
}
}
dlink-admin/src/main/resources/mapper/DataBaseMapper.xml
View file @
fe14f1dd
...
@@ -17,6 +17,8 @@
...
@@ -17,6 +17,8 @@
<result
column=
"db_version"
property=
"dbVersion"
/>
<result
column=
"db_version"
property=
"dbVersion"
/>
<result
column=
"note"
property=
"note"
/>
<result
column=
"note"
property=
"note"
/>
<result
column=
"status"
property=
"status"
/>
<result
column=
"status"
property=
"status"
/>
<result
column=
"health_time"
property=
"healthTime"
/>
<result
column=
"heartbeat_time"
property=
"heartbeatTime"
/>
<result
column=
"enabled"
property=
"enabled"
/>
<result
column=
"enabled"
property=
"enabled"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
...
@@ -24,7 +26,7 @@
...
@@ -24,7 +26,7 @@
<!-- 通用查询结果列 -->
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
<sql
id=
"Base_Column_List"
>
id, name, alias,group_name, type,ip,port, url,username,password,db_version,note,status, enabled, create_time, update_time
id, name, alias,group_name, type,ip,port, url,username,password,db_version,note,status,
health_time,heartbeat_time,
enabled, create_time, update_time
</sql>
</sql>
...
...
dlink-doc/sql/dlink.sql
View file @
fe14f1dd
...
@@ -349,6 +349,8 @@ CREATE TABLE `dlink_database` (
...
@@ -349,6 +349,8 @@ CREATE TABLE `dlink_database` (
`note`
varchar
(
255
)
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
'注释'
,
`db_version`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'版本,如oracle的11g,hbase的2.2.3'
,
`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
COMMENT
'状态'
,
`status`
tinyint
(
1
)
NULL
COMMENT
'状态'
,
`health_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'最近健康时间'
,
`heartbeat_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'最近心跳检测时间'
,
`enabled`
tinyint
(
1
)
NOT
NULL
DEFAULT
1
COMMENT
'启用'
,
`enabled`
tinyint
(
1
)
NOT
NULL
DEFAULT
1
COMMENT
'启用'
,
`create_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`create_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'最近修改时间'
,
`update_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'最近修改时间'
,
...
...
dlink-web/public/database/clickhouse.png
0 → 100644
View file @
fe14f1dd
11 KB
dlink-web/public/database/mysql.jpg
0 → 100644
View file @
fe14f1dd
29.5 KB
dlink-web/public/database/oracle.jpg
0 → 100644
View file @
fe14f1dd
9.38 KB
dlink-web/public/database/postgresql.jpg
0 → 100644
View file @
fe14f1dd
8.78 KB
dlink-web/src/components/Studio/StudioLeftTool/StudioConnector/components/SessionForm.tsx
View file @
fe14f1dd
...
@@ -26,10 +26,6 @@ const SessionForm: React.FC<UpdateFormProps> = (props) => {
...
@@ -26,10 +26,6 @@ const SessionForm: React.FC<UpdateFormProps> = (props) => {
type
:
props
.
values
.
type
,
type
:
props
.
values
.
type
,
useRemote
:
props
.
values
.
useRemote
,
useRemote
:
props
.
values
.
useRemote
,
clusterId
:
props
.
values
.
clusterId
,
clusterId
:
props
.
values
.
clusterId
,
clusterName
:
props
.
values
.
clusterName
,
address
:
props
.
values
.
address
,
createUser
:
props
.
values
.
createUser
,
createTime
:
props
.
values
.
createTime
,
});
});
const
{
cluster
}
=
props
;
const
{
cluster
}
=
props
;
...
...
dlink-web/src/pages/DataBase/DB.ts
0 → 100644
View file @
fe14f1dd
export
function
getDBImage
(
type
:
string
)
{
let
imageUrl
=
'/database/'
;
switch
(
type
.
toLowerCase
()){
case
'mysql'
:
imageUrl
+=
'mysql.jpg'
;
break
;
case
'oracle'
:
imageUrl
+=
'oracle.jpg'
;
break
;
case
'postgresql'
:
imageUrl
+=
'postgresql.jpg'
;
break
;
case
'clickhouse'
:
imageUrl
+=
'clickhouse.png'
;
break
;
default
:
imageUrl
+=
'db.png'
;
}
return
imageUrl
;
}
dlink-web/src/pages/DataBase/components/ChooseDB.tsx
0 → 100644
View file @
fe14f1dd
import
React
,
{
useState
}
from
'react'
;
import
{
Modal
,
Image
,
message
,
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"
;
export
type
UpdateFormProps
=
{
onCancel
:
(
flag
?:
boolean
,
formVals
?:
Partial
<
DataBaseItem
>
)
=>
void
;
onSubmit
:
(
values
:
Partial
<
DataBaseItem
>
)
=>
void
;
modalVisible
:
boolean
;
values
:
Partial
<
DataBaseItem
>
;
};
const
data
=
[
{
type
:
'MySql'
,
},
{
type
:
'Oracle'
,
},
{
type
:
'PostgreSql'
,
},
{
type
:
'ClickHouse'
,
},
];
const
ChooseDB
:
React
.
FC
<
UpdateFormProps
>
=
(
props
)
=>
{
const
{
// onSubmit: handleUpdate,
onCancel
:
handleChooseDBModalVisible
,
modalVisible
,
}
=
props
;
const
[
dbType
,
setDbType
]
=
useState
<
string
>
();
const
[
createModalVisible
,
handleModalVisible
]
=
useState
<
boolean
>
(
false
);
const
chooseOne
=
(
item
:
DataBaseItem
)
=>
{
setDbType
(
item
.
type
);
handleModalVisible
(
true
);
// handleChooseDBModalVisible();
};
return
(
<
Modal
width=
{
800
}
bodyStyle=
{
{
padding
:
'32px 40px 48px'
}
}
title=
{
'选择数据源类型'
}
visible=
{
modalVisible
}
onCancel=
{
()
=>
handleChooseDBModalVisible
()
}
footer=
{
null
}
>
<
List
grid=
{
{
gutter
:
16
,
xs
:
1
,
sm
:
2
,
md
:
4
,
lg
:
4
,
xl
:
4
,
xxl
:
4
,
}
}
dataSource=
{
data
}
renderItem=
{
item
=>
(
<
List
.
Item
onClick=
{
()
=>
{
chooseOne
(
item
)}
}
>
<
Card
>
<
Image
height=
{
60
}
preview=
{
false
}
src=
{
getDBImage
(
item
.
type
)
}
fallback=
"data:image/png;base64,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"
/>
</
Card
>
</
List
.
Item
>
)
}
/>
<
MysqlForm
onCancel=
{
()
=>
setDbType
(
undefined
)
}
modalVisible=
{
dbType
==
'MySql'
}
values=
{
{}
}
onSubmit=
{
()
=>
{
setDbType
(
undefined
)
}
}
/>
</
Modal
>
);
};
export
default
connect
(({
Studio
}:
{
Studio
:
StateType
})
=>
({
cluster
:
Studio
.
cluster
,
}))(
ChooseDB
);
dlink-web/src/pages/DataBase/components/MySqlForm.tsx
0 → 100644
View file @
fe14f1dd
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Form
,
Button
,
Input
,
Modal
,
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
;
modalVisible
:
boolean
;
values
:
Partial
<
DataBaseItem
>
;
};
const
FormItem
=
Form
.
Item
;
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
:
props
.
values
.
type
,
note
:
props
.
values
.
note
,
enabled
:
props
.
values
.
enabled
,
});
const
[
form
]
=
Form
.
useForm
();
const
{
onSubmit
:
handleUpdate
,
onCancel
:
handleUpdateModalVisible
,
modalVisible
,
values
,
}
=
props
;
const
submitForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({
...
formVals
,
...
fieldsValue
});
handleUpdate
({
...
formVals
,
...
fieldsValue
});
};
const
renderContent
=
(
formVals
)
=>
{
return
(
<>
<
FormItem
name=
"name"
label=
"名称"
rules=
{
[{
required
:
true
,
message
:
'请输入名称!'
}]
}
>
<
Input
placeholder=
"请输入"
/>
</
FormItem
>
<
FormItem
name=
"alias"
label=
"别名"
>
<
Input
placeholder=
"请输入"
/>
</
FormItem
>
<
FormItem
name=
"type"
label=
"类型"
>
<
Select
defaultValue=
"Yarn"
allowClear
>
<
Option
value=
"Standalone"
>
Standalone
</
Option
>
<
Option
value=
"Yarn"
>
Yarn
</
Option
>
<
Option
value=
"Others"
>
Others
</
Option
>
</
Select
>
</
FormItem
>
<
FormItem
name=
"hosts"
label=
"Hosts"
>
<
TextArea
placeholder=
"添加 Flink Hosts...例如:127.0.0.1:8081,127.0.0.1:8091"
allowClear
autoSize=
{
{
minRows
:
3
,
maxRows
:
10
}
}
/>
</
FormItem
>
<
FormItem
name=
"note"
label=
"注释"
>
<
Input
placeholder=
"请输入"
/>
</
FormItem
>
<
FormItem
name=
"enabled"
label=
"是否启用"
rules=
{
[{
required
:
true
,
message
:
'请输入是否启用!'
}]
}
>
<
Switch
checkedChildren=
"启用"
unCheckedChildren=
"禁用"
defaultChecked=
{
formVals
.
enabled
}
/>
</
FormItem
>
</>
);
};
const
renderFooter
=
()
=>
{
return
(
<>
<
Button
onClick=
{
()
=>
handleUpdateModalVisible
(
false
,
values
)
}
>
取消
</
Button
>
<
Button
type=
"primary"
onClick=
{
()
=>
submitForm
()
}
>
完成
</
Button
>
</>
);
};
return
(
<
Modal
width=
{
640
}
bodyStyle=
{
{
padding
:
'32px 40px 48px'
}
}
destroyOnClose
title=
{
formVals
.
id
?
'编辑'
:
'创建 MySql 数据源'
}
visible=
{
modalVisible
}
footer=
{
renderFooter
()
}
onCancel=
{
()
=>
handleUpdateModalVisible
()
}
>
<
Form
{
...
formLayout
}
form=
{
form
}
initialValues=
{
{
id
:
formVals
.
id
,
name
:
formVals
.
name
,
alias
:
formVals
.
alias
,
type
:
formVals
.
type
,
note
:
formVals
.
note
,
enabled
:
formVals
.
enabled
,
}
}
>
{
renderContent
(
formVals
)
}
</
Form
>
</
Modal
>
);
};
export
default
MysqlForm
;
dlink-web/src/pages/DataBase/data.d.ts
View file @
fe14f1dd
export
type
DataBase
TableList
Item
=
{
export
type
DataBaseItem
=
{
id
:
number
,
id
:
number
,
name
:
string
,
name
:
string
,
alias
:
string
,
alias
:
string
,
...
@@ -12,7 +12,25 @@ export type DataBaseTableListItem = {
...
@@ -12,7 +12,25 @@ export type DataBaseTableListItem = {
note
:
string
,
note
:
string
,
dbVersion
:
string
,
dbVersion
:
string
,
status
:
boolean
,
status
:
boolean
,
healthTime
:
Date
,
heartbeatTime
:
Date
,
enabled
:
boolean
,
enabled
:
boolean
,
createTime
:
Date
,
createTime
:
Date
,
updateTime
:
Date
,
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
,
dbVersion
:
string
,
enabled
:
boolean
,
}
dlink-web/src/pages/DataBase/index.tsx
View file @
fe14f1dd
import
React
from
"react"
;
import
React
,
{
useState
}
from
"react"
;
import
{
PageContainer
,
FooterToolbar
}
from
'@ant-design/pro-layout'
;
import
{
PageContainer
,
FooterToolbar
}
from
'@ant-design/pro-layout'
;
import
{
DownOutlined
,
HeartOutlined
,
PlusOutlined
,
UserOutlined
}
from
'@ant-design/icons'
;
import
{
DownOutlined
,
HeartOutlined
,
PlusOutlined
,
UserOutlined
}
from
'@ant-design/icons'
;
import
{
Progress
,
Tag
,
Button
,
Space
,
Badge
,
Typography
}
from
'antd'
;
import
{
Progress
,
Tag
,
Button
,
Space
,
Badge
,
Typography
,
Image
,
Row
,
Col
}
from
'antd'
;
import
ProList
from
'@ant-design/pro-list'
;
import
ProList
from
'@ant-design/pro-list'
;
import
{
queryData
}
from
"@/components/Common/crud"
;
import
{
queryData
}
from
"@/components/Common/crud"
;
import
{
getDBImage
}
from
"@/pages/DataBase/DB"
;
import
ChooseDB
from
"./components/ChooseDB"
;
const
{
Text
}
=
Typography
;
const
{
Text
}
=
Typography
;
const
url
=
'/api/database'
;
const
url
=
'/api/database'
;
const
DataBaseTableList
:
React
.
FC
<
{}
>
=
(
props
:
any
)
=>
{
const
DataBaseTableList
:
React
.
FC
<
{}
>
=
(
props
:
any
)
=>
{
const
[
chooseDBModalVisible
,
handleChooseDBModalVisible
]
=
useState
<
boolean
>
(
false
);
const
chooseDB
=
()
=>
{
};
return
(
return
(
<
PageContainer
>
<
PageContainer
>
<
ProList
<
ProList
toolBarRender=
{
()
=>
{
toolBarRender=
{
()
=>
{
return
[
return
[
<
Button
key=
"3"
type=
"primary"
>
<
Button
type=
"primary"
onClick=
{
()
=>
handleChooseDBModalVisible
(
true
)
}
>
<
PlusOutlined
/>
新建
<
PlusOutlined
/>
新建
</
Button
>,
</
Button
>,
];
];
}
}
}
}
pagination=
{
{
pagination=
{
{
defaultPageSize
:
8
,
defaultPageSize
:
8
,
showSizeChanger
:
false
,
showSizeChanger
:
false
,
}
}
}
}
grid=
{
{
gutter
:
16
,
column
:
4
}
}
grid=
{
{
gutter
:
16
,
column
:
4
}
}
request=
{
(
params
,
sorter
,
filter
)
=>
queryData
(
url
,
{...
params
,
sorter
:{
id
:
'descend'
},
filter
})
}
request=
{
(
params
,
sorter
,
filter
)
=>
queryData
(
url
,
{...
params
,
sorter
:
{
id
:
'descend'
},
filter
})
}
metas=
{
{
metas=
{
{
title
:
{
title
:
{
dataIndex
:
'alias'
,
dataIndex
:
'alias'
,
title
:
'alias'
,
title
:
'alias'
,
},
},
subTitle
:
{
subTitle
:
{
render
:
(
_
,
row
)
=>
{
render
:
(
_
,
row
)
=>
{
return
(
return
(
<
Space
size=
{
0
}
>
<
Space
size=
{
0
}
>
<
Tag
color=
"blue"
key=
{
row
.
name
}
>
<
Tag
color=
"blue"
key=
{
row
.
name
}
>
{
row
.
name
}
{
row
.
name
}
</
Tag
>
</
Tag
>
<
Tag
color=
"gray"
key=
{
row
.
groupName
}
>
<
Tag
color=
"gray"
key=
{
row
.
groupName
}
>
{
row
.
groupName
}
{
row
.
groupName
}
</
Tag
>
</
Tag
>
{
(
row
.
status
)
?
{
(
row
.
status
)
?
(<><
Badge
status=
"success"
/><
Text
type=
"success"
>
正常
</
Text
></>):
(<><
Badge
status=
"success"
/><
Text
type=
"success"
>
正常
</
Text
></>)
:
<><
Badge
status=
"error"
/><
Text
type=
"danger"
>
异常
</
Text
></>
}
<><
Badge
status=
"error"
/><
Text
type=
"danger"
>
异常
</
Text
></>
}
</
Space
>
</
Space
>
);
);
},
},
},
},
type
:
{},
type
:
{},
avatar
:
{},
avatar
:
{},
content
:
{
content
:
{},
render
:
(
_
,
row
)
=>
{
actions
:
{},
return
(
}
}
<
Row
justify=
"space-around"
align=
"middle"
>
<
Col
span=
{
16
}
>
<
Image
height=
{
120
}
preview=
{
false
}
src=
{
getDBImage
(
row
.
type
)
}
fallback=
"data:image/png;base64,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"
/>
</
Col
>
</
Row
>
)
},
},
actions
:
{},
}
}
headerTitle=
"数据源"
headerTitle=
"数据源"
// dataSource={data}
/>
/>
<
ChooseDB
onCancel=
{
()
=>
handleChooseDBModalVisible
(
false
)
}
modalVisible=
{
chooseDBModalVisible
}
/>
</
PageContainer
>
</
PageContainer
>
);
);
};
};
...
...
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