Files
schoolNews/schoolNewsWeb/src/utils/iconUtils.ts

68 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-10-27 11:35:42 +08:00
/**
* @description
* @author yslg
* @since 2025-10-27
*/
import { PUBLIC_IMG_PATH } from '@/config';
/**
*
* @param icon URL
* @param subPath achievement
* @returns URL
*
* @example
* // 仅文件名
* getIconUrl('v1-icon.svg') // => '/schoolNewsWeb/img/achievement/v1-icon.svg'
*
* // 完整相对路径
* getIconUrl('/img/achievement/v1-icon.svg') // => '/schoolNewsWeb/img/achievement/v1-icon.svg'
*
* // 外部URL
* getIconUrl('https://cdn.com/icon.svg') // => 'https://cdn.com/icon.svg'
*/
export function getIconUrl(icon?: string, subPath = 'achievement'): string {
if (!icon) return '';
// 如果是http或https开头直接返回外部URL
if (icon.startsWith('http://') || icon.startsWith('https://')) {
return icon;
}
// 如果已经包含完整路径(带 schoolNewsWeb 前缀)
if (icon.startsWith('/schoolNewsWeb/')) {
return icon;
}
// 如果包含 /img/ 路径,拼接 schoolNewsWeb 前缀
if (icon.startsWith('/img/') || icon.startsWith('img/')) {
const normalizedPath = icon.startsWith('/') ? icon : `/${icon}`;
return `/schoolNewsWeb${normalizedPath}`;
}
// 否则拼接默认路径
const fullPath = `${PUBLIC_IMG_PATH}/${subPath}`;
return icon.startsWith('/') ? `${fullPath}${icon}` : `${fullPath}/${icon}`;
}
/**
* URL
* @param icon
* @returns URL
*/
export function getAchievementIconUrl(icon?: string): string {
return getIconUrl(icon, 'achievement');
}
/**
* URL
* @param level 1-6
* @returns URL
*/
export function getLevelIconUrl(level = 1): string {
const validLevel = Math.max(1, Math.min(6, level)); // 限制在1-6之间
return getIconUrl(`v${validLevel}-icon.svg`, 'achievement');
}