98 lines
2.9 KiB
TypeScript
98 lines
2.9 KiB
TypeScript
/**
|
||
* 全局配置工具类
|
||
* 用于处理应用配置,包括阿里云图片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
|
||
}
|