index.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import { useAuthStore } from "@/stores/auth.store";
  2. import type { SearchRouteParam } from "@/types/route.type";
  3. import { createRouter, createWebHistory } from "vue-router";
  4. import RouteView from "../views/RouteView.vue";
  5. export const router = createRouter({
  6. history: createWebHistory(import.meta.env.BASE_URL),
  7. routes: [
  8. {
  9. path: "/",
  10. name: "Home",
  11. redirect: "/report/index"
  12. },
  13. {
  14. path: "/report",
  15. name: "Report",
  16. component: RouteView,
  17. children: [
  18. {
  19. path: "index",
  20. name: "ReportList",
  21. component: () => import("../views/report/ReportListView.vue"),
  22. },
  23. // {
  24. // path: "create",
  25. // name: "ReportCreate",
  26. // component: () => import("../views/report/ReportCreateView.vue"),
  27. // },
  28. {
  29. path: "edit/:id",
  30. name: "ReportEditor",
  31. component: () => import("../views/report/ReportEditorView.vue"),
  32. },
  33. {
  34. path: "preview/:id",
  35. name: "ReportPreview",
  36. component: () => import("../views/reportPreview/ReportPreviewView.vue"),
  37. },
  38. {
  39. path: "template",
  40. name: "ReportTemplate",
  41. component: () => import("../views/reportTemplate/ReportTemplateListView.vue"),
  42. },
  43. {
  44. path: "template/edit/:id",
  45. name: "ReportTemplateEditor",
  46. component: () => import("../views/reportTemplate/ReportTemplateEditorView.vue"),
  47. },
  48. ]
  49. },
  50. {
  51. path: "/search",
  52. name: "Search",
  53. component: RouteView,
  54. children: [
  55. {
  56. path: "index",
  57. name: "SearchIndex",
  58. component: () => import("../views/search/SearchView.vue")
  59. },
  60. {
  61. path: "advanced/index",
  62. name: "AdvancedSearchIndex",
  63. component: () => import("../views/search/AdvancedSearchView.vue"),
  64. },
  65. {
  66. path: "result",
  67. name: "SearchResult",
  68. component: () => import("../views/search/SearchResultView.vue")
  69. }
  70. ]
  71. },
  72. {
  73. path: "/detail",
  74. name: "DetailRoot",
  75. component: RouteView,
  76. children: [
  77. {
  78. path: ":id",
  79. name: "Detail",
  80. component: () => import("../views/detail/DetailView.vue"),
  81. }
  82. ]
  83. },
  84. {
  85. path: "/knowledgeGraph",
  86. name: "KnowledgeGraph",
  87. component: RouteView,
  88. children: [
  89. {
  90. path: "search",
  91. name: "KnowledgeGraph",
  92. component: () => import("../views/knowledgeGraph/KnowledgeGraphView.vue")
  93. }
  94. ]
  95. },
  96. {
  97. path: "/login",
  98. name: "Login",
  99. // route level code-splitting
  100. // this generates a separate chunk (About.[hash].js) for this route
  101. // which is lazy-loaded when the route is visited.
  102. component: () => import("../views/LoginView.vue"),
  103. },
  104. {
  105. path: "/history",
  106. name: "History",
  107. component: RouteView,
  108. children: [
  109. {
  110. path: "",
  111. name: "HistoryIndex",
  112. component: () => import("../views/history/HistoryView.vue"),
  113. }
  114. ]
  115. },
  116. {
  117. path: "/favorite",
  118. name: "Favorite",
  119. component: RouteView,
  120. children: [
  121. {
  122. path: "",
  123. name: "FavoriteIndex",
  124. component: () => import("../views/favorite/FavoriteView.vue"),
  125. }
  126. ]
  127. },
  128. {
  129. path: '/:pathMatch(.*)*',
  130. name: 'NotFound',
  131. component: () => import("../views/NotFound.vue"),
  132. },
  133. ],
  134. });
  135. router.beforeResolve(async to => {
  136. const authStore = useAuthStore();
  137. if (to.name != 'Login' && !authStore.isLoginIn()) {
  138. return { name: "Login" };
  139. }
  140. });
  141. export function routeToHome() {
  142. router.push({ name: "Home" })
  143. }
  144. export function routeToLogin() {
  145. router.push({ name: "Login" });
  146. }
  147. /**
  148. * 路由到报告编辑界面
  149. * @param id 报告ID
  150. */
  151. export function routeToReportEditor(id: number) {
  152. router.push({ name: "ReportEditor", params: { id }});
  153. }
  154. /**
  155. * 路由到搜索结果页面,把查询表达式传入到搜索结果页面
  156. * @param param queryString参数
  157. */
  158. export function routeToSearch(param: SearchRouteParam, extras: {[index: string]: any} = {}) {
  159. const queryStrParam: {[index: string]: any} = { ...param, ...extras };
  160. router.push({ name: 'SearchResult', query: queryStrParam });
  161. }
  162. /**
  163. * 路由到报告预览界面
  164. * @param id 报告ID
  165. */
  166. export function routeToReportPreview(id: number) {
  167. router.push({ name: 'ReportPreview', params: { id } })
  168. }