mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-13 18:10:53 +08:00
147 lines
3.8 KiB
TypeScript
147 lines
3.8 KiB
TypeScript
import { getAccessList, addAccess, updateAccess, deleteAccess } from '@api/access'
|
||
import { useError } from '@baota/hooks/error'
|
||
import { useMessage } from '@baota/naive-ui/hooks'
|
||
import { $t } from '@locales/index'
|
||
|
||
import type { AccessItem, AccessListParams, AddAccessParams, UpdateAccessParams } from '@/types/access'
|
||
import type { TableResponse } from '@baota/naive-ui/types/table'
|
||
|
||
const { handleError } = useError() // 导入错误处理钩子
|
||
const message = useMessage() // 导入消息钩子
|
||
|
||
/**
|
||
* 授权API管理状态 Store
|
||
* @description 用于管理授权API相关的状态和操作,包括API列表、类型、分页等
|
||
*/
|
||
export const useAuthApiManageStore = defineStore('auth-api-manage-store', () => {
|
||
// -------------------- 状态定义 --------------------
|
||
const accessTypes = ref({
|
||
ssh: 'SSH',
|
||
aliyun: '阿里云',
|
||
tencentcloud: '腾讯云',
|
||
btpanel: '宝塔',
|
||
'1panel': '1Panel',
|
||
})
|
||
|
||
/** 添加/编辑API表单 */
|
||
const apiFormProps = ref({
|
||
name: '',
|
||
type: 'btpanel',
|
||
config: {
|
||
url: '',
|
||
api_key: '',
|
||
ignore_ssl: '0',
|
||
},
|
||
})
|
||
|
||
// -------------------- 请求方法 --------------------
|
||
/**
|
||
* 获取授权API列表
|
||
* @description 根据分页和关键词获取授权API列表数据
|
||
* @param {Object} params - 查询参数
|
||
* @returns {Promise<TableResponse<T>>} 返回列表数据和总数
|
||
*/
|
||
const fetchAccessList = async <T = AccessItem,>(params: AccessListParams): Promise<TableResponse<T>> => {
|
||
try {
|
||
const res = await getAccessList(params).fetch()
|
||
return {
|
||
list: (res.data || []) as T[],
|
||
total: res.count,
|
||
}
|
||
} catch (error) {
|
||
handleError(error)
|
||
return { list: [] as T[], total: 0 }
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 新增授权API
|
||
* @description 创建新的授权API配置
|
||
* @param {AddAccessParams} params - 授权API参数
|
||
* @returns {Promise<{status: boolean, message: string}>} 操作结果
|
||
*/
|
||
const addNewAccess = async (params: AddAccessParams<string>) => {
|
||
try {
|
||
const { fetch, message } = addAccess(params)
|
||
message.value = true
|
||
await fetch()
|
||
resetApiForm()
|
||
} catch (error) {
|
||
if (handleError(error)) message.error($t('t_8_1745289354902'))
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 更新授权API
|
||
* @description 更新指定的授权API配置信息
|
||
* @param {UpdateAccessParams} params - 授权API更新参数
|
||
* @returns {Promise<{status: boolean, message: string}>} 操作结果
|
||
*/
|
||
const updateExistingAccess = async (params: UpdateAccessParams<string>) => {
|
||
try {
|
||
const { fetch, message } = updateAccess(params)
|
||
message.value = true
|
||
await fetch()
|
||
resetApiForm()
|
||
} catch (error) {
|
||
if (handleError(error)) message.error($t('t_40_1745227838872'))
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除授权API
|
||
* @description 删除指定的授权API配置
|
||
* @param {number} id - 授权API ID
|
||
* @returns {Promise<{status: boolean, message: string}>} 操作结果
|
||
*/
|
||
const deleteExistingAccess = async (id: string) => {
|
||
try {
|
||
const { fetch, message } = deleteAccess({ id })
|
||
message.value = true
|
||
await fetch()
|
||
resetApiForm()
|
||
} catch (error) {
|
||
if (handleError(error)) message.error($t('t_40_1745227838872'))
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 重置API表单
|
||
* @description 重置表单数据为初始状态
|
||
*/
|
||
const resetApiForm = () => {
|
||
apiFormProps.value = {
|
||
name: '',
|
||
type: 'btpanel',
|
||
config: {
|
||
url: '',
|
||
api_key: '',
|
||
ignore_ssl: '0',
|
||
},
|
||
}
|
||
}
|
||
|
||
return {
|
||
// 状态
|
||
accessTypes,
|
||
apiFormProps,
|
||
|
||
// 方法
|
||
fetchAccessList,
|
||
addNewAccess,
|
||
updateExistingAccess,
|
||
deleteExistingAccess,
|
||
resetApiForm,
|
||
}
|
||
})
|
||
|
||
/**
|
||
* 组合式 API 使用 Store
|
||
* @description 提供对授权API管理 Store 的访问,并返回响应式引用
|
||
* @returns {Object} 包含所有 store 状态和方法的对象
|
||
*/
|
||
export const useStore = () => {
|
||
const store = useAuthApiManageStore()
|
||
return { ...store, ...storeToRefs(store) }
|
||
}
|