You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { IFile, IFolder } from '@/interfaces/database/file-manager';
  2. import fileManagerService from '@/services/fileManagerService';
  3. import omit from 'lodash/omit';
  4. import { DvaModel } from 'umi';
  5. export interface FileManagerModelState {
  6. fileList: IFile[];
  7. parentFolderList: IFolder[];
  8. }
  9. const model: DvaModel<FileManagerModelState> = {
  10. namespace: 'fileManager',
  11. state: { fileList: [], parentFolderList: [] },
  12. reducers: {
  13. setFileList(state, { payload }) {
  14. return { ...state, fileList: payload };
  15. },
  16. setParentFolderList(state, { payload }) {
  17. return { ...state, parentFolderList: payload };
  18. },
  19. },
  20. effects: {
  21. *removeFile({ payload = {} }, { call, put }) {
  22. const { data } = yield call(fileManagerService.removeFile, {
  23. fileIds: payload.fileIds,
  24. });
  25. const { retcode } = data;
  26. if (retcode === 0) {
  27. yield put({
  28. type: 'listFile',
  29. payload: { parentId: payload.parentId },
  30. });
  31. }
  32. },
  33. *listFile({ payload = {} }, { call, put }) {
  34. const { data } = yield call(fileManagerService.listFile, payload);
  35. const { retcode, data: res } = data;
  36. if (retcode === 0 && Array.isArray(res.files)) {
  37. yield put({
  38. type: 'setFileList',
  39. payload: res.files,
  40. });
  41. }
  42. },
  43. *renameFile({ payload = {} }, { call, put }) {
  44. const { data } = yield call(
  45. fileManagerService.renameFile,
  46. omit(payload, ['parentId']),
  47. );
  48. if (data.retcode === 0) {
  49. yield put({
  50. type: 'listFile',
  51. payload: { parentId: payload.parentId },
  52. });
  53. }
  54. return data.retcode;
  55. },
  56. *uploadFile({ payload = {} }, { call, put }) {
  57. const formData = new FormData();
  58. formData.append('parent_id', payload.parentId);
  59. formData.append('file', payload.file);
  60. formData.append('path', payload.path);
  61. const { data } = yield call(fileManagerService.uploadFile, formData);
  62. if (data.retcode === 0) {
  63. yield put({
  64. type: 'listFile',
  65. payload: { parentId: payload.parentId },
  66. });
  67. }
  68. return data.retcode;
  69. },
  70. *createFolder({ payload = {} }, { call, put }) {
  71. const { data } = yield call(fileManagerService.createFolder, payload);
  72. if (data.retcode === 0) {
  73. yield put({
  74. type: 'listFile',
  75. payload: { parentId: payload.parentId },
  76. });
  77. }
  78. return data.retcode;
  79. },
  80. *getAllParentFolder({ payload = {} }, { call, put }) {
  81. const { data } = yield call(
  82. fileManagerService.getAllParentFolder,
  83. payload,
  84. );
  85. if (data.retcode === 0) {
  86. yield put({
  87. type: 'setParentFolderList',
  88. payload: data.data?.parent_folders ?? [],
  89. });
  90. }
  91. return data.retcode;
  92. },
  93. *connectFileToKnowledge({ payload = {} }, { call, put }) {
  94. const { data } = yield call(
  95. fileManagerService.connectFileToKnowledge,
  96. omit(payload, 'parentId'),
  97. );
  98. if (data.retcode === 0) {
  99. yield put({
  100. type: 'listFile',
  101. payload: { parentId: payload.parentId },
  102. });
  103. }
  104. return data.retcode;
  105. },
  106. },
  107. };
  108. export default model;