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');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-25 17:49:10 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 根据等级获取等级图标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');
|
|
|
|
|
|
}
|
|
|
|
|
|
|