用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('');定义保存选定的节点

相关推荐
windliang24 分钟前
Claude Code 源码分析(十二):错误处理与自动恢复:让 Agent 稳定运行
前端·javascript·面试
默_笙33 分钟前
🛬 前端路由的"高级玩法":懒加载、404、鉴权路由,一个都不能少(下篇)
前端·javascript
sunly_33 分钟前
TypeScript:3、类型声明与类型推断
javascript·ubuntu·typescript
奥莱维2 小时前
【无标题】
java·前端·javascript
阿懂在掘金2 小时前
同一份弹窗我重构了三次:从 v-model 地狱到路由式调用,终于治好了模板臃肿
前端·vue.js·前端框架
黄金决明子3 小时前
浏览器Window底层操作全解
前端·javascript
AI视觉网奇4 小时前
cannot import name ‘model_urls‘ from ‘torchvision.models.resnet‘
linux·前端·javascript
小锋java12344 小时前
【技术专题】Vue3 - 生命周期
vue.js·vite
Sca_杰4 小时前
微信客服API对接速通
javascript·node.js
大家的林语冰5 小时前
👍 JS 还在进化,ES2026 正式推出,最新七大特性补全!
前端·javascript·json