Files
schoolNews/schoolNewsWeb/src/utils/iconUtils.ts
2025-11-25 17:49:10 +08:00

88 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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');
}
/**
* 根据等级获取等级图标URL
* @param level 等级1-6
* @returns 等级图标URL
*/
export function getLevelWordIconUrl(level = 1): string {
const validLevel = Math.max(1, Math.min(6, level)); // 限制在1-6之间
return getIconUrl(`v${validLevel}.svg`, 'achievement');
}
export function getLevelStarIconUrl(level = 1): string {
// 根据小数点判断 无小数点是v0-star.svg 有小数点是0.5 是v5-star.svg
// 转换浮点数
const floatLevel = parseFloat(level.toString());
// 小数点后的值 .1到.5
const decimal = floatLevel % 1;
const val = decimal * 10;
return getIconUrl(`v${val}-star.svg`, 'achievement');
}