125 lines
3.8 KiB
TypeScript
125 lines
3.8 KiB
TypeScript
|
|
// =============================================================================
|
|||
|
|
// 企微IT智能服务台 — 配置项状态管理(Pinia Store)
|
|||
|
|
// =============================================================================
|
|||
|
|
// 说明:管理功能开关/参数配置数据,支持读取、更新、变更历史查询
|
|||
|
|
|
|||
|
|
import { defineStore } from 'pinia'
|
|||
|
|
import { ref, computed } from 'vue'
|
|||
|
|
import type { ConfigGroup, ConfigItem } from '@/types'
|
|||
|
|
import { getConfigGroups, updateConfig as apiUpdateConfig, getConfigHistory } from '@/api/admin'
|
|||
|
|
|
|||
|
|
// --------------------------------------------------------------------------
|
|||
|
|
// Store 定义
|
|||
|
|
// --------------------------------------------------------------------------
|
|||
|
|
export const useConfigStore = defineStore('config', () => {
|
|||
|
|
// ==========================================================================
|
|||
|
|
// 响应式状态
|
|||
|
|
// ==========================================================================
|
|||
|
|
|
|||
|
|
/** 配置分组列表 */
|
|||
|
|
const groups = ref<ConfigGroup[]>([])
|
|||
|
|
|
|||
|
|
/** 是否正在加载 */
|
|||
|
|
const loading = ref<boolean>(false)
|
|||
|
|
|
|||
|
|
/** 当前查看变更历史的配置项 key */
|
|||
|
|
const historyKey = ref<string>('')
|
|||
|
|
|
|||
|
|
/** 变更历史列表 */
|
|||
|
|
const historyItems = ref<{ id: string; config_key: string; old_value: string; new_value: string; changed_by: string; changed_by_name: string; changed_at: string }[]>([])
|
|||
|
|
|
|||
|
|
// ==========================================================================
|
|||
|
|
// 计算属性
|
|||
|
|
// ==========================================================================
|
|||
|
|
|
|||
|
|
/** 所有配置项扁平列表 */
|
|||
|
|
const allConfigs = computed<ConfigItem[]>(() => {
|
|||
|
|
return groups.value.flatMap((g) => g.items)
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
/** 按 key 获取配置项 */
|
|||
|
|
function getConfigByKey(key: string): ConfigItem | undefined {
|
|||
|
|
return allConfigs.value.find((item) => item.key === key)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ==========================================================================
|
|||
|
|
// 方法
|
|||
|
|
// ==========================================================================
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 加载全部配置分组
|
|||
|
|
*/
|
|||
|
|
async function loadConfigs(): Promise<void> {
|
|||
|
|
loading.value = true
|
|||
|
|
try {
|
|||
|
|
const response = await getConfigGroups()
|
|||
|
|
groups.value = response.data.data.groups
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('加载配置失败:', error)
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 更新单个配置项
|
|||
|
|
* @param key - 配置键
|
|||
|
|
* @param value - 新值
|
|||
|
|
*/
|
|||
|
|
async function updateConfigValue(key: string, value: string): Promise<boolean> {
|
|||
|
|
try {
|
|||
|
|
const response = await apiUpdateConfig(key, value)
|
|||
|
|
const result = response.data.data
|
|||
|
|
|
|||
|
|
// 更新本地缓存中的值
|
|||
|
|
for (const group of groups.value) {
|
|||
|
|
const item = group.items.find((i) => i.key === key)
|
|||
|
|
if (item) {
|
|||
|
|
item.value = value
|
|||
|
|
break
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('更新配置失败:', error)
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 加载指定配置项的变更历史
|
|||
|
|
* @param key - 配置键
|
|||
|
|
* @param limit - 最大返回条数
|
|||
|
|
*/
|
|||
|
|
async function loadHistory(key: string, limit: number = 20): Promise<void> {
|
|||
|
|
historyKey.value = key
|
|||
|
|
try {
|
|||
|
|
const response = await getConfigHistory(key, limit)
|
|||
|
|
historyItems.value = response.data.data.items
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('加载变更历史失败:', error)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ==========================================================================
|
|||
|
|
// 返回
|
|||
|
|
// ==========================================================================
|
|||
|
|
return {
|
|||
|
|
// 状态
|
|||
|
|
groups,
|
|||
|
|
loading,
|
|||
|
|
historyKey,
|
|||
|
|
historyItems,
|
|||
|
|
|
|||
|
|
// 计算属性
|
|||
|
|
allConfigs,
|
|||
|
|
|
|||
|
|
// 方法
|
|||
|
|
getConfigByKey,
|
|||
|
|
loadConfigs,
|
|||
|
|
updateConfigValue,
|
|||
|
|
loadHistory,
|
|||
|
|
}
|
|||
|
|
})
|