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
|
||
})
|
||
}
|