mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-13 18:10:53 +08:00
124 lines
3.1 KiB
TypeScript
124 lines
3.1 KiB
TypeScript
import { defineStore, storeToRefs } from 'pinia'
|
|
import { getCertList, uploadCert, deleteCert } from '@/api/cert'
|
|
import { useError } from '@baota/hooks/error'
|
|
import { $t } from '@locales/index'
|
|
import type { CertItem, UploadCertParams, CertListParams } from '@/types/cert'
|
|
import type { TableResponse } from '@baota/naive-ui/types/table'
|
|
|
|
// 导入错误处理钩子
|
|
const { handleError } = useError()
|
|
|
|
/**
|
|
* 证书管理状态 Store
|
|
* @description 用于管理证书相关的状态和操作,包括证书列表、上传、下载等
|
|
*/
|
|
export const useCertManageStore = defineStore('cert-manage-store', () => {
|
|
// -------------------- 状态定义 --------------------
|
|
// 上传证书表单
|
|
const uploadForm = ref<UploadCertParams>({
|
|
cert_id: '',
|
|
cert: '',
|
|
key: '',
|
|
})
|
|
|
|
// -------------------- 工具方法 --------------------
|
|
/**
|
|
* 获取证书列表
|
|
* @description 根据分页参数获取证书列表数据
|
|
* @param {CertListParams} params - 查询参数
|
|
* @returns {Promise<TableResponse<T>>} 返回列表数据和总数
|
|
*/
|
|
const fetchCertList = async <T = CertItem,>(params: CertListParams): Promise<TableResponse<T>> => {
|
|
try {
|
|
const { data, count } = await getCertList(params).fetch()
|
|
return {
|
|
list: (data || []) as T[],
|
|
total: count,
|
|
}
|
|
} catch (error) {
|
|
handleError(error)
|
|
return { list: [] as T[], total: 0 }
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 下载证书
|
|
* @description 下载指定ID的证书文件
|
|
* @param {number} id - 证书ID
|
|
* @returns {Promise<boolean>} 是否下载成功
|
|
*/
|
|
const downloadExistingCert = (id: string) => {
|
|
try {
|
|
const link = document.createElement('a')
|
|
link.href = '/v1/cert/download?id=' + id
|
|
link.target = '_blank'
|
|
link.click()
|
|
} catch (error) {
|
|
handleError(error).default($t('t_38_1745227838813'))
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 上传证书
|
|
* @description 上传新证书
|
|
* @param {UploadCertParams} params - 上传证书参数
|
|
* @returns {Promise<boolean>} 是否上传成功
|
|
*/
|
|
const uploadNewCert = async (params: UploadCertParams) => {
|
|
try {
|
|
const { message, fetch } = uploadCert(params)
|
|
message.value = true
|
|
await fetch()
|
|
} catch (error) {
|
|
handleError(error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除证书
|
|
* @description 删除指定ID的证书
|
|
* @param {number} id - 证书ID
|
|
* @returns {Promise<boolean>} 是否删除成功
|
|
*/
|
|
const deleteExistingCert = async (id: string) => {
|
|
try {
|
|
const { message, fetch } = deleteCert({ id })
|
|
message.value = true
|
|
await fetch()
|
|
} catch (error) {
|
|
handleError(error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @description 重置上传证书表单
|
|
*/
|
|
const resetUploadForm = () => {
|
|
uploadForm.value = {
|
|
cert: '',
|
|
key: '',
|
|
}
|
|
}
|
|
|
|
return {
|
|
// 状态
|
|
uploadForm,
|
|
// 方法
|
|
fetchCertList,
|
|
downloadExistingCert,
|
|
uploadNewCert,
|
|
deleteExistingCert,
|
|
resetUploadForm,
|
|
}
|
|
})
|
|
|
|
/**
|
|
* 组合式 API 使用 Store
|
|
* @description 提供对证书管理 Store 的访问,并返回响应式引用
|
|
* @returns {Object} 包含所有 store 状态和方法的对象
|
|
*/
|
|
export const useStore = () => {
|
|
const store = useCertManageStore()
|
|
return { ...store, ...storeToRefs(store) }
|
|
}
|