73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
|
|
/**
|
|||
|
|
* 图片处理工具类
|
|||
|
|
* 用于统一处理从阿里云或其他存储服务获取图片的逻辑
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
import request from '@/utils/request'
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取阿里云存储的图片URL
|
|||
|
|
* @param imageKey 图片在阿里云上的key
|
|||
|
|
* @returns 图片的完整URL
|
|||
|
|
*/
|
|||
|
|
export function getAliyunImageUrl(imageKey: string): string {
|
|||
|
|
// 从配置中获取阿里云基础URL,如果配置不存在则返回原路径
|
|||
|
|
const config = uni.getStorageSync('storageConfig') || {}
|
|||
|
|
const baseUrl = config.aliyunBaseUrl || config.baseUrl || ''
|
|||
|
|
|
|||
|
|
if (baseUrl && imageKey) {
|
|||
|
|
// 确保URL格式正确
|
|||
|
|
const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl : baseUrl + '/'
|
|||
|
|
return normalizedBaseUrl + imageKey
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 如果没有配置,则返回原始图片路径(本地路径)
|
|||
|
|
return imageKey
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通过API获取图片URL
|
|||
|
|
* @param teacherId 教师ID
|
|||
|
|
* @returns 二维码图片的URL
|
|||
|
|
*/
|
|||
|
|
export async function getTeacherQrCodeUrl(teacherId: number): Promise<string> {
|
|||
|
|
try {
|
|||
|
|
const response = await request.get(
|
|||
|
|
{ url: `frontapi/teacher/qrcode?id=${teacherId}` },
|
|||
|
|
{ urlPrefix: '', isTransformResponse: false }
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if (response && response.code === 1 && response.data) {
|
|||
|
|
return response.data
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.error('获取教师二维码URL失败:', response)
|
|||
|
|
return ''
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('获取教师二维码URL异常:', error)
|
|||
|
|
return ''
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通用图片加载错误处理
|
|||
|
|
* 当阿里云图片加载失败时,回退到本地图片
|
|||
|
|
* @param imageUrl 阿里云图片URL
|
|||
|
|
* @param localImagePath 本地图片路径
|
|||
|
|
* @returns Promise<string> 确定使用的图片路径
|
|||
|
|
*/
|
|||
|
|
export async function loadImageWithFallback(
|
|||
|
|
imageUrl: string,
|
|||
|
|
localImagePath: string
|
|||
|
|
): Promise<string> {
|
|||
|
|
if (!imageUrl) return localImagePath
|
|||
|
|
|
|||
|
|
return new Promise((resolve) => {
|
|||
|
|
// 尝试加载网络图片
|
|||
|
|
const image = new Image()
|
|||
|
|
image.onload = () => resolve(imageUrl)
|
|||
|
|
image.onerror = () => resolve(localImagePath)
|
|||
|
|
image.src = imageUrl
|
|||
|
|
})
|
|||
|
|
}
|