|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
import { Intent } from "@blueprintjs/core";
|
|
|
|
|
import { observable, toJS } from "mobx";
|
|
|
|
|
import PQueue from "p-queue";
|
|
|
|
|
import { MaterialUrls } from "../../../Common/HostUrl";
|
|
|
|
|
import { PostJson, RequestStatus } from "../../../Common/Request";
|
|
|
|
|
import { Singleton } from "../../../Common/Singleton";
|
|
|
|
@ -16,6 +17,7 @@ export interface MaterialOption
|
|
|
|
|
materialName: string;
|
|
|
|
|
url: string;
|
|
|
|
|
isSelect: boolean;
|
|
|
|
|
isRender: boolean;
|
|
|
|
|
}
|
|
|
|
|
export class KJLImportConfigStore extends Singleton implements IConfigStore
|
|
|
|
|
{
|
|
|
|
@ -23,10 +25,9 @@ export class KJLImportConfigStore extends Singleton implements IConfigStore
|
|
|
|
|
@observable configsNames: string[] = [];
|
|
|
|
|
@observable m_Option: KJLImportConfigOption = { ...DefaultKJImportOption };
|
|
|
|
|
@observable materialList: MaterialOption[] = [];
|
|
|
|
|
@observable isloading = false;
|
|
|
|
|
KeyIndex: number = 0;
|
|
|
|
|
@observable selectAll = false;
|
|
|
|
|
|
|
|
|
|
private queue = new PQueue({ concurrency: 100 });
|
|
|
|
|
materialMap = new Map<string, Promise<{ materialName: string, url: string; }>>();
|
|
|
|
|
InitOption()
|
|
|
|
|
{
|
|
|
|
|
Object.assign(this.m_Option, DefaultKJImportOption);
|
|
|
|
@ -70,35 +71,57 @@ export class KJLImportConfigStore extends Singleton implements IConfigStore
|
|
|
|
|
|
|
|
|
|
LoadMaterials = async () =>
|
|
|
|
|
{
|
|
|
|
|
this.isloading = false;
|
|
|
|
|
this.materialList = [];
|
|
|
|
|
this.KeyIndex = 0;
|
|
|
|
|
this.selectAll = false;
|
|
|
|
|
|
|
|
|
|
let materialMap = new Map<string, { name: string, logo: string; }>();
|
|
|
|
|
for (let mtl of this.m_Option.materials)
|
|
|
|
|
{
|
|
|
|
|
if (!materialMap.has(mtl.id))
|
|
|
|
|
{
|
|
|
|
|
let material_id = mtl.id;
|
|
|
|
|
let data = await PostJson(MaterialUrls.detail, { material_id });
|
|
|
|
|
if (data.err_code === RequestStatus.Ok)
|
|
|
|
|
for (let i = 0, length = this.m_Option.materials.length; i < length; i++)
|
|
|
|
|
{
|
|
|
|
|
materialMap.set(mtl.id, data.materials);
|
|
|
|
|
}
|
|
|
|
|
let mtl = this.m_Option.materials[i];
|
|
|
|
|
this.materialList.push({ keyIndex: i, kjlName: mtl.kjlName, materialName: "", url: "", isSelect: false, isRender: false });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (materialMap.has(mtl.id))
|
|
|
|
|
this.AsyncLoadMaterials();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
AsyncLoadMaterials = async () =>
|
|
|
|
|
{
|
|
|
|
|
this.queue.clear();
|
|
|
|
|
for (let i = 0, length = this.m_Option.materials.length; i < length; i++)
|
|
|
|
|
{
|
|
|
|
|
let mtl = this.m_Option.materials[i];
|
|
|
|
|
this.queue.add(async () =>
|
|
|
|
|
{
|
|
|
|
|
let promise: Promise<{ materialName: string, url: string; }>;
|
|
|
|
|
if (this.materialMap.has(mtl.id))
|
|
|
|
|
{
|
|
|
|
|
let material = materialMap.get(mtl.id);
|
|
|
|
|
this.materialList.push({ keyIndex: this.KeyIndex, kjlName: mtl.kjlName, materialName: material.name, url: material.logo, isSelect: false });
|
|
|
|
|
promise = this.materialMap.get(mtl.id);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.materialList.push({ keyIndex: this.KeyIndex, kjlName: mtl.kjlName, materialName: "", url: "", isSelect: false });
|
|
|
|
|
promise = this.GetMaterialInfo(mtl.id);
|
|
|
|
|
this.materialMap.set(mtl.id, promise);
|
|
|
|
|
}
|
|
|
|
|
this.KeyIndex++;
|
|
|
|
|
|
|
|
|
|
let { materialName, url } = await promise;
|
|
|
|
|
this.materialList[i] = { keyIndex: i, kjlName: mtl.kjlName, materialName, url, isSelect: false, isRender: true };
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
this.isloading = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
GetMaterialInfo = (material_id: string): Promise<{ materialName: string, url: string; }> =>
|
|
|
|
|
{
|
|
|
|
|
return new Promise(async (res) =>
|
|
|
|
|
{
|
|
|
|
|
let data = await PostJson(MaterialUrls.detail, { material_id });
|
|
|
|
|
let materialName = "";
|
|
|
|
|
let url = "";
|
|
|
|
|
if (data.err_code === RequestStatus.Ok)
|
|
|
|
|
{
|
|
|
|
|
let material = data.materials;
|
|
|
|
|
materialName = material.name;
|
|
|
|
|
url = material.logo;
|
|
|
|
|
}
|
|
|
|
|
res({ materialName, url });
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|