前端项目关键重构规范
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user