mirror of https://gitee.com/cf-fz/WebCAD.git
parent
0c30a36467
commit
5162e3d5dd
@ -1,47 +1,36 @@
|
|||||||
import { app } from '../ApplicationServices/Application';
|
import { app } from '../ApplicationServices/Application';
|
||||||
|
import { Singleton } from '../Common/Singleton';
|
||||||
import { formateDate } from '../Common/Utils';
|
import { formateDate } from '../Common/Utils';
|
||||||
|
import { FileInfo, FileServer } from '../DatabaseServices/FileServer';
|
||||||
import { Command } from '../Editor/CommandMachine';
|
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
|
export class Save implements Command
|
||||||
{
|
{
|
||||||
async exec()
|
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.onSize(120, 120);
|
||||||
app.m_Viewer.Render();
|
app.m_Viewer.Render();
|
||||||
let url = app.m_Viewer.m_Render.domElement.toDataURL("image/jpeg");
|
let url = app.m_Viewer.m_Render.domElement.toDataURL("image/jpeg");
|
||||||
app.m_Viewer.onSize();
|
app.m_Viewer.onSize();
|
||||||
app.m_Viewer.Render();
|
app.m_Viewer.Render();
|
||||||
|
|
||||||
|
let fileServer = Singleton.GetInstance(FileServer);
|
||||||
|
|
||||||
let fileInfo: FileInfo;
|
let fileInfo: FileInfo;
|
||||||
if (!fileId)
|
if (fileServer.m_CurFileId)
|
||||||
{
|
fileInfo = await fileServer.ReadFileInfo(fileServer.m_CurFileId);
|
||||||
let count = await store.Get(StoreName.FileId, "fileCount") as number || 0;
|
if (!fileInfo)
|
||||||
fileId = "f" + count;
|
fileInfo = await fileServer.CreateFile();
|
||||||
store.Put(StoreName.FileId, "fileCount", ++count);
|
|
||||||
fileInfo = {
|
|
||||||
fileId,
|
|
||||||
title: `新文件${count}`,
|
|
||||||
modifyTime: ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fileInfo = await store.Get(StoreName.Data, fileId) as FileInfo;
|
|
||||||
//更新最后修改时间
|
//更新最后修改时间
|
||||||
fileInfo.modifyTime = formateDate(new Date(), "yyyy-MM-dd hh:mm:ss");
|
fileInfo.modifyTime = formateDate(new Date(), "yyyy-MM-dd hh:mm:ss");
|
||||||
fileInfo.pic = url;
|
fileInfo.pic = url;
|
||||||
//储存文件数据和对应图纸
|
|
||||||
store.Put(StoreName.Data, fileId, fileInfo);
|
|
||||||
store.Put(StoreName.Dwg, fileId, cadFile.Data);
|
|
||||||
|
|
||||||
store.m_CurrentFileId = fileId;
|
fileServer.UpdateFileInfo(fileInfo);
|
||||||
fileStore.SetCurFileId(fileId);
|
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