_file-manager.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import { MockRequest, MockStatusError } from '@delon/mock';
  2. import { deepCopy } from '@delon/util';
  3. import { Random } from 'mockjs';
  4. import { genMp } from './utils';
  5. interface FileItem {
  6. id?: number;
  7. parent_id?: number;
  8. type?: 'folder' | 'file';
  9. title?: string;
  10. mp?: string;
  11. ext?: string;
  12. size?: number;
  13. width?: number;
  14. height?: number;
  15. created?: Date;
  16. }
  17. let point = 1;
  18. let DATA: FileItem[] = [];
  19. DATA = DATA.concat(...genFolds(0, 3), ...genFiles(1, 6), ...genFiles(2, 3), ...genFiles(0, 1, 'zip'), ...genFiles(0, 10));
  20. function genFolds(parent_id: number, count: number): FileItem[] {
  21. return new Array(count).fill({}).map(() => {
  22. return {
  23. id: point++,
  24. parent_id,
  25. type: 'folder',
  26. ext: 'folder',
  27. title: Random.ctitle(3, 5),
  28. created: new Date()
  29. } as FileItem;
  30. });
  31. }
  32. function genFiles(parent_id: number, count: number, ext: string = 'png'): FileItem[] {
  33. return new Array(count).fill({}).map(() => {
  34. return {
  35. id: point++,
  36. parent_id,
  37. type: 'file',
  38. title: `${Random.ctitle(3, 5)}.${ext}`,
  39. mp: genMp(),
  40. is_img: ext === 'png',
  41. ext,
  42. size: Random.natural(10, 10000),
  43. width: Random.natural(100, 1000),
  44. height: Random.natural(100, 1000),
  45. created: new Date()
  46. } as FileItem;
  47. });
  48. }
  49. function get(params: any): any {
  50. let ret = deepCopy(DATA) as FileItem[];
  51. const parent_id = +(params.parent_id || '0');
  52. ret = ret.filter(data => data.parent_id === parent_id);
  53. if (params.type) {
  54. ret = ret.filter(data => data.type!.indexOf(params.type) > -1);
  55. }
  56. if (params.q) {
  57. ret = ret.filter(data => data.title!.indexOf(params.q) > -1);
  58. }
  59. return ret;
  60. }
  61. function getIdx(id: number): number {
  62. id = +id;
  63. const idx = DATA.findIndex(w => w.id === id);
  64. if (idx === -1) {
  65. throw new MockStatusError(404);
  66. }
  67. return idx;
  68. }
  69. export const FILES = {
  70. '/file/folder': () => deepCopy(DATA).filter((w: any) => w.type === 'folder'),
  71. '/file': (req: MockRequest) => {
  72. const pi = +(req.queryString.pi || 1);
  73. const ps = +(req.queryString.ps || 10);
  74. const data = get(req.queryString);
  75. return {
  76. total: data.length,
  77. list: data.slice((pi - 1) * ps, pi * ps)
  78. };
  79. },
  80. 'POST /file': (req: MockRequest) => {
  81. const file = req.body.get('file') as File;
  82. const parent_id = +req.body.get('parent_id');
  83. const item = Object.assign(genFiles(req.body.parent_id, 1)[0], {
  84. parent_id,
  85. title: file.name,
  86. size: file.size
  87. });
  88. DATA.push(item);
  89. return { msg: 'ok', item };
  90. },
  91. '/file/:id': (req: MockRequest) => {
  92. const idx = getIdx(req.params.id || 0);
  93. const item = { ...DATA[idx], ...req.body };
  94. return item;
  95. },
  96. 'POST /file/rename': (req: MockRequest) => {
  97. const idx = getIdx(req.body.id || 0);
  98. DATA[idx].title = req.body.title;
  99. return { msg: 'ok', item: DATA[idx] };
  100. },
  101. 'POST /file/move': (req: MockRequest) => {
  102. const idx = getIdx(req.body.id || 0);
  103. DATA[idx].parent_id = req.body.moveId;
  104. return { msg: 'ok', item: DATA[idx] };
  105. },
  106. 'POST /file/copy/:id': (req: MockRequest) => {
  107. const idx = getIdx(req.params.id || 0);
  108. const item = { ...DATA[idx], id: point++ };
  109. item.title += ' - Copy';
  110. DATA.push(item);
  111. return { msg: 'ok', item };
  112. },
  113. 'DELETE /file/:id': (req: MockRequest) => {
  114. const idx = getIdx(req.params.id || 0);
  115. DATA.splice(idx, 1);
  116. return { msg: 'ok' };
  117. }
  118. };