当前位置: 首页 > backend >正文

重构 cluster-db 选择器,新增限制字段 showDb 不影响原功能前提实现查询功能增量拓展

1.为DbSelect组件新添加showDb字段 :show-db="false"时只显示集群不显示数据库信息

重构 cluster-db 选择器,新增限制字段 showDb 不影响原功能前提实现查询功能增量拓展,。保证组件**高可用性,减少冗余方法的编写,提高整体代码复用性和维护性**。

<!-- 简易版 cluster-db选择器 支持筛选,需要传递emit onChange来获取返回值 -->
<!-- 返回值为数据,第一个是 集群, 第二个是 DB:ID ["base_dms_platform","dms_main_beta:1"
] -->
<template><Cascader2v-model:model-value="selectedValue":options="filteredOptions"filterableremotehideAfterSelect:filter-method="handleFilter"@change="handleChange"></Cascader2>
</template>
​
<script lang="ts" setup>
import { Cascader2, OptionContent, useDebounce } from '@xhs/delight'
import { onBeforeMount, Ref, ref } from 'vue'
import { getDbByEnv } from '~/page/mysql/SQLQuery/service'
​
const props = defineProps<{env: stringshowDb?: boolean  // 添加 showDb 属性,控制是否显示数据库选项
}>(),{showDb: true
}
​
const emit = defineEmits(['onChange'])
const optionsContents: Ref<OptionContent[]> = ref([])
const filteredOptions: Ref<OptionContent[]> = ref([])
​
const getClusterAndDbOptions = () => {getDbByEnv({ env: props.env }).then((res) => {const databases = resconst clusters: Record<string, (typeof databases)[number][]> = {}databases.forEach((db) => {const cluster = db.clusterNameif (!clusters[cluster]) clusters[cluster] = []clusters[cluster].push(db)})// 生成下拉选项optionsContents.value = Object.entries(clusters).map(([cluster, dbs]) => ({value: cluster,label: cluster,...(props.showDb && {children: dbs.map((db: any) => ({label: db.dbname,value: db.dbname + ':' + db.id}))})}))filteredOptions.value = optionsContents.value})
}
​
onBeforeMount(() => {getClusterAndDbOptions()
})
​
const selectedValue = ref([])
​
const handleFilter: any = useDebounce((value: string) => {const lowerValue = value.toLowerCase()
​filteredOptions.value = optionsContents.value.map((item: any) => {if (item.children) {// 过滤子节点const filteredChildren = item.children.filter((child: any) =>child.label.toLowerCase().includes(lowerValue))// 如果父节点的label匹配,保留所有子节点if (item.label.toLowerCase().includes(lowerValue)) {return { ...item, children: item.children }}// 如果有符合条件的子节点,保留父节点并更新子节点if (filteredChildren.length > 0) {return { ...item, children: filteredChildren }}} else {// 如果是单层结构直接匹配if (item.label.toLowerCase().includes(lowerValue)) {return item}}return null // 无符合条件的节点}).filter((item: any) => item !== null)
​return false},{delay: 200}
)
​
const handleChange = () => {emit('onChange', selectedValue.value)
}
</script>

主要修改点:

  1. ...(props.showDb !== false && { 简化为 ...(props.showDb && {

  2. 这样当 showDbfalseundefined 时,不会添加 children 属性

  3. showDbtrue 时,会添加 children 属性

使用方式

<!-- 只显示集群信息 -->
<DbSelect env="sit" :show-db="false"@on-change="handleTargetClusterChange"
/>
​
<!-- 显示集群和数据库信息(默认行为) -->
<DbSelect env="sit" @on-change="handleTargetClusterChange"
/>

http://www.xdnf.cn/news/4960.html

相关文章:

  • ABP vNext + EF Core 实战性能调优指南
  • 捌拾叁- 量子傅里叶变换
  • 【25软考网工】第六章 网络安全(1)网络安全基础
  • Rust 中的 `String`、`str` 和 `str`:深入解析与使用指南
  • Java大师成长计划之第16天:高级并发工具类
  • 自动驾驶的“眼睛”:用Python构建智能障碍物检测系统
  • U9C对接飞书审批流完整过程
  • 【Pandas】pandas DataFrame clip
  • js原型污染 + xss劫持base -- no-code b01lersctf 2025
  • PostgreSQL 18 Beta 1发布,有哪些功能亮点?
  • P2572 [SCOI2010] 序列操作 Solution
  • Shell 脚本编程详细指南:第五章 - 函数与参数传递
  • ROS1 和 ROS2 在同一个系统中使用
  • 分布式ID设计 数据库主键自增
  • 第423题-有效的括号序列
  • 大模型——Trae IDE 指南:轻松配置自定义 AI 规则 (Trae Rules)
  • 阅文集团C++面试题及参考答案
  • 服务器配置错误导致SSL/TLS出现安全漏洞,如何进行排查?
  • 汽车制造行业的数字化转型
  • 华为云Flexus+DeepSeek征文|从开通到应用:华为云DeepSeek-V3/R1商用服务深度体验
  • 【软件设计师:存储】16.计算机存储系统
  • gitlab相关面试题及答案
  • 深入了解 Stable Diffusion:AI 图像生成的奥秘
  • 【论文阅读】——Articulate AnyMesh: Open-Vocabulary 3D Articulated Objects Modeling
  • 聚焦车辆模式管理:概念阐释、测试方案设计与实施
  • 代码随想录第40天:图论1
  • Vue3.5 企业级管理系统实战(十八):用户管理
  • 回顾 Vue 3 基础【Plan - May - Week 1】
  • 零基础学Java——第十一章:实战项目 - 控制台应用开发
  • 力扣-2.两数相加