用tdesign-vue-next的t-tree-select做个下拉单选框

直接上代码:

1,HTML代码:

html 复制代码
<template>
  <t-tree-select v-model="selectedValue" :data="treeData" placeholder="请选择" clearable>
    <template #tree="{ node }">
      <div style="display: flex; align-items: center; width: 100%">
        <t-icon :name="getNodeIcon(node)" :style="{ color: getNodeColor(node), marginRight: '8px' }" />
        <span>{{ node.label }}</span>
        <t-badge v-if="node.data?.count" :count="node.data.count" style="margin-left: 8px" />
        <t-tag v-if="node.data?.tag" :theme="node.data.tagTheme" size="small" style="margin-left: 8px">
          {{ node.data.tag }}
        </t-tag>
      </div>
    </template>
  </t-tree-select>
</template>

2,TS代码:

TypeScript 复制代码
<script setup>
import { ref } from 'vue';

const selectedValue = ref('');

const treeData = ref([
  {
    id: -1,
    label: '主菜单',
    children: [
      {
        label: '系统管理',
        value: 'system',
        data: { icon: 'settings', count: 3, tag: '系统', tagTheme: 'primary' },
        children: [
          {
            label: '用户管理',
            value: 'user',
            data: { icon: 'user', count: 156, tag: '核心', tagTheme: 'danger' },
          },
          {
            label: '角色管理',
            value: 'role',
            data: { icon: 'usergroup', count: 12, tag: '权限', tagTheme: 'warning' },
          },
          {
            label: '菜单管理',
            value: 'menu',
            data: { icon: 'menu', count: 45 },
          },
        ],
      },
      {
        label: '内容管理',
        value: 'content',
        data: { icon: 'file', count: 5 },
        children: [
          { label: '文章管理', value: 'article', data: { icon: 'file-text' } },
          { label: '分类管理', value: 'category', data: { icon: 'folder' } },
        ],
      },
    ],
  },
]);

// 获取节点图标
const getNodeIcon = (node) => {
  return node.data?.icon || 'file';
};

// 获取节点颜色
const getNodeColor = (node) => {
  if (node.data?.tag === '核心') return '#ff4d4f';
  if (node.data?.tag === '权限') return '#fa8c16';
  if (node.data?.tag === '系统') return '#1890ff';
  return '#595959';
};
</script>

const selectedValue = ref('');定义保存选定的节点

相关推荐
wangfpp24 分钟前
性能优化,请先停手:为什么我劝你别上来就搞优化?
前端·javascript·面试
踩着两条虫27 分钟前
AI 驱动的 Vue3 应用开发平台 深入探究(二十):CLI与工具链之构建配置与Vite集成
前端·vue.js·ai编程
踩着两条虫32 分钟前
AI 驱动的 Vue3 应用开发平台 深入探究(二十):CLI与工具链之自定义构建插件
前端·vue.js·ai编程
三旬81 小时前
Day.js 源码深度剖析:极简时间库的设计艺术
javascript
清风徐来QCQ1 小时前
js中的模板字符串
开发语言·前端·javascript
SuperEugene2 小时前
Vue3 + Element Plus 表格实战:批量操作、行内编辑、跨页选中逻辑统一|表单与表格规范篇
开发语言·前端·javascript
极梦网络无忧2 小时前
基于 Vite + Vue3 的组件自动注册功能
前端·javascript·vue.js
软弹3 小时前
深入理解 React Ref 机制:useRef 与 forwardRef 的协作原理
前端·javascript·react.js
雪碧聊技术3 小时前
前端vue代码架子搭建
前端·javascript·vue.js·前端项目代码框架搭建
han_3 小时前
JavaScript设计模式(二):策略模式实现与应用
前端·javascript·设计模式