目录
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('查询异常')
})
}