!697 优化板件数值校验

pull/697/MERGE
ZoeLeeFZ 5 years ago committed by ChenX
parent 02e91e65ba
commit b92ac5c580

@ -15,7 +15,7 @@ import { MoveMatrix, rotatePoint, AsVector2 } from '../Geometry/GeUtils';
import { ArrayModal } from '../UI/Components/Modal/ArrayModal';
import { ModalPosition, ModalState } from '../UI/Components/Modal/ModalsManage';
import { AppToaster } from '../UI/Components/Toaster';
import { IBaseOption } from '../UI/Store/BoardInterface';
import { IBaseOption, IUiOption } from '../UI/Store/BoardInterface';
export enum ArrayType
{
@ -57,7 +57,7 @@ export interface ArrayOptioins extends IBaseOption
}
export class ArrayStore extends Singleton
{
protected m_UiOption;
protected m_UiOption: IUiOption<ArrayOptioins>;
@observable m_Option: ArrayOptioins = {
//矩形阵列参数
row: 4,
@ -77,16 +77,19 @@ export class ArrayStore extends Singleton
};
get UIOption()
{
return this.m_UiOption = DataAdapter.ConvertUIData(this.m_Option);
if (!this.m_UiOption)
this.m_UiOption = DataAdapter.ConvertUIData(this.m_Option);
return this.m_UiOption;
}
HasInvailValue()
{
if (Math.abs(this.m_UiOption.betweenAngle) > Math.abs(this.m_UiOption.fillAngle))
if (CheckoutValid.HasInvailValue(this.UIOption, CheckObjectType.AR))
return "存在无效数值,请修正";
if (Math.abs(this.m_Option.betweenAngle) > Math.abs(this.m_Option.fillAngle))
return "项目间的角度不能超过填充角度";
else if (!this.m_UiOption.isCorrect && this.m_UiOption.itemTotal === "1")
return "项目总数不能为1";
else if (CheckoutValid.HasInvailValue(this.UIOption, CheckObjectType.AR))
return "存在无效数值,请修正";
else
return "";
}
@ -195,7 +198,7 @@ export class Command_Array implements Command
itemTotal = 2;
betweenAngle = fillAngle;
}
else
else
{
if (fillAngle === 360)
betweenAngle = Math.round(fillAngle / (itemTotal));

@ -97,6 +97,7 @@ export namespace CheckoutValid
}
export function CheckoutBoardOption(k: string, v: string): string
{
let val = safeEval(v);
switch (k)
{
case "calcHeight":
@ -104,40 +105,72 @@ export namespace CheckoutValid
if (isNaN(safeEval(v, { L: 1, H: 1, W: 1 })))
return "表达式错误";
return "";
case "name":
case "boardPosition":
case "boardRelative":
case "type":
case "roomName":
case "cabinetName":
case "boardName":
case "material":
case "color":
case "striptype":
case "spliteHeight":
case "spliteWidth":
case "spliteThickness":
return "";
case "sealedUp":
case "sealedDown":
case "sealedLeft":
case "sealedRight":
case "divCount":
if (!(safeEval(v) >= 0))
if (isNaN(val))
return "数值不能为空且必须为数字";
if (!(val >= 0))
return "数值必须大于等于0";
return "";
case "spliteHeight":
case "spliteWidth":
case "spliteThickness":
if (v !== "" && isNaN(val))
{
return "必须为数字";
}
return "";
case "height":
case "width":
case "count":
case "thickness":
case "footThickness":
if (!(safeEval(v) > 0))
case "knifeRadius":
if (isNaN(val))
return "数值不能为空且必须为数字";
if (!(val > 0))
return "数值必须大于0";
default:
if (!isNum(v))
return "";
case "leftExt":
case "rightExt":
case "topExt":
case "bottomExt":
case "moveDist":
case "spaceSize":
case "frontShrink":
case "rightShrink":
case "leftShrink":
case "bottomShrink":
case "addCount":
case "dist":
case "front":
case "behind":
case "left":
case "right":
case "rad":
case "length":
case "depth":
case "frontDist":
case "behindDistance":
case "leftExt":
case "rightExt":
case "offset":
case "footBehindShrink":
case "footerOffset":
case "rotateX":
case "rotateY":
case "rotateZ":
case "grooveAddLength":
case "grooveAddDepth":
case "grooveAddWidth":
if (isNaN(val))
return "数值不能为空且必须为数字";
default:
return "";
}
return "";
}
export function CheckoutDrillOption(k: string, v: string | boolean): string
{
@ -236,13 +269,55 @@ export namespace CheckoutValid
}
export function CheckoutDoorOption(k: string, v: string): string
{
let val = safeEval(v);
switch (k)
{
case "drawerTotalDepth":
if (isNaN(safeEval(v, { L: 1, H: 1, W: 1 })))
return "表达式错误";
return "";
case "row":
case "col":
let val = safeEval(v);
if (isNaN(val))
return "数值不能为空,并且必须为数字";
if (!isNaN(val) && val !== Math.floor(val))
return "数值必须1~20整数";
return "";
case "topOffset":
case "bottomOffset":
case "hingeCount":
case "hindeTopDist":
case "hindeBottomDist":
case "handleAngle":
case "topSpace":
case "bottomSpace":
case "leftSpace":
case "rightSpace":
case "midSpace":
case "horSpacing":
case "veSpacing":
if (isNaN(val))
return "数值不能为空,并且必须为数字";
return "";
case "doorThickness":
if (isNaN(val))
return "数值不能为空且必须为数字";
if (!(val > 0))
return "数值必须大于0";
return "";
case "topBrSeal":
case "bottomBrSeal":
case "leftBrSeal":
case "rightBrSeal":
case "topDoorSeal":
case "bottomDoorSeal":
case "leftDoorSeal":
case "rightDoorSeal":
if (isNaN(val))
return "数值不能为空且必须为数字";
if (!(val >= 0))
return "数值必须大于等于0";
return "";
default:
return CheckoutBoardOption(k, v);
}

@ -6,7 +6,6 @@ import { app } from '../../../ApplicationServices/Application';
import { KeyBoard } from '../../../Common/KeyEnum';
import { BehindBoardStore, BoardStore, ClosingStripStore, LayerBoardStore, SideBoardStore, SingleBoardStore, TopBottomBoardStore, VerticalBoardStore } from '../../Store/BoardStore';
import { ModalState } from '../Modal/ModalsManage';
import { AppToaster } from '../Toaster';
import { BehindBoardModal } from './BehindBoardModal';
import { Notes } from './BoardCommon';
import { BoardProcessModal } from './BoardProcessModal';
@ -166,10 +165,7 @@ export class BoardModal extends React.Component<BoardModalProps, {}>
text="确定"
onClick={() =>
{
if (store.HasInvailValue())
AppToaster.show({ message: "存在无效数值,请修正", timeout: 1000 });
else
store.OnOk(ModalState.Ok, this.props.type != BoardModalType.Skt, store.title);
store.OnOk(ModalState.Ok, this.props.type != BoardModalType.Skt, store.title);
}} />
<Button

@ -7,7 +7,6 @@ import { DoorPreviewComponent } from './DoorPreviewComponent';
import { UserConfig } from '../UserConfig';
import { BoardModalType } from '../BoardModal';
import { DoorDrawerStore } from '../../../Store/DoorDrawerStore/DoorDrawerStore';
import { AppToaster } from '../../Toaster';
import { TemplateDetail } from '../../Template/TemplateDetail';
import { DoorStore } from '../../../Store/DoorDrawerStore/DoorStore';
import { TemplateSelect } from '../../Template/TemplateSelect';
@ -17,7 +16,7 @@ import { DisableChangeParName } from '../../../Store/DoorInterface';
@inject("store")
@observer
export class DoorModal extends React.Component<{ store?: DoorDrawerStore, type: BoardModalType }, {}>
export class DoorModal extends React.Component<{ store?: DoorDrawerStore, type: BoardModalType; }, {}>
{
private startSelect = observable.box(false);
UNSAFE_componentWillMount()
@ -99,7 +98,7 @@ export class DoorModal extends React.Component<{ store?: DoorDrawerStore, type:
onChange={e => par.expr = e.target.value}
/>
</Label>
)
);
})
}
</div>
@ -124,10 +123,7 @@ export class DoorModal extends React.Component<{ store?: DoorDrawerStore, type:
text="确定"
onClick={() =>
{
if (store.HasInvailValue())
AppToaster.show({ message: "存在无效数值,请修正", timeout: 1000 });
else
store.OnOk(ModalState.Ok);
store.OnOk(ModalState.Ok);
}}
/>
<Button
@ -150,7 +146,7 @@ export class DoorModal extends React.Component<{ store?: DoorDrawerStore, type:
private startSelectTemplate = () =>
{
this.startSelect.set(true);
}
};
private changeTemplateProps = (parName: string, val: string) =>
{
if (val === "") return;
@ -164,7 +160,7 @@ export class DoorModal extends React.Component<{ store?: DoorDrawerStore, type:
par.expr = val;
}
}
}
};
private clearSelectTemplateInfo = () =>
{
const infos = this.props.store.doorDrawersInfo;
@ -182,5 +178,5 @@ export class DoorModal extends React.Component<{ store?: DoorDrawerStore, type:
}
}
}
}
};
}

@ -177,7 +177,7 @@ export class LookOverBoardInfosModal extends React.Component<LookOverBoardInfosM
{
if (CheckoutValid.HasInvailValue(opts, CheckObjectType.BBS))
{
AppToaster.show({ message: "存在无效数值,请修正", timeout: 1000 });
AppToaster.show({ message: "存在无效数值,请修正", timeout: 2000, intent: Intent.DANGER }, "errorval");
return;
}
}

@ -1,4 +1,4 @@
import { Button, Classes, Icon } from '@blueprintjs/core';
import { Button, Classes, Icon, Intent } from '@blueprintjs/core';
import { inject, observer } from 'mobx-react';
import * as React from 'react';
import { app } from '../../../ApplicationServices/Application';
@ -6,6 +6,7 @@ import { CheckObjectType } from '../../../Common/CheckoutVaildValue';
import { SpecialShapeStore } from '../../Store/BoardStore';
import { BoardTypeComponent, Notes, SetBoardDataBlock } from './BoardCommon';
import { BoardProcessModal } from './BoardProcessModal';
import { AppToaster } from '../Toaster';
@inject('store')
@observer
@ -77,12 +78,7 @@ export class SpecialShapeBoardModal extends React.Component<{ store?: SpecialSha
<Button
className={Classes.INTENT_SUCCESS}
text="确定"
onClick={async () =>
{
app.Editor.ModalManage.Clear();
await app.Editor.ModalManage.ExecCmd();
app.Editor.ModalManage.EndCmd();
}}
onClick={this.ok}
/>
<Button className={Classes.INTENT_DANGER} text="取消"
onClick={() => app.Editor.ModalManage.Clear()}
@ -93,4 +89,15 @@ export class SpecialShapeBoardModal extends React.Component<{ store?: SpecialSha
</div >
);
}
private ok = async () =>
{
if (this.props.store.HasInvailValue())
{
AppToaster.show({ message: "存在无效数值,请修正", timeout: 3000, intent: Intent.DANGER }, "errorval");
return;
}
app.Editor.ModalManage.Clear();
await app.Editor.ModalManage.ExecCmd();
app.Editor.ModalManage.EndCmd();
};
}

@ -31,7 +31,7 @@ export class WineRackModal extends React.Component<{ store?: WineRackStore; }, {
handleExec = async () =>
{
if (this.props.store.HasInvailValue())
AppToaster.show({ message: "存在无效数值,请修正", timeout: 1000 });
AppToaster.show({ message: "存在无效数值,请修正", timeout: 2000, intent: Intent.DANGER });
else
{
const opt = this.props.store.m_Option;

@ -73,7 +73,7 @@ export class BoardBatchCurtailModal extends React.Component<IBoardBatchCurtailPr
{
if (this.props.store.HasInvailValue())
{
AppToaster.show({ message: "数值无效或过大,请修正", timeout: 1000 });
AppToaster.show({ message: "数值无效或过大,请修正", timeout: 3000, intent: Intent.DANGER });
return;
}
app.Editor.ModalManage.m_PromisRes({

@ -169,13 +169,13 @@ export class LatticeDrawer extends React.Component<{ store?: LatticeDrawerStore;
onClick={() =>
{
if (store.HasInvailValue())
AppToaster.show({ message: "存在无效数值,请修正", timeout: 1000 });
AppToaster.show({ message: "存在无效数值,请修正", timeout: 3000, intent: Intent.DANGER });
else
{
const opt = this.props.store.m_Option;
if ([opt.leftSealed, opt.rightSealed, opt.upSealed, opt.downSealed].some(s => s >= opt.thickness / 2))
{
AppToaster.show({ message: "封边过大,请修正", timeout: 1000, intent: Intent.WARNING });
AppToaster.show({ message: "封边过大,请修正", timeout: 3000, intent: Intent.WARNING });
return;
}
store.OnOk(ModalState.Ok);

@ -258,6 +258,12 @@ export class ActivityLayerBoard extends React.Component<IActivityLayerBoardProps
};
private ok = () =>
{
if (this.props.store.HasInvailValue())
{
AppToaster.show({ message: "存在无效数值,请修正", timeout: 3000, intent: Intent.DANGER });
return;
}
const nailOption = this.props.store.nailOption;
if (nailOption.depth >= nailOption.length)
{

@ -66,7 +66,7 @@ export class RotateLayerBoardModal extends React.Component<IRotateLayerBoardProp
{
if (this.props.store.HasInvailValue())
{
AppToaster.show({ message: "存在无效数值,请修正", timeout: 1000 });
AppToaster.show({ message: "存在无效数值,请修正", timeout: 3000, intent: Intent.DANGER });
return;
}
app.Editor.ModalManage.m_PromisRes({

@ -249,7 +249,17 @@ export default class TemplateParamList extends React.Component<ITemplateParamLis
{
let temp = this.props.store.Template;
let par = temp.GetParam(opt.name);
par.value = safeEval(opt.value as string);
let val = safeEval(opt.value as string);
if (isNaN(val))
{
AppToaster.show({
message: opt.name + "参数值无效,请修正",
timeout: 3000,
intent: Intent.DANGER
}, "errorval");
return;
}
par.value = val;
par.expr = opt.expr;
par.description = opt.description;
};

@ -81,18 +81,25 @@ export class ToasterInput extends React.Component<IToasterInputProps, {}>
{
this.hideErrorMsg = true;
if (this.props.onBlur)
{
this.props.onBlur(e);
this.getErrorMsg(this.showData[this.props.optKey]);
}
};
UNSAFE_componentWillMount()
{
const props = this.props;
this.showData = props.uiOption ? props.uiOption : props.option;
}
componentDidMount()
{
this.getErrorMsg(this.showData[this.props.optKey]);
}
UNSAFE_componentWillReceiveProps(nextProps)
{
if (this.props.type === CheckObjectType.BBS)
this.showData = nextProps.uiOption ? nextProps.uiOption : nextProps.option;
if (this.props.type === CheckObjectType.DR && this.errorMsg)
if (this.errorMsg)
this.getErrorMsg(this.showData[this.props.optKey]);
}
render()

@ -4,6 +4,7 @@ import { DefaultNailOption } from "../../Editor/DefaultConfig";
import { DataAdapter } from "../../Common/DataAdapter";
import { observable, toJS } from "mobx";
import { IConfigOption } from "../Components/Board/UserConfig";
import { CheckoutValid, CheckObjectType } from "../../Common/CheckoutVaildValue";
export class ActivityLayerBoardStore extends BoardStore
{
@ -107,4 +108,8 @@ export class ActivityLayerBoardStore extends BoardStore
if (this.m_UiOption)
Object.assign(this.m_UiOption, DataAdapter.ConvertUIData(option));
}
HasInvailValue()
{
return super.HasInvailValue() || CheckoutValid.HasInvailValue(this.uiNailOption, CheckObjectType.BR);
}
}

@ -14,6 +14,8 @@ import { IConfigOption } from '../Components/Board/UserConfig';
import { ModalState } from '../Components/Modal/ModalsManage';
import { BehindBoardOption, BoardConfigOption, IBaseOption, BoardProcessOption, BrRelativePos, ClosingStripOption, ComposingType, DrillType, FaceDirection, IGrooveOption, LayerBoardOption, LayerNailOption, LinesType, SideBoardOption, SingleBoardOption, StripType, TBBoardOption, VerticalBoardOption, IUiOption } from './BoardInterface';
import { begin } from 'xaop';
import { AppToaster } from '../Components/Toaster';
import { Intent } from '@blueprintjs/core';
export interface IConfigStore
@ -102,10 +104,18 @@ export class BoardStore extends Singleton implements IConfigStore
}
async OnOk(state: number, isClose: boolean = true, title?: string)
{
isClose && app.Editor.ModalManage.Clear();
if (this.HasInvailValue())
{
if (state === ModalState.Cancel)
this.UpdateOption(this.SaveConfig());
else
{
AppToaster.show({ message: "存在无效数值,请修正", timeout: 3000, intent: Intent.DANGER }, "errorval");
return;
}
}
if (state === ModalState.Cancel && this.HasInvailValue())
this.UpdateOption(this.SaveConfig());
isClose && app.Editor.ModalManage.Clear();
if (app.Editor.ModalManage.m_PromisRes)
{
@ -148,7 +158,7 @@ export class BoardStore extends Singleton implements IConfigStore
}
HasInvailValue()
{
return CheckoutValid.HasInvailValue(this.UIOption, CheckObjectType.BR);
return CheckoutValid.HasInvailValue(this.UIOption, CheckObjectType.BR) || CheckoutValid.HasInvailValue(this.BoardProcessOption, CheckObjectType.BR);
}
}
@ -220,7 +230,8 @@ export class TopBottomBoardStore extends BoardStore
HasInvailValue()
{
return CheckoutValid.HasInvailValue(this.TopUiOption, CheckObjectType.BR)
|| CheckoutValid.HasInvailValue(this.BottomUiOption, CheckObjectType.BR);
|| CheckoutValid.HasInvailValue(this.BottomUiOption, CheckObjectType.BR)
|| CheckoutValid.HasInvailValue(this.m_BoardProcessOption, CheckObjectType.BR);
}
}
@ -259,6 +270,10 @@ export class BehindBoardStore extends BoardStore
super.UpdateOption(cof);
Object.assign(this.grooveOption, cof.grooveData);
}
HasInvailValue()
{
return super.HasInvailValue() || CheckoutValid.HasInvailValue(this.grooveOption, CheckObjectType.BR);
}
}
export class LayerBoardStore extends BoardStore

@ -1,5 +1,5 @@
import { BoardStore } from "./BoardStore";
import { ILatticeOption, ELatticeArrayType } from "./LatticeInterface";
import { ILatticeOption } from "./LatticeInterface";
import { observable, toJS } from "mobx";
import { IConfigOption } from "../Components/Board/UserConfig";
import { DataAdapter } from "../../Common/DataAdapter";
@ -8,28 +8,7 @@ import { DefaultLatticOption } from "../../Editor/DefaultConfig";
export class LatticeDrawerStore extends BoardStore
{
@observable m_Option: ILatticeOption = {
arrayType: ELatticeArrayType.ByWidth,
gripWidth: 100,
gripDepth: 100,
widthCount: 3,
depthCount: 4,
knifeRad: 3,
thickness: 18,
arcLen: 50,
downDist: 0,
space: 0.5,
grooveAddWidth: 0,
upSealed: 1,
downSealed: 0,
leftSealed: 0,
rightSealed: 0,
isAuto: true,
isChange: true,
isOpenCut: false,
upCut: 0,
downCut: 4,
};
@observable m_Option: ILatticeOption = { ...DefaultLatticOption };
InitOption()
{
Object.assign(this.m_Option, DefaultLatticOption);

Loading…
Cancel
Save