mirror of https://gitee.com/cf-fz/WebCAD.git
parent
0c30a36467
commit
5162e3d5dd
@ -1,47 +1,36 @@
|
||||
import { app } from '../ApplicationServices/Application';
|
||||
import { Singleton } from '../Common/Singleton';
|
||||
import { formateDate } from '../Common/Utils';
|
||||
import { FileInfo, FileServer } from '../DatabaseServices/FileServer';
|
||||
import { Command } from '../Editor/CommandMachine';
|
||||
import { IndexedDbStore, StoreName } from '../IndexedDb/IndexedDbStore';
|
||||
import { FileInfo } from '../UI/Components/SourceManage/FilePanel';
|
||||
import { fileStore } from '../UI/Store/FilePanelStore';
|
||||
|
||||
export class Save implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
let cadFile = app.FileOut();
|
||||
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
let fileId = store.m_CurrentFileId;
|
||||
|
||||
//生成预览图
|
||||
app.m_Viewer.onSize(120, 120);
|
||||
app.m_Viewer.Render();
|
||||
let url = app.m_Viewer.m_Render.domElement.toDataURL("image/jpeg");
|
||||
app.m_Viewer.onSize();
|
||||
app.m_Viewer.Render();
|
||||
|
||||
let fileServer = Singleton.GetInstance(FileServer);
|
||||
|
||||
let fileInfo: FileInfo;
|
||||
if (!fileId)
|
||||
{
|
||||
let count = await store.Get(StoreName.FileId, "fileCount") as number || 0;
|
||||
fileId = "f" + count;
|
||||
store.Put(StoreName.FileId, "fileCount", ++count);
|
||||
fileInfo = {
|
||||
fileId,
|
||||
title: `新文件${count}`,
|
||||
modifyTime: ""
|
||||
}
|
||||
}
|
||||
else
|
||||
fileInfo = await store.Get(StoreName.Data, fileId) as FileInfo;
|
||||
if (fileServer.m_CurFileId)
|
||||
fileInfo = await fileServer.ReadFileInfo(fileServer.m_CurFileId);
|
||||
if (!fileInfo)
|
||||
fileInfo = await fileServer.CreateFile();
|
||||
|
||||
//更新最后修改时间
|
||||
fileInfo.modifyTime = formateDate(new Date(), "yyyy-MM-dd hh:mm:ss");
|
||||
fileInfo.pic = url;
|
||||
//储存文件数据和对应图纸
|
||||
store.Put(StoreName.Data, fileId, fileInfo);
|
||||
store.Put(StoreName.Dwg, fileId, cadFile.Data);
|
||||
|
||||
store.m_CurrentFileId = fileId;
|
||||
fileStore.SetCurFileId(fileId);
|
||||
fileServer.UpdateFileInfo(fileInfo);
|
||||
fileServer.UpdateFile(fileInfo.fileId, app.FileOut().Data);
|
||||
|
||||
fileServer.m_CurFileId = fileInfo.fileId;
|
||||
fileServer.SetLastOpenId(fileInfo.fileId);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,155 @@
|
||||
import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore";
|
||||
import { formateDate } from "../Common/Utils";
|
||||
|
||||
/**
|
||||
* Store.Data 保存了FileInfo
|
||||
* Store.Dwg 保存了文件的数据
|
||||
* Store.fileId 保存了文件的个数
|
||||
*/
|
||||
|
||||
|
||||
export interface FileData
|
||||
{
|
||||
key: string;
|
||||
data: FileInfo;
|
||||
}
|
||||
|
||||
export interface FileInfo
|
||||
{
|
||||
fileId: string;
|
||||
title: string;
|
||||
pic?: string;
|
||||
position?: string;
|
||||
picCount?: number;
|
||||
modifyTime: string;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* File server
|
||||
* 保存CAD的文件服务,统一由这里经过文件的CRUD操作
|
||||
*/
|
||||
export class FileServer
|
||||
{
|
||||
constructor()
|
||||
{
|
||||
this.GetLastOpenId();
|
||||
}
|
||||
|
||||
//** CRUD Start */
|
||||
|
||||
//创建新的文件C
|
||||
async CreateFile(): Promise<FileInfo>
|
||||
{
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
let fId = await store.Get(StoreName.FileId, "fileCount") as number || 1;
|
||||
let fileInfo: FileInfo = {
|
||||
fileId: `f${fId}`,
|
||||
title: `新文件${fId}`,
|
||||
modifyTime: formateDate(new Date(), "yyyy-MM-dd hh:mm:ss"),
|
||||
};
|
||||
|
||||
//保存这个文件描述
|
||||
store.Put(StoreName.Data, fileInfo.fileId, fileInfo);
|
||||
//文件个数+1
|
||||
store.Put(StoreName.FileId, "fileCount", fId + 1);
|
||||
|
||||
this.CreateFileEvent(fileInfo);
|
||||
|
||||
return fileInfo;
|
||||
}
|
||||
//打开文件R
|
||||
async ReadFile(fid: string)
|
||||
{
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
return store.Get(StoreName.Dwg, fid);
|
||||
}
|
||||
|
||||
//保存文件U
|
||||
async UpdateFile(fileId: string, data: any)
|
||||
{
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
store.Put(StoreName.Dwg, fileId, data);
|
||||
}
|
||||
//删除文件D
|
||||
async DeleteFile(fid: string)
|
||||
{
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
store.Delete(StoreName.Data, fid);
|
||||
store.Delete(StoreName.Dwg, fid);
|
||||
this.DeleteFileEvent(fid);
|
||||
}
|
||||
|
||||
//** CRUP End */
|
||||
|
||||
//导出文件(下载)
|
||||
DownloadFile()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//导入文件(上传)
|
||||
ImportFile()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//读取文件列表
|
||||
async ReadFileList(): Promise<FileInfo[]>
|
||||
{
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
let fileList = await store.GetDataList(StoreName.Data) as FileData[];;
|
||||
fileList.sort((f1, f2) =>
|
||||
{
|
||||
if (f1.key.length !== f2.key.length) return f1.key.length - f2.key.length;
|
||||
return f1.key.localeCompare(f2.key);
|
||||
});
|
||||
return fileList.map(f => f.data);
|
||||
}
|
||||
|
||||
//读取文件的描述信息
|
||||
async ReadFileInfo(fid: string)
|
||||
{
|
||||
if (!fid) return undefined;
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
let fileInfo = await store.Get(StoreName.Data, fid) as FileInfo;
|
||||
return fileInfo;
|
||||
}
|
||||
|
||||
//更新文件的描述信息
|
||||
async UpdateFileInfo(fileInfo: FileInfo)
|
||||
{
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
await store.Put(StoreName.Data, fileInfo.fileId, fileInfo);
|
||||
this.UpdateFileInfoEvent(fileInfo);
|
||||
}
|
||||
//**Event*
|
||||
CreateFileEvent(f: FileInfo)
|
||||
{
|
||||
}
|
||||
DeleteFileEvent(fid: string)
|
||||
{
|
||||
}
|
||||
UpdateFileInfoEvent(fileInfo: FileInfo)
|
||||
{
|
||||
}
|
||||
|
||||
//当前编辑的文件id
|
||||
m_CurFileId: string;
|
||||
//最后编辑的文件id
|
||||
m_LastFileId: string;
|
||||
async SetLastOpenId(id: string)
|
||||
{
|
||||
this.m_LastFileId = id;
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
store.Put(StoreName.FileId, "lastOpen", id);
|
||||
}
|
||||
async GetLastOpenId()
|
||||
{
|
||||
let store = await IndexedDbStore.CADStore();
|
||||
this.m_LastFileId = await store.Get(StoreName.FileId, "lastOpen");
|
||||
return this.m_LastFileId;
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
import { observable } from "mobx";
|
||||
|
||||
class FilePanelStore
|
||||
{
|
||||
constructor()
|
||||
{
|
||||
this.curFile = window.sessionStorage.getItem("fid");
|
||||
}
|
||||
@observable
|
||||
curFile: string;
|
||||
|
||||
SetCurFileId(id: string)
|
||||
{
|
||||
this.curFile = id;
|
||||
window.sessionStorage.setItem("fid", id);
|
||||
}
|
||||
}
|
||||
|
||||
export let fileStore = new FilePanelStore();
|
@ -0,0 +1,42 @@
|
||||
import { observable } from "mobx";
|
||||
import { end } from "../../../node_modules/xaop";
|
||||
import { arrayRemoveIf } from "../../Common/ArrayExt";
|
||||
import { Singleton } from "../../Common/Singleton";
|
||||
import { FileInfo, FileServer } from "../../DatabaseServices/FileServer";
|
||||
|
||||
export class TopPanelStore
|
||||
{
|
||||
@observable m_FileManageOpen: boolean = false;
|
||||
|
||||
@observable m_FileList: FileInfo[] = [];
|
||||
|
||||
async UpdateFileList()
|
||||
{
|
||||
if (this.m_FileList.length > 0) return;
|
||||
let fileServer = Singleton.GetInstance(FileServer);
|
||||
this.m_FileList.push(...await fileServer.ReadFileList());
|
||||
end(fileServer, fileServer.CreateFileEvent, (f: FileInfo) =>
|
||||
{
|
||||
this.m_FileList.push(f);
|
||||
});
|
||||
end(fileServer, fileServer.DeleteFileEvent, (fid: string) =>
|
||||
{
|
||||
arrayRemoveIf(this.m_FileList, (f: FileInfo) =>
|
||||
{
|
||||
return f.fileId === fid;
|
||||
});
|
||||
});
|
||||
end(fileServer, fileServer.UpdateFileInfo, (fn: FileInfo) =>
|
||||
{
|
||||
for (let f of this.m_FileList)
|
||||
{
|
||||
if (f.fileId === fn.fileId)
|
||||
{
|
||||
f.modifyTime = fn.modifyTime;
|
||||
f.pic = fn.pic;
|
||||
break;
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in new issue