import { HttpErrorResponse } from "@angular/common/http"; import { Vector3 } from "@babylonjs/core"; import { MeshBuilder } from "@babylonjs/core/Meshes/meshBuilder"; import { PolygonMeshBuilder } from "@babylonjs/core/Meshes/polygonMesh"; import { plainToClass } from "class-transformer"; import { InstitutionData, NormalData } from "../../model/data/institution/institution-data"; import { InsitutionDataSimple } from "../../model/data/institution/institution-data-simple"; import { BabylonTool } from "../../tool/babylon-tool"; import { InstitutionCreateWindow } from "../../view/institution/institution-create-window"; import { InstitutionSelectWindow } from "../../view/institution/institution-select-window"; import { TopbarWindow } from "../../view/topbar-window/topbar-window"; import { DataManager } from "../data-manager"; import { SceneManager } from "../scene-manager"; import { ServeManager } from "../serve-manager"; import { UIManager } from "../ui-manager"; import { MainStatus } from "./main-status"; import { StatusBase, StatusManager } from "./status-manager"; export class LoginSatus extends StatusBase { institutionSelectWindow: InstitutionSelectWindow; institutionCreateWindow: InstitutionCreateWindow; institutionList: InsitutionDataSimple[];//单位简易信息列表 //#region 前端对接 /** * 新建单位 * @param insData 新的单位信息 */ createInsitution(key: string, name: string, onSuccess?: (insDataSimple: InsitutionDataSimple) => void) { if (key == null) { console.error("创建单位key为null"); return; } let insData = new InstitutionData(); insData.normalData = new NormalData(key, name); this.saveNewIns(this, insData, key, onSuccess); } //#endregion //#region 外部方法 /** * 获取单位简易信息列表 * @param onSuccess 获取成功的回调 */ getInstitutionListFromServe(onSuccess?: (result: InsitutionDataSimple[], data?: any) => void, onFail?: (error: string) => void) { let debugList: any | InsitutionDataSimple[] = []; // let testIns1 = new InsitutionDataSimple(); // testIns1.key = "test"; // testIns1.name = "测试单位1"; // debugList.push(testIns1); ServeManager.instance.getInstitutionData("InsList", (key, data) => { debugList = plainToClass(InsitutionDataSimple, data); this.institutionList = debugList; if (onSuccess) { onSuccess(debugList, data); } }, (key: string, error: any) => { console.error("获取单位列表失败"); console.log(error); if (error instanceof HttpErrorResponse && error.status === 404) { //数据库没有数据,新建 this.institutionList = []; if (onSuccess) { onSuccess(this.institutionList, this.institutionList); } console.log("新建数据列表"); } else { if (onFail) { onFail(error); } } return; }) } /** * 选择单位完成,初始化数据(向服务器请求完整数据) * @param simpleData 选择的单位 */ onSelectInsSuccess(simpleData: InsitutionDataSimple) { let status: LoginSatus = StatusManager.getStatus(LoginSatus); if (status.institutionSelectWindow != null) { UIManager.close(status.institutionSelectWindow); status.institutionSelectWindow = null; } DataManager.init(simpleData, (resultkey) => { StatusManager.enterStatus(MainStatus); }); } //#endregion //#region 生命周期 //初始化 onCreate() { super.onCreate(); } //进入状态 onEnter() { super.onEnter(); console.log("进入 logins"); BabylonTool.importMeshSync("", "assets/mesh/outdoor/ZhuTi/ZhuTi.gltf", undefined, undefined, undefined, (meshes) => { console.log("加载完成", meshes); }); let l_xy = 100; let result = [new Vector3(l_xy, l_xy), new Vector3(l_xy, -l_xy), new Vector3(-l_xy, -l_xy), new Vector3(-l_xy, l_xy)]; let poly_tri = new PolygonMeshBuilder("polytri", result, SceneManager.Instance.scene); let mesh = poly_tri.build(true, 0); mesh.position.y = -10; console.log(poly_tri); //UIManager.open(TopbarWindow); // this.openSelectWindow();//可以开启选择、新建单位 } //退出状态 onExit() { super.onEnter(); } //开启选择界面 openSelectWindow() { console.log("=======开启选择界面"); this.institutionSelectWindow = UIManager.open(InstitutionSelectWindow); console.log(this.institutionSelectWindow); let status = this; this.institutionSelectWindow.getInsList(status.onSelectInsSuccess); } //关闭选择界面 closeSelectWindow() { if (this.institutionSelectWindow != null) { UIManager.close(this.institutionSelectWindow); this.institutionSelectWindow = null; } } //新建完成 onCreateInsSuccess(insData: InsitutionDataSimple) { this.closeCreateWindow(); let isOverWrite = false; for (let i = 0; i < this.institutionList.length; i++) { if (this.institutionList[i].key == insData.key) { this.institutionList[i].name = insData.name; isOverWrite = true; break; } } if (!isOverWrite) { this.institutionList.push(insData); } let status = this; ServeManager.instance.saveInstitutionListData(this.institutionList, () => { //进入新单位 status.onSelectInsSuccess(insData); }); } //#endregion //#region babylonGUI 新建单位 //开启新建界面 onNewIns() { this.closeSelectWindow(); this.institutionCreateWindow = UIManager.open(InstitutionCreateWindow); let status = this; this.institutionCreateWindow.startCreate(); } //关闭创建界面 closeCreateWindow() { if (this.institutionCreateWindow != null) { UIManager.close(this.institutionCreateWindow); } this.institutionCreateWindow = null; } //保存新单位信息至服务器 saveNewIns(status: LoginSatus, insData: InstitutionData, key: string, onSuccess?: (insDataSimple: InsitutionDataSimple) => void) { ServeManager.instance.saveInstitutionData(insData, key, (key, result) => { console.log("在服务器新建单位" + key); let insDataSimple = new InsitutionDataSimple(); insDataSimple.key = key; insDataSimple.name = insData.normalData.name; status.onCreateInsSuccess(insDataSimple); if (onSuccess != null) { onSuccess(insDataSimple); } }); } //#endregion }