/** @format */ import { action, makeObservable, observable } from "mobx"; import { isHydrated, makePersistable } from "mobx-persist-store"; import { handleLocalforage } from "@/utils/localforage"; export class useFileStore { filePath: any[] = []; // 文件路径 currentStorage: string = ""; // 当前存储商 currentBucket: string = ""; // 当前存储桶 currentFile: string = ""; // 当前文件 copyFile: string = ""; // 复制的文件地址 pasteFile: string = ""; //粘贴的地址 copyFileName: string = ""; // 复制的文件名 uploadFileStorage: string = ""; // 上传文件的存储商 uploadFileBucket: string = ""; // 上传文件的存储桶 uploadFilePath: string = ""; // 上传文件的路径 constructor() { makeObservable(this, { filePath: observable, currentStorage: observable, currentFile: observable, currentBucket: observable, copyFile: observable, pasteFile: observable, copyFileName: observable, uploadFileStorage: observable, uploadFileBucket: observable, uploadFilePath: observable, setFilePath: action, getFilePath: action, clearFilePath: action, getFilePathSecondLast: action, getMiddlePath: action, clearAllFilePath: action, getFilePathExceptFirst: action, setCurrentBucket: action, setCurrentStorage: action, getCurrentBucket: action, getCurrentStorage: action, getCurrentFile: action, setCurrentFile: action, isHydrated: action, setCopyFile: action, getCopyFile: action, setPasteFile: action, getPasteFile: action, getCopyFileName: action, setCopyFileName: action, setUploadFileStorage: action, getUploadFileStorage: action, setUploadFileBucket: action, getUploadFileBucket: action, setUploadFilePath: action, getUploadFilePath: action, }); makePersistable( this, { // 在构造函数内使用 makePersistable name: "file", // 保存的name,用于在storage中的名称标识,只要不和storage中其他名称重复就可以 properties: [ "filePath", "currentStorage", "currentBucket", "currentFile", "copyFile", "pasteFile", "copyFileName", ], // 要保存的字段,这些字段会被保存在name对应的storage中,注意:不写在这里面的字段将不会被保存,刷新页面也将丢失:get字段例外。get数据会在数据返回后再自动计算 storage: handleLocalforage, // 保存的位置:可以是localStorage,sessionstorage // removeOnExpiration: true, //如果 expireIn 具有值且已过期,则在调用 getItem 时将自动删除存储中的数据。默认值为 true。 // stringify: false, //如果为 true,则数据在传递给 setItem 之前将是 JSON.stringify。默认值为 true。 // expireIn: 2592000000, // 一个以毫秒为单位的值,用于确定 getItem 何时不应检索存储中的数据。默认情况下永不过期。 // debugMode: false, // 如果为 true,将为多个 mobx-persist-store 项调用 console.info。默认值为 false。 }, { // delay: 0, // 允许您设置一个 delay 选项来限制 write 函数的调用次数。默认情况下没有延迟。 // fireImmediately: false, // 确定是应立即保留存储数据,还是等到存储中的属性发生更改。 false 默认情况下。 }, ).then( action(() => { // persist 完成的回调,在这里可以执行一些拿到数据后需要执行的操作,如果在页面上要判断是否完成persist,使用 isHydrated // console.log(persistStore) }), ); } // 获取文件路径 getFilePath() { return this.filePath ? this.filePath : []; } // 设置文件路径 setFilePath(path: any) { this.filePath.push(path); } // 删除文件路径最后一个 clearFilePath() { if (this.filePath.length === 1) { return; } this.filePath.pop(); } // 清空所有文件路径 clearAllFilePath() { this.filePath.splice(0); } // 获取文件路径倒数第二个 getFilePathSecondLast() { return this.filePath.slice(0, -1).pop(); } // 获取文件路径除了第一个 getFilePathExceptFirst() { if (this.filePath.length === 1) { return ""; } else { return this.filePath.slice(1).join("/"); } } // 获取文件路径中间路径 getMiddlePath() { if (this.filePath.length <= 2) { return " "; } return this.filePath.slice(1, this.filePath.length - 1).join("/"); } isHydrated() { return isHydrated(this); } // 设置当前存储桶 setCurrentBucket(currentBucket: string) { this.currentBucket = currentBucket; } // 设置当前存储商 setCurrentStorage(currentStorage: string) { this.currentStorage = currentStorage; } // 获取当前存储商 getCurrentStorage() { return this.currentStorage ? this.currentStorage : null; } // 获取当前存储桶 getCurrentBucket() { return this.currentBucket ? this.currentBucket : null; } // 获取当前文件 getCurrentFile() { return this.currentFile ? this.currentFile : null; } // 设置当前文件 setCurrentFile(currentFile: string) { return (this.currentFile = currentFile); } //设置复制文件 setCopyFile(copyFile: string) { this.copyFile = copyFile; } // 设置粘贴文件 setPasteFile(pasteFile: string) { this.pasteFile = pasteFile; } // 获取复制文件 getCopyFile() { return this.copyFile ? this.copyFile : null; } // 获取粘贴文件 getPasteFile() { return this.pasteFile ? this.pasteFile : null; } // 设置文件名称 setCopyFileName(copyFileName: string) { this.copyFileName = copyFileName; } // 获取文件名称 getCopyFileName() { return this.copyFileName ? this.copyFileName : null; } setUploadFileStorage(uploadFileStorage: string) { this.uploadFileStorage = uploadFileStorage; } getUploadFileStorage() { return this.uploadFileStorage ? this.uploadFileStorage : null; } setUploadFileBucket(uploadFileBucket: string) { this.uploadFileBucket = uploadFileBucket; } getUploadFileBucket() { return this.uploadFileBucket ? this.uploadFileBucket : null; } setUploadFilePath(uploadFilePath: string) { this.uploadFilePath = uploadFilePath; } getUploadFilePath() { return this.uploadFilePath ? this.uploadFilePath : null; } }