feat(iot): 前端新增 Database 数据目的配置表单
1. DatabaseConfigForm.vue: 新增 Database 配置表单(JDBC地址/用户名/密码/目标表名) 2. config/index.ts: 导出 DatabaseConfigForm 组件 3. DataSinkForm.vue: 引入 DatabaseConfigForm 条件渲染和校验规则 4. api/sink/index.ts: 添加 DatabaseConfig 接口和联合类型pull/867/head
parent
2cb3b5b492
commit
ad376b24b4
|
|
@ -13,6 +13,7 @@ export interface DataSinkVO {
|
||||||
| TcpConfig
|
| TcpConfig
|
||||||
| WebSocketConfig
|
| WebSocketConfig
|
||||||
| MqttConfig
|
| MqttConfig
|
||||||
|
| DatabaseConfig
|
||||||
| RocketMQConfig
|
| RocketMQConfig
|
||||||
| KafkaMQConfig
|
| KafkaMQConfig
|
||||||
| RabbitMQConfig
|
| RabbitMQConfig
|
||||||
|
|
@ -73,6 +74,14 @@ export interface MqttConfig extends Config {
|
||||||
topic: string
|
topic: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Database 配置 */
|
||||||
|
export interface DatabaseConfig extends Config {
|
||||||
|
jdbcUrl: string
|
||||||
|
username: string
|
||||||
|
password: string
|
||||||
|
tableName: string
|
||||||
|
}
|
||||||
|
|
||||||
/** RocketMQ 配置 */
|
/** RocketMQ 配置 */
|
||||||
export interface RocketMQConfig extends Config {
|
export interface RocketMQConfig extends Config {
|
||||||
nameServer: string
|
nameServer: string
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,10 @@
|
||||||
v-model="formData.config"
|
v-model="formData.config"
|
||||||
/>
|
/>
|
||||||
<MqttConfigForm v-if="IotDataSinkTypeEnum.MQTT === formData.type" v-model="formData.config" />
|
<MqttConfigForm v-if="IotDataSinkTypeEnum.MQTT === formData.type" v-model="formData.config" />
|
||||||
|
<DatabaseConfigForm
|
||||||
|
v-if="IotDataSinkTypeEnum.DATABASE === formData.type"
|
||||||
|
v-model="formData.config"
|
||||||
|
/>
|
||||||
<RocketMQConfigForm
|
<RocketMQConfigForm
|
||||||
v-if="IotDataSinkTypeEnum.ROCKETMQ === formData.type"
|
v-if="IotDataSinkTypeEnum.ROCKETMQ === formData.type"
|
||||||
v-model="formData.config"
|
v-model="formData.config"
|
||||||
|
|
@ -69,6 +73,7 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { CommonStatusEnum } from '@/utils/constants'
|
import { CommonStatusEnum } from '@/utils/constants'
|
||||||
import { DataSinkApi, DataSinkVO, IotDataSinkTypeEnum } from '@/api/iot/rule/data/sink'
|
import { DataSinkApi, DataSinkVO, IotDataSinkTypeEnum } from '@/api/iot/rule/data/sink'
|
||||||
import {
|
import {
|
||||||
|
DatabaseConfigForm,
|
||||||
HttpConfigForm,
|
HttpConfigForm,
|
||||||
KafkaMQConfigForm,
|
KafkaMQConfigForm,
|
||||||
MqttConfigForm,
|
MqttConfigForm,
|
||||||
|
|
@ -116,6 +121,9 @@ const formRules = reactive({
|
||||||
'config.password': [{ required: true, message: '密码不能为空', trigger: 'blur' }],
|
'config.password': [{ required: true, message: '密码不能为空', trigger: 'blur' }],
|
||||||
'config.clientId': [{ required: true, message: '客户端 ID 不能为空', trigger: 'blur' }],
|
'config.clientId': [{ required: true, message: '客户端 ID 不能为空', trigger: 'blur' }],
|
||||||
'config.topic': [{ required: true, message: '主题不能为空', trigger: 'blur' }],
|
'config.topic': [{ required: true, message: '主题不能为空', trigger: 'blur' }],
|
||||||
|
// Database 配置
|
||||||
|
'config.jdbcUrl': [{ required: true, message: 'JDBC 连接地址不能为空', trigger: 'blur' }],
|
||||||
|
'config.tableName': [{ required: true, message: '目标表名不能为空', trigger: 'blur' }],
|
||||||
// RocketMQ 配置
|
// RocketMQ 配置
|
||||||
'config.nameServer': [{ required: true, message: 'NameServer 地址不能为空', trigger: 'blur' }],
|
'config.nameServer': [{ required: true, message: 'NameServer 地址不能为空', trigger: 'blur' }],
|
||||||
'config.accessKey': [{ required: true, message: 'AccessKey 不能为空', trigger: 'blur' }],
|
'config.accessKey': [{ required: true, message: 'AccessKey 不能为空', trigger: 'blur' }],
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
<template>
|
||||||
|
<el-form-item label="JDBC 地址" prop="config.jdbcUrl">
|
||||||
|
<el-input
|
||||||
|
v-model="config.jdbcUrl"
|
||||||
|
placeholder="请输入JDBC连接地址,如:jdbc:mysql://localhost:3306/iot_data"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户名" prop="config.username">
|
||||||
|
<el-input v-model="config.username" placeholder="请输入数据库用户名" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="密码" prop="config.password">
|
||||||
|
<el-input v-model="config.password" placeholder="请输入数据库密码" show-password type="password" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="目标表名" prop="config.tableName">
|
||||||
|
<el-input v-model="config.tableName" placeholder="请输入目标表名,如:iot_device_message_sink" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { DatabaseConfig, IotDataSinkTypeEnum } from '@/api/iot/rule/data/sink'
|
||||||
|
import { useVModel } from '@vueuse/core'
|
||||||
|
import { isEmpty } from '@/utils/is'
|
||||||
|
|
||||||
|
defineOptions({ name: 'DatabaseConfigForm' })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
modelValue: any
|
||||||
|
}>()
|
||||||
|
const emit = defineEmits(['update:modelValue'])
|
||||||
|
const config = useVModel(props, 'modelValue', emit) as Ref<DatabaseConfig>
|
||||||
|
|
||||||
|
/** 组件初始化 */
|
||||||
|
onMounted(() => {
|
||||||
|
if (!isEmpty(config.value)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
config.value = {
|
||||||
|
type: IotDataSinkTypeEnum.DATABASE + '', // 序列化成对应类型时使用
|
||||||
|
jdbcUrl: '',
|
||||||
|
username: '',
|
||||||
|
password: '',
|
||||||
|
tableName: ''
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
@ -2,6 +2,7 @@ import HttpConfigForm from './HttpConfigForm.vue'
|
||||||
import TcpConfigForm from './TcpConfigForm.vue'
|
import TcpConfigForm from './TcpConfigForm.vue'
|
||||||
import WebSocketConfigForm from './WebSocketConfigForm.vue'
|
import WebSocketConfigForm from './WebSocketConfigForm.vue'
|
||||||
import MqttConfigForm from './MqttConfigForm.vue'
|
import MqttConfigForm from './MqttConfigForm.vue'
|
||||||
|
import DatabaseConfigForm from './DatabaseConfigForm.vue'
|
||||||
import RocketMQConfigForm from './RocketMQConfigForm.vue'
|
import RocketMQConfigForm from './RocketMQConfigForm.vue'
|
||||||
import KafkaMQConfigForm from './KafkaMQConfigForm.vue'
|
import KafkaMQConfigForm from './KafkaMQConfigForm.vue'
|
||||||
import RabbitMQConfigForm from './RabbitMQConfigForm.vue'
|
import RabbitMQConfigForm from './RabbitMQConfigForm.vue'
|
||||||
|
|
@ -12,6 +13,7 @@ export {
|
||||||
TcpConfigForm,
|
TcpConfigForm,
|
||||||
WebSocketConfigForm,
|
WebSocketConfigForm,
|
||||||
MqttConfigForm,
|
MqttConfigForm,
|
||||||
|
DatabaseConfigForm,
|
||||||
RocketMQConfigForm,
|
RocketMQConfigForm,
|
||||||
KafkaMQConfigForm,
|
KafkaMQConfigForm,
|
||||||
RabbitMQConfigForm,
|
RabbitMQConfigForm,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue