2
0

files.ts 3.6 KB

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