/** * 图片处理工具类 * 用于统一处理从阿里云或其他存储服务获取图片的逻辑 */ 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 { 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 确定使用的图片路径 */ export async function loadImageWithFallback( imageUrl: string, localImagePath: string ): Promise { if (!imageUrl) return localImagePath return new Promise((resolve) => { // 尝试加载网络图片 const image = new Image() image.onload = () => resolve(imageUrl) image.onerror = () => resolve(localImagePath) image.src = imageUrl }) }