!1001 修复:根据板名改板件信息问题

pull/1001/MERGE
ZoeLeeFZ 4 years ago committed by ChenX
parent cf69cd0a0d
commit b062b9135a

@ -7,6 +7,7 @@ import { PromptStatus } from "../../Editor/PromptResult";
import { IUpdateBoardInfosOption } from "../../UI/Components/Board/UpdateBoardInfointerface";
import { EBoardKeyList } from "../../Common/BoardKeyList";
import { DRILL_KEYS } from "../../UI/Store/BoardFindInterface";
import { toJS } from "mobx";
export class UpdateBoardInfos implements Command
{
@ -25,7 +26,7 @@ export class UpdateBoardInfos implements Command
let brs = brRes.SelectSet.SelectEntityList as Board[];
const nameOptionMap = updateBoardInfoStore.nameOptionMap;
const nameOptionMap = toJS(updateBoardInfoStore.nameOptionMap, { exportMapsAsObjects: false });
const currentOption = nameOptionMap.get(updateBoardInfoStore.currentBoardName);
for (let br of brs)
@ -38,7 +39,7 @@ export class UpdateBoardInfos implements Command
}
else
{
if (br.Name === updateBoardInfoStore.currentBoardName)
if (currentOption && br.Name === updateBoardInfoStore.currentBoardName)
this.ModifyBr(br, currentOption);
}
}
@ -74,13 +75,10 @@ export class UpdateBoardInfos implements Command
if (option[i])
br.BoardProcessOption[i] = option[i];
break;
case "upDrill":
case "downDrill":
case "leftDrill":
case "rightDrill":
let index = DRILL_KEYS.indexOf(i);
if (!br.IsSpecialShape)
br.BoardProcessOption.highDrill[index] = option.highDrill[index];
case EBoardKeyList.Mat:
br.BoardProcessOption[EBoardKeyList.BrMat] = option[EBoardKeyList.BrMat];
br.BoardProcessOption[EBoardKeyList.Mat] = option[EBoardKeyList.Mat];
br.BoardProcessOption[EBoardKeyList.Color] = option[EBoardKeyList.Color];
break;
case "useZhengFanDrill":
br.BoardProcessOption.frontDrill = option.upDownDrill[0];
@ -91,6 +89,15 @@ export class UpdateBoardInfos implements Command
break;
case EBoardKeyList.KnifeRad:
br.KnifeRadius = parseFloat(option[EBoardKeyList.KnifeRad]);
break;
case "grooveAddDepth":
br.GroovesAddDepth = parseFloat(option[i]) || 0;
break;
case "grooveAddLength":
br.GroovesAddLength = parseFloat(option[i]) || 0;
break;
case "grooveAddWidth":
br.GroovesAddWidth = parseFloat(option[i]) || 0;
default:
break;
}

@ -1,45 +1,29 @@
import { Button, Card, Checkbox, Classes, H5, HTMLSelect, Radio, RadioGroup } from '@blueprintjs/core';
import { observable } from 'mobx';
import { Button, Classes } from '@blueprintjs/core';
import { observer } from 'mobx-react';
import React from 'react';
import { Vector3 } from 'three';
import { begin } from 'xaop';
import { app } from '../../../ApplicationServices/Application';
import { EBoardKeyList } from '../../../Common/BoardKeyList';
import { CheckObjectType } from '../../../Common/CheckoutVaildValue';
import { KeyBoard } from '../../../Common/KeyEnum';
import { ToFixed } from '../../../Common/Utils';
import { Board } from '../../../DatabaseServices/Entity/Board';
import { TemplateRecord } from '../../../DatabaseServices/Template/TemplateRecord';
import { PromptStatus } from '../../../Editor/PromptResult';
import { userConfig } from '../../../Editor/UserConfig';
import { Input5Or4Component, Notes, SetBoardDataBlock, SetBoardDataItem } from '../../../UI/Components/Board/BoardCommon';
import { BoardModalType } from '../../../UI/Components/Board/BoardModal';
import { ModalFooter, ModalHeader } from '../../../UI/Components/Modal/ModalContainer';
import { ModalState } from '../../../UI/Components/Modal/ModalInterface';
import { ToasterInput } from '../../../UI/Components/Toaster';
import { GoodsList, IGoodInfo } from '../../../UI/MaterialEditor/GoodsList';
import '../Modals/Rec2Br.less';
import { GetOptionState, R2BConfigComponent } from '../R2bConfigComponent';
import { R2BProcessComponent } from '../R2BProcessComponent';
import { Rec2BrStore } from '../Rec2BrStore';
enum GetOptionState
{
GetDistance = 0,
GetBoard = 1,
GetTemplate = 2,
}
@observer
export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
{
private showShops = observable.box(false);
private startSelect = observable.box(false);
private m_ScaleParameter = [
["knifeRadius", "刀半径"],
["grooveAddLength", "槽加长"], ["grooveAddWidth", "槽加宽"], ["grooveAddDepth", "槽加深"]
];
private matPars = [
["boardMatName", "板材名"], ["material", "材料"], ["color", "颜色"]
];
private removeFuncs: Function[] = []; //移除注入
componentDidMount()
{
this.removeFuncs.push(
@ -114,17 +98,6 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
app.Editor.MaskManage.ShowMask();
app.Editor.ModalManage.ToggleShow();
};
private startSelectTemplate = () =>
{
this.startSelect.set(true);
};
private selectGoods = (good: IGoodInfo) =>
{
this.props.store.m_Option.boardMatName = good.name;//是否需要更新UIOption
this.props.store.m_Option.material = good.material;
this.props.store.m_Option.color = good.color;
this.showShops.set(false);
};
render()
{
const store = this.props.store;
@ -144,356 +117,8 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
className={Classes.DIALOG_BODY + " rec2br"}
>
<div style={{ display: "flex" }}>
<Card>
<H5></H5>
<div>
<div className="flex br-mat">
<div>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="cabinetDeep"
option={store.m_Option}
uiOption={store.UIOption}//style={{ display: "inline-flex", width: "65%" }}
title="柜深"
/>
</div>
<button
style={{
minHeight: 18,
height: 18,
padding: 0,
fontSize: 8
}}
className="bp3-button bp3-intent-success"
onClick={() => this.getOption(GetOptionState.GetDistance)}
></button>
</div>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="cabinetCurtail"
option={store.m_Option}
uiOption={store.UIOption}
title="柜体内缩"
/>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="maxThickness"
option={store.m_Option}
uiOption={store.UIOption}
title="最大板厚"
/>
</div>
<H5></H5>
<div className="flex" style={{ flexDirection: "column" }}>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["backBrThick", "板厚"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["backBrBiggerThanHeight", "大于高"], ["backBrBiggerThanWidth", "大于宽"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="backBrFrontMove"
option={store.m_Option}
uiOption={store.UIOption}
title="背板前移"
/>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["backBrLeftExtend", "左延伸"], ["backBrRightExtend", "右延伸"], ["backBrUpExtend", "上延伸"], ["backBrDownExtend", "下延伸"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
</div>
<H5></H5>
<div className="flex" style={{}}>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["verticalBrShrink", "立板"], ["layerBrShrink", "层板"], ["topBrShrink", "顶板"], ["bottomBrShrink", "底板"], ["groundLineBrShrink", "地脚"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
</div>
<H5></H5>
<div className="flex" style={{ flexDirection: "column" }}>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isfarLeftVerticalBrName}
label={"最左侧立板"}
onChange={() =>
{
store.m_Option.isfarLeftVerticalBrName = !store.m_Option.isfarLeftVerticalBrName;
store.UIOption.isfarLeftVerticalBrName = store.m_Option.isfarLeftVerticalBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="farLeftVerticalBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isfarRightVerticalBrName}
label={"最右侧立板"}
onChange={() =>
{
store.m_Option.isfarRightVerticalBrName = !store.m_Option.isfarRightVerticalBrName;
store.UIOption.isfarRightVerticalBrName = store.m_Option.isfarRightVerticalBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="farRightVerticalBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.istopMostLayerBrName}
label={"最顶层板"}
onChange={() =>
{
store.m_Option.istopMostLayerBrName = !store.m_Option.istopMostLayerBrName;
store.UIOption.istopMostLayerBrName = store.m_Option.istopMostLayerBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="topMostLayerBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isbottomMostLayerBrName}
label={"最底层板"}
onChange={() =>
{
store.m_Option.isbottomMostLayerBrName = !store.m_Option.isbottomMostLayerBrName;
store.UIOption.isbottomMostLayerBrName = store.m_Option.isbottomMostLayerBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="bottomMostLayerBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isbottomMostBackBrName}
label={"最底背板"}
onChange={() =>
{
store.m_Option.isbottomMostBackBrName = !store.m_Option.isbottomMostBackBrName;
store.UIOption.isbottomMostBackBrName = store.m_Option.isbottomMostBackBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="bottomMostBackBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isstripeBrName}
label={"收口条"}
onChange={() =>
{
store.m_Option.isstripeBrName = !store.m_Option.isstripeBrName;
store.UIOption.isstripeBrName = store.m_Option.isstripeBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="stripeBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div>
<div>
</div>
<RadioGroup
inline
selectedValue={store.m_Option.isMultiBackBr ? "1" : "0"}
onChange={(e) =>
{
store.m_Option.isMultiBackBr = e.currentTarget.value === "1";
store.UIOption.isMultiBackBr = store.m_Option.isMultiBackBr;
}}
>
<Radio label="多背板" value={"1"} />
<Radio label="单背板" value={"0"} />
</RadioGroup>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.iscabinetName}
label={"修改柜名"}
onChange={() =>
{
store.m_Option.iscabinetName = !store.m_Option.iscabinetName;
store.UIOption.iscabinetName = store.m_Option.iscabinetName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="cabinetName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
</div>
</Card>
<Card>
<H5></H5>
<div>
<SetBoardDataBlock
type={CheckObjectType.R2B}
pars={this.m_ScaleParameter}
option={store.m_Option.grooveOption}
uiOption={store.UIOption.grooveOption}
className="flexWrap"
/>
<div className="flex br-mat">
<div>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="roomName"
option={store.m_Option}
uiOption={store.UIOption}
title="房间名"
placeHolder="输入房间名"
/>
</div>
<button
style={{
minHeight: 18,
height: 18,
padding: 0,
fontSize: 8
}}
className="bp3-button bp3-intent-success"
onClick={() => this.getOption(GetOptionState.GetBoard)}
></button>
</div>
<div className="flex br-mat">
<SetBoardDataBlock
type={CheckObjectType.R2B}
pars={this.matPars}
option={store.m_Option}
uiOption={store.UIOption}
isInline={true}
/>
<button
style={{ width: "2rem" }}
className="bp3-button bp3-intent-success"
onClick={() => this.showShops.set(true)}
></button>
{
this.showShops.get() && <GoodsList
open={this.showShops}
select={this.selectGoods}
/>
}
</div>
<label className="bp3-label bp3-inline .modifier">
<span></span>
<HTMLSelect
className="select-drillType"
value={store.m_Option.drillType}
style={{
padding: "0 5px",
width: "100%",
// outline: this.state.isDanger && "1px red solid"
}}
options={selectOptions}
onChange={(e) =>
{
store.m_Option.drillType = e.target.value;
store.UIOption.drillType = store.m_Option.drillType;
}}
// onFocus={() => { if (this.props.onFocus) this.props.onFocus(); }}
/>
</label>
</div>
<H5></H5>
<div>
{
<Input5Or4Component
type={CheckObjectType.R2B}
showDirectionIcon={true}
hasCenter={false}
optKey=""
upKey="sealedUp"
downKey="sealedDown"
leftKey="sealedLeft"
rightKey="sealedRight"
option={store.m_Option}
uiOption={store.UIOption}
/>
}
</div>
<H5></H5>
<div className={Classes.CARD + " note-card"} style={{ height: 250, overflow: "auto" }}>
<Notes remarks={store.m_Option.remarks} />
</div>
<div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between", paddingTop: 10 }}>
<Checkbox
checked={store.m_Option.backBrUseTemplate}
label={"背板使用模板"}
onChange={() =>
{
store.m_Option.backBrUseTemplate = !store.m_Option.backBrUseTemplate;
store.UIOption.backBrUseTemplate = store.m_Option.backBrUseTemplate;
}}
/>
<button
style={{
minHeight: 18,
height: 18,
padding: 0,
fontSize: 8,
width: "8rem"
}}
className="bp3-button bp3-intent-success"
onClick={() => this.getOption(GetOptionState.GetTemplate)}
></button>
</div>
</div>
</Card>
{/* <Card>
</Card> */}
<R2BConfigComponent store={store} getOption={this.getOption} />
<R2BProcessComponent store={store} getOption={this.getOption} />
</div>
</div>
<ModalFooter store={store} type={BoardModalType.Rec2Br}>

@ -19,6 +19,10 @@ import { Rec2BrStore } from "./Rec2BrStore";
import { TopPanelStore } from "../../UI/Store/TopPanelStore";
import { AppConfirm } from "../../UI/Components/Common/Confirm";
import { Buy2To3 } from "../../Common/HostUrl";
import { IUpdateBoardInfosOption } from "../../UI/Components/Board/UpdateBoardInfointerface";
import { userConfigStore } from "../../UI/Store/UserConfigStore";
import { BoardModalType } from "../../UI/Components/Board/BoardModal";
import { EBoardKeyList } from "../../Common/BoardKeyList";
const MaxBoardDistance = 200;//左右侧板,顶底板距离边缘的最大距离
@ -59,7 +63,7 @@ export class Polyline2Board implements Command
if (ss.Status === PromptStatus.Cancel) return;
let ens = ss.SelectSet.SelectEntityList as Polyline[];
this.Doit(ens);
await this.Doit(ens);
});
};
boardThick: number; //板件厚度.
@ -118,7 +122,7 @@ export class Polyline2Board implements Command
this.maxThickness = option.maxThickness;
}
//绘制 传入曲线id表
Doit(pls: Polyline[])
async Doit(pls: Polyline[])
{
//默认认为用户传进来的pls都平行,都在一个平面内
if (!pls || pls.length === 0) return;
@ -199,13 +203,6 @@ export class Polyline2Board implements Command
br.ApplyMatrix(m);
};
//切割
for (let br of layerVerBoards)
{
br.Subtract(backBoards);
//柜体内缩
CurtailFunc(br, this.fontDis);
}
for (let br of tzdj)
{
CurtailFunc(br, this.fontDis, false);
@ -213,7 +210,8 @@ export class Polyline2Board implements Command
//修改材料数据,封边数据,备注数据
let storeOption = this.store.m_Option;
allBoards.forEach((b) =>
for (let b of allBoards)
{
b.KnifeRadius = this.knifeRadius;
b.GroovesAddDepth = this.grooveDepth;
@ -222,12 +220,15 @@ export class Polyline2Board implements Command
b.BoardProcessOption.material = storeOption.material;
b.BoardProcessOption.color = storeOption.color;
b.BoardProcessOption.boardName = storeOption.boardMatName;
b.BoardProcessOption.roomName = storeOption.roomName;
b.BoardProcessOption.drillType = storeOption.drillType;
b.BoardProcessOption.highDrill.fill(storeOption.drillType);
b.BoardProcessOption.sealedUp = storeOption.sealedUp;
b.BoardProcessOption.sealedDown = storeOption.sealedDown;
b.BoardProcessOption.sealedLeft = storeOption.sealedLeft;
b.BoardProcessOption.sealedRight = storeOption.sealedRight;
let remarks: [string, string][] = [];
for (let d of storeOption.remarks)
{
@ -235,7 +236,7 @@ export class Polyline2Board implements Command
remarks.push([d[0], d[1]]);
}
b.BoardProcessOption.remarks = remarks;
});
}
let cabGroup: Board[][] = [];
@ -517,6 +518,60 @@ export class Polyline2Board implements Command
}
}
//#endregion
//根据板名修改属性
let nameOption: IUpdateBoardInfosOption;
let config: { [key: string]: IUpdateBoardInfosOption; };
if (storeOption.useBrName)
{
let configs = await userConfigStore.GetAllConfigs(BoardModalType.UpdateBoardInfo);
config = configs[storeOption.configName];
}
if (config)
for (let b of allBoards)
{
nameOption = config.option[b.Name];
if (!nameOption) continue;
b.GroovesAddDepth = parseFloat(nameOption.grooveAddDepth) || 0;
b.GroovesAddLength = parseFloat(nameOption.grooveAddLength) || 0;
b.GroovesAddWidth = parseFloat(nameOption.grooveAddWidth) || 0;
b.BoardProcessOption[EBoardKeyList.BrMat] = nameOption[EBoardKeyList.BrMat];
b.BoardProcessOption[EBoardKeyList.Mat] = nameOption[EBoardKeyList.Mat];
b.BoardProcessOption[EBoardKeyList.Color] = nameOption[EBoardKeyList.Color];
b.BoardProcessOption[EBoardKeyList.Lines] = nameOption[EBoardKeyList.Lines];
b.BoardProcessOption[EBoardKeyList.CabinetName] = nameOption[EBoardKeyList.CabinetName];
b.BoardProcessOption[EBoardKeyList.BigHole] = nameOption[EBoardKeyList.BigHole];
b.BoardProcessOption[EBoardKeyList.ComposingFace] = nameOption[EBoardKeyList.ComposingFace];
b.BoardProcessOption.frontDrill = nameOption.upDownDrill[0];
b.BoardProcessOption.backDrill = nameOption.upDownDrill[1];
b.KnifeRadius = parseFloat(nameOption.knifeRadius);
b.BoardProcessOption.roomName = nameOption.roomName;
b.BoardProcessOption.drillType = nameOption.drillType;
b.BoardProcessOption.highDrill.fill(nameOption.drillType);
b.BoardProcessOption.sealedUp = nameOption.sealedUp;
b.BoardProcessOption.sealedDown = nameOption.sealedDown;
b.BoardProcessOption.sealedLeft = nameOption.sealedLeft;
b.BoardProcessOption.sealedRight = nameOption.sealedRight;
let remarks: [string, string][] = [];
for (let d of nameOption.remarks)
{
if (d[0] && d[1])
remarks.push([d[0], d[1]]);
}
b.BoardProcessOption.remarks = remarks;
}
for (let br of layerVerBoards)
{
br.Subtract(backBoards);
//柜体内缩
CurtailFunc(br, this.fontDis);
}
}
DrawBoard(pls: Polyline[], isBack = false, color?: number): Board[]

@ -0,0 +1,65 @@
import * as React from 'react';
import { Checkbox, Classes } from '@blueprintjs/core';
import { Rec2BrStore } from './Rec2BrStore';
import { observable } from 'mobx';
import { observer } from 'mobx-react';
import { userConfigStore } from '../../UI/Store/UserConfigStore';
import { BoardModalType } from '../../UI/Components/Board/BoardModal';
import { arrayRemove } from '../../Common/ArrayExt';
export interface ISelectBrConfigNameProps
{
store: Rec2BrStore;
}
@observer
export class SelectBrConfigName extends React.Component<ISelectBrConfigNameProps> {
@observable private configNames: string[] = [];
async componentDidMount()
{
let configs = await userConfigStore.GetAllConfigs(BoardModalType.UpdateBoardInfo);
if (!configs)
return;
let names = [...Object.keys(configs)];
this.configNames.push(...names);
if (!names.includes(this.props.store.m_Option.configName))
this.configNames.unshift("");
}
public render()
{
const store = this.props.store;
return (
<>
<Checkbox
label="使用板件名配置"
inline
checked={store.m_Option.useBrName}
onChange={() => store.m_Option.useBrName = !store.m_Option.useBrName}
/>
<select
className={Classes.SELECT}
value={store.m_Option.configName}
onChange={this.handleChange}
style={{ maxWidth: 80 }}
>
{
this.configNames.map(n =>
{
return <option value={n} key={n} >{n}</option>;
})
}
</select>
</>
);
}
private handleChange = (e: React.ChangeEvent<HTMLSelectElement>) =>
{
const option = this.props.store.m_Option;
option.configName = e.target.value;
if (e.target.value !== "")
arrayRemove(this.configNames, "");
};
}

@ -0,0 +1,164 @@
import { Card, Checkbox, Classes, H5, HTMLSelect } from "@blueprintjs/core";
import { observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { CheckObjectType } from "../../Common/CheckoutVaildValue";
import { userConfig } from '../../Editor/UserConfig';
import { Input5Or4Component, Notes, SetBoardDataBlock, SetBoardDataItem } from "../../UI/Components/Board/BoardCommon";
import { GoodsList, IGoodInfo } from '../../UI/MaterialEditor/GoodsList';
import { SelectBrConfigName } from './R2BCommon';
import { GetOptionState } from './R2bConfigComponent';
import { Rec2BrStore } from './Rec2BrStore';
export interface IR2BProcessComponentProps
{
store: Rec2BrStore;
getOption: (state: GetOptionState) => void;
}
@observer
export class R2BProcessComponent extends React.Component<IR2BProcessComponentProps> {
private showShops = observable.box(false);
private m_ScaleParameter = [
["knifeRadius", "刀半径"],
["grooveAddLength", "槽加长"], ["grooveAddWidth", "槽加宽"], ["grooveAddDepth", "槽加深"]
];
private matPars = [
["boardMatName", "板材名"], ["material", "材料"], ["color", "颜色"]
];
public render()
{
const store = this.props.store;
const selectOptions = userConfig.DrillConfigs.size > 0 ? [...userConfig.DrillConfigs.keys(), "不排"] : [];
return (
<Card>
<H5></H5>
<div>
<SetBoardDataBlock
type={CheckObjectType.R2B}
pars={this.m_ScaleParameter}
option={store.m_Option.grooveOption}
uiOption={store.UIOption.grooveOption}
className="flexWrap"
/>
<div className="flex br-mat">
<div>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="roomName"
option={store.m_Option}
uiOption={store.UIOption}
title="房间名"
placeHolder="输入房间名"
/>
</div>
<button
style={{
minHeight: 18,
height: 18,
padding: 0,
fontSize: 8
}}
className="bp3-button bp3-intent-success"
onClick={() => this.props.getOption(GetOptionState.GetBoard)}
></button>
</div>
<div className="flex br-mat">
<SetBoardDataBlock
type={CheckObjectType.R2B}
pars={this.matPars}
option={store.m_Option}
uiOption={store.UIOption}
isInline={true}
/>
<button
style={{ width: "2rem" }}
className="bp3-button bp3-intent-success"
onClick={() => this.showShops.set(true)}
></button>
{
this.showShops.get() && <GoodsList
open={this.showShops}
select={this.selectGoods}
/>
}
</div>
<label className="bp3-label bp3-inline .modifier">
<span></span>
<HTMLSelect
className="select-drillType"
value={store.m_Option.drillType}
style={{
padding: "0 5px",
width: "100%",
// outline: this.state.isDanger && "1px red solid"
}}
options={selectOptions}
onChange={(e) =>
{
store.m_Option.drillType = e.target.value;
store.UIOption.drillType = store.m_Option.drillType;
}}
// onFocus={() => { if (this.props.onFocus) this.props.onFocus(); }}
/>
</label>
</div>
<H5></H5>
<div>
{
<Input5Or4Component
type={CheckObjectType.R2B}
showDirectionIcon={true}
hasCenter={false}
optKey=""
upKey="sealedUp"
downKey="sealedDown"
leftKey="sealedLeft"
rightKey="sealedRight"
option={store.m_Option}
uiOption={store.UIOption}
/>
}
</div>
<H5></H5>
<div className={Classes.CARD + " note-card"} style={{ height: 250, overflow: "auto", marginBottom: 10 }}>
<Notes remarks={store.m_Option.remarks} />
</div>
<SelectBrConfigName store={store} />
<div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between", paddingTop: 10 }}>
<Checkbox
checked={store.m_Option.backBrUseTemplate}
label={"背板使用模板"}
onChange={() =>
{
store.m_Option.backBrUseTemplate = !store.m_Option.backBrUseTemplate;
store.UIOption.backBrUseTemplate = store.m_Option.backBrUseTemplate;
}}
/>
<button
style={{
minHeight: 18,
height: 18,
padding: 0,
fontSize: 8,
width: "8rem"
}}
className="bp3-button bp3-intent-success"
onClick={() => this.props.getOption(GetOptionState.GetTemplate)}
></button>
</div>
</div>
</Card>
);
}
private selectGoods = (good: IGoodInfo) =>
{
this.props.store.m_Option.boardMatName = good.name;//是否需要更新UIOption
this.props.store.m_Option.material = good.material;
this.props.store.m_Option.color = good.color;
this.showShops.set(false);
};
}

@ -0,0 +1,262 @@
import { Rec2BrStore } from "./Rec2BrStore";
import { observer } from "mobx-react";
import React from 'react';
import { SetBoardDataItem, SetBoardDataBlock } from "../../UI/Components/Board/BoardCommon";
import { CheckObjectType } from "../../Common/CheckoutVaildValue";
import { Card, H5, Checkbox, RadioGroup, Radio } from "@blueprintjs/core";
import { ToasterInput } from "../../UI/Components/Toaster";
export enum GetOptionState
{
GetDistance = 0,
GetBoard = 1,
GetTemplate = 2,
}
interface IR2BConfigComponentProps
{
store: Rec2BrStore;
getOption: (state: GetOptionState) => void;
}
@observer
export class R2BConfigComponent extends React.Component<IR2BConfigComponentProps>
{
render()
{
const store = this.props.store;
return (
<Card>
<H5></H5>
<div>
<div className="flex br-mat">
<div>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="cabinetDeep"
option={store.m_Option}
uiOption={store.UIOption}//style={{ display: "inline-flex", width: "65%" }}
title="柜深"
/>
</div>
<button
style={{
minHeight: 18,
height: 18,
padding: 0,
fontSize: 8
}}
className="bp3-button bp3-intent-success"
onClick={() => this.props.getOption(GetOptionState.GetDistance)}
></button>
</div>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="cabinetCurtail"
option={store.m_Option}
uiOption={store.UIOption}
title="柜体内缩"
/>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="maxThickness"
option={store.m_Option}
uiOption={store.UIOption}
title="最大板厚"
/>
</div>
<H5></H5>
<div className="flex" style={{ flexDirection: "column" }}>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["backBrThick", "板厚"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["backBrBiggerThanHeight", "大于高"], ["backBrBiggerThanWidth", "大于宽"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
<SetBoardDataItem
type={CheckObjectType.R2B}
optKey="backBrFrontMove"
option={store.m_Option}
uiOption={store.UIOption}
title="背板前移"
/>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["backBrLeftExtend", "左延伸"], ["backBrRightExtend", "右延伸"], ["backBrUpExtend", "上延伸"], ["backBrDownExtend", "下延伸"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
</div>
<H5></H5>
<div className="flex" style={{}}>
<SetBoardDataBlock
type={CheckObjectType.R2B}
className="flexWrap"
pars={[["verticalBrShrink", "立板"], ["layerBrShrink", "层板"], ["topBrShrink", "顶板"], ["bottomBrShrink", "底板"], ["groundLineBrShrink", "地脚"]]}
option={store.m_Option}
uiOption={store.UIOption}
/>
</div>
<H5></H5>
<div className="flex" style={{ flexDirection: "column" }}>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isfarLeftVerticalBrName}
label={"最左侧立板"}
onChange={() =>
{
store.m_Option.isfarLeftVerticalBrName = !store.m_Option.isfarLeftVerticalBrName;
store.UIOption.isfarLeftVerticalBrName = store.m_Option.isfarLeftVerticalBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="farLeftVerticalBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isfarRightVerticalBrName}
label={"最右侧立板"}
onChange={() =>
{
store.m_Option.isfarRightVerticalBrName = !store.m_Option.isfarRightVerticalBrName;
store.UIOption.isfarRightVerticalBrName = store.m_Option.isfarRightVerticalBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="farRightVerticalBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.istopMostLayerBrName}
label={"最顶层板"}
onChange={() =>
{
store.m_Option.istopMostLayerBrName = !store.m_Option.istopMostLayerBrName;
store.UIOption.istopMostLayerBrName = store.m_Option.istopMostLayerBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="topMostLayerBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isbottomMostLayerBrName}
label={"最底层板"}
onChange={() =>
{
store.m_Option.isbottomMostLayerBrName = !store.m_Option.isbottomMostLayerBrName;
store.UIOption.isbottomMostLayerBrName = store.m_Option.isbottomMostLayerBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="bottomMostLayerBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isbottomMostBackBrName}
label={"最底背板"}
onChange={() =>
{
store.m_Option.isbottomMostBackBrName = !store.m_Option.isbottomMostBackBrName;
store.UIOption.isbottomMostBackBrName = store.m_Option.isbottomMostBackBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="bottomMostBackBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.isstripeBrName}
label={"收口条"}
onChange={() =>
{
store.m_Option.isstripeBrName = !store.m_Option.isstripeBrName;
store.UIOption.isstripeBrName = store.m_Option.isstripeBrName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="stripeBrName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
<div>
<div>
</div>
<RadioGroup
inline
selectedValue={store.m_Option.isMultiBackBr ? "1" : "0"}
onChange={(e) =>
{
store.m_Option.isMultiBackBr = e.currentTarget.value === "1";
store.UIOption.isMultiBackBr = store.m_Option.isMultiBackBr;
}}
>
<Radio label="多背板" value={"1"} />
<Radio label="单背板" value={"0"} />
</RadioGroup>
</div>
<div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
<Checkbox
checked={store.m_Option.iscabinetName}
label={"修改柜名"}
onChange={() =>
{
store.m_Option.iscabinetName = !store.m_Option.iscabinetName;
store.UIOption.iscabinetName = store.m_Option.iscabinetName;
}}
/>
<ToasterInput
type={CheckObjectType.R2B}
optKey="cabinetName"
option={store.m_Option}
uiOption={store.UIOption}
inline={true}
/>
</div>
</div>
</Card>
);
}
}

@ -1,14 +1,15 @@
import { BoardStore } from "../../UI/Store/BoardStore";
import { IBaseOption, IGrooveOption } from "../../UI/Store/BoardInterface";
import { IBaseOption, IGrooveOption, IUiOption } from "../../UI/Store/BoardInterface";
import { CheckoutValid, CheckObjectType } from "../../Common/CheckoutVaildValue";
import { DataAdapter } from "../../Common/DataAdapter";
import { TemplateRecord } from "../../DatabaseServices/Template/TemplateRecord";
import { observable } from "mobx";
import { EBoardKeyList } from "../../Common/BoardKeyList";
export class Rec2BrStore extends BoardStore
{
@observable m_Option: IRec2BrOption;
protected m_UiOption;
protected m_UiOption: IUiOption<IRec2BrOption>;
constructor()
{
super();
@ -17,6 +18,7 @@ export class Rec2BrStore extends BoardStore
private GetDefaultOption()
{
let originOption: IRec2BrOption = {
version: 1,
cabinetDeep: 400,
cabinetBrThick: 18,
cabinetCurtail: 0,
@ -67,6 +69,8 @@ export class Rec2BrStore extends BoardStore
backBrTemplate: null,
remarks: Array.from({ length: 12 }, () => ["", ""]),
maxThickness: 20,
useBrName: false,
configName: ""
};
return originOption;
}
@ -134,7 +138,7 @@ interface IRec2BrOption extends IBaseOption
//槽加深
//槽加宽
grooveOption: IGrooveOption;
roomName: string;//房间名
[EBoardKeyList.RoomName]: string;//房间名
boardMatName: string;//板材名
material: string;//材料
color: string;//颜色
@ -147,4 +151,6 @@ interface IRec2BrOption extends IBaseOption
//备注
remarks: [string, string][];
maxThickness: number;
useBrName: boolean; //使用板件名配置
configName: string;
}

@ -540,7 +540,6 @@ export const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {
[EBoardKeyList.BigHole]: FaceDirection.Front,
[EBoardKeyList.DrillType]: "",
[EBoardKeyList.ComposingFace]: ComposingType.Positive,
highDrill: [],
upDownDrill: [true, true],
[EBoardKeyList.UpSealed]: "1",//封边上下左右
[EBoardKeyList.DownSealed]: "1",
@ -548,24 +547,30 @@ export const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {
[EBoardKeyList.RightSealed]: "1",
[EBoardKeyList.KnifeRad]: "3",
remarks: Array.from({ length: 10 }, () => ["", ""]),
[EBoardKeyList.BrMat]: "",
[EBoardKeyList.Mat]: "",
[EBoardKeyList.Color]: "",
grooveAddDepth: "0",
grooveAddLength: "0",
grooveAddWidth: "0",
condition: {
[EBoardKeyList.RoomName]: false,
[EBoardKeyList.CabinetName]: false,
[EBoardKeyList.Lines]: false,
[EBoardKeyList.BigHole]: false,
[EBoardKeyList.DrillType]: false,
[EBoardKeyList.ComposingFace]: false,
[EBoardKeyList.UpSealed]: false,
[EBoardKeyList.DownSealed]: false,
[EBoardKeyList.LeftSealed]: false,
[EBoardKeyList.RightSealed]: false,
upDrill: false,
downDrill: false,
leftDrill: false,
rightDrill: false,
useZhengFanDrill: false,
remarks: false,
[EBoardKeyList.KnifeRad]: false,
[EBoardKeyList.Lines]: true,
[EBoardKeyList.BigHole]: true,
[EBoardKeyList.DrillType]: true,
[EBoardKeyList.ComposingFace]: true,
[EBoardKeyList.UpSealed]: true,
[EBoardKeyList.DownSealed]: true,
[EBoardKeyList.LeftSealed]: true,
[EBoardKeyList.RightSealed]: true,
useZhengFanDrill: true,
remarks: true,
[EBoardKeyList.KnifeRad]: true,
[EBoardKeyList.Mat]: true,
grooveAddDepth: true,
grooveAddLength: true,
grooveAddWidth: true,
}
};

@ -1,8 +1,12 @@
import { Button, Checkbox, Classes, HTMLSelect } from '@blueprintjs/core';
import { Button, Checkbox, Classes, HTMLSelect, Intent } from '@blueprintjs/core';
import { observer } from 'mobx-react';
import * as React from 'react';
import { safeEval } from '../../../Common/eval';
import { IBoardFindOption } from '../../Store/BoardFindInterface';
import { EBoardKeyList } from '../../../Common/BoardKeyList';
import { IUpdateBoardInfosOption } from './UpdateBoardInfointerface';
import { observable } from 'mobx';
import { GoodsList, IGoodInfo } from '../../MaterialEditor/GoodsList';
export interface IBoardProps
{
@ -122,3 +126,87 @@ export class BoardFindSelectItem extends React.Component<IFindSelectItem, {}> {
);
}
}
interface IMatColorComProps
{
option: IBoardFindOption | IUpdateBoardInfosOption;
getBoardOption: () => void;
change?: () => void;
hasCompare: boolean;
}
@observer
export class MatColorCom extends React.Component<IMatColorComProps>
{
showShops = observable.box(false);
render()
{
const { option, hasCompare } = this.props;
return (
<div className="flex mat-color">
<div>
<div>
<span></span>
{
hasCompare && <HTMLSelect
options={["=", "!="]}
/>
}
<input className={Classes.INPUT} value={option[EBoardKeyList.BrMat]} onChange={e => option[EBoardKeyList.BrMat] = e.target.value} />
</div>
<div>
<Checkbox
checked={option.condition.material}
label="材料"
inline
onChange={() =>
{
option.condition.material = !option.condition.material;
if (this.props.change)
this.props.change();
}}
/>
{
hasCompare && <HTMLSelect
options={["=", "!="]}
/>
}
<input className={Classes.INPUT} value={option[EBoardKeyList.Mat]} onChange={e => option[EBoardKeyList.Mat] = e.target.value} />
</div>
<div>
<span></span>
{
hasCompare && <HTMLSelect
options={["=", "!="]}
/>
}
<input className={Classes.INPUT} value={option[EBoardKeyList.Color]} onChange={e => option[EBoardKeyList.Color] = e.target.value} />
</div>
</div>
<div className="flex">
<Button intent={Intent.PRIMARY} onClick={() => this.showShops.set(true)}></Button>
<Button
intent={Intent.PRIMARY}
onClick={() => this.props.getBoardOption()}
></Button>
</div>
{
this.showShops.get() && <GoodsList
open={this.showShops}
select={this.handleSelectGoods}
/>
}
</div>
);
}
private handleSelectGoods = (good: IGoodInfo) =>
{
const option = this.props.option;
option[EBoardKeyList.BrMat] = good.name;
option[EBoardKeyList.Mat] = good.material;
option[EBoardKeyList.Color] = good.color;
this.showShops.set(false);
};
}

@ -2,7 +2,7 @@ import * as React from 'react';
import { Classes, Button, H5, Checkbox, HTMLSelect, Popover, Card, Intent, Position } from '@blueprintjs/core';
import { inject, observer } from 'mobx-react';
import { BoardFindStore } from '../../Store/BoardFindModifyStore';
import { BoardFindItem, BoardFindSelectItem } from './BoardFindCommon';
import { BoardFindItem, BoardFindSelectItem, MatColorCom } from './BoardFindCommon';
import { BoardModalType } from './BoardModal';
import { ModalState } from '../Modal/ModalInterface';
import { EFindType, ECompareType, DRILL_KEYS } from '../../Store/BoardFindInterface';
@ -520,53 +520,12 @@ export default class BoardFindModifyModal extends React.Component<{ store?: Boar
/>
</div>
</div>
<div className="flex mat-color">
<div>
<div>
<span></span>
<HTMLSelect
options={["=", "!="]}
/>
<input className={Classes.INPUT} value={option[EBoardKeyList.BrMat]} onChange={e => option[EBoardKeyList.BrMat] = e.target.value} />
</div>
<div>
<Checkbox
checked={option.condition.material}
label="材料"
inline
onChange={() =>
{
option.condition.material = !option.condition.material;
this.handleIsSelectAll();
}}
/>
<HTMLSelect
options={["=", "!="]}
/>
<input className={Classes.INPUT} value={option[EBoardKeyList.Mat]} onChange={e => option[EBoardKeyList.Mat] = e.target.value} />
</div>
<div>
<span></span>
<HTMLSelect
options={["=", "!="]}
/>
<input className={Classes.INPUT} value={option[EBoardKeyList.Color]} onChange={e => option[EBoardKeyList.Color] = e.target.value} />
</div>
</div>
<div className="flex">
<Button intent={Intent.PRIMARY} onClick={() => this.showShops.set(true)}></Button>
<Button
intent={Intent.PRIMARY}
onClick={() => this.getBoardOption(EBoardKeyList.Mat, "选择板件获取板材信息")}
></Button>
</div>
{
this.showShops.get() && <GoodsList
open={this.showShops}
select={this.handleSelectGoods}
/>
}
</div>
<MatColorCom
hasCompare
option={option}
getBoardOption={() => this.getBoardOption(EBoardKeyList.Mat, "选择板件获取板材信息")}
change={() => this.handleIsSelectAll()}
/>
<BoardFindSelectItem
useKey="lines"
k="lines"

@ -10,7 +10,6 @@ export interface IUpdateBoardInfosOption extends IBaseOption
[EBoardKeyList.BigHole]: FaceDirection;
[EBoardKeyList.DrillType]: string;
[EBoardKeyList.ComposingFace]: ComposingType;
highDrill: string[];
upDownDrill: [boolean, boolean];
[EBoardKeyList.UpSealed]?: string;//封边上下左右
[EBoardKeyList.DownSealed]?: string;
@ -18,6 +17,12 @@ export interface IUpdateBoardInfosOption extends IBaseOption
[EBoardKeyList.RightSealed]?: string;
[EBoardKeyList.KnifeRad]: string;
remarks: [string, string][];
[EBoardKeyList.BrMat]: string; //板材
[EBoardKeyList.Mat]: string;
[EBoardKeyList.Color]: string;
grooveAddLength: string;//槽加长/宽/高
grooveAddWidth: string;
grooveAddDepth: string;
}
export interface IUpdateInfoCondition
@ -32,11 +37,11 @@ export interface IUpdateInfoCondition
[EBoardKeyList.DownSealed]: boolean;
[EBoardKeyList.LeftSealed]: boolean;
[EBoardKeyList.RightSealed]: boolean;
upDrill: boolean;
downDrill: boolean;
leftDrill: boolean;
rightDrill: boolean;
useZhengFanDrill: boolean;
remarks: boolean;
[EBoardKeyList.KnifeRad]: boolean;
[EBoardKeyList.Mat]: boolean;
grooveAddLength: boolean;//槽加长/宽/高
grooveAddWidth: boolean;
grooveAddDepth: boolean;
}

@ -18,6 +18,7 @@ import { toJS } from 'mobx';
import { CommandWrap } from '../../../Editor/CommandMachine';
import { Board } from '../../../DatabaseServices/Entity/Board';
import { PromptStatus } from '../../../Editor/PromptResult';
import { MatColorCom } from './BoardFindCommon';
export interface IUpdateBoardInfoModalProps
{
@ -76,7 +77,7 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
title="板件名"
options={names}
value={store.currentBoardName}
onChange={(e) => store.UpdateBoardName(e.target.value)}
onChange={(e) => store.currentBoardName = e.target.value}
onSelect={val => store.UpdateBoardName(val)}
/>
<Button text="添加" intent={Intent.SUCCESS} onClick={this.addName} />
@ -135,12 +136,23 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
<HTMLSelect
options={this.selectOptions[k]}
value={option[k]}
onChange={e => option[k] = Number(e.target.value)}
onChange={e =>
{
if (typeof option[k] === 'number')
option[k] = Number(e.target.value);
else
option[k] = e.target.value;
}}
/>
</div>
);
})
}
<MatColorCom
option={option}
getBoardOption={() => this.getBoardOption(undefined)}
hasCompare={false}
/>
<div className="center seal-drill">
<div>
<Checkbox inline checked={condition[EBoardKeyList.UpSealed]}
@ -205,6 +217,26 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
optKey={EBoardKeyList.KnifeRad}
option={option}
/>
{
[["grooveAddLength", "槽加长"], ["grooveAddWidth", "槽加宽"], ["grooveAddDepth", "槽加深"]].map(([k, v]) =>
{
return (
<div className="info-item">
<Checkbox
label={v}
checked={condition[k]}
onChange={() => condition[k] = !condition[k]}
/>
<ToasterInput
type={CheckObjectType.BR}
optKey={k}
option={option}
/>
</div>
);
})
}
<Notes remarks={option.remarks} />
</div>
</Card>
@ -214,7 +246,7 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
private ok = (e: React.MouseEvent<HTMLButtonElement>) =>
{
let isAll = !!(e.currentTarget as HTMLButtonElement).getAttribute('data-isAll');
this.props.store.SaveConfig();
this.props.store.UpdateCurrentOption();
app.Editor.ModalManage.DestoryAndExec({ Status: ModalState.Ok, Data: { isAll } });
};
private addName = () =>
@ -252,7 +284,35 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
{
if (!store.nameOptionMap.has(br.Name))
{
store.nameOptionMap.set(br.Name, store.GetDefaultOption());
let brOption = br.BoardProcessOption;
let option = store.GetDefaultOption();
for (let key in option)
{
if (key === EBoardKeyList.KnifeRad)
option[key] = br.KnifeRadius.toString();
if (option.hasOwnProperty(key) && brOption.hasOwnProperty(key))
{
if (key === 'remarks')
{
for (let remark of brOption.remarks)
{
for (let r of option.remarks)
{
if (!r[0] || !r[1])
{
r[0] = remark[0];
r[1] = remark[1];
break;
}
}
}
}
else
option[key] = brOption[key];
}
}
store.nameOptionMap.set(br.Name, option);
}
}
@ -265,13 +325,21 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
app.Editor.ModalManage.ToggleShow();
app.Editor.MaskManage.Clear();
const store = this.props.store;
const key = e.currentTarget.getAttribute("data-type");
const key = e?.currentTarget?.getAttribute("data-type");
await CommandWrap(async () =>
{
let brRes = await app.Editor.GetEntity({ Msg: "选择板件", Filter: { filterTypes: [Board] } });
let brRes = await app.Editor.GetEntity({ Msg: "选择板件", NotNone: true, Filter: { filterTypes: [Board] } });
if (brRes.Status === PromptStatus.Cancel) return;
let br = brRes.Entity as Board;
store.m_Option[key] = br.BoardProcessOption[key];
if (key)
store.m_Option[key] = br.BoardProcessOption[key];
else
{
//选取材质
store.m_Option[EBoardKeyList.BrMat] = br.BoardProcessOption[EBoardKeyList.BrMat];
store.m_Option[EBoardKeyList.Mat] = br.BoardProcessOption[EBoardKeyList.Mat];
store.m_Option[EBoardKeyList.Color] = br.BoardProcessOption[EBoardKeyList.Color];
}
});
app.Editor.ModalManage.ToggleShow();
app.Editor.MaskManage.ShowMask();

@ -83,4 +83,26 @@
.notes {
width: 22vmin;
}
.mat-color {
&>div:first-child>div {
display: flex;
&>span {
padding-left: 27px;
width: 70px;
}
}
.bp3-control {
margin-bottom: 0;
}
button {
width: 40px;
height: 54px;
padding: 0;
text-align: center;
}
}
}

@ -30,6 +30,8 @@
li {
padding: 2px 0;
overflow: hidden;
text-overflow: ellipsis;
}
li:hover {

@ -32,17 +32,32 @@ export class UpdateBoardInfosStore extends BoardStore
for (let bn of BNS)
{
const option = this.GetDefaultOption();
if (bn === "地脚线")
switch (bn)
{
option.lines = LinesType.Reverse;
option.bigHoleDir = FaceDirection.Back;
case "地脚线":
option.lines = LinesType.Reverse;
option.bigHoleDir = FaceDirection.Back;
break;
case "右侧板":
option.bigHoleDir = FaceDirection.Back;
break;
case "底板":
case "背板":
option.bigHoleDir = FaceDirection.Back;
default:
break;
}
else if (bn === "右侧板")
option.bigHoleDir = FaceDirection.Back;
this.nameOptionMap.set(bn, option);
}
this.UpdateBoardName("左侧板");
}
UpdateCurrentOption()
{
if (this.nameOptionMap.has(this.currentBoardName))
Object.assign(this.nameOptionMap.get(this.currentBoardName), this.m_Option);
}
UpdateBoardName(name?: string)
{
if (!name) name = this.currentBoardName;
@ -52,7 +67,7 @@ export class UpdateBoardInfosStore extends BoardStore
SaveConfig()
{
const cof: IConfigOption = {};
Object.assign(this.nameOptionMap.get(this.currentBoardName), this.m_Option);
this.UpdateCurrentOption();
cof.option = toJS(this.nameOptionMap, { exportMapsAsObjects: true });
return cof;
}

@ -204,7 +204,7 @@ export class UserConfigStore extends Singleton
}
}
}
async GetAllConfigs(key: BoardModalType | string, isChangeRuleMap = true): Promise<Object | undefined>
async GetAllConfigs(key: BoardModalType | string, isChangeRuleMap = true): Promise<IConfigOption<AnyObject> | undefined>
{
let configs: IConfigOption<AnyObject> = appCache.get(key);
if (!configs)

Loading…
Cancel
Save