From 7530519aecf3d1b5e663cf89cb80c3b772b5d703 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期三, 20 十一月 2024 17:46:26 +0800 Subject: [PATCH] 1.画板布局 --- package-lock.json | 35 ++ src/main.js | 4 yarn.lock | 12 package.json | 1 src/views/screen1/itm-map-plant-board.vue | 716 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/screen1/main-container.vue | 23 + 6 files changed, 785 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6795c9f..71ad36c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "sass-loader": "^13.3.2", "scss": "^0.2.4", "vue": "^2.6.14", + "vue-draggable-resizable-gorkys": "^2.4.8", "vue-router": "3", "vuex": "3.1.0", "yarn": "^1.22.22" @@ -11732,6 +11733,25 @@ "csstype": "^3.1.0" } }, + "node_modules/vue-draggable-resizable-gorkys": { + "version": "2.4.8", + "resolved": "https://registry.npmmirror.com/vue-draggable-resizable-gorkys/-/vue-draggable-resizable-gorkys-2.4.8.tgz", + "integrity": "sha512-DjhelFtRN1cy/AVpYbxlhmTTC5KwLvU490nUZzKp05kMddhzu5TBrBEeYo/9rhmdsrSkxjQguyRvF6IYumw9yw==", + "dependencies": { + "core-js": "^2.6.11" + }, + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/vue-draggable-resizable-gorkys/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, "node_modules/vue-eslint-parser": { "version": "8.3.0", "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", @@ -20777,6 +20797,21 @@ "csstype": "^3.1.0" } }, + "vue-draggable-resizable-gorkys": { + "version": "2.4.8", + "resolved": "https://registry.npmmirror.com/vue-draggable-resizable-gorkys/-/vue-draggable-resizable-gorkys-2.4.8.tgz", + "integrity": "sha512-DjhelFtRN1cy/AVpYbxlhmTTC5KwLvU490nUZzKp05kMddhzu5TBrBEeYo/9rhmdsrSkxjQguyRvF6IYumw9yw==", + "requires": { + "core-js": "^2.6.11" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + } + } + }, "vue-eslint-parser": { "version": "8.3.0", "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", diff --git a/package.json b/package.json index 66d382f..9d4eb27 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "sass-loader": "^13.3.2", "scss": "^0.2.4", "vue": "^2.6.14", + "vue-draggable-resizable-gorkys": "^2.4.8", "vue-router": "3", "vuex": "3.1.0", "yarn": "^1.22.22" diff --git a/src/main.js b/src/main.js index 9eee526..3703e0f 100644 --- a/src/main.js +++ b/src/main.js @@ -26,6 +26,10 @@ // import self_base from './utils/self_base.js' // Vue.use(self_base); +import vdr from 'vue-draggable-resizable-gorkys' +// 导入默认样式 +import 'vue-draggable-resizable-gorkys/dist/VueDraggableResizable.css' +Vue.component('vdr', vdr) new Vue({ render: h => h(App), diff --git a/src/views/screen1/itm-map-plant-board.vue b/src/views/screen1/itm-map-plant-board.vue new file mode 100644 index 0000000..702b3a5 --- /dev/null +++ b/src/views/screen1/itm-map-plant-board.vue @@ -0,0 +1,716 @@ +<template> + <div style="position: relative;" class="itm-map-vr" @contextmenu="showMenu($event)" + :style="{ + background: plantBoardFlag ? 'linear-gradient(-90deg, rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px, linear-gradient(rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px' : '' + }" + > + <!-- v-for="(item, index) in itmmapdatas" --> + <!-- backgroundSize: 'cover', --> + <vdr :grid=[20,20] :min-width="minWidth" :min-height="minHeight" :resizable="plantBoardFlag" + :draggable="plantBoardFlag" v-for="(item, index) in items" :w="item.w" :h="item.h" :x="item.x" :y="item.y" + @dragging="onDrag" z-index="0" @resizing="onResize" :parent="true" @dragstop="onDragStop(item)" + @resizestop="onResizeStop(item)" @activated="onActivated(item)" @deactivated="onDeactivated(item)" + + :scale-ratio="0.7" + + :style="{ + backgroundImage: `url(${imgSrc})`, + backgroundSize: 'cover', + backgroundPosition: 'center', + backgroundRepeat: 'no-repeat', + }" + + class="itm-map-item" + :class="[ + item?.s ? '' : 'd', + item?.n == 'r' ? 'error r' : '', + item?.n == 'y' ? 'error y' : '', + item?.areacode ? 'areacode' : '', + ]" :key="index"> + <div style="width:100%;height:100%;" @click="toAreaDetail(item)" @contextmenu="showElementMenu($event,item)" @mouseenter="onMouseEnter(item,$event)" @mouseleave="onMouseLeave" > + <div v-if="item.t" class="t" v-html="item.t" :class="[item.t_c_1, item.stand, item.t_c, item.tl]"></div> + <div v-if="item.s" :class="[ + item.s ? 'itm-svg-' + item.s : '', + item.n == 'r' ? 'r' : '', + item.n == 'y' ? 'y' : '', + ]" :style="{ + width: item.w && item.w != '0' ? item.w + 'rem' : '', + height: item.h && item.h != '0' ? item.h + 'rem' : '', + }"></div> + <div v-if="false">{{ index }}</div> + <!-- --> + + </div> + </vdr> + + + <div v-if="areaVisible" :style="{ top: `${areaPosition.y}px`, left: `${areaPosition.x}px` }" class="area-context-menu"> + <div > + <div class="title flex"> + <div class="dot"></div> + <div>{{ getMsg(hoveredItem.t) }}</div> + </div> + <div class="title flex"> + <div class="dot"></div> + <div>所属区域:{{ hoveredItem.areacode }}区</div> + </div> + </div> + <div v-if="hoveredItem.n == 'r'" > + <div class="title flex"> + <div class="dot"></div> + <div>{{ getMsg(hoveredItem.t) }}</div> + </div> + <div class="desc">预警情况:红色预警</div> + <div class="desc">详细信息:一小时后磁盘满</div> + </div> + <div v-if="hoveredItem.n == 'y'" > + <div class="title flex"> + <div class="dot"></div> + <div>{{ getMsg(hoveredItem.t) }}</div> + </div> + <div class="desc">预警情况:黄色预警</div> + <div class="desc">详细信息:一小时后磁盘满</div> + </div> + </div> + + <ul v-if="menuVisible" :style="{ top: `${menuPosition.y}px`, left: `${menuPosition.x}px` }" class="context-menu" + @click="menuVisible = false"> + <li @click="handlePlantBoard()" v-show="!plantBoardFlag">布局</li> + <li @click="handlePlantBoardEnd()" v-show="plantBoardFlag">布局结束</li> + <li @click="handleAdd()">新增</li> + </ul> + + <!-- 子组件右键菜单 --> + <ul v-if="isElementMenuVisible" :style="{ top: `${elementMenuPosition.y}px`, left: `${elementMenuPosition.x}px` }" + class="context-menu"> + <li @click="handleUpdate()">编辑</li> + <li @click="handleDel()">删除</li> + </ul> + + </div> +</template> + +<script> +import A27 from '@/assets/screen/screen5/svgs3d/A27.svg' +import { itmmapdata } from "./itm-map.js"; + + +export default { + props: { + no: { + type: Number, + default() { + return 0; + }, + }, + }, + data() { + return { + // itmmapdatas: itmmapdata, + width: 0, + height: 0, + x: 0, + y: 0, + imgSrc: A27, + vLine: [], + hLine: [], + + items:[ + { + x:300, + y:300, + w:200, + h:200, + t:'', + s:'', + n:'', + areacode:'', + t_c:'', + t_c_1:'', + tl:'', + stand:'', + imgSrc:A27, + }, + { + x:0, + y:0, + w:200, + h:200, + t:'测试一区', + s:'', + n:'', + areacode:'01', + t_c:'', + t_c_1:'', + tl:'', + stand:'', + imgSrc:A27, + }, + { + x:0, + y:0, + w:200, + h:200, + t:'测试一区', + s:'', + n:'', + areacode:'01', + t_c:'', + t_c_1:'', + tl:'', + stand:'', + imgSrc:A27, + }, + { + x:120, + y:120, + w:200, + h:200, + t:'测试二区', + s:'', + n:'', + areacode:'02', + t_c:'', + t_c_1:'', + tl:'', + stand:'', + imgSrc:A27, + }, + ], + + isElementMenuVisible: false, // 控制菜单显示 + elementMenuPosition: { x: 0, y: 0 }, // 菜单位置 + + menuVisible:false, + menuPosition: { x: 0, y: 0 }, + + minWidth:20, // 设置元素最小的宽 + minHeight:20, // 设置元素最小的高 + + plantBoardFlag:false, // 是否画布局 + + hoveredItem:{}, + + areaVisible:false, + areaPosition: { x: 0, y: 0 }, + + }; + }, + + mounted() { + document.addEventListener("click", this.hideMenu); + }, + beforeUnmount() { + document.removeEventListener("click", this.hideMenu); + }, + + methods: { + // 判断当前悬停项 + onMouseEnter(item,event) { + this.hoveredItem = item; + this.areaVisible=true; + this.areaPosition = { x: item.x+item.w/2, y: item.y+item.h/2 }; + console.log(this.hoveredItem) + }, + // 清除悬停项 + onMouseLeave() { + this.hoveredItem = null; + this.areaVisible=false; + }, + + // 默认进来不可以修改 + handlePlantBoard(){ + this.plantBoardFlag=true + }, + handlePlantBoardEnd(){ + this.plantBoardFlag=false + }, + + onResize: function (x, y, width, height) { + console.log("onResize") + this.x = x + this.y = y + this.width = width + this.height = height + console.log(`x:${this.x},y:${this.y},w:${this.width},h:${this.height}`) + }, + onDrag: function (x, y) { + console.log("onDrag") + this.x = x + this.y = y + console.log(`x:${this.x},y:${this.y}`) + }, + onDragStop: function (itemParam) { + console.log("停止拖拽") + console.log(`x:${this.x},y:${this.y}`) + console.log(itemParam) + itemParam.x = this.x + itemParam.y = this.y + + // TODO 需要更新元素操作 + }, + + onResizeStop: function (itemParam) { + + console.log("停止resize") + console.log(`x:${this.x},y:${this.y},width:${this.width},height:${this.height}`) + console.log(itemParam) + // itemParam.x=this.x + // itemParam.y=this.y + itemParam.w = this.width + itemParam.h = this.height + + // TODO 需要更新元素操作 + + + }, + onActivated: function (itemParam) { + + console.log('元素被激活') + console.log(itemParam) + // 元素初始化 + this.x = itemParam.x; + this.y = itemParam.y; + this.width = itemParam.w + this.height = itemParam.h + + }, + + onDeactivated: function (itemParam) { + console.log('元素失活') + console.log(itemParam) + + }, + + + hideMenu() { + this.menuVisible = false; + }, + showMenu(event) { + event.preventDefault(); + this.menuPosition = { x: event.clientX, y: event.clientY }; + this.menuVisible = true; + this.hideElementMenu() + }, + + + // 显示组件右键菜单 + showElementMenu(event, item) { + event.preventDefault(); // 禁用默认右键菜单 + event.stopPropagation(); // 阻止冒泡 + this.elementMenuPosition = { x: item.x + item.w, y: item.y }; + this.isElementMenuVisible = true; + + // 点击其他地方时隐藏菜单 + document.addEventListener("click", this.hideElementMenu); + this.hideMenu() + }, + // 隐藏右键菜单 + hideElementMenu() { + this.isElementMenuVisible = false; + document.removeEventListener("click", this.hideElementMenu); + }, + + // 更新操作 + handleUpdate() { + // TODO + alert(`You selected:handleUpdate`); + this.hideElementMenu(); + }, + // 删除操作 + handleDel() { + // TODO + alert(`You selected:handleDel`); + this.hideElementMenu(); + }, + // 新增操作 + handleAdd() { + // TODO + alert(`You selected:handleAdd`); + // this.hideElementMenu(); + this.hideMenu(); + }, + + + evalA(string) { + return eval(string); + }, + getMsg(t) { + if (t) { + return t + .replace(" ", " ") + .replace(" ", " ") + .replace(" ", " ") + .replace("<br/>", " ") + .replace("<br/>", " "); + } + return ""; + + }, + toAreaDetail(itemParam) { + if (itemParam?.areacode) { + this.$router.push({ + path: "/area", + query: { code: itemParam?.areacode }, + }); + } + }, + }, +}; +</script> + +<style lang="scss" scoped> +$width-screen1: 174.17rem; +$width-screen1: 214.17rem; + +@import "../../common/itm_svg3d.scss"; + +.itm-map-vr { + position: relative; + width: 100%; + height: 100%; + width: calc($width-screen1 - 11rem); + height: 88.3rem; + margin: 0 auto; + /* margin-left: calc(-9.1rem * 0.9 - 11rem*0.9 - 1rem); */ + margin-left: 50%; + transform: translate(-50%, 0%); + zoom: 0.8; + display: inline-block; + cursor: pointer; + margin-top: 10rem; + // background: linear-gradient(-90deg, rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px, linear-gradient(rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px; + + +} + +.itm-map-item { + position: absolute; + min-width: 20px; + min-height: 20px; + + .itm-svg-A41 { + background-size: 100% 100%; + } + + .t { + position: absolute; + left: 50%; //起始是在body中,横向距左50%的位置 + top: 50%; //起始是在body中,纵向距上50%的位置,这个点相当于body的中心点,div的左上角的定位 + transform: translate(-50%, -50%); //水平、垂直都居中,也可以写成下面的方式 + font-size: 1.2rem; + font-family: PingFangSC-Semibold, PingFang SC; + font-weight: 600; + color: #ffffff; + color: rgba(1, 43, 94, 1); + line-height: 1.4rem; + } + + .t.w { + color: #ffffff; + } + + .t.l { + /* left: unset; */ + /* right: 2rem; */ + left: 30%; + transform: translate(-50%, 0%); + } + + .t.t_c_1 { + font-size: 2.33rem; + /* font-weight: 400; */ + } + + .t.stand { + writing-mode: vertical-rl; + text-orientation: mixed; + } + + .t.t_c_2 { + font-size: 2.33rem; + font-family: PingFangSC-Semibold, PingFang SC; + font-weight: 600; + color: #8ba7c7; + } + + .tip-msg { + display: none; + position: absolute; + left: calc(50% + 5rem); //起始是在body中,横向距左50%的位置 + top: 55%; //起始是在body中,纵向距上50%的位置,这个点相当于body的中心点,div的左上角的定位 + min-width: 21rem; + height: 9.6rem; + background: #f1f9ff; + box-shadow: 0.6rem 0.4rem 2.4rem 0rem rgba(56, 92, 131, 0.77); + border-radius: 0.6rem; + z-index: 2000; + padding: 1.3rem; + + .title { + font-size: 2.5rem; + font-family: PingFangSC-Semibold, PingFang SC; + font-weight: 600; + color: #012b5e; + line-height: 3.6rem; + text-align: left; + margin-bottom: 1rem; + text-overflow: ellipsis; + /* width: 10rem; */ + overflow: hidden; + word-break: break-all; + white-space: nowrap; + + .dot { + width: 1.6rem; + height: 1.6rem; + min-width: 1.6rem; + min-height: 1.6rem; + /* background: #e20505; */ + border-radius: 50%; + margin-top: 1rem; + margin-right: 0.5rem; + } + } + + .desc { + font-size: 1.4rem; + font-family: PingFangSC-Regular, PingFang SC; + font-weight: 400; + color: #666666; + line-height: 2rem; + text-align: left; + margin-left: 2.1rem; + margin-top: 0.5rem; + } + } +} + +.itm-map-item.d { + /* background-color: rgba(209, 227, 247, 1); */ +} + +.itm-map-item.error { + cursor: pointer; + + .tip-msg { + /* display: unset; */ + } +} + +.itm-map-item.error.r::before { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + + content: ""; + background-color: #e2050593; +} + +.itm-map-item.error.y::before { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + + content: ""; + background: rgba(236, 193, 93, 0.6); +} + +.itm-map-item.error.r .tip-msg .title .dot { + background: #e20505; +} + +.itm-map-item.error.y .tip-msg .title .dot { + background: rgba(236, 193, 93, 1); +} + +.itm-map-item.error:hover { + .tip-msg { + display: unset; + } +} + +.itm-map-item:hover { + .tip-msg { + display: unset; + } +} + +.itm-map-item.areacode:hover::before { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + + content: ""; + background-color: #059ce293; + +} + + +// .tip-msg { +// display: none; +// position: absolute; +// left: calc(50% + 5rem); //起始是在body中,横向距左50%的位置 +// top: 55%; //起始是在body中,纵向距上50%的位置,这个点相当于body的中心点,div的左上角的定位 +// min-width: 21rem; +// height: 9.6rem; +// background: #f1f9ff; +// box-shadow: 0.6rem 0.4rem 2.4rem 0rem rgba(56, 92, 131, 0.77); +// border-radius: 0.6rem; +// z-index: 2000; +// padding: 1.3rem; + +// .title { +// font-size: 2.5rem; +// font-family: PingFangSC-Semibold, PingFang SC; +// font-weight: 600; +// color: #012b5e; +// line-height: 3.6rem; +// text-align: left; +// margin-bottom: 1rem; +// text-overflow: ellipsis; +// /* width: 10rem; */ +// overflow: hidden; +// word-break: break-all; +// white-space: nowrap; + +// .dot { +// width: 1.6rem; +// height: 1.6rem; +// min-width: 1.6rem; +// min-height: 1.6rem; +// /* background: #e20505; */ +// border-radius: 50%; +// margin-top: 1rem; +// margin-right: 0.5rem; +// } +// } + +// .desc { +// font-size: 1.4rem; +// font-family: PingFangSC-Regular, PingFang SC; +// font-weight: 400; +// color: #666666; +// line-height: 2rem; +// text-align: left; +// margin-left: 2.1rem; +// margin-top: 0.5rem; +// } +// } +</style> + +<style> +.vdr { + touch-action: none; + border: none !important; +} +</style> + +<style scoped> +.container { + position: relative; + width: 100%; + height: 100vh; + background-color: #f0f0f0; +} + +.context-menu { + position: absolute; + /* background-color: #F1F9FF; */ + /* border: 1px solid #ccc; */ + /* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); */ + list-style: none; + padding: 5px 0; + margin: 0; + z-index: 999; + min-width: 18rem; + height: 15.5rem; + background: #f1f9ff; + box-shadow: 0.6rem 0.4rem 2.4rem 0rem rgba(56, 92, 131, 0.77); + border-radius: 0.6rem; +} + +.context-menu li { + padding: 8px 16px; + cursor: pointer; + font-size: 2.5rem; + font-family: PingFangSC-Semibold, PingFang SC; + font-weight: 400; + color: #012b5e; + line-height: 3.6rem; + text-align: left; + text-overflow: ellipsis; + /* width: 10rem; */ + overflow: hidden; + word-break: break-all; + white-space: nowrap; +} + +.context-menu li:hover { + background-color: #eee; +} + + +</style> +<style scoped> +.area-context-menu { + + position: absolute; + list-style: none; + padding: 5px 0; + margin: 0; + z-index: 999; + min-width: 21rem; + height: 9.6rem; + background: #f1f9ff; + box-shadow: 0.6rem 0.4rem 2.4rem 0rem rgba(56, 92, 131, 0.77); + border-radius: 0.6rem; + padding: 1.3rem; + + .title { + font-size: 2.5rem; + font-family: PingFangSC-Semibold, PingFang SC; + font-weight: 600; + color: #012b5e; + line-height: 3.6rem; + text-align: left; + margin-bottom: 1rem; + text-overflow: ellipsis; + /* width: 10rem; */ + overflow: hidden; + word-break: break-all; + white-space: nowrap; + + .dot { + width: 1.6rem; + height: 1.6rem; + min-width: 1.6rem; + min-height: 1.6rem; + /* background: #e20505; */ + border-radius: 50%; + margin-top: 1rem; + margin-right: 0.5rem; + } + } + + .desc { + font-size: 1.4rem; + font-family: PingFangSC-Regular, PingFang SC; + font-weight: 400; + color: #666666; + line-height: 2rem; + text-align: left; + margin-left: 2.1rem; + margin-top: 0.5rem; + } + +} + + +</style> \ No newline at end of file diff --git a/src/views/screen1/main-container.vue b/src/views/screen1/main-container.vue index 5bc7659..ea603e3 100644 --- a/src/views/screen1/main-container.vue +++ b/src/views/screen1/main-container.vue @@ -1,16 +1,20 @@ <template> <div class="main-container" :style="{ zoom: zoom_main }" id="screencontent"> <div class="screen1-place" v-if="false"></div> - <div class="itm-map" @click="toArea01"> + + <itm-map-plant-board @click="toArea01"></itm-map-plant-board> + + + + <!-- <div class="itm-map" @click="toArea01"> <itm-map-item v-for="(item, index) in itmmapdatas" :item="item" :key="index" :no="index" ></itm-map-item> - - <!-- v-if="item_show" --> - </div> + + </div> --> <div class="chart-itm"> <itm v-if="areas && !chartclose1" @@ -52,8 +56,10 @@ import itmMapItem from "./itm-map-item.vue"; import {getAreaTjData, getSwitchStatusStatic, getSwitchInfoStatic} from "@/api/area"; +import itmMapPlantBoard from "./itm-map-plant-board.vue"; + export default { - components: {itmMapItem, itm, itmLeft}, + components: {itmMapItem, itm, itmLeft,itmMapPlantBoard}, props: { item_show: true, item1_show: false, @@ -79,9 +85,14 @@ this.zoom_main = parseFloat(zoom); } this.getList(); + + console.log("itmmapdatas") + console.log(this.itmmapdatas) + }, methods: { + getList() { getAreaTjData().then((res) => { // console.log('areas',res.switchAreaInfo || []) @@ -160,7 +171,7 @@ height: 88.3rem; background-image: url("../../assets/screen/screen1/screen-place.png"); } - + .itm-map { position: relative; width: 100%; diff --git a/yarn.lock b/yarn.lock index c57970a..6702742 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2551,6 +2551,11 @@ "resolved" "http://218.4.170.235:54873/core-js/-/core-js-2.6.12.tgz" "version" "2.6.12" +"core-js@^2.6.11": + "integrity" "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + "resolved" "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz" + "version" "2.6.12" + "core-js@^3.8.3": "integrity" "sha512-HoZr92+ZjFEKar5HS6MC776gYslNOKHt75mEBKWKnPeFDpZ6nH5OeF3S6HFT1mUAUZKrzkez05VboaX8myjSuw==" "resolved" "https://registry.npmmirror.com/core-js/-/core-js-3.33.0.tgz" @@ -6131,6 +6136,13 @@ "resolved" "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" "version" "1.1.2" +"vue-draggable-resizable-gorkys@^2.4.8": + "integrity" "sha512-DjhelFtRN1cy/AVpYbxlhmTTC5KwLvU490nUZzKp05kMddhzu5TBrBEeYo/9rhmdsrSkxjQguyRvF6IYumw9yw==" + "resolved" "https://registry.npmmirror.com/vue-draggable-resizable-gorkys/-/vue-draggable-resizable-gorkys-2.4.8.tgz" + "version" "2.4.8" + dependencies: + "core-js" "^2.6.11" + "vue-eslint-parser@^8.0.1": "integrity" "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==" "resolved" "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz" -- Gitblit v1.9.3