资产分类树应由Pinia统一管理,使用useAssetCategoryStore存储状态、提供计算属性和操作方法,结合首次加载根节点与按需加载子节点策略,支持本地持久化和服务端同步,并在getter中前置权限过滤。

在资产管理系统中维护全局资产分类树,核心是把树形结构作为共享状态统一管理,避免各页面重复请求、各自缓存、更新不同步。Pinia 正适合这类需要跨页面复用、实时响应、持久化保存的场景。
分类树数据应放在 Pinia Store 中
不要在每个组件里单独请求或定义分类树。统一交给一个 store 管理,比如 useAssetCategoryStore:
- state 存储树结构(如
categories: ref<CategoryNode[]>([])) - getters 提供常用计算逻辑,例如
getRootCategories、findCategoryById、getChildren - actions 封装操作方法:初始化加载、按需展开子节点、新增/编辑/删除分类、拖拽重排等
首次加载 + 按需加载结合使用
分类树通常层级深、节点多,全量加载影响性能。推荐策略:
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
- 启动时只拉取一级分类(根节点),存入 state
- 用户点击展开某节点时,调用 action 触发子节点异步加载,并合并进原树结构
- 用
loadingMap: ref<Record<string, boolean>>({})记录各节点加载状态,避免重复请求
支持本地持久化与服务端同步
分类树变动不频繁,但用户期望刷新后仍保持展开状态和最新结构:
立即学习“前端免费学习笔记(深入)”;
- 搭配
pinia-plugin-persistedstate插件,将树结构自动存入 localStorage - 所有增删改操作都通过 actions 发起,在 action 内部同时更新本地 state 和调用 API 同步到后端
- 为防止并发修改冲突,可加简单版本号或 lastModified 字段做乐观锁校验
权限与动态过滤要前置处理
不同角色看到的分类范围可能不同(如财务只能看固定资产类,IT 只能看设备类):
- 不要把权限逻辑放在组件里逐个判断,而是在 store 的 getters 中封装
visibleCategories - 根据当前用户角色或权限码,从完整树中筛选出可访问分支,返回过滤后的树结构
- 这样所有使用该 store 的组件拿到的就是“已授权”的分类树,无需重复判断

















