| /* |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| import Vue from 'vue' |
| import Router from 'vue-router' |
| |
| Vue.use(Router) |
| |
| /* Layout */ |
| import Layout from '@/views/layout/Layout' |
| |
| /** note: Submenu only appear when children.length>=1 |
| * detail see https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html |
| **/ |
| |
| /** |
| * hidden: true if `hidden:true` will not show in the sidebar(default is false) |
| * alwaysShow: true if set true, will always show the root menu, whatever its child routes length |
| * if not set alwaysShow, only more than one route under the children |
| * it will becomes nested mode, otherwise not show the root menu |
| * redirect: noredirect if `redirect:noredirect` will no redirect in the breadcrumb |
| * name:'router-name' the name is used by <keep-alive> (must set!!!) |
| * meta : { |
| roles: ['admin','editor'] will control the page roles (you can set multiple roles) |
| title: 'title' the name show in submenu and breadcrumb (recommend set) |
| icon: 'svg-name' the icon show in the sidebar, |
| noCache: true if true ,the page will no be cached(default is false) |
| } |
| **/ |
| export const constantRouterMap = [ |
| { |
| path: '/redirect', |
| component: Layout, |
| hidden: true, |
| children: [ |
| { |
| path: '/redirect/:path*', |
| component: () => import('@/views/redirect/index') |
| } |
| ] |
| }, |
| { |
| path: '/login', |
| component: () => import('@/views/login/index'), |
| hidden: true |
| }, |
| { |
| path: '/auth-redirect', |
| component: () => import('@/views/login/authredirect'), |
| hidden: true |
| }, |
| { |
| path: '/404', |
| component: () => import('@/views/errorPage/404'), |
| hidden: true |
| }, |
| { |
| path: '/401', |
| component: () => import('@/views/errorPage/401'), |
| hidden: true |
| }, |
| { |
| path: '/environments', |
| component: () => import('@/views/management/environments/index'), |
| hidden: true |
| }, |
| { |
| path: '', |
| component: Layout, |
| redirect: 'management/tenants', |
| meta: { |
| title: 'Dashboard', |
| icon: 'dashboard' |
| }, |
| hidden: true, |
| children: [ |
| { |
| path: 'prometheus', |
| component: () => import('@/views/dashboard/prometheus/index'), |
| name: 'Prometheus', |
| meta: { title: 'prometheus', noCache: true } |
| }, |
| { |
| path: 'grafana', |
| component: () => import('@/views/dashboard/grafana/index'), |
| name: 'Grafana', |
| meta: { title: 'grafana', noCache: true } |
| } |
| ] |
| }, |
| { |
| path: '/management', |
| component: Layout, |
| name: 'Management', |
| redirect: 'management/tenants', |
| meta: { |
| title: 'Management', |
| icon: 'component' |
| }, |
| children: [ |
| { |
| path: 'clusters', |
| component: () => import('@/views/management/clusters/index'), |
| name: 'Clusters', |
| meta: { title: 'Clusters', noCache: true } |
| }, |
| { |
| path: 'clusters/:cluster/cluster', |
| component: () => import('@/views/management/clusters/cluster'), |
| name: 'ClusterInfo', |
| meta: { title: 'ClusterInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'clusters/:cluster/:failureDomainName/failureDomainName', |
| component: () => import('@/views/management/clusters/failureDomain'), |
| name: 'FailureDomainInfo', |
| meta: { title: 'FailureDomainInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'clusters/:cluster/:namespaceIsolation/namespaceIsolationPolicy', |
| component: () => import('@/views/management/namespaceIsolations/namespaceIsolationPolicy'), |
| name: 'NamespaceIsolationPolicy', |
| meta: { title: 'NamespaceIsolationPolicy', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'brokers/:cluster/:broker/broker', |
| component: () => import('@/views/management/brokers/broker'), |
| name: 'BrokerInfo', |
| meta: { title: 'BrokerInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'tenants', |
| component: () => import('@/views/management/tenants/index'), |
| name: 'Tenants', |
| meta: { title: 'Tenants', noCache: true } |
| }, |
| { |
| path: 'tenants/tenantInfo/:tenant', |
| component: () => import('@/views/management/tenants/tenant'), |
| name: 'Tenant', |
| meta: { title: 'TenantInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'tenants/tenantInfo/public?tab=namespaces', |
| name: 'Namespaces', |
| meta: { title: 'Namespaces', noCache: true } |
| }, |
| { |
| path: 'namespaces/public/default/namespace?tab=topics', |
| name: 'Topics', |
| meta: { title: 'Topics', noCache: true } |
| }, |
| { |
| path: 'topics/:persistent/:tenant/:namespace/:topic/topic', |
| component: () => import('@/views/management/topics/topic'), |
| name: 'TopicInfo', |
| meta: { title: 'TopicInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'topics/:persistent/:tenant/:namespace/:topic/partitionedTopic', |
| component: () => import('@/views/management/topics/partitionedTopic'), |
| name: 'ParititionTopicInfo', |
| meta: { title: 'ParititionTopicInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'subscriptions/:persistent/:tenant/:namespace/:topic/:subscription/subscription', |
| component: () => import('@/views/management/subscriptions/subscription'), |
| name: 'SubscriptionInfo', |
| meta: { title: 'SubscriptionInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'namespaces/:tenant', |
| name: 'NamespacesTenant', |
| meta: { title: 'Namespaces', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'namespaces/:tenant/:namespace/namespace', |
| component: () => import('@/views/management/namespaces/namespace'), |
| name: 'NamespacesInfo', |
| meta: { title: 'NamespacesInfo', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'functions', |
| component: () => import('@/views/management/functions'), |
| name: 'Functions', |
| meta: { title: 'Functions', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'sources', |
| component: () => import('@/views/management/sources'), |
| name: 'Sources', |
| meta: { title: 'Sources', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'sinks', |
| component: () => import('@/views/management/sinks'), |
| name: 'Sinks', |
| meta: { title: 'Sinks', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: 'bookies', |
| component: () => import('@/views/management/bookies'), |
| name: 'Bookies', |
| meta: { title: 'Bookies', noCache: true }, |
| hidden: true |
| }, |
| { |
| path: '/tokens', |
| component: () => import('@/views/management/tokens/index'), |
| name: 'Tokens', |
| meta: { title: 'Tokens', noCache: true }, |
| hidden: false |
| } |
| ] |
| } |
| ] |
| |
| export default new Router({ |
| // mode: 'history', // require service support |
| scrollBehavior: () => ({ y: 0 }), |
| routes: constantRouterMap |
| }) |
| |
| export const asyncRouterMap = [ |
| |
| { |
| path: 'external-link', |
| component: Layout, |
| children: [ |
| { |
| path: 'https://pulsar.apache.org', |
| meta: { title: 'Apache Pulsar', icon: 'link' } |
| } |
| ] |
| }, |
| |
| { path: '*', redirect: '/404', hidden: true } |
| ] |