132 lines
2.8 KiB
JavaScript
132 lines
2.8 KiB
JavaScript
/**
|
||
* 文件系统相关 API
|
||
*/
|
||
import request from '@/utils/request'
|
||
|
||
/**
|
||
* 获取项目目录树
|
||
*/
|
||
export function getProjectTree(projectId) {
|
||
return request({
|
||
url: `/files/${projectId}/tree`,
|
||
method: 'get',
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取文件内容
|
||
*/
|
||
export function getFileContent(projectId, path) {
|
||
// 直接在 URL 中拼接参数,避免 axios 自动编码
|
||
// 手动编码一次,确保不会双重编码
|
||
const encodedPath = encodeURIComponent(path)
|
||
|
||
return request({
|
||
url: `/files/${projectId}/file?path=${encodedPath}`,
|
||
method: 'get',
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 保存文件内容
|
||
*/
|
||
export function saveFile(projectId, data) {
|
||
return request({
|
||
url: `/files/${projectId}/file`,
|
||
method: 'post',
|
||
data,
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 文件操作(重命名/删除/创建)
|
||
*/
|
||
export function operateFile(projectId, data) {
|
||
return request({
|
||
url: `/files/${projectId}/file/operate`,
|
||
method: 'post',
|
||
data,
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 上传文件
|
||
*/
|
||
export function uploadFile(projectId, file, subfolder = 'images') {
|
||
const formData = new FormData()
|
||
formData.append('file', file)
|
||
|
||
return request({
|
||
url: `/files/${projectId}/upload?subfolder=${subfolder}`,
|
||
method: 'post',
|
||
data: formData,
|
||
headers: {
|
||
'Content-Type': 'multipart/form-data',
|
||
},
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取资源文件 URL(公开访问,支持分享)
|
||
*/
|
||
export function getAssetUrl(projectId, subfolder, filename) {
|
||
return `/api/v1/files/${projectId}/assets/${subfolder}/${filename}`
|
||
}
|
||
|
||
/**
|
||
* 批量导入Markdown文档
|
||
*/
|
||
export function importDocuments(projectId, files, targetPath = '') {
|
||
const formData = new FormData()
|
||
files.forEach((file) => {
|
||
formData.append('files', file)
|
||
})
|
||
|
||
return request({
|
||
url: `/files/${projectId}/import-documents?target_path=${targetPath}`,
|
||
method: 'post',
|
||
data: formData,
|
||
headers: {
|
||
'Content-Type': 'multipart/form-data',
|
||
},
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 导出目录为ZIP
|
||
*/
|
||
export function exportDirectory(projectId, directoryPath = '') {
|
||
return request({
|
||
url: `/files/${projectId}/export-directory`,
|
||
method: 'get',
|
||
params: { directory_path: directoryPath },
|
||
responseType: 'blob',
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 上传文档文件(PDF等)
|
||
*/
|
||
export function uploadDocument(projectId, file, targetDir = '') {
|
||
const formData = new FormData()
|
||
formData.append('file', file)
|
||
|
||
return request({
|
||
url: `/files/${projectId}/upload-document?target_dir=${encodeURIComponent(targetDir)}`,
|
||
method: 'post',
|
||
data: formData,
|
||
headers: {
|
||
'Content-Type': 'multipart/form-data',
|
||
},
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取文档文件URL(PDF等)
|
||
*/
|
||
export function getDocumentUrl(projectId, path) {
|
||
// 将路径的每个部分分别编码,但保留斜杠
|
||
const encodedPath = path.split('/').map(part => encodeURIComponent(part)).join('/')
|
||
return `/api/v1/files/${projectId}/document/${encodedPath}`
|
||
}
|