Files
xk-admin/apps/web-antd/src/api/core/file-gallery.ts

195 lines
4.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { requestClient } from '#/api/request';
const prefix = 'file-gallery/';
export interface FileGalleryItem {
id: number;
url: string;
file_name?: string;
file_size: number;
file_size_text: string;
type?: number;
type_text?: string;
type_icon?: string;
group_ids?: number[];
created_at?: string;
original_name?: string;
object_key?: string;
source?: number;
is_qrcode?: number;
ref_count?: number;
folder_id?: number;
}
export interface FileTypeItem {
id: number;
name: string;
icon?: string;
value: number;
suffix: string;
sort: number;
}
export interface FileGalleryDetail extends FileGalleryItem {
source_text?: string;
updated_at?: string;
}
export interface FileGalleryStats {
total_count: number;
total_size: number;
total_size_text: string;
unref_count: number;
recyclable_size: number;
recyclable_size_text: string;
has_scanned: boolean;
}
export interface FileGalleryListParams {
page?: number;
page_size?: number;
pid?: number;
type?: number;
group_id?: number;
keyword?: string;
exclude_qrcode?: number;
unref_only?: number;
folder_id?: number;
unfiled?: number;
}
export async function getFileGalleryList(params?: FileGalleryListParams) {
return requestClient.get<{
items: FileGalleryItem[];
page: number;
page_size: number;
total: number;
}>(`${prefix}list`, { params });
}
export async function getFileGalleryDetail(id: number) {
return requestClient.get<FileGalleryDetail>(`${prefix}detail`, {
params: { id },
});
}
export async function deleteFileGalleryItem(id: number | number[]) {
const data = Array.isArray(id) ? { ids: id } : { id };
return requestClient.post<any>(`${prefix}delete`, data);
}
export async function renameFileGalleryItem(id: number, file_name: string) {
return requestClient.post<any>(`${prefix}rename`, { id, file_name });
}
export async function moveFileGalleryType(id: number, type: number) {
return requestClient.post<any>(`${prefix}move-type`, { id, type });
}
export async function batchArchiveFiles() {
return requestClient.post<{
file_name_filled: number;
reclassified: number;
}>(`${prefix}batch-archive`);
}
export async function getFileTypes() {
return requestClient.get<FileTypeItem[]>(`${prefix}file-types`);
}
/** 规划 OSS 同步日期分组(full 全部 / incremental 从库内最新日期起) */
export async function planFileGalleryOssSync(data?: { mode?: 'full' | 'incremental' }) {
return requestClient.post<{
mode: 'full' | 'incremental';
prefixes: string[];
total: number;
since_date: string;
}>(`${prefix}sync-oss-plan`, data ?? {});
}
/** 从 OSS 同步一批(按日期 prefix + marker;全部组结束后 finalize=1) */
export async function syncFileGalleryFromOss(data?: {
limit?: number;
marker?: string;
prefix?: string;
finalize?: number;
}) {
return requestClient.post<{
scanned: number;
skipped: number;
synced: number;
next_marker: string;
done: boolean;
folder_created: number;
prefix: string;
}>(`${prefix}sync-oss`, data ?? {});
}
/** 文件加入自定义分组 */
export async function addFileToGroup(file_id: number, group_id: number) {
return requestClient.post<any>(`${prefix}add-to-group`, {
file_id,
group_id,
});
}
/** 文件移出自定义分组 */
export async function removeFileFromGroup(file_id: number, group_id: number) {
return requestClient.post<any>(`${prefix}remove-from-group`, {
file_id,
group_id,
});
}
/** 素材库统计:总数 / 容量 / 未引用 / 可回收 */
export async function getFileGalleryStats() {
return requestClient.get<FileGalleryStats>(`${prefix}stats`);
}
/** 右键标记或取消二维码 */
export async function markFileQrcode(id: number, is_qrcode: number) {
return requestClient.post<{ id: number; is_qrcode: number }>(
`${prefix}mark-qrcode`,
{
id,
is_qrcode,
},
);
}
/** 扫描业务表 URL 引用(两库全表文本列) */
export async function scanFileGalleryRefs() {
return requestClient.post<{
elapsed_ms: number;
mysql_columns: number;
mysql_failed: number;
old_mysql_columns: number;
old_mysql_failed: number;
referenced: number;
scanned_files: number;
unreferenced: number;
}>(`${prefix}scan-refs`);
}
/** 批量加入分组(移动到文件夹) */
export async function batchAddFilesToGroup(ids: number[], group_id: number) {
return requestClient.post<{ count: number; group_id: number }>(
`${prefix}batch-add-to-group`,
{
ids,
group_id,
},
);
}
/** 批量移入真实文件夹 */
export async function batchMoveFilesToFolder(ids: number[], folder_id: number) {
return requestClient.post<{ count: number; folder_id: number }>(
`${prefix}batch-move-to-folder`,
{
ids,
folder_id,
},
);
}