Skip to content

App 预设 createVrxArcoApp 仅客户端渲染

集成 vue-router, pinia

快速完成对动态路由的支持

安装

使用npm

bash
$ npm i @vrx-arco/app

使用yarn

bash
$ yarn add @vrx-arco/app

使用pnpm

bash
$ pnpm add @vrx-arco/app

创建

ts
import { Notification } from '@arco-design/web-vue'
import { createVrxArcoApp } from '@vrx-arco/app'
import App from './App.vue'
import { basicRoutes, dynamicRoutes } from '@/router'
import { usePageStore } from '@/pinia'
import { getPermission } from '@/api'

createVrxArcoApp({
  // 根组件
  rootComponent: App,
  // 渲染根节点
  rootContainer: '#app',
  // 路由配置
  router: {
    // 静态路由部分
    routes: basicRoutes,
    // 动态路由部分
    dynamicRoutes,
    // 根据从远程获取的权限,筛选每个路由
    filterDynamicRoutes: (route, permission) => {
      return permission.includes(route.name)
    },
    // 页面未找到 路由
    pageNotFound: {
      name: 'page404',
      component: () => import('@/views/page/404.vue'),
      meta: {
        title: ''
      },
    },
    // 登录过期重定向路由 name
    loginExpiredRedirect: 'login',
    // 未登录时 路由通过 name 白名单
    whiteList: ['login', 'register']
  },
  // 路由遍历前后,添加加载状态控制
  loading: (value: boolean) => {
    const page = usePageStore()
    page.setLoading(value)
  },
  authentication: {
    /**
         * 从远程获取权限
         */
    getPermission: async () => {
      const permission = await getPermission()
      return permission
    },
    /**
         * 用于自定义局部鉴权
         */
    checkPermission: (permission, data) => {
      return true
    },
    /**
         * 判断是否已登录
         */
    isLogin: () => !!localStorage.getItem('token'),
    // 登录过期回调
    // 从远程获取权限报错,也会触发该方法
    onLoginExpired: () => {
      Notification.error({
        title: '提示',
        content: '请重新登录'
      })
    },
  },
})

局部鉴权用组件

vue
<script lang="ts" setup>
import { Permission } from '@vrx-arco/app'
import { Button, Switch } from '@arco-design/web-vue'
</script>

<template>
  <!--  data 传递给 authentication.checkPermission 用作鉴权 -->
  <!--  当鉴权失败时,责销毁默认插槽内的组件 -->
  <Permission data="user:add:edit">
    <Button>编辑</Button>
  </Permission>

  <!--  data 传递给 authentication.checkPermission 用作鉴权 -->
  <!--  当鉴权失败时,hasPermission为 false,可自行处理组件无权限表现 -->
  <Permission data="user:add:del" :destroy-on-no-permission="false">
    <template #default="{ hasPermission }">
      <Button :disabled="!hasPermission">
        删除
      </Button>
    </template>
  </Permission>

  <!--  data 传递给 authentication.checkPermission 用作鉴权 -->
  <!--  当鉴权失败时,使用 noPermission插槽,自行处理无权限组件渲染 -->
  <Permission data="user:add:del">
    <template #default>
      <Switch />
    </template>
    <template #noPermission>

    </template>
  </Permission>
</template>

Released under the MIT License.