Storage.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import { DEFAULT_CACHE_TIME } from '/@/settings/cipherSetting';
  2. // import { EncryptionParams } from '/@/utils/cipher/aesEncryption';
  3. export interface CreateStorageParams {
  4. storage: Storage;
  5. hasEncrypt: boolean;
  6. }
  7. export const createStorage = ({ prefixKey = '', storage = sessionStorage } = {}) => {
  8. /**
  9. *缓存类
  10. *构造参数可以传入 sessionStorage,localStorage,
  11. * @class Cache
  12. * @example
  13. */
  14. const WebStorage = class WebStorage {
  15. private storage: Storage;
  16. private prefixKey?: string;
  17. /**
  18. *
  19. * @param {*} storage
  20. */
  21. constructor() {
  22. this.storage = storage;
  23. this.prefixKey = prefixKey;
  24. }
  25. private getKey(key: string) {
  26. return `${this.prefixKey}${key}`.toUpperCase();
  27. }
  28. /**
  29. *
  30. * 设置缓存
  31. * @param {string} key 缓存键
  32. * @param {*} value 缓存值
  33. * @expire 过期时间 单位秒
  34. * @memberof Cache
  35. */
  36. set(key: string, value: any, expire: number | null = DEFAULT_CACHE_TIME) {
  37. const stringData = JSON.stringify({
  38. value,
  39. expire: expire !== null ? new Date().getTime() + expire * 1000 : null,
  40. });
  41. this.storage.setItem(this.getKey(key), stringData);
  42. }
  43. /**
  44. *
  45. *读取缓存
  46. * @param {string} key 缓存键
  47. * @returns 缓存值
  48. * @memberof Cache
  49. */
  50. get(key: string, def: any = null): any {
  51. const item = this.storage.getItem(this.getKey(key));
  52. if (item) {
  53. try {
  54. const data = JSON.parse(item);
  55. const { value, expire } = data;
  56. if (expire === null || expire >= new Date().getTime()) {
  57. return value;
  58. }
  59. this.remove(this.getKey(key));
  60. } catch (e) {
  61. return def;
  62. }
  63. }
  64. return def;
  65. }
  66. /**
  67. *
  68. *删除缓存
  69. * @param {string} key 缓存键
  70. * @memberof Cache
  71. */
  72. remove(key: string) {
  73. this.storage.removeItem(this.getKey(key));
  74. }
  75. /**
  76. *
  77. *删除该实例所有缓存
  78. * @memberof Cache
  79. */
  80. clear(): void {
  81. this.storage.clear();
  82. }
  83. /**
  84. * 添加cookie
  85. * @param name cookie名字
  86. * @param value cookie内容
  87. * @param expire
  88. * 如果过期时间未设置,默认管理浏览器自动删除
  89. * 例子:
  90. * cookieData.set('name','value',)
  91. */
  92. setCookie(name: string, value: any, expire: number | null = DEFAULT_CACHE_TIME) {
  93. document.cookie = this.getKey(name) + '=' + value + '; Max-Age=' + expire;
  94. }
  95. /**
  96. * 根据名字获取cooki值
  97. * @param name cookie名
  98. * @returns {*} cookie值
  99. */
  100. getCookie(name: string) {
  101. const arr = document.cookie.split('; ');
  102. for (let i = 0; i < arr.length; i++) {
  103. const arr2 = arr[i].split('=');
  104. if (arr2[0] === this.getKey(name)) {
  105. return arr2[1];
  106. }
  107. }
  108. return '';
  109. }
  110. /**
  111. * 根据cookie名字删除cookie
  112. * @param name cookie名字
  113. */
  114. removeCookie(key: string) {
  115. this.setCookie(key, 1, -1);
  116. }
  117. clearCookie(): void {
  118. const keys = document.cookie.match(/[^ =;]+(?==)/g);
  119. if (keys) {
  120. for (let i = keys.length; i--; ) {
  121. document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString();
  122. }
  123. }
  124. }
  125. };
  126. return new WebStorage();
  127. };