Browse Source

Merge branch 'v7_master'

# Conflicts:
#	src/types/components.d.ts
lwx_v10
超级管理员 2 years ago
parent
commit
b30df9e8ce
  1. 7
      src/api/date/apidate.ts
  2. 20
      src/api/date/type.ts
  3. 26
      src/types/components.d.ts
  4. 144
      src/views/date/assets.vue
  5. 246
      src/views/date/editAssets.vue

7
src/api/date/apidate.ts

@ -7,3 +7,10 @@ export function getOrPostDate(methodStr:string,data?: any) {
data: data
});
}
export function postSaveData(data?: any) {
return request({
url: "/systemapi/dataCenter/postSaveData",
method: "POST",
data: data
});
}

20
src/api/date/type.ts

@ -25,7 +25,7 @@ export const dataSourceTypes = [
},
{
value: '3',
label: '暂时未知',
label: 'TIDB',
},
{
value: '4',
@ -47,3 +47,21 @@ export const interfaceTypes = [
label: 'API',
}
]
//数据源表单结构
export interface dataBaseStruct {
databaseName?: string;
port?: number;
ipAddress?: string;
datasourceType?: number;
datasourceTypeName?: string;
dataType?: number;
dataTypeName?: string;
interfaceType?: number;
interfaceTypeName?: string;
author?: string;
account?: string;
password?: string;
id?: string;
redashDatasourceId?: number;
}

26
src/types/components.d.ts

@ -22,7 +22,10 @@ declare module '@vue/runtime-core' {
DiyIconfont: typeof import('./../components/DesignForm/public/expand/diy-iconfont.vue')['default']
DragControl: typeof import('./../components/DesignForm/dragControl.vue')['default']
ElAffix: typeof import('element-plus/es')['ElAffix']
<<<<<<< HEAD
ElAlert: typeof import('element-plus/es')['ElAlert']
=======
>>>>>>> v7_master
ElAside: typeof import('element-plus/es')['ElAside']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
@ -32,7 +35,10 @@ declare module '@vue/runtime-core' {
ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
<<<<<<< HEAD
ElCascader: typeof import('element-plus/es')['ElCascader']
=======
>>>>>>> v7_master
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol']
@ -54,10 +60,14 @@ declare module '@vue/runtime-core' {
ElHeader: typeof import('element-plus/es')['ElHeader']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
<<<<<<< HEAD
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
=======
ElInput: typeof import('element-plus/es')['ElInput']
>>>>>>> v7_master
ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
@ -65,6 +75,7 @@ declare module '@vue/runtime-core' {
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
ElPopover: typeof import('element-plus/es')['ElPopover']
<<<<<<< HEAD
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
@ -75,6 +86,13 @@ declare module '@vue/runtime-core' {
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSelectV2: typeof import('element-plus/es')['ElSelectV2']
ElSlider: typeof import('element-plus/es')['ElSlider']
=======
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
>>>>>>> v7_master
ElSpace: typeof import('element-plus/es')['ElSpace']
ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps']
@ -90,7 +108,10 @@ declare module '@vue/runtime-core' {
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
<<<<<<< HEAD
ElTransfer: typeof import('element-plus/es')['ElTransfer']
=======
>>>>>>> v7_master
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
ElUpload: typeof import('element-plus/es')['ElUpload']
@ -115,6 +136,7 @@ declare module '@vue/runtime-core' {
HeadToolsNew: typeof import('./../components/DesignForm/public/headToolsNew.vue')['default']
IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
<<<<<<< HEAD
IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
IEpClose: typeof import('~icons/ep/close')['default']
IEpCollection: typeof import('~icons/ep/collection')['default']
@ -135,6 +157,10 @@ declare module '@vue/runtime-core' {
IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
IEpUser: typeof import('~icons/ep/user')['default']
IEpView: typeof import('~icons/ep/view')['default']
=======
IEpClose: typeof import('~icons/ep/close')['default']
IEpSetting: typeof import('~icons/ep/setting')['default']
>>>>>>> v7_master
LangSelect: typeof import('./../components/LangSelect/index.vue')['default']
LayoutPage: typeof import('./../components/DesignForm/layoutPage/index.vue')['default']
List: typeof import('./../components/DesignForm/public/form/components/list.vue')['default']

144
src/views/date/assets.vue

@ -4,11 +4,20 @@
@ 备注: 数据资源
-->
<script lang='ts' setup>
import { getOrPostDate } from "@/api/date/apidate"
import { dateTypes,dataSourceTypes,interfaceTypes } from "@/api/date/type"
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 dataList = ref<any[]>([])
const editAssetsOpen = ref(false)
const editAssetsInfo = reactive<dataBaseStruct>({})
const dataLoading = ref(false)
const dataList = ref<dataBaseStruct[]>([])
const searchData = reactive({
pageNum: 1,
pageSize: 10,
@ -22,13 +31,14 @@ const searchData = reactive({
@ 功能: 获取数据
*/
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)=>{
.then((data:any)=>{
searchData.total = data.data.total
if(data.data.records&&data.data.records.length > 0){
@ -52,7 +62,9 @@ const gainDateList = () =>{
}
dataList.value = data.data.records
console.log("获取数据=====>",searchData)
dataLoading.value = false
})
}
/**
@ 作者: 秦东
@ -96,23 +108,127 @@ const resuct = () =>{
/**
@ 作者: 秦东
@ 时间: 2024-04-19 09:28:53
@ 功能: 翻页操作
@ 功能: 选择每页显示几条数据
*/
const handleSizeChange = (val: number) => {
console.log(`${val} items per page`)
searchData.pageSize=val
gainDateList()
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 09:28:53
@ 功能: 翻页操作
*/
const handleCurrentChange = (val: number) => {
console.log(`current page: ${val}`)
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">
@ -141,11 +257,11 @@ onMounted(()=>{
</template>
<el-row class="newAddBox">
<el-col :span="24">
<el-button type="primary"><el-space wrap><i class="fa fa-plus "></i>新增数据源</el-space></el-button>
<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" :header-cell-style="{'background':'#f5f8fd'}" style="width: 100%">
<el-table :data="dataList" v-loading="dataLoading" :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" />
@ -159,14 +275,14 @@ onMounted(()=>{
<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="success">已连接</el-text>
<el-text v-else class="mx-1" type="danger">断开链接</el-text>
<el-text v-else class="mx-1" type="danger">连接失败</el-text>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="220" align="center">
<template #default="scope">
<el-button size="small" color="#626aef" :dark="isDark" plain>连接</el-button>
<el-button size="small" color="#626aef" :dark="isDark" plain>编辑</el-button>
<el-button size="small" color="#626aef" :dark="isDark" plain>删除</el-button>
<el-button size="small" color="#626aef" :dark="isDark" plain @click="openLink(scope.row)">连接</el-button>
<el-button size="small" color="#626aef" :dark="isDark" plain @click="editDataBase(scope.row)">编辑</el-button>
<el-button size="small" color="#626aef" :dark="isDark" plain @click="delDataBase(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>

246
src/views/date/editAssets.vue

@ -0,0 +1,246 @@
<!--
@ 作者: 秦东
@ 时间: 2024-04-19 11:37:41
@ 备注: 编辑数据源
-->
<script lang='ts' setup>
import { dateTypes,dataSourceTypes,interfaceTypes,dataBaseStruct } from "@/api/date/type"
import { getOrPostDate,postSaveData } from "@/api/date/apidate"
const props = defineProps({
isShow:{
type:Boolean,
default:false
},
dataInfo:{
type:Object,
default(){
return {}
}
}
});
const ruleFormRef = ref(ElForm); //
const formData = reactive<dataBaseStruct>({})
const emits = defineEmits(["update:isShow","setResetting"]);
const tipTitle = ref("增加数据源")
const isOpen = computed({
get() {
if(props.isShow){
formData.id = props.dataInfo.id
formData.databaseName = props.dataInfo.databaseName;
formData.port = props.dataInfo.port;
formData.ipAddress = props.dataInfo.ipAddress;
formData.datasourceType = props.dataInfo.datasourceType;
formData.dataType = props.dataInfo.dataType;
formData.interfaceType = props.dataInfo.interfaceType;
formData.author = props.dataInfo.author
formData.account = props.dataInfo.account;
formData.password = props.dataInfo.password;
formData.id = props.dataInfo.id;
formData.redashDatasourceId = props.dataInfo.redashDatasourceId;
if(props.dataInfo.id && props.dataInfo.id != ""){
tipTitle.value = "编辑数据源"
}
}
return props.isShow
},
set(val: boolean) {
emits('update:isShow', val)
}
});
/**
@ 作者: 秦东
@ 时间: 2024-04-19 13:03:09
@ 功能: 关闭
*/
const handleClose = () => {
emits('setResetting')
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 13:08:37
@ 功能: 保存数据
*/
const saveData = () => {
ruleFormRef.value.validate((valid: any) => {
if (valid){
if(formData.id != "" && formData.id != 0 && formData.id != "0"){ //
console.log("编辑---->保存数据--->",formData);
let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/update",
dataInfo:formData
}
console.log("编辑---->保存数据-1-->",sendData);
postSaveData(sendData)
.then((data:any)=>{
if(data.code == 0){
ElMessage.success(data.msg)
handleClose()
}else{
ElMessage.error(data.msg)
}
})
}else{ //
console.log("新增---->保存数据--->",formData);
let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/save",
dataInfo:formData
}
postSaveData(sendData)
.then((data:any)=>{
if(data.code == 0){
ElMessage.success(data.msg)
handleClose()
}else{
ElMessage.error(data.msg)
}
})
}
}
});
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 13:09:12
@ 功能: 测试连接
*/
const openLink = () => {
ruleFormRef.value.validate((valid: any) => {
if (valid){
let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/test",
methodType:"GET",
where:"databaseName="+formData.databaseName+"&port="+formData.port+"&ipAddress="+formData.ipAddress+"&datasourceType="+formData.datasourceType+"&dataType="+formData.dataType+"&interfaceType="+formData.interfaceType+"&account="+formData.account+"&password="+formData.password+"&id="+formData.id+"&redashDatasourceId="+formData.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)
}
})
}
});
}
/**
@ 作者: 秦东
@ 时间: 2024-04-19 13:13:18
@ 功能: 表单验证规则
*/
const dataFormRules = reactive({
datasourceType: [{ required: true, message: "请选择数据库产品", trigger: "blur" }],
dataType: [{ required: true, message: "请选择数据类型", trigger: "blur" }],
databaseName: [{ required: true, message: "请输入数据库名称", trigger: "blur" }],
interfaceType: [{ required: true, message: "请选择接口方式", trigger: "blur" }],
ipAddress: [{ required: true, message: "请输入IP地址", trigger: "blur" }],
port: [{ required: true, message: "请输入端口号", trigger: "blur" }],
author: [{ required: true, message: "请输入账号权限", trigger: "blur" }],
account: [{ required: true, message: "请输入账号", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
})
</script>
<template>
<el-dialog
v-model="isOpen"
:title="tipTitle"
width="50%"
:before-close="handleClose"
>
<el-form
ref="ruleFormRef"
style="width: 100%"
:model="formData"
:rules="dataFormRules"
label-width="auto"
class="demo-ruleForm"
>
<el-row gutter="20">
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="数据库产品:" prop="datasourceType">
<el-select v-model="formData.datasourceType" placeholder="请选择数据库产品" style="width: 240px" clearable >
<el-option
v-for="item in dataSourceTypes"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="数据类型:" prop="dataType">
<el-select v-model="formData.dataType" placeholder="请选择数据类型" clearable >
<el-option
v-for="item in dateTypes"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="数据库名称:" prop="databaseName">
<el-input v-model="formData.databaseName" placeholder="请输入数据库名称" clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="接口方式:" prop="interfaceType">
<el-select v-model="formData.interfaceType" placeholder="请选择接口方式" clearable >
<el-option
v-for="item in interfaceTypes"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="IP地址:" prop="ipAddress">
<el-input v-model="formData.ipAddress" placeholder="请输入IP地址" clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="端口号:" prop="port">
<el-input v-model="formData.port" placeholder="请输入端口号" clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="账号权限:" prop="author">
<el-input v-model="formData.author" placeholder="请输入账号权限" clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="账号:" prop="account">
<el-input v-model="formData.account" placeholder="请输入账号" clearable autocomplete="off" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="密码:" prop="password">
<el-input type="new-password" show-password v-model="formData.password" placeholder="请输入密码" clearable autocomplete="off" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="openLink">连接</el-button>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="saveData">保存</el-button>
</div>
</template>
</el-dialog>
</template>
<style lang='scss' scoped>
</style>
Loading…
Cancel
Save