file.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import axios from 'axios';
  2. import type { MinioUploadPolicy, OSSUploadPolicy } from '@d8d-appcontainer/types';
  3. import type {
  4. FileLibrary, FileCategory
  5. } from '../../share/types.ts';
  6. interface FileUploadPolicyResponse {
  7. message: string;
  8. data: MinioUploadPolicy | OSSUploadPolicy;
  9. }
  10. interface FileListResponse {
  11. message: string;
  12. data: {
  13. list: FileLibrary[];
  14. pagination: {
  15. current: number;
  16. pageSize: number;
  17. total: number;
  18. };
  19. };
  20. }
  21. interface FileSaveResponse {
  22. message: string;
  23. data: FileLibrary;
  24. }
  25. interface FileInfoResponse {
  26. message: string;
  27. data: FileLibrary;
  28. }
  29. interface FileDeleteResponse {
  30. message: string;
  31. }
  32. interface FileCategoryListResponse {
  33. data: FileCategory[];
  34. total: number;
  35. page: number;
  36. pageSize: number;
  37. }
  38. interface FileCategoryCreateResponse {
  39. message: string;
  40. data: FileCategory;
  41. }
  42. interface FileCategoryUpdateResponse {
  43. message: string;
  44. data: FileCategory;
  45. }
  46. interface FileCategoryDeleteResponse {
  47. message: string;
  48. }
  49. // 文件管理API
  50. export const FileAPI = {
  51. // 获取文件上传策略
  52. getUploadPolicy: async (filename: string, prefix: string = 'uploads/', maxSize: number = 10 * 1024 * 1024): Promise<FileUploadPolicyResponse> => {
  53. try {
  54. const response = await axios.get('/upload/policy', {
  55. params: { filename, prefix, maxSize }
  56. });
  57. return response.data;
  58. } catch (error) {
  59. throw error;
  60. }
  61. },
  62. // 保存文件信息
  63. saveFileInfo: async (fileData: Partial<FileLibrary>): Promise<FileSaveResponse> => {
  64. try {
  65. const response = await axios.post('/upload/save', fileData);
  66. return response.data;
  67. } catch (error) {
  68. throw error;
  69. }
  70. },
  71. // 获取文件列表
  72. getFileList: async (params?: {
  73. page?: number,
  74. pageSize?: number,
  75. category_id?: number,
  76. fileType?: string,
  77. keyword?: string
  78. }): Promise<FileListResponse> => {
  79. try {
  80. const response = await axios.get('/upload/list', { params });
  81. return response.data;
  82. } catch (error) {
  83. throw error;
  84. }
  85. },
  86. // 获取单个文件信息
  87. getFileInfo: async (id: number): Promise<FileInfoResponse> => {
  88. try {
  89. const response = await axios.get(`/upload/${id}`);
  90. return response.data;
  91. } catch (error) {
  92. throw error;
  93. }
  94. },
  95. // 更新文件下载计数
  96. updateDownloadCount: async (id: number): Promise<FileDeleteResponse> => {
  97. try {
  98. const response = await axios.post(`/upload/${id}/download`);
  99. return response.data;
  100. } catch (error) {
  101. throw error;
  102. }
  103. },
  104. // 删除文件
  105. deleteFile: async (id: number): Promise<FileDeleteResponse> => {
  106. try {
  107. const response = await axios.delete(`/upload/${id}`);
  108. return response.data;
  109. } catch (error) {
  110. throw error;
  111. }
  112. },
  113. // 获取文件分类列表
  114. getCategories: async (params?: {
  115. page?: number,
  116. pageSize?: number,
  117. search?: string
  118. }): Promise<FileCategoryListResponse> => {
  119. try {
  120. const response = await axios.get('/file-categories', { params });
  121. return response.data;
  122. } catch (error) {
  123. throw error;
  124. }
  125. },
  126. // 创建文件分类
  127. createCategory: async (data: Partial<FileCategory>): Promise<FileCategoryCreateResponse> => {
  128. try {
  129. const response = await axios.post('/file-categories', data);
  130. return response.data;
  131. } catch (error) {
  132. throw error;
  133. }
  134. },
  135. // 更新文件分类
  136. updateCategory: async (id: number, data: Partial<FileCategory>): Promise<FileCategoryUpdateResponse> => {
  137. try {
  138. const response = await axios.put(`/file-categories/${id}`, data);
  139. return response.data;
  140. } catch (error) {
  141. throw error;
  142. }
  143. },
  144. // 删除文件分类
  145. deleteCategory: async (id: number): Promise<FileCategoryDeleteResponse> => {
  146. try {
  147. const response = await axios.delete(`/file-categories/${id}`);
  148. return response.data;
  149. } catch (error) {
  150. throw error;
  151. }
  152. }
  153. };