10 lines
1.5 KiB
TypeScript
10 lines
1.5 KiB
TypeScript
import { createApp } from 'vue'
|
|
import { createPinia } from 'pinia'
|
|
import { createRouter, createWebHistory } from 'vue-router'
|
|
import { ElButton, ElIcon, ElInput, ElForm, ElFormItem, ElAlert, ElTable, ElTableColumn, ElSelect, ElOption, ElSwitch, ElSkeleton, ElTag, ElDrawer, ElEmpty } from 'element-plus'
|
|
import 'element-plus/dist/index.css'
|
|
import './style.css'
|
|
import App from './App.vue'
|
|
import {useAuth} from './auth'
|
|
let app=createApp(App);app.use(createPinia());let router=createRouter({history:createWebHistory(),routes:[{path:'/login',component:()=>import('./views/Login.vue')},{path:'/',redirect:'/tasks'},{path:'/tasks',component:()=>import('./views/Tasks.vue')},{path:'/patterns',component:()=>import('./views/Patterns.vue'),meta:{admin:true}},{path:'/palette',component:()=>import('./views/Settings.vue'),meta:{admin:true}},{path:'/tables',component:()=>import('./views/Settings.vue'),meta:{admin:true}},{path:'/store',component:()=>import('./views/Settings.vue'),meta:{admin:true}},{path:'/:pathMatch(.*)*',redirect:'/tasks'}]});router.beforeEach(async to=>{let auth=useAuth();if(to.path==='/login')return true;try{if(!await auth.verify())return'/login';if(to.meta.admin&&auth.user?.role!=='admin')return'/tasks'}catch{return'/login'}});window.addEventListener('auth-expired',()=>{useAuth().logout();void router.replace('/login')});app.use(router);for(let component of [ElButton,ElIcon,ElInput,ElForm,ElFormItem,ElAlert,ElTable,ElTableColumn,ElSelect,ElOption,ElSwitch,ElSkeleton,ElTag,ElDrawer,ElEmpty])app.use(component);app.mount('#app')
|