| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import router from "@/router/index";
- import type { LocationQuery } from "vue-router";
- import type { Sort } from "./search-component.type";
- export type SearchType = 'simple' | 'advanced';
- export interface SearchRouteParam {
- type: SearchType;
- query?: string;
- field?: string;
- kw?: string;
- yearSelected?: string[];
- authorSelected?: string[];
- sort?: Sort;
- page?: number;
- size?: number;
- }
- /**
- * 路由到搜索结果页面,把查询表达式传入到搜索结果页面
- * @param param queryString参数
- */
- export function routeToSearch(param: SearchRouteParam, extras: {[index: string]: any} = {}) {
- const queryStrParam: {[index: string]: any} = { ...param, ...extras };
- router.push({ name: 'SearchResult', query: queryStrParam });
- }
- /**
- * 解析url query string为SearchRouteParam对象
- * @param queryParam parsed url query string
- * @returns SearchRouteParam
- */
- export function parseUrlQuery(queryParam: LocationQuery): SearchRouteParam {
- let type: SearchType;
- let query: string = '';
- let field: string = '';
- let kw: string = '';
- if (queryParam.type == 'advanced') {
- type = 'advanced';
- query = queryParam.query as string;
- } else {
- type = 'simple';
- // 初始化关键词
- if (queryParam.kw) {
- kw = (queryParam.kw as string).trim();
- }
- if (queryParam.field) {
- field = (queryParam.field as string).trim();
- }
- query = `${field}=(${kw})`
- }
- let yearSelected: string[] = [];
- if (queryParam.yearSelected) {
- if (Array.isArray(queryParam.yearSelected)) {
- yearSelected = queryParam.yearSelected as string[];
- } else {
- yearSelected = [queryParam.yearSelected];
- }
- }
- let authorSelected: string[] = [];
- if (queryParam.authorSelected) {
- if (Array.isArray(queryParam.authorSelected)) {
- authorSelected = queryParam.authorSelected as string[];
- } else {
- authorSelected = [queryParam.authorSelected];
- }
- }
- let sort: Sort = 'Relevance';
- if (queryParam.sort) {
- sort = queryParam.sort as Sort;
- }
- let page: number | null = null;
- if (queryParam.page) {
- page = parseInt(queryParam.page as string);
- }
- let size: number | null = null;
- if (queryParam.size) {
- size = parseInt(queryParam.size as string);
- }
- const result: SearchRouteParam = {
- type,
- query,
- field,
- kw,
- yearSelected,
- authorSelected,
- sort,
- };
- if (page) {
- result['page'] = page;
- }
- if (size) {
- result['size'] = size;
- }
- return result;
- }
|