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

相关推荐
小林ixn1 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
窝子面4 小时前
手搓最简前后端协作-node
javascript·数据库
kyriewen4 小时前
我让AI给前端项目做了一次完整的Code Review——它和人类的差距,比我想的大得多
前端·javascript·ai编程
এ慕ོ冬℘゜5 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
sugar__salt6 小时前
Vue3 表单双向绑定与响应式核心 API 技术详解
前端·javascript·vue.js
郝亚军6 小时前
使用Vue 3和Nginx打包和部署Vue.js项目的一般步骤
前端·vue.js·nginx
SmartBoyW6 小时前
CSS弹性布局(Flexbox)学习笔记:从零开始搞懂弹性布局
前端·javascript
用户938515635077 小时前
写了这么久 useState,你真的知道它在干什么吗?
前端·javascript
烬羽7 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
浮江雾8 小时前
Flutter第十七节-----路由管理(3)
android·开发语言·前端·javascript·flutter·入门