import dayjs from 'dayjs' class Utils { //存数据进sessionStroage中 setKey(key: string, value: any) { sessionStorage.setItem(key, JSON.stringify(value)) } //从sessionStroage中拿数据 getKey(key: string) { if (sessionStorage.getItem(key)) { return JSON.parse(sessionStorage.getItem(key) as string) } } //删除 removeKey(key: string) { sessionStorage.removeItem(key) } //清空 clear() { sessionStorage.clear() } //处理时间 formatTime(time: number) { return dayjs(time).format('YYYY-MM-DD HH:mm:ss') } //深拷贝 deepClone(obj: Record) { const newObj: Record = obj instanceof Array ? [] : {} for (const key in obj) { if (typeof obj[key] !== 'object') { newObj[key] = obj[key] } else { newObj[key] = this.deepClone(obj[key]) } } return newObj } //柯里化函数 curry(fn: (...args: any[]) => any) { return function cur1(this: unknown, ...args: any[]) { if (fn.length <= args.length) { return fn.apply(this, args) } return function cur2(this: unknown, ...args2: any[]) { return cur1.apply(this, [...args, args2]) } } } //防抖 debounce(cb: (...args: any[]) => T, delay: number) { let timer: NodeJS.Timeout | null return function (this: unknown, ...args: any[]) { return new Promise((resolve, reject) => { try { if (timer) { clearTimeout(timer) timer = null return } timer = setTimeout(() => { const res = cb.apply(this, args) resolve(res) clearTimeout(timer as NodeJS.Timeout) timer = null }, delay) } catch (error) { reject(error) } }) } } //节流 throttle(cb: (...args: any[]) => T, delay: number, { tailing = false } = {}) { let startTime = 0 let timer: NodeJS.Timeout | null = null return function (this: unknown, ...args: any[]) { return new Promise((resolve, reject) => { try { const nowTime = new Date().getTime() if (delay <= nowTime - startTime) { const res = cb.apply(this, args) resolve(res) startTime = nowTime timer && clearTimeout(timer) timer = null return } //最后一次是否执行 if (tailing && !timer) { const interval = delay - (nowTime - startTime) timer = setTimeout(() => { const res = cb.apply(this, args) resolve(res) startTime = new Date().getTime() clearTimeout(timer as NodeJS.Timeout) timer = null }, interval) } } catch (error) { reject(error) } }) } } //在线资源的显示 onlineResource(id: number, baseUrl: string = import.meta.env.VITE_BASE_URL) { return `${baseUrl}/?id=${id}` } //处理下载 download(id: number, baseUrl: string = import.meta.env.VITE_BASE_URL) { const url = this.onlineResource(id, baseUrl) if ('download' in document.createElement('a')) { // 非IE下载 const elink = document.createElement('a') // elink.download = 'aaa' elink.href = url // elink.target = '_blank' document.body.appendChild(elink) elink.click() // URL.revokeObjectURL(elink.href) // 释放URL对象 document.body.removeChild(elink) } } } export default new Utils()