!2392 优化:模块管理UI面板关闭,配置未改变时不上传配置

pull/2413/head
林三 1 year ago committed by ChenX
parent 1af5c48f47
commit 13f489ca74

@ -15,11 +15,10 @@ import { IFileInfo } from '../../../DatabaseServices/FileServer';
import { EOrderType } from '../../../Editor/OrderType';
import { TouchEventEditor } from '../../../Editor/TouchEditor/TouchEventEditor';
import { IDrawerDoorTempInfo } from '../../Store/DoorInterface';
import { IDir } from '../../Store/OptionInterface/TemplateManageOption';
import { IDir, TemplateManageUiOption } from '../../Store/OptionInterface/TemplateManageOption';
import { userConfigStore } from '../../Store/UserConfigStore';
import { BoardModalType } from "../Board/BoardModalType";
import { AppConfirm } from '../Common/Confirm';
import { TemplateManageUiOption } from '../Template/TemplateComponent';
import { TemplateTag } from '../Template/TemplateTag';
import { AppToaster } from '../Toaster';
import ResourceStore from '../ToolBar/ResourceLibrary/RsourceStore';

@ -5,9 +5,9 @@ import * as React from 'react';
import { AutoCutting } from '../../../Add-on/BoardCutting/AutoCuttingReactor';
import { DrillType } from "../../../Add-on/DrawDrilling/DrillType";
import { IsDoor, IsHandle, IsHinge } from '../../../Add-on/HideSelect/HideSelectUtils';
import { ITempTagProps, templateTagCommand } from '../../../Add-on/Template/TemplateTagCommand';
import { R2bReplaceProps } from '../../../Add-on/twoD2threeD/R2bConfigComponent';
import { templateTagCommand } from '../../../Add-on/Template/TemplateTagCommand';
import { app } from '../../../ApplicationServices/Application';
import { equalArray } from '../../../Common/ArrayExt';
import { EBoardKeyList } from '../../../Common/BoardKeyList';
import { TemplateUrls } from '../../../Common/HostUrl';
import { DirectoryId, PostJson, RequestStatus } from '../../../Common/Request';
@ -38,10 +38,9 @@ import { PointSelectSpaceClamp } from '../../../Geometry/SpaceParse/PointSelectS
import { arrayRemoveOnce } from '../../../Nest/Common/ArrayExt';
import { IDrawerDoorTempInfo } from '../../Store/DoorInterface';
import { kuGanStore } from '../../Store/KuGanStore';
import { IBaseOption, IDrawBoardAutoCutOption } from "../../Store/OptionInterface/IOptionInterface";
import { IDir } from '../../Store/OptionInterface/TemplateManageOption';
import { IDrawBoardAutoCutOption } from "../../Store/OptionInterface/IOptionInterface";
import { IDir, IHasAutoCutOption, ITemplateManage, ITemplateManageOption, TemplateManageOption } from '../../Store/OptionInterface/TemplateManageOption';
import { ITemplateParam } from "../../Store/RightPanelStore/ITemplateParam";
import { TempalteEditorStore } from '../../Store/TemplateEditorStore';
import { tempalteManageStore } from '../../Store/TemplateManageStore';
import { AutoCutCheckbox } from '../Board/BoardCommon';
import { MenuItem } from '../ContextMenu/MenuItem';
@ -60,34 +59,6 @@ import { TemplateDrawHandleTool } from './TemplateDrawHandleTool';
import { TemplateDrawHingeTool } from './TemplateDrawHingeTool';
import { TemplateList } from './TemplateList';
export interface ITemplateManage
{
store?: TempalteEditorStore;
currentTag?: ITempTagProps;
R2bReplace?: R2bReplaceProps;
type: "Administration" | "Collection"; //模板管理和收藏
}
export interface TemplateManageUiOption
{
navigationWidth: string,
showTag: boolean;
};
export interface ITemplateManageOption extends IBaseOption
{
option: IGetRoomInfo;
autoCutOption: IDrawBoardAutoCutOption;
uiOption: TemplateManageUiOption;
perPageCount: number;
useOverallOption: boolean;
dirData?: IDir[];
}
interface IHasAutoCutOption extends IDir
{
autoCutOption?: IDrawBoardAutoCutOption;
}
@observer
export class TemplateManage extends React.Component<ITemplateManage, {}> {
private option: IGetRoomInfo = {
@ -107,8 +78,10 @@ export class TemplateManage extends React.Component<ITemplateManage, {}> {
};
@observable autoCutOption: IDrawBoardAutoCutOption = { isAutoCut: false, isRelevance: false };
private uiOption = { navigationWidth: "25%", showTag: true };
//初始模板管理UI的option
private InitialOptionData: any[] = [];
@observable templateManageOption: ITemplateManageOption = {
version: 2,
version: 3,
option: this.option,
autoCutOption: toJS(this.autoCutOption),
uiOption: this.uiOption,
@ -1145,19 +1118,41 @@ export class TemplateManage extends React.Component<ITemplateManage, {}> {
return currentItem;
};
GetOptionConfig(m_Option: ITemplateManageOption, autoCutOption: IDrawBoardAutoCutOption)
{
const autoCutOpt = m_Option.useOverallOption ? m_Option.autoCutOption : autoCutOption;
//由于之前保存的数据就是展开的,所以这里也只能跟着展开保存
let opt = {
version: m_Option.version,
...m_Option.option,
...autoCutOpt,
...m_Option.uiOption,
perPageCount: m_Option.perPageCount,
useOverallOption: m_Option.useOverallOption,
dirData: toJS(m_Option.dirData)
} as TemplateManageOption;
return toJS(opt);
}
async componentDidMount()
{
//分离配置实现,但保持原来的实现方式(通过传参修改),这里的option引用太多了本来只需要保存roomName和useCabName,但他已经把option所有配置都保存了,没办法
await tempalteManageStore.UpdateOption(this.templateManageOption, this.autoCutOption);
this.InitialOptionData = tempalteManageStore.WriteFlie(this.templateManageOption, this.autoCutOption);
this.noUseOverAllOptionsChange();
document.addEventListener('keyup', this.handleHotKey);
}
componentWillUnmount()
{
templateTagCommand.UploadTagList();
tempalteManageStore.SaveConfig(this.templateManageOption, this.autoCutOption); //保存模板管理配置
let newConfigData = tempalteManageStore.WriteFlie(this.templateManageOption, this.autoCutOption);
if (!equalArray(newConfigData, this.InitialOptionData))
{
let newConfig = this.GetOptionConfig(this.templateManageOption, this.autoCutOption);
tempalteManageStore.SaveConfig(newConfig); //保存模板管理配置
}
this.InitialOptionData = [];
document.removeEventListener('keyup', this.handleHotKey);
}
public render()

@ -1,5 +1,9 @@
import { ITempTagProps } from "../../../Add-on/Template/TemplateTagCommand";
import { R2bReplaceProps } from "../../../Add-on/twoD2threeD/R2bConfigComponent";
import { BoardOpenDir } from "../../../DatabaseServices/Entity/BoardInterface";
import { IBaseOption } from "./IOptionInterface";
import { IGetRoomInfo } from "../../Components/Template/GetRoomCabName";
import { TempalteEditorStore } from "../TemplateEditorStore";
import { IBaseOption, IDrawBoardAutoCutOption } from "./IOptionInterface";
export interface IDir
{
@ -8,6 +12,35 @@ export interface IDir
childs: IDir[];
}
export interface IHasAutoCutOption extends IDir
{
autoCutOption?: IDrawBoardAutoCutOption;
}
export interface ITemplateManage
{
store?: TempalteEditorStore;
currentTag?: ITempTagProps;
R2bReplace?: R2bReplaceProps;
type: "Administration" | "Collection"; //模板管理和收藏
}
export interface TemplateManageUiOption
{
navigationWidth: string,
showTag: boolean;
};
export interface ITemplateManageOption extends IBaseOption
{
option: IGetRoomInfo;
autoCutOption: IDrawBoardAutoCutOption;
uiOption: TemplateManageUiOption;
perPageCount: number;
useOverallOption: boolean;
dirData?: IHasAutoCutOption[];
}
export interface TemplateManageOption extends IBaseOption
{
isAutoCut: boolean;
@ -29,4 +62,7 @@ export interface TemplateManageOption extends IBaseOption
perPageCount: number;
useOverallOption: boolean;
dirData?: IDir[];
lockRoomName?: boolean; //锁定输入框的值
lockCabName?: boolean; //锁定输入框的值
lockBoardName?: boolean; //锁定输入框的值
}

@ -1,14 +1,13 @@
import { toJS } from "mobx";
import { appCache } from "../../Common/AppCache";
import { ConfigUrls } from "../../Common/HostUrl";
import { PostJson, RequestStatus } from "../../Common/Request";
import { Singleton } from "../../Common/Singleton";
import { GetIndexDBID } from "../../Common/Utils";
import { CADFiler } from "../../DatabaseServices/CADFiler";
import { IndexedDbStore, StoreName } from "../../IndexedDb/IndexedDbStore";
import { BoardModalType } from "../Components/Board/BoardModalType";
import { ITemplateManageOption } from "../Components/Template/TemplateComponent";
import { IDrawBoardAutoCutOption } from "./OptionInterface/IOptionInterface";
import { TemplateManageOption } from "./OptionInterface/TemplateManageOption";
import { IHasAutoCutOption, ITemplateManageOption, TemplateManageOption } from "./OptionInterface/TemplateManageOption";
import { userConfigStore } from "./UserConfigStore";
export class TempalteManageStore extends Singleton
@ -19,54 +18,53 @@ export class TempalteManageStore extends Singleton
let cof = await userConfigStore.GetAllConfigs(BoardModalType.TemplateManage) as TemplateManageOption;
if (cof)
{
m_Option.version = cof.version;
m_Option.autoCutOption = { isAutoCut: cof.isAutoCut, isRelevance: cof.isRelevance };
autoCutOption.isAutoCut = cof.isAutoCut;//存档
autoCutOption.isRelevance = cof.isRelevance;//存档
m_Option.option.roomName = cof.roomName;
m_Option.option.cabName = cof.cabName;
m_Option.option.boardName = cof.boardName;
m_Option.option.useCabName = cof.useCabName;
if (!cof.version)
m_Option.option.useBoardName = cof.useBoardName;
m_Option.option.useMaterial = cof.useMaterial;
m_Option.option.lockRoomName = cof.lockRoomName;
m_Option.option.lockCabName = cof.lockCabName;
m_Option.option.lockBoardName = cof.lockBoardName;
m_Option.dirData = cof.dirData;
if (!m_Option.version)
{
cof.version = 1;
m_Option.version = 1;
m_Option.uiOption = { navigationWidth: "25%", showTag: true };
}
else
{
m_Option.uiOption = { navigationWidth: cof.navigationWidth, showTag: cof.showTag };
}
if (cof.version < 2)
if (m_Option.version < 2)
{
cof.version = 2;
m_Option.version = 2;
m_Option.perPageCount = 12;
}
else
{
m_Option.perPageCount = cof.perPageCount;
}
if (cof.version < 3)
if (m_Option.version < 3)
{
cof.version = 3;
m_Option.version = 3;
m_Option.useOverallOption = cof.useOverallOption === undefined ? true : cof.useOverallOption;
m_Option.dirData = cof.dirData;
}
else
m_Option.useOverallOption = cof.useOverallOption;
}
}
async SaveConfig(m_Option: ITemplateManageOption, autoCutOption: IDrawBoardAutoCutOption)
async SaveConfig(newConfig: TemplateManageOption)
{
const autoCutOpt = m_Option.useOverallOption ? m_Option.autoCutOption : autoCutOption;
//由于之前保存的数据就是展开的,所以这里也只能跟着展开保存
let opt = {
version: m_Option.version,
...m_Option.option,
...autoCutOpt,
...m_Option.uiOption,
perPageCount: m_Option.perPageCount,
useOverallOption: m_Option.useOverallOption,
dirData: toJS(m_Option.dirData)
} as TemplateManageOption;
let newConfig: TemplateManageOption = toJS(opt);
let data = await PostJson(ConfigUrls.Edit, { key: BoardModalType.TemplateManage, value: JSON.stringify(newConfig) });
if (data.err_code === RequestStatus.Ok)
@ -77,6 +75,43 @@ export class TempalteManageStore extends Singleton
appCache.set(BoardModalType.TemplateManage, newConfig);
}
};
WriteFlie(cof: ITemplateManageOption, autoCutOption: IDrawBoardAutoCutOption)
{
const autoCutOpt = cof.useOverallOption ? cof.autoCutOption : autoCutOption;
let file = new CADFiler();
file.Write(cof.version);
file.WriteBool(cof.useOverallOption);
file.WriteBool(autoCutOpt?.isAutoCut);
file.WriteBool(autoCutOpt?.isRelevance);
file.Write(cof.option.roomName);
file.Write(cof.option.cabName);
file.Write(cof.option.boardName);
file.WriteBool(cof.option.useCabName);
file.WriteBool(cof.option.useBoardName);
file.WriteBool(cof.option.useMaterial);
file.WriteBool(cof.option.lockRoomName);
file.WriteBool(cof.option.lockCabName);
file.WriteBool(cof.option.lockBoardName);
file.Write(cof.perPageCount);
this.WriteDirData(file, cof.dirData);
return file.Data;
}
WriteDirData(file: CADFiler, dirData: IHasAutoCutOption[])
{
for (let data of dirData)
{
file.WriteBool(data.autoCutOption?.isAutoCut);
file.WriteBool(data.autoCutOption?.isRelevance);
this.WriteDirData(file, data.childs);
}
}
}
export const tempalteManageStore = TempalteManageStore.GetInstance();

Loading…
Cancel
Save