数通互联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

342 lines
9.9 KiB

<!--
@ 作者: 秦东
@ 时间: 2024-04-18 14:52:06
@ 备注: 数据资源
-->
<script lang='ts' setup>
import { getOrPostDate,postSaveData } from "@/api/date/apidate"
import { dateTypes,dataSourceTypes,interfaceTypes,dataBaseStruct } from "@/api/date/type"
/**
@ 作者: 秦东
@ 时间: 2024-04-19 11:50:16
@ 功能: 引入页面
*/
import EditAssets from "@/views/date/editAssets.vue"
const editAssetsOpen = ref(false)
const editAssetsInfo = reactive<dataBaseStruct>({})
const dataLoading = ref(false)
const dataList = ref<dataBaseStruct[]>([])
const searchData = reactive({
pageNum: 1,
pageSize: 10,
databaseName:"",
dataType:"",
total:0
})
/**
@ 作者: 秦东
@ 时间: 2024-04-18 14:57:24
@ 功能: 获取数据
*/
const gainDateList = () =>{
dataLoading.value = true;
let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/page",
methodType:"GET",
where:"pageNum="+searchData.pageNum+"&pageSize="+searchData.pageSize+"&databaseName="+searchData.databaseName+"&dataType="+searchData.dataType
}
getOrPostDate("POST",sendData)
.then((data:any)=>{
searchData.total = data.data.total
if(data.data.records&&data.data.records.length > 0){
data.data.records.forEach((item:any)=>{
dateTypes.forEach((items:any)=>{
if(items.value == item.dataType){
item.dataTypeName = items.label
}
})
dataSourceTypes.forEach((itemsd:any)=>{
if(itemsd.value == item.datasourceType){
item.datasourceTypeName = itemsd.label
}
})
interfaceTypes.forEach((interItem:any)=>{
if(interItem.value == item.interfaceType){
item.interfaceTypeName = interItem.label
}
})
})
}
dataList.value = data.data.records
// console.log("获取数据=====>",searchData)
dataLoading.value = false
})
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 08:09:40
@ 功能: 判断数据库类型
*/
function dataBaseType (val:any) {
// console.log("判断数据库类型-->",val,dateTypes,val.dataType)
let titleVal = ""
if(val.dataType){
try{
dateTypes.forEach((item:any)=>{
// console.log("判断数据库类型-1->",item.value,val.dataType,item.value==val.dataType)
if(item.value == val.dataType){
// console.log("判断数据库类型-3->",item.value,val.dataType,item.value==val.dataType,item.label)
titleVal = item.label
// return item.label
throw item.label
}
})
} catch(e) {
// console.log("判断数据库类型-12->",e)
}
}
// console.log("判断数据库类型-2->",titleVal)
return titleVal
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 09:21:09
@ 功能: 重置查询条件
*/
const resuct = () =>{
searchData.pageNum=1
searchData.pageSize=10
searchData.databaseName=""
searchData.dataType=""
gainDateList()
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 09:28:53
@ 功能: 选择每页显示几条数据
*/
const handleSizeChange = (val: number) => {
searchData.pageSize=val
gainDateList()
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 09:28:53
@ 功能: 翻页操作
*/
const handleCurrentChange = (val: number) => {
searchData.pageNum=val
gainDateList()
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 10:44:53
@ 功能: 连接
*/
const openLink = (val:any) => {
let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/test",
methodType:"GET",
where:"databaseName="+val.databaseName+"&port="+val.port+"&ipAddress="+val.ipAddress+"&datasourceType="+val.datasourceType+"&dataType="+val.dataType+"&interfaceType="+val.interfaceType+"&account="+val.account+"&password="+val.password+"&id="+val.id+"&redashDatasourceId="+val.redashDatasourceId
}
// console.log("连接-1->",sendData)
getOrPostDate("POST",sendData)
.then((data:any)=>{
// console.log("连接-->",data)
if(data.code == 200){
ElMessage.success(data.msg)
}else{
ElMessage.error(data.msg)
}
gainDateList()
})
}
onMounted(()=>{
gainDateList()
})
/**
@ 作者: 秦东
@ 时间: 2024-04-19 11:54:12
@ 功能: 重置
*/
const resettingHandel = () => {
editAssetsOpen.value = false
editAssetsInfo.databaseName = "";
editAssetsInfo.port = "";
editAssetsInfo.ipAddress = "";
editAssetsInfo.datasourceType = "";
editAssetsInfo.dataType = "";
editAssetsInfo.interfaceType = "";
editAssetsInfo.account = "";
editAssetsInfo.password = "";
editAssetsInfo.id = "";
editAssetsInfo.redashDatasourceId = "";
editAssetsInfo.author = ""
gainDateList()
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 12:59:18
@ 功能: 新增数据源
*/
const addDataBase = () => {
editAssetsInfo.id = ""
editAssetsOpen.value = true
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 13:35:02
@ 功能: 编辑数据源
*/
const editDataBase = (val:dataBaseStruct) => {
editAssetsInfo.databaseName = val.databaseName;
editAssetsInfo.port = val.port;
editAssetsInfo.ipAddress = val.ipAddress;
editAssetsInfo.datasourceType = val.datasourceType;
editAssetsInfo.dataType = val.dataType;
editAssetsInfo.interfaceType = val.interfaceType;
editAssetsInfo.account = val.account;
editAssetsInfo.password = val.password;
editAssetsInfo.id = val.id;
editAssetsInfo.redashDatasourceId = val.redashDatasourceId;
editAssetsInfo.author = val.author
editAssetsOpen.value = true
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 14:26:27
@ 功能: 删除数据
*/
const delDataBase = (val:dataBaseStruct) => {
ElMessageBox.confirm("确认删除<"+val.databaseName+">此数据项?一经删除!数据将不可恢复!", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/delete",
dataInfo:val
}
postSaveData(sendData)
.then((data:any)=>{
if(data.code == 0){
ElMessage.success(data.msg)
gainDateList()
}else{
ElMessage.error(data.msg)
}
})
});
}
</script>
<template>
<div class="dataBox">
<EditAssets v-model:is-show="editAssetsOpen" :data-info="editAssetsInfo" @setResetting="resettingHandel" />
<el-card style="width: 100%">
<template #header>
<div class="card_header">
<div>
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="数据源名称">
<el-input v-model="searchData.databaseName" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="数据源类型">
<el-select v-model="searchData.dataType" placeholder="请选择" clearable style="width: 180px;">
<el-option
v-for="item in dateTypes"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
</div>
<div>
<el-button type="primary" @click="gainDateList"><el-space wrap><i class="fa fa-search "></i>查询</el-space></el-button>
<el-button plain @click="resuct">重置</el-button>
</div>
</div>
</template>
<el-row class="newAddBox">
<el-col :span="24">
<el-button type="primary" @click="addDataBase"><el-space wrap><i class="fa fa-plus "></i>新增数据源</el-space></el-button>
<el-button plain>导出数据源</el-button>
</el-col>
</el-row>
<el-table :data="dataList" v-loading="dataLoading" stripe :header-cell-style="{'background':'#f5f8fd'}" style="width: 100%">
<el-table-column fixed type="selection" width="50" align="center" />
<el-table-column fixed label="序号" type="index" width="60" align="center" />
<el-table-column prop="datasourceTypeName" label="数据库产品" width="120" />
<el-table-column prop="dataTypeName" label="数据库类型" width="160" />
<el-table-column prop="databaseName" label="数据库名称" width="160" />
<el-table-column prop="interfaceTypeName" label="接口方式" width="100" />
<el-table-column prop="ipAddress" label="IP地址" width="160" />
<el-table-column prop="port" label="端口" align="center" />
<el-table-column prop="account" label="帐号" width="160" />
<el-table-column prop="author" label="帐号权限" width="100" align="center" />
<el-table-column prop="status" label="状态" width="100" align="center">
<template #default="scope">
<el-text v-if="scope.row.status==1" class="mx-1" type="primary">已连接</el-text>
<el-text v-else class="mx-1" type="danger">连接失败</el-text>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="250" align="center">
<template #default="scope">
<el-button class="oper-btn" plain @click="openLink(scope.row)">连接</el-button>
<el-button class="oper-btn" plain @click="editDataBase(scope.row)">编辑</el-button>
<el-button class="oper-btn" plain @click="delDataBase(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-row>
<el-col :span="24" class="pageSetUp">
<el-pagination
:small="small"
:total="searchData.total"
layout="total"
/>
<el-pagination
v-model:current-page="searchData.pageNum"
v-model:page-size="searchData.pageSize"
:page-sizes="[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]"
:small="small"
:background="true"
:total="searchData.total"
layout="sizes, prev, pager,next,jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-col>
</el-row>
</el-card>
</div>
</template>
<style lang='scss' scoped>
.dataBox{
padding: 10px;
.el-table .el-table__header td {
background:#f5f8fd;
}
.newAddBox{
margin-bottom: 20px;
}
.card_header{
display: flex;
align-items: center;
justify-content: space-between;
}
.el-form-item{
margin-bottom: 0px;
}
.pageSetUp{
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 0 10px 0;
height: 55px;
}
}
.oper-btn{
background: rgba(61,127,255,0.1);
border: 1px solid rgba(61,127,255,0.6);
color: #3D7FFF;
}
</style>