edu/uniapp/src/utils/configUtils.ts

98 lines
2.9 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.

/**
* 全局配置工具类
* 用于处理应用配置包括阿里云图片URL等
*/
import { getAliyunImageUrl } from './imageUtils'
import { getAliyunUrl } from '@/api/app'
function getDefaultStorageConfig() {
return {
aliyunBaseUrl: ''
}
}
async function fetchAndCacheStorageConfig() {
const configResponse = await getAliyunUrl()
// 兼容两种返回:
// 1) 拦截器已解包:{ aliyunUrl: '...' }
// 2) 未解包原始结构:{ code: 1, data: { aliyunUrl: '...' } }
const serverConfig =
configResponse && typeof configResponse === 'object' && 'aliyunUrl' in configResponse
? configResponse
: configResponse?.code === 1
? configResponse.data || {}
: {}
const storageConfig = {
aliyunBaseUrl: (serverConfig as any).aliyunUrl || ''
}
uni.setStorageSync('storageConfig', storageConfig)
return storageConfig
}
/**
* 初始化应用配置
* 从服务器获取配置信息并缓存
*/
export async function initAppConfig() {
try {
const config = await fetchAndCacheStorageConfig()
console.log('应用配置初始化成功', config)
} catch (error) {
console.error('应用配置初始化失败:', error)
uni.setStorageSync('storageConfig', getDefaultStorageConfig())
}
}
/**
* 确保阿里云配置可用;若本地无配置则主动请求一次
*/
export async function ensureStorageConfig() {
const config = uni.getStorageSync('storageConfig') || {}
if (config.aliyunBaseUrl) {
return config
}
try {
return await fetchAndCacheStorageConfig()
} catch (error) {
console.error('确保存储配置失败:', error)
const defaultConfig = getDefaultStorageConfig()
uni.setStorageSync('storageConfig', defaultConfig)
return defaultConfig
}
}
/**
* 获取tabbar图标路径
* @param iconType 图标类型 ('home' | 'user')
* @param isActive 是否为选中状态
* @returns 图标的路径
*/
export function getTabBarIconPath(iconType: 'home' | 'user', isActive: boolean = false): string {
// 从配置中获取阿里云基础URL
const config = uni.getStorageSync('storageConfig') || {}
const baseUrl = config.aliyunBaseUrl || ''
// 定义本地路径映射
const localPaths = {
home: {
normal: 'static/images/tabbar/home.png',
active: 'static/yubaoming/home_icon_active.png'
},
user: {
normal: 'static/images/tabbar/user.png',
active: 'static/yubaoming/my_icon_active.png'
}
}
// 如果配置了阿里云基础URL则使用阿里云路径
if (baseUrl) {
const imagePath = isActive ? localPaths[iconType].active : localPaths[iconType].normal
return getAliyunImageUrl(imagePath)
}
// 否则返回本地路径
return isActive ? localPaths[iconType].active : localPaths[iconType].normal
}