mirror of https://gitee.com/cf-fz/WebCAD.git
!1975 功能:模板导入导出
parent
0cee6cdd2e
commit
09ad246455
@ -0,0 +1,193 @@
|
|||||||
|
import { Button, Intent, ProgressBar } from "@blueprintjs/core";
|
||||||
|
import { observable } from "mobx";
|
||||||
|
import { observer } from "mobx-react";
|
||||||
|
import pako from "pako";
|
||||||
|
import React from "react";
|
||||||
|
import { CADFiler } from "../../../api";
|
||||||
|
import { app } from "../../../ApplicationServices/Application";
|
||||||
|
import { FileSystem } from '../../../Common/FileSystem';
|
||||||
|
import { TemplateUrls } from "../../../Common/HostUrl";
|
||||||
|
import { PostJson } from "../../../Common/Request";
|
||||||
|
import { StoreageKeys } from "../../../Common/StoreageKeys";
|
||||||
|
import { FileServer } from "../../../DatabaseServices/FileServer";
|
||||||
|
import { TopPanelStore } from "../../Store/TopPanelStore";
|
||||||
|
import { AppToaster } from "../Toaster";
|
||||||
|
import { CommonPanel } from "./CommonPanel";
|
||||||
|
|
||||||
|
@observer
|
||||||
|
export class ImportFile extends React.Component<{ commonPanel: CommonPanel, type: "file" | "template"; }>{
|
||||||
|
@observable private _isImporting = false;
|
||||||
|
selectEl = React.createRef<HTMLInputElement>();
|
||||||
|
|
||||||
|
handleImportFile = async (files: FileList) =>
|
||||||
|
{
|
||||||
|
let key = AppToaster.show({
|
||||||
|
message: <ProgressBar
|
||||||
|
className="docs-toast-progress"
|
||||||
|
intent={Intent.PRIMARY}
|
||||||
|
value={0 / files.length}
|
||||||
|
/>
|
||||||
|
});
|
||||||
|
this._isImporting = true;
|
||||||
|
const shopId = TopPanelStore.GetInstance().shopId;
|
||||||
|
const dir_id = this.props.commonPanel['currentDir'].id;
|
||||||
|
|
||||||
|
for (let i = 0, len = files.length; i < len; i++)
|
||||||
|
{
|
||||||
|
let f = files.item(i);
|
||||||
|
if (f.type === "application/json")
|
||||||
|
{
|
||||||
|
let dataStr = await FileSystem.ReadFileAsText(f);
|
||||||
|
|
||||||
|
if (!dataStr)
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: f.name + "格式不正确",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
let { type } = JSON.parse(atob(dataStr));
|
||||||
|
if (!type && this.props.type === "file")
|
||||||
|
{
|
||||||
|
let { file, id } = JSON.parse(atob(dataStr));
|
||||||
|
if (!file || !id)
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: f.name + "格式不正确",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (shopId !== id && TopPanelStore.GetInstance().userName !== "cx")
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: f.name + "不属于您的店铺,鉴权失败",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let fserver = FileServer.GetInstance() as FileServer;
|
||||||
|
await fserver.UploadFile({
|
||||||
|
dir_id,
|
||||||
|
name: f.name.replace(".json", ""),
|
||||||
|
file: file
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (type && type === this.props.type)
|
||||||
|
{
|
||||||
|
let { file, id, logo, props } = JSON.parse(atob(dataStr));
|
||||||
|
if (!file || !id || !logo || !props)
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: f.name + "格式不正确",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (shopId !== id && TopPanelStore.GetInstance().userName !== "cx")
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: f.name + "不属于您的店铺,鉴权失败",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await PostJson(TemplateUrls.create, {
|
||||||
|
name: f.name.replace(".json", ""),
|
||||||
|
dir_id,
|
||||||
|
logo,
|
||||||
|
props,
|
||||||
|
file,
|
||||||
|
zip_type: "gzip",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: f.name + "格式不正确",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (err)
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: f.name + "格式不正确",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
let userName = localStorage.getItem(StoreageKeys.UserName);
|
||||||
|
if (userName === "cx")
|
||||||
|
{
|
||||||
|
let file = pako.inflate(new Uint8Array(await f.arrayBuffer()), { to: "string" });
|
||||||
|
app.OpenFile(new CADFiler(JSON.parse(file)));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AppToaster.show({
|
||||||
|
message: <ProgressBar
|
||||||
|
stripes={i < len - 1}
|
||||||
|
className="docs-toast-progress"
|
||||||
|
intent={i === len - 1 ? Intent.SUCCESS : Intent.PRIMARY}
|
||||||
|
value={(i + 1) / files.length}
|
||||||
|
/>,
|
||||||
|
timeout: i === len - 1 ? 500 : 0
|
||||||
|
}, key);
|
||||||
|
}
|
||||||
|
await this.props.commonPanel.handleGetData();
|
||||||
|
this._isImporting = false;
|
||||||
|
this.selectEl.current.value = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
render()
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
disabled={this._isImporting}
|
||||||
|
icon="cloud-upload"
|
||||||
|
style={{ marginRight: 10 }}
|
||||||
|
text="导入"
|
||||||
|
intent={Intent.SUCCESS}
|
||||||
|
onClick={() =>
|
||||||
|
{
|
||||||
|
if (this.selectEl.current)
|
||||||
|
this.selectEl.current.click();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
ref={this.selectEl}
|
||||||
|
type="file"
|
||||||
|
style={{ display: "none" }}
|
||||||
|
multiple={true}
|
||||||
|
accept=".json,.cad"
|
||||||
|
onChange={(e) => this.handleImportFile(e.target.files)}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue