diff --git a/src/iscs_new/controller.js b/src/iscs_new/controller.js index 71adfb7ca..4f11f482c 100644 --- a/src/iscs_new/controller.js +++ b/src/iscs_new/controller.js @@ -59,7 +59,7 @@ export default class Controller extends Eventful { this.selectingHandle = new SelectingHandle(map, this); this.selectHandle = new SelectHandle(map, this); this.keyBoardHandle = new KeyBoardHandle(map, this); - this.storage = new Storage(); + this._storage = new Storage(); } initHandler(map) { @@ -147,7 +147,7 @@ export default class Controller extends Eventful { } isSelected(code) { - return this.storage.has(code) + return this._storage.has(code) } setTarget(target) { @@ -177,7 +177,7 @@ export default class Controller extends Eventful { zr.dom.focus(); this._isNotLeftMouse = eventTool.isMiddleOrRightButtonOnMouseUpDown(e); - this.trigger(events.Selected, this._target); + this.trigger(events.Click, this._target); this.selectingHandle.clear(); if (this._isNotLeftMouse) { @@ -324,12 +324,16 @@ export default class Controller extends Eventful { } clear() { - this.storage.clear(); - this.storage.clearClipboard(); + this._storage.clear(); + this._storage.clearClipboard(); this._target = null; this._pan = false; } + getStorage() { + return this._storage; + } + getKeyStr() { return this._shortcuts; } diff --git a/src/iscs_new/core/abstractShape.js b/src/iscs_new/core/abstractShape.js index 8721b09e0..113b7b69e 100644 --- a/src/iscs_new/core/abstractShape.js +++ b/src/iscs_new/core/abstractShape.js @@ -42,12 +42,16 @@ class AbstractShape extends Group { drift({dx, dy}) { this.model.base.position[0] = this.model.base.position[0] + dx; this.model.base.position[1] = this.model.base.position[1] + dy; + this.instance.scale = this.model.base.scale; + this.instance.position = this.model.base.position; + this.instance.rotation = this.model.base.rotation*Math.PI/180; this.instance.origin = utils.createOrigin(this.instance); + console.log(this.model.base.position, this.model.base.rotation); this.instance.transform = utils.createTransform({scale: this.model.base.scale, position: this.model.base.position, rotation: this.model.base.rotation*Math.PI/180}); this.setInvisible(this.model.base.hide) } - // 修改属性 + // 修改状态 attr(attrs) { if (this.instance) { this.instance.attr(attrs); diff --git a/src/iscs_new/core/form/builderFactory.js b/src/iscs_new/core/form/builderFactory.js deleted file mode 100644 index 37dd19cad..000000000 --- a/src/iscs_new/core/form/builderFactory.js +++ /dev/null @@ -1,38 +0,0 @@ -import {elementConst} from './elementConst'; -import form2Base from './form2Base'; -class BuilderFactory { - constructor() { - this.formList = []; - } - getFormList() { - const elementList = Object.values(elementConst); - elementList.forEach(element=>{ - const temp = {}; - temp.code = element.code; - temp.name = element.name; - temp.formGroup = []; - temp.model = {}; - temp.model['name'] = '<名称>'; - // 添加通用配置 - temp.model['base'] = {}; - form2Base.forEach(each=>{ - temp.model['base'][each.prop] = each.value; - }); - temp.formGroup.push({name:'通用配置', code:'base', styleList:form2Base}); - - const list = [{name:'绘图配置', type:'shape'}, {name:'样式配置', type:'style'}]; - list.forEach(eachType=>{ - temp.model[eachType.type] = {}; - const eachList = element.formList[eachType.type]; - eachList.forEach(each=>{ - temp.model[eachType.type][each.prop] = each.value; - }); - temp.formGroup.push({name:eachType.name, code:eachType.type, styleList:eachList}); - }); - this.formList.push(temp); - }); - return this.formList; - } -} - -export default BuilderFactory; diff --git a/src/iscs_new/core/form/elementConst.js b/src/iscs_new/core/form/elementConst.js index a90884cf8..19c5e1c58 100644 --- a/src/iscs_new/core/form/elementConst.js +++ b/src/iscs_new/core/form/elementConst.js @@ -5,9 +5,9 @@ import form2TextStyle from './form2TextStyle'; import types from './types'; const graphicType = Object.fromEntries(Object.keys(graphic).map(type => [type, type])); -export const elementConst = { +const elementConst = { [graphicType.Line]: { - code: graphicType.Line, + type: graphicType.Line, name:'线段', formList: { style: [ @@ -66,7 +66,7 @@ export const elementConst = { } }, [graphicType.Text]: { - code: graphicType.Text, + type: graphicType.Text, name:'文字', formList: { style: [ @@ -77,7 +77,7 @@ export const elementConst = { } }, [graphicType.Rect]: { - code: graphicType.Rect, + type: graphicType.Rect, name:'矩形', formList: { style: [ @@ -158,7 +158,7 @@ export const elementConst = { } }, [graphicType.Circle]: { - code: graphicType.Circle, + type: graphicType.Circle, name:'圆形', formList:{ style: [ @@ -214,7 +214,7 @@ export const elementConst = { } }, [graphicType.Polygon]: { - code: graphicType.Polygon, + type: graphicType.Polygon, name:'多边形', formList: { style: [ @@ -260,7 +260,7 @@ export const elementConst = { } }, [graphicType.Arrow]: { - code: graphicType.Arrow, + type: graphicType.Arrow, name:'箭头', formList: { style: [ @@ -272,7 +272,7 @@ export const elementConst = { } }, [graphicType.Polyline]: { - code: graphicType.Polyline, + type: graphicType.Polyline, name:'多边形折线段', formList: { style: [ @@ -308,7 +308,7 @@ export const elementConst = { } }, [graphicType.Isogon]: { - code: graphicType.Isogon, + type: graphicType.Isogon, name:'正多边形', formList: { style: [ @@ -377,7 +377,7 @@ export const elementConst = { } }, [graphicType.Ellipse]: { - code: graphicType.Ellipse, + type: graphicType.Ellipse, name:'椭圆', formList: { style: [ @@ -446,7 +446,7 @@ export const elementConst = { } }, [graphicType.Arc]: { - code: graphicType.Arc, + type: graphicType.Arc, name:'圆弧', formList: { style: [ @@ -531,7 +531,7 @@ export const elementConst = { } }, [graphicType.Sector]: { - code: graphicType.Sector, + type: graphicType.Sector, name:'扇形', formList: { style: [ @@ -638,7 +638,7 @@ export const elementConst = { } }, [graphicType.Heart]: { - code: graphicType.Heart, + type: graphicType.Heart, name:'心形', formList: { style: [ @@ -707,7 +707,7 @@ export const elementConst = { } }, [graphicType.Droplet]: { - code: graphicType.Droplet, + type: graphicType.Droplet, name:'水滴', formList: { style: [ @@ -775,3 +775,4 @@ export const elementConst = { } } }; +export default elementConst diff --git a/src/iscs_new/core/form/formBuilder.js b/src/iscs_new/core/form/formBuilder.js index 7b9da0b1c..8027f570e 100644 --- a/src/iscs_new/core/form/formBuilder.js +++ b/src/iscs_new/core/form/formBuilder.js @@ -1,37 +1,40 @@ -class FormBuilder { - constructor(formStyle = {}) { - this.formStyle = { - style: {}, - ...JSON.parse(JSON.stringify(formStyle)), - } - } +import elementConst from './elementConst'; +import form2Base from './form2Base'; - setBase(base = {}) { - Object.assign(this.formStyle, - Object.fromEntries( - Object.entries(base).filter(el => !['style'].includes(el[0])) - ) - ); - return this; - } +const formBuilder = { + buildForm(el) { + const form = {}; + form.type = el.type; + form.name = el.name; + form.formGroup = []; + form.model = {}; - setStyle(style = {}) { - Object.assign(this.formStyle.style, - Object.fromEntries( - Object.entries(style).filter(el => !['truncate'].includes(el[0])) - ) - ); - return this; - } + // 添加通用配置 + form.model['base'] = {}; + form2Base.forEach(each=>{ + form.model['base'][each.prop] = each.value; + }); + form.formGroup.push({name:'通用配置', type:'base', styleList:form2Base}); - setTruncate(truncate = {}) { - this.formStyle.style.truncate = { ...truncate } - return this; - } - - build() { - return this.formStyle; - } + const list = [{name:'绘图配置', type:'shape'}, {name:'样式配置', type:'style'}]; + list.forEach(eachType=>{ + form.model[eachType.type] = {}; + const eachList = el.formList[eachType.type]; + eachList.forEach(each=>{ + form.model[eachType.type][each.prop] = each.value; + }); + form.formGroup.push({name:eachType.name, type: eachType.type, styleList:eachList}); + }); + return form; + }, + buildFormList() { + const formList = []; + const elementList = Object.values(elementConst); + elementList.forEach(el=>{ + formList.push(this.buildForm(el)); + }); + return formList; + } } -export default FormBuilder; +export default formBuilder; diff --git a/src/iscs_new/dragHandle.js b/src/iscs_new/dragHandle.js index ef9575c2c..a39d0e3e4 100644 --- a/src/iscs_new/dragHandle.js +++ b/src/iscs_new/dragHandle.js @@ -13,7 +13,8 @@ export default class DragHandle { } onDragStart(e) { - if (e.code && this.$controller.storage.has(e.code)) { + const storage = this.$controller.getStorage(); + if (e.code && storage.has(e.code)) { this._dragging = true; } } @@ -22,12 +23,13 @@ export default class DragHandle { const dx = e.dx; const dy = e.dy; const scaleRate = this.$option.getScaleRate(); + const storage = this.$controller.getStorage(); e.dx = dx / scaleRate; e.dy = dy / scaleRate; if (this._dragging) { - this.$controller.storage.values().forEach(target => { + storage.values().forEach(target => { if (target) { target.shapeFactory.hideHightLight(target);; target.drift(e); diff --git a/src/iscs_new/factory/compose.js b/src/iscs_new/factory/compose.js index a122874df..bd53ae254 100644 --- a/src/iscs_new/factory/compose.js +++ b/src/iscs_new/factory/compose.js @@ -77,12 +77,14 @@ class Compose extends AbstractShape { this.shapeFactory.hideHightLight(this); this.model.elementCodes.forEach(code => { const el = this.shapeFactory.getShapeByCode(code); - if (el && - el.model) { - this.shapeFactory.removeFromLayer(el.type)(el); - this.instance.add(el); - el.model.composeCode = this.code; - el.attr(el.model); + if (el) { + this.shapeFactory.hideHightLight(el); + if (el.model) { + this.shapeFactory.removeFromLayer(el.type)(el); + this.instance.add(el); + el.model.composeCode = this.code; + el.attr(el.model); + } } }) } @@ -93,13 +95,15 @@ class Compose extends AbstractShape { this.shapeFactory.hideHightLight(this); this.model.elementCodes.forEach(code => { const el = this.shapeFactory.getShapeByCode(code); - if (el && - el.model && - el.model.composeCode) { - this.instance.remove(el); - this.shapeFactory.addToLayer(el.type)(el); - el.model.composeCode = ''; - el.attr(el.model); + if (el) { + this.shapeFactory.hideHightLight(el); + if (el.model && + el.model.composeCode) { + this.instance.remove(el); + this.shapeFactory.addToLayer(el.type)(el); + el.model.composeCode = ''; + el.attr(el.model); + } } }) this.model.elementCodes = []; diff --git a/src/iscs_new/factory/element.js b/src/iscs_new/factory/element.js index 3141ea2cb..bc10b0bd0 100644 --- a/src/iscs_new/factory/element.js +++ b/src/iscs_new/factory/element.js @@ -76,11 +76,13 @@ class Element extends AbstractShape { if (compose && compose.model && compose.model.elementCodes) { + this.shapeFactory.hideHightLight(compose); const index = compose.model.elementCodes.findIndex(this.type); if (index < 0) { compose.model.elementCodes.push(this.type); this.shapeFactory.removeFormLayer(el.type, this); - compose.add(this); + compose.instance.add(this); + compose.attr(compose.model); } } } @@ -93,10 +95,12 @@ class Element extends AbstractShape { if (compose && compose.model && compose.model.elementCodes) { + this.shapeFactory.hideHightLight(compose); const index = compose.model.elementCodes.findIndex(this.type); if (index >= 0) { compose.model.elementCodes.splice(index, 1); - compose.remove(this); + compose.instance.remove(this); + compose.attr(compose.model); this.shapeFactory.addToLayer(el.type)(this); } } diff --git a/src/iscs_new/factory/index.js b/src/iscs_new/factory/index.js index 14faf28d9..6e865a63e 100644 --- a/src/iscs_new/factory/index.js +++ b/src/iscs_new/factory/index.js @@ -110,11 +110,11 @@ class ShapeFactory extends Eventful { try { this.source = source; zrUtil.each(source.elementList ||[], model => { - take(this.storageShape(this.createShape(model, shapeType.Element))); + take(this.addShape(this.createShape(model, shapeType.Element))); }, this); zrUtil.each(source.composeList ||[], model => { - take(this.storageShape(this.createShape(model, shapeType.Compose))); + take(this.addShape(this.createShape(model, shapeType.Compose))); }, this); } catch (error) { console.error('[ERROR] ', error); @@ -126,14 +126,15 @@ class ShapeFactory extends Eventful { const shapeBuilder = shapeBuilderMap[shapeType]; if (shapeBuilder) { shape = new shapeBuilder({model, shapeType, shapeFactory: this}); - shape.combine(); } return shape; } - storageShape(shape) { + addShape(shape) { if (shape && shape.code) { + this.hideHightLight(shape); this.mapShape[shape.code] = shape; + shape.combine(); } return shape; } @@ -141,7 +142,7 @@ class ShapeFactory extends Eventful { removeShape(shape) { if (shape && shape.code) { this.hideHightLight(shape); - shape.uncouple(shape); + shape.uncouple(); delete this.mapShape[shape.code]; } return shape; @@ -243,15 +244,15 @@ function update2List(source, model, action, name='') { let updateModel = model; const i = list.findIndex(elem => { return elem.code == model.code; }) switch(action.order) { - case orders.BINDING: - case orders.ADD: - list.push(model); + case orders.Binding: + case orders.Add: + i < 0 && list.push(model); break; - case orders.UNBINDING: - case orders.DELETE: + case orders.Unbinding: + case orders.Delete: i >= 0 && list.splice(i, 1); break; - case orders.UPDATE: + case orders.Update: updateModel = Object.assign(list[i]||{}, model) break; } diff --git a/src/iscs_new/map.js b/src/iscs_new/map.js index 6bac2816b..ae55759aa 100644 --- a/src/iscs_new/map.js +++ b/src/iscs_new/map.js @@ -9,10 +9,10 @@ import Controller from './controller'; import StateHandle from './stateHandle'; import ShapeFactory from './factory'; import orders from './utils/orders'; +import shapeType from './constant/shapeType'; const renderer = 'canvas'; const devicePixelRatio = 1; - class JMap { constructor(opts) { // 内部鼠标事件 @@ -75,9 +75,8 @@ class JMap { }; // 加载插件 - if (opts.plugins) { - opts.plugins.forEach(el => { this.use(el); }); - } + this.plugins = opts.plugins||[]; + this.plugins.forEach(el => { this.use(el); }); } setMap(templates=[], source={}, eventOpts={}) { @@ -151,7 +150,7 @@ class JMap { repaint(source={}) { this.$shapeFactory.parse(source, shape => { if (shape) { - this.$painter.add(shape); + this.$painter.add(shape) } }); return this; @@ -168,13 +167,13 @@ class JMap { if (updateModel) { this.$controller.clear() switch(action.order) { - case orders.BINDING: - case orders.ADD: + case orders.Binding: + case orders.Add: newShape = this.$shapeFactory.createShape(updateModel, action.shapeType); - this.$shapeFactory.storageShape(newShape) + this.$shapeFactory.addShape(newShape) this.$painter.add(newShape); break; - case orders.DELETE: + case orders.Delete: deps = curShape.getDepShapes(); deps.forEach(el => { updateModel = this.isDrawing() ? this.$shapeFactory.updateSource(el, {...action, shapeType: el.shapeType}): el; @@ -186,20 +185,21 @@ class JMap { } }); break; - case orders.UPDATE: - updateModel = this.isDrawing() ? this.$shapeFactory.updateSource(model, action): model; + case orders.Update: oldShape = this.$shapeFactory.removeShape(curShape); newShape = this.$shapeFactory.createShape(updateModel, action.shapeType); this.$painter.removeFromLayer(oldShape.type, oldShape.instanceHightLight); this.$painter.removeFromLayer(oldShape.type, newShape.instanceHightLight); this.$painter.remove(oldShape); - this.$shapeFactory.storageShape(newShape) + this.$shapeFactory.addShape(newShape) this.$painter.add(newShape); break; - case orders.UNBINDING: + case orders.Unbinding: oldShape = this.$shapeFactory.removeShape(curShape); this.$painter.removeFromLayer(oldShape.type, oldShape.instanceHightLight); this.$painter.remove(oldShape); + this.$shapeFactory.addShape(oldShape); + this.$painter.add(oldShape); break; } } @@ -235,6 +235,10 @@ class JMap { return this.$controller; } + getStorage() { + return this.$controller.getStorage(); + } + getShapeFactory() { return this.$shapeFactory; } @@ -275,8 +279,9 @@ class JMap { this.$zr.refresh() } - use(install) { - install(this); + use(el) { + this.plugins.includes(el)||this.plugins.push(el) + el.install(this); } destroy() { @@ -286,6 +291,10 @@ class JMap { this.$controller.destroy(); this.$painter.destroy(); this.$zr && this.$zr.dispose(); + this.plugins.forEach(el => { + el.uninstall(this); + }) + this.plugins = []; } on(name, cb, context) { @@ -311,8 +320,8 @@ class JMap { this.$eventEmitter.on(events.OptionUpdate, cb, context); break; - case events.Selected: - this.$controller.on(events.Selected, cb, context); + case events.Click: + this.$controller.on(events.Click, cb, context); break; case events.ContextMenu: this.$controller.on(events.ContextMenu, cb, context); @@ -332,9 +341,9 @@ class JMap { case events.Keyup: this.$controller.on(events.Keyup, cb, context); break; - case events.BuildShape: - this.$controller.on(events.BuildShape, cb, context); - break; + // case events.BuildShape: + // this.$controller.on(events.BuildShape, cb, context); + // break; } } } @@ -362,8 +371,8 @@ class JMap { this.$eventEmitter.off(events.OptionUpdate, cb, context); break; - case events.Selected: - this.$controller.off(events.Selected, cb); + case events.Click: + this.$controller.off(events.Click, cb); break; case events.ContextMenu: this.$controller.off(events.ContextMenu, cb); @@ -383,9 +392,9 @@ class JMap { case events.Keyup: this.$controller.off(events.Keyup, cb); break; - case events.BuildShape: - this.$controller.off(events.BuildShape, cb); - break; + // case events.BuildShape: + // this.$controller.off(events.BuildShape, cb); + // break; } } } diff --git a/src/iscs_new/plugins/shapeBuilder/entry.vue b/src/iscs_new/plugins/shapeBuilder/entry.vue new file mode 100644 index 000000000..f7ce0c83b --- /dev/null +++ b/src/iscs_new/plugins/shapeBuilder/entry.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/iscs_new/plugins/shapeBuilder/index.js b/src/iscs_new/plugins/shapeBuilder/index.js index 4a56fcf40..9722321a8 100644 --- a/src/iscs_new/plugins/shapeBuilder/index.js +++ b/src/iscs_new/plugins/shapeBuilder/index.js @@ -1,80 +1,67 @@ import Vue from 'vue'; -import shapeTypeSelect from './shapeTypeSelect.vue'; +import events from '@/iscs_new/utils/events'; +import entry from './entry.vue'; -const GrSelect = Vue.extend(shapeTypeSelect); -const toggleVisible = (el, show) => { - if (show) { - Vue.nextTick(() => { - el.instance.visible = true; - }); - } else { - el.instance.visible = false; - } -}; - - -class Handle { - constructor() { - this._shapeType = ''; - } - - accept({shapeType}) { - console.log(111111111111111, 'accept') - this._shapeType = shapeType; - } - - onSelect(e) { - // console.log('onSelect', e) - } +const VuePage = Vue.extend(entry); +const handle = { + onClick(e) { + if (!e) { + this.page.type = ''; + } + }, onContextMenu(e) { - // console.log('onContextMenu', e) - } - - onBuildShape(e) { - // console.log('onBuildShape', e) + if (!e) { + this.page.type = ''; + } } } - class ShapeBuilder { - constructor(map, handle) { + constructor(map) { + this.zr = map.getZr(); this.map = map; - this.handle = handle; - this.initUI(map.getZr()); + this.page = this.initUI(); } - initUI(zr) { - const el = zr.dom; - const grSelect = new GrSelect({ + initUI() { + const el = this.zr.dom; + const page = new VuePage({ el: document.createElement('div'), data () {} }); - el.instance = grSelect; - el.dom = grSelect.$el; + el.page = page; + el.dom = page.$el; el.grSelectStyle = {}; el.appendChild(el.dom); - el.instance.$on('change', e => this.handle.accept(e)); - this.grSelect = grSelect; + return page; } addEventListener() { if (this.map) { - this.map.on(events.Select, this.handle.onSelect, this.handle); - this.map.on(events.ContextMenu, this.handle.onContextMenu, this.handle); - this.map.on(events.BuildShape, this.handle.onBuildShape, this.handle); + this.map.on(events.Click, handle.onClick, this); + this.map.on(events.ContextMenu, handle.onContextMenu, this); } } removeEventListener() { - if (this.zr) { - this.map.off(events.Select, this.handle.onSelect, this.handle); - this.map.off(events.ContextMenu, this.handle.onContextMenu, this.handle); - this.map.off(events.BuildShape, this.handle.onBuildShape, this.handle); + if (this.map) { + this.map.off(events.Click, handle.onClick, this); + this.map.off(events.ContextMenu, handle.onContextMenu, this); } } } -export default function install(map) { - const shapeBuilder = new ShapeBuilder(map, new Handle()); +export default { + el: null, + install(map) { + this.el = new ShapeBuilder(map); + this.el.addEventListener(); + }, + uninstall(map) { + if (this.el) { + this.el.removeEventListener(); + this.el = null; + } + } } diff --git a/src/iscs_new/plugins/shapeBuilder/shapeTypeSelect.vue b/src/iscs_new/plugins/shapeBuilder/shapeTypeSelect.vue deleted file mode 100644 index b636452bf..000000000 --- a/src/iscs_new/plugins/shapeBuilder/shapeTypeSelect.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/src/iscs_new/plugins/shapeContextMenu/entry.vue b/src/iscs_new/plugins/shapeContextMenu/entry.vue new file mode 100644 index 000000000..5fac4b939 --- /dev/null +++ b/src/iscs_new/plugins/shapeContextMenu/entry.vue @@ -0,0 +1,121 @@ + + + + + + diff --git a/src/iscs_new/plugins/shapeContextMenu/index.js b/src/iscs_new/plugins/shapeContextMenu/index.js new file mode 100644 index 000000000..f544a5dc6 --- /dev/null +++ b/src/iscs_new/plugins/shapeContextMenu/index.js @@ -0,0 +1,79 @@ +import Vue from 'vue'; +import events from '@/iscs_new/utils/events'; +import entry from './entry.vue'; + +const elPage = Vue.extend(entry); + +const toggling = (page, e) => { + if (e&&e.code) { + Vue.nextTick(() => { + page.doShow({x: e.clientX, y: e.clientY}); + }); + } else { + page.doClose(); + } +}; + + +const handle = { + onClick(e) { + if (this.page) { + this.page.selected = e; + toggling(this.page, {}); + } + }, + onContextMenu(e) { + if (this.page) { + toggling(this.page, e); + } + } +} + +class ShapeBuilder { + constructor(map) { + this.zr = map.getZr(); + this.map = map; + this.page = this.initUI(); + } + + initUI() { + const el = this.zr.dom; + const page = new elPage({ + el: document.createElement('div'), + data () {} + }); + el.page = page; + el.dom = page.$el; + el.grSelectStyle = {}; + el.appendChild(el.dom); + return page; + } + + addEventListener() { + if (this.map) { + this.map.on(events.Click, handle.onClick, this); + this.map.on(events.ContextMenu, handle.onContextMenu, this); + } + } + + removeEventListener() { + if (this.map) { + this.map.off(events.Click, handle.onClick, this); + this.map.off(events.ContextMenu, handle.onContextMenu, this); + } + } +} + +export default { + el: null, + install(map) { + this.el = new ShapeBuilder(map); + this.el.addEventListener(); + }, + uninstall(map) { + if (this.el) { + this.el.removeEventListener(); + this.el = null; + } + } +} diff --git a/src/iscs_new/plugins/shapeContextMenu/menu-item.vue b/src/iscs_new/plugins/shapeContextMenu/menu-item.vue new file mode 100644 index 000000000..ec2687e95 --- /dev/null +++ b/src/iscs_new/plugins/shapeContextMenu/menu-item.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/src/iscs_new/plugins/shapeProperty/entry.vue b/src/iscs_new/plugins/shapeProperty/entry.vue new file mode 100644 index 000000000..dd8b046b5 --- /dev/null +++ b/src/iscs_new/plugins/shapeProperty/entry.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/iscs_new/plugins/shapeProperty/index.js b/src/iscs_new/plugins/shapeProperty/index.js new file mode 100644 index 000000000..6cfd56574 --- /dev/null +++ b/src/iscs_new/plugins/shapeProperty/index.js @@ -0,0 +1,77 @@ +import Vue from 'vue'; +import events from '@/iscs_new/utils/events'; +import entry from './entry.vue'; + +const elPage = Vue.extend(entry); + +const toggling = (page, e) => { + if (!!e) { + Vue.nextTick(() => { + page.visible = true; + }); + } else { + page.visible = false; + } +}; + + +const handle = { + onClick(e) { + toggling(this.page, e); + }, + onContextMenu(e) { + }, + onModify(e) { + }, + onDelete(e) { + } +} + +class ShapeBuilder { + constructor(map) { + this.zr = map.getZr(); + this.map = map; + this.page = this.initUI(); + } + + initUI() { + const el = this.zr.dom; + const page = new elPage({ + el: document.createElement('div'), + data () {} + }); + el.page = page; + el.dom = page.$el; + el.grSelectStyle = {}; + el.appendChild(el.dom); + return page; + } + + addEventListener() { + if (this.map) { + this.map.on(events.Click, handle.onClick, this); + this.map.on(events.ContextMenu, handle.onContextMenu, this); + } + } + + removeEventListener() { + if (this.map) { + this.map.off(events.Click, handle.onClick, this); + this.map.off(events.ContextMenu, handle.onContextMenu, this); + } + } +} + +export default { + el: null, + install(map) { + this.el = new ShapeBuilder(map); + this.el.addEventListener(); + }, + uninstall(map) { + if (this.el) { + this.el.removeEventListener(); + this.el = null; + } + } +} diff --git a/src/iscs_new/selectHandle.js b/src/iscs_new/selectHandle.js index 48d465b6f..d84096bab 100644 --- a/src/iscs_new/selectHandle.js +++ b/src/iscs_new/selectHandle.js @@ -13,6 +13,7 @@ export default class SelectHandle { onSelected(e) { if (e.target) { + const storage = this.$controller.getStorage(); this.e = {...e}; if ([`Control`].includes(this.$controller.getKeyStr())) { if (this.$controller.isSelected(e.target.code)) { @@ -21,7 +22,7 @@ export default class SelectHandle { } else { this.addSelected(e.target); } - } else if (!this.$controller.storage.has(e.target.code)){ + } else if (!storage.has(e.target.code)){ this.clear(); this.addSelected(e.target); } else { @@ -31,17 +32,20 @@ export default class SelectHandle { } addSelected(target) { - this.$controller.storage.set(target.code, target); + const storage = this.$controller.getStorage(); + storage.set(target.code, target); target.shapeFactory.showHightLight(target); } delSelected(target) { + const storage = this.$controller.getStorage(); target.shapeFactory.hideHightLight(target);; - this.$controller.storage.delete(target.code); + storage.delete(target.code); } clear() { - this.$controller.storage.values().forEach(target => { + const storage = this.$controller.getStorage(); + storage.values().forEach(target => { this.delSelected(target); }); } diff --git a/src/iscs_new/selectingHandle.js b/src/iscs_new/selectingHandle.js index ac8943156..92119c7cd 100644 --- a/src/iscs_new/selectingHandle.js +++ b/src/iscs_new/selectingHandle.js @@ -260,15 +260,16 @@ export default class SelectingHandle { } }); - if (['Alt'].includes(keyStr)) { - this.$controller.trigger(events.BuildShape, {...selectingRect, option: this.$map.getOption()}); - } + // if (['Alt'].includes(keyStr)) { + // this.$controller.trigger(events.BuildShape, {...selectingRect, option: this.$map.getOption()}); + // } this.clear(); } setSelected(target) { - this.$controller.storage.set(target.code, target); + const storage = this.$controller.getStorage(); + storage.set(target.code, target); target.shapeFactory.showHightLight(target); } diff --git a/src/iscs_new/utils/events.js b/src/iscs_new/utils/events.js index d0dff6dc6..8561a5d53 100644 --- a/src/iscs_new/utils/events.js +++ b/src/iscs_new/utils/events.js @@ -1,6 +1,6 @@ export default { Reflect: 'reflect', - Selected: 'selected', + Click: 'click', ContextMenu: 'contextmenu', DataZoom: 'dataZoom', Keydown: 'keydown', @@ -12,5 +12,5 @@ export default { ViewUpdate: 'viewUpdate', StateUpdate: 'stateUpdate', OptionUpdate: 'optionUpdate', - BuildShape: 'buildShape' + // BuildShape: 'buildShape' } diff --git a/src/iscs_new/utils/orders.js b/src/iscs_new/utils/orders.js index e0dee4569..8897e4cbb 100644 --- a/src/iscs_new/utils/orders.js +++ b/src/iscs_new/utils/orders.js @@ -1,7 +1,7 @@ export default { - ADD: '&ADD', - DELETE: '&DEL', - UPDATE: '&UPT', - BINDING: '&BINDING', - UNBINDING: '&UNBINDING', + Add: '&Add', + Delete: '&DEL', + Update: '&UPT', + Binding: '&Binding', + Unbinding: '&Unbinding', } diff --git a/src/views/iscs_new/components/dataForm.vue b/src/views/iscs_new/components/dataForm.vue index 961416cdc..fdbf19d6f 100644 --- a/src/views/iscs_new/components/dataForm.vue +++ b/src/views/iscs_new/components/dataForm.vue @@ -16,8 +16,8 @@ {{ styleGroup.name }}