|
|
@ -1,20 +1,116 @@
|
|
|
|
import * as React from 'react';
|
|
|
|
import * as React from 'react';
|
|
|
|
|
|
|
|
import { position } from 'tether';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import { app } from '../../../ApplicationServices/Application';
|
|
|
|
|
|
|
|
import { formateDate } from '../../../Common/Utils';
|
|
|
|
|
|
|
|
import { CADFile } from '../../../DatabaseServices/CADFile';
|
|
|
|
|
|
|
|
import { Database } from '../../../DatabaseServices/Database';
|
|
|
|
|
|
|
|
import { IndexedDbStore, StoreName } from '../../../IndexedDb/IndexedDbStore';
|
|
|
|
import { FileItem } from './FileItem';
|
|
|
|
import { FileItem } from './FileItem';
|
|
|
|
|
|
|
|
|
|
|
|
interface FileProps
|
|
|
|
interface FileProps
|
|
|
|
{
|
|
|
|
{
|
|
|
|
isShow: boolean;
|
|
|
|
isShow: boolean,
|
|
|
|
|
|
|
|
callback?: Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface FileInfo
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
fileId: string,
|
|
|
|
|
|
|
|
title: string,
|
|
|
|
|
|
|
|
position?: string,
|
|
|
|
|
|
|
|
picCount?: number,
|
|
|
|
|
|
|
|
modifyTime: string,
|
|
|
|
|
|
|
|
isNew: boolean
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
interface FileData
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: string,
|
|
|
|
|
|
|
|
data: FileInfo
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
interface FileState
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
fileList: FileData[]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 我的文件列表
|
|
|
|
* 我的文件列表
|
|
|
|
* //TODO:传入文件数据
|
|
|
|
|
|
|
|
* @export
|
|
|
|
* @export
|
|
|
|
* @class FilePanel
|
|
|
|
* @class FilePanel
|
|
|
|
* @extends {React.Component<FileProps, {}>}
|
|
|
|
* @extends {React.Component<FileProps, {}>}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
export class FilePanel extends React.Component<FileProps, {}>
|
|
|
|
export class FilePanel extends React.Component<FileProps, FileState>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
constructor(props)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
super(props);
|
|
|
|
|
|
|
|
this.state = {
|
|
|
|
|
|
|
|
fileList: []
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//添加新文件
|
|
|
|
|
|
|
|
handleAddNewFile = async () =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let store = await IndexedDbStore.CADStore();
|
|
|
|
|
|
|
|
let fId = await store.Get(StoreName.FileId, "fileCount") as number || 0;
|
|
|
|
|
|
|
|
let newFile: FileInfo = {
|
|
|
|
|
|
|
|
fileId: "f" + fId,
|
|
|
|
|
|
|
|
title: "文件名" + fId,
|
|
|
|
|
|
|
|
modifyTime: formateDate(new Date(), "yyyy-MM-dd hh:mm:ss"),
|
|
|
|
|
|
|
|
isNew: true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
store.Put(StoreName.Data, "f" + fId, newFile);
|
|
|
|
|
|
|
|
store.Put(StoreName.FileId, "fileCount", ++fId);
|
|
|
|
|
|
|
|
this.handleUpdateList();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
handleFile = async (fid: string, fname: string, type: string) =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let store = await IndexedDbStore.CADStore();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (type)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
case "delete":
|
|
|
|
|
|
|
|
store.Delete(StoreName.Data, fid);
|
|
|
|
|
|
|
|
store.Delete(StoreName.Dwg, fid);
|
|
|
|
|
|
|
|
this.handleUpdateList();
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "open":
|
|
|
|
|
|
|
|
// 修改当前文件名
|
|
|
|
|
|
|
|
let fileData: FileInfo = await store.Get(StoreName.Data, fid);
|
|
|
|
|
|
|
|
fileData.title = fname;
|
|
|
|
|
|
|
|
//切换当前图纸id
|
|
|
|
|
|
|
|
store.m_CurrentFileId = fid;
|
|
|
|
|
|
|
|
let file = await store.Get(StoreName.Dwg, fid);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fileData.isNew || !file)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
fileData.isNew = false;
|
|
|
|
|
|
|
|
let db = new Database();
|
|
|
|
|
|
|
|
app.m_Database.FileRead(db.FileWrite());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let cadF = new CADFile();
|
|
|
|
|
|
|
|
cadF.Data = file;
|
|
|
|
|
|
|
|
app.m_Database.FileRead(cadF);
|
|
|
|
|
|
|
|
app.m_Editor.UpdateScreen();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
store.Put(StoreName.Data, fid, fileData);
|
|
|
|
|
|
|
|
this.props.callback();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
handleUpdateList = async () =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let store = await IndexedDbStore.CADStore();
|
|
|
|
|
|
|
|
let fileList = await store.GetDataList(StoreName.Data) as FileData[];;
|
|
|
|
|
|
|
|
this.setState({ fileList });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
componentDidMount()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
this.handleUpdateList();
|
|
|
|
|
|
|
|
}
|
|
|
|
render()
|
|
|
|
render()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return (
|
|
|
|
return (
|
|
|
@ -36,6 +132,13 @@ export class FilePanel extends React.Component<FileProps, {}>
|
|
|
|
<button className="pt-button pt-minimal pt-icon-trash ">
|
|
|
|
<button className="pt-button pt-minimal pt-icon-trash ">
|
|
|
|
回收站
|
|
|
|
回收站
|
|
|
|
</button>
|
|
|
|
</button>
|
|
|
|
|
|
|
|
<span className="pt-navbar-divider"></span>
|
|
|
|
|
|
|
|
<button
|
|
|
|
|
|
|
|
className="pt-button pt-intent-success pt-icon-file "
|
|
|
|
|
|
|
|
onClick={this.handleAddNewFile}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
新建
|
|
|
|
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className="pt-navbar-group pt-align-right">
|
|
|
|
<div className="pt-navbar-group pt-align-right">
|
|
|
|
<input
|
|
|
|
<input
|
|
|
@ -44,12 +147,18 @@ export class FilePanel extends React.Component<FileProps, {}>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
</nav>
|
|
|
|
<ul className="ul-unstyle">
|
|
|
|
<ul className="ul-unstyle">
|
|
|
|
{/* TODO:传入文件数据 */}
|
|
|
|
{
|
|
|
|
<FileItem
|
|
|
|
this.state.fileList.map((file) =>
|
|
|
|
title="文件名"
|
|
|
|
{
|
|
|
|
/>
|
|
|
|
return <FileItem
|
|
|
|
|
|
|
|
key={file.key}
|
|
|
|
|
|
|
|
fileInfo={file.data}
|
|
|
|
|
|
|
|
callBack={this.handleFile}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
</ul>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|