127 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { MockRequest, MockStatusError } from '@delon/mock';
 | 
						|
import { deepCopy } from '@delon/util';
 | 
						|
import { Random } from 'mockjs';
 | 
						|
 | 
						|
import { genMp } from './utils';
 | 
						|
 | 
						|
interface FileItem {
 | 
						|
  id?: number;
 | 
						|
  parent_id?: number;
 | 
						|
  type?: 'folder' | 'file';
 | 
						|
  title?: string;
 | 
						|
  mp?: string;
 | 
						|
  ext?: string;
 | 
						|
  size?: number;
 | 
						|
  width?: number;
 | 
						|
  height?: number;
 | 
						|
  created?: Date;
 | 
						|
}
 | 
						|
 | 
						|
let point = 1;
 | 
						|
let DATA: FileItem[] = [];
 | 
						|
DATA = DATA.concat(...genFolds(0, 3), ...genFiles(1, 6), ...genFiles(2, 3), ...genFiles(0, 1, 'zip'), ...genFiles(0, 10));
 | 
						|
 | 
						|
function genFolds(parent_id: number, count: number): FileItem[] {
 | 
						|
  return new Array(count).fill({}).map(() => {
 | 
						|
    return {
 | 
						|
      id: point++,
 | 
						|
      parent_id,
 | 
						|
      type: 'folder',
 | 
						|
      ext: 'folder',
 | 
						|
      title: Random.ctitle(3, 5),
 | 
						|
      created: new Date()
 | 
						|
    } as FileItem;
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function genFiles(parent_id: number, count: number, ext: string = 'png'): FileItem[] {
 | 
						|
  return new Array(count).fill({}).map(() => {
 | 
						|
    return {
 | 
						|
      id: point++,
 | 
						|
      parent_id,
 | 
						|
      type: 'file',
 | 
						|
      title: `${Random.ctitle(3, 5)}.${ext}`,
 | 
						|
      mp: genMp(),
 | 
						|
      is_img: ext === 'png',
 | 
						|
      ext,
 | 
						|
      size: Random.natural(10, 10000),
 | 
						|
      width: Random.natural(100, 1000),
 | 
						|
      height: Random.natural(100, 1000),
 | 
						|
      created: new Date()
 | 
						|
    } as FileItem;
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function get(params: any): any {
 | 
						|
  let ret = deepCopy(DATA) as FileItem[];
 | 
						|
  const parent_id = +(params.parent_id || '0');
 | 
						|
  ret = ret.filter(data => data.parent_id === parent_id);
 | 
						|
  if (params.type) {
 | 
						|
    ret = ret.filter(data => data.type!.indexOf(params.type) > -1);
 | 
						|
  }
 | 
						|
  if (params.q) {
 | 
						|
    ret = ret.filter(data => data.title!.indexOf(params.q) > -1);
 | 
						|
  }
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
function getIdx(id: number): number {
 | 
						|
  id = +id;
 | 
						|
  const idx = DATA.findIndex(w => w.id === id);
 | 
						|
  if (idx === -1) {
 | 
						|
    throw new MockStatusError(404);
 | 
						|
  }
 | 
						|
  return idx;
 | 
						|
}
 | 
						|
 | 
						|
export const FILES = {
 | 
						|
  '/file/folder': () => deepCopy(DATA).filter((w: any) => w.type === 'folder'),
 | 
						|
  '/file': (req: MockRequest) => {
 | 
						|
    const pi = +(req.queryString.pi || 1);
 | 
						|
    const ps = +(req.queryString.ps || 10);
 | 
						|
    const data = get(req.queryString);
 | 
						|
    return {
 | 
						|
      total: data.length,
 | 
						|
      list: data.slice((pi - 1) * ps, pi * ps)
 | 
						|
    };
 | 
						|
  },
 | 
						|
  'POST /file': (req: MockRequest) => {
 | 
						|
    const file = req.body.get('file') as File;
 | 
						|
    const parent_id = +req.body.get('parent_id');
 | 
						|
    const item = Object.assign(genFiles(req.body.parent_id, 1)[0], {
 | 
						|
      parent_id,
 | 
						|
      title: file.name,
 | 
						|
      size: file.size
 | 
						|
    });
 | 
						|
    DATA.push(item);
 | 
						|
    return { msg: 'ok', item };
 | 
						|
  },
 | 
						|
  '/file/:id': (req: MockRequest) => {
 | 
						|
    const idx = getIdx(req.params.id || 0);
 | 
						|
    const item = { ...DATA[idx], ...req.body };
 | 
						|
    return item;
 | 
						|
  },
 | 
						|
  'POST /file/rename': (req: MockRequest) => {
 | 
						|
    const idx = getIdx(req.body.id || 0);
 | 
						|
    DATA[idx].title = req.body.title;
 | 
						|
    return { msg: 'ok', item: DATA[idx] };
 | 
						|
  },
 | 
						|
  'POST /file/move': (req: MockRequest) => {
 | 
						|
    const idx = getIdx(req.body.id || 0);
 | 
						|
    DATA[idx].parent_id = req.body.moveId;
 | 
						|
    return { msg: 'ok', item: DATA[idx] };
 | 
						|
  },
 | 
						|
  'POST /file/copy/:id': (req: MockRequest) => {
 | 
						|
    const idx = getIdx(req.params.id || 0);
 | 
						|
    const item = { ...DATA[idx], id: point++ };
 | 
						|
    item.title += ' - Copy';
 | 
						|
    DATA.push(item);
 | 
						|
    return { msg: 'ok', item };
 | 
						|
  },
 | 
						|
  'DELETE /file/:id': (req: MockRequest) => {
 | 
						|
    const idx = getIdx(req.params.id || 0);
 | 
						|
    DATA.splice(idx, 1);
 | 
						|
    return { msg: 'ok' };
 | 
						|
  }
 | 
						|
};
 |