This commit is contained in:
2026-03-07 16:48:59 +08:00
parent 5a5af706e5
commit c2e2a64416
36 changed files with 609 additions and 1369 deletions

View File

@@ -1,18 +1,18 @@
/**
* 积分配置 Store
* 管理AI模型积分消耗配置
* 管理AI服务积分消耗配置
*/
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
import { getJSON, setJSON } from '@/utils/storage'
import ModelConfigService from '@/api/modelConfig'
import ServiceConfigService from '@/api/modelConfig'
const STORAGE_KEY = 'points_config_v1'
const CACHE_DURATION = 30 * 60 * 1000 // 30分钟缓存
export const usePointsConfigStore = defineStore('pointsConfig', () => {
// 模型配置映射(按平台分组)
// 服务配置映射(按平台分组)
const configMap = ref({})
// 是否已加载
const isLoaded = ref(false)
@@ -24,57 +24,66 @@ export const usePointsConfigStore = defineStore('pointsConfig', () => {
// 所有平台列表
const platforms = computed(() => Object.keys(configMap.value))
// 获取所有模型列表(扁平化)
const allModels = computed(() => {
const models = []
// 获取所有服务列表(扁平化)
const allServices = computed(() => {
const services = []
for (const [platform, list] of Object.entries(configMap.value)) {
if (Array.isArray(list)) {
list.forEach(model => {
models.push({ ...model, platform })
list.forEach(service => {
services.push({ ...service, platform })
})
}
}
return models
return services
})
// 兼容allModels 别名
const allModels = allServices
/**
* 根据模型代码获取积分消耗
* @param {string} modelCode - 模型代码
* 根据服务代码获取积分消耗
* @param {string} serviceCode - 服务代码
* @returns {number|null} 积分消耗
*/
const getConsumePoints = (modelCode) => {
if (!modelCode) return null
return ModelConfigService.getConsumePoints(configMap.value, modelCode)
const getConsumePoints = (serviceCode) => {
if (!serviceCode) return null
return ServiceConfigService.getConsumePoints(configMap.value, serviceCode)
}
/**
* 根据模型代码获取模型名称
* @param {string} modelCode - 模型代码
* @returns {string|null} 模型名称
* 根据服务代码获取服务名称
* @param {string} serviceCode - 服务代码
* @returns {string|null} 服务名称
*/
const getModelName = (modelCode) => {
if (!modelCode) return null
return ModelConfigService.getModelName(configMap.value, modelCode)
const getServiceName = (serviceCode) => {
if (!serviceCode) return null
return ServiceConfigService.getServiceName(configMap.value, serviceCode)
}
// 兼容getModelName 别名
const getModelName = getServiceName
/**
* 获取模型完整信息
* @param {string} modelCode - 模型代码
* @returns {Object|null} 模型信息 { modelCode, modelName, consumePoints, platform }
* 获取服务完整信息
* @param {string} serviceCode - 服务代码
* @returns {Object|null} 服务信息 { serviceCode, serviceName, consumePoints, platform }
*/
const getModelInfo = (modelCode) => {
if (!modelCode) return null
const getServiceInfo = (serviceCode) => {
if (!serviceCode) return null
for (const [platform, list] of Object.entries(configMap.value)) {
if (Array.isArray(list)) {
const model = list.find(m => m.modelCode === modelCode)
if (model) {
return { ...model, platform }
const service = list.find(s => s.serviceCode === serviceCode)
if (service) {
return { ...service, platform }
}
}
}
return null
}
// 兼容getModelInfo 别名
const getModelInfo = getServiceInfo
/**
* 从本地存储恢复
*/
@@ -98,7 +107,7 @@ export const usePointsConfigStore = defineStore('pointsConfig', () => {
}
/**
* 加载模型配置(从服务器)
* 加载服务配置(从服务器)
* @param {boolean} force - 是否强制刷新
*/
const loadConfig = async (force = false) => {
@@ -115,14 +124,14 @@ export const usePointsConfigStore = defineStore('pointsConfig', () => {
isLoading.value = true
try {
const data = await ModelConfigService.getEnabledModelConfigList()
const data = await ServiceConfigService.getEnabledServiceConfigList()
configMap.value = data || {}
lastLoadTime.value = now
isLoaded.value = true
await persistToStorage()
return configMap.value
} catch (error) {
console.error('[pointsConfig] 加载模型配置失败:', error)
console.error('[pointsConfig] 加载服务配置失败:', error)
throw error
} finally {
isLoading.value = false
@@ -149,11 +158,14 @@ export const usePointsConfigStore = defineStore('pointsConfig', () => {
isLoaded,
isLoading,
platforms,
allModels,
allServices,
allModels, // 兼容
// 方法
getConsumePoints,
getModelName,
getModelInfo,
getServiceName,
getModelName, // 兼容
getServiceInfo,
getModelInfo, // 兼容
loadConfig,
formatPoints,
}