vue实现列表上方的查询条件和表头等悬停在上方

目录

1、代码如下:

2、代码说明

2.1、对头部和表头标签等悬停在上方在cs中维护;

2.2、点击隐藏和收起在mounted中增加点击的监控事件

2.3、针对查询时增加高度的处理:


1、代码如下:

<template >
  <div class="frame-page" >
    <z-search-panel class="fixed-search-panel" >
      <z-form ref="model" :model="formItem" :label-width="125" label-position="right" >
        <z-row>
          <z-row>
            <z-col :span="8">
              <z-form-item label="主题:">
                <z-input v-model="formItem.Object" placeholder="请输入参考主题" clearable></z-input>
              </z-form-item>
            </z-col>
          </z-row>
          <z-spread :no-suspend="true" >
            <div slot="ilead-more-content"  >
              <z-button @click="doQuery" icon="ios-search" type="primary">查询</z-button>
              <z-button @click="resetSearch" icon="android-refresh" style="margin-left:10px">重置</z-button>
            </div>
            <z-row>
              <z-col span="8">
              <z-form-item label="bigObect:">
                <z-input v-model="formItem.bigObect" placeholder="请输入父主题" clearable></z-input>
              </z-form-item>
               </z-col>
            </z-row>
          </z-spread>
        </z-row>
      </z-form>
    </z-search-panel>
    <z-list-panel class="m-t-10 p-t-10 p-l-10 p-r-10" :style="{height: (this.windowHeight  * 0.725) + 'px'}">
      <vxe-toolbar style="width: 100%" class="fixed-toolbar">
        <template v-slot:buttons>
          <div style="width: 100%;">
            <z-row>
                <z-button type="primary" :loading="loading.list" @click="functionHistory()" >查看历史</z-button>
            </z-row>
          </div>
        </template>
      </vxe-toolbar>
      <vxe-table ref="childTable"
        class = "mian-table"
        highlight-hover-row
        show-overflow border
        height="auto"
        row-id="id" align="center" size="medium"
        :data="tableData"
        :loading="loading.list"
        @checkbox-change="selectChangeEvent"
        @checkbox-all="selectAllEvent"
        :checkbox-config="childTableCheckboxConfig"
      >
      <vxe-table-column type="checkbox" align="center" min-width="40"></vxe-table-column> <!-- fixed="left"-->
      <vxe-table-column resizable field="Object" title="主题" align="center" min-width="120" ></vxe-table-column>
      <vxe-table-column resizable field="bigObject" title="父主题" align="center" min-width="140" ></vxe-table-column>
      <vxe-table-column resizable fixed="right" align="center" min-width="120" title="操作" >
        <template v-slot="{ row, seq }">
          <a class="link" @click="edit(row, seq)">维护</a>
          <div class="divider"></div>
          <a class="link" @click="delete(row, seq)">删除</a>
        </template>
      </vxe-table-column>
      </vxe-table>
      <vxe-pager
        size="small"
        :loading="loading.list"
        :current-page="tablePage.page"
        :page-size="tablePage.rows"
        :total="tablePage.records"
        :layouts="[
            'PrevPage',
            'JumpNumber',
            'NextPage',
            'FullJump',
            'Sizes',
            'Total'
          ]"
        @page-change="handlePageChange"
      >
      </vxe-pager>
    </z-list-panel>
  </div>
</template>
<script>
import '@/**/**/vxe-table'
export default {
  name: 'name',
  
  data () {
    return {
      windowHeight: 0,
      formItem: {
        Object: '', // 主题
        bigObject: ''
      },
      tableData: [],
      selectData: [],
      tablePage: {
        page: 1,
        rows: 10,
        records: 0
      },
      loading: {
        list: false
      }
    }
  },
  mounted () {
 this.$nextTick().then(() => {
      const firstNode = document.querySelector('.zvu-btn.zvu-btn-text.zvu-btn.zvu-btn-default.zvu-more-showBtn')
      console.log('firstNode', firstNode)
      firstNode.addEventListener('click', this.onClickFirstNode)
    })
    this.updateWindowHeight()
  },
  beforeDestroy () {
    window.removeEventListener('resize', this.updateWindowHeight)
  },
  methods: {
    updateWindowHeight () {
      console.log('updateWindowHeight', window.innerHeight)
      this.windowHeight = window.innerHeight
      console.log('this.windowHeight', this.windowHeight)
    },
    onClickFirstNode () {
      console.log('onClickFirstNode')
      let firstNodeSpan = document.querySelector('.zvu-btn.zvu-btn-text.zvu-btn.zvu-btn-default.zvu-more-showBtn span').innerHTML
      let tableHeader = document.querySelector('.mian-table .vxe-table--header-wrapper.body--wrapper')
      let fixedToolbar = document.querySelector('.fixed-toolbar')
      if (firstNodeSpan.includes('展开')) {
        // 收起了 245 295
        fixedToolbar.style.top = '255px'
        tableHeader.style.top = '290px'
      }
      if (firstNodeSpan.includes('收起')) {
        // 展开了
        console.log('firstNodeSpan2', firstNodeSpan)
        fixedToolbar.style.top = '505px'
        tableHeader.style.top = '535px'
      }
    },
    doQuery (type) {
      let that = this
      if (type !== 'page') {
        that.tablePage.page = 1
      }
      let params = Object.assign({}, that.formItem, that.tablePage)
     
      that.tableData = []
      that.selectData = []
      that.loading.list = true
      const zlistpaneldivheight = document.querySelector('.z-list-panel.m-t-10.p-t-10.p-l-10.p-r-10 div:first-child')
      api.queryData(params).then((response) => {
        that.tablePage.records = response.data.records
        that.tableData = response.data.rows
        zlistpaneldivheight.style.height = ((that.windowHeight) * 0.61) + 'px'
        that.loading.list = false
      }).catch((error) => {
        zlistpaneldivheight.style.height = ((that.windowHeight) * 0.61) + 'px'
        that.loading.list = false
        console.log(error)
        that.$Message.warning('查询异常')
      })
    },
    resetSearch () {
      let that = this
      that.formItem = {
        Object: '', 
        bigObject: ''
      }
      that.doQuery()
    },
    handlePageChange ({ currentPage, pageSize }) {
      let that = this
      that.tablePage.page = currentPage
      that.tablePage.rows = pageSize
      that.doQuery('page')
    },
    
    // 刷新
    refreshTable () {
      let that = this
      let table = that.$refs['childTable']
      table.syncData()
      that.doQuery()
    }
  }
}
</script>
<style>
.fixed-search-panel {
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 120px; /* 从125px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
  /*background-color: #fff;  设置背景色 */
}
.fixed-toolbar.vxe-toolbar{ /* .mian-table .z-list-panel  */
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 255px; /* 从245px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
  display: inline;
  line-height: 50px;
}
.fixed-toolbar.vxe-toolbar .vxe-button--wrapper div,
.fixed-toolbar.vxe-toolbar .vxe-button--wrapper {
  width: 100%;
  background-color: #ffffff; /* 设置背景色 */
}
.mian-table .vxe-body--x-space {
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 289px; /* 从289px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
}
.mian-table .vxe-table--header-wrapper.body--wrapper,
.mian-table .vxe-header--row {
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 290px; /* 从290px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
   /*background-color: #fff; 设置背景色 */
}
</style>
<style scoped>
.report-rule-date >>> .zvu-form-item-label:before {
  content: '*';
  display: inline-block;
  margin-right: 4px;
  line-height: 1;
  font-family: SimSun;
  font-size: 14px;
  color: #ed4014;
}
.toolbarselect.zvu-select{
  width: 150px !important;
}
</style>

2、代码说明

2.1、对头部和表头标签等悬停在上方在cs中维护;

<style>
.fixed-search-panel {
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 120px; /* 从125px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
  /*background-color: #fff;  设置背景色 */
}
.fixed-toolbar.vxe-toolbar{ /* .mian-table .z-list-panel  */
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 255px; /* 从245px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
  display: inline;
  line-height: 50px;
}
.fixed-toolbar.vxe-toolbar .vxe-button--wrapper div,
.fixed-toolbar.vxe-toolbar .vxe-button--wrapper {
  width: 100%;
  background-color: #ffffff; /* 设置背景色 */
}
.mian-table .vxe-body--x-space {
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 289px; /* 从289px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
}
.mian-table .vxe-table--header-wrapper.body--wrapper,
.mian-table .vxe-header--row {
  position: sticky; /* 使用sticky定位使工具栏悬停 */
  top: 290px; /* 从290px开始 */
  z-index: 100; /* 确保工具栏在最上方 */
   /*background-color: #fff; 设置背景色 */
}
</style>

2.2、点击隐藏和收起在mounted中增加点击的监控事件

 mounted () {
    this.$nextTick().then(() => {

      const firstNode = document.querySelector('.zvu-btn.zvu-btn-text.zvu-btn.zvu-btn-default.zvu-more-showBtn')

      console.log('firstNode', firstNode)

      firstNode.addEventListener('click', this.onClickFirstNode)

    })
},
methods: {
 onClickFirstNode () {
      console.log('onClickFirstNode')
      let firstNodeSpan = document.querySelector('.zvu-btn.zvu-btn-text.zvu-btn.zvu-btn-default.zvu-more-showBtn span').innerHTML
      let tableHeader = document.querySelector('.mian-table .vxe-table--header-wrapper.body--wrapper')
      let fixedToolbar = document.querySelector('.fixed-toolbar')
      if (firstNodeSpan.includes('展开')) {
        // 收起了 245 295
        fixedToolbar.style.top = (this.windowHeight * 0.26) + 'px'
        tableHeader.style.top = (this.windowHeight * 0.31) + 'px'
      }
      if (firstNodeSpan.includes('收起')) {
        // 展开了
        console.log('firstNodeSpan2', firstNodeSpan)
        fixedToolbar.style.top = (this.windowHeight * 0.55) + 'px'
        tableHeader.style.top = (this.windowHeight * 0.58) + 'px'
      }
    }
},

2.3、针对查询时增加高度的处理:

首先table 增加强制样式

<z-list-panel class="m-t-10 p-t-10 p-l-10 p-r-10" :style="{height: (this.windowHeight * 0.725) + 'px'}">
</z-list-panel>

data(){
    return {
      windowHeight: 0
    }
}

  mounted () {
    this.updateWindowHeight() //获取页面高信息
  },
beforeDestroy () {
    window.removeEventListener('resize', this.updateWindowHeight)
  },
methods: {
    updateWindowHeight () {
      console.log('updateWindowHeight', window.innerHeight)
      this.windowHeight = window.innerHeight //采用百分比
    },
    //查询
    doQuery (type) {
      let that = this
      that.tableData = []
      that.selectData = []
      that.loading.list = true
      const zlistpaneldivheight = document.querySelector('.z-list-panel.m-t-10.p-t-10.p-l-10.p-r-10 div:first-child')
      api.doQuery (params).then((response) => {
        that.tablePage.records = response.data.records
        that.tableData = response.data.rows
        zlistpaneldivheight.style.height = ((that.windowHeight) * 0.61) + 'px'
        that.loading.list = false
      }).catch((error) => {
        zlistpaneldivheight.style.height = ((that.windowHeight) * 0.61) + 'px'
        that.loading.list = false
        console.log(error)
        that.$Message.warning('查询异常')
      })
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慧香一格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值