167 lines
3.1 KiB
JavaScript
167 lines
3.1 KiB
JavaScript
|
|
export * from './storage'
|
|||
|
|
export * from './auth'
|
|||
|
|
export * from './platform'
|
|||
|
|
export {
|
|||
|
|
default as request, get, post, put, del, upload
|
|||
|
|
}
|
|||
|
|
from './request'
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 防抖函数
|
|||
|
|
* @param {Function} fn 目标函数
|
|||
|
|
* @param {number} [delay=300] 延迟毫秒
|
|||
|
|
* @returns {Function}
|
|||
|
|
*/
|
|||
|
|
export function debounce(fn, delay = 300) {
|
|||
|
|
let timer = null
|
|||
|
|
return function(...args) {
|
|||
|
|
if (timer) clearTimeout(timer)
|
|||
|
|
timer = setTimeout(() => {
|
|||
|
|
fn.apply(this, args)
|
|||
|
|
timer = null
|
|||
|
|
}, delay)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 节流函数
|
|||
|
|
* @param {Function} fn 目标函数
|
|||
|
|
* @param {number} [interval=300] 间隔毫秒
|
|||
|
|
* @returns {Function}
|
|||
|
|
*/
|
|||
|
|
export function throttle(fn, interval = 300) {
|
|||
|
|
let lastTime = 0
|
|||
|
|
return function(...args) {
|
|||
|
|
const now = Date.now()
|
|||
|
|
if (now - lastTime >= interval) {
|
|||
|
|
lastTime = now
|
|||
|
|
fn.apply(this, args)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 深拷贝
|
|||
|
|
* @param {*} obj
|
|||
|
|
* @returns {*}
|
|||
|
|
*/
|
|||
|
|
export function deepClone(obj) {
|
|||
|
|
if (obj === null || typeof obj !== 'object') return obj
|
|||
|
|
if (obj instanceof Date) return new Date(obj)
|
|||
|
|
if (obj instanceof RegExp) return new RegExp(obj)
|
|||
|
|
const clone = Array.isArray(obj) ? [] : {}
|
|||
|
|
for (const key in obj) {
|
|||
|
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|||
|
|
clone[key] = deepClone(obj[key])
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return clone
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 延迟执行(Promise 版 setTimeout)
|
|||
|
|
* @param {number} ms 毫秒
|
|||
|
|
* @returns {Promise}
|
|||
|
|
*/
|
|||
|
|
export function sleep(ms) {
|
|||
|
|
return new Promise((resolve) => setTimeout(resolve, ms))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 生成唯一 ID
|
|||
|
|
* @returns {string}
|
|||
|
|
*/
|
|||
|
|
export function generateId() {
|
|||
|
|
return Date.now().toString(36) + Math.random().toString(36).substring(2)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 页面跳转封装
|
|||
|
|
*/
|
|||
|
|
export const router = {
|
|||
|
|
push(url, params) {
|
|||
|
|
const query = params ? '?' + objectToQuery(params) : ''
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: url + query
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
replace(url, params) {
|
|||
|
|
const query = params ? '?' + objectToQuery(params) : ''
|
|||
|
|
uni.redirectTo({
|
|||
|
|
url: url + query
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
reLaunch(url, params) {
|
|||
|
|
const query = params ? '?' + objectToQuery(params) : ''
|
|||
|
|
uni.reLaunch({
|
|||
|
|
url: url + query
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
switchTab(url) {
|
|||
|
|
uni.switchTab({
|
|||
|
|
url
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
back(delta = 1) {
|
|||
|
|
uni.navigateBack({
|
|||
|
|
delta
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 对象转查询字符串
|
|||
|
|
* @param {Object} obj
|
|||
|
|
* @returns {string}
|
|||
|
|
*/
|
|||
|
|
export function objectToQuery(obj) {
|
|||
|
|
return Object.keys(obj)
|
|||
|
|
.filter((key) => obj[key] !== undefined && obj[key] !== null)
|
|||
|
|
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`)
|
|||
|
|
.join('&')
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 显示消息提示
|
|||
|
|
*/
|
|||
|
|
export const toast = {
|
|||
|
|
success(title, duration = 1500) {
|
|||
|
|
uni.showToast({
|
|||
|
|
title,
|
|||
|
|
icon: 'success',
|
|||
|
|
duration
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
error(title, duration = 2000) {
|
|||
|
|
uni.showToast({
|
|||
|
|
title,
|
|||
|
|
icon: 'none',
|
|||
|
|
duration
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
loading(title = '加载中...') {
|
|||
|
|
uni.showLoading({
|
|||
|
|
title,
|
|||
|
|
mask: true
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
hideLoading() {
|
|||
|
|
uni.hideLoading()
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 确认弹窗(Promise 版)
|
|||
|
|
* @param {string} content 内容
|
|||
|
|
* @param {string} [title='提示'] 标题
|
|||
|
|
* @returns {Promise<boolean>}
|
|||
|
|
*/
|
|||
|
|
export function confirm(content, title = '提示') {
|
|||
|
|
return new Promise((resolve) => {
|
|||
|
|
uni.showModal({
|
|||
|
|
title,
|
|||
|
|
content,
|
|||
|
|
success: (res) => resolve(!!res.confirm),
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
}
|