Newer
Older
smart-metering-front / src / router / modules / measure.ts
import type { Route } from '@/global'

const Layout = () => import('@/layouts/index.vue')

const routes: Route.recordRaw[] = [
  {
    path: '/measure',
    component: Layout,
    redirect: '/measure/bench',
    name: 'MeasureBench',
    meta: {
      title: '工作台',
      icon: 'ep:key',
      auth: '/measure/bench',
    },
    children: [
      {
        path: 'bench',
        name: 'MeasureBenchPage',
        component: () => import('@/views/measure/bench/bench.vue'),
        meta: {
          title: '工作台',
          auth: '/measure/bench',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/measure',
        },
      },
    ],
  },
  {
    path: '/file',
    component: Layout,
    redirect: '/file/quality',
    name: 'File',
    meta: {
      title: '计量文件',
      icon: 'ep:key',
      auth: '/file',
    },
    children: [
      {
        path: 'quality',
        name: 'QualityFile',
        component: () => import('@/views/measure/file/list/quality.vue'),
        meta: {
          title: '质量文件',
          icon: 'ep:key',
          auth: '/file/quality',
        },
      },
      {
        path: 'quality/:type/:id?',
        name: 'MeasureFileQualityDetail',
        component: () => import('@/views/measure/file/detail/quality.vue'),
        meta: {
          title: '质量文件',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/file/quality',
        },
      },
      {
        path: 'rules',
        name: 'Rules',
        component: () => import('@/views/measure/file/list/rules.vue'),
        meta: {
          title: '规章制度',
          icon: 'ep:key',
          auth: '/file/rules',
        },
      },
      {
        path: 'rules/:type/:id?',
        name: 'MeasureFileRulesDetail',
        component: () => import('@/views/measure/file/detail/rules.vue'),
        meta: {
          title: '规章制度',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/file/rules',
        },
      },
      {
        path: 'law',
        name: 'Law',
        component: () => import('@/views/measure/file/list/law.vue'),
        meta: {
          title: '计量法律法规',
          icon: 'ep:key',
          auth: '/file/law',
        },
      },
      {
        path: 'law/:type/:id?',
        name: 'MeasureFileLawDetail',
        component: () => import('@/views/measure/file/detail/law.vue'),
        meta: {
          title: '计量法律法规',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/file/law',
        },
      },
      {
        path: 'certification',
        name: 'MeasureFileCertification',
        component: () => import('@/views/measure/file/list/certification.vue'),
        meta: {
          title: '资质证明',
          icon: 'ep:key',
          auth: '/file/certification',
        },
      },
      {
        path: 'certification/:type/:id?',
        name: 'MeasureFileCertificationDetail',
        component: () => import('@/views/measure/file/detail/certification.vue'),
        meta: {
          title: '资质证明',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/file/certification',
        },
      },
      {
        path: 'measureRule',
        name: 'MeasureFileMeasureRule',
        component: () => import('@/views/measure/file/list/measureRule.vue'),
        meta: {
          title: '计量规程规范',
          icon: 'ep:key',
          auth: '/file/measureRule',
        },
      },
      {
        path: 'measureRule/:type/:id?',
        name: 'MeasureFileMeasureRuleDetail',
        component: () => import('@/views/measure/file/detail/measureRule.vue'),
        meta: {
          title: '计量规程规范',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/file/measureRule',
        },
      },
      {
        path: 'technicalServices',
        name: 'MeasureFileTechnicalServices',
        component: () => import('@/views/measure/file/list/technicalServices.vue'),
        meta: {
          title: '技术服务能力',
          icon: 'ep:key',
          auth: '/file/technicalServices',
        },
      },
      {
        path: 'technicalServices/:type/:id?',
        name: 'MeasureFileTechnicalServicesDetail',
        component: () => import('@/views/measure/file/detail/technicalServices.vue'),
        meta: {
          title: '技术服务能力',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/file/technicalServices',
        },
      },
    ],
  },
  {
    path: '/person',
    component: Layout,
    redirect: '/measure/person/list',
    name: 'Person',
    meta: {
      title: '计量人员',
      icon: 'ep:key',
      auth: '/measure/person',
    },
    children: [
      {
        path: 'list',
        name: 'PersonList',
        component: () => import('@/views/measure/person/list.vue'),
        meta: {
          title: '计量人员列表',
          icon: 'ep:key',
          auth: '/measure/person/list',
        },
      },
      {
        path: ':type/:id?',
        name: 'PersonListDetail',
        component: () => import('@/views/measure/person/components/addPerson.vue'),
        meta: {
          title: '计量人员',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/person/list',
        },
      },
      {
        path: 'certificateLog',
        name: 'CertificateLog',
        component: () => import('@/views/measure/person/certificateLog.vue'),
        meta: {
          title: '证书记录',
          icon: 'ep:key',
          auth: '/measure/person/certificateLog',
        },
      },
      {
        path: ':type/:id?',
        name: 'CertificateLogDetail',
        component: () => import('@/views/measure/person/components/addRecord.vue'),
        meta: {
          title: '证书记录',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/measure/person/certificateLog',
        },
        // 独享守卫,根据form的路由动态修改meta中的activeMenu
        beforeEnter: (to, from, next) => {
          const type = from.path.split('/')[from.path.split('/').length - 1]
          console.log(type)
          switch (type) {
            case 'certificateLog':
              to.meta.activeMenu = '/person/certificateLog'
              break
            case 'remind':
              to.meta.activeMenu = '/person/remind'
              break
          }
          next()
        },
      },
      {
        path: 'remind',
        name: 'Remind',
        component: () => import('@/views/measure/person/remind.vue'),
        meta: {
          title: '证书到期提醒',
          icon: 'ep:key',
          auth: '/measure/person/remind',
        },
      },
    ],
  },
  {
    path: '/train',
    component: Layout,
    redirect: '/measure/train/plan',
    name: 'Train',
    meta: {
      title: '培训管理',
      icon: 'ep:key',
      auth: '/measure/train',
    },
    children: [
      {
        path: 'plan',
        name: 'TrainPlan',
        component: () => import('@/views/measure/train/plan.vue'),
        meta: {
          title: '培训计划',
          icon: 'ep:key',
          auth: '/measure/train/plan',
        },
      },
      {
        path: ':type/:id?',
        name: 'PlanAdd',
        component: () => import('@/views/measure/train/planAdd.vue'),
        meta: {
          title: '培训计划',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/train/plan',
        },
      },
      {
        path: 'trainPlanApprove',
        name: 'TrainPlanApprove',
        component: () => import('@/views/measure/train/trainPlanApprove.vue'),
        meta: {
          title: '培训计划审批',
          icon: 'ep:key',
          auth: '/measure/train/trainPlanApprove',
        },
      },
      {
        path: 'trainPlanApprove/:type/:id?',
        name: 'listPageAdd',
        component: () => import('@/views/measure/train/components/planApprovalDetail.vue'),
        meta: {
          title: '培训计划审批',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/train/trainPlanApprove',
        },
      },
      {
        path: 'trainLog',
        name: 'TrainLog',
        component: () => import('@/views/measure/train/trainLog.vue'),
        meta: {
          title: '培训记录',
          icon: 'ep:key',
          auth: '/measure/train/trainLog',
        },
      },
      {
        path: 'trainLog/:type/:id?',
        name: 'planlogAdd',
        component: () => import('@/views/measure/train/trainLogAdd.vue'),
        meta: {
          title: '培训记录',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/train/trainLog',
        },
      },
    ],
  },
  {
    path: '/measureDept',
    component: Layout,
    redirect: '/measure/measureDept/bm',
    name: 'MeasureDept',
    meta: {
      title: '计量组织',
      icon: 'ep:key',
      auth: '/measure/measureDept',
    },
    children: [
      {
        path: 'bm',
        name: 'Bm',
        component: () => import('@/views/measure/measureDept/bm.vue'),
        meta: {
          title: '部门管理',
          icon: 'ep:key',
          auth: '/measure/measureDept/bm',
        },
      },
      {
        path: 'ks',
        name: 'Ks',
        component: () => import('@/views/measure/measureDept/ks.vue'),
        meta: {
          title: '科室管理',
          icon: 'ep:key',
          auth: '/measure/measureDept/ks',
        },
      },
      {
        path: 'gcz',
        name: 'Gcz',
        component: () => import('@/views/measure/measureDept/gcz.vue'),
        meta: {
          title: '工程组管理',
          icon: 'ep:key',
          auth: '/measure/measureDept/gcz',
        },
      },
      {
        path: ':type/:id?',
        name: 'MeasureDeptDetail',
        component: () => import('@/views/measure/measureDept/components/addDialog.vue'),
        meta: {
          title: '计量组织',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/measureDept/bm',
        },
        // 独享守卫,根据form的路由动态修改meta中的activeMenu
        // 当不同页面中 使用了相同的 编辑/详情路由
        beforeEnter: (to, from, next) => {
          const type = from.path.split('/')[from.path.split('/').length - 1]
          switch (type) {
            case 'bm':
              to.meta.activeMenu = '/measureDept/bm'
              break
            case 'ks':
              to.meta.activeMenu = '/measureDept/ks'
              break
            case 'gcz':
              to.meta.activeMenu = '/measureDept/gcz'
              break
          }
          next()
        },
      },
    ],
  },
  {
    path: '/source',
    component: Layout,
    redirect: '/measure/measureSource/list',
    name: 'MeasureSource',
    meta: {
      title: '溯源供方',
      icon: 'ep:key',
      auth: '/measure/measureSource',
    },
    children: [
      {
        path: 'list',
        name: 'MeasureSourceList',
        component: () => import('@/views/measure/source/list.vue'),
        meta: {
          title: '溯源供方列表',
          icon: 'ep:key',
          auth: '/measure/measureSource/list',
        },
      },
      {
        path: ':type/:id?/:processId?',
        name: 'ListSourceAdd',
        component: () => import('@/views/measure/source/listAdd.vue'),
        meta: {
          title: '溯源供方列表',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/source/list',
        },
      },
      {
        path: 'approve',
        name: 'SourceApprove',
        component: () => import('@/views/measure/source/approve.vue'),
        meta: {
          title: '溯源供方审批',
          icon: 'ep:key',
          auth: '/measure/measureSource/approve',
          cache: true,
        },
      },
      {
        path: 'approve/:type/:id?',
        name: 'ListpageSourceAdd',
        component: () => import('@/views/measure/source/components/sourceApprovalDetail.vue'),
        meta: {
          title: '溯源供方审批',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/source/approve',
        },
      },
    ],
  },
  {
    path: '/price',
    component: Layout,
    redirect: '/price/list',
    name: 'MeasurePrice',
    meta: {
      title: '价格库',
      icon: 'ep:key',
      auth: '/measure/measurePrice',
    },
    children: [
      {
        path: 'list',
        name: 'measurePriceList',
        component: () => import('@/views/measure/price/list.vue'),
        meta: {
          title: '价格列表',
          icon: 'ep:key',
          auth: '/measure/measurePrice/list',
        },
      },
      {
        path: ':type/:id?',
        name: 'measurePriceDetail',
        component: () => import('@/views/measure/price/priceAdd.vue'),
        meta: {
          title: '价格列表',
          icon: 'ep:key',
          sidebar: false,
          breadcrumb: true,
          activeMenu: '/price/list',
        },
      },
    ],
  },
]

export default routes