123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import { inRevise } from "@/utils/shared";
- import { computed, ref, watch } from "vue";
- export const urlUpdateQuery = (
- link: string,
- params: Record<string, string>,
- rep = false
- ) => {
- const url = new URL(link);
- const ndx = url.hash.indexOf("?");
- let search: URLSearchParams;
- if (!rep && ~ndx) {
- search = new URLSearchParams({
- ...(urlGetQuery(link) as any),
- ...params,
- });
- for (const key in params) {
- search.set(key, params[key]);
- }
- } else {
- search = new URLSearchParams(params);
- }
- url.hash = url.hash.substring(0, ndx + 1) + search.toString();
- return url.toString();
- };
- export const urlGetQuery = (link: string) => {
- const url = new URL(link);
- const hash = url.hash;
- const ndx = hash.indexOf("?");
- if (!~ndx) return {};
- const sParams = new URLSearchParams(hash.substring(ndx));
- const rParams: Record<string, string> = {};
- [...sParams.entries()].forEach((item) => {
- rParams[item[0]] = item[1];
- });
- return rParams;
- };
- export const params = ref<Record<string, any>>({});
- const sParams = new URLSearchParams(location.search);
- [...sParams.entries()].forEach((item) => {
- params.value[item[0]] = item[1];
- });
- const updateParams = () => {
- const rParams = urlGetQuery(location.href);
- params.value = rParams;
- for (const key in params.value) {
- if (['tabulationId', 'overviewId'].includes(key)) {
- params.value[key] = Number(params.value[key])
- }
- }
- };
- updateParams();
- watch(
- () => ({ ...params.value }),
- (nParams, oParams) => {
- const sParams = new URLSearchParams();
- for (const key in params.value) {
- params.value[key] && sParams.append(key, params.value[key]);
- }
- const ndx = location.hash.indexOf("?");
- location.replace(
- location.hash.substring(0, ~ndx ? ndx : undefined) +
- "?" +
- sParams.toString()
- );
- const keys = new Set([...Object.keys(nParams), ...Object.keys(oParams)])
- for (const key of keys) {
- if (nParams[key] && oParams[key]) {
- if (nParams[key] !== oParams[key]) {
- setTimeout(() => {
- location.reload();
- }, 100);
- return;
- }
- }
- }
- },
- { deep: true }
- );
- window.addEventListener("hashchange", updateParams);
- const getQuisk = (key: string) =>
- computed({
- get() {
- return params.value[key];
- },
- set(val: string) {
- params.value[key] = val;
- },
- });
- export const tabulationId = getQuisk("tabulationId");
- export const overviewId = getQuisk("overviewId");
- export const token = getQuisk("token");
|