// vuex `mapGetters` 的 pinia 等价物。 // // 老工程有 53 个文件写的是 `import { mapGetters } from 'vuex'`, // 用法都是 `computed: { ...mapGetters(['nickName']) }`。Vue3 侧状态管理换成 pinia 后 // 没有 getters 聚合层了,所以这里按原 `store/getters.js` 的映射逐条补回来, // 并**沿用 mapGetters 这个名字**——调用点一个字都不用改,codemod 只改 import 来源。 // // 注意 `userId` 取的是 user store 的 `id`,不是 `userId`:原 getters.js 里就是 // `userId: (state) => state.user.id`,照着抄才对得上。 import useAppStore from '@/store/modules/app' import useUserStore from '@/store/modules/user' import useTagsViewStore from '@/store/modules/tagsView' import usePermissionStore from '@/store/modules/permission' import useDictStore from '@/store/modules/dict' // 键 = 原 vuex getter 名;值 = 惰性取 pinia state。 // 惰性(而不是模块加载时求值)是必需的:store 实例只能在应用挂载后创建。 const GETTERS = { // app sidebar: () => useAppStore().sidebar, size: () => useAppStore().size, device: () => useAppStore().device, // tagsView visitedViews: () => useTagsViewStore().visitedViews, cachedViews: () => useTagsViewStore().cachedViews, // dict dict: () => useDictStore().dict, // user token: () => useUserStore().token, avatar: () => useUserStore().avatar, name: () => useUserStore().name, nickName: () => useUserStore().nickName, nameEn: () => useUserStore().nameEn, userName: () => useUserStore().userName, userId: () => useUserStore().id, roles: () => useUserStore().roles, permissions: () => useUserStore().permissions, // permission permission_routes: () => usePermissionStore().routes, topbarRouters: () => usePermissionStore().topbarRouters, defaultRoutes: () => usePermissionStore().defaultRoutes, sidebarRouters: () => usePermissionStore().sidebarRouters } /** * 与原 vuex `mapGetters` 用法一致(支持数组与对象两种写法),返回可直接摊进 computed 的对象。 * 未登记的名字会告警并置为 undefined,避免静默拿到 undefined 却查不出原因。 */ export function mapGetters(keys) { const list = Array.isArray(keys) ? keys : Object.keys(keys) const out = {} for (const key of list) { // 对象写法 mapGetters({ alias: 'realName' }) 里 key 是别名、value 才是 getter 名 const real = Array.isArray(keys) ? key : keys[key] const get = GETTERS[real] if (!get) { console.warn(`[store-compat] 没有 ${real} 对应的 pinia 取法,已置为 undefined`) out[key] = () => undefined continue } out[key] = get } return out }