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

@ -1,45 +1,29 @@
import { Button, Card, Checkbox, Classes, H5, HTMLSelect, Radio, RadioGroup } from '@blueprintjs/core'; import { Button, Classes } from '@blueprintjs/core';
import { observable } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import React from 'react'; import React from 'react';
import { Vector3 } from 'three'; import { Vector3 } from 'three';
import { begin } from 'xaop'; import { begin } from 'xaop';
import { app } from '../../../ApplicationServices/Application'; import { app } from '../../../ApplicationServices/Application';
import { EBoardKeyList } from '../../../Common/BoardKeyList'; import { EBoardKeyList } from '../../../Common/BoardKeyList';
import { CheckObjectType } from '../../../Common/CheckoutVaildValue';
import { KeyBoard } from '../../../Common/KeyEnum'; import { KeyBoard } from '../../../Common/KeyEnum';
import { ToFixed } from '../../../Common/Utils'; import { ToFixed } from '../../../Common/Utils';
import { Board } from '../../../DatabaseServices/Entity/Board'; import { Board } from '../../../DatabaseServices/Entity/Board';
import { TemplateRecord } from '../../../DatabaseServices/Template/TemplateRecord'; import { TemplateRecord } from '../../../DatabaseServices/Template/TemplateRecord';
import { PromptStatus } from '../../../Editor/PromptResult'; import { PromptStatus } from '../../../Editor/PromptResult';
import { userConfig } from '../../../Editor/UserConfig'; import { userConfig } from '../../../Editor/UserConfig';
import { Input5Or4Component, Notes, SetBoardDataBlock, SetBoardDataItem } from '../../../UI/Components/Board/BoardCommon';
import { BoardModalType } from '../../../UI/Components/Board/BoardModal'; import { BoardModalType } from '../../../UI/Components/Board/BoardModal';
import { ModalFooter, ModalHeader } from '../../../UI/Components/Modal/ModalContainer'; import { ModalFooter, ModalHeader } from '../../../UI/Components/Modal/ModalContainer';
import { ModalState } from '../../../UI/Components/Modal/ModalInterface'; 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 '../Modals/Rec2Br.less';
import { GetOptionState, R2BConfigComponent } from '../R2bConfigComponent';
import { R2BProcessComponent } from '../R2BProcessComponent';
import { Rec2BrStore } from '../Rec2BrStore'; import { Rec2BrStore } from '../Rec2BrStore';
enum GetOptionState
{
GetDistance = 0,
GetBoard = 1,
GetTemplate = 2,
}
@observer @observer
export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}> 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[] = []; //移除注入 private removeFuncs: Function[] = []; //移除注入
componentDidMount() componentDidMount()
{ {
this.removeFuncs.push( this.removeFuncs.push(
@ -114,17 +98,6 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
app.Editor.MaskManage.ShowMask(); app.Editor.MaskManage.ShowMask();
app.Editor.ModalManage.ToggleShow(); 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() render()
{ {
const store = this.props.store; const store = this.props.store;
@ -144,356 +117,8 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
className={Classes.DIALOG_BODY + " rec2br"} className={Classes.DIALOG_BODY + " rec2br"}
> >
<div style={{ display: "flex" }}> <div style={{ display: "flex" }}>
<Card> <R2BConfigComponent store={store} getOption={this.getOption} />
<H5></H5> <R2BProcessComponent store={store} getOption={this.getOption} />
<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> */}
</div> </div>
</div> </div>
<ModalFooter store={store} type={BoardModalType.Rec2Br}> <ModalFooter store={store} type={BoardModalType.Rec2Br}>

@ -19,6 +19,10 @@ import { Rec2BrStore } from "./Rec2BrStore";
import { TopPanelStore } from "../../UI/Store/TopPanelStore"; import { TopPanelStore } from "../../UI/Store/TopPanelStore";
import { AppConfirm } from "../../UI/Components/Common/Confirm"; import { AppConfirm } from "../../UI/Components/Common/Confirm";
import { Buy2To3 } from "../../Common/HostUrl"; 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;//左右侧板,顶底板距离边缘的最大距离 const MaxBoardDistance = 200;//左右侧板,顶底板距离边缘的最大距离
@ -59,7 +63,7 @@ export class Polyline2Board implements Command
if (ss.Status === PromptStatus.Cancel) return; if (ss.Status === PromptStatus.Cancel) return;
let ens = ss.SelectSet.SelectEntityList as Polyline[]; let ens = ss.SelectSet.SelectEntityList as Polyline[];
this.Doit(ens); await this.Doit(ens);
}); });
}; };
boardThick: number; //板件厚度. boardThick: number; //板件厚度.
@ -118,7 +122,7 @@ export class Polyline2Board implements Command
this.maxThickness = option.maxThickness; this.maxThickness = option.maxThickness;
} }
//绘制 传入曲线id表 //绘制 传入曲线id表
Doit(pls: Polyline[]) async Doit(pls: Polyline[])
{ {
//默认认为用户传进来的pls都平行,都在一个平面内 //默认认为用户传进来的pls都平行,都在一个平面内
if (!pls || pls.length === 0) return; if (!pls || pls.length === 0) return;
@ -199,13 +203,6 @@ export class Polyline2Board implements Command
br.ApplyMatrix(m); br.ApplyMatrix(m);
}; };
//切割
for (let br of layerVerBoards)
{
br.Subtract(backBoards);
//柜体内缩
CurtailFunc(br, this.fontDis);
}
for (let br of tzdj) for (let br of tzdj)
{ {
CurtailFunc(br, this.fontDis, false); CurtailFunc(br, this.fontDis, false);
@ -213,7 +210,8 @@ export class Polyline2Board implements Command
//修改材料数据,封边数据,备注数据 //修改材料数据,封边数据,备注数据
let storeOption = this.store.m_Option; let storeOption = this.store.m_Option;
allBoards.forEach((b) =>
for (let b of allBoards)
{ {
b.KnifeRadius = this.knifeRadius; b.KnifeRadius = this.knifeRadius;
b.GroovesAddDepth = this.grooveDepth; b.GroovesAddDepth = this.grooveDepth;
@ -222,12 +220,15 @@ export class Polyline2Board implements Command
b.BoardProcessOption.material = storeOption.material; b.BoardProcessOption.material = storeOption.material;
b.BoardProcessOption.color = storeOption.color; b.BoardProcessOption.color = storeOption.color;
b.BoardProcessOption.boardName = storeOption.boardMatName; b.BoardProcessOption.boardName = storeOption.boardMatName;
b.BoardProcessOption.roomName = storeOption.roomName; b.BoardProcessOption.roomName = storeOption.roomName;
b.BoardProcessOption.drillType = storeOption.drillType; b.BoardProcessOption.drillType = storeOption.drillType;
b.BoardProcessOption.highDrill.fill(storeOption.drillType);
b.BoardProcessOption.sealedUp = storeOption.sealedUp; b.BoardProcessOption.sealedUp = storeOption.sealedUp;
b.BoardProcessOption.sealedDown = storeOption.sealedDown; b.BoardProcessOption.sealedDown = storeOption.sealedDown;
b.BoardProcessOption.sealedLeft = storeOption.sealedLeft; b.BoardProcessOption.sealedLeft = storeOption.sealedLeft;
b.BoardProcessOption.sealedRight = storeOption.sealedRight; b.BoardProcessOption.sealedRight = storeOption.sealedRight;
let remarks: [string, string][] = []; let remarks: [string, string][] = [];
for (let d of storeOption.remarks) for (let d of storeOption.remarks)
{ {
@ -235,7 +236,7 @@ export class Polyline2Board implements Command
remarks.push([d[0], d[1]]); remarks.push([d[0], d[1]]);
} }
b.BoardProcessOption.remarks = remarks; b.BoardProcessOption.remarks = remarks;
}); }
let cabGroup: Board[][] = []; let cabGroup: Board[][] = [];
@ -517,6 +518,60 @@ export class Polyline2Board implements Command
} }
} }
//#endregion //#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[] 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 { 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 { CheckoutValid, CheckObjectType } from "../../Common/CheckoutVaildValue";
import { DataAdapter } from "../../Common/DataAdapter"; import { DataAdapter } from "../../Common/DataAdapter";
import { TemplateRecord } from "../../DatabaseServices/Template/TemplateRecord"; import { TemplateRecord } from "../../DatabaseServices/Template/TemplateRecord";
import { observable } from "mobx"; import { observable } from "mobx";
import { EBoardKeyList } from "../../Common/BoardKeyList";
export class Rec2BrStore extends BoardStore export class Rec2BrStore extends BoardStore
{ {
@observable m_Option: IRec2BrOption; @observable m_Option: IRec2BrOption;
protected m_UiOption; protected m_UiOption: IUiOption<IRec2BrOption>;
constructor() constructor()
{ {
super(); super();
@ -17,6 +18,7 @@ export class Rec2BrStore extends BoardStore
private GetDefaultOption() private GetDefaultOption()
{ {
let originOption: IRec2BrOption = { let originOption: IRec2BrOption = {
version: 1,
cabinetDeep: 400, cabinetDeep: 400,
cabinetBrThick: 18, cabinetBrThick: 18,
cabinetCurtail: 0, cabinetCurtail: 0,
@ -67,6 +69,8 @@ export class Rec2BrStore extends BoardStore
backBrTemplate: null, backBrTemplate: null,
remarks: Array.from({ length: 12 }, () => ["", ""]), remarks: Array.from({ length: 12 }, () => ["", ""]),
maxThickness: 20, maxThickness: 20,
useBrName: false,
configName: ""
}; };
return originOption; return originOption;
} }
@ -134,7 +138,7 @@ interface IRec2BrOption extends IBaseOption
//槽加深 //槽加深
//槽加宽 //槽加宽
grooveOption: IGrooveOption; grooveOption: IGrooveOption;
roomName: string;//房间名 [EBoardKeyList.RoomName]: string;//房间名
boardMatName: string;//板材名 boardMatName: string;//板材名
material: string;//材料 material: string;//材料
color: string;//颜色 color: string;//颜色
@ -147,4 +151,6 @@ interface IRec2BrOption extends IBaseOption
//备注 //备注
remarks: [string, string][]; remarks: [string, string][];
maxThickness: number; maxThickness: number;
useBrName: boolean; //使用板件名配置
configName: string;
} }

@ -540,7 +540,6 @@ export const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {
[EBoardKeyList.BigHole]: FaceDirection.Front, [EBoardKeyList.BigHole]: FaceDirection.Front,
[EBoardKeyList.DrillType]: "", [EBoardKeyList.DrillType]: "",
[EBoardKeyList.ComposingFace]: ComposingType.Positive, [EBoardKeyList.ComposingFace]: ComposingType.Positive,
highDrill: [],
upDownDrill: [true, true], upDownDrill: [true, true],
[EBoardKeyList.UpSealed]: "1",//封边上下左右 [EBoardKeyList.UpSealed]: "1",//封边上下左右
[EBoardKeyList.DownSealed]: "1", [EBoardKeyList.DownSealed]: "1",
@ -548,24 +547,30 @@ export const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {
[EBoardKeyList.RightSealed]: "1", [EBoardKeyList.RightSealed]: "1",
[EBoardKeyList.KnifeRad]: "3", [EBoardKeyList.KnifeRad]: "3",
remarks: Array.from({ length: 10 }, () => ["", ""]), remarks: Array.from({ length: 10 }, () => ["", ""]),
[EBoardKeyList.BrMat]: "",
[EBoardKeyList.Mat]: "",
[EBoardKeyList.Color]: "",
grooveAddDepth: "0",
grooveAddLength: "0",
grooveAddWidth: "0",
condition: { condition: {
[EBoardKeyList.RoomName]: false, [EBoardKeyList.RoomName]: false,
[EBoardKeyList.CabinetName]: false, [EBoardKeyList.CabinetName]: false,
[EBoardKeyList.Lines]: false, [EBoardKeyList.Lines]: true,
[EBoardKeyList.BigHole]: false, [EBoardKeyList.BigHole]: true,
[EBoardKeyList.DrillType]: false, [EBoardKeyList.DrillType]: true,
[EBoardKeyList.ComposingFace]: false, [EBoardKeyList.ComposingFace]: true,
[EBoardKeyList.UpSealed]: false, [EBoardKeyList.UpSealed]: true,
[EBoardKeyList.DownSealed]: false, [EBoardKeyList.DownSealed]: true,
[EBoardKeyList.LeftSealed]: false, [EBoardKeyList.LeftSealed]: true,
[EBoardKeyList.RightSealed]: false, [EBoardKeyList.RightSealed]: true,
upDrill: false, useZhengFanDrill: true,
downDrill: false, remarks: true,
leftDrill: false, [EBoardKeyList.KnifeRad]: true,
rightDrill: false, [EBoardKeyList.Mat]: true,
useZhengFanDrill: false, grooveAddDepth: true,
remarks: false, grooveAddLength: true,
[EBoardKeyList.KnifeRad]: false, 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 { observer } from 'mobx-react';
import * as React from 'react'; import * as React from 'react';
import { safeEval } from '../../../Common/eval'; import { safeEval } from '../../../Common/eval';
import { IBoardFindOption } from '../../Store/BoardFindInterface'; 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 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 { Classes, Button, H5, Checkbox, HTMLSelect, Popover, Card, Intent, Position } from '@blueprintjs/core';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import { BoardFindStore } from '../../Store/BoardFindModifyStore'; import { BoardFindStore } from '../../Store/BoardFindModifyStore';
import { BoardFindItem, BoardFindSelectItem } from './BoardFindCommon'; import { BoardFindItem, BoardFindSelectItem, MatColorCom } from './BoardFindCommon';
import { BoardModalType } from './BoardModal'; import { BoardModalType } from './BoardModal';
import { ModalState } from '../Modal/ModalInterface'; import { ModalState } from '../Modal/ModalInterface';
import { EFindType, ECompareType, DRILL_KEYS } from '../../Store/BoardFindInterface'; import { EFindType, ECompareType, DRILL_KEYS } from '../../Store/BoardFindInterface';
@ -520,53 +520,12 @@ export default class BoardFindModifyModal extends React.Component<{ store?: Boar
/> />
</div> </div>
</div> </div>
<div className="flex mat-color"> <MatColorCom
<div> hasCompare
<div> option={option}
<span></span> getBoardOption={() => this.getBoardOption(EBoardKeyList.Mat, "选择板件获取板材信息")}
<HTMLSelect change={() => this.handleIsSelectAll()}
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>
<BoardFindSelectItem <BoardFindSelectItem
useKey="lines" useKey="lines"
k="lines" k="lines"

@ -10,7 +10,6 @@ export interface IUpdateBoardInfosOption extends IBaseOption
[EBoardKeyList.BigHole]: FaceDirection; [EBoardKeyList.BigHole]: FaceDirection;
[EBoardKeyList.DrillType]: string; [EBoardKeyList.DrillType]: string;
[EBoardKeyList.ComposingFace]: ComposingType; [EBoardKeyList.ComposingFace]: ComposingType;
highDrill: string[];
upDownDrill: [boolean, boolean]; upDownDrill: [boolean, boolean];
[EBoardKeyList.UpSealed]?: string;//封边上下左右 [EBoardKeyList.UpSealed]?: string;//封边上下左右
[EBoardKeyList.DownSealed]?: string; [EBoardKeyList.DownSealed]?: string;
@ -18,6 +17,12 @@ export interface IUpdateBoardInfosOption extends IBaseOption
[EBoardKeyList.RightSealed]?: string; [EBoardKeyList.RightSealed]?: string;
[EBoardKeyList.KnifeRad]: string; [EBoardKeyList.KnifeRad]: string;
remarks: [string, string][]; remarks: [string, string][];
[EBoardKeyList.BrMat]: string; //板材
[EBoardKeyList.Mat]: string;
[EBoardKeyList.Color]: string;
grooveAddLength: string;//槽加长/宽/高
grooveAddWidth: string;
grooveAddDepth: string;
} }
export interface IUpdateInfoCondition export interface IUpdateInfoCondition
@ -32,11 +37,11 @@ export interface IUpdateInfoCondition
[EBoardKeyList.DownSealed]: boolean; [EBoardKeyList.DownSealed]: boolean;
[EBoardKeyList.LeftSealed]: boolean; [EBoardKeyList.LeftSealed]: boolean;
[EBoardKeyList.RightSealed]: boolean; [EBoardKeyList.RightSealed]: boolean;
upDrill: boolean;
downDrill: boolean;
leftDrill: boolean;
rightDrill: boolean;
useZhengFanDrill: boolean; useZhengFanDrill: boolean;
remarks: boolean; remarks: boolean;
[EBoardKeyList.KnifeRad]: 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 { CommandWrap } from '../../../Editor/CommandMachine';
import { Board } from '../../../DatabaseServices/Entity/Board'; import { Board } from '../../../DatabaseServices/Entity/Board';
import { PromptStatus } from '../../../Editor/PromptResult'; import { PromptStatus } from '../../../Editor/PromptResult';
import { MatColorCom } from './BoardFindCommon';
export interface IUpdateBoardInfoModalProps export interface IUpdateBoardInfoModalProps
{ {
@ -76,7 +77,7 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
title="板件名" title="板件名"
options={names} options={names}
value={store.currentBoardName} value={store.currentBoardName}
onChange={(e) => store.UpdateBoardName(e.target.value)} onChange={(e) => store.currentBoardName = e.target.value}
onSelect={val => store.UpdateBoardName(val)} onSelect={val => store.UpdateBoardName(val)}
/> />
<Button text="添加" intent={Intent.SUCCESS} onClick={this.addName} /> <Button text="添加" intent={Intent.SUCCESS} onClick={this.addName} />
@ -135,12 +136,23 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
<HTMLSelect <HTMLSelect
options={this.selectOptions[k]} options={this.selectOptions[k]}
value={option[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> </div>
); );
}) })
} }
<MatColorCom
option={option}
getBoardOption={() => this.getBoardOption(undefined)}
hasCompare={false}
/>
<div className="center seal-drill"> <div className="center seal-drill">
<div> <div>
<Checkbox inline checked={condition[EBoardKeyList.UpSealed]} <Checkbox inline checked={condition[EBoardKeyList.UpSealed]}
@ -205,6 +217,26 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
optKey={EBoardKeyList.KnifeRad} optKey={EBoardKeyList.KnifeRad}
option={option} 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} /> <Notes remarks={option.remarks} />
</div> </div>
</Card> </Card>
@ -214,7 +246,7 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
private ok = (e: React.MouseEvent<HTMLButtonElement>) => private ok = (e: React.MouseEvent<HTMLButtonElement>) =>
{ {
let isAll = !!(e.currentTarget as HTMLButtonElement).getAttribute('data-isAll'); 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 } }); app.Editor.ModalManage.DestoryAndExec({ Status: ModalState.Ok, Data: { isAll } });
}; };
private addName = () => private addName = () =>
@ -252,7 +284,35 @@ export class UpdateBoardInfoModal extends React.Component<IUpdateBoardInfoModalP
{ {
if (!store.nameOptionMap.has(br.Name)) 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.ModalManage.ToggleShow();
app.Editor.MaskManage.Clear(); app.Editor.MaskManage.Clear();
const store = this.props.store; const store = this.props.store;
const key = e.currentTarget.getAttribute("data-type"); const key = e?.currentTarget?.getAttribute("data-type");
await CommandWrap(async () => 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; if (brRes.Status === PromptStatus.Cancel) return;
let br = brRes.Entity as Board; let br = brRes.Entity as Board;
if (key)
store.m_Option[key] = br.BoardProcessOption[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.ModalManage.ToggleShow();
app.Editor.MaskManage.ShowMask(); app.Editor.MaskManage.ShowMask();

@ -83,4 +83,26 @@
.notes { .notes {
width: 22vmin; 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 { li {
padding: 2px 0; padding: 2px 0;
overflow: hidden;
text-overflow: ellipsis;
} }
li:hover { li:hover {

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

Loading…
Cancel
Save