左右联动布局效果

 效果图:

<template>
  <el-dialog :modelValue="modelValue" :before-close="close" fullscreen :close-on-click-modal="false">
    <div class="farmer_detail">
      <div class="info_content">
        <div class="info_left">
          <!-- @click.native="stepClick(item, key)" -->
          <el-tabs tab-position="left" class="demo_tab_farmer_pop" v-model="activeStep" @tab-click="stepClick">
            <el-tab-pane :label="item.title" :name="key" v-for="(item, key) in stepList" :key="key">
              <template #label>
                <span class="custom_label">
                  <span>{{ item.title }}</span>
                </span>
              </template>
            </el-tab-pane>
          </el-tabs>
        </div>
        <div class="info_right" ref="rightRef">
          <el-scrollbar :height="calcScrollHeight + 'px'" ref="scrollMenuRef" @scroll="onScroll" @wheel="handleWheel">
            <!-- <p v-for="item in 20" :key="item" class="scrollbar-demo-item">{{ item }}</p> -->
            <div class="scroll_container" ref="right" id="scrollContent">
              <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="130px">
                <div class="scroll_content">
                  <div class="info_title" id="JCxx">基础信息</div>
                  <el-row :gutter="20">
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='realName' label='姓名'>
                        <el-input v-model="ruleForm.realName" placeholder="请输入姓名" :disabled='isEdit' clearable
                          style='width:100%;'></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='paperNumber' label='身份证号'>
                        <el-input v-model="ruleForm.paperNumber" placeholder="请输入身份证号" :disabled='isEdit' clearable
                          style='width:100%;'></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='gender' label='性别'>
                        <selectOption v-model="ruleForm.gender" placeholder="请选择性别" :disabled="isEdit"
                          :optionList="genderList" clearable>
                        </selectOption>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </div>
                <div class="scroll_content">
                  <div class="info_title" id="ZZxx">组织信息</div>
                  <el-row>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item label="担任职务" prop="holdType">
                        <selectOption v-model="ruleForm.holdType" placeholder="请选择担任职务" :disabled="isEdit"
                          :multiple="false" :collapseTags="true" typeCode="new_has_job" clearable>
                        </selectOption>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </div>
                <div class="scroll_content">
                  <div class="info_title" id="JYxx">教育与社会信息</div>
                  <el-row>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='school' label='毕业院校'>
                        <el-input v-model="ruleForm.school" placeholder="" :disabled='isEdit' clearable
                          style='width:100%;'></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </div>
              <div class="scroll_content">
                <div class="info_title" id="ZCxx">资产信息</div>
                <div>
                  <CusTable ref="zcTableRef" :column="zcColumnTD" :tableData="zcTableDataTD" title="土地信息">
                    <span slot="title">土地信息(7块,3.68亩)</span>
                  </CusTable>
                </div>
              </div>

              <div class="scroll_content">
                <div class="info_title" id="BTxx">补贴信息</div>
                <CusTable ref="btTableRef" :column="btColumn" :tableData="btTableData" title="补贴信息(7项)">
                  <span slot="title">补贴信息(7项)</span>
                </CusTable>
                <!-- 补贴信息 -->
              </div>
          <div class="info_title" id="XYxx">信用评价</div> -->
            </div>
          </el-scrollbar>
        </div>
      </div>
      <!-- </el-card> -->
    </div>
    <template #footer>
      <el-button type="default" @click="close">取 消</el-button>
      <el-button type="primary" @click="submit(ruleFormRef)" v-if="!btnShow">
        确 认
      </el-button>
    </template>
  </el-dialog>
</template>



const stepList = ref([
  { title: '基础信息', id: 'JCxx' },
....
  { title: '资产信息', id: 'ZCxx' },
  { title: '补贴信息', id: 'BTxx' },
  { title: '信用评价', id: 'XYxx' }])

const scrollMenuRef = ref(null)
//计算右侧可滚动区域高度
const calcScrollHeight = computed(() => clientHeight.value - 390)
const clientHeight: any = ref(document.documentElement.clientHeight || document.body.clientHeight)
watch(clientHeight, (newVal, oldVal) => {
  return newVal
})
let right = ref(null); // 右边 列表盒子
onMounted(() => {
  window.onresize = () => {
    clientHeight.value = `${document.documentElement.clientHeight}`;
  }
})



const stepTag = ref(1) //标识是点击滚动还是滚轮滑动滚动
const rightRef = ref()

//点击滚动  //待完善功能是否到底部不可点击或者滚动
const stepClick = (item: any, index: number) => {
  let ind = Number(item.index)
  var id = "#" + stepList.value[ind].id
  stepTag.value = 1
  if (activeStep.value - ind == 0) return
  activeStep.value = ind
  //监听滚动条是否到底部
  const curDom: any = document.querySelector(id);
  const dom: any = document.getElementById('scrollContent');
  if (curDom) {
    document.querySelector(id).scrollIntoView({
      behavior: "smooth",
      block: "start",
      inline: "nearest",
    });
  }
}

//右侧内容滚动方法
const onScroll = (e:any) => {
  if (stepTag.value == 1) return
  let scrollItems: any = document.querySelectorAll(".scroll_content");
  // console.log(e, scrollItems,scrollItems[0].offsetTop,'ee')
  for (let i = scrollItems.length - 1; i >= 0; i--) {
    // 判断滚动条滚动距离是否大于当前滚动项可滚动距离 e.target.scrollTop
    let judge = e.scrollTop >= scrollItems[i].offsetTop - 100 - scrollItems[0].offsetTop;
    if (judge) {
      activeStep.value = i;
      break;
    }
  }
}
// 是否是右侧滚动
const handleWheel = (e) => {
  stepTag.value = 0
}

<style lang="scss" scoped>
.farmer_detail {
  .img_box {
    height: 200px;
    text-align: center;

    .user_name {
      padding-top: 10px;
      font-size: 18px;
    }

    .block {
      .btn_back {
        float: right;
      }
    }
  }

  .info_content {
    display: flex;
    position: relative;
    // width: 100%;
    justify-content: flex-end;



    .info_left {
      width: 300px;

      .demo_tab_farmer_pop {
        >:deep(.el-tabs__header) {
          .el-tabs__item {
            // width:244px;
            padding-right: 60px;
            height: 60px;
            line-height: 60px;
            font-size: 18px;
            transition: background-color .3s ease-in-out;
          }

          .el-tabs__nav-wrap::after {
            background-color: #ECF3FF;
          }

          .el-tabs__nav-wrap,
          .el-tabs__nav-scroll {
            overflow: visible;
          }

          .el-tabs__item.is-active {
            background-color: #ECF3FF;

          }

          .el-tabs__item::after {
            content: "";
            position: absolute;
            right: -4px;
            bottom: 25px;
            width: 10px;
            height: 10px;
            box-sizing: border-box;
            border: 1px solid #CCCCCC;
            background: #FFFFFF;
            border-radius: 50%;
          }

          .el-tabs__active-bar.is-left {
            width: 10px;
            height: 10px !important;
            border-radius: 50%;
            background-color: #2F71F5;
            top: 25px;
            right: -4px;
          }

        }
      }
    }

    .info_right {
      flex: 1;

      // width: calc(100% - 200px);
      overflow-y: auto;

      .scroll_container {
        padding-right: 20px;
      }

      .info_title {
        display: flex;
        align-items: center;
        margin: 20px 0;
        font-size: 18px;
        font-weight: 700;
      }

      .info_title:first-child {
        margin-top: 0;
      }
    }
  }
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

精工电联:定制精工线缆,赋能科技互联---致力于为客户提供卓越的连接线缆和连接器产品

精工电联 “定制精工线缆 &#xff0c;赋能科技互联”&#xff0c;精工电联致力于为高科技产业提供全方位、多维度的集成线缆解决方案。凭借深厚的研发实力和丰富的行业经验&#xff0c;精工电联已经成功地在工控设备、医疗设备、人工智能、新能源领域、轨道交通和超声波设备等…

HCIP---OSPF

题目&#xff1a; 一&#xff1a;IP规划并配置 全网拿192.16.0.0/16划分&#xff0c;先按区域划分&#xff0c;一共有五个区域加上一共RIP网段&#xff0c;要借三位。 255.255. 11100000.00000000 172.16. 00000000.00000000 172.16.0.0/19 区域0 172.16. 00100000.00…

PostgreSQL按日期列创建分区表

在PostgreSQL中&#xff0c;实现自动创建分区表主要依赖于表的分区功能&#xff0c;这一功能从PostgreSQL 10开始引入。分区表可以帮助管理大量数据&#xff0c;通过分布数据到不同的分区来提高查询效率和数据维护的便捷性。以下是在PostgreSQL中自动创建分区表的一般步骤&…

找不到android.support.v4.app.Fragment的类文件

问题 android.support.v4.app.Fragment的类文件 详细问题 笔者Android项目开发集成QQ登录 控制台报错 D:\AndroidProjects\assistingAgriculture\app\src\main\java\com\example\assistingagriculture\activity\normal_mode\QQLoginActivity.java:43: 错误: 无法访问Fragme…

Compose 1.6 发布:性能大升级、拖放新功能、文本新变化...

翻译自&#xff1a; https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html 基于 1 月 24 号的 Compose 发行计划&#xff0c;我们正式推出了 Jetpack Compose 1.6 版本。 作为 Android 平台备受推崇的原生 UI 工具包&…

杨氏矩阵和杨辉三角

杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 分析 若要满足要求时间复杂度小于O(N)&#xff0c;就不能每一行一个个…

IO进程线程 2024.2.19

1.使用fread和fwrite完成两个文件的拷贝 #include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("./tset.txt","w"))NULL){perror("open error");ret…

AT24C02(I2C总线)通信的学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、存储器介绍二、AT24C02芯片二、I2C总线I2C电路规范I2C时序结构I2C数据帧AT24C02数据帧 总结 前言 学习AT24C02(I2C总线)芯片 一、存储器介绍 RAM&#xf…

应急响应实战笔记03权限维持篇(1)

第1篇&#xff1a;Windows权限维持--隐藏篇 0x00 前言 攻击者在获取服务器权限后&#xff0c;通常会用一些后门来维持权限&#xff0c;如果你想让你的后门保持的更久些&#xff0c;那么请隐藏好它&#xff0c;使之不易被管理员发现。 0x01 隐藏文件 1、利用文件属性 最简单…

C++右值引用和移动语义

C右值引用和移动语义 在C中&#xff0c;我们经常会遇到左值和右值的概念。左值是可以获取地址的表达式&#xff0c;只要是一个变量&#xff0c;那他就一定是个左值。而右值则是临时的&#xff0c;不能赋值&#xff0c;也没有持久的内存地址。 int&& a 10; //a是右指…

前端首屏、白屏与卡顿性能优化?你想要的都在这里!

您好&#xff0c; 如果喜欢我的文章或者想上岸大厂&#xff0c;可以关注公众号「量子前端」&#xff0c;将不定期关注推送前端好文、分享就业资料秘籍&#xff0c;也希望有机会一对一帮助你实现梦想 首屏秒开 首屏秒开主要可以分为 4 个方法——懒加载&#xff0c;缓存&#…

备战蓝桥杯---动态规划(入门3之子串问题)

本专题再介绍几种经典的字串问题。 这是一个两个不重叠字串和的问题&#xff0c;我们只要去枚举分界点c即可&#xff0c;我们不妨让c作为右区间的左边界&#xff0c;然后求[1,c)上的单个字串和并用max数组维护。对于右边&#xff0c;我们只要反向求单个字串和然后选左边界为c的…

day03-股票数据报表与导出

day03-股票数据表报与导出 目标 理解涨幅榜业务需求;理解涨停跌停概念&#xff0c;并涨停跌停基本实现;理解涨停跌停SQL分析流程&#xff0c;并根据接口文档自定义实现;理解echarts基本使用;掌握easyExcel基本使用,并实现涨幅榜数据导出功能; 第一章 股票涨幅统计 1、涨幅榜…

获取 OpenAI Sora 访问权限:立即申请!

OpenAI的Sora是一种尖端的文本到视频的人工智能模型&#xff0c;它能够根据文本描述创建高清、详细的视频&#xff0c;这让人相当兴奋。这项技术代表了人工智能驱动的内容创作的重大飞跃&#xff0c;通过实现更动态、更吸引人的故事讲述和信息共享&#xff0c;为各个行业带来了…

Linux下多核CPU指定程序运行的核

设置程序在指定CPU核心运行 一、如何查看程序运行的CPU信息 1.1 查看当前系统CPU有几个核心 查看CPU核心数量&#xff1a;lscpu 1.2 查看程序的PID ps aux|grep cpu_test1.3 查看程序可运行的CPU taskset -c -p pid1.4 设置程序在指定核心上运行 1.4.1 通过运行时的参数设…

Linux系统——http协议介绍

目录 引言——Internet起源 一、http协议——超文本传输协议 1.http相关概念 2.访问浏览器的过程 3.http协议通信过程 4.http相关技术 4.1WEB开发语言 4.2html 4.3CSS 4.4JS 5.MIME——Multipurpose Internet Mail Extensions 多用途互联网邮件扩展 6.URI URN URL的…

【CentOS】Linux 文件与目录管理

目录 1、目录的切换、新增和删除 &#xff08;1&#xff09;cd (change directory&#xff0c;切换目录) &#xff08;2&#xff09;pwd (显示目前所在的目录) &#xff08;3&#xff09;mkdir (make directory&#xff0c;建立新目录 ) &#xff08;4&#xff09;rmdir (…

leetcode:494.目标和

解题思路&#xff1a;1.因为每个数字都有正负两种选择&#xff0c;所以可以采用回溯算法。&#xff08;会超时&#xff09; 2.分成两个集合&#xff0c;分别为正数集合&#xff08;left&#xff09;和负数&#xff08;right&#xff09;集合。 left right Sum ---> righ…

阿里云服务器操作系统有哪些?如何选择?

阿里云服务器镜像怎么选择&#xff1f;云服务器操作系统镜像分为Linux和Windows两大类&#xff0c;Linux可以选择Alibaba Cloud Linux&#xff0c;Windows可以选择Windows Server 2022数据中心版64位中文版&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

力扣OJ题——相交链表

题目&#xff1a;160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 思路一&#xff08;暴力求解&#xff09;&#xff1a; A链表的每个节点依次跟B链表中节点进行…