<template>    <div class="container" :style="containerStyle" @mousedown="mousedown($event)">        <div class="box-module" v-show="isDown">            <div class="box-line box-left" :style="leftStyle" :data-value="leftWidth"></div>            <div class="box-line box-right" :style="rightStyle" :data-value="rightWidth"></div>            <div class="box-line box-top" :style="topStyle" :data-value="topWidth"></div>            <div class="box-line box-bottom" :style="bottomStyle" :data-value="bottomWidth"></div>        </div>        <div class="box-slot">            <slot></slot>        </div>    </div></template><script>export default {    name: "Container",    props: {        left: {            type: Number,            default: 300        },        top: {            type: Number,            default: 50        },    },    data () {        return {            isDown: false,            pos: {                sx: 0,                sy: 0,                left: 0,                top: 0,                width: 0,                height: 0,            },            box: {                width: 0,                height: 0            }        }    },    computed: {        containerStyle () {            return {                left: this.pos.left + 'px',                top: this.pos.top + 'px',            }        },        leftWidth () {            return this.pos.left + 'px'        },        rightWidth () {            return (this.box.width - this.pos.left - this.pos.width) + 'px'        },        topWidth () {            return this.pos.top + 'px'        },        bottomWidth () {            return (this.box.height - this.pos.top - this.pos.height) + 'px'        },        leftStyle () {            return {                left: (-this.pos.left) + 'px',                top: (this.pos.height / 2) + 'px',                width: this.leftWidth,            }        },        rightStyle () {            return {                left: this.pos.width + 'px',                top: (this.pos.height / 2) + 'px',                width: this.rightWidth,            }        },        topStyle () {            return {                top: (-this.pos.top) + 'px',                left: (this.pos.width / 2) + 'px',                height: this.topWidth,            }        },        bottomStyle () {            return {                top: this.pos.height + 'px',                left: (this.pos.width / 2) + 'px',                height: this.bottomWidth,            }        },    },    created () {        this.pos.left = this.left        this.pos.top = this.top        this.box.width = 3840        this.box.height = 1080    },    mounted () {        this.children = this.$children[0]        const rect = this.children.$el.getBoundingClientRect()        this.pos.width = rect.width        this.pos.height = rect.height    },    methods: {        mouseup () {            this.isDown = false            document.removeEventListener('mouseup', this.mouseup)            document.removeEventListener('mousemove', this.mousemove)        },        mousedown (event) {            this.isDown = true            this.rect = this.children.$el.getBoundingClientRect()            this.pos.sx = event.pageX            this.pos.sy = event.pageY            document.addEventListener('mouseup', this.mouseup, false)            document.addEventListener('mousemove', this.mousemove, false)        },        mousemove (event) {            if (this.isDown) {                const dx = event.pageX - this.pos.sx                const dy = event.pageY - this.pos.sy                this.pos.left = this.rect.left + dx                this.pos.top = this.rect.top + dy            }        },    },    beforeDestroy () {    }}</script><style scoped lang="scss">.container{    position: absolute;    &:hover {        z-index: 999;    }    .box-slot {        position: relative;        z-index: 1;    }    .box-module {        position: relative;        z-index: 0;    }    .box-line {        position: absolute;        background: red;        &.box-left {            height: 1px;        }        &.box-right {            height: 1px;        }        &.box-top {            width: 1px;        }        &.box-bottom {            width: 1px;        }        &::after {            position: absolute;            color: red;            font-size: 16px;            content: attr(data-value);            left: 50%;            top: 50%;            transform: translate(-50%, -50%);        }    }}</style>