|
@@ -1,27 +1,13 @@
|
|
<template>
|
|
<template>
|
|
<div class="page">
|
|
<div class="page">
|
|
<el-card shadow="never">
|
|
<el-card shadow="never">
|
|
- <template #header>
|
|
|
|
- <div class="card-header">
|
|
|
|
- <span>数据源管理</span>
|
|
|
|
- </div>
|
|
|
|
- </template>
|
|
|
|
-
|
|
|
|
<!-- 搜索表单 -->
|
|
<!-- 搜索表单 -->
|
|
<el-form :model="params" inline ref="queryRef">
|
|
<el-form :model="params" inline ref="queryRef">
|
|
<el-form-item label="数据源名称" prop="keyWord">
|
|
<el-form-item label="数据源名称" prop="keyWord">
|
|
<el-input v-model="params.keyWord" placeholder="请输入数据源名称" clearable style="width: 200px" @keyup.enter.native="getList(1)" />
|
|
<el-input v-model="params.keyWord" placeholder="请输入数据源名称" clearable style="width: 200px" @keyup.enter.native="getList(1)" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="日期范围" prop="dateRange">
|
|
<el-form-item label="日期范围" prop="dateRange">
|
|
- <el-date-picker
|
|
|
|
- v-model="params.dateRange"
|
|
|
|
- type="daterange"
|
|
|
|
- range-separator="至"
|
|
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
- value-format="YYYY-MM-DD"
|
|
|
|
- style="width: 240px"
|
|
|
|
- />
|
|
|
|
|
|
+ <el-date-picker v-model="params.dateRange" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD" style="width: 240px" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" @click="getList(1)">
|
|
<el-button type="primary" @click="getList(1)">
|
|
@@ -35,7 +21,7 @@
|
|
</el-button>
|
|
</el-button>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
-
|
|
|
|
|
|
+
|
|
<!-- 数据表格 -->
|
|
<!-- 数据表格 -->
|
|
<el-table :data="tableData" style="width: 100%" v-loading="loading" row-key="id">
|
|
<el-table :data="tableData" style="width: 100%" v-loading="loading" row-key="id">
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
@@ -47,43 +33,23 @@
|
|
<el-table-column prop="database" label="数据库名" min-width="120" show-overflow-tooltip />
|
|
<el-table-column prop="database" label="数据库名" min-width="120" show-overflow-tooltip />
|
|
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
|
|
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
|
|
<el-table-column prop="createdAt" label="创建时间" width="160" />
|
|
<el-table-column prop="createdAt" label="创建时间" width="160" />
|
|
- <el-table-column label="操作" width="200" fixed="right">
|
|
|
|
|
|
+ <el-table-column label="操作" width="160" align="center" fixed="right">
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
- <el-button type="primary" link @click="testConnection(row)" v-auth="'test_datasource'">
|
|
|
|
- 测试连接
|
|
|
|
- </el-button>
|
|
|
|
- <el-button type="primary" link @click="addOrEdit(row)" v-auth="'edit_datasource'">
|
|
|
|
- 编辑
|
|
|
|
- </el-button>
|
|
|
|
- <el-button type="danger" link @click="deleteDataSource(row)" v-auth="'delete_datasource'">
|
|
|
|
- 删除
|
|
|
|
- </el-button>
|
|
|
|
|
|
+ <el-button type="primary" size="small" text @click="testConnection(row)" v-auth="'test_datasource'"> 测试连接 </el-button>
|
|
|
|
+ <el-button type="primary" size="small" text @click="addOrEdit(row)" v-auth="'edit_datasource'"> 编辑 </el-button>
|
|
|
|
+ <el-button type="danger" size="small" text @click="deleteDataSource(row)" v-auth="'delete_datasource'"> 删除 </el-button>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
-
|
|
|
|
|
|
+
|
|
<!-- 分页 -->
|
|
<!-- 分页 -->
|
|
<div class="pagination-container">
|
|
<div class="pagination-container">
|
|
- <el-pagination
|
|
|
|
- v-model:current-page="params.pageNum"
|
|
|
|
- v-model:page-size="params.pageSize"
|
|
|
|
- :page-sizes="[10, 20, 50, 100]"
|
|
|
|
- layout="total, sizes, prev, pager, next, jumper"
|
|
|
|
- :total="total"
|
|
|
|
- @size-change="getList()"
|
|
|
|
- @current-change="getList()"
|
|
|
|
- />
|
|
|
|
|
|
+ <el-pagination v-model:current-page="params.pageNum" v-model:page-size="params.pageSize" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" :total="params.total" @size-change="getList()" @current-change="getList()" />
|
|
</div>
|
|
</div>
|
|
</el-card>
|
|
</el-card>
|
|
-
|
|
|
|
|
|
+
|
|
<!-- 数据源表单对话框 -->
|
|
<!-- 数据源表单对话框 -->
|
|
- <el-dialog
|
|
|
|
- v-model="dialogVisible"
|
|
|
|
- :title="formData.id ? '编辑数据源' : '新增数据源'"
|
|
|
|
- width="600px"
|
|
|
|
- :close-on-click-modal="false"
|
|
|
|
- :close-on-press-escape="false"
|
|
|
|
- >
|
|
|
|
|
|
+ <el-dialog v-model="dialogVisible" :title="formData.id ? '编辑数据源' : '新增数据源'" width="600px" :close-on-click-modal="false" :close-on-press-escape="false">
|
|
<el-form ref="formRef" :model="formData" :rules="rules" label-width="120px">
|
|
<el-form ref="formRef" :model="formData" :rules="rules" label-width="120px">
|
|
<el-form-item label="数据源名称" prop="name">
|
|
<el-form-item label="数据源名称" prop="name">
|
|
<el-input v-model="formData.name" placeholder="请输入数据源名称" />
|
|
<el-input v-model="formData.name" placeholder="请输入数据源名称" />
|
|
@@ -133,13 +99,9 @@
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
-
|
|
|
|
|
|
+
|
|
<!-- 测试连接对话框 -->
|
|
<!-- 测试连接对话框 -->
|
|
- <el-dialog
|
|
|
|
- v-model="testDialogVisible"
|
|
|
|
- title="测试数据源连接"
|
|
|
|
- width="500px"
|
|
|
|
- >
|
|
|
|
|
|
+ <el-dialog v-model="testDialogVisible" title="测试数据源连接" width="500px">
|
|
<el-form ref="testFormRef" :model="testFormData" :rules="testRules" label-width="120px">
|
|
<el-form ref="testFormRef" :model="testFormData" :rules="testRules" label-width="120px">
|
|
<el-form-item label="数据库类型" prop="type">
|
|
<el-form-item label="数据库类型" prop="type">
|
|
<el-select v-model="testFormData.type" placeholder="请选择数据库类型" style="width: 100%">
|
|
<el-select v-model="testFormData.type" placeholder="请选择数据库类型" style="width: 100%">
|
|
@@ -175,208 +137,162 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
-import { ref, reactive, onMounted } from 'vue'
|
|
|
|
-import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
|
-import request from '/@/utils/request'
|
|
|
|
-import { useSearch } from '/@/hooks/useSearch'
|
|
|
|
|
|
+import { ref, reactive, onMounted } from "vue";
|
|
|
|
+import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
|
+import { useSearch } from "/@/hooks/useCommon";
|
|
|
|
+import apiHub from "/@/api/modules/apiHub";
|
|
|
|
|
|
// 定义数据源类型
|
|
// 定义数据源类型
|
|
interface DataSource {
|
|
interface DataSource {
|
|
- id?: number
|
|
|
|
- name: string
|
|
|
|
- type: string
|
|
|
|
- host: string
|
|
|
|
- port: number
|
|
|
|
- username: string
|
|
|
|
- password?: string
|
|
|
|
- database: string
|
|
|
|
- maxOpenConns?: number
|
|
|
|
- maxIdleConns?: number
|
|
|
|
- connMaxLifetime?: number
|
|
|
|
- remark?: string
|
|
|
|
- createdAt?: string
|
|
|
|
- updatedAt?: string
|
|
|
|
|
|
+ id?: number;
|
|
|
|
+ name: string;
|
|
|
|
+ type: string;
|
|
|
|
+ host: string;
|
|
|
|
+ port: number;
|
|
|
|
+ username: string;
|
|
|
|
+ password?: string;
|
|
|
|
+ database: string;
|
|
|
|
+ maxOpenConns?: number;
|
|
|
|
+ maxIdleConns?: number;
|
|
|
|
+ connMaxLifetime?: number;
|
|
|
|
+ remark?: string;
|
|
|
|
+ createdAt?: string;
|
|
|
|
+ updatedAt?: string;
|
|
}
|
|
}
|
|
|
|
|
|
// 表单引用
|
|
// 表单引用
|
|
-const formRef = ref()
|
|
|
|
-const testFormRef = ref()
|
|
|
|
-const queryRef = ref()
|
|
|
|
|
|
+const formRef = ref();
|
|
|
|
+const testFormRef = ref();
|
|
|
|
+const queryRef = ref();
|
|
|
|
|
|
// 对话框状态
|
|
// 对话框状态
|
|
-const dialogVisible = ref(false)
|
|
|
|
-const testDialogVisible = ref(false)
|
|
|
|
-
|
|
|
|
-// 总数
|
|
|
|
-const total = ref(0)
|
|
|
|
-
|
|
|
|
-// 加载状态
|
|
|
|
-const loading = ref(false)
|
|
|
|
|
|
+const dialogVisible = ref(false);
|
|
|
|
+const testDialogVisible = ref(false);
|
|
|
|
|
|
// 表单数据
|
|
// 表单数据
|
|
const formData = reactive<DataSource>({
|
|
const formData = reactive<DataSource>({
|
|
- name: '',
|
|
|
|
- type: 'MySQL',
|
|
|
|
- host: '',
|
|
|
|
|
|
+ name: "",
|
|
|
|
+ type: "MySQL",
|
|
|
|
+ host: "",
|
|
port: 3306,
|
|
port: 3306,
|
|
- username: '',
|
|
|
|
- password: '',
|
|
|
|
- database: '',
|
|
|
|
|
|
+ username: "",
|
|
|
|
+ password: "",
|
|
|
|
+ database: "",
|
|
maxOpenConns: 100,
|
|
maxOpenConns: 100,
|
|
maxIdleConns: 10,
|
|
maxIdleConns: 10,
|
|
connMaxLifetime: 3600,
|
|
connMaxLifetime: 3600,
|
|
- remark: ''
|
|
|
|
-})
|
|
|
|
|
|
+ remark: "",
|
|
|
|
+});
|
|
|
|
|
|
// 测试连接表单数据
|
|
// 测试连接表单数据
|
|
const testFormData = reactive({
|
|
const testFormData = reactive({
|
|
- type: 'MySQL',
|
|
|
|
- host: '',
|
|
|
|
|
|
+ type: "MySQL",
|
|
|
|
+ host: "",
|
|
port: 3306,
|
|
port: 3306,
|
|
- username: '',
|
|
|
|
- password: '',
|
|
|
|
- database: ''
|
|
|
|
-})
|
|
|
|
|
|
+ username: "",
|
|
|
|
+ password: "",
|
|
|
|
+ database: "",
|
|
|
|
+});
|
|
|
|
|
|
// 表单验证规则
|
|
// 表单验证规则
|
|
const rules = {
|
|
const rules = {
|
|
- name: [{ required: true, message: '请输入数据源名称', trigger: 'blur' }],
|
|
|
|
- type: [{ required: true, message: '请选择数据库类型', trigger: 'change' }],
|
|
|
|
- host: [{ required: true, message: '请输入主机地址', trigger: 'blur' }],
|
|
|
|
- port: [{ required: true, message: '请输入端口', trigger: 'blur' }],
|
|
|
|
- username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
|
|
|
|
- password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
|
|
|
|
- database: [{ required: true, message: '请输入数据库名', trigger: 'blur' }]
|
|
|
|
-}
|
|
|
|
|
|
+ name: [{ required: true, message: "请输入数据源名称", trigger: "blur" }],
|
|
|
|
+ type: [{ required: true, message: "请选择数据库类型", trigger: "change" }],
|
|
|
|
+ host: [{ required: true, message: "请输入主机地址", trigger: "blur" }],
|
|
|
|
+ port: [{ required: true, message: "请输入端口", trigger: "blur" }],
|
|
|
|
+ username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
|
|
|
+ password: [{ required: true, message: "请输入密码", trigger: "blur" }],
|
|
|
|
+ database: [{ required: true, message: "请输入数据库名", trigger: "blur" }],
|
|
|
|
+};
|
|
|
|
|
|
// 测试连接表单验证规则
|
|
// 测试连接表单验证规则
|
|
const testRules = {
|
|
const testRules = {
|
|
- type: [{ required: true, message: '请选择数据库类型', trigger: 'change' }],
|
|
|
|
- host: [{ required: true, message: '请输入主机地址', trigger: 'blur' }],
|
|
|
|
- port: [{ required: true, message: '请输入端口', trigger: 'blur' }],
|
|
|
|
- username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
|
|
|
|
- password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
|
|
|
|
- database: [{ required: true, message: '请输入数据库名', trigger: 'blur' }]
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// 数据源列表请求函数
|
|
|
|
-const dataSourceRequest = (params: any) => {
|
|
|
|
- return request({
|
|
|
|
- url: '/datasource/list',
|
|
|
|
- method: 'get',
|
|
|
|
- params
|
|
|
|
- })
|
|
|
|
-}
|
|
|
|
|
|
+ type: [{ required: true, message: "请选择数据库类型", trigger: "change" }],
|
|
|
|
+ host: [{ required: true, message: "请输入主机地址", trigger: "blur" }],
|
|
|
|
+ port: [{ required: true, message: "请输入端口", trigger: "blur" }],
|
|
|
|
+ username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
|
|
|
+ password: [{ required: true, message: "请输入密码", trigger: "blur" }],
|
|
|
|
+ database: [{ required: true, message: "请输入数据库名", trigger: "blur" }],
|
|
|
|
+};
|
|
|
|
|
|
// 使用通用搜索钩子
|
|
// 使用通用搜索钩子
|
|
-const { params, tableData, getList } = useSearch<DataSource[]>(
|
|
|
|
- dataSourceRequest,
|
|
|
|
- 'data',
|
|
|
|
- (res: any) => {
|
|
|
|
- total.value = res.pagination?.total || 0
|
|
|
|
- return res.data || []
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- keyWord: '',
|
|
|
|
- dateRange: [],
|
|
|
|
- pageNum: 1,
|
|
|
|
- pageSize: 10
|
|
|
|
- }
|
|
|
|
-)
|
|
|
|
|
|
+const { params, tableData, getList, loading } = useSearch<DataSource[]>(apiHub.dataSource.list, "Data", {
|
|
|
|
+ keyWord: "",
|
|
|
|
+ dateRange: [],
|
|
|
|
+});
|
|
|
|
|
|
// 页面加载时获取列表数据
|
|
// 页面加载时获取列表数据
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
- getList(1)
|
|
|
|
-})
|
|
|
|
|
|
+ getList(1);
|
|
|
|
+});
|
|
|
|
|
|
// 重置查询表单
|
|
// 重置查询表单
|
|
const resetQuery = () => {
|
|
const resetQuery = () => {
|
|
- queryRef.value?.resetFields()
|
|
|
|
- getList(1)
|
|
|
|
-}
|
|
|
|
|
|
+ queryRef.value?.resetFields();
|
|
|
|
+ getList(1);
|
|
|
|
+};
|
|
|
|
|
|
// 新增或编辑数据源
|
|
// 新增或编辑数据源
|
|
const addOrEdit = (row?: DataSource) => {
|
|
const addOrEdit = (row?: DataSource) => {
|
|
// 重置表单
|
|
// 重置表单
|
|
Object.assign(formData, {
|
|
Object.assign(formData, {
|
|
id: undefined,
|
|
id: undefined,
|
|
- name: '',
|
|
|
|
- type: 'MySQL',
|
|
|
|
- host: '',
|
|
|
|
|
|
+ name: "",
|
|
|
|
+ type: "MySQL",
|
|
|
|
+ host: "",
|
|
port: 3306,
|
|
port: 3306,
|
|
- username: '',
|
|
|
|
- password: '',
|
|
|
|
- database: '',
|
|
|
|
|
|
+ username: "",
|
|
|
|
+ password: "",
|
|
|
|
+ database: "",
|
|
maxOpenConns: 100,
|
|
maxOpenConns: 100,
|
|
maxIdleConns: 10,
|
|
maxIdleConns: 10,
|
|
connMaxLifetime: 3600,
|
|
connMaxLifetime: 3600,
|
|
- remark: ''
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
|
|
+ remark: "",
|
|
|
|
+ });
|
|
|
|
+
|
|
// 如果是编辑,填充表单数据
|
|
// 如果是编辑,填充表单数据
|
|
if (row) {
|
|
if (row) {
|
|
- Object.assign(formData, { ...row, password: '' })
|
|
|
|
|
|
+ Object.assign(formData, { ...row, password: "" });
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// 显示对话框
|
|
// 显示对话框
|
|
- dialogVisible.value = true
|
|
|
|
-}
|
|
|
|
|
|
+ dialogVisible.value = true;
|
|
|
|
+};
|
|
|
|
|
|
// 提交表单
|
|
// 提交表单
|
|
const submitForm = async () => {
|
|
const submitForm = async () => {
|
|
// 表单验证
|
|
// 表单验证
|
|
- await formRef.value.validate()
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- // 根据是否有ID判断是新增还是编辑
|
|
|
|
- const url = formData.id ? '/datasource/edit' : '/datasource/add'
|
|
|
|
- const method = formData.id ? 'put' : 'post'
|
|
|
|
-
|
|
|
|
- // 发送请求
|
|
|
|
- await request({
|
|
|
|
- url,
|
|
|
|
- method,
|
|
|
|
- data: formData
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- // 关闭对话框
|
|
|
|
- dialogVisible.value = false
|
|
|
|
-
|
|
|
|
- // 刷新列表
|
|
|
|
- getList()
|
|
|
|
-
|
|
|
|
- // 提示成功
|
|
|
|
- ElMessage.success(formData.id ? '编辑成功' : '添加成功')
|
|
|
|
- } catch (error) {
|
|
|
|
- console.error('提交表单失败:', error)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+ await formRef.value.validate();
|
|
|
|
+
|
|
|
|
+ const theApi = formData.id ? apiHub.dataSource.edit : apiHub.dataSource.add;
|
|
|
|
+
|
|
|
|
+ // 发送请求
|
|
|
|
+ await theApi(formData);
|
|
|
|
+
|
|
|
|
+ // 关闭对话框
|
|
|
|
+ dialogVisible.value = false;
|
|
|
|
+
|
|
|
|
+ // 刷新列表
|
|
|
|
+ getList();
|
|
|
|
+
|
|
|
|
+ // 提示成功
|
|
|
|
+ ElMessage.success(formData.id ? "编辑成功" : "添加成功");
|
|
|
|
+};
|
|
|
|
|
|
// 删除数据源
|
|
// 删除数据源
|
|
const deleteDataSource = (row: DataSource) => {
|
|
const deleteDataSource = (row: DataSource) => {
|
|
- ElMessageBox.confirm(`确定要删除数据源「${row.name}」吗?`, '警告', {
|
|
|
|
- confirmButtonText: '确定',
|
|
|
|
- cancelButtonText: '取消',
|
|
|
|
- type: 'warning'
|
|
|
|
- }).then(async () => {
|
|
|
|
- try {
|
|
|
|
- // 发送删除请求
|
|
|
|
- await request({
|
|
|
|
- url: '/datasource/delete',
|
|
|
|
- method: 'delete',
|
|
|
|
- data: { ids: [row.id] }
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- // 刷新列表
|
|
|
|
- getList()
|
|
|
|
-
|
|
|
|
- // 提示成功
|
|
|
|
- ElMessage.success('删除成功')
|
|
|
|
- } catch (error) {
|
|
|
|
- console.error('删除失败:', error)
|
|
|
|
- }
|
|
|
|
- }).catch(() => {})
|
|
|
|
-}
|
|
|
|
|
|
+ ElMessageBox.confirm(`确定要删除数据源「${row.name}」吗?`, "警告", {
|
|
|
|
+ confirmButtonText: "确定",
|
|
|
|
+ cancelButtonText: "取消",
|
|
|
|
+ type: "warning",
|
|
|
|
+ })
|
|
|
|
+ .then(async () => {
|
|
|
|
+ await apiHub.dataSource.delete([row.id!]);
|
|
|
|
+ getList();
|
|
|
|
+ ElMessage.success("删除成功");
|
|
|
|
+ })
|
|
|
|
+ .catch(() => {});
|
|
|
|
+};
|
|
|
|
|
|
// 测试连接(从列表)
|
|
// 测试连接(从列表)
|
|
const testConnection = (row: DataSource) => {
|
|
const testConnection = (row: DataSource) => {
|
|
@@ -386,19 +302,19 @@ const testConnection = (row: DataSource) => {
|
|
host: row.host,
|
|
host: row.host,
|
|
port: row.port,
|
|
port: row.port,
|
|
username: row.username,
|
|
username: row.username,
|
|
- password: '', // 密码需要重新输入
|
|
|
|
- database: row.database
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
|
|
+ password: "", // 密码需要重新输入
|
|
|
|
+ database: row.database,
|
|
|
|
+ });
|
|
|
|
+
|
|
// 显示测试对话框
|
|
// 显示测试对话框
|
|
- testDialogVisible.value = true
|
|
|
|
-}
|
|
|
|
|
|
+ testDialogVisible.value = true;
|
|
|
|
+};
|
|
|
|
|
|
// 测试连接(从表单)
|
|
// 测试连接(从表单)
|
|
const testConnectionForm = async () => {
|
|
const testConnectionForm = async () => {
|
|
// 表单验证
|
|
// 表单验证
|
|
- await formRef.value.validate()
|
|
|
|
-
|
|
|
|
|
|
+ await formRef.value.validate();
|
|
|
|
+
|
|
// 填充测试表单
|
|
// 填充测试表单
|
|
Object.assign(testFormData, {
|
|
Object.assign(testFormData, {
|
|
type: formData.type,
|
|
type: formData.type,
|
|
@@ -406,37 +322,26 @@ const testConnectionForm = async () => {
|
|
port: formData.port,
|
|
port: formData.port,
|
|
username: formData.username,
|
|
username: formData.username,
|
|
password: formData.password,
|
|
password: formData.password,
|
|
- database: formData.database
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
|
|
+ database: formData.database,
|
|
|
|
+ });
|
|
|
|
+
|
|
// 显示测试对话框
|
|
// 显示测试对话框
|
|
- testDialogVisible.value = true
|
|
|
|
-}
|
|
|
|
|
|
+ testDialogVisible.value = true;
|
|
|
|
+};
|
|
|
|
|
|
// 提交测试连接
|
|
// 提交测试连接
|
|
const submitTestConnection = async () => {
|
|
const submitTestConnection = async () => {
|
|
// 表单验证
|
|
// 表单验证
|
|
- await testFormRef.value.validate()
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- // 发送测试连接请求
|
|
|
|
- const res = await request({
|
|
|
|
- url: '/datasource/test',
|
|
|
|
- method: 'post',
|
|
|
|
- data: testFormData
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- // 根据测试结果显示提示
|
|
|
|
- if (res.data.success) {
|
|
|
|
- ElMessage.success(res.data.message || '连接成功')
|
|
|
|
|
|
+ await testFormRef.value.validate();
|
|
|
|
+
|
|
|
|
+ await apiHub.dataSource.test(testFormData).then((res: any) => {
|
|
|
|
+ if (res.success) {
|
|
|
|
+ ElMessage.success(res.message || "连接成功");
|
|
} else {
|
|
} else {
|
|
- ElMessage.error(res.data.message || '连接失败')
|
|
|
|
|
|
+ ElMessage.error(res.message || "连接失败");
|
|
}
|
|
}
|
|
- } catch (error) {
|
|
|
|
- console.error('测试连接失败:', error)
|
|
|
|
- ElMessage.error('测试连接失败')
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+ });
|
|
|
|
+};
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|