2019-07-05 22:40:40 +08:00
|
|
|
|
<template>
|
2020-05-06 21:57:36 +08:00
|
|
|
|
<div style="padding: 0 10px;">
|
2021-04-25 21:56:27 +08:00
|
|
|
|
<el-form :inline="true">
|
|
|
|
|
|
<el-form-item label="名字">
|
|
|
|
|
|
<el-input v-model="searchParam.name" placeholder="名字"></el-input>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="分组">
|
|
|
|
|
|
<el-select v-model="searchParam.groupName" placeholder="分组">
|
|
|
|
|
|
<el-option value="">全部</el-option>
|
|
|
|
|
|
<el-option :value="item" v-for="item in datasourceGroupList"></el-option>
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item>
|
|
|
|
|
|
<el-button type="primary" :loading="loadDataListLoading" @click="getDatasourceList" icon="el-icon-search">查询</el-button>
|
|
|
|
|
|
<el-button @click="addDatasource" icon="el-icon-circle-plus-outline">新增</el-button>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
|
|
|
|
<el-table :data="datasourceList" stripe border style="width: 100%; margin-bottom: 5px;">
|
|
|
|
|
|
<el-table-column prop="name" label="名字"></el-table-column>
|
|
|
|
|
|
<el-table-column prop="groupName" label="分组"></el-table-column>
|
|
|
|
|
|
<el-table-column prop="driverClassName" label="驱动类"></el-table-column>
|
|
|
|
|
|
<el-table-column prop="sourceName" label="账号"></el-table-column>
|
|
|
|
|
|
<el-table-column label="操作" width="220">
|
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
|
<el-button v-on:click="editDatasource(scope.row)" type="primary" size="mini">修改</el-button>
|
|
|
|
|
|
<el-button v-on:click="editDbAuth(scope.row)" type="success" size="mini">权限</el-button>
|
|
|
|
|
|
<el-button v-on:click="deleteDatasource(scope.row)" type="danger" size="mini">删除</el-button>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
</el-table>
|
|
|
|
|
|
<el-pagination
|
|
|
|
|
|
style="margin-top: 10px;"
|
|
|
|
|
|
@size-change="handlePageSizeChange"
|
|
|
|
|
|
@current-change="handleCurrentChange"
|
|
|
|
|
|
:current-page="currentPage"
|
|
|
|
|
|
:page-sizes="[10, 30, 50]"
|
|
|
|
|
|
:page-size="pageSize"
|
|
|
|
|
|
layout="total, sizes, prev, pager, next, jumper"
|
|
|
|
|
|
:total="tableTotalCount">
|
|
|
|
|
|
</el-pagination>
|
2019-07-05 22:40:40 +08:00
|
|
|
|
<!--增加数据源弹窗-->
|
2021-05-11 23:14:44 +08:00
|
|
|
|
<el-dialog :inline="true" :title="newDatasource.id>0?'编辑数据源':'新增数据源'" :visible.sync="datasourceDialogVisible" width="760px" :close-on-click-modal="false">
|
2019-07-05 22:40:40 +08:00
|
|
|
|
<el-form label-width="120px">
|
2020-05-23 12:21:23 +08:00
|
|
|
|
<el-form-item label="分组:">
|
2020-05-24 13:00:43 +08:00
|
|
|
|
<el-select v-model="newDatasource.groupName" placeholder="请选择或输入新的分组名字" style="width: 100%" filterable allow-create>
|
2020-05-23 12:21:23 +08:00
|
|
|
|
<el-option value="">未分组</el-option>
|
|
|
|
|
|
<el-option :value="item" v-for="item in datasourceGroupList"></el-option>
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="数据源名称:">
|
|
|
|
|
|
<el-input v-model="newDatasource.name" placeholder="给数据源起个中文名称"></el-input>
|
2019-07-23 21:39:57 +08:00
|
|
|
|
</el-form-item>
|
2019-07-05 22:40:40 +08:00
|
|
|
|
<el-form-item label="驱动类:">
|
2019-08-13 22:52:24 +08:00
|
|
|
|
<el-select v-model="newDatasource.driverClassName" @change="driverClassNameChange" placeholder="驱动类" style="width: 100%">
|
2019-07-05 22:40:40 +08:00
|
|
|
|
<el-option label="com.mysql.jdbc.Driver" value="com.mysql.jdbc.Driver"></el-option>
|
|
|
|
|
|
<el-option label="net.sourceforge.jtds.jdbc.Driver" value="net.sourceforge.jtds.jdbc.Driver"></el-option>
|
2019-09-28 10:20:20 +08:00
|
|
|
|
<el-option label="oracle.jdbc.driver.OracleDriver" value="oracle.jdbc.driver.OracleDriver"></el-option>
|
2021-01-06 23:53:14 +08:00
|
|
|
|
<el-option label="org.postgresql.Driver" value="org.postgresql.Driver"></el-option>
|
2021-05-11 23:14:44 +08:00
|
|
|
|
<el-option label="org.apache.hive.jdbc.HiveDriver" value="org.apache.hive.jdbc.HiveDriver"></el-option>
|
2019-07-05 22:40:40 +08:00
|
|
|
|
</el-select>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="数据源URL:">
|
2019-08-13 22:52:24 +08:00
|
|
|
|
<el-input v-model="newDatasource.sourceUrl" :placeholder="urlPlaceholder"></el-input>
|
2019-07-05 22:40:40 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="账号:">
|
|
|
|
|
|
<el-input v-model="newDatasource.sourceName" placeholder="账号"></el-input>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="密码:">
|
|
|
|
|
|
<el-input v-model="newDatasource.sourcePassword" placeholder="密码"></el-input>
|
|
|
|
|
|
</el-form-item>
|
2020-05-23 12:21:23 +08:00
|
|
|
|
<el-form-item label="测试连接:">
|
2020-05-17 21:39:59 +08:00
|
|
|
|
<el-button v-on:click="testDatasource" type="primary" v-loading="testDatasourceErrLoading">测试数据源</el-button>
|
|
|
|
|
|
</el-form-item>
|
2019-07-05 22:40:40 +08:00
|
|
|
|
</el-form>
|
|
|
|
|
|
<div slot="footer" style="text-align: center;">
|
|
|
|
|
|
<el-button v-on:click="saveDatasource" type="primary">保存</el-button>
|
|
|
|
|
|
<el-button v-on:click="datasourceDialogVisible=false" plain>取消</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-dialog>
|
2019-08-22 22:21:49 +08:00
|
|
|
|
<!--人员权限弹窗-->
|
2019-08-24 23:13:43 +08:00
|
|
|
|
<el-dialog :visible.sync="dbSourceAuthDialogVisible" width="900px" :close-on-click-modal="false">
|
|
|
|
|
|
<span slot="title">
|
|
|
|
|
|
<span>权限编辑</span>
|
2020-05-24 13:00:43 +08:00
|
|
|
|
<span style="margin-left: 10px;color: #999;font-size: 12px;"><i class="el-icon-info"></i> 添加、删除或编辑之后记得点击保存哦~</span>
|
2019-08-24 23:13:43 +08:00
|
|
|
|
</span>
|
2019-08-22 22:21:49 +08:00
|
|
|
|
<el-row>
|
2021-04-27 23:24:21 +08:00
|
|
|
|
<el-select v-model="dbSourceAuthNewUser" filterable remote reserve-keyword autoComplete="new-password"
|
2019-08-22 22:21:49 +08:00
|
|
|
|
placeholder="请输入名字、邮箱、账号搜索用户" :remote-method="getSearchUserList"
|
2020-05-24 13:00:43 +08:00
|
|
|
|
:loading="dbSourceAuthUserLoading" style="width: 750px;margin-right: 10px;">
|
2019-08-22 22:21:49 +08:00
|
|
|
|
<el-option v-for="item in searchUserList" :key="item.id" :label="item.userName" :value="item.id"></el-option>
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
<el-button v-on:click="addDbSourceAuthUser">添加</el-button>
|
|
|
|
|
|
</el-row>
|
2020-05-24 13:00:43 +08:00
|
|
|
|
<el-table :data="dbSourceAuthUserList" border style="width: 100%; margin: 10px 0;" size="mini">
|
2019-08-22 22:21:49 +08:00
|
|
|
|
<el-table-column prop="userName" label="用户" width="150"></el-table-column>
|
|
|
|
|
|
<el-table-column label="权限">
|
|
|
|
|
|
<template slot-scope="scope">
|
2021-04-27 23:24:21 +08:00
|
|
|
|
<el-select v-model="scope.row.executeAuth" placeholder="选择权限" style="width: 150px;margin-right: 10px;">
|
|
|
|
|
|
<el-option value="">无权限</el-option>
|
|
|
|
|
|
<el-option :value="1" label="库表查看权"></el-option>
|
|
|
|
|
|
<el-option :value="2" label="数据查询权"></el-option>
|
|
|
|
|
|
<el-option :value="3" label="所有权限"></el-option>
|
|
|
|
|
|
</el-select>
|
2019-08-22 22:21:49 +08:00
|
|
|
|
<el-checkbox :true-label="1" :false-label="0" v-model="scope.row.descEditAuth">表字段注释修改权</el-checkbox>
|
2021-04-27 23:24:21 +08:00
|
|
|
|
<el-checkbox :true-label="1" :false-label="0" v-model="scope.row.procEditAuth">函数修改权</el-checkbox>
|
2019-08-22 22:21:49 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column label="操作" width="80">
|
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
|
<el-button size="small" type="danger" plain v-on:click="deleteUserDbSourceAuth(scope.row)">删除</el-button>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
</el-table>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<el-button type="primary" v-on:click="saveUserDbSourceAuth">保存配置</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-dialog>
|
2020-05-17 21:39:59 +08:00
|
|
|
|
<!--错误信息弹窗-->
|
|
|
|
|
|
<el-dialog title="测试数据源失败" :visible.sync="testDatasourceErrVisible" :footer="null" width="760px">
|
|
|
|
|
|
<div v-highlight>
|
|
|
|
|
|
<pre><code v-html="testDatasourceErrInfo"></code></pre>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-dialog>
|
2019-07-05 22:40:40 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
2020-05-23 12:21:23 +08:00
|
|
|
|
import datasourceApi from '../../common/api/datasource'
|
|
|
|
|
|
import userApi from '../../common/api/user'
|
2019-07-05 22:40:40 +08:00
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
loadDataListLoading: false,
|
2021-04-25 21:56:27 +08:00
|
|
|
|
datasourceDialogVisible: false,
|
|
|
|
|
|
datasourceList: [],
|
|
|
|
|
|
searchParam: {
|
|
|
|
|
|
name: '',
|
|
|
|
|
|
groupName: ''
|
|
|
|
|
|
},
|
|
|
|
|
|
pageSize: 30,
|
|
|
|
|
|
currentPage: 1,
|
|
|
|
|
|
tableTotalCount: 0,
|
2019-07-05 22:40:40 +08:00
|
|
|
|
newDatasource: {},
|
2019-08-13 22:52:24 +08:00
|
|
|
|
urlPlaceholder: "数据源URL",
|
2019-08-22 22:21:49 +08:00
|
|
|
|
|
|
|
|
|
|
dbSourceAuthDialogVisible: false,
|
|
|
|
|
|
dbSourceAuthUserList: [],
|
|
|
|
|
|
dbSourceAuthUserLoading: false,
|
|
|
|
|
|
searchUserList: [],
|
|
|
|
|
|
dbSourceAuthNewUser: "",
|
2020-05-17 21:39:59 +08:00
|
|
|
|
// 测试数据源
|
|
|
|
|
|
testDatasourceErrInfo: "",
|
|
|
|
|
|
testDatasourceErrVisible: false,
|
|
|
|
|
|
testDatasourceErrLoading: false,
|
2020-05-23 12:21:23 +08:00
|
|
|
|
// 数据源分组
|
|
|
|
|
|
datasourceGroupList: [],
|
2019-07-05 22:40:40 +08:00
|
|
|
|
};
|
|
|
|
|
|
},
|
|
|
|
|
|
mounted: function () {
|
|
|
|
|
|
this.getDatasourceList();
|
2021-04-25 21:56:27 +08:00
|
|
|
|
this.getDatasourceGroupList();
|
2019-07-05 22:40:40 +08:00
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
2019-08-22 22:21:49 +08:00
|
|
|
|
editDbAuth(row) {
|
|
|
|
|
|
this.newDatasource = JSON.parse(JSON.stringify(row));
|
2020-05-23 12:21:23 +08:00
|
|
|
|
this.dbSourceAuthDialogVisible = true;
|
2019-08-24 23:13:43 +08:00
|
|
|
|
this.loadDbAuthUserList();
|
|
|
|
|
|
},
|
|
|
|
|
|
loadDbAuthUserList() {
|
2020-05-23 12:21:23 +08:00
|
|
|
|
this.dbSourceAuthNewUser = [];
|
|
|
|
|
|
this.dbSourceAuthUserList = [];
|
|
|
|
|
|
let param = {sourceId: this.newDatasource.id};
|
|
|
|
|
|
datasourceApi.dbUserAuthList(param).then(json => {
|
|
|
|
|
|
this.dbSourceAuthUserList = json.data || [];
|
2019-08-22 22:21:49 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
saveUserDbSourceAuth() {
|
2020-05-23 12:21:23 +08:00
|
|
|
|
let param = {sourceId: this.newDatasource.id, authList: JSON.stringify(this.dbSourceAuthUserList)};
|
|
|
|
|
|
datasourceApi.assignDbUserAuth(param).then(() => {
|
|
|
|
|
|
this.$message.success("保存成功");
|
2019-08-22 22:21:49 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
deleteUserDbSourceAuth(row) {
|
|
|
|
|
|
var dbSourceAuthUserList = [];
|
|
|
|
|
|
for (var i = 0; i < this.dbSourceAuthUserList.length; i++) {
|
|
|
|
|
|
var item = this.dbSourceAuthUserList[i];
|
|
|
|
|
|
if (item.userId != row.userId) {
|
|
|
|
|
|
dbSourceAuthUserList.push(this.dbSourceAuthUserList[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
this.dbSourceAuthUserList = dbSourceAuthUserList;
|
|
|
|
|
|
},
|
|
|
|
|
|
addDbSourceAuthUser() {
|
|
|
|
|
|
if (this.dbSourceAuthNewUser.length <= 0) {
|
2020-05-24 13:00:43 +08:00
|
|
|
|
this.$message.warning("请先选择用户");
|
2019-08-22 22:21:49 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var userName = "";
|
|
|
|
|
|
for (var i = 0; i < this.searchUserList.length; i++) {
|
|
|
|
|
|
if (this.dbSourceAuthNewUser == this.searchUserList[i].id) {
|
|
|
|
|
|
userName = this.searchUserList[i].userName;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
this.dbSourceAuthUserList.push({
|
|
|
|
|
|
userName: userName,
|
|
|
|
|
|
userId: this.dbSourceAuthNewUser,
|
2021-04-27 23:24:21 +08:00
|
|
|
|
executeAuth: '',
|
2019-08-22 22:21:49 +08:00
|
|
|
|
descEditAuth: 0,
|
2021-04-27 23:24:21 +08:00
|
|
|
|
procEditAuth: 0,
|
2019-08-22 22:21:49 +08:00
|
|
|
|
});
|
|
|
|
|
|
this.dbSourceAuthNewUser = "";
|
|
|
|
|
|
},
|
|
|
|
|
|
getSearchUserList(query) {
|
2020-05-23 12:21:23 +08:00
|
|
|
|
if (!query) return;
|
2019-08-22 22:21:49 +08:00
|
|
|
|
this.dbSourceAuthUserLoading = true;
|
2020-05-23 12:21:23 +08:00
|
|
|
|
userApi.getUserBaseInfo({search: query}).then(json => {
|
|
|
|
|
|
this.searchUserList = json.data || [];
|
|
|
|
|
|
this.dbSourceAuthUserLoading = false;
|
2019-08-22 22:21:49 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
2019-07-05 22:40:40 +08:00
|
|
|
|
addDatasource() {
|
|
|
|
|
|
this.datasourceDialogVisible = true;
|
2021-04-19 15:06:13 +08:00
|
|
|
|
this.testDatasourceErrLoading = false;
|
2020-05-23 12:21:23 +08:00
|
|
|
|
this.newDatasource = {name: "", driverClassName: "", sourceUrl: "", sourceName: "", sourcePassword: "", groupName: ""};
|
2019-07-05 22:40:40 +08:00
|
|
|
|
},
|
|
|
|
|
|
editDatasource(row) {
|
2019-07-23 21:39:57 +08:00
|
|
|
|
this.newDatasource = JSON.parse(JSON.stringify(row));
|
2019-07-05 22:40:40 +08:00
|
|
|
|
this.datasourceDialogVisible = true;
|
2021-04-19 15:06:13 +08:00
|
|
|
|
this.testDatasourceErrLoading = false;
|
2019-07-05 22:40:40 +08:00
|
|
|
|
},
|
|
|
|
|
|
deleteDatasource(row) {
|
|
|
|
|
|
this.$confirm('确定要删除此数据源吗?', '提示', {
|
|
|
|
|
|
confirmButtonText: '确定',
|
|
|
|
|
|
cancelButtonText: '取消',
|
|
|
|
|
|
type: 'warning'
|
|
|
|
|
|
}).then(() => {
|
|
|
|
|
|
row.yn = 0;
|
2020-05-23 12:21:23 +08:00
|
|
|
|
datasourceApi.manageUpdateDatasource(row).then(() => {
|
|
|
|
|
|
this.$message.success("删除成功!");
|
|
|
|
|
|
this.$emit('loadDatasourceList');
|
|
|
|
|
|
this.getDatasourceList();
|
2019-07-05 22:40:40 +08:00
|
|
|
|
});
|
|
|
|
|
|
}).catch(()=>{});
|
|
|
|
|
|
},
|
|
|
|
|
|
saveDatasource() {
|
2020-05-23 12:21:23 +08:00
|
|
|
|
datasourceApi.manageUpdateDatasource(this.newDatasource).then(() => {
|
2021-05-11 23:14:44 +08:00
|
|
|
|
this.datasourceDialogVisible = false;
|
2020-05-23 12:21:23 +08:00
|
|
|
|
this.$message.success("保存成功!");
|
|
|
|
|
|
this.$emit('loadDatasourceList');
|
|
|
|
|
|
this.getDatasourceList();
|
2019-07-05 22:40:40 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
2020-05-17 21:39:59 +08:00
|
|
|
|
testDatasource() {
|
2021-04-19 15:06:13 +08:00
|
|
|
|
this.testDatasourceErrLoading = true;
|
|
|
|
|
|
datasourceApi.queryTestDatasource(this.newDatasource).then(res => {
|
|
|
|
|
|
this.testDatasourceErrLoading = false;
|
|
|
|
|
|
if (res.errCode == 200) {
|
|
|
|
|
|
this.$message.success("连接成功!");
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.testDatasourceErrVisible = true;
|
|
|
|
|
|
this.testDatasourceErrInfo = res.errMsg || '';
|
|
|
|
|
|
}
|
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
|
this.testDatasourceErrLoading = false;
|
|
|
|
|
|
this.testDatasourceErrVisible = true;
|
|
|
|
|
|
this.testDatasourceErrInfo = err.message || '请求出错';
|
|
|
|
|
|
});
|
2020-05-17 21:39:59 +08:00
|
|
|
|
},
|
2019-08-13 22:52:24 +08:00
|
|
|
|
driverClassNameChange() {
|
|
|
|
|
|
if (this.newDatasource.driverClassName == 'com.mysql.jdbc.Driver') {
|
|
|
|
|
|
this.urlPlaceholder = "例:jdbc:mysql://127.0.0.1:3306/user_info?useUnicode=true&characterEncoding=utf8";
|
|
|
|
|
|
} else if (this.newDatasource.driverClassName == 'net.sourceforge.jtds.jdbc.Driver') {
|
|
|
|
|
|
this.urlPlaceholder = "例:jdbc:jtds:sqlserver://127.0.0.1:33434;DatabaseName=user_info;socketTimeout=60;";
|
2019-09-28 10:20:20 +08:00
|
|
|
|
} else if (this.newDatasource.driverClassName == 'oracle.jdbc.driver.OracleDriver') {
|
|
|
|
|
|
this.urlPlaceholder = "例:jdbc:oracle:thin:@127.0.0.1:1521/user_info";
|
2021-01-06 23:53:14 +08:00
|
|
|
|
} else if (this.newDatasource.driverClassName == 'org.postgresql.Driver') {
|
|
|
|
|
|
this.urlPlaceholder = "例:jdbc:postgresql://127.0.0.1:5432/user_info";
|
2021-05-11 23:14:44 +08:00
|
|
|
|
} else if (this.newDatasource.driverClassName == 'org.apache.hive.jdbc.HiveDriver') {
|
|
|
|
|
|
this.urlPlaceholder = "例:jdbc:hive2://127.0.0.1:21050/user_info;auth=noSasl";
|
2019-08-13 22:52:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
2021-04-25 21:56:27 +08:00
|
|
|
|
handleCurrentChange(to) {
|
|
|
|
|
|
this.currentPage = to;
|
|
|
|
|
|
this.getDatasourceList();
|
|
|
|
|
|
},
|
|
|
|
|
|
handlePageSizeChange(to) {
|
|
|
|
|
|
this.pageSize = to;
|
|
|
|
|
|
this.getDatasourceList();
|
|
|
|
|
|
},
|
2019-07-05 22:40:40 +08:00
|
|
|
|
getDatasourceList() {
|
|
|
|
|
|
this.loadDataListLoading = true;
|
2021-04-25 21:56:27 +08:00
|
|
|
|
let param = {...this.searchParam, pageNum: this.currentPage, pageSize: this.pageSize};
|
|
|
|
|
|
datasourceApi.manageDatasourceList(param).then(json => {
|
|
|
|
|
|
if (this.currentPage == 1) {
|
|
|
|
|
|
this.tableTotalCount = json.total || 0;
|
|
|
|
|
|
}
|
2020-05-23 12:21:23 +08:00
|
|
|
|
this.datasourceList = json.data || [];
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
this.loadDataListLoading = false;
|
2021-04-25 21:56:27 +08:00
|
|
|
|
}, 800);
|
2021-04-27 23:24:21 +08:00
|
|
|
|
}).catch(() => {
|
|
|
|
|
|
this.loadDataListLoading = false;
|
2021-04-25 21:56:27 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
getDatasourceGroupList() {
|
|
|
|
|
|
datasourceApi.manageDatasourceGroupList({}).then(json => {
|
|
|
|
|
|
this.datasourceGroupList = json.data || [];
|
|
|
|
|
|
});
|
2019-07-05 22:40:40 +08:00
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<style>
|
|
|
|
|
|
|
|
|
|
|
|
</style>
|
|
|
|
|
|
|