env.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { inRevise } from "@/utils/shared";
  2. import { computed, ref, watch } from "vue";
  3. export const urlUpdateQuery = (
  4. link: string,
  5. params: Record<string, string>,
  6. rep = false
  7. ) => {
  8. const url = new URL(link);
  9. const ndx = url.hash.indexOf("?");
  10. let search: URLSearchParams;
  11. if (!rep && ~ndx) {
  12. search = new URLSearchParams({
  13. ...(urlGetQuery(link) as any),
  14. ...params,
  15. });
  16. for (const key in params) {
  17. search.set(key, params[key]);
  18. }
  19. } else {
  20. search = new URLSearchParams(params);
  21. }
  22. url.hash = url.hash.substring(0, ndx + 1) + search.toString();
  23. return url.toString();
  24. };
  25. export const urlGetQuery = (link: string) => {
  26. const url = new URL(link);
  27. const hash = url.hash;
  28. const ndx = hash.indexOf("?");
  29. if (!~ndx) return {};
  30. const sParams = new URLSearchParams(hash.substring(ndx));
  31. const rParams: Record<string, string> = {};
  32. [...sParams.entries()].forEach((item) => {
  33. rParams[item[0]] = item[1];
  34. });
  35. return rParams;
  36. };
  37. export const params = ref<Record<string, any>>({});
  38. const sParams = new URLSearchParams(location.search);
  39. [...sParams.entries()].forEach((item) => {
  40. params.value[item[0]] = item[1];
  41. });
  42. const updateParams = () => {
  43. const rParams = urlGetQuery(location.href);
  44. params.value = rParams;
  45. for (const key in params.value) {
  46. if (['tabulationId', 'overviewId'].includes(key)) {
  47. params.value[key] = Number(params.value[key])
  48. }
  49. }
  50. };
  51. updateParams();
  52. watch(
  53. () => ({ ...params.value }),
  54. (nParams, oParams) => {
  55. const sParams = new URLSearchParams();
  56. for (const key in params.value) {
  57. params.value[key] && sParams.append(key, params.value[key]);
  58. }
  59. const ndx = location.hash.indexOf("?");
  60. location.replace(
  61. location.hash.substring(0, ~ndx ? ndx : undefined) +
  62. "?" +
  63. sParams.toString()
  64. );
  65. const keys = new Set([...Object.keys(nParams), ...Object.keys(oParams)])
  66. for (const key of keys) {
  67. if (nParams[key] && oParams[key]) {
  68. if (nParams[key] !== oParams[key]) {
  69. setTimeout(() => {
  70. location.reload();
  71. }, 100);
  72. return;
  73. }
  74. }
  75. }
  76. },
  77. { deep: true }
  78. );
  79. window.addEventListener("hashchange", updateParams);
  80. const getQuisk = (key: string) =>
  81. computed({
  82. get() {
  83. return params.value[key];
  84. },
  85. set(val: string) {
  86. params.value[key] = val;
  87. },
  88. });
  89. export const tabulationId = getQuisk("tabulationId");
  90. export const overviewId = getQuisk("overviewId");
  91. export const token = getQuisk("token");