routes.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. /**
  2. * 路由配置
  3. */
  4. export default [
  5. {
  6. path: '/',
  7. redirect: '/index'
  8. },
  9. {
  10. path: '/index',
  11. name: 'Index',
  12. component: () => import('@/views/index/index.vue'),
  13. meta: {
  14. title: 'index.home',
  15. keepAlive: true
  16. }
  17. },
  18. // 扫码入口(无需登录)
  19. {
  20. path: '/scan',
  21. name: 'Scan',
  22. component: () => import('@/views/scan/index.vue'),
  23. meta: {
  24. title: '扫码点餐'
  25. }
  26. },
  27. {
  28. path: '/menu',
  29. name: 'Menu',
  30. component: () => import('@/views/menu/menu.vue'),
  31. meta: {
  32. title: 'menu.title',
  33. keepAlive: true
  34. }
  35. },
  36. {
  37. path: '/menu/detail',
  38. name: 'MenuDetail',
  39. component: () => import('@/views/menu/detail.vue'),
  40. meta: {
  41. title: '商品详情'
  42. }
  43. },
  44. {
  45. path: '/cart',
  46. name: 'Cart',
  47. component: () => import('@/views/cart/cart.vue'),
  48. meta: {
  49. title: 'cart.title'
  50. }
  51. },
  52. {
  53. path: '/order',
  54. name: 'Order',
  55. component: () => import('@/views/order/order.vue'),
  56. meta: {
  57. title: 'order.title',
  58. requiresAuth: true
  59. }
  60. },
  61. {
  62. path: '/order/detail',
  63. name: 'OrderDetail',
  64. component: () => import('@/views/order/detail.vue'),
  65. meta: {
  66. title: 'order.orderDetail',
  67. requiresAuth: true
  68. }
  69. },
  70. {
  71. path: '/mine',
  72. name: 'Mine',
  73. component: () => import('@/views/mine/mine.vue'),
  74. meta: {
  75. title: 'mine.title',
  76. requiresAuth: true
  77. }
  78. },
  79. {
  80. path: '/login',
  81. name: 'Login',
  82. component: () => import('@/views/login/login.vue'),
  83. meta: {
  84. title: 'login.title'
  85. }
  86. },
  87. {
  88. path: '/address',
  89. name: 'Address',
  90. component: () => import('@/views/address/index.vue'),
  91. meta: {
  92. title: 'address.title',
  93. requiresAuth: true
  94. }
  95. },
  96. {
  97. path: '/address/edit',
  98. name: 'AddressEdit',
  99. component: () => import('@/views/address/edit.vue'),
  100. meta: {
  101. title: 'address.editAddress',
  102. requiresAuth: true
  103. }
  104. },
  105. {
  106. path: '/payment',
  107. name: 'Payment',
  108. component: () => import('@/views/payment/payment.vue'),
  109. meta: {
  110. title: 'payment.title',
  111. requiresAuth: true
  112. }
  113. },
  114. // 老板端路由 (owner)
  115. {
  116. path: '/owner/dashboard',
  117. name: 'OwnerDashboard',
  118. component: () => import('@/views/owner/dashboard.vue'),
  119. meta: {
  120. title: '公司总览',
  121. requiresAuth: true,
  122. requiresRole: 'owner'
  123. }
  124. },
  125. {
  126. path: '/owner/shops',
  127. name: 'OwnerShops',
  128. component: () => import('@/views/owner/shops.vue'),
  129. meta: {
  130. title: '店铺管理',
  131. requiresAuth: true,
  132. requiresRole: 'owner'
  133. }
  134. },
  135. {
  136. path: '/owner/reports',
  137. name: 'OwnerReports',
  138. component: () => import('@/views/owner/reports.vue'),
  139. meta: {
  140. title: '综合报表',
  141. requiresAuth: true,
  142. requiresRole: 'owner'
  143. }
  144. },
  145. // 店铺管理路由 (owner/manager)
  146. {
  147. path: '/shop/dashboard',
  148. name: 'ShopDashboard',
  149. component: () => import('@/views/merchant/dashboard.vue'),
  150. meta: {
  151. title: '店铺总览',
  152. requiresAuth: true,
  153. requiresRole: ['owner', 'manager']
  154. }
  155. },
  156. {
  157. path: '/shop/:id/dashboard',
  158. name: 'ShopDetailDashboard',
  159. component: () => import('@/views/merchant/dashboard.vue'),
  160. meta: {
  161. title: '店铺详情',
  162. requiresAuth: true,
  163. requiresRole: ['owner', 'manager']
  164. }
  165. },
  166. // 商家路由(兼容)
  167. {
  168. path: '/merchant/dashboard',
  169. name: 'MerchantDashboard',
  170. component: () => import('@/views/merchant/dashboard.vue'),
  171. meta: {
  172. title: '商家仪表盘',
  173. requiresAuth: true,
  174. requiresRole: ['owner', 'manager']
  175. }
  176. },
  177. {
  178. path: '/merchant/orders',
  179. name: 'MerchantOrders',
  180. component: () => import('@/views/merchant/orders.vue'),
  181. meta: {
  182. title: '订单管理',
  183. requiresAuth: true,
  184. requiresRole: ['owner', 'manager']
  185. }
  186. },
  187. {
  188. path: '/merchant/buffet-plans',
  189. name: 'MerchantBuffetPlans',
  190. component: () => import('@/views/merchant/buffet-plans.vue'),
  191. meta: {
  192. title: '放题方案管理',
  193. requiresAuth: true,
  194. requiresRole: ['owner', 'manager']
  195. }
  196. },
  197. // POS/员工端路由
  198. {
  199. path: '/pos/welcome',
  200. name: 'PosWelcome',
  201. component: () => import('@/views/pos/welcome.vue'),
  202. meta: {
  203. title: 'POS系统',
  204. requiresAuth: true,
  205. requiresRole: ['staff', 'manager', 'owner', 'admin']
  206. }
  207. },
  208. {
  209. path: '/pos/tables',
  210. name: 'PosTables',
  211. component: () => import('@/views/pos/tables.vue'),
  212. meta: {
  213. title: '桌位管理',
  214. requiresAuth: true,
  215. requiresRole: ['staff', 'manager', 'owner', 'admin']
  216. }
  217. },
  218. {
  219. path: '/pos/orders',
  220. name: 'PosOrders',
  221. component: () => import('@/views/pos/orders.vue'),
  222. meta: {
  223. title: '订单管理',
  224. requiresAuth: true,
  225. requiresRole: ['staff', 'manager', 'owner', 'admin']
  226. }
  227. },
  228. {
  229. path: '/pos/orders/:id',
  230. name: 'PosOrderDetail',
  231. component: () => import('@/views/pos/order-detail.vue'),
  232. meta: {
  233. title: '订单详情',
  234. requiresAuth: true,
  235. requiresRole: ['staff', 'manager', 'owner', 'admin']
  236. }
  237. },
  238. // 放题路由
  239. {
  240. path: '/buffet/select',
  241. name: 'BuffetSelect',
  242. component: () => import('@/views/buffet/select.vue'),
  243. meta: {
  244. title: '选择放题方案'
  245. }
  246. },
  247. {
  248. path: '/buffet/menu',
  249. name: 'BuffetMenu',
  250. component: () => import('@/views/buffet/menu.vue'),
  251. meta: {
  252. title: '放题点餐'
  253. }
  254. },
  255. // 管理员路由
  256. {
  257. path: '/admin/dashboard',
  258. name: 'AdminDashboard',
  259. component: () => import('@/views/admin/dashboard.vue'),
  260. meta: {
  261. title: '管理后台',
  262. requiresAuth: true,
  263. requiresRole: 'admin'
  264. }
  265. },
  266. {
  267. path: '/admin/users',
  268. name: 'AdminUsers',
  269. component: () => import('@/views/admin/users.vue'),
  270. meta: {
  271. title: '用户管理',
  272. requiresAuth: true,
  273. requiresRole: 'admin'
  274. }
  275. },
  276. {
  277. path: '/admin/merchants',
  278. name: 'AdminMerchants',
  279. component: () => import('@/views/admin/merchants.vue'),
  280. meta: {
  281. title: '商家管理',
  282. requiresAuth: true,
  283. requiresRole: 'admin'
  284. }
  285. }
  286. ]