Commit beac5827 by inrgihc

补充对象成员抽取

parent be465b5c
package com.gitee.sqlrest.core.dto;
import com.gitee.sqlrest.common.enums.ProductTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class DataSourceBaseRequest {
@NotBlank(message = "name不能为空")
@ApiModelProperty("名称")
private String name;
@NotNull(message = "type不能为null")
@ApiModelProperty("类型")
private ProductTypeEnum type;
@NotBlank(message = "version不能为空")
@ApiModelProperty("驱动版本")
private String version;
@NotBlank(message = "driver不能为空")
@ApiModelProperty("驱动类型")
private String driver;
@NotBlank(message = "url不能为空")
@ApiModelProperty("连接JDBC-URL")
private String url;
@NotBlank(message = "username不能为空")
@ApiModelProperty("账号")
private String username;
@ApiModelProperty("密码")
private String password;
}
package com.gitee.sqlrest.core.dto; package com.gitee.sqlrest.core.dto;
import com.gitee.sqlrest.common.enums.ProductTypeEnum;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@ApiModel("数据源保存") @ApiModel("数据源保存")
public class DataSourceSaveRequest { public class DataSourceSaveRequest extends DataSourceBaseRequest {
@ApiModelProperty("ID编号") @ApiModelProperty("ID编号")
private Long id; private Long id;
@NotBlank(message = "name不能为空")
@ApiModelProperty("名称")
private String name;
@NotNull(message = "type不能为null")
@ApiModelProperty("类型")
private ProductTypeEnum type;
@NotBlank(message = "version不能为空")
@ApiModelProperty("驱动版本")
private String version;
@NotBlank(message = "driver不能为空")
@ApiModelProperty("驱动类型")
private String driver;
@NotBlank(message = "url不能为空")
@ApiModelProperty("连接JDBC-URL")
private String url;
@NotBlank(message = "username不能为空")
@ApiModelProperty("账号")
private String username;
@ApiModelProperty("密码")
private String password;
} }
...@@ -8,6 +8,7 @@ import com.gitee.sqlrest.common.exception.CommonException; ...@@ -8,6 +8,7 @@ import com.gitee.sqlrest.common.exception.CommonException;
import com.gitee.sqlrest.common.exception.ResponseErrorCode; import com.gitee.sqlrest.common.exception.ResponseErrorCode;
import com.gitee.sqlrest.common.util.JdbcUrlUtils; import com.gitee.sqlrest.common.util.JdbcUrlUtils;
import com.gitee.sqlrest.core.driver.DriverLoadService; import com.gitee.sqlrest.core.driver.DriverLoadService;
import com.gitee.sqlrest.core.dto.DataSourceBaseRequest;
import com.gitee.sqlrest.core.dto.DataSourceSaveRequest; import com.gitee.sqlrest.core.dto.DataSourceSaveRequest;
import com.gitee.sqlrest.core.dto.DatabaseTypeDetailResponse; import com.gitee.sqlrest.core.dto.DatabaseTypeDetailResponse;
import com.gitee.sqlrest.core.dto.DatasourceDetailResponse; import com.gitee.sqlrest.core.dto.DatasourceDetailResponse;
...@@ -74,21 +75,57 @@ public class DataSourceService { ...@@ -74,21 +75,57 @@ public class DataSourceService {
return response; return response;
} }
private void testConnection(HikariDataSource ds, ProductTypeEnum type) {
try (Connection connection = ds.getConnection()) {
if (StringUtils.isNotBlank(type.getSql())) {
try (Statement statement = connection.createStatement()) {
statement.execute(type.getSql());
}
} else {
if (!connection.isValid(2)) {
throw new RuntimeException("Connection is invalid!");
}
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void preTest(DataSourceBaseRequest request) {
DataSourceEntity dataSourceEntity = DataSourceEntity.builder()
.name(request.getName())
.type(request.getType())
.driver(request.getDriver())
.version(request.getVersion())
.url(request.getUrl())
.username(request.getUsername())
.password(request.getPassword())
.build();
File driverPathFile = SpringUtil.getBean(DriverLoadService.class)
.getVersionDriverFile(dataSourceEntity.getType(),
dataSourceEntity.getVersion());
String driverPath = driverPathFile.getAbsolutePath();
HikariDataSource ds = DataSourceUtils.createDataSource(dataSourceEntity, driverPath);
try {
testConnection(ds, request.getType());
} finally {
DataSourceUtils.closeHikariDataSource(ds);
}
}
public void testDataSource(Long id) { public void testDataSource(Long id) {
DataSourceEntity dataSourceEntity = dataSourceDao.getById(id); DataSourceEntity dataSourceEntity = dataSourceDao.getById(id);
if (null == dataSourceEntity) {
throw new CommonException(ResponseErrorCode.ERROR_RESOURCE_NOT_EXISTS, "id=" + id);
}
File driverPathFile = SpringUtil.getBean(DriverLoadService.class) File driverPathFile = SpringUtil.getBean(DriverLoadService.class)
.getVersionDriverFile(dataSourceEntity.getType(), .getVersionDriverFile(dataSourceEntity.getType(),
dataSourceEntity.getVersion()); dataSourceEntity.getVersion());
String driverPath = driverPathFile.getAbsolutePath(); String driverPath = driverPathFile.getAbsolutePath();
HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath); HikariDataSource ds = DataSourceUtils.getHikariDataSource(dataSourceEntity, driverPath);
if (StringUtils.isNotBlank(dataSourceEntity.getType().getSql())) { testConnection(ds, dataSourceEntity.getType());
try (Connection connection = ds.getConnection()) {
Statement statement = connection.createStatement();
statement.execute(dataSourceEntity.getType().getSql());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} }
public void createDataSource(DataSourceSaveRequest request) { public void createDataSource(DataSourceSaveRequest request) {
......
...@@ -8,6 +8,7 @@ import com.gitee.sqlrest.persistence.entity.DataSourceEntity; ...@@ -8,6 +8,7 @@ import com.gitee.sqlrest.persistence.entity.DataSourceEntity;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.sql.Connection; import java.sql.Connection;
import java.sql.Statement;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
...@@ -31,7 +32,17 @@ public final class DataSourceUtils { ...@@ -31,7 +32,17 @@ public final class DataSourceUtils {
if (!datasourceMap.containsKey(entity.getId())) { if (!datasourceMap.containsKey(entity.getId())) {
HikariDataSource ds = createDataSource(entity, driverPath); HikariDataSource ds = createDataSource(entity, driverPath);
try (Connection connection = ds.getConnection()) { try (Connection connection = ds.getConnection()) {
connection.isValid(2); if (StringUtils.isNotBlank(entity.getType().getSql())) {
try (Statement statement = connection.createStatement()) {
statement.execute(entity.getType().getSql());
}
} else {
if (!connection.isValid(2)) {
throw new RuntimeException("Connection is invalid!");
}
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
...@@ -48,15 +59,19 @@ public final class DataSourceUtils { ...@@ -48,15 +59,19 @@ public final class DataSourceUtils {
public static void dropHikariDataSource(Long dataSourceId) { public static void dropHikariDataSource(Long dataSourceId) {
Pair<DataSourceEntity, HikariDataSource> dsPair = datasourceMap.remove(dataSourceId); Pair<DataSourceEntity, HikariDataSource> dsPair = datasourceMap.remove(dataSourceId);
if (null != dsPair) { if (null != dsPair) {
closeHikariDataSource(dsPair.getRight());
}
}
public static void closeHikariDataSource(HikariDataSource ds) {
try { try {
dsPair.getRight().close(); ds.close();
} catch (Exception e) { } catch (Exception e) {
log.warn("Error when close HikariDataSource:{}", e.getMessage()); log.warn("Error when close HikariDataSource:{}", e.getMessage());
} }
} }
}
private static HikariDataSource createDataSource(DataSourceEntity properties, String driverPath) { public static HikariDataSource createDataSource(DataSourceEntity properties, String driverPath) {
Properties parameters = new Properties(); Properties parameters = new Properties();
HikariDataSource ds = new HikariDataSource(); HikariDataSource ds = new HikariDataSource();
ds.setPoolName("The_JDBC_Connection"); ds.setPoolName("The_JDBC_Connection");
......
...@@ -235,9 +235,12 @@ ...@@ -235,9 +235,12 @@
</el-form> </el-form>
<div slot="footer" <div slot="footer"
class="dialog-footer"> class="dialog-footer">
<el-button @click="createFormVisible = false">取 消</el-button> <el-button type="success"
@click="handlePreTest(createform,'createform')">测试</el-button>
<el-button type="primary" <el-button type="primary"
@click="handleCreate">确 定</el-button> @click="handleCreate">确 定</el-button>
<el-button type="info"
@click="createFormVisible = false">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
...@@ -314,9 +317,12 @@ ...@@ -314,9 +317,12 @@
</el-form> </el-form>
<div slot="footer" <div slot="footer"
class="dialog-footer"> class="dialog-footer">
<el-button @click="updateFormVisible = false">取 消</el-button> <el-button type="success"
@click="handlePreTest(updateform,'updateform')">测试</el-button>
<el-button type="primary" <el-button type="primary"
@click="handleSave">确 定</el-button> @click="handleSave">确 定</el-button>
<el-button type="info"
@click="updateFormVisible = false">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
</el-card> </el-card>
...@@ -523,6 +529,61 @@ export default { ...@@ -523,6 +529,61 @@ export default {
this.createFormVisible = true; this.createFormVisible = true;
this.createform = {}; this.createform = {};
}, },
handlePreTest: function (form, refName,) {
let driverClass = "";
if (this.databaseType.length > 0) {
for (let i = 0; i < this.databaseType.length; i++) {
if (this.databaseType[i].type == form.type) {
driverClass = this.databaseType[i].driver;
break;
}
}
}
this.$refs[refName].validate(valid => {
if (valid) {
this.$http({
method: "POST",
headers: {
'Content-Type': 'application/json'
},
url: "/sqlrest/manager/api/v1/datasource/preTest",
data: JSON.stringify({
name: form.name,
type: form.type,
version: form.version,
driver: driverClass,
url: form.url,
username: form.username,
password: form.password
})
}).then(res => {
if (0 === res.data.code) {
this.$alert("测试连接信息成功", "测试操作成功",
{
confirmButtonText: "确定",
type: "info"
}
);
} else {
this.$alert(res.data.message, "测试操作失败",
{
confirmButtonText: "确定",
type: "error"
}
);
}
});
} else {
this.$alert("请检查输入", "提示信息",
{
confirmButtonText: "确定",
type: "info"
}
);
}
});
},
handleCreate: function () { handleCreate: function () {
let driverClass = ""; let driverClass = "";
if (this.databaseType.length > 0) { if (this.databaseType.length > 0) {
......
...@@ -5,6 +5,7 @@ import com.gitee.sqlrest.common.dto.PageResult; ...@@ -5,6 +5,7 @@ import com.gitee.sqlrest.common.dto.PageResult;
import com.gitee.sqlrest.common.dto.ResultEntity; import com.gitee.sqlrest.common.dto.ResultEntity;
import com.gitee.sqlrest.common.enums.ProductTypeEnum; import com.gitee.sqlrest.common.enums.ProductTypeEnum;
import com.gitee.sqlrest.core.driver.DriverLoadService; import com.gitee.sqlrest.core.driver.DriverLoadService;
import com.gitee.sqlrest.core.dto.DataSourceBaseRequest;
import com.gitee.sqlrest.core.dto.DataSourceSaveRequest; import com.gitee.sqlrest.core.dto.DataSourceSaveRequest;
import com.gitee.sqlrest.core.dto.DatasourceDetailResponse; import com.gitee.sqlrest.core.dto.DatasourceDetailResponse;
import com.gitee.sqlrest.core.dto.EntityIdNameResponse; import com.gitee.sqlrest.core.dto.EntityIdNameResponse;
...@@ -46,6 +47,13 @@ public class DataSourceController { ...@@ -46,6 +47,13 @@ public class DataSourceController {
return ResultEntity.success(driverLoadService.getDrivers(type)); return ResultEntity.success(driverLoadService.getDrivers(type));
} }
@ApiOperation(value = "连接预测试")
@PostMapping(value = "/preTest", produces = MediaType.APPLICATION_JSON_VALUE)
public ResultEntity preTest(@Valid @RequestBody DataSourceBaseRequest request) {
datasourceService.preTest(request);
return ResultEntity.success();
}
@ApiOperation(value = "数据源列表") @ApiOperation(value = "数据源列表")
@PostMapping(value = "/list", produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = "/list", produces = MediaType.APPLICATION_JSON_VALUE)
public PageResult<DatasourceDetailResponse> getConnections(@RequestBody EntitySearchRequest request) { public PageResult<DatasourceDetailResponse> getConnections(@RequestBody EntitySearchRequest request) {
......
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>SQLREST工具</title><link href=/static/css/app.f2a15a0e03018d8441776c4304ddc3b9.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.d057b7936f48fb6e72f1.js></script><script type=text/javascript src=/static/js/vendor.6bde4750a07bb5a2f647.js></script><script type=text/javascript src=/static/js/app.5b13ca32f61140a99ff5.js></script></body></html> <!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>SQLREST工具</title><link href=/static/css/app.072d7e806ffea2dbe3ce273489ed669e.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.075ed85199204f860c2e.js></script><script type=text/javascript src=/static/js/vendor.6bde4750a07bb5a2f647.js></script><script type=text/javascript src=/static/js/app.5b13ca32f61140a99ff5.js></script></body></html>
\ No newline at end of file \ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
webpackJsonp([5],{"8JWE":function(e,t){},EWRK:function(e,t,a){"use strict";var r={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{display:"inline-block"}},["MYSQL"==e.type?a("i",{staticClass:"iconfont icon-my-SQL colored_db"}):"MARIADB"==e.type?a("i",{staticClass:"iconfont icon-MariaDB-chanpinicon colored_db"}):"ORACLE"==e.type?a("i",{staticClass:"iconfont icon-oracle-copy-png colored_db"}):"SQLSERVER"==e.type?a("i",{staticClass:"iconfont icon-SQLServer colored_db"}):"POSTGRESQL"==e.type?a("i",{staticClass:"iconfont icon-postgresql colored_db"}):"DB2"==e.type?a("i",{staticClass:"iconfont icon-DB2 colored_db"}):"HIVE"==e.type?a("i",{staticClass:"iconfont icon-hive colored_db"}):"CLICKHOUSE"==e.type?a("i",{staticClass:"iconfont icon-clickhouse2 colored_db"}):a("i",{staticClass:"iconfont icon-OTHER colored_db"})])},staticRenderFns:[]};var o=a("VU/8")({name:"databaseIcon",props:["type"]},r,!1,function(e){a("8JWE")},"data-v-b6f86cb4",null);t.a=o.exports},U0nr:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("mvHQ"),o=a.n(r),i={name:"datasource",components:{databaseIcon:a("EWRK").a},data:function(){return{loading:!0,keyword:null,lists:[],currentPage:1,pageSize:10,totalCount:2,databaseType:[],connectionDriver:[],tableData:[],queryForm:{title:"",type:"",url:"",diver:"",version:"",username:"",password:""},createform:{title:"",type:"",diver:"",sample:"",url:"",version:"",username:"",password:""},updateform:{id:0,title:"",type:"",diver:"",version:"",username:"",password:""},rules:{name:[{required:!0,message:"名称不能为空",trigger:"blur"}],type:[{required:!0,message:"数据库类型必须选择",trigger:"change"}],version:[{required:!0,message:"驱动版本必须选择",trigger:"change"}],url:[{required:!0,message:"Jdbc URL必须提供",trigger:"blur"}],username:[{required:!0,message:"连接账号名必须提供",trigger:"blur"}],password:[{required:!0,message:"连接密码必须提供",trigger:"blur"}]},dialogFormVisible:!1,createFormVisible:!1,updateFormVisible:!1}},methods:{loadData:function(){var e=this;this.$http({method:"POST",headers:{"Content-Type":"application/json"},url:"/sqlrest/manager/api/v1/datasource/list",data:o()({searchText:this.keyword,page:this.currentPage,size:this.pageSize})}).then(function(t){0===t.data.code?(e.currentPage=t.data.pagination.page,e.pageSize=t.data.pagination.size,e.totalCount=t.data.pagination.total,e.tableData=t.data.data):alert("加载任务列表失败:"+t.data.message)},function(){console.log("load connection list failed")})},searchByKeyword:function(){this.currentPage=1,this.loadData()},loadDatabaseTypes:function(){var e=this;this.databaseType=[],this.$http({method:"GET",url:"/sqlrest/manager/api/v1/datasource/types"}).then(function(t){0===t.data.code?e.databaseType=t.data.data:alert("加载任务列表失败:"+t.data.message)},function(){console.log("failed")})},handleClose:function(e){},handleDelete:function(e,t){var a=this;this.$confirm("此操作将此数据源ID="+t.id+"删除么, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(function(){a.$http.delete("/sqlrest/manager/api/v1/datasource/delete/"+t.id).then(function(e){0===e.data.code?a.loadData():alert("删除任务失败:"+e.data.message)})})},handleMore:function(e,t){this.dialogFormVisible=!0,this.queryForm=t},handleTest:function(e,t){var a=this;this.$http.get("/sqlrest/manager/api/v1/datasource/test/"+t.id).then(function(e){0===e.data.code?a.$alert("测试连接成功!","提示信息",{confirmButtonText:"确定",type:"success"}):a.$alert(e.data.message,"错误信息",{confirmButtonText:"确定",type:"error"})})},addConnection:function(){this.createFormVisible=!0,this.createform={}},handlePreTest:function(e,t){var a=this,r="";if(this.databaseType.length>0)for(var i=0;i<this.databaseType.length;i++)if(this.databaseType[i].type==e.type){r=this.databaseType[i].driver;break}this.$refs[t].validate(function(t){t?a.$http({method:"POST",headers:{"Content-Type":"application/json"},url:"/sqlrest/manager/api/v1/datasource/preTest",data:o()({name:e.name,type:e.type,version:e.version,driver:r,url:e.url,username:e.username,password:e.password})}).then(function(e){0===e.data.code?a.$alert("测试连接信息成功","测试操作成功",{confirmButtonText:"确定",type:"info"}):a.$alert(e.data.message,"测试操作失败",{confirmButtonText:"确定",type:"error"})}):a.$alert("请检查输入","提示信息",{confirmButtonText:"确定",type:"info"})})},handleCreate:function(){var e=this,t="";if(this.databaseType.length>0)for(var a=0;a<this.databaseType.length;a++)if(this.databaseType[a].type==this.createform.type){t=this.databaseType[a].driver;break}this.$refs.createform.validate(function(a){a?e.$http({method:"POST",headers:{"Content-Type":"application/json"},url:"/sqlrest/manager/api/v1/datasource/create",data:o()({name:e.createform.name,type:e.createform.type,version:e.createform.version,driver:t,url:e.createform.url,username:e.createform.username,password:e.createform.password})}).then(function(t){0===t.data.code?(e.createFormVisible=!1,e.$message("添加连接信息成功"),e.createform={},e.loadData()):e.$alert(t.data.message,"添加连接信息失败",{confirmButtonText:"确定",type:"error"})}):e.$alert("请检查输入","提示信息",{confirmButtonText:"确定",type:"info"})})},selectChangedDriverVersion:function(e){var t=this;this.connectionDriver=[],this.$http.get("/sqlrest/manager/api/v1/datasource/"+e+"/drivers").then(function(a){if(0===a.data.code){t.connectionDriver=a.data.data;var r=t.databaseType.find(function(t){return t.type===e});r&&(t.createform.sample=r.sample)}else t.$message.error("查询数据库可用的驱动版本失败,"+a.data.message),t.connectionDriver=[]})},handleUpdate:function(e,t){var a=this;this.updateform=JSON.parse(o()(t)),this.$http.get("/sqlrest/manager/api/v1/datasource/"+this.updateform.type+"/drivers").then(function(e){0===e.data.code?a.connectionDriver=e.data.data:(a.$message.error("查询数据库可用的驱动版本失败,"+e.data.message),a.connectionDriver=[])}),this.updateFormVisible=!0},handleSave:function(){var e=this,t="";if(this.databaseType.length>0)for(var a=0;a<this.databaseType.length;a++)if(this.databaseType[a].type==this.updateform.type){t=this.databaseType[a].driver;break}this.$refs.updateform.validate(function(a){a?e.$http({method:"POST",headers:{"Content-Type":"application/json"},url:"/sqlrest/manager/api/v1/datasource/update",data:o()({id:e.updateform.id,name:e.updateform.name,type:e.updateform.type,version:e.updateform.version,driver:t,url:e.updateform.url,username:e.updateform.username,password:e.updateform.password})}).then(function(t){0===t.data.code?(e.updateFormVisible=!1,e.$message("修改连接信息成功"),e.loadData(),e.updateform={}):e.$alert(t.data.message,"修改连接信息失败",{confirmButtonText:"确定",type:"error"})}):e.$alert("请检查输入","提示信息",{confirmButtonText:"确定",type:"info"})})},handleSizeChange:function(e){this.loading=!0,this.pageSize=e,this.loadData()},handleCurrentChange:function(e){this.loading=!0,this.currentPage=e,this.loadData()}},created:function(){this.loadDatabaseTypes(),this.loadData()}},l={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("el-card",[a("div",{staticClass:"connection-list-top"},[a("div",{staticClass:"left-search-input-group"},[a("div",{staticClass:"left-search-input"},[a("el-input",{staticStyle:{width:"300px"},attrs:{placeholder:"请输入连接名称关键字搜索",clearable:!0},on:{change:e.searchByKeyword},model:{value:e.keyword,callback:function(t){e.keyword=t},expression:"keyword"}})],1)]),e._v(" "),a("div",{staticClass:"right-add-button-group"},[a("el-button",{attrs:{type:"primary",size:"mini",icon:"el-icon-document-add"},on:{click:e.addConnection}},[e._v("添加")])],1)]),e._v(" "),a("el-table",{attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},data:e.tableData,size:"small",border:""}},[a("el-table-column",{attrs:{prop:"id",label:"编号","min-width":"5%"}}),e._v(" "),a("el-table-column",{attrs:{prop:"name",label:"连接名称","show-overflow-tooltip":"","min-width":"20%"}}),e._v(" "),a("el-table-column",{attrs:{prop:"createTime",label:"创建时间","min-width":"18%"}}),e._v(" "),a("el-table-column",{attrs:{label:"数据库类型","show-overflow-tooltip":"","min-width":"15%"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("databaseIcon",{attrs:{type:t.row.type}}),e._v(" "),a("span",[e._v(e._s(t.row.type))])]}}])}),e._v(" "),a("el-table-column",{attrs:{prop:"url",label:"JDBC连接串","show-overflow-tooltip":"","min-width":"15%"}}),e._v(" "),a("el-table-column",{attrs:{prop:"username",label:"账号","show-overflow-tooltip":"","min-width":"10%"}}),e._v(" "),a("el-table-column",{attrs:{label:"操作","min-width":"35%"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-button-group",[a("el-button",{attrs:{size:"small",type:"danger",icon:"el-icon-video-play",round:""},on:{click:function(a){return e.handleTest(t.$index,t.row)}}},[e._v("测试")]),e._v(" "),a("el-button",{attrs:{size:"small",type:"primary",icon:"el-icon-document",round:""},on:{click:function(a){return e.handleMore(t.$index,t.row)}}},[e._v("详情")]),e._v(" "),a("el-button",{attrs:{size:"small",type:"warning",icon:"el-icon-edit",round:""},on:{click:function(a){return e.handleUpdate(t.$index,t.row)}}},[e._v("编辑")]),e._v(" "),a("el-button",{attrs:{size:"small",type:"success",icon:"el-icon-delete",round:""},on:{click:function(a){return e.handleDelete(t.$index,t.row)}}},[e._v("删除")])],1)]}}])})],1),e._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":e.currentPage,"page-sizes":[5,10,20,40],"page-size":e.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:e.totalCount},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}})],1),e._v(" "),a("el-dialog",{attrs:{title:"查看数据库连接信息",visible:e.dialogFormVisible,showClose:!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{attrs:{model:e.queryForm,size:"mini"}},[a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接名称","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.name,callback:function(t){e.$set(e.queryForm,"name",t)},expression:"queryForm.name"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库类型","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.type,callback:function(t){e.$set(e.queryForm,"type",t)},expression:"queryForm.type"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库驱动","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.driver,callback:function(t){e.$set(e.queryForm,"driver",t)},expression:"queryForm.driver"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"驱动版本号","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.version,callback:function(t){e.$set(e.queryForm,"version",t)},expression:"queryForm.version"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"JDBC连接串","label-width":"120px"}},[a("el-input",{attrs:{type:"textarea",rows:6,spellcheck:!1,"auto-complete":"off",readonly:!0},model:{value:e.queryForm.url,callback:function(t){e.$set(e.queryForm,"url",t)},expression:"queryForm.url"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"账号名称","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.username,callback:function(t){e.$set(e.queryForm,"username",t)},expression:"queryForm.username"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接密码","label-width":"120px"}},[a("el-input",{attrs:{type:"password","auto-complete":"off",readonly:!0},model:{value:e.queryForm.password,callback:function(t){e.$set(e.queryForm,"password",t)},expression:"queryForm.password"}})],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("关闭")])],1)],1),e._v(" "),a("el-dialog",{attrs:{title:"添加数据源连接信息",visible:e.createFormVisible,showClose:!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.createFormVisible=t}}},[a("el-form",{ref:"createform",attrs:{model:e.createform,size:"mini","status-icon":"",rules:e.rules}},[a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接名称","label-width":"120px",required:!0,prop:"name"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.createform.name,callback:function(t){e.$set(e.createform,"name",t)},expression:"createform.name"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库类型","label-width":"120px",required:!0,prop:"type"}},[a("el-select",{attrs:{placeholder:"请选择数据库"},on:{change:e.selectChangedDriverVersion},model:{value:e.createform.type,callback:function(t){e.$set(e.createform,"type",t)},expression:"createform.type"}},e._l(e.databaseType,function(e,t){return a("el-option",{key:t,attrs:{label:e.type,value:e.type}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"驱动版本","label-width":"120px",required:!0,prop:"version"}},[a("el-select",{attrs:{placeholder:"请选择版本"},model:{value:e.createform.version,callback:function(t){e.$set(e.createform,"version",t)},expression:"createform.version"}},e._l(e.connectionDriver,function(e,t){return a("el-option",{key:t,attrs:{label:e.driverVersion,value:e.driverVersion}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"JDBC连接串","label-width":"120px",required:!0,prop:"url"}},[a("el-alert",{attrs:{title:"样例:",type:"warning",description:e.createform.sample}}),e._v(" "),a("el-input",{attrs:{type:"textarea",rows:6,spellcheck:!1,placeholder:"请输入","auto-complete":"off"},model:{value:e.createform.url,callback:function(t){e.$set(e.createform,"url",t)},expression:"createform.url"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"账号名称","label-width":"120px",prop:"username"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.createform.username,callback:function(t){e.$set(e.createform,"username",t)},expression:"createform.username"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接密码","label-width":"120px",prop:"password"}},[a("el-input",{attrs:{type:"password","auto-complete":"off"},model:{value:e.createform.password,callback:function(t){e.$set(e.createform,"password",t)},expression:"createform.password"}})],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"success"},on:{click:function(t){return e.handlePreTest(e.createform,"createform")}}},[e._v("测试")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:e.handleCreate}},[e._v("确 定")]),e._v(" "),a("el-button",{attrs:{type:"info"},on:{click:function(t){e.createFormVisible=!1}}},[e._v("取 消")])],1)],1),e._v(" "),a("el-dialog",{attrs:{title:"修改数据源连接信息",visible:e.updateFormVisible,showClose:!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.updateFormVisible=t}}},[a("el-form",{ref:"updateform",attrs:{model:e.updateform,size:"mini","status-icon":"",rules:e.rules}},[a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接名称","label-width":"120px",required:!0,prop:"name"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.updateform.name,callback:function(t){e.$set(e.updateform,"name",t)},expression:"updateform.name"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库类型","label-width":"120px",required:!0,prop:"type"}},[a("el-select",{attrs:{placeholder:"请选择数据库"},on:{change:e.selectChangedDriverVersion},model:{value:e.updateform.type,callback:function(t){e.$set(e.updateform,"type",t)},expression:"updateform.type"}},e._l(e.databaseType,function(e,t){return a("el-option",{key:t,attrs:{label:e.type,value:e.type}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"驱动版本","label-width":"120px",required:!0,prop:"version"}},[a("el-select",{attrs:{placeholder:"请选择版本"},model:{value:e.updateform.version,callback:function(t){e.$set(e.updateform,"version",t)},expression:"updateform.version"}},e._l(e.connectionDriver,function(e,t){return a("el-option",{key:t,attrs:{label:e.driverVersion,value:e.driverVersion}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"JDBC连接串","label-width":"120px",required:!0,prop:"url"}},[a("el-input",{attrs:{type:"textarea",rows:6,spellcheck:!1,"auto-complete":"off"},model:{value:e.updateform.url,callback:function(t){e.$set(e.updateform,"url",t)},expression:"updateform.url"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"账号名称","label-width":"120px",prop:"username"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.updateform.username,callback:function(t){e.$set(e.updateform,"username",t)},expression:"updateform.username"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接密码","label-width":"120px",prop:"password"}},[a("el-input",{attrs:{type:"password","auto-complete":"off"},model:{value:e.updateform.password,callback:function(t){e.$set(e.updateform,"password",t)},expression:"updateform.password"}})],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"success"},on:{click:function(t){return e.handlePreTest(e.updateform,"updateform")}}},[e._v("测试")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:e.handleSave}},[e._v("确 定")]),e._v(" "),a("el-button",{attrs:{type:"info"},on:{click:function(t){e.updateFormVisible=!1}}},[e._v("取 消")])],1)],1)],1)],1)},staticRenderFns:[]};var s=a("VU/8")(i,l,!1,function(e){a("hGQk")},"data-v-4bf571c6",null);t.default=s.exports},hGQk:function(e,t){}});
//# sourceMappingURL=5.530a43b5ad6055214539.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///src/components/databaseIcon/databaseIcon.vue","webpack:///./src/components/databaseIcon/databaseIcon.vue?7e80","webpack:///./src/components/databaseIcon/databaseIcon.vue","webpack:///src/views/datasource/list.vue","webpack:///./src/views/datasource/list.vue?02fd","webpack:///./src/views/datasource/list.vue"],"names":["databaseIcon_databaseIcon","render","_vm","this","_h","$createElement","_c","_self","staticStyle","display","type","staticClass","staticRenderFns","Component","__webpack_require__","normalizeComponent","name","props","ssrContext","__webpack_exports__","list","components","databaseIcon","data","loading","keyword","lists","currentPage","pageSize","totalCount","databaseType","connectionDriver","tableData","queryForm","title","url","diver","version","username","password","createform","sample","updateform","id","rules","required","message","trigger","dialogFormVisible","createFormVisible","updateFormVisible","methods","loadData","_this","$http","method","headers","Content-Type","stringify_default","searchText","page","size","then","res","code","pagination","total","alert","console","log","searchByKeyword","loadDatabaseTypes","_this2","handleClose","done","handleDelete","index","row","_this3","$confirm","confirmButtonText","cancelButtonText","delete","handleMore","handleTest","_this4","get","$alert","addConnection","handlePreTest","form","refName","_this5","driverClass","length","i","driver","$refs","validate","valid","handleCreate","_this6","$message","selectChangedDriverVersion","value","_this7","varDatabaseType","find","item","error","handleUpdate","_this8","JSON","parse","handleSave","_this9","handleSizeChange","handleCurrentChange","created","datasource_list","width","attrs","placeholder","clearable","on","change","model","callback","$$v","expression","_v","icon","click","header-cell-style","background","color","border","prop","label","min-width","show-overflow-tooltip","scopedSlots","_u","key","fn","scope","_s","round","$event","$index","align","current-page","page-sizes","page-size","layout","size-change","current-change","visible","showClose","before-close","update:visible","label-width","auto-complete","readonly","$set","rows","spellcheck","slot","ref","status-icon","_l","driverVersion","description"],"mappings":"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","file":"static/js/5.530a43b5ad6055214539.js","sourcesContent":["<template>\n <div style=\"display: inline-block\">\n <i class=\"iconfont icon-my-SQL colored_db\"\n v-if=\"type == 'MYSQL'\"></i>\n <i class=\"iconfont icon-MariaDB-chanpinicon colored_db\"\n v-else-if=\"type == 'MARIADB'\"></i>\n <i class=\"iconfont icon-oracle-copy-png colored_db\"\n v-else-if=\"type == 'ORACLE'\"></i>\n <i class=\"iconfont icon-SQLServer colored_db\"\n v-else-if=\"type == 'SQLSERVER'\"></i>\n <i class=\"iconfont icon-postgresql colored_db\"\n v-else-if=\"type == 'POSTGRESQL'\"></i>\n <i class=\"iconfont icon-DB2 colored_db\"\n v-else-if=\"type == 'DB2'\"></i>\n <i class=\"iconfont icon-hive colored_db\"\n v-else-if=\"type == 'HIVE'\"></i>\n <i class=\"iconfont icon-clickhouse2 colored_db\"\n v-else-if=\"type == 'CLICKHOUSE'\"></i>\n <i class=\"iconfont icon-OTHER colored_db\"\n v-else></i>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"databaseIcon\",\n props: ['type']\n}\n</script>\n\n<style scoped>\n.colored_db {\n color: #0698a5;\n font-size: 18px;\n font-weight: 500;\n margin-right: 5px;\n}\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/components/databaseIcon/databaseIcon.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"display\":\"inline-block\"}},[(_vm.type == 'MYSQL')?_c('i',{staticClass:\"iconfont icon-my-SQL colored_db\"}):(_vm.type == 'MARIADB')?_c('i',{staticClass:\"iconfont icon-MariaDB-chanpinicon colored_db\"}):(_vm.type == 'ORACLE')?_c('i',{staticClass:\"iconfont icon-oracle-copy-png colored_db\"}):(_vm.type == 'SQLSERVER')?_c('i',{staticClass:\"iconfont icon-SQLServer colored_db\"}):(_vm.type == 'POSTGRESQL')?_c('i',{staticClass:\"iconfont icon-postgresql colored_db\"}):(_vm.type == 'DB2')?_c('i',{staticClass:\"iconfont icon-DB2 colored_db\"}):(_vm.type == 'HIVE')?_c('i',{staticClass:\"iconfont icon-hive colored_db\"}):(_vm.type == 'CLICKHOUSE')?_c('i',{staticClass:\"iconfont icon-clickhouse2 colored_db\"}):_c('i',{staticClass:\"iconfont icon-OTHER colored_db\"})])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-b6f86cb4\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/databaseIcon/databaseIcon.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-b6f86cb4\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./databaseIcon.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./databaseIcon.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./databaseIcon.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-b6f86cb4\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./databaseIcon.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-b6f86cb4\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/databaseIcon/databaseIcon.vue\n// module id = null\n// module chunks = ","<template>\r\n <div>\r\n <el-card>\r\n <div class=\"connection-list-top\">\r\n <div class=\"left-search-input-group\">\r\n <div class=\"left-search-input\">\r\n <el-input placeholder=\"请输入连接名称关键字搜索\"\r\n v-model=\"keyword\"\r\n @change=\"searchByKeyword\"\r\n :clearable=true\r\n style=\"width:300px\">\r\n </el-input>\r\n </div>\r\n </div>\r\n <div class=\"right-add-button-group\">\r\n <el-button type=\"primary\"\r\n size=\"mini\"\r\n icon=\"el-icon-document-add\"\r\n @click=\"addConnection\">添加</el-button>\r\n </div>\r\n </div>\r\n\r\n <el-table :header-cell-style=\"{background:'#eef1f6',color:'#606266'}\"\r\n :data=\"tableData\"\r\n size=\"small\"\r\n border>\r\n <el-table-column prop=\"id\"\r\n label=\"编号\"\r\n min-width=\"5%\"></el-table-column>\r\n <el-table-column prop=\"name\"\r\n label=\"连接名称\"\r\n show-overflow-tooltip\r\n min-width=\"20%\"></el-table-column>\r\n <el-table-column prop=\"createTime\"\r\n label=\"创建时间\"\r\n min-width=\"18%\"></el-table-column>\r\n <el-table-column label=\"数据库类型\"\r\n show-overflow-tooltip\r\n min-width=\"15%\">\r\n <template slot-scope=\"scope\">\r\n <databaseIcon :type=\"scope.row.type\"></databaseIcon>\r\n <span>{{ scope.row.type }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"url\"\r\n label=\"JDBC连接串\"\r\n show-overflow-tooltip\r\n min-width=\"15%\"></el-table-column>\r\n <el-table-column prop=\"username\"\r\n label=\"账号\"\r\n show-overflow-tooltip\r\n min-width=\"10%\"></el-table-column>\r\n <el-table-column label=\"操作\"\r\n min-width=\"35%\">\r\n <template slot-scope=\"scope\">\r\n <el-button-group>\r\n <el-button size=\"small\"\r\n type=\"danger\"\r\n icon=\"el-icon-video-play\"\r\n @click=\"handleTest(scope.$index, scope.row)\"\r\n round>测试</el-button>\r\n <el-button size=\"small\"\r\n type=\"primary\"\r\n icon=\"el-icon-document\"\r\n @click=\"handleMore(scope.$index, scope.row)\"\r\n round>详情</el-button>\r\n <el-button size=\"small\"\r\n type=\"warning\"\r\n icon=\"el-icon-edit\"\r\n @click=\"handleUpdate(scope.$index, scope.row)\"\r\n round>编辑</el-button>\r\n <el-button size=\"small\"\r\n type=\"success\"\r\n icon=\"el-icon-delete\"\r\n @click=\"handleDelete(scope.$index, scope.row)\"\r\n round>删除</el-button>\r\n </el-button-group>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"page\"\r\n align=\"right\">\r\n <el-pagination @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n :current-page=\"currentPage\"\r\n :page-sizes=\"[5, 10, 20, 40]\"\r\n :page-size=\"pageSize\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"totalCount\"></el-pagination>\r\n </div>\r\n\r\n <el-dialog title=\"查看数据库连接信息\"\r\n :visible.sync=\"dialogFormVisible\"\r\n :showClose=\"false\"\r\n :before-close=\"handleClose\">\r\n <el-form :model=\"queryForm\"\r\n size=\"mini\">\r\n <el-form-item label=\"连接名称\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.name\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库类型\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.type\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库驱动\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.driver\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"驱动版本号\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.version\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"JDBC连接串\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input type=\"textarea\"\r\n :rows=\"6\"\r\n :spellcheck=\"false\"\r\n v-model=\"queryForm.url\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"账号名称\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.username\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"连接密码\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input type=\"password\"\r\n v-model=\"queryForm.password\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\"\r\n class=\"dialog-footer\">\r\n <el-button @click=\"dialogFormVisible = false\">关闭</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <el-dialog title=\"添加数据源连接信息\"\r\n :visible.sync=\"createFormVisible\"\r\n :showClose=\"false\"\r\n :before-close=\"handleClose\">\r\n <el-form :model=\"createform\"\r\n size=\"mini\"\r\n status-icon\r\n :rules=\"rules\"\r\n ref=\"createform\">\r\n <el-form-item label=\"连接名称\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"name\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"createform.name\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库类型\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"type\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"createform.type\"\r\n @change=\"selectChangedDriverVersion\"\r\n placeholder=\"请选择数据库\">\r\n <el-option v-for=\"(item,index) in databaseType\"\r\n :key=\"index\"\r\n :label=\"item.type\"\r\n :value=\"item.type\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"驱动版本\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"version\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"createform.version\"\r\n placeholder=\"请选择版本\">\r\n <el-option v-for=\"(item,index) in connectionDriver\"\r\n :key=\"index\"\r\n :label=\"item.driverVersion\"\r\n :value=\"item.driverVersion\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"JDBC连接串\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"url\"\r\n style=\"width:85%\">\r\n <el-alert title=\"样例:\"\r\n type=\"warning\"\r\n :description=\"createform.sample\">\r\n </el-alert>\r\n <el-input type=\"textarea\"\r\n :rows=\"6\"\r\n :spellcheck=\"false\"\r\n placeholder=\"请输入\"\r\n v-model=\"createform.url\"\r\n auto-complete=\"off\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item label=\"账号名称\"\r\n label-width=\"120px\"\r\n prop=\"username\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"createform.username\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"连接密码\"\r\n label-width=\"120px\"\r\n prop=\"password\"\r\n style=\"width:85%\">\r\n <el-input type=\"password\"\r\n v-model=\"createform.password\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\"\r\n class=\"dialog-footer\">\r\n <el-button type=\"success\"\r\n @click=\"handlePreTest(createform,'createform')\">测试</el-button>\r\n <el-button type=\"primary\"\r\n @click=\"handleCreate\">确 定</el-button>\r\n <el-button type=\"info\"\r\n @click=\"createFormVisible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <el-dialog title=\"修改数据源连接信息\"\r\n :visible.sync=\"updateFormVisible\"\r\n :showClose=\"false\"\r\n :before-close=\"handleClose\">\r\n <el-form :model=\"updateform\"\r\n size=\"mini\"\r\n status-icon\r\n :rules=\"rules\"\r\n ref=\"updateform\">\r\n <el-form-item label=\"连接名称\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"name\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"updateform.name\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库类型\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"type\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"updateform.type\"\r\n @change=\"selectChangedDriverVersion\"\r\n placeholder=\"请选择数据库\">\r\n <el-option v-for=\"(item,index) in databaseType\"\r\n :key=\"index\"\r\n :label=\"item.type\"\r\n :value=\"item.type\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"驱动版本\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"version\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"updateform.version\"\r\n placeholder=\"请选择版本\">\r\n <el-option v-for=\"(item,index) in connectionDriver\"\r\n :key=\"index\"\r\n :label=\"item.driverVersion\"\r\n :value=\"item.driverVersion\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"JDBC连接串\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"url\"\r\n style=\"width:85%\">\r\n <el-input type=\"textarea\"\r\n :rows=\"6\"\r\n :spellcheck=\"false\"\r\n v-model=\"updateform.url\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"账号名称\"\r\n label-width=\"120px\"\r\n prop=\"username\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"updateform.username\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"连接密码\"\r\n label-width=\"120px\"\r\n prop=\"password\"\r\n style=\"width:85%\">\r\n <el-input type=\"password\"\r\n v-model=\"updateform.password\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\"\r\n class=\"dialog-footer\">\r\n <el-button type=\"success\"\r\n @click=\"handlePreTest(updateform,'updateform')\">测试</el-button>\r\n <el-button type=\"primary\"\r\n @click=\"handleSave\">确 定</el-button>\r\n <el-button type=\"info\"\r\n @click=\"updateFormVisible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n </el-card>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport databaseIcon from \"@/components/databaseIcon/databaseIcon\";\r\n\r\nexport default {\r\n name: \"datasource\",\r\n components: {\r\n databaseIcon\r\n },\r\n data () {\r\n return {\r\n loading: true,\r\n keyword: null,\r\n lists: [],\r\n currentPage: 1,\r\n pageSize: 10,\r\n totalCount: 2,\r\n databaseType: [],\r\n connectionDriver: [],\r\n tableData: [\r\n ],\r\n queryForm: {\r\n title: \"\",\r\n type: \"\",\r\n url: \"\",\r\n diver: \"\",\r\n version: \"\",\r\n username: \"\",\r\n password: \"\"\r\n },\r\n createform: {\r\n title: \"\",\r\n type: \"\",\r\n diver: \"\",\r\n sample: \"\",\r\n url: \"\",\r\n version: \"\",\r\n username: \"\",\r\n password: \"\"\r\n },\r\n updateform: {\r\n id: 0,\r\n title: \"\",\r\n type: \"\",\r\n diver: \"\",\r\n version: \"\",\r\n username: \"\",\r\n password: \"\"\r\n },\r\n rules: {\r\n name: [\r\n {\r\n required: true,\r\n message: \"名称不能为空\",\r\n trigger: \"blur\"\r\n }\r\n ],\r\n type: [\r\n {\r\n required: true,\r\n message: \"数据库类型必须选择\",\r\n trigger: \"change\"\r\n }\r\n ],\r\n version: [\r\n {\r\n required: true,\r\n message: \"驱动版本必须选择\",\r\n trigger: \"change\"\r\n }\r\n ],\r\n url: [\r\n {\r\n required: true,\r\n message: \"Jdbc URL必须提供\",\r\n trigger: \"blur\"\r\n }\r\n ],\r\n username: [\r\n {\r\n required: true,\r\n message: \"连接账号名必须提供\",\r\n trigger: \"blur\"\r\n }\r\n ],\r\n password: [\r\n {\r\n required: true,\r\n message: \"连接密码必须提供\",\r\n trigger: \"blur\"\r\n }\r\n ]\r\n },\r\n dialogFormVisible: false,\r\n createFormVisible: false,\r\n updateFormVisible: false\r\n }\r\n },\r\n methods: {\r\n loadData: function () {\r\n this.$http({\r\n method: \"POST\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n url: \"/sqlrest/manager/api/v1/datasource/list\",\r\n data: JSON.stringify({\r\n searchText: this.keyword,\r\n page: this.currentPage,\r\n size: this.pageSize\r\n })\r\n }).then(res => {\r\n if (0 === res.data.code) {\r\n this.currentPage = res.data.pagination.page;\r\n this.pageSize = res.data.pagination.size;\r\n this.totalCount = res.data.pagination.total;\r\n this.tableData = res.data.data;\r\n } else {\r\n alert(\"加载任务列表失败:\" + res.data.message);\r\n }\r\n },\r\n function () {\r\n console.log(\"load connection list failed\");\r\n }\r\n );\r\n },\r\n searchByKeyword: function () {\r\n this.currentPage = 1;\r\n this.loadData();\r\n },\r\n loadDatabaseTypes: function () {\r\n this.databaseType = [];\r\n this.$http({\r\n method: \"GET\",\r\n url: \"/sqlrest/manager/api/v1/datasource/types\"\r\n }).then(\r\n res => {\r\n if (0 === res.data.code) {\r\n this.databaseType = res.data.data;\r\n } else {\r\n alert(\"加载任务列表失败:\" + res.data.message);\r\n }\r\n },\r\n function () {\r\n console.log(\"failed\");\r\n }\r\n );\r\n },\r\n handleClose (done) {\r\n },\r\n handleDelete: function (index, row) {\r\n this.$confirm(\r\n \"此操作将此数据源ID=\" + row.id + \"删除么, 是否继续?\",\r\n \"提示\",\r\n {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\"\r\n }\r\n ).then(() => {\r\n this.$http.delete(\r\n \"/sqlrest/manager/api/v1/datasource/delete/\" + row.id\r\n ).then(res => {\r\n //console.log(res);\r\n if (0 === res.data.code) {\r\n this.loadData();\r\n } else {\r\n alert(\"删除任务失败:\" + res.data.message);\r\n }\r\n });\r\n });\r\n },\r\n handleMore: function (index, row) {\r\n this.dialogFormVisible = true;\r\n this.queryForm = row;\r\n },\r\n handleTest: function (index, row) {\r\n this.$http.get(\r\n \"/sqlrest/manager/api/v1/datasource/test/\" + row.id\r\n ).then(res => {\r\n if (0 === res.data.code) {\r\n this.$alert(\"测试连接成功!\", \"提示信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"success\"\r\n }\r\n );\r\n } else {\r\n this.$alert(res.data.message, \"错误信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"error\"\r\n }\r\n );\r\n }\r\n });\r\n },\r\n addConnection: function () {\r\n this.createFormVisible = true;\r\n this.createform = {};\r\n },\r\n handlePreTest: function (form, refName,) {\r\n let driverClass = \"\";\r\n if (this.databaseType.length > 0) {\r\n for (let i = 0; i < this.databaseType.length; i++) {\r\n if (this.databaseType[i].type == form.type) {\r\n driverClass = this.databaseType[i].driver;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.$refs[refName].validate(valid => {\r\n if (valid) {\r\n this.$http({\r\n method: \"POST\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n url: \"/sqlrest/manager/api/v1/datasource/preTest\",\r\n data: JSON.stringify({\r\n name: form.name,\r\n type: form.type,\r\n version: form.version,\r\n driver: driverClass,\r\n url: form.url,\r\n username: form.username,\r\n password: form.password\r\n })\r\n }).then(res => {\r\n if (0 === res.data.code) {\r\n this.$alert(\"测试连接信息成功\", \"测试操作成功\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"info\"\r\n }\r\n );\r\n } else {\r\n this.$alert(res.data.message, \"测试操作失败\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"error\"\r\n }\r\n );\r\n }\r\n });\r\n } else {\r\n this.$alert(\"请检查输入\", \"提示信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"info\"\r\n }\r\n );\r\n }\r\n });\r\n },\r\n handleCreate: function () {\r\n let driverClass = \"\";\r\n if (this.databaseType.length > 0) {\r\n for (let i = 0; i < this.databaseType.length; i++) {\r\n if (this.databaseType[i].type == this.createform.type) {\r\n driverClass = this.databaseType[i].driver;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.$refs['createform'].validate(valid => {\r\n if (valid) {\r\n this.$http({\r\n method: \"POST\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n url: \"/sqlrest/manager/api/v1/datasource/create\",\r\n data: JSON.stringify({\r\n name: this.createform.name,\r\n type: this.createform.type,\r\n version: this.createform.version,\r\n driver: driverClass,\r\n url: this.createform.url,\r\n username: this.createform.username,\r\n password: this.createform.password\r\n })\r\n }).then(res => {\r\n if (0 === res.data.code) {\r\n this.createFormVisible = false;\r\n this.$message(\"添加连接信息成功\");\r\n this.createform = {};\r\n this.loadData();\r\n } else {\r\n this.$alert(res.data.message, \"添加连接信息失败\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"error\"\r\n }\r\n );\r\n }\r\n });\r\n } else {\r\n this.$alert(\"请检查输入\", \"提示信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"info\"\r\n }\r\n );\r\n }\r\n });\r\n },\r\n selectChangedDriverVersion: function (value) {\r\n this.connectionDriver = [];\r\n this.$http.get(\r\n \"/sqlrest/manager/api/v1/datasource/\" + value + \"/drivers\"\r\n ).then(res => {\r\n if (0 === res.data.code) {\r\n this.connectionDriver = res.data.data;\r\n let varDatabaseType = this.databaseType.find(\r\n (item) => {\r\n return item.type === value;\r\n });\r\n if (varDatabaseType) {\r\n this.createform.sample = varDatabaseType.sample;\r\n }\r\n } else {\r\n this.$message.error(\"查询数据库可用的驱动版本失败,\" + res.data.message);\r\n this.connectionDriver = [];\r\n }\r\n });\r\n },\r\n handleUpdate: function (index, row) {\r\n this.updateform = JSON.parse(JSON.stringify(row));\r\n this.$http.get(\r\n \"/sqlrest/manager/api/v1/datasource/\" + this.updateform.type + \"/drivers\"\r\n ).then(res => {\r\n if (0 === res.data.code) {\r\n this.connectionDriver = res.data.data;\r\n } else {\r\n this.$message.error(\"查询数据库可用的驱动版本失败,\" + res.data.message);\r\n this.connectionDriver = [];\r\n }\r\n });\r\n this.updateFormVisible = true;\r\n },\r\n handleSave: function () {\r\n let driverClass = \"\";\r\n if (this.databaseType.length > 0) {\r\n for (let i = 0; i < this.databaseType.length; i++) {\r\n if (this.databaseType[i].type == this.updateform.type) {\r\n driverClass = this.databaseType[i].driver;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.$refs['updateform'].validate(valid => {\r\n if (valid) {\r\n this.$http({\r\n method: \"POST\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n url: \"/sqlrest/manager/api/v1/datasource/update\",\r\n data: JSON.stringify({\r\n id: this.updateform.id,\r\n name: this.updateform.name,\r\n type: this.updateform.type,\r\n version: this.updateform.version,\r\n driver: driverClass,\r\n url: this.updateform.url,\r\n username: this.updateform.username,\r\n password: this.updateform.password\r\n })\r\n }).then(res => {\r\n if (0 === res.data.code) {\r\n this.updateFormVisible = false;\r\n this.$message(\"修改连接信息成功\");\r\n this.loadData();\r\n this.updateform = {};\r\n } else {\r\n this.$alert(res.data.message, \"修改连接信息失败\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"error\"\r\n }\r\n );\r\n }\r\n });\r\n } else {\r\n this.$alert(\"请检查输入\", \"提示信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"info\"\r\n }\r\n );\r\n }\r\n });\r\n },\r\n handleSizeChange: function (pageSize) {\r\n this.loading = true;\r\n this.pageSize = pageSize;\r\n this.loadData();\r\n },\r\n\r\n handleCurrentChange: function (currentPage) {\r\n this.loading = true;\r\n this.currentPage = currentPage;\r\n this.loadData();\r\n }\r\n },\r\n created () {\r\n this.loadDatabaseTypes();\r\n this.loadData();\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.el-table {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.el-card,\r\n.el-message {\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.connection-list-top {\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n\r\n.left-search-input-group {\r\n width: calc(100% - 100px);\r\n margin-right: auto;\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n.left-search-input {\r\n width: 300px;\r\n margin-right: auto;\r\n margin: 10px 5px;\r\n}\r\n.right-add-button-group {\r\n width: 100px;\r\n margin-left: auto;\r\n margin: 10px 5px;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/views/datasource/list.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-card',[_c('div',{staticClass:\"connection-list-top\"},[_c('div',{staticClass:\"left-search-input-group\"},[_c('div',{staticClass:\"left-search-input\"},[_c('el-input',{staticStyle:{\"width\":\"300px\"},attrs:{\"placeholder\":\"请输入连接名称关键字搜索\",\"clearable\":true},on:{\"change\":_vm.searchByKeyword},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"right-add-button-group\"},[_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\",\"icon\":\"el-icon-document-add\"},on:{\"click\":_vm.addConnection}},[_vm._v(\"添加\")])],1)]),_vm._v(\" \"),_c('el-table',{attrs:{\"header-cell-style\":{background:'#eef1f6',color:'#606266'},\"data\":_vm.tableData,\"size\":\"small\",\"border\":\"\"}},[_c('el-table-column',{attrs:{\"prop\":\"id\",\"label\":\"编号\",\"min-width\":\"5%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"name\",\"label\":\"连接名称\",\"show-overflow-tooltip\":\"\",\"min-width\":\"20%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"createTime\",\"label\":\"创建时间\",\"min-width\":\"18%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"label\":\"数据库类型\",\"show-overflow-tooltip\":\"\",\"min-width\":\"15%\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('databaseIcon',{attrs:{\"type\":scope.row.type}}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(scope.row.type))])]}}])}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"url\",\"label\":\"JDBC连接串\",\"show-overflow-tooltip\":\"\",\"min-width\":\"15%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"username\",\"label\":\"账号\",\"show-overflow-tooltip\":\"\",\"min-width\":\"10%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"label\":\"操作\",\"min-width\":\"35%\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button-group',[_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"danger\",\"icon\":\"el-icon-video-play\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleTest(scope.$index, scope.row)}}},[_vm._v(\"测试\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"primary\",\"icon\":\"el-icon-document\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleMore(scope.$index, scope.row)}}},[_vm._v(\"详情\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"warning\",\"icon\":\"el-icon-edit\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleUpdate(scope.$index, scope.row)}}},[_vm._v(\"编辑\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"success\",\"icon\":\"el-icon-delete\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleDelete(scope.$index, scope.row)}}},[_vm._v(\"删除\")])],1)]}}])})],1),_vm._v(\" \"),_c('div',{staticClass:\"page\",attrs:{\"align\":\"right\"}},[_c('el-pagination',{attrs:{\"current-page\":_vm.currentPage,\"page-sizes\":[5, 10, 20, 40],\"page-size\":_vm.pageSize,\"layout\":\"total, sizes, prev, pager, next, jumper\",\"total\":_vm.totalCount},on:{\"size-change\":_vm.handleSizeChange,\"current-change\":_vm.handleCurrentChange}})],1),_vm._v(\" \"),_c('el-dialog',{attrs:{\"title\":\"查看数据库连接信息\",\"visible\":_vm.dialogFormVisible,\"showClose\":false,\"before-close\":_vm.handleClose},on:{\"update:visible\":function($event){_vm.dialogFormVisible=$event}}},[_c('el-form',{attrs:{\"model\":_vm.queryForm,\"size\":\"mini\"}},[_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接名称\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.name),callback:function ($$v) {_vm.$set(_vm.queryForm, \"name\", $$v)},expression:\"queryForm.name\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库类型\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.type),callback:function ($$v) {_vm.$set(_vm.queryForm, \"type\", $$v)},expression:\"queryForm.type\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库驱动\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.driver),callback:function ($$v) {_vm.$set(_vm.queryForm, \"driver\", $$v)},expression:\"queryForm.driver\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"驱动版本号\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.version),callback:function ($$v) {_vm.$set(_vm.queryForm, \"version\", $$v)},expression:\"queryForm.version\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"JDBC连接串\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":6,\"spellcheck\":false,\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.url),callback:function ($$v) {_vm.$set(_vm.queryForm, \"url\", $$v)},expression:\"queryForm.url\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"账号名称\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.username),callback:function ($$v) {_vm.$set(_vm.queryForm, \"username\", $$v)},expression:\"queryForm.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接密码\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.password),callback:function ($$v) {_vm.$set(_vm.queryForm, \"password\", $$v)},expression:\"queryForm.password\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.dialogFormVisible = false}}},[_vm._v(\"关闭\")])],1)],1),_vm._v(\" \"),_c('el-dialog',{attrs:{\"title\":\"添加数据源连接信息\",\"visible\":_vm.createFormVisible,\"showClose\":false,\"before-close\":_vm.handleClose},on:{\"update:visible\":function($event){_vm.createFormVisible=$event}}},[_c('el-form',{ref:\"createform\",attrs:{\"model\":_vm.createform,\"size\":\"mini\",\"status-icon\":\"\",\"rules\":_vm.rules}},[_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接名称\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"name\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.createform.name),callback:function ($$v) {_vm.$set(_vm.createform, \"name\", $$v)},expression:\"createform.name\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库类型\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"type\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择数据库\"},on:{\"change\":_vm.selectChangedDriverVersion},model:{value:(_vm.createform.type),callback:function ($$v) {_vm.$set(_vm.createform, \"type\", $$v)},expression:\"createform.type\"}},_vm._l((_vm.databaseType),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.type,\"value\":item.type}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"驱动版本\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"version\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择版本\"},model:{value:(_vm.createform.version),callback:function ($$v) {_vm.$set(_vm.createform, \"version\", $$v)},expression:\"createform.version\"}},_vm._l((_vm.connectionDriver),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.driverVersion,\"value\":item.driverVersion}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"JDBC连接串\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"url\"}},[_c('el-alert',{attrs:{\"title\":\"样例:\",\"type\":\"warning\",\"description\":_vm.createform.sample}}),_vm._v(\" \"),_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":6,\"spellcheck\":false,\"placeholder\":\"请输入\",\"auto-complete\":\"off\"},model:{value:(_vm.createform.url),callback:function ($$v) {_vm.$set(_vm.createform, \"url\", $$v)},expression:\"createform.url\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"账号名称\",\"label-width\":\"120px\",\"prop\":\"username\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.createform.username),callback:function ($$v) {_vm.$set(_vm.createform, \"username\", $$v)},expression:\"createform.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接密码\",\"label-width\":\"120px\",\"prop\":\"password\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\"},model:{value:(_vm.createform.password),callback:function ($$v) {_vm.$set(_vm.createform, \"password\", $$v)},expression:\"createform.password\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":\"success\"},on:{\"click\":function($event){return _vm.handlePreTest(_vm.createform,'createform')}}},[_vm._v(\"测试\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleCreate}},[_vm._v(\"确 定\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"type\":\"info\"},on:{\"click\":function($event){_vm.createFormVisible = false}}},[_vm._v(\"取 消\")])],1)],1),_vm._v(\" \"),_c('el-dialog',{attrs:{\"title\":\"修改数据源连接信息\",\"visible\":_vm.updateFormVisible,\"showClose\":false,\"before-close\":_vm.handleClose},on:{\"update:visible\":function($event){_vm.updateFormVisible=$event}}},[_c('el-form',{ref:\"updateform\",attrs:{\"model\":_vm.updateform,\"size\":\"mini\",\"status-icon\":\"\",\"rules\":_vm.rules}},[_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接名称\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"name\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.updateform.name),callback:function ($$v) {_vm.$set(_vm.updateform, \"name\", $$v)},expression:\"updateform.name\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库类型\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"type\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择数据库\"},on:{\"change\":_vm.selectChangedDriverVersion},model:{value:(_vm.updateform.type),callback:function ($$v) {_vm.$set(_vm.updateform, \"type\", $$v)},expression:\"updateform.type\"}},_vm._l((_vm.databaseType),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.type,\"value\":item.type}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"驱动版本\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"version\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择版本\"},model:{value:(_vm.updateform.version),callback:function ($$v) {_vm.$set(_vm.updateform, \"version\", $$v)},expression:\"updateform.version\"}},_vm._l((_vm.connectionDriver),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.driverVersion,\"value\":item.driverVersion}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"JDBC连接串\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"url\"}},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":6,\"spellcheck\":false,\"auto-complete\":\"off\"},model:{value:(_vm.updateform.url),callback:function ($$v) {_vm.$set(_vm.updateform, \"url\", $$v)},expression:\"updateform.url\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"账号名称\",\"label-width\":\"120px\",\"prop\":\"username\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.updateform.username),callback:function ($$v) {_vm.$set(_vm.updateform, \"username\", $$v)},expression:\"updateform.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接密码\",\"label-width\":\"120px\",\"prop\":\"password\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\"},model:{value:(_vm.updateform.password),callback:function ($$v) {_vm.$set(_vm.updateform, \"password\", $$v)},expression:\"updateform.password\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":\"success\"},on:{\"click\":function($event){return _vm.handlePreTest(_vm.updateform,'updateform')}}},[_vm._v(\"测试\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleSave}},[_vm._v(\"确 定\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"type\":\"info\"},on:{\"click\":function($event){_vm.updateFormVisible = false}}},[_vm._v(\"取 消\")])],1)],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-4bf571c6\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/datasource/list.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-4bf571c6\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./list.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4bf571c6\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./list.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-4bf571c6\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/datasource/list.vue\n// module id = null\n// module chunks = "],"sourceRoot":""}
\ No newline at end of file
webpackJsonp([5],{"8JWE":function(e,t){},EWRK:function(e,t,a){"use strict";var r={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{display:"inline-block"}},["MYSQL"==e.type?a("i",{staticClass:"iconfont icon-my-SQL colored_db"}):"MARIADB"==e.type?a("i",{staticClass:"iconfont icon-MariaDB-chanpinicon colored_db"}):"ORACLE"==e.type?a("i",{staticClass:"iconfont icon-oracle-copy-png colored_db"}):"SQLSERVER"==e.type?a("i",{staticClass:"iconfont icon-SQLServer colored_db"}):"POSTGRESQL"==e.type?a("i",{staticClass:"iconfont icon-postgresql colored_db"}):"DB2"==e.type?a("i",{staticClass:"iconfont icon-DB2 colored_db"}):"HIVE"==e.type?a("i",{staticClass:"iconfont icon-hive colored_db"}):"CLICKHOUSE"==e.type?a("i",{staticClass:"iconfont icon-clickhouse2 colored_db"}):a("i",{staticClass:"iconfont icon-OTHER colored_db"})])},staticRenderFns:[]};var o=a("VU/8")({name:"databaseIcon",props:["type"]},r,!1,function(e){a("8JWE")},"data-v-b6f86cb4",null);t.a=o.exports},U0nr:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("mvHQ"),o=a.n(r),l={name:"datasource",components:{databaseIcon:a("EWRK").a},data:function(){return{loading:!0,keyword:null,lists:[],currentPage:1,pageSize:10,totalCount:2,databaseType:[],connectionDriver:[],tableData:[],queryForm:{title:"",type:"",url:"",diver:"",version:"",username:"",password:""},createform:{title:"",type:"",diver:"",sample:"",url:"",version:"",username:"",password:""},updateform:{id:0,title:"",type:"",diver:"",version:"",username:"",password:""},rules:{name:[{required:!0,message:"名称不能为空",trigger:"blur"}],type:[{required:!0,message:"数据库类型必须选择",trigger:"change"}],version:[{required:!0,message:"驱动版本必须选择",trigger:"change"}],url:[{required:!0,message:"Jdbc URL必须提供",trigger:"blur"}],username:[{required:!0,message:"连接账号名必须提供",trigger:"blur"}],password:[{required:!0,message:"连接密码必须提供",trigger:"blur"}]},dialogFormVisible:!1,createFormVisible:!1,updateFormVisible:!1}},methods:{loadData:function(){var e=this;this.$http({method:"POST",headers:{"Content-Type":"application/json"},url:"/sqlrest/manager/api/v1/datasource/list",data:o()({searchText:this.keyword,page:this.currentPage,size:this.pageSize})}).then(function(t){0===t.data.code?(e.currentPage=t.data.pagination.page,e.pageSize=t.data.pagination.size,e.totalCount=t.data.pagination.total,e.tableData=t.data.data):alert("加载任务列表失败:"+t.data.message)},function(){console.log("load connection list failed")})},searchByKeyword:function(){this.currentPage=1,this.loadData()},loadDatabaseTypes:function(){var e=this;this.databaseType=[],this.$http({method:"GET",url:"/sqlrest/manager/api/v1/datasource/types"}).then(function(t){0===t.data.code?e.databaseType=t.data.data:alert("加载任务列表失败:"+t.data.message)},function(){console.log("failed")})},handleClose:function(e){},handleDelete:function(e,t){var a=this;this.$confirm("此操作将此数据源ID="+t.id+"删除么, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(function(){a.$http.delete("/sqlrest/manager/api/v1/datasource/delete/"+t.id).then(function(e){0===e.data.code?a.loadData():alert("删除任务失败:"+e.data.message)})})},handleMore:function(e,t){this.dialogFormVisible=!0,this.queryForm=t},handleTest:function(e,t){var a=this;this.$http.get("/sqlrest/manager/api/v1/datasource/test/"+t.id).then(function(e){0===e.data.code?a.$alert("测试连接成功!","提示信息",{confirmButtonText:"确定",type:"success"}):a.$alert(e.data.message,"错误信息",{confirmButtonText:"确定",type:"error"})})},addConnection:function(){this.createFormVisible=!0,this.createform={}},handleCreate:function(){var e=this,t="";if(this.databaseType.length>0)for(var a=0;a<this.databaseType.length;a++)if(this.databaseType[a].type==this.createform.type){t=this.databaseType[a].driver;break}this.$refs.createform.validate(function(a){a?e.$http({method:"POST",headers:{"Content-Type":"application/json"},url:"/sqlrest/manager/api/v1/datasource/create",data:o()({name:e.createform.name,type:e.createform.type,version:e.createform.version,driver:t,url:e.createform.url,username:e.createform.username,password:e.createform.password})}).then(function(t){0===t.data.code?(e.createFormVisible=!1,e.$message("添加连接信息成功"),e.createform={},e.loadData()):e.$alert(t.data.message,"添加连接信息失败",{confirmButtonText:"确定",type:"error"})}):e.$alert("请检查输入","提示信息",{confirmButtonText:"确定",type:"info"})})},selectChangedDriverVersion:function(e){var t=this;this.connectionDriver=[],this.$http.get("/sqlrest/manager/api/v1/datasource/"+e+"/drivers").then(function(a){if(0===a.data.code){t.connectionDriver=a.data.data;var r=t.databaseType.find(function(t){return t.type===e});r&&(t.createform.sample=r.sample)}else t.$message.error("查询数据库可用的驱动版本失败,"+a.data.message),t.connectionDriver=[]})},handleUpdate:function(e,t){var a=this;this.updateform=JSON.parse(o()(t)),this.$http.get("/sqlrest/manager/api/v1/datasource/"+this.updateform.type+"/drivers").then(function(e){0===e.data.code?a.connectionDriver=e.data.data:(a.$message.error("查询数据库可用的驱动版本失败,"+e.data.message),a.connectionDriver=[])}),this.updateFormVisible=!0},handleSave:function(){var e=this,t="";if(this.databaseType.length>0)for(var a=0;a<this.databaseType.length;a++)if(this.databaseType[a].type==this.updateform.type){t=this.databaseType[a].driver;break}this.$refs.updateform.validate(function(a){a?e.$http({method:"POST",headers:{"Content-Type":"application/json"},url:"/sqlrest/manager/api/v1/datasource/update",data:o()({id:e.updateform.id,name:e.updateform.name,type:e.updateform.type,version:e.updateform.version,driver:t,url:e.updateform.url,username:e.updateform.username,password:e.updateform.password})}).then(function(t){0===t.data.code?(e.updateFormVisible=!1,e.$message("修改连接信息成功"),e.loadData(),e.updateform={}):e.$alert(t.data.message,"修改连接信息失败",{confirmButtonText:"确定",type:"error"})}):e.$alert("请检查输入","提示信息",{confirmButtonText:"确定",type:"info"})})},handleSizeChange:function(e){this.loading=!0,this.pageSize=e,this.loadData()},handleCurrentChange:function(e){this.loading=!0,this.currentPage=e,this.loadData()}},created:function(){this.loadDatabaseTypes(),this.loadData()}},i={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("el-card",[a("div",{staticClass:"connection-list-top"},[a("div",{staticClass:"left-search-input-group"},[a("div",{staticClass:"left-search-input"},[a("el-input",{staticStyle:{width:"300px"},attrs:{placeholder:"请输入连接名称关键字搜索",clearable:!0},on:{change:e.searchByKeyword},model:{value:e.keyword,callback:function(t){e.keyword=t},expression:"keyword"}})],1)]),e._v(" "),a("div",{staticClass:"right-add-button-group"},[a("el-button",{attrs:{type:"primary",size:"mini",icon:"el-icon-document-add"},on:{click:e.addConnection}},[e._v("添加")])],1)]),e._v(" "),a("el-table",{attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},data:e.tableData,size:"small",border:""}},[a("el-table-column",{attrs:{prop:"id",label:"编号","min-width":"5%"}}),e._v(" "),a("el-table-column",{attrs:{prop:"name",label:"连接名称","show-overflow-tooltip":"","min-width":"20%"}}),e._v(" "),a("el-table-column",{attrs:{prop:"createTime",label:"创建时间","min-width":"18%"}}),e._v(" "),a("el-table-column",{attrs:{label:"数据库类型","show-overflow-tooltip":"","min-width":"15%"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("databaseIcon",{attrs:{type:t.row.type}}),e._v(" "),a("span",[e._v(e._s(t.row.type))])]}}])}),e._v(" "),a("el-table-column",{attrs:{prop:"url",label:"JDBC连接串","show-overflow-tooltip":"","min-width":"15%"}}),e._v(" "),a("el-table-column",{attrs:{prop:"username",label:"账号","show-overflow-tooltip":"","min-width":"10%"}}),e._v(" "),a("el-table-column",{attrs:{label:"操作","min-width":"35%"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-button-group",[a("el-button",{attrs:{size:"small",type:"danger",icon:"el-icon-video-play",round:""},on:{click:function(a){return e.handleTest(t.$index,t.row)}}},[e._v("测试")]),e._v(" "),a("el-button",{attrs:{size:"small",type:"primary",icon:"el-icon-document",round:""},on:{click:function(a){return e.handleMore(t.$index,t.row)}}},[e._v("详情")]),e._v(" "),a("el-button",{attrs:{size:"small",type:"warning",icon:"el-icon-edit",round:""},on:{click:function(a){return e.handleUpdate(t.$index,t.row)}}},[e._v("编辑")]),e._v(" "),a("el-button",{attrs:{size:"small",type:"success",icon:"el-icon-delete",round:""},on:{click:function(a){return e.handleDelete(t.$index,t.row)}}},[e._v("删除")])],1)]}}])})],1),e._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":e.currentPage,"page-sizes":[5,10,20,40],"page-size":e.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:e.totalCount},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}})],1),e._v(" "),a("el-dialog",{attrs:{title:"查看数据库连接信息",visible:e.dialogFormVisible,showClose:!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{attrs:{model:e.queryForm,size:"mini"}},[a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接名称","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.name,callback:function(t){e.$set(e.queryForm,"name",t)},expression:"queryForm.name"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库类型","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.type,callback:function(t){e.$set(e.queryForm,"type",t)},expression:"queryForm.type"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库驱动","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.driver,callback:function(t){e.$set(e.queryForm,"driver",t)},expression:"queryForm.driver"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"驱动版本号","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.version,callback:function(t){e.$set(e.queryForm,"version",t)},expression:"queryForm.version"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"JDBC连接串","label-width":"120px"}},[a("el-input",{attrs:{type:"textarea",rows:6,spellcheck:!1,"auto-complete":"off",readonly:!0},model:{value:e.queryForm.url,callback:function(t){e.$set(e.queryForm,"url",t)},expression:"queryForm.url"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"账号名称","label-width":"120px"}},[a("el-input",{attrs:{"auto-complete":"off",readonly:!0},model:{value:e.queryForm.username,callback:function(t){e.$set(e.queryForm,"username",t)},expression:"queryForm.username"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接密码","label-width":"120px"}},[a("el-input",{attrs:{type:"password","auto-complete":"off",readonly:!0},model:{value:e.queryForm.password,callback:function(t){e.$set(e.queryForm,"password",t)},expression:"queryForm.password"}})],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("关闭")])],1)],1),e._v(" "),a("el-dialog",{attrs:{title:"添加数据源连接信息",visible:e.createFormVisible,showClose:!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.createFormVisible=t}}},[a("el-form",{ref:"createform",attrs:{model:e.createform,size:"mini","status-icon":"",rules:e.rules}},[a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接名称","label-width":"120px",required:!0,prop:"name"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.createform.name,callback:function(t){e.$set(e.createform,"name",t)},expression:"createform.name"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库类型","label-width":"120px",required:!0,prop:"type"}},[a("el-select",{attrs:{placeholder:"请选择数据库"},on:{change:e.selectChangedDriverVersion},model:{value:e.createform.type,callback:function(t){e.$set(e.createform,"type",t)},expression:"createform.type"}},e._l(e.databaseType,function(e,t){return a("el-option",{key:t,attrs:{label:e.type,value:e.type}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"驱动版本","label-width":"120px",required:!0,prop:"version"}},[a("el-select",{attrs:{placeholder:"请选择版本"},model:{value:e.createform.version,callback:function(t){e.$set(e.createform,"version",t)},expression:"createform.version"}},e._l(e.connectionDriver,function(e,t){return a("el-option",{key:t,attrs:{label:e.driverVersion,value:e.driverVersion}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"JDBC连接串","label-width":"120px",required:!0,prop:"url"}},[a("el-alert",{attrs:{title:"样例:",type:"warning",description:e.createform.sample}}),e._v(" "),a("el-input",{attrs:{type:"textarea",rows:6,spellcheck:!1,placeholder:"请输入","auto-complete":"off"},model:{value:e.createform.url,callback:function(t){e.$set(e.createform,"url",t)},expression:"createform.url"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"账号名称","label-width":"120px",prop:"username"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.createform.username,callback:function(t){e.$set(e.createform,"username",t)},expression:"createform.username"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接密码","label-width":"120px",prop:"password"}},[a("el-input",{attrs:{type:"password","auto-complete":"off"},model:{value:e.createform.password,callback:function(t){e.$set(e.createform,"password",t)},expression:"createform.password"}})],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.createFormVisible=!1}}},[e._v("取 消")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:e.handleCreate}},[e._v("确 定")])],1)],1),e._v(" "),a("el-dialog",{attrs:{title:"修改数据源连接信息",visible:e.updateFormVisible,showClose:!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.updateFormVisible=t}}},[a("el-form",{ref:"updateform",attrs:{model:e.updateform,size:"mini","status-icon":"",rules:e.rules}},[a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接名称","label-width":"120px",required:!0,prop:"name"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.updateform.name,callback:function(t){e.$set(e.updateform,"name",t)},expression:"updateform.name"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"数据库类型","label-width":"120px",required:!0,prop:"type"}},[a("el-select",{attrs:{placeholder:"请选择数据库"},on:{change:e.selectChangedDriverVersion},model:{value:e.updateform.type,callback:function(t){e.$set(e.updateform,"type",t)},expression:"updateform.type"}},e._l(e.databaseType,function(e,t){return a("el-option",{key:t,attrs:{label:e.type,value:e.type}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"驱动版本","label-width":"120px",required:!0,prop:"version"}},[a("el-select",{attrs:{placeholder:"请选择版本"},model:{value:e.updateform.version,callback:function(t){e.$set(e.updateform,"version",t)},expression:"updateform.version"}},e._l(e.connectionDriver,function(e,t){return a("el-option",{key:t,attrs:{label:e.driverVersion,value:e.driverVersion}})}),1)],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"JDBC连接串","label-width":"120px",required:!0,prop:"url"}},[a("el-input",{attrs:{type:"textarea",rows:6,spellcheck:!1,"auto-complete":"off"},model:{value:e.updateform.url,callback:function(t){e.$set(e.updateform,"url",t)},expression:"updateform.url"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"账号名称","label-width":"120px",prop:"username"}},[a("el-input",{attrs:{"auto-complete":"off"},model:{value:e.updateform.username,callback:function(t){e.$set(e.updateform,"username",t)},expression:"updateform.username"}})],1),e._v(" "),a("el-form-item",{staticStyle:{width:"85%"},attrs:{label:"连接密码","label-width":"120px",prop:"password"}},[a("el-input",{attrs:{type:"password","auto-complete":"off"},model:{value:e.updateform.password,callback:function(t){e.$set(e.updateform,"password",t)},expression:"updateform.password"}})],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.updateFormVisible=!1}}},[e._v("取 消")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:e.handleSave}},[e._v("确 定")])],1)],1)],1)],1)},staticRenderFns:[]};var s=a("VU/8")(l,i,!1,function(e){a("s4Qd")},"data-v-5a65ae83",null);t.default=s.exports},s4Qd:function(e,t){}});
//# sourceMappingURL=5.8fcbb35b45285576e78f.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///src/components/databaseIcon/databaseIcon.vue","webpack:///./src/components/databaseIcon/databaseIcon.vue?7e80","webpack:///./src/components/databaseIcon/databaseIcon.vue","webpack:///src/views/datasource/list.vue","webpack:///./src/views/datasource/list.vue?749c","webpack:///./src/views/datasource/list.vue"],"names":["databaseIcon_databaseIcon","render","_vm","this","_h","$createElement","_c","_self","staticStyle","display","type","staticClass","staticRenderFns","Component","__webpack_require__","normalizeComponent","name","props","ssrContext","__webpack_exports__","list","components","databaseIcon","data","loading","keyword","lists","currentPage","pageSize","totalCount","databaseType","connectionDriver","tableData","queryForm","title","url","diver","version","username","password","createform","sample","updateform","id","rules","required","message","trigger","dialogFormVisible","createFormVisible","updateFormVisible","methods","loadData","_this","$http","method","headers","Content-Type","stringify_default","searchText","page","size","then","res","code","pagination","total","alert","console","log","searchByKeyword","loadDatabaseTypes","_this2","handleClose","done","handleDelete","index","row","_this3","$confirm","confirmButtonText","cancelButtonText","delete","handleMore","handleTest","_this4","get","$alert","addConnection","handleCreate","_this5","driverClass","length","i","driver","$refs","validate","valid","$message","selectChangedDriverVersion","value","_this6","varDatabaseType","find","item","error","handleUpdate","_this7","JSON","parse","handleSave","_this8","handleSizeChange","handleCurrentChange","created","datasource_list","width","attrs","placeholder","clearable","on","change","model","callback","$$v","expression","_v","icon","click","header-cell-style","background","color","border","prop","label","min-width","show-overflow-tooltip","scopedSlots","_u","key","fn","scope","_s","round","$event","$index","align","current-page","page-sizes","page-size","layout","size-change","current-change","visible","showClose","before-close","update:visible","label-width","auto-complete","readonly","$set","rows","spellcheck","slot","ref","status-icon","_l","driverVersion","description"],"mappings":"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","file":"static/js/5.8fcbb35b45285576e78f.js","sourcesContent":["<template>\n <div style=\"display: inline-block\">\n <i class=\"iconfont icon-my-SQL colored_db\"\n v-if=\"type == 'MYSQL'\"></i>\n <i class=\"iconfont icon-MariaDB-chanpinicon colored_db\"\n v-else-if=\"type == 'MARIADB'\"></i>\n <i class=\"iconfont icon-oracle-copy-png colored_db\"\n v-else-if=\"type == 'ORACLE'\"></i>\n <i class=\"iconfont icon-SQLServer colored_db\"\n v-else-if=\"type == 'SQLSERVER'\"></i>\n <i class=\"iconfont icon-postgresql colored_db\"\n v-else-if=\"type == 'POSTGRESQL'\"></i>\n <i class=\"iconfont icon-DB2 colored_db\"\n v-else-if=\"type == 'DB2'\"></i>\n <i class=\"iconfont icon-hive colored_db\"\n v-else-if=\"type == 'HIVE'\"></i>\n <i class=\"iconfont icon-clickhouse2 colored_db\"\n v-else-if=\"type == 'CLICKHOUSE'\"></i>\n <i class=\"iconfont icon-OTHER colored_db\"\n v-else></i>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"databaseIcon\",\n props: ['type']\n}\n</script>\n\n<style scoped>\n.colored_db {\n color: #0698a5;\n font-size: 18px;\n font-weight: 500;\n margin-right: 5px;\n}\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/components/databaseIcon/databaseIcon.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"display\":\"inline-block\"}},[(_vm.type == 'MYSQL')?_c('i',{staticClass:\"iconfont icon-my-SQL colored_db\"}):(_vm.type == 'MARIADB')?_c('i',{staticClass:\"iconfont icon-MariaDB-chanpinicon colored_db\"}):(_vm.type == 'ORACLE')?_c('i',{staticClass:\"iconfont icon-oracle-copy-png colored_db\"}):(_vm.type == 'SQLSERVER')?_c('i',{staticClass:\"iconfont icon-SQLServer colored_db\"}):(_vm.type == 'POSTGRESQL')?_c('i',{staticClass:\"iconfont icon-postgresql colored_db\"}):(_vm.type == 'DB2')?_c('i',{staticClass:\"iconfont icon-DB2 colored_db\"}):(_vm.type == 'HIVE')?_c('i',{staticClass:\"iconfont icon-hive colored_db\"}):(_vm.type == 'CLICKHOUSE')?_c('i',{staticClass:\"iconfont icon-clickhouse2 colored_db\"}):_c('i',{staticClass:\"iconfont icon-OTHER colored_db\"})])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-b6f86cb4\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/databaseIcon/databaseIcon.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-b6f86cb4\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./databaseIcon.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./databaseIcon.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./databaseIcon.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-b6f86cb4\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./databaseIcon.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-b6f86cb4\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/databaseIcon/databaseIcon.vue\n// module id = null\n// module chunks = ","<template>\r\n <div>\r\n <el-card>\r\n <div class=\"connection-list-top\">\r\n <div class=\"left-search-input-group\">\r\n <div class=\"left-search-input\">\r\n <el-input placeholder=\"请输入连接名称关键字搜索\"\r\n v-model=\"keyword\"\r\n @change=\"searchByKeyword\"\r\n :clearable=true\r\n style=\"width:300px\">\r\n </el-input>\r\n </div>\r\n </div>\r\n <div class=\"right-add-button-group\">\r\n <el-button type=\"primary\"\r\n size=\"mini\"\r\n icon=\"el-icon-document-add\"\r\n @click=\"addConnection\">添加</el-button>\r\n </div>\r\n </div>\r\n\r\n <el-table :header-cell-style=\"{background:'#eef1f6',color:'#606266'}\"\r\n :data=\"tableData\"\r\n size=\"small\"\r\n border>\r\n <el-table-column prop=\"id\"\r\n label=\"编号\"\r\n min-width=\"5%\"></el-table-column>\r\n <el-table-column prop=\"name\"\r\n label=\"连接名称\"\r\n show-overflow-tooltip\r\n min-width=\"20%\"></el-table-column>\r\n <el-table-column prop=\"createTime\"\r\n label=\"创建时间\"\r\n min-width=\"18%\"></el-table-column>\r\n <el-table-column label=\"数据库类型\"\r\n show-overflow-tooltip\r\n min-width=\"15%\">\r\n <template slot-scope=\"scope\">\r\n <databaseIcon :type=\"scope.row.type\"></databaseIcon>\r\n <span>{{ scope.row.type }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"url\"\r\n label=\"JDBC连接串\"\r\n show-overflow-tooltip\r\n min-width=\"15%\"></el-table-column>\r\n <el-table-column prop=\"username\"\r\n label=\"账号\"\r\n show-overflow-tooltip\r\n min-width=\"10%\"></el-table-column>\r\n <el-table-column label=\"操作\"\r\n min-width=\"35%\">\r\n <template slot-scope=\"scope\">\r\n <el-button-group>\r\n <el-button size=\"small\"\r\n type=\"danger\"\r\n icon=\"el-icon-video-play\"\r\n @click=\"handleTest(scope.$index, scope.row)\"\r\n round>测试</el-button>\r\n <el-button size=\"small\"\r\n type=\"primary\"\r\n icon=\"el-icon-document\"\r\n @click=\"handleMore(scope.$index, scope.row)\"\r\n round>详情</el-button>\r\n <el-button size=\"small\"\r\n type=\"warning\"\r\n icon=\"el-icon-edit\"\r\n @click=\"handleUpdate(scope.$index, scope.row)\"\r\n round>编辑</el-button>\r\n <el-button size=\"small\"\r\n type=\"success\"\r\n icon=\"el-icon-delete\"\r\n @click=\"handleDelete(scope.$index, scope.row)\"\r\n round>删除</el-button>\r\n </el-button-group>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"page\"\r\n align=\"right\">\r\n <el-pagination @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n :current-page=\"currentPage\"\r\n :page-sizes=\"[5, 10, 20, 40]\"\r\n :page-size=\"pageSize\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"totalCount\"></el-pagination>\r\n </div>\r\n\r\n <el-dialog title=\"查看数据库连接信息\"\r\n :visible.sync=\"dialogFormVisible\"\r\n :showClose=\"false\"\r\n :before-close=\"handleClose\">\r\n <el-form :model=\"queryForm\"\r\n size=\"mini\">\r\n <el-form-item label=\"连接名称\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.name\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库类型\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.type\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库驱动\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.driver\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"驱动版本号\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.version\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"JDBC连接串\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input type=\"textarea\"\r\n :rows=\"6\"\r\n :spellcheck=\"false\"\r\n v-model=\"queryForm.url\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"账号名称\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"queryForm.username\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"连接密码\"\r\n label-width=\"120px\"\r\n style=\"width:85%\">\r\n <el-input type=\"password\"\r\n v-model=\"queryForm.password\"\r\n auto-complete=\"off\"\r\n :readonly=true></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\"\r\n class=\"dialog-footer\">\r\n <el-button @click=\"dialogFormVisible = false\">关闭</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <el-dialog title=\"添加数据源连接信息\"\r\n :visible.sync=\"createFormVisible\"\r\n :showClose=\"false\"\r\n :before-close=\"handleClose\">\r\n <el-form :model=\"createform\"\r\n size=\"mini\"\r\n status-icon\r\n :rules=\"rules\"\r\n ref=\"createform\">\r\n <el-form-item label=\"连接名称\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"name\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"createform.name\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库类型\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"type\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"createform.type\"\r\n @change=\"selectChangedDriverVersion\"\r\n placeholder=\"请选择数据库\">\r\n <el-option v-for=\"(item,index) in databaseType\"\r\n :key=\"index\"\r\n :label=\"item.type\"\r\n :value=\"item.type\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"驱动版本\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"version\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"createform.version\"\r\n placeholder=\"请选择版本\">\r\n <el-option v-for=\"(item,index) in connectionDriver\"\r\n :key=\"index\"\r\n :label=\"item.driverVersion\"\r\n :value=\"item.driverVersion\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"JDBC连接串\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"url\"\r\n style=\"width:85%\">\r\n <el-alert title=\"样例:\"\r\n type=\"warning\"\r\n :description=\"createform.sample\">\r\n </el-alert>\r\n <el-input type=\"textarea\"\r\n :rows=\"6\"\r\n :spellcheck=\"false\"\r\n placeholder=\"请输入\"\r\n v-model=\"createform.url\"\r\n auto-complete=\"off\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item label=\"账号名称\"\r\n label-width=\"120px\"\r\n prop=\"username\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"createform.username\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"连接密码\"\r\n label-width=\"120px\"\r\n prop=\"password\"\r\n style=\"width:85%\">\r\n <el-input type=\"password\"\r\n v-model=\"createform.password\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\"\r\n class=\"dialog-footer\">\r\n <el-button @click=\"createFormVisible = false\">取 消</el-button>\r\n <el-button type=\"primary\"\r\n @click=\"handleCreate\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <el-dialog title=\"修改数据源连接信息\"\r\n :visible.sync=\"updateFormVisible\"\r\n :showClose=\"false\"\r\n :before-close=\"handleClose\">\r\n <el-form :model=\"updateform\"\r\n size=\"mini\"\r\n status-icon\r\n :rules=\"rules\"\r\n ref=\"updateform\">\r\n <el-form-item label=\"连接名称\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"name\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"updateform.name\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"数据库类型\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"type\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"updateform.type\"\r\n @change=\"selectChangedDriverVersion\"\r\n placeholder=\"请选择数据库\">\r\n <el-option v-for=\"(item,index) in databaseType\"\r\n :key=\"index\"\r\n :label=\"item.type\"\r\n :value=\"item.type\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"驱动版本\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"version\"\r\n style=\"width:85%\">\r\n <el-select v-model=\"updateform.version\"\r\n placeholder=\"请选择版本\">\r\n <el-option v-for=\"(item,index) in connectionDriver\"\r\n :key=\"index\"\r\n :label=\"item.driverVersion\"\r\n :value=\"item.driverVersion\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"JDBC连接串\"\r\n label-width=\"120px\"\r\n :required=true\r\n prop=\"url\"\r\n style=\"width:85%\">\r\n <el-input type=\"textarea\"\r\n :rows=\"6\"\r\n :spellcheck=\"false\"\r\n v-model=\"updateform.url\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"账号名称\"\r\n label-width=\"120px\"\r\n prop=\"username\"\r\n style=\"width:85%\">\r\n <el-input v-model=\"updateform.username\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"连接密码\"\r\n label-width=\"120px\"\r\n prop=\"password\"\r\n style=\"width:85%\">\r\n <el-input type=\"password\"\r\n v-model=\"updateform.password\"\r\n auto-complete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\"\r\n class=\"dialog-footer\">\r\n <el-button @click=\"updateFormVisible = false\">取 消</el-button>\r\n <el-button type=\"primary\"\r\n @click=\"handleSave\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n </el-card>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport databaseIcon from \"@/components/databaseIcon/databaseIcon\";\r\n\r\nexport default {\r\n name: \"datasource\",\r\n components: {\r\n databaseIcon\r\n },\r\n data () {\r\n return {\r\n loading: true,\r\n keyword: null,\r\n lists: [],\r\n currentPage: 1,\r\n pageSize: 10,\r\n totalCount: 2,\r\n databaseType: [],\r\n connectionDriver: [],\r\n tableData: [\r\n ],\r\n queryForm: {\r\n title: \"\",\r\n type: \"\",\r\n url: \"\",\r\n diver: \"\",\r\n version: \"\",\r\n username: \"\",\r\n password: \"\"\r\n },\r\n createform: {\r\n title: \"\",\r\n type: \"\",\r\n diver: \"\",\r\n sample: \"\",\r\n url: \"\",\r\n version: \"\",\r\n username: \"\",\r\n password: \"\"\r\n },\r\n updateform: {\r\n id: 0,\r\n title: \"\",\r\n type: \"\",\r\n diver: \"\",\r\n version: \"\",\r\n username: \"\",\r\n password: \"\"\r\n },\r\n rules: {\r\n name: [\r\n {\r\n required: true,\r\n message: \"名称不能为空\",\r\n trigger: \"blur\"\r\n }\r\n ],\r\n type: [\r\n {\r\n required: true,\r\n message: \"数据库类型必须选择\",\r\n trigger: \"change\"\r\n }\r\n ],\r\n version: [\r\n {\r\n required: true,\r\n message: \"驱动版本必须选择\",\r\n trigger: \"change\"\r\n }\r\n ],\r\n url: [\r\n {\r\n required: true,\r\n message: \"Jdbc URL必须提供\",\r\n trigger: \"blur\"\r\n }\r\n ],\r\n username: [\r\n {\r\n required: true,\r\n message: \"连接账号名必须提供\",\r\n trigger: \"blur\"\r\n }\r\n ],\r\n password: [\r\n {\r\n required: true,\r\n message: \"连接密码必须提供\",\r\n trigger: \"blur\"\r\n }\r\n ]\r\n },\r\n dialogFormVisible: false,\r\n createFormVisible: false,\r\n updateFormVisible: false\r\n }\r\n },\r\n methods: {\r\n loadData: function () {\r\n this.$http({\r\n method: \"POST\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n url: \"/sqlrest/manager/api/v1/datasource/list\",\r\n data: JSON.stringify({\r\n searchText: this.keyword,\r\n page: this.currentPage,\r\n size: this.pageSize\r\n })\r\n }).then(res => {\r\n if (0 === res.data.code) {\r\n this.currentPage = res.data.pagination.page;\r\n this.pageSize = res.data.pagination.size;\r\n this.totalCount = res.data.pagination.total;\r\n this.tableData = res.data.data;\r\n } else {\r\n alert(\"加载任务列表失败:\" + res.data.message);\r\n }\r\n },\r\n function () {\r\n console.log(\"load connection list failed\");\r\n }\r\n );\r\n },\r\n searchByKeyword: function () {\r\n this.currentPage = 1;\r\n this.loadData();\r\n },\r\n loadDatabaseTypes: function () {\r\n this.databaseType = [];\r\n this.$http({\r\n method: \"GET\",\r\n url: \"/sqlrest/manager/api/v1/datasource/types\"\r\n }).then(\r\n res => {\r\n if (0 === res.data.code) {\r\n this.databaseType = res.data.data;\r\n } else {\r\n alert(\"加载任务列表失败:\" + res.data.message);\r\n }\r\n },\r\n function () {\r\n console.log(\"failed\");\r\n }\r\n );\r\n },\r\n handleClose (done) {\r\n },\r\n handleDelete: function (index, row) {\r\n this.$confirm(\r\n \"此操作将此数据源ID=\" + row.id + \"删除么, 是否继续?\",\r\n \"提示\",\r\n {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\"\r\n }\r\n ).then(() => {\r\n this.$http.delete(\r\n \"/sqlrest/manager/api/v1/datasource/delete/\" + row.id\r\n ).then(res => {\r\n //console.log(res);\r\n if (0 === res.data.code) {\r\n this.loadData();\r\n } else {\r\n alert(\"删除任务失败:\" + res.data.message);\r\n }\r\n });\r\n });\r\n },\r\n handleMore: function (index, row) {\r\n this.dialogFormVisible = true;\r\n this.queryForm = row;\r\n },\r\n handleTest: function (index, row) {\r\n this.$http.get(\r\n \"/sqlrest/manager/api/v1/datasource/test/\" + row.id\r\n ).then(res => {\r\n if (0 === res.data.code) {\r\n this.$alert(\"测试连接成功!\", \"提示信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"success\"\r\n }\r\n );\r\n } else {\r\n this.$alert(res.data.message, \"错误信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"error\"\r\n }\r\n );\r\n }\r\n });\r\n },\r\n addConnection: function () {\r\n this.createFormVisible = true;\r\n this.createform = {};\r\n },\r\n handleCreate: function () {\r\n let driverClass = \"\";\r\n if (this.databaseType.length > 0) {\r\n for (let i = 0; i < this.databaseType.length; i++) {\r\n if (this.databaseType[i].type == this.createform.type) {\r\n driverClass = this.databaseType[i].driver;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.$refs['createform'].validate(valid => {\r\n if (valid) {\r\n this.$http({\r\n method: \"POST\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n url: \"/sqlrest/manager/api/v1/datasource/create\",\r\n data: JSON.stringify({\r\n name: this.createform.name,\r\n type: this.createform.type,\r\n version: this.createform.version,\r\n driver: driverClass,\r\n url: this.createform.url,\r\n username: this.createform.username,\r\n password: this.createform.password\r\n })\r\n }).then(res => {\r\n if (0 === res.data.code) {\r\n this.createFormVisible = false;\r\n this.$message(\"添加连接信息成功\");\r\n this.createform = {};\r\n this.loadData();\r\n } else {\r\n this.$alert(res.data.message, \"添加连接信息失败\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"error\"\r\n }\r\n );\r\n }\r\n });\r\n } else {\r\n this.$alert(\"请检查输入\", \"提示信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"info\"\r\n }\r\n );\r\n }\r\n });\r\n },\r\n selectChangedDriverVersion: function (value) {\r\n this.connectionDriver = [];\r\n this.$http.get(\r\n \"/sqlrest/manager/api/v1/datasource/\" + value + \"/drivers\"\r\n ).then(res => {\r\n if (0 === res.data.code) {\r\n this.connectionDriver = res.data.data;\r\n let varDatabaseType = this.databaseType.find(\r\n (item) => {\r\n return item.type === value;\r\n });\r\n if (varDatabaseType) {\r\n this.createform.sample = varDatabaseType.sample;\r\n }\r\n } else {\r\n this.$message.error(\"查询数据库可用的驱动版本失败,\" + res.data.message);\r\n this.connectionDriver = [];\r\n }\r\n });\r\n },\r\n handleUpdate: function (index, row) {\r\n this.updateform = JSON.parse(JSON.stringify(row));\r\n this.$http.get(\r\n \"/sqlrest/manager/api/v1/datasource/\" + this.updateform.type + \"/drivers\"\r\n ).then(res => {\r\n if (0 === res.data.code) {\r\n this.connectionDriver = res.data.data;\r\n } else {\r\n this.$message.error(\"查询数据库可用的驱动版本失败,\" + res.data.message);\r\n this.connectionDriver = [];\r\n }\r\n });\r\n this.updateFormVisible = true;\r\n },\r\n handleSave: function () {\r\n let driverClass = \"\";\r\n if (this.databaseType.length > 0) {\r\n for (let i = 0; i < this.databaseType.length; i++) {\r\n if (this.databaseType[i].type == this.updateform.type) {\r\n driverClass = this.databaseType[i].driver;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.$refs['updateform'].validate(valid => {\r\n if (valid) {\r\n this.$http({\r\n method: \"POST\",\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n url: \"/sqlrest/manager/api/v1/datasource/update\",\r\n data: JSON.stringify({\r\n id: this.updateform.id,\r\n name: this.updateform.name,\r\n type: this.updateform.type,\r\n version: this.updateform.version,\r\n driver: driverClass,\r\n url: this.updateform.url,\r\n username: this.updateform.username,\r\n password: this.updateform.password\r\n })\r\n }).then(res => {\r\n if (0 === res.data.code) {\r\n this.updateFormVisible = false;\r\n this.$message(\"修改连接信息成功\");\r\n this.loadData();\r\n this.updateform = {};\r\n } else {\r\n this.$alert(res.data.message, \"修改连接信息失败\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"error\"\r\n }\r\n );\r\n }\r\n });\r\n } else {\r\n this.$alert(\"请检查输入\", \"提示信息\",\r\n {\r\n confirmButtonText: \"确定\",\r\n type: \"info\"\r\n }\r\n );\r\n }\r\n });\r\n },\r\n handleSizeChange: function (pageSize) {\r\n this.loading = true;\r\n this.pageSize = pageSize;\r\n this.loadData();\r\n },\r\n\r\n handleCurrentChange: function (currentPage) {\r\n this.loading = true;\r\n this.currentPage = currentPage;\r\n this.loadData();\r\n }\r\n },\r\n created () {\r\n this.loadDatabaseTypes();\r\n this.loadData();\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.el-table {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.el-card,\r\n.el-message {\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.connection-list-top {\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n\r\n.left-search-input-group {\r\n width: calc(100% - 100px);\r\n margin-right: auto;\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n.left-search-input {\r\n width: 300px;\r\n margin-right: auto;\r\n margin: 10px 5px;\r\n}\r\n.right-add-button-group {\r\n width: 100px;\r\n margin-left: auto;\r\n margin: 10px 5px;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/views/datasource/list.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-card',[_c('div',{staticClass:\"connection-list-top\"},[_c('div',{staticClass:\"left-search-input-group\"},[_c('div',{staticClass:\"left-search-input\"},[_c('el-input',{staticStyle:{\"width\":\"300px\"},attrs:{\"placeholder\":\"请输入连接名称关键字搜索\",\"clearable\":true},on:{\"change\":_vm.searchByKeyword},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"right-add-button-group\"},[_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\",\"icon\":\"el-icon-document-add\"},on:{\"click\":_vm.addConnection}},[_vm._v(\"添加\")])],1)]),_vm._v(\" \"),_c('el-table',{attrs:{\"header-cell-style\":{background:'#eef1f6',color:'#606266'},\"data\":_vm.tableData,\"size\":\"small\",\"border\":\"\"}},[_c('el-table-column',{attrs:{\"prop\":\"id\",\"label\":\"编号\",\"min-width\":\"5%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"name\",\"label\":\"连接名称\",\"show-overflow-tooltip\":\"\",\"min-width\":\"20%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"createTime\",\"label\":\"创建时间\",\"min-width\":\"18%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"label\":\"数据库类型\",\"show-overflow-tooltip\":\"\",\"min-width\":\"15%\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('databaseIcon',{attrs:{\"type\":scope.row.type}}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(scope.row.type))])]}}])}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"url\",\"label\":\"JDBC连接串\",\"show-overflow-tooltip\":\"\",\"min-width\":\"15%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"prop\":\"username\",\"label\":\"账号\",\"show-overflow-tooltip\":\"\",\"min-width\":\"10%\"}}),_vm._v(\" \"),_c('el-table-column',{attrs:{\"label\":\"操作\",\"min-width\":\"35%\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button-group',[_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"danger\",\"icon\":\"el-icon-video-play\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleTest(scope.$index, scope.row)}}},[_vm._v(\"测试\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"primary\",\"icon\":\"el-icon-document\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleMore(scope.$index, scope.row)}}},[_vm._v(\"详情\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"warning\",\"icon\":\"el-icon-edit\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleUpdate(scope.$index, scope.row)}}},[_vm._v(\"编辑\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"success\",\"icon\":\"el-icon-delete\",\"round\":\"\"},on:{\"click\":function($event){return _vm.handleDelete(scope.$index, scope.row)}}},[_vm._v(\"删除\")])],1)]}}])})],1),_vm._v(\" \"),_c('div',{staticClass:\"page\",attrs:{\"align\":\"right\"}},[_c('el-pagination',{attrs:{\"current-page\":_vm.currentPage,\"page-sizes\":[5, 10, 20, 40],\"page-size\":_vm.pageSize,\"layout\":\"total, sizes, prev, pager, next, jumper\",\"total\":_vm.totalCount},on:{\"size-change\":_vm.handleSizeChange,\"current-change\":_vm.handleCurrentChange}})],1),_vm._v(\" \"),_c('el-dialog',{attrs:{\"title\":\"查看数据库连接信息\",\"visible\":_vm.dialogFormVisible,\"showClose\":false,\"before-close\":_vm.handleClose},on:{\"update:visible\":function($event){_vm.dialogFormVisible=$event}}},[_c('el-form',{attrs:{\"model\":_vm.queryForm,\"size\":\"mini\"}},[_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接名称\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.name),callback:function ($$v) {_vm.$set(_vm.queryForm, \"name\", $$v)},expression:\"queryForm.name\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库类型\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.type),callback:function ($$v) {_vm.$set(_vm.queryForm, \"type\", $$v)},expression:\"queryForm.type\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库驱动\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.driver),callback:function ($$v) {_vm.$set(_vm.queryForm, \"driver\", $$v)},expression:\"queryForm.driver\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"驱动版本号\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.version),callback:function ($$v) {_vm.$set(_vm.queryForm, \"version\", $$v)},expression:\"queryForm.version\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"JDBC连接串\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":6,\"spellcheck\":false,\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.url),callback:function ($$v) {_vm.$set(_vm.queryForm, \"url\", $$v)},expression:\"queryForm.url\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"账号名称\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.username),callback:function ($$v) {_vm.$set(_vm.queryForm, \"username\", $$v)},expression:\"queryForm.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接密码\",\"label-width\":\"120px\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\",\"readonly\":true},model:{value:(_vm.queryForm.password),callback:function ($$v) {_vm.$set(_vm.queryForm, \"password\", $$v)},expression:\"queryForm.password\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.dialogFormVisible = false}}},[_vm._v(\"关闭\")])],1)],1),_vm._v(\" \"),_c('el-dialog',{attrs:{\"title\":\"添加数据源连接信息\",\"visible\":_vm.createFormVisible,\"showClose\":false,\"before-close\":_vm.handleClose},on:{\"update:visible\":function($event){_vm.createFormVisible=$event}}},[_c('el-form',{ref:\"createform\",attrs:{\"model\":_vm.createform,\"size\":\"mini\",\"status-icon\":\"\",\"rules\":_vm.rules}},[_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接名称\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"name\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.createform.name),callback:function ($$v) {_vm.$set(_vm.createform, \"name\", $$v)},expression:\"createform.name\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库类型\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"type\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择数据库\"},on:{\"change\":_vm.selectChangedDriverVersion},model:{value:(_vm.createform.type),callback:function ($$v) {_vm.$set(_vm.createform, \"type\", $$v)},expression:\"createform.type\"}},_vm._l((_vm.databaseType),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.type,\"value\":item.type}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"驱动版本\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"version\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择版本\"},model:{value:(_vm.createform.version),callback:function ($$v) {_vm.$set(_vm.createform, \"version\", $$v)},expression:\"createform.version\"}},_vm._l((_vm.connectionDriver),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.driverVersion,\"value\":item.driverVersion}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"JDBC连接串\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"url\"}},[_c('el-alert',{attrs:{\"title\":\"样例:\",\"type\":\"warning\",\"description\":_vm.createform.sample}}),_vm._v(\" \"),_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":6,\"spellcheck\":false,\"placeholder\":\"请输入\",\"auto-complete\":\"off\"},model:{value:(_vm.createform.url),callback:function ($$v) {_vm.$set(_vm.createform, \"url\", $$v)},expression:\"createform.url\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"账号名称\",\"label-width\":\"120px\",\"prop\":\"username\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.createform.username),callback:function ($$v) {_vm.$set(_vm.createform, \"username\", $$v)},expression:\"createform.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接密码\",\"label-width\":\"120px\",\"prop\":\"password\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\"},model:{value:(_vm.createform.password),callback:function ($$v) {_vm.$set(_vm.createform, \"password\", $$v)},expression:\"createform.password\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.createFormVisible = false}}},[_vm._v(\"取 消\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleCreate}},[_vm._v(\"确 定\")])],1)],1),_vm._v(\" \"),_c('el-dialog',{attrs:{\"title\":\"修改数据源连接信息\",\"visible\":_vm.updateFormVisible,\"showClose\":false,\"before-close\":_vm.handleClose},on:{\"update:visible\":function($event){_vm.updateFormVisible=$event}}},[_c('el-form',{ref:\"updateform\",attrs:{\"model\":_vm.updateform,\"size\":\"mini\",\"status-icon\":\"\",\"rules\":_vm.rules}},[_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接名称\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"name\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.updateform.name),callback:function ($$v) {_vm.$set(_vm.updateform, \"name\", $$v)},expression:\"updateform.name\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"数据库类型\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"type\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择数据库\"},on:{\"change\":_vm.selectChangedDriverVersion},model:{value:(_vm.updateform.type),callback:function ($$v) {_vm.$set(_vm.updateform, \"type\", $$v)},expression:\"updateform.type\"}},_vm._l((_vm.databaseType),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.type,\"value\":item.type}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"驱动版本\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"version\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择版本\"},model:{value:(_vm.updateform.version),callback:function ($$v) {_vm.$set(_vm.updateform, \"version\", $$v)},expression:\"updateform.version\"}},_vm._l((_vm.connectionDriver),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.driverVersion,\"value\":item.driverVersion}})}),1)],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"JDBC连接串\",\"label-width\":\"120px\",\"required\":true,\"prop\":\"url\"}},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":6,\"spellcheck\":false,\"auto-complete\":\"off\"},model:{value:(_vm.updateform.url),callback:function ($$v) {_vm.$set(_vm.updateform, \"url\", $$v)},expression:\"updateform.url\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"账号名称\",\"label-width\":\"120px\",\"prop\":\"username\"}},[_c('el-input',{attrs:{\"auto-complete\":\"off\"},model:{value:(_vm.updateform.username),callback:function ($$v) {_vm.$set(_vm.updateform, \"username\", $$v)},expression:\"updateform.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{staticStyle:{\"width\":\"85%\"},attrs:{\"label\":\"连接密码\",\"label-width\":\"120px\",\"prop\":\"password\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\"},model:{value:(_vm.updateform.password),callback:function ($$v) {_vm.$set(_vm.updateform, \"password\", $$v)},expression:\"updateform.password\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.updateFormVisible = false}}},[_vm._v(\"取 消\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleSave}},[_vm._v(\"确 定\")])],1)],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5a65ae83\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/datasource/list.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-5a65ae83\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./list.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5a65ae83\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./list.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-5a65ae83\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/datasource/list.vue\n// module id = null\n// module chunks = "],"sourceRoot":""}
\ No newline at end of file
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,o,c){for(var f,d,i,u=0,b=[];u<r.length;u++)d=r[u],t[d]&&b.push(t[d][0]),t[d]=0;for(f in o)Object.prototype.hasOwnProperty.call(o,f)&&(e[f]=o[f]);for(n&&n(r,o,c);b.length;)b.shift()();if(c)for(u=0;u<c.length;u++)i=a(a.s=c[u]);return i};var r={},t={24:0};function a(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,a){n=t[e]=[r,a]});n[2]=r;var o=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,a.nc&&c.setAttribute("nonce",a.nc),c.src=a.p+"static/js/"+e+"."+{0:"e9559647b804220c4683",1:"b17200cccd46e216dcb3",2:"140338f6a5528feea1a3",3:"776d791724a8de12ff9e",4:"f8494b8dd039413f79c8",5:"530a43b5ad6055214539",6:"8f85de06573e2a5f9562",7:"061807fe4716131f26f8",8:"d1391c270de5a9f111c5",9:"cbdb7fa4f5180acfbb03",10:"7eeaa94fd42d34a86b92",11:"096c0f0eaf2850056b7e",12:"cea57d271a961f0b44ad",13:"4d2138ee1bee3ad573f4",14:"429592868e75adc95933",15:"3b3f0c03ff4fed9903cc",16:"9616cfe0a4f7517b0841",17:"b4bc5fa31e227bee8651",18:"5e7f065a8d031847e833",19:"3936346cb7e30aa279e2",20:"5ef9c751035ee9a08f94",21:"d8007e7169c085e13dab"}[e]+".js";var f=setTimeout(d,12e4);function d(){c.onerror=c.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return c.onerror=c.onload=d,o.appendChild(c),r},a.m=e,a.c=r,a.d=function(e,n,r){a.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="/",a.oe=function(e){throw console.error(e),e}}([]);
//# sourceMappingURL=manifest.075ed85199204f860c2e.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap 92235ac6acee6026d4ac"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","24","exports","module","l","e","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","script","createElement","type","charset","async","timeout","nc","setAttribute","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","setTimeout","onScriptComplete","onerror","onload","clearTimeout","chunk","Error","undefined","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error"],"mappings":"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","file":"static/js/manifest.d057b7936f48fb6e72f1.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t24: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = \"text/javascript\";\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"e9559647b804220c4683\",\"1\":\"b17200cccd46e216dcb3\",\"2\":\"140338f6a5528feea1a3\",\"3\":\"776d791724a8de12ff9e\",\"4\":\"f8494b8dd039413f79c8\",\"5\":\"8fcbb35b45285576e78f\",\"6\":\"8f85de06573e2a5f9562\",\"7\":\"061807fe4716131f26f8\",\"8\":\"d1391c270de5a9f111c5\",\"9\":\"cbdb7fa4f5180acfbb03\",\"10\":\"7eeaa94fd42d34a86b92\",\"11\":\"096c0f0eaf2850056b7e\",\"12\":\"da6814989fe7ae4e141f\",\"13\":\"4d2138ee1bee3ad573f4\",\"14\":\"429592868e75adc95933\",\"15\":\"3b3f0c03ff4fed9903cc\",\"16\":\"9616cfe0a4f7517b0841\",\"17\":\"b4bc5fa31e227bee8651\",\"18\":\"5e7f065a8d031847e833\",\"19\":\"3936346cb7e30aa279e2\",\"20\":\"5ef9c751035ee9a08f94\",\"21\":\"d8007e7169c085e13dab\"}[chunkId] + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 92235ac6acee6026d4ac"],"sourceRoot":""} {"version":3,"sources":["webpack:///webpack/bootstrap d545191cd94bb0ec0f0e"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","24","exports","module","l","e","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","script","createElement","type","charset","async","timeout","nc","setAttribute","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","setTimeout","onScriptComplete","onerror","onload","clearTimeout","chunk","Error","undefined","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error"],"mappings":"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","file":"static/js/manifest.075ed85199204f860c2e.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t24: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = \"text/javascript\";\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"e9559647b804220c4683\",\"1\":\"b17200cccd46e216dcb3\",\"2\":\"140338f6a5528feea1a3\",\"3\":\"776d791724a8de12ff9e\",\"4\":\"f8494b8dd039413f79c8\",\"5\":\"530a43b5ad6055214539\",\"6\":\"8f85de06573e2a5f9562\",\"7\":\"061807fe4716131f26f8\",\"8\":\"d1391c270de5a9f111c5\",\"9\":\"cbdb7fa4f5180acfbb03\",\"10\":\"7eeaa94fd42d34a86b92\",\"11\":\"096c0f0eaf2850056b7e\",\"12\":\"cea57d271a961f0b44ad\",\"13\":\"4d2138ee1bee3ad573f4\",\"14\":\"429592868e75adc95933\",\"15\":\"3b3f0c03ff4fed9903cc\",\"16\":\"9616cfe0a4f7517b0841\",\"17\":\"b4bc5fa31e227bee8651\",\"18\":\"5e7f065a8d031847e833\",\"19\":\"3936346cb7e30aa279e2\",\"20\":\"5ef9c751035ee9a08f94\",\"21\":\"d8007e7169c085e13dab\"}[chunkId] + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d545191cd94bb0ec0f0e"],"sourceRoot":""}
\ No newline at end of file \ No newline at end of file
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,f,a){for(var c,d,i,u=0,b=[];u<r.length;u++)d=r[u],t[d]&&b.push(t[d][0]),t[d]=0;for(c in f)Object.prototype.hasOwnProperty.call(f,c)&&(e[c]=f[c]);for(n&&n(r,f,a);b.length;)b.shift()();if(a)for(u=0;u<a.length;u++)i=o(o.s=a[u]);return i};var r={},t={24:0};function o(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,o){n=t[e]=[r,o]});n[2]=r;var f=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+e+"."+{0:"e9559647b804220c4683",1:"b17200cccd46e216dcb3",2:"140338f6a5528feea1a3",3:"776d791724a8de12ff9e",4:"f8494b8dd039413f79c8",5:"8fcbb35b45285576e78f",6:"8f85de06573e2a5f9562",7:"061807fe4716131f26f8",8:"d1391c270de5a9f111c5",9:"cbdb7fa4f5180acfbb03",10:"7eeaa94fd42d34a86b92",11:"096c0f0eaf2850056b7e",12:"da6814989fe7ae4e141f",13:"4d2138ee1bee3ad573f4",14:"429592868e75adc95933",15:"3b3f0c03ff4fed9903cc",16:"9616cfe0a4f7517b0841",17:"b4bc5fa31e227bee8651",18:"5e7f065a8d031847e833",19:"3936346cb7e30aa279e2",20:"5ef9c751035ee9a08f94",21:"d8007e7169c085e13dab"}[e]+".js";var c=setTimeout(d,12e4);function d(){a.onerror=a.onload=null,clearTimeout(c);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=d,f.appendChild(a),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="/",o.oe=function(e){throw console.error(e),e}}([]);
//# sourceMappingURL=manifest.d057b7936f48fb6e72f1.js.map
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.gitee.sqlrest.template; ...@@ -3,6 +3,7 @@ package com.gitee.sqlrest.template;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.ibatis.builder.BaseBuilder; import org.apache.ibatis.builder.BaseBuilder;
...@@ -198,6 +199,19 @@ public class XmlScriptBuilder extends BaseBuilder { ...@@ -198,6 +199,19 @@ public class XmlScriptBuilder extends BaseBuilder {
inputParams.put(collection, true); inputParams.put(collection, true);
// extract object item
Map<String, Boolean> objectItems = new LinkedHashMap<>();
storeParameter(nodeToHandle.getStringBody(), objectItems);
for (Map.Entry<String, Boolean> entry : objectItems.entrySet()) {
String param = entry.getKey();
if (null != param && param.length() > 0) {
String name = param.replaceFirst(item, collection);
if (!collection.equals(name)) {
inputParams.put(name, false);
}
}
}
ForEachSqlNode forEachSqlNode = new ForEachSqlNode(configuration, mixedSqlNode, collection, nullable, index, item, ForEachSqlNode forEachSqlNode = new ForEachSqlNode(configuration, mixedSqlNode, collection, nullable, index, item,
open, close, separator); open, close, separator);
targetContents.add(forEachSqlNode); targetContents.add(forEachSqlNode);
......
...@@ -62,7 +62,19 @@ public class XmlSqlTemplate { ...@@ -62,7 +62,19 @@ public class XmlSqlTemplate {
if (idx > 0) { if (idx > 0) {
subName = name; subName = name;
name = name.substring(0, idx); name = name.substring(0, idx);
if (entry.getValue()) {
names.put(name, false);
if (null != subName) {
names.put(subName, true);
}
} else {
names.putIfAbsent(name, entry.getValue());
if (null != subName) {
names.putIfAbsent(subName, entry.getValue());
}
} }
continue;
} else {
if (entry.getValue()) { if (entry.getValue()) {
names.put(name, true); names.put(name, true);
if (null != subName) { if (null != subName) {
...@@ -75,6 +87,7 @@ public class XmlSqlTemplate { ...@@ -75,6 +87,7 @@ public class XmlSqlTemplate {
} }
} }
} }
}
return names; return names;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment