前端项目关键重构规范

This commit is contained in:
super
2026-01-27 20:29:40 +08:00
parent b40007e74b
commit 9c2f021b64
44 changed files with 5850 additions and 648 deletions

View File

@@ -1,68 +1,364 @@
import request from '@/utils/request'
import type {
DatabaseType,
DatabaseInfo,
DatabaseItem,
CreateDatabaseRequest,
UpdateDatabaseRequest,
DatabaseConnectionInfo,
DatabaseListParams,
DatabaseListResponse
} from '@/types/database'
/**
* 数据库管理 API
* 通过1Panel管理数据库
*/
import { request } from '@/utils/request'
// 获取数据库信息
export function getDatabaseInfo(type: DatabaseType): Promise<DatabaseInfo> {
return request.get(`/api/database/${type}/info`)
// ==================== 类型定义 ====================
/**
* 应用安装状态
*/
export interface AppInstallStatus {
isExist: boolean
name: string
app: string
version: string
status: string
createdAt: string
lastBackupAt: string
appInstallId: number
containerName: string
installPath: string
httpPort: number
httpsPort: number
}
// 启动数据库
export function startDatabase(type: DatabaseType): Promise<void> {
return request.post(`/api/database/${type}/start`)
/**
* 数据库记录
*/
export interface DatabaseRecord {
id: number
createdAt: string
name: string
from: string
mysqlName: string
format: string
username: string
password: string
permission: string
isDelete: boolean
description: string
showPassword?: boolean // 前端控制是否显示密码
}
// 停止数据库
export function stopDatabase(type: DatabaseType): Promise<void> {
return request.post(`/api/database/${type}/stop`)
/**
* 数据库列表响应
*/
export interface DatabaseListResponse {
total: number
items: DatabaseRecord[]
}
// 重启数据库
export function restartDatabase(type: DatabaseType): Promise<void> {
return request.post(`/api/database/${type}/restart`)
/**
* 创建数据库参数
*/
export interface CreateDatabaseParams {
serverId: number
name: string
username: string
password: string
format?: string // 字符集 format
collation?: string // 排序规则 collation (可选后端接口没明确提到但通常MySQL需要)
permission?: string
permissionIPs?: string
type: string // 数据库类型如mysql
database: string // 数据库名称如mysql
from?: string // 固定 'local'
description?: string
}
// 获取数据库列表
export function getDatabaseList(type: DatabaseType, params?: DatabaseListParams): Promise<DatabaseListResponse> {
return request.get(`/api/database/${type}/list`, { params })
/**
* 删除数据库参数
*/
export interface DeleteDatabaseParams {
serverId: number
id: number
type: string // 数据库类型如mysql
database: string // 数据库名称/应用类型
deleteBackup?: boolean
forceDelete?: boolean
}
// 创建数据库
export function createDatabase(type: DatabaseType, data: CreateDatabaseRequest): Promise<DatabaseItem> {
return request.post(`/api/database/${type}`, data)
/**
* 修改密码参数
*/
export interface ChangePasswordParams {
serverId: number
id: number
value: string // 新密码 (Base64)
type: string // 数据库类型
database: string // 数据库名称
from: string // 固定 'local'
}
// 更新数据库
export function updateDatabase(type: DatabaseType, id: number, data: UpdateDatabaseRequest): Promise<DatabaseItem> {
return request.put(`/api/database/${type}/${id}`, data)
/**
* 更新描述参数
*/
export interface UpdateDescriptionParams {
serverId: number
id: number
description: string
}
// 删除数据库
export function deleteDatabase(type: DatabaseType, id: number): Promise<void> {
return request.delete(`/api/database/${type}/${id}`)
/**
* 操作应用参数
*/
export interface OperateAppParams {
serverId: number
operate: 'start' | 'stop' | 'restart'
installId: number
[key: string]: any
}
// 获取连接信息
export function getDatabaseConnectionInfo(type: DatabaseType, id: number): Promise<DatabaseConnectionInfo> {
return request.get(`/api/database/${type}/${id}/connection`)
// ==================== API 方法 ====================
/**
* 检查应用安装状态MySQL/PostgreSQL/Redis等
*/
export async function checkAppInstalled(
serverId: number,
key: string,
name: string
): Promise<AppInstallStatus> {
const res = await request.post<AppInstallStatus>('/platform/database/app/check', {
serverId,
key,
name
})
return res.data.data
}
// 导出类型
export type {
DatabaseType,
DatabaseInfo,
DatabaseItem,
CreateDatabaseRequest,
UpdateDatabaseRequest,
DatabaseConnectionInfo,
DatabaseListParams,
DatabaseListResponse
/**
* 查询数据库列表
*/
export async function searchDatabases(
serverId: number,
database: string,
page: number = 1,
pageSize: number = 20
): Promise<DatabaseListResponse> {
const res = await request.post<DatabaseListResponse>('/platform/database/search', {
serverId,
database,
page,
pageSize
})
return res.data.data
}
/**
* 创建数据库
*/
export async function createDatabase(params: CreateDatabaseParams): Promise<void> {
await request.post('/platform/database/create', params)
}
/**
* 删除数据库
*/
export async function deleteDatabase(params: DeleteDatabaseParams): Promise<void> {
await request.post('/platform/database/delete', params)
}
/**
* 更新数据库描述
*/
export async function updateDatabaseDescription(params: UpdateDescriptionParams): Promise<void> {
await request.post('/platform/database/description/update', params)
}
/**
* 修改数据库密码
*/
export async function changeDatabasePassword(params: ChangePasswordParams): Promise<void> {
await request.post('/platform/database/password/change', params)
}
/**
* 操作应用(启动/停止/重启)
*/
export async function operateApp(params: OperateAppParams): Promise<void> {
await request.post('/platform/database/app/operate', params)
}
/**
* 获取数据库字符集排序规则选项
*/
export async function getFormatOptions(
serverId: number,
type: string,
database: string,
format?: string
): Promise<string[]> {
const res = await request.post<string[]>('/platform/database/format/options', {
serverId,
type,
database,
format
})
return res.data.data
}
/**
* 应用信息
*/
export interface AppInfo {
id: number
name: string
key: string
shortDescZh: string
shortDescEn: string
description: string
icon: string
type: string
status: string
website: string
github: string
document: string
versions: string[]
installed: boolean
[key: string]: any
}
/**
* 应用版本详情
*/
export interface AppDetail {
id: number
appId: number
version: string
dockerCompose: string
status: string
enable: boolean
params: {
formFields: Array<{
default: any
envKey: string
label: Record<string, string>
labelEn: string
labelZh: string
required: boolean
type: string
random?: boolean
rule?: string
}>
}
[key: string]: any
}
/**
* 安装应用参数
*/
export interface InstallAppParams {
serverId: number
appDetailId: number
name: string
version: string
params: Record<string, any>
dockerCompose: string
taskID: string // 任务ID用于查询安装日志
// 高级设置
advanced?: boolean
containerName?: string
allowPort?: boolean
specifyIP?: string
restartPolicy?: string
cpuQuota?: number
memoryLimit?: number
memoryUnit?: string
pullImage?: boolean
editCompose?: boolean
gpuConfig?: boolean
appID?: string
format?: string
collation?: string
}
/**
* 安装应用返回结果
*/
export interface InstallAppResult {
id: number
name: string
appId: number
appDetailId: number
version: string
status: string
containerName: string
httpPort: number
[key: string]: any
}
/**
* 任务日志响应
*/
export interface TaskLogResponse {
end: boolean
path: string
total: number
taskStatus: string
lines: string[]
totalLines: number
}
/**
* 获取应用信息如Redis
*/
export async function getAppInfo(
serverId: number,
appKey: string
): Promise<AppInfo> {
const res = await request.post<AppInfo>('/platform/database/app/info', {
serverId,
appKey
})
return res.data.data
}
/**
* 获取应用版本详情
*/
export async function getAppDetail(
serverId: number,
appId: number,
version: string
): Promise<AppDetail> {
const res = await request.post<AppDetail>('/platform/database/app/detail', {
serverId,
appId,
version
})
return res.data.data
}
/**
* 安装应用
*/
export async function installApp(params: InstallAppParams): Promise<InstallAppResult> {
const { serverId, ...restParams } = params
const res = await request.post<InstallAppResult>('/platform/database/app/install', {
serverId,
...restParams
})
return res.data.data
}
/**
* 读取任务日志
*/
export async function readTaskLog(
serverId: number,
taskId: string,
page: number = 1,
pageSize: number = 500
): Promise<TaskLogResponse> {
const res = await request.post<TaskLogResponse>('/platform/database/task/log', {
serverId,
taskId,
page,
pageSize
})
return res.data.data
}