2025-06-30 14:43:02 +08:00
|
|
|
|
export const Debounce = (fn, wait) => {
|
|
|
|
|
|
let delay = wait|| 500
|
|
|
|
|
|
let timer
|
|
|
|
|
|
return function () {
|
|
|
|
|
|
let args = arguments;
|
|
|
|
|
|
if (timer) {
|
|
|
|
|
|
clearTimeout(timer)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let callNow = !timer
|
|
|
|
|
|
timer = setTimeout(() => {
|
|
|
|
|
|
timer = null
|
|
|
|
|
|
}, delay)
|
|
|
|
|
|
if (callNow) fn.apply(this, args)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-01-20 11:44:28 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 处理头像/图片 URL
|
|
|
|
|
|
* @param {String} url 图片路径
|
|
|
|
|
|
* @param {String} baseUrl 基础路径
|
|
|
|
|
|
* @param {String} defaultUrl 默认图片路径
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getHeadImgUrl = (url, baseUrl, defaultUrl = "/static/common/images/avatar_default2.png") => {
|
|
|
|
|
|
if (!url) return defaultUrl;
|
|
|
|
|
|
if (url.startsWith('http') || url.startsWith('https') || url.startsWith('blob:')) return url;
|
|
|
|
|
|
|
|
|
|
|
|
// 统一处理反斜杠:将所有的 \ 替换为 /
|
|
|
|
|
|
let cleanUrl = url.replace(/\\/g, '/');
|
|
|
|
|
|
|
|
|
|
|
|
// 处理 baseUrl: 替换反斜杠并去除末尾斜杠
|
|
|
|
|
|
let cleanBaseUrl = '';
|
|
|
|
|
|
if (baseUrl) {
|
|
|
|
|
|
cleanBaseUrl = baseUrl.replace(/\\/g, '/').replace(/\/$/, '');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 情况三:headSculptureUrl = "/UploadImages/tx.jpg"
|
|
|
|
|
|
if (cleanUrl.startsWith('/')) {
|
|
|
|
|
|
return cleanBaseUrl + cleanUrl;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 情况二:headSculptureUrl = "UploadImages/tx.jpg"
|
|
|
|
|
|
if (cleanUrl.includes('/')) {
|
|
|
|
|
|
return cleanBaseUrl + '/' + cleanUrl;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 情况一:headSculptureUrl = "tx.jpg"
|
|
|
|
|
|
return cleanBaseUrl + '/UploadImages/' + cleanUrl;
|
|
|
|
|
|
}
|