no message
This commit is contained in:
parent
f80b9cdca5
commit
f7820a23be
@ -9,14 +9,17 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
<ResizeLine v-if="resize" class="overlay-resize" v-model="width" :max-width="0"/>
|
||||||
<div class="overlay-content"><slot/></div>
|
<div class="overlay-content"><slot/></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import ResizeLine from "./ResizeLine";
|
||||||
export default {
|
export default {
|
||||||
name: 'DrawerOverlay',
|
name: 'DrawerOverlay',
|
||||||
|
components: {ResizeLine},
|
||||||
props: {
|
props: {
|
||||||
value: {
|
value: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -40,11 +43,15 @@
|
|||||||
type: [Number, String],
|
type: [Number, String],
|
||||||
default: "100%"
|
default: "100%"
|
||||||
},
|
},
|
||||||
|
resize: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
width: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -58,7 +65,7 @@
|
|||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
bodyStyle() {
|
bodyStyle() {
|
||||||
let size = parseInt(this.size);
|
let size = this.width;
|
||||||
size = size <= 100 ? `${size}%` : `${size}px`
|
size = size <= 100 ? `${size}%` : `${size}px`
|
||||||
if (this.placement == 'right') {
|
if (this.placement == 'right') {
|
||||||
return {
|
return {
|
||||||
@ -88,6 +95,12 @@
|
|||||||
this.$store.state.cacheDrawerOverlay.splice(index, 1);
|
this.$store.state.cacheDrawerOverlay.splice(index, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
handler(val) {
|
||||||
|
this.width = parseInt(val);
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
109
resources/assets/js/components/ResizeLine.vue
Normal file
109
resources/assets/js/components/ResizeLine.vue
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<template>
|
||||||
|
<div class="component-resize-line" :class="{resizing}" @mousedown.left.stop.prevent="resizeDown"></div>
|
||||||
|
</template>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.component-resize-line {
|
||||||
|
cursor: col-resize;
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
&.resizing {
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 99999;
|
||||||
|
cursor: col-resize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'ResizeLine',
|
||||||
|
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
},
|
||||||
|
minWidth: {
|
||||||
|
type: Number,
|
||||||
|
default: 100,
|
||||||
|
},
|
||||||
|
maxWidth: {
|
||||||
|
type: Number,
|
||||||
|
default: 600,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
resizing: false,
|
||||||
|
|
||||||
|
mouseX: 0,
|
||||||
|
mouseY: 0,
|
||||||
|
|
||||||
|
offset: {},
|
||||||
|
|
||||||
|
tmpWidth: undefined,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
document.documentElement.addEventListener('mousemove', this.handleMove, true);
|
||||||
|
document.documentElement.addEventListener('mouseup', this.handleUp, true);
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
resizeDown(e) {
|
||||||
|
this.mouseX = e.pageX || e.clientX + document.documentElement.scrollLeft;
|
||||||
|
this.mouseY = e.pageY || e.clientY + document.documentElement.scrollTop;
|
||||||
|
this.offset = {
|
||||||
|
left: e.target.offsetLeft,
|
||||||
|
top: e.target.offsetTop,
|
||||||
|
};
|
||||||
|
this.resizing = true;
|
||||||
|
if (typeof this.value === 'number') {
|
||||||
|
this.tmpWidth = this.value;
|
||||||
|
}
|
||||||
|
this.$emit('on-change', {
|
||||||
|
event: 'down',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleMove(e) {
|
||||||
|
if (!this.resizing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let diffX = (e.pageX || e.clientX + document.documentElement.scrollLeft) - this.mouseX;
|
||||||
|
let diffY = (e.pageY || e.clientY + document.documentElement.scrollTop) - this.mouseY;
|
||||||
|
if (typeof this.tmpWidth === 'number') {
|
||||||
|
let value = this.tmpWidth + diffX;
|
||||||
|
if (this.minWidth > 0) {
|
||||||
|
value = Math.max(this.minWidth, value);
|
||||||
|
}
|
||||||
|
if (this.maxWidth > 0) {
|
||||||
|
value = Math.min(this.maxWidth, value);
|
||||||
|
}
|
||||||
|
this.$emit("input", value);
|
||||||
|
}
|
||||||
|
this.$emit('on-change', {
|
||||||
|
event: 'move',
|
||||||
|
diff: {
|
||||||
|
x: diffX,
|
||||||
|
y: diffY,
|
||||||
|
},
|
||||||
|
offset: this.offset,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleUp() {
|
||||||
|
this.resizing = false;
|
||||||
|
this.tmpWidth = undefined;
|
||||||
|
this.$emit('on-change', {
|
||||||
|
event: 'up',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
@ -54,6 +54,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.overlay-resize {
|
||||||
|
width: 100%;
|
||||||
|
height: 5px;
|
||||||
|
margin-bottom: -5px;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.overlay-content {
|
.overlay-content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -100,6 +107,12 @@
|
|||||||
.overlay-close {
|
.overlay-close {
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
|
.overlay-resize {
|
||||||
|
width: 5px;
|
||||||
|
height: 100%;
|
||||||
|
margin-right: -5px;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
.overlay-content {
|
.overlay-content {
|
||||||
transform: translate(15%, 0) scale(0.98);
|
transform: translate(15%, 0) scale(0.98);
|
||||||
border-radius: 18px 0 0 18px;
|
border-radius: 18px 0 0 18px;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user