diff --git a/index.html b/index.html
index 5c3ffbd..50164c4 100644
--- a/index.html
+++ b/index.html
@@ -15,7 +15,7 @@
-
+
diff --git a/src/assets/styles/main.less b/src/assets/styles/main.less
index 3296d29..8664826 100644
--- a/src/assets/styles/main.less
+++ b/src/assets/styles/main.less
@@ -7,18 +7,26 @@
}
body {
--el-color-primary: #2254f4;
- cursor: -webkit-image-set(
- url(data:image/png;base64,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)
- 2x
- )
- 6 2,
- default;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
color: #333333;
font-family: Hiragino Sans GB, Hiragino Sans GB W3, Arial, Microsoft Yahei, STHeiti, sans-serif;
overflow: hidden;
}
+.pointer-case {
+ cursor: -webkit-image-set(
+ url(data:image/png;base64,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)
+ 2x
+ )
+ 6 2,
+default;
+}
+.move-case {
+ cursor: grab;
+}
+.move-case:active {
+ cursor: grabbing;
+}
* {
box-sizing: border-box;
diff --git a/src/components/business/moveable/Selecto.ts b/src/components/business/moveable/Selecto.ts
index 4d4e40d..426db7f 100644
--- a/src/components/business/moveable/Selecto.ts
+++ b/src/components/business/moveable/Selecto.ts
@@ -1,10 +1,11 @@
import Selecto from 'selecto'
import Moveable, { getElementInfo } from 'moveable'
// import store from '@/store'
-import { useWidgetStore } from '@/store'
+import { useWidgetStore, useControlStore } from '@/store'
export default function(moveable: Moveable) {
const widgetStore = useWidgetStore()
+ const controlStore = useControlStore()
const selecto = new Selecto({
container: document.getElementById('page-design'),
selectableTargets: ['.layer'],
@@ -45,5 +46,9 @@ export default function(moveable: Moveable) {
moveable.renderDirections = [] // ['nw', 'ne', 'sw', 'se'] // []
moveable.rotatable = false
moveable.target = [].slice.call(document.querySelectorAll('.widget-selected'))
+ }).on("dragStart", e => {
+ if (controlStore.dSpaceDown) {
+ e.stop();
+ }
})
}
diff --git a/src/components/modules/layout/designBoard/index.vue b/src/components/modules/layout/designBoard/index.vue
index 5d40d1d..7f9484d 100644
--- a/src/components/modules/layout/designBoard/index.vue
+++ b/src/components/modules/layout/designBoard/index.vue
@@ -105,7 +105,7 @@ const { pageDesignCanvasId } = defineProps()
const { dPage } = storeToRefs(usePageStore())
const { dZoom, dPaddingTop, dScreen } = storeToRefs(canvasStore)
-const { dDraging, showRotatable, dAltDown } = storeToRefs(controlStore)
+const { dDraging, showRotatable, dAltDown, dSpaceDown } = storeToRefs(controlStore)
const { dWidgets, dActiveElement, dSelectWidgets, dHoverUuid } = storeToRefs(widgetStore)
@@ -118,6 +118,32 @@ onMounted(() => {
if (!pageDesignEl) return
pageDesignEl.addEventListener('mousedown', handleSelection, false)
pageDesignEl.addEventListener('mousemove', debounce(100, false, handleMouseMove), false)
+ // 绑定空格事件
+ const scrollContainer: any = document.querySelector('#main')
+ const dragContainer: any = pageDesignEl
+ dragContainer.onmousedown = (e: any) => {
+ let mouseDownScrollPosition = {
+ scrollLeft: scrollContainer.scrollLeft,
+ scrollTop: scrollContainer.scrollTop,
+ }
+ let mouseDownPoint = {
+ x: e.clientX,
+ y: e.clientY,
+ }
+ dragContainer.onmousemove = (e: any) => {
+ if (!dSpaceDown.value) return
+ let dragMoveDiff = {
+ x: mouseDownPoint.x - e.clientX,
+ y: mouseDownPoint.y - e.clientY,
+ }
+ scrollContainer.scrollLeft = mouseDownScrollPosition.scrollLeft + dragMoveDiff.x
+ scrollContainer.scrollTop = mouseDownScrollPosition.scrollTop + dragMoveDiff.y
+ }
+ document.onmouseup = (e) => {
+ dragContainer.onmousemove = null
+ document.onmouseup = null
+ }
+ }
})
// components: {lineGuides},
diff --git a/src/components/modules/layout/lineGuides.vue b/src/components/modules/layout/lineGuides.vue
index 2995ead..c958807 100644
--- a/src/components/modules/layout/lineGuides.vue
+++ b/src/components/modules/layout/lineGuides.vue
@@ -1,7 +1,7 @@
diff --git a/src/components/modules/layout/zoomControl/index.vue b/src/components/modules/layout/zoomControl/index.vue
index cb3d3b7..83e9550 100644
--- a/src/components/modules/layout/zoomControl/index.vue
+++ b/src/components/modules/layout/zoomControl/index.vue
@@ -81,8 +81,6 @@ watch(
realValue = calcZoom()
}
canvasStore.updateZoom(realValue)
- // store.dispatch('updateZoom', realValue)
- // updateZoom(realValue)
autoFixTop()
}
)
@@ -155,8 +153,6 @@ function screenChange() {
// 弹性尺寸即时修改
if (activezoomIndex.value === zoomList.value.length - 1) {
canvasStore.updateZoom(calcZoom())
- // store.dispatch('updateZoom', calcZoom())
- // this.updateZoom(this.calcZoom())
autoFixTop()
}
}
@@ -225,10 +221,9 @@ function mousewheelZoom(down: boolean) {
const value = Number(dZoom.value.toFixed(0))
if (down && value <= 1) return
canvasStore.updateZoom(down ? value - 1 : value + 1)
- // store.dispatch('updateZoom', down ? value - 1 : value + 1)
- // updateZoom(down ? value - 1 : value + 1)
zoom.value.text = (value + '%') as any
autoFixTop()
+ activezoomIndex.value = -99
}
function nearZoom(add?: boolean) {
@@ -246,7 +241,6 @@ function nearZoom(add?: boolean) {
function calcZoom() {
let widthZoom = ((dScreen.value.width - 142) * 100) / dPage.value.width
let heightZoom = ((dScreen.value.height - 122) * 100) / dPage.value.height
-
bestZoom.value = Math.min(widthZoom, heightZoom)
return bestZoom.value
}
diff --git a/src/components/modules/widgets/wImage/wImage.vue b/src/components/modules/widgets/wImage/wImage.vue
index c753427..6845950 100644
--- a/src/components/modules/widgets/wImage/wImage.vue
+++ b/src/components/modules/widgets/wImage/wImage.vue
@@ -93,7 +93,6 @@ const targetRef = ref(null)
let rotateTemp: number | null = null
let flipTemp: string | null = null
-let locksTemp: boolean[] | null = null
// const {
// dActiveElement, dWidgets, dMouseXY, dDropOverUuid, dCropUuid
@@ -129,7 +128,7 @@ watch(
el?.removeEventListener('mousedown', touchstart, false)
}
fixRotate()
- lockOthers()
+ lockOthers(val)
}
)
@@ -314,21 +313,15 @@ function fixRotate() {
}, 100)
}
-function lockOthers() {
+function lockOthers(isCrop) {
// 裁剪时锁定其他图层
- if (locksTemp && locksTemp.length > 0) {
- for (let i = 0; i < locksTemp.length; i++) {
- dWidgets.value[i].lock = locksTemp[i]
+ widgetStore.lockWidgets()
+ if (!isCrop) return
+ for (const widget of dWidgets.value) {
+ if (widget.uuid === props.params.uuid) {
+ widget.lock = false
+ break;
}
- locksTemp = []
- } else {
- locksTemp = []
- for (const widget of dWidgets.value) {
- locksTemp.push(widget?.lock || false)
- }
- dWidgets.value.forEach((widget: any) => {
- widget.uuid != props.params.uuid && (widget.lock = true)
- })
}
}
// cropDone(e) {
diff --git a/src/components/modules/widgets/wImage/wImageStyle.vue b/src/components/modules/widgets/wImage/wImageStyle.vue
index 2635e43..66d471e 100644
--- a/src/components/modules/widgets/wImage/wImageStyle.vue
+++ b/src/components/modules/widgets/wImage/wImageStyle.vue
@@ -334,10 +334,7 @@ function imgCrop(val: boolean) {
const { left, top } = el.getBoundingClientRect()
toolBarStyle = { left: left + 'px', top: top + 'px' }
state.innerElement.cropEdit = val
-
- // store.commit('setShowRotatable', !val)
controlStore.setShowRotatable(!val)
-
}
diff --git a/src/mixins/methods/keyCodeOptions.ts b/src/mixins/methods/keyCodeOptions.ts
index 182af49..ecfd904 100644
--- a/src/mixins/methods/keyCodeOptions.ts
+++ b/src/mixins/methods/keyCodeOptions.ts
@@ -7,13 +7,13 @@
*/
import { useControlStore, useWidgetStore } from '@/store'
import { TdWidgetData } from '@/store/design/widget'
-// import store from '@/store'
+
+const appContainer: any = document.querySelector('#app')
+const controlStore = useControlStore()
+const widgetStore = useWidgetStore()
export default function keyCodeOptions(e: any, params: any) {
const { f } = params
- const controlStore = useControlStore()
- const widgetStore = useWidgetStore()
-
switch (e.keyCode) {
case 38:
udlr('top', -1 * f, e)
@@ -49,6 +49,10 @@ export default function keyCodeOptions(e: any, params: any) {
}
break
}
+
+ if (e.key === ' ') {
+ dealWithSpace(e)
+ }
}
/**
* 对组合的子元素某个值进行判断
@@ -81,15 +85,18 @@ function udlr(type: keyof TdWidgetData, value: any, event: any) {
key: type,
value: result,
})
- // store.dispatch('updateWidgetData', {
- // uuid: store.getters.dActiveElement.uuid,
- // key: type,
- // value: result,
- // })
-
- // TODO: 键盘移位需要防抖入栈
- // timer = setTimeout(() => {
- // this.pushHistory()
- // }, 100)
+ }
+}
+
+function dealWithSpace(event: any) {
+ const widgetStore: any = useWidgetStore()
+ // 防止编辑文字时空格按不出来
+ if (!widgetStore.dActiveElement.editable) {
+ event.preventDefault()
+ appContainer.classList.add('move-case');
+ if (!controlStore.dSpaceDown) {
+ widgetStore.lockWidgets()
+ }
+ controlStore.setSpaceDown(true)
}
}
diff --git a/src/mixins/shortcuts.ts b/src/mixins/shortcuts.ts
index cf85a1a..34d00f3 100644
--- a/src/mixins/shortcuts.ts
+++ b/src/mixins/shortcuts.ts
@@ -12,6 +12,7 @@
import keyCodeOptions from './methods/keyCodeOptions'
import dealWithCtrl from './methods/dealWithCtrl'
import { TControlStore } from '@/store/design/control'
+import { useControlStore, useWidgetStore } from '@/store'
const ignoreNode = ['INPUT', 'TEXTAREA']
@@ -31,6 +32,9 @@ const systemKeyCode = [
]
let hadDown = false
+const appContainer: any = document.querySelector('#app')
+const controlStore = useControlStore()
+const widgetStore = useWidgetStore()
const shortcuts = {
methods: {
@@ -118,18 +122,20 @@ const shortcuts = {
},
handleKeyup(store: TControlStore, checkCtrl: number | undefined) {
return (e: any) => {
- console.log(e)
clearInterval(checkCtrl)
hadDown = false
if (e.key === 'Alt' || e.key === 'Shift' || e.key === 'Control' || e.key === 'Meta') {
store.updateAltDown(false)
- // store.dispatch('updateAltDown', false)
+ }
+ if (e.key === ' ') {
+ appContainer.classList.remove('move-case');
+ controlStore.setSpaceDown(false)
+ widgetStore.lockWidgets()
}
}
},
dealCtrl(e: any, instance: any) {
dealWithCtrl(e, instance)
- console.log(e.key, e.keyCode)
},
},
}
diff --git a/src/store/design/control/index.ts b/src/store/design/control/index.ts
index e0a532f..8a71d41 100644
--- a/src/store/design/control/index.ts
+++ b/src/store/design/control/index.ts
@@ -25,7 +25,9 @@ type TControlState = {
showRotatable: boolean
/** 记录是否按下alt键 / 或ctrl */
dAltDown: boolean
- /** 正在编辑or裁剪的组件id */
+ // 是否按下空格键
+ dSpaceDown: boolean
+ /** 正在编辑or裁剪的组件id *
dCropUuid: string
}
@@ -43,6 +45,7 @@ type TControlAction = {
stopDMove: () => void
/** 设置正在裁剪or编辑的组件 */
setCropUuid: (uuid: string) => void
+ setSpaceDown: (uuid: boolean) => void // 设置是否按下空格键
}
/** 全局控制配置 */
@@ -56,6 +59,7 @@ const ControlStore = defineStore<"controlStore", TControlState, {}, TControlAct
showRotatable: true, // 是否显示moveable的旋转按钮
dAltDown: false, // 记录是否按下alt键 / 或ctrl
dCropUuid: '-1', // 正在编辑or裁剪的组件id
+ dSpaceDown: false, // 记录是否按下空格键
}),
getters: {},
actions: {
@@ -108,6 +112,9 @@ const ControlStore = defineStore<"controlStore", TControlState, {}, TControlAct
// 设置正在裁剪or编辑的组件
this.dCropUuid = uuid
},
+ setSpaceDown(val: boolean) {
+ this.dSpaceDown = val
+ }
}
})
diff --git a/src/store/design/widget/actions/widget.ts b/src/store/design/widget/actions/widget.ts
index f13ae46..4e55c1a 100644
--- a/src/store/design/widget/actions/widget.ts
+++ b/src/store/design/widget/actions/widget.ts
@@ -235,3 +235,22 @@ export function setWidgetStyle(state: TWidgetStore, { uuid, key, value, pushHist
export function setDWidgets(state: TWidgetStore, e: TdWidgetData[]) {
state.dWidgets = e
}
+
+// 锁定所有图层 / 再次调用时还原图层
+let lastLocks: boolean[] | null = null
+export function lockWidgets(state: TWidgetStore) {
+ if (lastLocks && lastLocks.length > 0) {
+ for (let i = 0; i < lastLocks.length; i++) {
+ state.dWidgets[i].lock = lastLocks[i]
+ }
+ lastLocks = []
+ } else {
+ lastLocks = []
+ for (const widget of state.dWidgets) {
+ lastLocks.push(widget?.lock || false)
+ }
+ state.dWidgets.forEach((widget: any) => {
+ widget.lock = true
+ })
+ }
+}
\ No newline at end of file
diff --git a/src/store/design/widget/index.ts b/src/store/design/widget/index.ts
index b66acbb..c682d11 100644
--- a/src/store/design/widget/index.ts
+++ b/src/store/design/widget/index.ts
@@ -10,7 +10,7 @@ import { Store, defineStore } from "pinia";
import { TInidDMovePayload, TMovePayload, dMove, initDMove, setDropOver, setMouseEvent, setdActiveElement, updateGroupSize, updateHoverUuid } from "./actions";
import { TPageState } from "../page";
import { TInitResize, TResize, TdResizePayload, dResize, initDResize, resize } from "./actions/resize";
-import { TUpdateWidgetMultiplePayload, TUpdateWidgetPayload, TsetWidgetStyleData, addWidget, deleteWidget, setDWidgets, setWidgetStyle, updateWidgetData, updateWidgetMultiple } from "./actions/widget";
+import { TUpdateWidgetMultiplePayload, TUpdateWidgetPayload, TsetWidgetStyleData, addWidget, deleteWidget, setDWidgets, setWidgetStyle, updateWidgetData, updateWidgetMultiple, lockWidgets } from "./actions/widget";
import { addGroup } from "./actions/group";
import { setTemplate } from "./actions/template";
import { copyWidget, pasteWidget } from "./actions/clone";
@@ -116,6 +116,7 @@ type TAction = {
resize: (data: TResize) => void
setWidgetStyle: (data: TsetWidgetStyleData) => void
setDWidgets: (data: TdWidgetData[]) => void
+ lockWidgets: () => void
setMouseEvent: (e: MouseEvent | null) => void
setdActiveElement: (data: TdWidgetData) => void
}
@@ -176,6 +177,7 @@ const WidgetStore = defineStore<"widgetStore", TWidgetState, TGetter, TAction>("
resize(data) { resize(this, data) },
setWidgetStyle(data) { setWidgetStyle(this, data) },
setDWidgets(data) { setDWidgets(this, data) },
+ lockWidgets() { lockWidgets(this) },
setMouseEvent(event) { setMouseEvent(this, event) },
setdActiveElement(data) { setdActiveElement(this, data) },
}