Vue-SplitPane可拖拽分隔面板(随意拖动div)

npm install vue-splitpane

一、使用

(1)局部使用:

在vue文件中

import splitPane from 'vue-splitpane'
export default {componnets: { splitPane }
}

(2)全局使用:

在main.js文件注册

import splitPane from 'vue-splitpane'
// 注册为全局组件
Vue.component('split-pane', splitPane);

二、使用局部在vue文件中使用例子

先分割成左右(注意只能两个两个分割,自由选择竖直还是水平分割)

重点是:

 <split-panesplit="vertical"@resize="resizeSplit":default-percent="defaultPercent1"><template slot="paneL"></template><template slot="paneR"></template>
</split-pane>

html:代码

data代码:

defaultPercent1:sessionStorage.getItem("defaultPercent1") == null? 50: parseFloat(sessionStorage.getItem("defaultPercent1")),defaultPercent2:sessionStorage.getItem("defaultPercent2") == null? 20: parseFloat(sessionStorage.getItem("defaultPercent2")),defaultPercent3:sessionStorage.getItem("defaultPercent3") == null? 20: parseFloat(sessionStorage.getItem("defaultPercent3")),defaultPercent4:sessionStorage.getItem("defaultPercent4") == null? 25: parseFloat(sessionStorage.getItem("defaultPercent4")),

method代码:

所有代码

<!--
* @Author: GGbond
* @Description: 
* @Date: 2023-11-01 10:35:05
* @LastEditTime: 2023-11-06 19:50:21
-->
<template>
<div id="container"><split-panesplit="vertical"@resize="resizeSplit":default-percent="defaultPercent1"><template slot="paneL"><split-panesplit="horizontal":default-percent="defaultPercent2"@resize="resizeSplit2"><template slot="paneL"><div class="topLeft"><div class="title">空域</div><div class="contentTable"><el-table:data="maneuverTable"borderheight="100%":cell-style="customCellStyle"><el-table-columnprop="beginTime"align="center"label="日期"width="100"></el-table-column><el-table-column prop="content" align="center" label="内容"></el-table-column><el-table-columnprop="source"align="center"label="通报单位"width="100"></el-table-column></el-table></div></div></template><template slot="paneR"><div class="bottomLeft"><div class="title">军方活动</div><div class="contentTable"><el-table:data="militaryTable"borderheight="100%":cell-style="customCellStyle"><el-table-columnprop="beginTime"align="center"label="日期"width="100"></el-table-column><el-table-column prop="content" align="center" label="内容"></el-table-column><el-table-columnprop="source"align="center"label="通报单位"width="100"></el-table-column></el-table></div></div></template></split-pane></template><template slot="paneR"><split-panesplit="horizontal":default-percent="defaultPercent3"@resize="resizeSplit3"><template slot="paneL"><div class="topRight"><div class="title">设备</div><div class="contentTable multi-rmk-col"><el-table:data="deviceTable"borderheight="100%":cell-style="customCellStyle"><el-table-columnprop="beginTime"align="center"label="日期"width="100"></el-table-column><el-table-column prop="content" align="center" label="内容"></el-table-column><el-table-columnprop="source"align="center"label="通报单位"width="100"></el-table-column></el-table></div></div></template><template slot="paneR"><split-panesplit="horizontal":default-percent="defaultPercent4"@resize="resizeSplit4"><template slot="paneL"><div class="brTop"><div class="title">限制</div><div class="contentTable"><el-table:data="limitationTable"borderheight="100% ":cell-style="customCellStyle"><el-table-columnprop="beginTime"align="center"label="日期"width="100"></el-table-column><el-table-column prop="content" align="center" label="内容"></el-table-column><el-table-columnprop="source"align="center"label="通报单位"width="100"></el-table-column></el-table></div></div></template><template slot="paneR"><div class="brBottom"><div class="title">通航</div><div class="contentTable"><el-table:data="airTable"borderheight="100%":cell-style="customCellStyle"><el-table-columnprop="beginTime"align="center"label="日期"width="100"></el-table-column><el-table-column prop="content" align="center" label="内容"></el-table-column><el-table-columnprop="source"align="center"label="通报单位"width="100"></el-table-column></el-table></div></div></template></split-pane></template></split-pane></template></split-pane>
</div>
</template><script>
import splitPane from "vue-splitpane";
import axios from "axios";
import { getAtcRecord } from "@/api/operationInformation.js";
let getDataInt = null; //获取各业务数据定时返回的ID
export default {
components: { splitPane },
data() {return {items: "",airTable: [],limitationTable: [],deviceTable: [],militaryTable: [],maneuverTable: [],// div变动defaultPercent1:sessionStorage.getItem("defaultPercent1") == null? 50: parseFloat(sessionStorage.getItem("defaultPercent1")),defaultPercent2:sessionStorage.getItem("defaultPercent2") == null? 20: parseFloat(sessionStorage.getItem("defaultPercent2")),defaultPercent3:sessionStorage.getItem("defaultPercent3") == null? 20: parseFloat(sessionStorage.getItem("defaultPercent3")),defaultPercent4:sessionStorage.getItem("defaultPercent4") == null? 25: parseFloat(sessionStorage.getItem("defaultPercent4")),};
},
mounted() {//监听页面显隐状态window.addEventListener("message", (event) => {let topic = event.data.closeIframe;if (topic) {window.clearInterval(getDataInt);} else if (topic == false) {if (getDataInt) {window.clearInterval(getDataInt);}//开启轮询模式this.setIntervalMethod();}});//开启轮询模式this.setIntervalMethod();
},
methods: {//开启轮询模式setIntervalMethod() {this.onQuery();//定时每2秒获取一次各业务数据this.$nextTick(() => {getDataInt = setInterval(() => {this.onQuery();}, 2000);});},onQuery() {axios.get(window.operationInformationPath).then((res) => {this.items = res.data.data;if (Array.isArray(this.items)) {for (let x of this.items) {x.beginTime = this.parseTime(x.beginTime);}const filteredData = this.items.filter((item) => item.dept === "进近管制室");this.limitationTable = filteredData.filter((record) => record.type === "限制相邻");this.deviceTable = filteredData.filter((record) => record.type === "设备");this.militaryTable = filteredData.filter((record) => record.type === "军航活动");this.airTable = filteredData.filter((record) => record.type === "通用航空");this.maneuverTable = filteredData.filter((record) => record.type === "机动空域");}}).catch((error) => {console.log(error);});// getAtcRecord().then((res) => {//   console.log(res)// })},parseTime(originalDateString) {// 创建日期对象const date = new Date(originalDateString);// 获取日期、小时和分钟const month = (date.getMonth() + 1).toString().padStart(2, "0"); // 月份从0开始,需要加1const day = date.getDate().toString().padStart(2, "0");const hours = date.getHours().toString().padStart(2, "0");const minutes = date.getMinutes().toString().padStart(2, "0");// 格式化日期const formattedDate = `${month}-${day} ${hours}:${minutes}`;return formattedDate;},customCellStyle({ row, column }) {if (column.property === "source") {return {"text-align": "center", // 设置内容水平居中};} else {return {"text-align": "left", // 设置内容左对齐};}},// div随意变动resizeSplit(val) {this.defaultPercent1 = val;sessionStorage.setItem("defaultPercent1", this.defaultPercent1);},resizeSplit2(val) {this.defaultPercent2 = val;sessionStorage.setItem("defaultPercent2", this.defaultPercent2);},resizeSplit3(val) {this.defaultPercent3 = val;sessionStorage.setItem("defaultPercent3", this.defaultPercent3);},resizeSplit4(val) {this.defaultPercent4 = val;sessionStorage.setItem("defaultPercent4", this.defaultPercent4);},
},
};
</script><style scoped>
#container {
width: 100%;
height: 100%;
padding: 10px;
}.topLeft {
height: 100%;
width: calc(100% - 4px);
margin-right: 4px;
display: flex;
flex-direction: column;
padding: 10px;
background-color: #4a4a4a;
}
.topRight {
height: 100%;
display: flex;
flex-direction: column;
padding: 10px;
background-color: #4a4a4a;
}
.bottomLeft {
width: calc(100% - 4px);
margin-right: 4px;
height: calc(100% - 8px);
margin-top: 8px;
display: flex;
flex-direction: column;
padding: 10px;
background-color: #4a4a4a;
}.brTop {
height: calc(100% - 8px);
margin-top: 8px;
display: flex;
flex-direction: column;
padding: 10px;
background-color: #4a4a4a;
}
.brBottom {
height: calc(100% - 8px);
margin-top: 8px;
display: flex;
flex-direction: column;
padding: 10px;
background-color: #4a4a4a;
}
.title {
height: 26px;
color: #9fe1f9;
font-weight: 700;
font-size: 16px;
padding-left: 5px;
}
.contentTable {
flex: 1;
height: calc(100% - 26px);
overflow: auto;
}
.contentTable >>> .el-table__body-wrapper::-webkit-scrollbar {
width: 10px;
height: 8px;
}
/* 修改每行高度 */
/* .topRight >>> .el-table__row {
height: 100px !important;
} */
/* .splitter-pane-resizer {
background: transparent!important;
} */
.vue-splitter-container >>> .splitter-pane-resizer{
background: transparent!important;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182869.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

perl列表创建、追加、删除

简介 perl 列表追加元素 主要是通过push和unshift函数来实现。其中&#xff0c;push是追加到列表尾&#xff0c;unshift是追加到列表头。 perl列表删除元素 主要是通过pop和shift函数来实现。其中&#xff0c;pop是从列表尾删除一个元素&#xff0c; shift是从列表头删除一…

【教3妹学编程-算法题】最大单词长度乘积

3妹&#xff1a;哇&#xff0c;今天好冷啊&#xff0c; 不想上班。 2哥&#xff1a;今天气温比昨天低8度&#xff0c;3妹要空厚一点啊。 3妹 : 嗯&#xff0c; 赶紧把我的羽绒服找出来穿上&#xff01; 2哥&#xff1a;哈哈&#xff0c;那倒还不至于&#xff0c; 不过气温骤降&…

2000-2022年“宽带Z国“试点城市名单匹配数据

2000-2022年“宽带Z国“试点城市名单匹配数据 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;行政区划代码、年份、地区、所属省份、所属地域、试点城市、最早试点年份、DID 3、来源&#xff1a;来自工信部和国家发改委在2014年、2015年和2016年分别遴选的“宽带中国”…

11月起,33个省份纳入数电票开票试点范围内,发票无纸化已是大势所趋!

10月底&#xff0c;北京、贵州、山东&#xff08;不含青岛市&#xff09;、湖南、宁夏5个地区相继发布开展数电票试点工作的通知&#xff0c;至此&#xff0c;全国已有33个省份纳入数电票开票试点范围内。根据上述5地区发布的相关公告&#xff0c;11月1日将正式推行“数电票”开…

python之pyQt5实例:几何绘图界面

使用PyQt5设计一个界面&#xff0c;其中点击不同的按钮可以在画布上画出点、直线、圆和样条曲线 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,QHBoxLayout,QVBoxLayout,QWidget,QLabel from PyQt5.QtGui import QPainter, QPen, QColor from PyQt5.Q…

PyQt5中QLineEdit、QRadioButton、QComboBox这些小部件的change事件

最近在用PyQt5做项目&#xff0c;总结一下QLineEdit、QRadioButton、QComboBox这些部件用到的change事件绑定&#xff0c;即信号与插槽。 QLineEdit QLineEdit 对象是最常用的输入字段。 它提供了一个框&#xff0c;可以在其中输入一行文本。 要输入多行文本&#xff0c;需要…

链式前向星模板

建稠密图可以用邻接矩阵&#xff0c;但稀疏图再用邻接矩阵就很浪费空间了&#xff0c;有可能会爆空间复杂度。 可以用邻接表来实现邻接表建图&#xff0c;两种方法&#xff1a;1.链表 2.链式前向行 只讲第二种&#xff0c;比较常用简洁 链式前向星模板 #define IOS ios::syn…

基于单片机的胎压监测系统的设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、系统整体设计方案二、 系统设计4.1 主流程图 三 系统仿真5.1 系统仿真调试实物 四、 结论 概要 本文以STC89C52单片机为控制核心&#xff0c;通过气压传感器模块对汽车各轮胎的胎压进行实时数据的采集与处理&…

创建百科词条 烘托人物形象 提升形象力

百度百科作为中国最大的在线百科全书&#xff0c;小马识途营销顾问认为其具有巨大的商业价值。 首先&#xff0c;百度百科作为百度搜索引擎的一部分&#xff0c;吸引了数以亿计的用户访问&#xff0c;这为百度提供了大量的广告展示和点击收入的机会。 其次&#xff0c;百度百科…

20231106-前端学习加载和视频球特效

加载效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>加载效果</title><!-- 最新…

freertos多任务

以前我们都是一个任务&#xff0c;假设现在我们创建三个任务,项目工程在上一节网盘 #include "stm32f10x.h" // Device header #include "freertos.h" #include "task.h" #include "usart.h"TaskHandle_t myTaskHan…

Vue纯CSS实现掷色子

效果图&#xff1a; 实现代码 直接利用CSS3动画实现的效果&#xff0c;无js代码。 <template><div class"wrap"><input type"checkbox" id"roll"><label for"roll"><div class"content"><…

音视频报警可视对讲15.6寸管理机

音视频报警可视对讲15.6寸管理机 一、管理机技术指标&#xff1a; 1、15.6寸原装京东方工业液晶触摸屏&#xff0c;分辨率1920 (H) x 1080 (V)&#xff1b; 2、1000M/100M自适应双网口&#xff1b; 4、按键设置&#xff1a;报警/呼叫按键&#xff0c;通话/挂机按键&#xff…

Android Studio(列表视图ListView)

前言 前面在适配器章节&#xff0c;已经介绍了ListView的作用(干什么的)&#xff0c;这节将主要介绍如何去设计ListView页面视图。 思考 列表视图需要些什么&#xff1f; 1. 列表项容器&#xff08;装载各列表项的容器&#xff09;&#xff1a;<ListView/> 2. 列表项布局…

使用IDEA让文本对比不在变的困难

文章目录 前言操作1、IDEA与电脑磁盘任意文件的比较2、项目内部的文件比较3、剪切板比较4、IDEA本地历史比较5、IDEA版本历史对比 前言 在日常实际开发当中我们常常会对一些代码或内容进行比对查看是否有差异&#xff0c;这个时候不需要借用第三方比对插件&#xff0c;在IDEA中…

Android-JobService

JobService 这里写目录标题 JobService一、API详解1 onStartJob2 onStopJob 二、onStartJob | onStopJob 返回值case 1case 2case 3 ref: 深入理解JobScheduler与JobService的使用 - 掘金 (juejin.cn) (28条消息) JobService的使用介绍_TechMerger的博客-CSDN博客 (28条消息) J…

为什么有了MAC地址,还需要IP地址?

解释 搞懂这个问题&#xff0c;首先需要了解交换机的功能 交换机内部有一张MAC地址映射表&#xff0c;记录着MAC地址和端口的对应关系。 如果A要给B发送一个数据包&#xff0c;构造如下格式的数据结构&#xff1a; 到达交换机时&#xff0c;交换机内部通过自己维护的 MAC 地…

4 Tensorflow图像识别模型——数据预处理

上一篇&#xff1a;3 tensorflow构建模型详解-CSDN博客 本篇开始介绍识别猫狗图片的模型&#xff0c;内容较多&#xff0c;会分为多个章节介绍。模型构建还是和之前一样的流程&#xff1a; 数据集准备数据预处理创建模型设置损失函数和优化器训练模型 本篇先介绍数据集准备&am…

每日一题 318. 最大单词长度乘积(中等)

暴力求解没超时&#xff0c;那就这样吧 class Solution:def maxProduct(self, words: List[str]) -> int:ans 0for i in range(len(words)):for j in range(i 1, len(words)):if len(words[i]) * len(words[j]) < ans:continuet 0for k in range(26):ch chr(k ord(…

使用蒙特卡罗模拟的投资组合优化

在金融市场中&#xff0c;优化投资组合对于实现风险与回报之间的预期平衡至关重要。蒙特卡罗模拟提供了一个强大的工具来评估不同的资产配置策略及其在不确定市场条件下的潜在结果。 我们的目标是开发一个蒙特卡罗模拟模型的投资组合优化。参与者将被要求构建和分析由各种资产…