添加保存配置功能

pull/93/head
Zoe 6 years ago
parent 652b874151
commit 7ddd0ced0c

18
package-lock.json generated

@ -4504,7 +4504,7 @@
"dev": true,
"optional": true,
"requires": {
"safer-buffer": "^2.1.0"
"safer-buffer": "2.1.2"
}
},
"ignore-walk": {
@ -4609,9 +4609,9 @@
"dev": true,
"optional": true,
"requires": {
"debug": "^2.1.2",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
"debug": "2.6.9",
"iconv-lite": "0.4.21",
"sax": "1.2.4"
}
},
"node-pre-gyp": {
@ -4807,9 +4807,9 @@
"bundled": true,
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
"code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0",
"strip-ansi": "3.0.1"
}
},
"string_decoder": {
@ -4818,7 +4818,7 @@
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
"safe-buffer": "5.1.1"
}
},
"strip-ansi": {
@ -4826,7 +4826,7 @@
"bundled": true,
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
"ansi-regex": "2.1.1"
}
},
"strip-json-comments": {

@ -14,17 +14,17 @@ export class DrawBehindBoard extends DrawSingleBoard
let newBox = box.clone();
//判断延伸
let leftExt = parseFloat(opt.leftExt) / 100;
let rightExt = parseFloat(opt.rightExt) / 100;
let topExt = parseFloat(opt.topExt) / 100;
let bottomExt = parseFloat(opt.bottomExt) / 100;
let leftExt = parseFloat(opt.leftExt);
let rightExt = parseFloat(opt.rightExt);
let topExt = parseFloat(opt.topExt);
let bottomExt = parseFloat(opt.bottomExt);
newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt));
newBox.translate(new Vector3(-leftExt, 0, -bottomExt));
//获取背板高度
let size = newBox.getSize(new Vector3());
let height = opt.height === "H" ? size.z : parseFloat(opt.height) / 100;
let moveDist = parseFloat(opt.moveDist) / 100;
let height = opt.height === "H" ? size.z : parseFloat(opt.height);
let moveDist = parseFloat(opt.moveDist);
//判断背板位置,更新背板高度
switch (opt.boardPosition)
@ -43,8 +43,8 @@ export class DrawBehindBoard extends DrawSingleBoard
//相对位置
let relPos = opt.boardRelative;
//单层空间宽度
let spaceSize = parseFloat(opt.spaceSize) / 100;
let thickness = parseFloat(opt.thickness) / 100;
let spaceSize = parseFloat(opt.spaceSize);
let thickness = parseFloat(opt.thickness);
let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind);

@ -12,14 +12,14 @@ export class DrawLayerBoard extends DrawSingleBoard
protected buildBoard(box: Box3Ext, opt: LayerBoardOption, ro: Matrix4)
{
let size = box.getSize(new Vector3());
let width = opt.isTotalLength ? size.y : parseFloat(opt.length) / 100;
let width = opt.isTotalLength ? size.y : parseFloat(opt.length);
let count = parseInt(opt.count);
let type = opt.boardRelative;
let spaceSize = parseFloat(opt.spaceSize) / 100;
let frontShrink = parseFloat(opt.frontShrink) / 100;
let leftShrink = parseFloat(opt.leftShrink) / 100;
let rightShrink = parseFloat(opt.rightShrink) / 100;
let thickness = parseFloat(opt.thickness) / 100;
let spaceSize = parseFloat(opt.spaceSize);
let frontShrink = parseFloat(opt.frontShrink);
let leftShrink = parseFloat(opt.leftShrink);
let rightShrink = parseFloat(opt.rightShrink);
let thickness = parseFloat(opt.thickness);
let board = Board.CreateBoard(size.x - leftShrink - rightShrink, width, thickness, BoardType.Layer);

@ -21,11 +21,11 @@ export class DrawLeftRight implements Command
if (state === ModalState.Ok)
{
let data = store.boardOption;
let lenght = data.lenght ? parseFloat(data.lenght) / 100 : 0;
let width = data.width ? parseFloat(data.width) / 100 : 0;
let thickness = data.thickness ? parseFloat(data.thickness) / 100 : 0;
let spacing = data.spacing ? parseFloat(data.spacing) / 100 : 0;
let data = store.m_BoardOption;
let lenght = data.lenght ? parseFloat(data.lenght) : 0;
let width = data.width ? parseFloat(data.width) : 0;
let thickness = data.thickness ? parseFloat(data.thickness) : 0;
let spacing = data.spacing ? parseFloat(data.spacing) : 0;
let leftBarod = Board.CreateBoard(lenght, width, thickness, BoardType.Vertical)
let rightBoard = Board.CreateBoard(lenght, width, thickness, BoardType.Vertical);

@ -14,18 +14,18 @@ export class DrawVerticalBoard extends DrawSingleBoard
{
let size = box.getSize(new Vector3());
let frontShrink = parseFloat(opt.frontShrink) / 100;
let bottomShink = parseFloat(opt.bottomShrink) / 100;
let width = opt.isTotalWidth ? size.y : parseFloat(opt.width) / 100;
let length = opt.isTotalLength ? size.z : parseFloat(opt.length) / 100;
let frontShrink = parseFloat(opt.frontShrink);
let bottomShink = parseFloat(opt.bottomShrink);
let width = opt.isTotalWidth ? size.y : parseFloat(opt.width);
let length = opt.isTotalLength ? size.z : parseFloat(opt.length);
width -= frontShrink;
length -= bottomShink;
let count = parseInt(opt.count);
let type = opt.posType;
let spaceSize = parseFloat(opt.spaceSize) / 100;
let thickness = parseFloat(opt.thickness) / 100;
let spaceSize = parseFloat(opt.spaceSize);
let thickness = parseFloat(opt.thickness);
let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical);

@ -12,7 +12,8 @@ export enum StoreName
Texture = "Texture",
Dwg = "Dwg",
Data = "Data",
FileId = "fileId"
FileId = "fileId",
ConfigData = "configData"
}
export class IndexedDbStore
@ -92,6 +93,11 @@ export class IndexedDbStore
(db: IDBDatabase) =>
{
db.createObjectStore(StoreName.FileId);
},
// ver5.
(db: IDBDatabase) =>
{
db.createObjectStore(StoreName.ConfigData);
}
];
}

@ -1,9 +1,9 @@
import { inject, observer } from 'mobx-react';
import * as React from 'react';
import { Radio, RadioGroup, Checkbox } from '../../../../node_modules/@blueprintjs/core';
import { BehindBoardStore, BehindHeightPositon, BoardRelativePositon } from '../../Store/BoardStore';
import { SetBoardDataItem, SetBoardDataItem2, BoardModel, SetBoardDataBlock, BoardConfigBlock } from './BoardCommon';
import { Classes, Radio, RadioGroup } from '../../../../node_modules/@blueprintjs/core';
import { observable } from '../../../../node_modules/mobx';
import { BehindBoardStore, BehindHeightPositon, BoardRelativePositon } from '../../Store/BoardStore';
import { BoardConfigBlock, BoardModel, SetBoardDataBlock, SetBoardDataItem, SetBoardDataItem2 } from './BoardCommon';
@inject("store")
@observer
@ -28,11 +28,11 @@ export class BehindBoardModal extends React.Component<{ store?: BehindBoardStore
let store = this.props.store;
return (
<div>
<div className="pt-card">
<div className="behind-board">
<div className="bp3-card">
<div className="flex">
<div className="process-data" style={{ width: "40%" }}>
<h6></h6>
<h6 className={Classes.HEADING}></h6>
<SetBoardDataBlock
pars={this.m_ScaleParameter}
opt={store.m_BoardOption}
@ -40,7 +40,7 @@ export class BehindBoardModal extends React.Component<{ store?: BehindBoardStore
/>
</div>
<div style={{ width: "60%" }}>
<h6></h6>
<h6 className={Classes.HEADING}></h6>
<div className="boardSize center">
<SetBoardDataItem2 title="上延伸" k="topExt" opt={store.m_BoardOption} />
<div>
@ -53,7 +53,7 @@ export class BehindBoardModal extends React.Component<{ store?: BehindBoardStore
</div>
</div>
<div>
<h6></h6>
<h6 className={Classes.HEADING}></h6>
<RadioGroup
className="boardRadio"
onChange={e =>

@ -1,6 +1,6 @@
import { observer } from 'mobx-react';
import * as React from 'react';
import { RadioGroup, Radio } from '../../../../node_modules/@blueprintjs/core';
import { RadioGroup, Radio, Classes } from '../../../../node_modules/@blueprintjs/core';
import { BoardRelativePositon } from '../../Store/BoardStore';
//设置板件数据组件
@ -10,7 +10,7 @@ export const SetBoardDataItem = observer(({ k, opt, title, isDisabled = false })
{title}:
</span>
<input
className="pt-input"
className="bp3-input"
value={opt[k]}
disabled={isDisabled}
onChange={e =>
@ -22,10 +22,10 @@ export const SetBoardDataItem = observer(({ k, opt, title, isDisabled = false })
);
//设置板件数据组件
export const SetBoardDataItem2 = observer(({ k, opt, title }) =>
<label className="pt-label pt-inline">
<label className="bp3-label bp3-inline">
{title}
<input
className="pt-input"
className="bp3-input"
type="number"
value={opt[k]}
onChange={e =>
@ -65,7 +65,7 @@ export const BoardModel = () =>
export const BoardConfigBlock = observer(({ opt, pars, opt1 }: { opt: any, pars: Map<string, string>, opt1: Map<BoardRelativePositon, string> }) =>
<div>
<div>
<h6 ></h6>
<h6 className={Classes.HEADING}></h6>
<RadioGroup
className="boardRadio"
onChange={e =>

@ -1,16 +1,7 @@
import { Button, Dialog } from '@blueprintjs/core';
import { Button, InputGroup, Menu, MenuItem, Popover } from '@blueprintjs/core';
import * as React from 'react';
import
{
BehindBoardStore,
BoardStore,
LayerBoardStore,
ModalState,
SideBoardStore,
TopBottomBoardStore,
VerticalBoardStore,
} from '../../Store/BoardStore';
import { IndexedDbStore, StoreName } from '../../../IndexedDb/IndexedDbStore';
import { BehindBoardStore, BoardStore, LayerBoardStore, ModalState, SideBoardStore, TopBottomBoardStore, VerticalBoardStore } from '../../Store/BoardStore';
import { BehindBoardModal } from './BehindBoardModal';
import { LayerBoardModal } from './LayerBoardModal';
import { LeftRightBoardModal } from './leftRightBoardModal';
@ -19,11 +10,11 @@ import { VerticalBoardModal } from './VerticalBoardModal';
export enum BoardModalType
{
LR = "lr",
TB = "tb",
Be = "be",
Ly = "ly",
Ve = "ve"
LR = "lr",//左右侧板
TB = "tb",//顶底板
Be = "be",//背板
Ly = "ly",//层板
Ve = "ve"//立板
}
interface BoardModalProps
@ -31,6 +22,17 @@ interface BoardModalProps
type: string,
store: BoardStore
}
interface BoardModalState
{
configName: string,
configs: Map<string, any>
}
interface configOption
{
boardData: any,
nailData?: any
}
/**
*
@ -38,75 +40,205 @@ interface BoardModalProps
* @param {BoardModalProps} props
* @returns
*/
export const BoardModal = (props: BoardModalProps) =>
export class BoardModal extends React.Component<BoardModalProps, BoardModalState>
{
let configs = new Map([["lr", []]]);
let store = props.store;
//模态框字典
const m_ModalMap = new Map([
allConfigs: Map<string, Map<string, configOption>[]> = new Map();
m_ModalMap: Map<BoardModalType, any>;
constructor(props: BoardModalProps)
{
super(props);
let store = this.props.store;
this.m_ModalMap = new Map([
[BoardModalType.LR, <LeftRightBoardModal store={store as SideBoardStore} />],
[BoardModalType.TB, <TopBottomBoardModal store={store as TopBottomBoardStore} />],
[BoardModalType.Be, <BehindBoardModal store={store as BehindBoardStore} />],
[BoardModalType.Ly, <LayerBoardModal store={store as LayerBoardStore} />],
[BoardModalType.Ve, <VerticalBoardModal store={store as VerticalBoardStore} />],
])
this.state = {
configName: "默认",
configs: new Map()
}
}
//保存配置
handleSaveConfig = async () =>
{
let name = this.state.configName;
let dbstore = await IndexedDbStore.CADStore();
let brStore = this.props.store;
let type = this.props.type;
//新的配置
let newConfig: configOption = {
boardData: brStore.m_BoardOption
}
if (type === BoardModalType.Ly)
{
newConfig.nailData = (brStore as LayerBoardStore).layerNailOption;
}
//获取数据库中对应板类型的配置
let brDataMap = await dbstore.Get(StoreName.ConfigData, type) as Map<string, configOption> || new Map();
let isContinue = true;
if (brDataMap.get(name))
{
isContinue = confirm("该名字存在,是否覆盖值");
}
if (isContinue)
{
// 配置添加到数据库
brDataMap.set(name, newConfig);
dbstore.Put(StoreName.ConfigData, type, brDataMap);
this.setState({ configs: brDataMap });
}
}
//删除配置
handleDeleteConfig = async () =>
{
let configs = this.state.configs;
let currentName = this.state.configName;
configs.delete(currentName);
this.setState({ configs });
let dbstore = await IndexedDbStore.CADStore();
let type = this.props.type;
let brDataMap = await dbstore.Get(StoreName.ConfigData, type) as Map<string, configOption>;
brDataMap.delete(currentName);
dbstore.Put(StoreName.ConfigData, type, brDataMap);
this.setState({ configName: "默认" });
await this.changeBoardOption("默认");
}
//更新配置
changeBoardOption = async (k: string) =>
{
this.setState({ configName: k });
let brOpt = this.props.store.m_BoardOption;
let dbstore = await IndexedDbStore.CADStore();
let type = this.props.type;
let brDataMap = await dbstore.Get(StoreName.ConfigData, type) as Map<string, configOption>;
let opt = brDataMap.get(k);
if (brDataMap && opt)
{
Object.assign(brOpt, opt.boardData);
if (type === BoardModalType.Ly)
{
let nailData = (this.props.store as LayerBoardStore).layerNailOption;
Object.assign(nailData, opt.nailData);
}
}
}
async componentWillMount()
{
let dbstore = await IndexedDbStore.CADStore();
let type = this.props.type;
let brDataMap = await dbstore.Get(StoreName.ConfigData, type) as Map<string, configOption> || new Map();
this.setState({ configs: brDataMap });
console.log(this.state.configs.size);
}
render()
{
let store = this.props.store;
return (
<div
className="pt-dialog-container"
className="bp3-dialog-container"
id="boardModal"
onKeyDown={(e) => e.stopPropagation()} >
<div className="pt-dialog">
<div className="bp3-dialog">
<div
className="pt-dialog-header"
className="bp3-dialog-header"
data-id="dragArea"
>
<span className="pt-icon-large pt-icon-column-layout"></span>
<h5 className="pt-dialog-header-title">{store.title}</h5>
<span className="bp3-icon-large bp3-icon-inbox"></span>
<h4 className="bp3-heading">{store.title}</h4>
<button
aria-label="Close" className="pt-dialog-close-button pt-icon-small-cross"
aria-label="Close" className="bp3-dialog-close-button bp3-icon-small-cross"
onClick={() => store.OnOk(ModalState.Cancel)}
></button>
</div>
<div
className="pt-dialog-body"
className="bp3-dialog-body"
onKeyDown={e =>
{
e.stopPropagation();
}
}>
{
m_ModalMap.get(props.type as BoardModalType)
this.m_ModalMap.get(this.props.type as BoardModalType)
}
</div>
<div className="pt-dialog-footer">
<label className="pt-label pt-inline .modifier">
<div className="bp3-dialog-footer">
<label className="bp3-label pt-inline .modifier">
<div className="cf-select">
<label></label>
<input list="configs" />
<datalist id="configs">
<option value="Chrome" />>
<option value="Firefox" />>
<option value="Internet Explorer" />
<option value="Opera" />>
<option value="Safari" />>
<option value="Microsoft Edge" />>
</datalist>
<InputGroup
className="input-select"
value={this.state.configName}
onChange={e =>
{
this.setState({ configName: e.target.value })
}}
rightElement={
< Popover
autoFocus={true}
modifiers={{
arrow: { enabled: false },
flip: { enabled: true },
keepTogether: { enabled: true },
preventOverflow: { enabled: true, boundariesElement: "scrollParent" }
}}
// position="bottom"
content={
<Menu>
{
Array.from(this.state.configs.keys())
.map((k, i) =>
<MenuItem
onClick={e => this.changeBoardOption(e.currentTarget.text)}
text={k}
key={i} />)
}
</Menu>}
target={
<Button
minimal={true}
rightIcon="caret-down"
disabled={this.state.configs.size === 0}>
</Button>} />}
/>
</div>
<button type="button" className="pt-button pt-intent-success"></button>
<button type="button" className="pt-button pt-intent-danger"></button>
<button
type="button"
className="bp3-button bp3-intent-success"
onClick={async () =>
{
await this.handleSaveConfig();
}}
></button>
<button
type="button"
className="bp3-button bp3-intent-danger"
onClick={async () =>
{
await this.handleDeleteConfig();
}}
></button>
</label>
<div className="pt-dialog-footer-actions">
<div className="bp3-dialog-footer-actions">
<Button
className="LeftRightBtn pt-intent-success"
className="LeftRightBtn bp3-intent-success"
text="确定"
onClick={() =>
{
store.OnOk(ModalState.Ok);
}} />
<Button className="LeftRightBtn pt-intent-danger" text="取消" onClick={() =>
<Button className="LeftRightBtn bp3-intent-danger" text="取消" onClick={() =>
{
store.OnOk(ModalState.Cancel);
}} />
@ -116,6 +248,5 @@ export const BoardModal = (props: BoardModalProps) =>
</div>
</div>
);
}
}

@ -1,4 +1,4 @@
import { Checkbox } from '@blueprintjs/core';
import { Checkbox, Classes } from '@blueprintjs/core';
import { inject, observer } from 'mobx-react';
import * as React from 'react';
import { BoardRelativePositon, LayerBoardStore } from '../../Store/BoardStore';
@ -28,7 +28,7 @@ export const LayerBoardModal =
dir="auto" />
</label>
<div>
<h6></h6>
<h6 className={Classes.HEADING}></h6>
<div className="flex" style={{ alignItems: "center" }}>
<div className="flexWrap">
{
@ -70,7 +70,7 @@ export const LayerBoardModal =
</div>
</div>
<div>
<h6></h6>
<h6 className={Classes.HEADING}></h6>
<div>
<Checkbox
checked={nailOpt.isDraw}

@ -1,4 +1,4 @@
import { Checkbox, Radio, RadioGroup } from '@blueprintjs/core';
import { Checkbox, Radio, RadioGroup, Classes } from '@blueprintjs/core';
import { inject, observer } from 'mobx-react';
import * as React from 'react';
import { VerticalBoardStore, BoardRelativePositon } from '../../Store/BoardStore';
@ -75,7 +75,7 @@ export const VerticalBoardModal =
return (
<div>
<div>
<h6></h6>
<h6 className={Classes.HEADING}></h6 >
<div className="flex" style={{ alignItems: "center" }}>
<div className="flexWrap">
{

@ -9,6 +9,6 @@ export const LeftRightBoardModal =
(observer((props: { store?: SideBoardStore }) => (
<SetBoardDataBlock
pars={props.store.m_Parameter}
opt={props.store.boardOption}
opt={props.store.m_BoardOption}
/>
)))

@ -1,21 +1,21 @@
#modal{
position: fixed;
}
#modal .pt-dialog{
#modal .bp3-dialog{
width: auto;
}
#lightModal h5{
color: #CCCCCC;
}
#modal .bp3-dialog{
#lightModal .bp3-dialog{
background: #444444;
color: #CCCCCC;
font-size: 16px;
}
#modal .bp3-dialog-header{
#lightModal .bp3-dialog-header{
background: #394b59
}
#modal .bp3-dialog>.bp3-dialog-body>div{
#modal .bp3-dialog>.behind-board>div{
margin:10px 0;
text-align: right;
}
@ -57,7 +57,7 @@
width: 50%;
line-height: 15px;
}
#boardModal .flexWrap>div .pt-input{
#boardModal .flexWrap>div .bp3-input{
padding:0 0 0 5px;
width: 60px;
}
@ -69,15 +69,15 @@
vertical-align: middle;
margin: 10px;
}
#boardModal .boardSize .pt-label{
#boardModal .boardSize .bp3-label{
display: inline-block;
margin: 0 5px;
}
#boardModal .boardSize .pt-inline{
#boardModal .boardSize .bp3-inline{
line-height: 15px;
}
#boardModal .boardSize .pt-label>.pt-input{
#boardModal .boardSize .bp3-label>.bp3-input{
display: block;
padding: 0;
width: 50px;
@ -90,11 +90,11 @@
#boardModal .process-data .br-set>input{
display: block;
}
#boardModal .pt-dialog{
#boardModal .bp3-dialog{
padding: 0;
}
#boardModal .pt-dialog-footer{
#boardModal .bp3-dialog-footer{
box-shadow: 0 0 0 1px rgba(16, 22, 26, 0.15);
background: #ffffff;
margin: 0;
@ -104,16 +104,21 @@
justify-content: space-between;
align-items: center;
}
#boardModal .pt-dialog-footer .pt-label{
#boardModal .bp3-dialog-footer .bp3-label{
margin: 0;
}
#boardModal .pt-dialog-footer .cf-select{
#boardModal .bp3-dialog-footer .cf-select{
vertical-align: middle;
display: inline-block;
}
#boardModal .pt-dialog-footer .cf-select>input{
#boardModal .bp3-dialog-footer .cf-select>input{
width: 60px;
height: 30px;
}
#boardModal .input-select{
display: inline-block;
width: 8rem;
}
#boardModal .input-select>input #boardModal .input-select span {
margin: 0;
}

@ -27,6 +27,7 @@ export class BoardStore
title: string;
m_ConfigPars = new Map(
[["spaceSize", "空间"], ["count", "板数"], ["thickness", "板厚"]]);
m_BoardOption = {};
constructor()
{
xaop.end(app.m_Editor.m_KeyCtrl, app.m_Editor.m_KeyCtrl.OnKeyDown, (e: KeyboardEvent) =>
@ -58,7 +59,7 @@ export class BoardStore
export class SideBoardStore extends BoardStore
{
//板数据
@observable boardOption: SideBoardOption = {
@observable m_BoardOption: SideBoardOption = {
lenght: "1200",
width: "600",
thickness: "18",
@ -77,24 +78,24 @@ export class SideBoardStore extends BoardStore
export class TopBottomBoardStore extends BoardStore
{
@observable topBoardOption = {
thickness: "0.18",
thickness: "18",
forwardDistance: "0",
behindDistance: "-0.18",
behindDistance: "-18",
isWrapSide: false,
leftExt: "0",
rightExt: "0",
offset: "0",
footThickness: "0.18"
footThickness: "18"
};
@observable bottomBoardOption = {
thickness: "0.18",
thickness: "18",
forwardDistance: "0",
behindDistance: "-0.18",
behindDistance: "-18",
isWrapSide: false,
leftExt: "0",
rightExt: "0",
offset: "0.8",
footThickness: "0.18"
offset: "80",
footThickness: "18"
};
m_Parameter = new Map([
["thickness", "板厚"], ["forwardDistance", "前距"], ["behindDistance", "后距"],

Loading…
Cancel
Save