chore: initial baseline with P0-safety .gitignore
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
// =============================================================================
|
||||
// 企微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,
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user