search.helper.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import router from "@/router/index";
  2. import type { LocationQuery } from "vue-router";
  3. import type { Sort } from "./search-component.type";
  4. export type SearchType = 'simple' | 'advanced';
  5. export interface SearchRouteParam {
  6. type: SearchType;
  7. query?: string;
  8. field?: string;
  9. kw?: string;
  10. yearSelected?: string[];
  11. authorSelected?: string[];
  12. sort?: Sort;
  13. page?: number;
  14. size?: number;
  15. }
  16. /**
  17. * 路由到搜索结果页面,把查询表达式传入到搜索结果页面
  18. * @param param queryString参数
  19. */
  20. export function routeToSearch(param: SearchRouteParam, extras: {[index: string]: any} = {}) {
  21. const queryStrParam: {[index: string]: any} = { ...param, ...extras };
  22. router.push({ name: 'SearchResult', query: queryStrParam });
  23. }
  24. /**
  25. * 解析url query string为SearchRouteParam对象
  26. * @param queryParam parsed url query string
  27. * @returns SearchRouteParam
  28. */
  29. export function parseUrlQuery(queryParam: LocationQuery): SearchRouteParam {
  30. let type: SearchType;
  31. let query: string = '';
  32. let field: string = '';
  33. let kw: string = '';
  34. if (queryParam.type == 'advanced') {
  35. type = 'advanced';
  36. query = queryParam.query as string;
  37. } else {
  38. type = 'simple';
  39. // 初始化关键词
  40. if (queryParam.kw) {
  41. kw = (queryParam.kw as string).trim();
  42. }
  43. if (queryParam.field) {
  44. field = (queryParam.field as string).trim();
  45. }
  46. query = `${field}=(${kw})`
  47. }
  48. let yearSelected: string[] = [];
  49. if (queryParam.yearSelected) {
  50. if (Array.isArray(queryParam.yearSelected)) {
  51. yearSelected = queryParam.yearSelected as string[];
  52. } else {
  53. yearSelected = [queryParam.yearSelected];
  54. }
  55. }
  56. let authorSelected: string[] = [];
  57. if (queryParam.authorSelected) {
  58. if (Array.isArray(queryParam.authorSelected)) {
  59. authorSelected = queryParam.authorSelected as string[];
  60. } else {
  61. authorSelected = [queryParam.authorSelected];
  62. }
  63. }
  64. let sort: Sort = 'Relevance';
  65. if (queryParam.sort) {
  66. sort = queryParam.sort as Sort;
  67. }
  68. let page: number | null = null;
  69. if (queryParam.page) {
  70. page = parseInt(queryParam.page as string);
  71. }
  72. let size: number | null = null;
  73. if (queryParam.size) {
  74. size = parseInt(queryParam.size as string);
  75. }
  76. const result: SearchRouteParam = {
  77. type,
  78. query,
  79. field,
  80. kw,
  81. yearSelected,
  82. authorSelected,
  83. sort,
  84. };
  85. if (page) {
  86. result['page'] = page;
  87. }
  88. if (size) {
  89. result['size'] = size;
  90. }
  91. return result;
  92. }