数通互联化工云平台
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.
 
 
 
 
 
 

400 lines
11 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;
editAssetsInfo.dataSourceDes = val.dataSourceDes;
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="dataSourceDes" 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>