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

news2024/11/27 0:43:18
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-pane
      split="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-pane
    split="vertical"
    @resize="resizeSplit"
    :default-percent="defaultPercent1"
  >
    <template slot="paneL">
      <split-pane
        split="horizontal"
        :default-percent="defaultPercent2"
        @resize="resizeSplit2"
      >
        <template slot="paneL">
          <div class="topLeft">
            <div class="title">空域</div>
            <div class="contentTable">
              <el-table
                :data="maneuverTable"
                border
                height="100%"
                :cell-style="customCellStyle"
              >
                <el-table-column
                  prop="beginTime"
                  align="center"
                  label="日期"
                  width="100"
                >
                </el-table-column>
                <el-table-column prop="content" align="center" label="内容">
                </el-table-column>
                <el-table-column
                  prop="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"
                border
                height="100%"
                :cell-style="customCellStyle"
              >
                <el-table-column
                  prop="beginTime"
                  align="center"
                  label="日期"
                  width="100"
                >
                </el-table-column>
                <el-table-column prop="content" align="center" label="内容">
                </el-table-column>
                <el-table-column
                  prop="source"
                  align="center"
                  label="通报单位"
                  width="100"
                >
                </el-table-column>
              </el-table>
            </div>
          </div>
        </template>
      </split-pane>
    </template>
    <template slot="paneR">
      <split-pane
        split="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"
                border
                height="100%"
                :cell-style="customCellStyle"
              >
                <el-table-column
                  prop="beginTime"
                  align="center"
                  label="日期"
                  width="100"
                >
                </el-table-column>
                <el-table-column prop="content" align="center" label="内容">
                </el-table-column>
                <el-table-column
                  prop="source"
                  align="center"
                  label="通报单位"
                  width="100"
                >
                </el-table-column>
              </el-table>
            </div>
          </div>
        </template>
        <template slot="paneR">
          <split-pane
            split="horizontal"
            :default-percent="defaultPercent4"
            @resize="resizeSplit4"
          >
            <template slot="paneL">
              <div class="brTop">
        <div class="title">限制</div>
        <div class="contentTable">
          <el-table
            :data="limitationTable"
            border
            height="100% "
            :cell-style="customCellStyle"
          >
            <el-table-column
              prop="beginTime"
              align="center"
              label="日期"
              width="100"
            >
            </el-table-column>
            <el-table-column prop="content" align="center" label="内容">
            </el-table-column>
            <el-table-column
              prop="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"
            border
            height="100%"
            :cell-style="customCellStyle"
          >
            <el-table-column
              prop="beginTime"
              align="center"
              label="日期"
              width="100"
            >
            </el-table-column>
            <el-table-column prop="content" align="center" label="内容">
            </el-table-column>
            <el-table-column
              prop="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开始,需要加1
    const 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.coloradmin.cn/o/1177544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述

文章目录 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述116.1 背景信息116.2 操作步骤 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述 116.1 背景信息 数据库安全对数据库系统来说至关重要。openGauss将用户对数据库的所有操作…

放卷开环张力控制(伺服转矩模式应用)

收放卷张力开环闭环控制算法,请参考下面文章链接: PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博客文章浏览阅读4k次,点赞3次,收藏3次。里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算…

leetcode:2926. 平衡子序列的最大和 【树状数组维护最大前缀和】

题目链接 lc2926 题目描述 题目思路 定义b[i] nums[i] - i 目标是从b中找到一个非降子序列使得元素和最大 # b[i] nums[i] - i # 找到b的一个非降子序列使得元素和最大 # f[i]: 子序列最后一个数下标是i&#xff0c;对应的最大子序列 # f[i] max (max f[j], 0) nums[i] …

【2023Q3_技术考核经验】

单选题&#xff1a; 1.下列有关影刀全局变量的概念说法错误的是&#xff1a;© B.和流程参数一样&#xff0c;只有事先给全局变量赋值&#xff0c;全局变量才可以用到其他流程当中去 C.全局变量适合用在变量值频繁更换的场景 解释&#xff1a;在右下角设置全局变量&#x…

本地电脑监控软件

本地电脑监控软件是一种用于监控计算机使用行为的软件&#xff0c;它可以帮助企业管理者了解员工的工作状态和行为&#xff0c;保护企业的计算机资源。 本地电脑监控软件可以监控员工的计算机使用行为&#xff0c;包括屏幕监控、键盘记录、文件操作等。这些功能可以帮助企业管理…

ansible安装和常见模块

文章目录 ansible的安装1.1 yum install epel-release.noarch1.2配置epel源的baseurl1.3安装ansible1.4安装ansible报错问题1.5 yum卸载 ansible的安装 ansible是由epel源提供的&#xff0c;所以需要配置epel源。要么通过配置好的baseos源直接执行“yum install epel-release.…

LabelImg使用笔记

LabelImg使用笔记 文章目录 LabelImg使用笔记一、LabelImg简介1.1、特性1.2、LabelImg的热键 二、LabelImg安装三、3种格式的使用3.1、VOC格式标注3.2、yolo格式标注3.3、json格式 四、LabelMe 和 LabelImg适用场景 一、LabelImg简介 LabelImg 是一个用于图像标注的开源工具&a…

vuepress 打包后左侧菜单链接 404 问题解决办法

背景 上周看到一本开源书 《深入架构原理与实践》&#xff0c;是基于 vuepress 搭建的&#xff0c;下载了源码&#xff0c;本地部署了一下&#xff0c;本文记录如何打包该源码遇到的路径问题及思考。 结论&#xff1a; vuepress 插件的 sideBar 的菜单路径默认是相对 / 的&am…

Python学习笔记--类的继承

七、类的继承 1、定义类的继承 说到继承&#xff0c;你一定会联想到继承你老爸的家产之类的。 类的继承也是一样。 比如有一个旧类&#xff0c;是可以算平均数的。然后这时候有一个新类&#xff0c;也要用到算平均数&#xff0c;那么这时候我们就可以使用继承的方式。新类继…

牛客出bug(华为机试HJ71)

Hj71&#xff1a;字符串通配符 描述 问题描述&#xff1a;在计算机中&#xff0c;通配符一种特殊语法&#xff0c;广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求&#xff1a; 实现如下2个通配符&#xff1a; *&#xff1a;匹配0个…

318. 最大单词长度乘积

318. 最大单词长度乘积 难度: 中等 来源: 每日一题 2023.11.06 给你一个字符串数组 words &#xff0c;找出并返回 length(words[i]) * length(words[j]) 的最大值&#xff0c;并且这两个单词不含有公共字母。如果不存在这样的两个单词&#xff0c;返回 0 。 示例 1&…

新版Helix QAC 100%覆盖MISRA C++:2023

Helix QAC 2023.3预期将100%覆盖在2023年第四季度发布的新的MISRA C:2023规则。 此外&#xff0c;该版本支持更多的C20语言特性&#xff0c;并改进了Perforce Validate平台和Helix QAC与Validate的集成&#xff0c;以及其他质量改进。 编码标准覆盖率&#xff08;MISRA C:202…

JDK设置编码格式UTF-8

Windows中安装的JDK默认编码格式是GBK 需要修改为UTF-8.在系统中添加系统变量 环境变量 变量名&#xff1a;JAVA_TOOL_OPTIONS 变量值&#xff1a;-Dfile.encodingUTF-8

UE问题盘点

打包后运行时应用程序崩溃 GPU崩溃&#xff08;Timed out waiting for RenderTread after 120.00 secs&#xff09; 分析&解决&#xff1a; 像素流送模式&#xff0c;部署机无显示器无分辨率所致&#xff08;接显示器或显卡欺骗器&#xff09;项目设置Targeted RHIs为Di…

七种事务传播行为,核心只有Required默认和required_new

事务的概念&#xff1a;当一个事务方法被另一个事务方法调用时&#xff0c;这个事务方法应该如何进行事务控制。 结论&#xff1a;一般情况下&#xff0c;你就用默认的把两个事务合并成一个事务&#xff0c;只有当写日志&#xff08;事物之间不互相影响&#xff09;的时候用req…

部署kubevirt教程

前提条件 已安装&#xff1a;kubernetes集群、kubectl、docker apt install -y qemu-kvm libvirt virt-install bridge-utils 【所有节点全部安装】 virt-host-validate qemu部署kubevirt 下载kubevirt-cr.yaml和kubevirt-operator.yaml 先执行&#xff1a; Kubectl apply …

大型企业效率革命:从数字化应用提升到信息化管理平台升级-亿发

数字化转型本质上是一场企业效率的革命&#xff0c;它以连接效率、数据效率和决策效率为核心。所有的转型活动都与人的参与和贡献紧密相关。因此&#xff0c;如何利用数字化手段提升全体员工的数字化应用能力&#xff0c;从而加速商业创新和实现高质量发展&#xff0c;成为管理…

Python武器库开发-常用模块之re模块(十八)

常用模块之re模块(十八) 在Python中需要通过正则表达式对字符串进⾏匹配的时候&#xff0c;可以使⽤⼀个python自带的模块&#xff0c;名字为re模块 我们可以在Python中使用以下的语句&#xff0c;导入re模块&#xff1a; import re正则表达式的大致匹配过程是&#xff1a; …

mybatis在springboot当中的使用

1.当使用Mybatis实现数据访问时&#xff0c;主要&#xff1a; - 编写数据访问的抽象方法 - 配置抽象方法对应的SQL语句 关于抽象方法&#xff1a; - 必须定义在某个接口中&#xff0c;这样的接口通常使用Mapper作为名称的后缀&#xff0c;例如AdminMapper - Mybatis框架底…

petalinux 2022.2 在 ubantu18.04 下的安装

下载 Ubuntu下载&#xff1a; https://releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.iso petalinux 下载&#xff1a; https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2022-2.html 安装虚拟机 安装…