--- name: fms-tree-component overview: 基于 shadcn-vue 模式(reka-ui + Tailwind v4 + Vue 3 Composition API)从零封装 FmsTree 组件,参考旧系统 FmsTree 的核心能力(虚拟根节点、右键菜单、i18n、展开/选择),并确保与模块管理页面等场景兼容。 design: architecture: framework: vue component: shadcn styleKeywords: - shadcn-vue - new-york - Minimalism - Clean - Semantic Design fontSystem: fontFamily: Inter heading: size: 14px weight: 500 subheading: size: 12px weight: 400 body: size: 13px weight: 400 colorSystem: primary: - var(--primary) - var(--accent) background: - var(--background) - var(--accent) - transparent text: - var(--foreground) - var(--muted-foreground) - var(--accent-foreground) functional: - var(--border) - var(--ring) todos: - id: add-t-function content: 在 stores/app.ts 中添加 t() 翻译函数,支持从 DB 的 b_i18n 表获取翻译文本 status: pending - id: create-use-tree-i18n content: 创建 composables/useTreeI18n.ts,提供递归树节点翻译能力 status: pending dependencies: - add-t-function - id: create-fms-tree-node content: 创建 components/FmsTreeNode.vue 递归节点组件,基于 Collapsible + ContextMenu 实现展开折叠、选中高亮、右键菜单、键盘导航 status: pending - id: create-fms-tree content: 创建 components/FmsTree.vue 根组件,实现虚拟根节点包裹、props 定义、v-model 双向绑定、事件转发和 slot 透传 status: pending dependencies: - create-fms-tree-node - create-use-tree-i18n - id: verify-and-format content: 验证组件在模块管理页面中可正常渲染,运行 pnpm fmt:check 检查格式 status: pending dependencies: - create-fms-tree --- ## 用户需求 在新系统 fms-vue 中封装一个可复用的 FmsTree 树组件,替代旧系统 fms-vue2 中的 FmsTree.vue。新项目使用 shadcn-vue (reka-ui + Tailwind v4) 技术栈,不能使用 antdv-next。 ## 产品概述 FmsTree 是一个通用的树形展示组件,为模块管理、数据分类、文件目录等场景提供统一的树交互体验。 ## 核心功能 - **树形结构展示**:递归渲染树节点,支持无限层级嵌套 - **展开/折叠**:点击箭头图标展开或折叠子节点,支持 v-model:expandedKeys 受控模式 - **节点选中**:点击节点高亮选中,支持 v-model:selectedKeys 受控模式,支持单选/多选 - **虚拟根节点**:自动在 treeData 外层包裹虚拟根节点(如 全部分类),确保首次加载时树处于展开可交互状态 - **右键菜单**:通过 contextMenu prop 传入菜单生成函数,右键节点弹出自定义菜单项 - **标题插槽**:支持 #title slot 自定义节点标题渲染 - ~~i18n 翻译(本次不做,后续按需添加)~~ - **键盘导航**:支持上下箭头切换节点、左右箭头展开/折叠、Enter 选中 - **样式定制**:遵循 shadcn-vue 语义颜色体系,支持 Tailwind class 透传 ## 技术栈 - **Vue 3 Composition API** + TypeScript (`