| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- import {createRouter, createWebHistory, type Router, type RouteRecordRaw} from 'vue-router'
- import LoginView from '../view/LoginView.vue'
- import UserLayout from '../layout/UserLayout.vue'
- import AdminLayout from "../layout/AdminLayout.vue";
- import UserView from "../view/UserView.vue";
- import BookingView from '../view/booking/BookingView.vue'
- import BoardingBookingView from '../view/booking/BoardingBookingView.vue'
- import GroomingBookingView from '../view/booking/GroomingBookingView.vue'
- import OrderListView from '../view/order/OrderListView.vue'
- import OrderDetailView from '../view/order/OrderDetailView.vue'
- import PetListView from '../view/pet/PetListView.vue'
- import PetCreateView from '../view/pet/PetCreateView.vue'
- import PetDetailView from '../view/pet/PetDetailView.vue'
- import PetEditView from '../view/pet/PetEditView.vue'
- import ProfileView from '../view/profile/ProfileView.vue'
- import ProfileEditView from '../view/profile/ProfileEditView.vue'
- import PasswordEditView from '../view/profile/PasswordEditView.vue'
- import AdminOrderListView from '../view/admin/AdminOrderListView.vue'
- import AdminOrderDetailView from '../view/admin/AdminOrderDetailView.vue'
- import AdminRoomCalendarView from '../view/admin/AdminRoomCalendarView.vue'
- import AdminScheduleListView from '../view/admin/AdminScheduleListView.vue'
- import AdminPackageListView from '../view/admin/AdminPackageListView.vue'
- import AdminPackageCreateView from '../view/admin/AdminPackageCreateView.vue'
- import AdminPackageEditView from '../view/admin/AdminPackageEditView.vue'
- import AdminUserDetailView from '../view/admin/AdminUserDetailView.vue'
- import {
- User,
- Calendar,
- List,
- Avatar,
- EditPen,
- Tickets,
- Coin,
- } from '@element-plus/icons-vue'
- import {useLoginUserStore} from "../store";
- import {ElMessage} from "element-plus";
- export const userRoutes: RouteRecordRaw[] = [
- {
- path: '/',
- name: 'commonLayout',
- component: UserLayout,
- children: [
- // 预约
- {
- path: '/booking',
- name: 'booking',
- component: BookingView,
- meta: {
- title: '服务预约',
- icon: Calendar
- }
- },
- {
- path: '/booking/boarding',
- name: 'boardingBooking',
- component: BoardingBookingView,
- meta: { title: '寄养预约', requiresAuth: true }
- },
- {
- path: '/booking/grooming',
- name: 'groomingBooking',
- component: GroomingBookingView,
- meta: { title: '洗护预约', requiresAuth: true }
- },
- // 订单
- {
- path: '/orders',
- name: 'orderList',
- component: OrderListView,
- meta: {
- title: '我的订单',
- icon: Tickets,
- requiresAuth: true
- }
- },
- {
- path: '/orders/:id',
- name: 'orderDetail',
- component: OrderDetailView,
- meta: { title: '订单详情', requiresAuth: true }
- },
- // 宠物
- {
- path: '/pets',
- name: 'petList',
- component: PetListView,
- meta: {
- title: '宠物档案',
- icon: Avatar,
- requiresAuth: true
- }
- },
- {
- path: '/pets/new',
- name: 'petCreate',
- component: PetCreateView,
- meta: { title: '新增宠物', requiresAuth: true }
- },
- {
- path: '/pets/:id',
- name: 'petDetail',
- component: PetDetailView,
- meta: { title: '宠物详情', requiresAuth: true }
- },
- {
- path: '/pets/:id/edit',
- name: 'petEdit',
- component: PetEditView,
- meta: { title: '编辑宠物', requiresAuth: true }
- },
- // 个人中心
- {
- path: '/profile',
- name: 'profile',
- component: ProfileView,
- meta: {
- title: '个人中心',
- icon: User,
- requiresAuth: true
- }
- },
- {
- path: '/profile/edit',
- name: 'profileEdit',
- component: ProfileEditView,
- meta: { title: '修改资料', requiresAuth: true }
- },
- {
- path: '/profile/password',
- name: 'passwordEdit',
- component: PasswordEditView,
- meta: { title: '修改密码', requiresAuth: true }
- },
- ],
- },
- ]
- export const adminRoutes: RouteRecordRaw[] = [
- {
- path: '/admin',
- name: 'adminLayout',
- component: AdminLayout,
- children: [
- {
- path: '/admin/orders',
- name: 'adminOrderList',
- component: AdminOrderListView,
- meta: {
- title: '订单审核',
- icon: List
- }
- },
- {
- path: '/admin/orders/:id',
- name: 'adminOrderDetail',
- component: AdminOrderDetailView,
- meta: { title: '订单审核详情' }
- },
- {
- path: '/admin/rooms',
- name: 'adminRooms',
- component: AdminRoomCalendarView,
- meta: {
- title: '房态管理',
- icon: Calendar
- }
- },
- {
- path: '/admin/schedules',
- name: 'adminSchedules',
- component: AdminScheduleListView,
- meta: {
- title: '排班管理',
- icon: EditPen
- }
- },
- {
- path: '/admin/packages',
- name: 'adminPackageList',
- component: AdminPackageListView,
- meta: {
- title: '套餐配置',
- icon: Coin
- }
- },
- {
- path: '/admin/packages/new',
- name: 'adminPackageCreate',
- component: AdminPackageCreateView,
- meta: { title: '新增套餐' }
- },
- {
- path: '/admin/packages/:id/edit',
- name: 'adminPackageEdit',
- component: AdminPackageEditView,
- meta: { title: '编辑套餐' }
- },
- {
- path: '/admin/users',
- name: 'adminUsers',
- component: UserView,
- meta: {
- title: '用户管理',
- icon: User
- }
- },
- {
- path: '/admin/users/:id',
- name: 'adminUserDetail',
- component: AdminUserDetailView,
- meta: { title: '用户详情' }
- },
- ],
- meta: {
- requiresAdmin: true
- }
- }
- ]
- const router: Router = createRouter({
- history: createWebHistory(),
- routes: [
- {
- path: '/login',
- name: 'login',
- component: LoginView
- },
- ...userRoutes,
- ...adminRoutes
- ],
- });
- router.beforeEach((to, _from, next) => {
- const loginUserStore = useLoginUserStore()
- const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
- const requiresAdmin = to.matched.some(record => record.meta.requiresAdmin)
- if (requiresAuth || requiresAdmin) {
- if (!loginUserStore.loginUser.isLogin) {
- ElMessage.warning('请先登录')
- next({path: '/login', query: {redirect: to.fullPath}})
- } else if (requiresAdmin && loginUserStore.loginUser.user?.role !== 'admin') {
- ElMessage.error('无权访问')
- next('/booking')
- } else {
- next()
- }
- } else {
- next()
- }
- })
- export default router
|