mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-02-07 17:10:07 +08:00
parent
98df3806f5
commit
3e6cd1cab1
@ -34,6 +34,28 @@ func (b *BaseApi) CreateRemoteDB(c *gin.Context) {
|
|||||||
helper.SuccessWithData(c, nil)
|
helper.SuccessWithData(c, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Tags Database
|
||||||
|
// @Summary Check remote database
|
||||||
|
// @Description 检测远程数据库连接性
|
||||||
|
// @Accept json
|
||||||
|
// @Param request body dto.RemoteDBCreate true "request"
|
||||||
|
// @Success 200
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @Router /databases/remote/check [post]
|
||||||
|
// @x-panel-log {"bodyKeys":["name", "type"],"paramKeys":[],"BeforeFuntions":[],"formatZH":"检测远程数据库 [name][type] 连接性","formatEN":"check if remote database [name][type] is connectable"}
|
||||||
|
func (b *BaseApi) CheckeRemoteDB(c *gin.Context) {
|
||||||
|
var req dto.RemoteDBCreate
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := global.VALID.Struct(req); err != nil {
|
||||||
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
helper.SuccessWithData(c, remoteDBService.CheckeRemoteDB(req))
|
||||||
|
}
|
||||||
|
|
||||||
// @Tags Database
|
// @Tags Database
|
||||||
// @Summary Page remote databases
|
// @Summary Page remote databases
|
||||||
// @Description 获取远程数据库列表分页
|
// @Description 获取远程数据库列表分页
|
||||||
|
@ -16,6 +16,7 @@ type RemoteDBService struct{}
|
|||||||
type IRemoteDBService interface {
|
type IRemoteDBService interface {
|
||||||
Get(name string) (dto.RemoteDBInfo, error)
|
Get(name string) (dto.RemoteDBInfo, error)
|
||||||
SearchWithPage(search dto.RemoteDBSearch) (int64, interface{}, error)
|
SearchWithPage(search dto.RemoteDBSearch) (int64, interface{}, error)
|
||||||
|
CheckeRemoteDB(req dto.RemoteDBCreate) bool
|
||||||
Create(req dto.RemoteDBCreate) error
|
Create(req dto.RemoteDBCreate) error
|
||||||
Update(req dto.RemoteDBUpdate) error
|
Update(req dto.RemoteDBUpdate) error
|
||||||
Delete(id uint) error
|
Delete(id uint) error
|
||||||
@ -68,6 +69,20 @@ func (u *RemoteDBService) List(dbType string) ([]dto.RemoteDBOption, error) {
|
|||||||
return datas, err
|
return datas, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *RemoteDBService) CheckeRemoteDB(req dto.RemoteDBCreate) bool {
|
||||||
|
if _, err := mysql.NewMysqlClient(client.DBInfo{
|
||||||
|
From: "remote",
|
||||||
|
Address: req.Address,
|
||||||
|
Port: req.Port,
|
||||||
|
Username: req.Username,
|
||||||
|
Password: req.Password,
|
||||||
|
Timeout: 6,
|
||||||
|
}); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (u *RemoteDBService) Create(req dto.RemoteDBCreate) error {
|
func (u *RemoteDBService) Create(req dto.RemoteDBCreate) error {
|
||||||
db, _ := remoteDBRepo.Get(commonRepo.WithByName(req.Name))
|
db, _ := remoteDBRepo.Get(commonRepo.WithByName(req.Name))
|
||||||
if db.ID != 0 {
|
if db.ID != 0 {
|
||||||
@ -79,7 +94,7 @@ func (u *RemoteDBService) Create(req dto.RemoteDBCreate) error {
|
|||||||
Port: req.Port,
|
Port: req.Port,
|
||||||
Username: req.Username,
|
Username: req.Username,
|
||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
Timeout: 300,
|
Timeout: 6,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ func (s *DatabaseRouter) InitDatabaseRouter(Router *gin.RouterGroup) {
|
|||||||
cmdRouter.POST("/redis/conffile/update", baseApi.UpdateRedisConfByFile)
|
cmdRouter.POST("/redis/conffile/update", baseApi.UpdateRedisConfByFile)
|
||||||
cmdRouter.POST("/redis/persistence/update", baseApi.UpdateRedisPersistenceConf)
|
cmdRouter.POST("/redis/persistence/update", baseApi.UpdateRedisPersistenceConf)
|
||||||
|
|
||||||
|
cmdRouter.POST("/remote/check", baseApi.CheckeRemoteDB)
|
||||||
cmdRouter.POST("/remote", baseApi.CreateRemoteDB)
|
cmdRouter.POST("/remote", baseApi.CreateRemoteDB)
|
||||||
cmdRouter.GET("/remote/:name", baseApi.GetRemoteDB)
|
cmdRouter.GET("/remote/:name", baseApi.GetRemoteDB)
|
||||||
cmdRouter.GET("/remote/list/:type", baseApi.ListRemoteDB)
|
cmdRouter.GET("/remote/list/:type", baseApi.ListRemoteDB)
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package mysql
|
package mysql
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/buserr"
|
"github.com/1Panel-dev/1Panel/backend/buserr"
|
||||||
"github.com/1Panel-dev/1Panel/backend/constant"
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
||||||
@ -38,9 +40,16 @@ func NewMysqlClient(conn client.DBInfo) (MysqlClient, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := db.Ping(); err != nil {
|
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(conn.Timeout)*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
if err := db.PingContext(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if ctx.Err() == context.DeadlineExceeded {
|
||||||
|
return nil, buserr.New(constant.ErrExecTimeOut)
|
||||||
|
}
|
||||||
|
|
||||||
return client.NewRemote(client.Remote{
|
return client.NewRemote(client.Remote{
|
||||||
Client: db,
|
Client: db,
|
||||||
From: conn.From,
|
From: conn.From,
|
||||||
|
@ -4410,6 +4410,49 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/databases/remote/check": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"ApiKeyAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "检测远程数据库连接性",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Database"
|
||||||
|
],
|
||||||
|
"summary": "Check remote database",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "request",
|
||||||
|
"name": "request",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.RemoteDBCreate"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-panel-log": {
|
||||||
|
"BeforeFuntions": [],
|
||||||
|
"bodyKeys": [
|
||||||
|
"name",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"formatEN": "check if remote database [name][type] is connectable",
|
||||||
|
"formatZH": "检测远程数据库 [name][type] 连接性",
|
||||||
|
"paramKeys": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/databases/remote/del": {
|
"/databases/remote/del": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -11621,7 +11664,6 @@ const docTemplate = `{
|
|||||||
"dto.ChangeDBInfo": {
|
"dto.ChangeDBInfo": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"from",
|
|
||||||
"value"
|
"value"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -12923,13 +12965,15 @@ const docTemplate = `{
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
},
|
},
|
||||||
"protocol": {
|
"protocol": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -13776,7 +13820,8 @@ const docTemplate = `{
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@ -13817,7 +13862,8 @@ const docTemplate = `{
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
@ -4403,6 +4403,49 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/databases/remote/check": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"ApiKeyAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "检测远程数据库连接性",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Database"
|
||||||
|
],
|
||||||
|
"summary": "Check remote database",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "request",
|
||||||
|
"name": "request",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.RemoteDBCreate"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-panel-log": {
|
||||||
|
"BeforeFuntions": [],
|
||||||
|
"bodyKeys": [
|
||||||
|
"name",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"formatEN": "check if remote database [name][type] is connectable",
|
||||||
|
"formatZH": "检测远程数据库 [name][type] 连接性",
|
||||||
|
"paramKeys": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/databases/remote/del": {
|
"/databases/remote/del": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -11614,7 +11657,6 @@
|
|||||||
"dto.ChangeDBInfo": {
|
"dto.ChangeDBInfo": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"from",
|
|
||||||
"value"
|
"value"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -12916,13 +12958,15 @@
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
},
|
},
|
||||||
"protocol": {
|
"protocol": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -13769,7 +13813,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@ -13810,7 +13855,8 @@
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"maxLength": 256
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
@ -127,7 +127,6 @@ definitions:
|
|||||||
value:
|
value:
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- from
|
|
||||||
- value
|
- value
|
||||||
type: object
|
type: object
|
||||||
dto.ChangeHostGroup:
|
dto.ChangeHostGroup:
|
||||||
@ -1000,10 +999,12 @@ definitions:
|
|||||||
id:
|
id:
|
||||||
type: integer
|
type: integer
|
||||||
password:
|
password:
|
||||||
|
maxLength: 256
|
||||||
type: string
|
type: string
|
||||||
protocol:
|
protocol:
|
||||||
type: string
|
type: string
|
||||||
username:
|
username:
|
||||||
|
maxLength: 256
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
dto.ImageSave:
|
dto.ImageSave:
|
||||||
@ -1565,6 +1566,7 @@ definitions:
|
|||||||
- remote
|
- remote
|
||||||
type: string
|
type: string
|
||||||
name:
|
name:
|
||||||
|
maxLength: 256
|
||||||
type: string
|
type: string
|
||||||
password:
|
password:
|
||||||
type: string
|
type: string
|
||||||
@ -1599,6 +1601,7 @@ definitions:
|
|||||||
id:
|
id:
|
||||||
type: integer
|
type: integer
|
||||||
name:
|
name:
|
||||||
|
maxLength: 256
|
||||||
type: string
|
type: string
|
||||||
password:
|
password:
|
||||||
type: string
|
type: string
|
||||||
@ -6648,6 +6651,34 @@ paths:
|
|||||||
summary: Get remote databases
|
summary: Get remote databases
|
||||||
tags:
|
tags:
|
||||||
- Database
|
- Database
|
||||||
|
/databases/remote/check:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 检测远程数据库连接性
|
||||||
|
parameters:
|
||||||
|
- description: request
|
||||||
|
in: body
|
||||||
|
name: request
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.RemoteDBCreate'
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
security:
|
||||||
|
- ApiKeyAuth: []
|
||||||
|
summary: Check remote database
|
||||||
|
tags:
|
||||||
|
- Database
|
||||||
|
x-panel-log:
|
||||||
|
BeforeFuntions: []
|
||||||
|
bodyKeys:
|
||||||
|
- name
|
||||||
|
- type
|
||||||
|
formatEN: check if remote database [name][type] is connectable
|
||||||
|
formatZH: 检测远程数据库 [name][type] 连接性
|
||||||
|
paramKeys: []
|
||||||
/databases/remote/del:
|
/databases/remote/del:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
|
@ -100,11 +100,14 @@ export const searchRemoteDBs = (params: Database.SearchRemoteDBPage) => {
|
|||||||
export const listRemoteDBs = (type: string) => {
|
export const listRemoteDBs = (type: string) => {
|
||||||
return http.get<Array<Database.RemoteDBOption>>(`/databases/remote/list/${type}`);
|
return http.get<Array<Database.RemoteDBOption>>(`/databases/remote/list/${type}`);
|
||||||
};
|
};
|
||||||
|
export const checkRemoteDB = (params: Database.RemoteDBCreate) => {
|
||||||
|
return http.post<boolean>(`/databases/remote/check`, params, 40000);
|
||||||
|
};
|
||||||
export const addRemoteDB = (params: Database.RemoteDBCreate) => {
|
export const addRemoteDB = (params: Database.RemoteDBCreate) => {
|
||||||
return http.post(`/databases/remote`, params);
|
return http.post(`/databases/remote`, params, 40000);
|
||||||
};
|
};
|
||||||
export const editRemoteDB = (params: Database.RemoteDBUpdate) => {
|
export const editRemoteDB = (params: Database.RemoteDBUpdate) => {
|
||||||
return http.post(`/databases/remote/update`, params);
|
return http.post(`/databases/remote/update`, params, 40000);
|
||||||
};
|
};
|
||||||
export const deleteRemoteDB = (id: number) => {
|
export const deleteRemoteDB = (id: number) => {
|
||||||
return http.post(`/databases/remote/del`, { id: id });
|
return http.post(`/databases/remote/del`, { id: id });
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
:back="handleClose"
|
:back="handleClose"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<el-form ref="formRef" label-position="top" :model="dialogData.rowData" :rules="rules">
|
<el-form ref="formRef" v-loading="loading" label-position="top" :model="dialogData.rowData" :rules="rules">
|
||||||
<el-row type="flex" justify="center">
|
<el-row type="flex" justify="center">
|
||||||
<el-col :span="22">
|
<el-col :span="22">
|
||||||
<el-form-item :label="$t('commons.table.name')" prop="name">
|
<el-form-item :label="$t('commons.table.name')" prop="name">
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<el-tag v-else>{{ dialogData.rowData!.name }}</el-tag>
|
<el-tag v-else>{{ dialogData.rowData!.name }}</el-tag>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('database.version')" prop="version">
|
<el-form-item :label="$t('database.version')" prop="version">
|
||||||
<el-select v-model="dialogData.rowData!.version">
|
<el-select @change="isOK = false" v-model="dialogData.rowData!.version">
|
||||||
<el-option value="5.6" label="5.6" />
|
<el-option value="5.6" label="5.6" />
|
||||||
<el-option value="5.7" label="5.7" />
|
<el-option value="5.7" label="5.7" />
|
||||||
<el-option value="8.0" label="8.0" />
|
<el-option value="8.0" label="8.0" />
|
||||||
@ -28,17 +28,23 @@
|
|||||||
<span class="input-help">{{ $t('database.versionHelper') }}</span>
|
<span class="input-help">{{ $t('database.versionHelper') }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('database.address')" prop="address">
|
<el-form-item :label="$t('database.address')" prop="address">
|
||||||
<el-input clearable v-model.trim="dialogData.rowData!.address" />
|
<el-input @change="isOK = false" clearable v-model.trim="dialogData.rowData!.address" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('commons.table.port')" prop="port">
|
<el-form-item :label="$t('commons.table.port')" prop="port">
|
||||||
<el-input clearable v-model.number="dialogData.rowData!.port" />
|
<el-input @change="isOK = false" clearable v-model.number="dialogData.rowData!.port" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('commons.login.username')" prop="username">
|
<el-form-item :label="$t('commons.login.username')" prop="username">
|
||||||
<el-input clearable v-model.trim="dialogData.rowData!.username" />
|
<el-input @change="isOK = false" clearable v-model.trim="dialogData.rowData!.username" />
|
||||||
<span class="input-help">{{ $t('database.userHelper') }}</span>
|
<span class="input-help">{{ $t('database.userHelper') }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('commons.login.password')" prop="password">
|
<el-form-item :label="$t('commons.login.password')" prop="password">
|
||||||
<el-input type="password" clearable show-password v-model.trim="dialogData.rowData!.password" />
|
<el-input
|
||||||
|
@change="isOK = false"
|
||||||
|
type="password"
|
||||||
|
clearable
|
||||||
|
show-password
|
||||||
|
v-model.trim="dialogData.rowData!.password"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('commons.table.description')" prop="description">
|
<el-form-item :label="$t('commons.table.description')" prop="description">
|
||||||
<el-input clearable v-model.trim="dialogData.rowData!.description" />
|
<el-input clearable v-model.trim="dialogData.rowData!.description" />
|
||||||
@ -49,7 +55,10 @@
|
|||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="drawerVisiable = false">{{ $t('commons.button.cancel') }}</el-button>
|
<el-button @click="drawerVisiable = false">{{ $t('commons.button.cancel') }}</el-button>
|
||||||
<el-button type="primary" @click="onSubmit(formRef)">
|
<el-button @click="onSubmit(formRef, 'check')">
|
||||||
|
{{ $t('terminal.testConn') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button type="primary" :disabled="!isOK" @click="onSubmit(formRef, dialogData.title)">
|
||||||
{{ $t('commons.button.confirm') }}
|
{{ $t('commons.button.confirm') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span>
|
||||||
@ -63,9 +72,9 @@ import i18n from '@/lang';
|
|||||||
import { ElForm } from 'element-plus';
|
import { ElForm } from 'element-plus';
|
||||||
import { Database } from '@/api/interface/database';
|
import { Database } from '@/api/interface/database';
|
||||||
import DrawerHeader from '@/components/drawer-header/index.vue';
|
import DrawerHeader from '@/components/drawer-header/index.vue';
|
||||||
import { MsgSuccess } from '@/utils/message';
|
import { MsgError, MsgSuccess } from '@/utils/message';
|
||||||
import { Rules } from '@/global/form-rules';
|
import { Rules } from '@/global/form-rules';
|
||||||
import { addRemoteDB, editRemoteDB } from '@/api/modules/database';
|
import { addRemoteDB, checkRemoteDB, editRemoteDB } from '@/api/modules/database';
|
||||||
|
|
||||||
interface DialogProps {
|
interface DialogProps {
|
||||||
title: string;
|
title: string;
|
||||||
@ -77,6 +86,9 @@ const drawerVisiable = ref(false);
|
|||||||
const dialogData = ref<DialogProps>({
|
const dialogData = ref<DialogProps>({
|
||||||
title: '',
|
title: '',
|
||||||
});
|
});
|
||||||
|
const isOK = ref(false);
|
||||||
|
const loading = ref();
|
||||||
|
|
||||||
const acceptParams = (params: DialogProps): void => {
|
const acceptParams = (params: DialogProps): void => {
|
||||||
dialogData.value = params;
|
dialogData.value = params;
|
||||||
title.value = i18n.global.t('database.' + dialogData.value.title + 'RemoteDB');
|
title.value = i18n.global.t('database.' + dialogData.value.title + 'RemoteDB');
|
||||||
@ -100,40 +112,65 @@ const rules = reactive({
|
|||||||
type FormInstance = InstanceType<typeof ElForm>;
|
type FormInstance = InstanceType<typeof ElForm>;
|
||||||
const formRef = ref<FormInstance>();
|
const formRef = ref<FormInstance>();
|
||||||
|
|
||||||
const onSubmit = async (formEl: FormInstance | undefined) => {
|
const onSubmit = async (formEl: FormInstance | undefined, operation: string) => {
|
||||||
if (!formEl) return;
|
if (!formEl) return;
|
||||||
formEl.validate(async (valid) => {
|
formEl.validate(async (valid) => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
if (dialogData.value.title === 'create') {
|
let param = {
|
||||||
let param = {
|
id: dialogData.value.rowData.id,
|
||||||
name: dialogData.value.rowData.name,
|
name: dialogData.value.rowData.name,
|
||||||
type: 'mysql',
|
type: 'mysql',
|
||||||
version: dialogData.value.rowData.version,
|
version: dialogData.value.rowData.version,
|
||||||
from: 'remote',
|
from: 'remote',
|
||||||
address: dialogData.value.rowData.address,
|
address: dialogData.value.rowData.address,
|
||||||
port: dialogData.value.rowData.port,
|
port: dialogData.value.rowData.port,
|
||||||
username: dialogData.value.rowData.username,
|
username: dialogData.value.rowData.username,
|
||||||
password: dialogData.value.rowData.password,
|
password: dialogData.value.rowData.password,
|
||||||
description: dialogData.value.rowData.description,
|
description: dialogData.value.rowData.description,
|
||||||
};
|
};
|
||||||
await addRemoteDB(param);
|
loading.value = true;
|
||||||
}
|
|
||||||
if (dialogData.value.title === 'edit') {
|
if (operation === 'check') {
|
||||||
let param = {
|
await checkRemoteDB(param)
|
||||||
id: dialogData.value.rowData.id,
|
.then((res) => {
|
||||||
version: dialogData.value.rowData.version,
|
loading.value = false;
|
||||||
address: dialogData.value.rowData.address,
|
if (res.data) {
|
||||||
port: dialogData.value.rowData.port,
|
isOK.value = true;
|
||||||
username: dialogData.value.rowData.username,
|
MsgSuccess(i18n.global.t('terminal.connTestOk'));
|
||||||
password: dialogData.value.rowData.password,
|
} else {
|
||||||
description: dialogData.value.rowData.description,
|
MsgError(i18n.global.t('terminal.connTestFailed'));
|
||||||
};
|
}
|
||||||
await editRemoteDB(param);
|
})
|
||||||
|
.catch(() => {
|
||||||
|
loading.value = false;
|
||||||
|
MsgError(i18n.global.t('terminal.connTestFailed'));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
if (operation === 'create') {
|
||||||
emit('search');
|
await addRemoteDB(param)
|
||||||
drawerVisiable.value = false;
|
.then(() => {
|
||||||
|
loading.value = true;
|
||||||
|
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
||||||
|
emit('search');
|
||||||
|
drawerVisiable.value = false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
loading.value = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (operation === 'edit') {
|
||||||
|
await editRemoteDB(param)
|
||||||
|
.then(() => {
|
||||||
|
loading.value = false;
|
||||||
|
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
||||||
|
emit('search');
|
||||||
|
drawerVisiable.value = false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
loading.value = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user