【sgSearch】自定义组件:常用搜索栏筛选框组件(包括表格高度变化兼容)。

 

sgSearch源码

<template><div :class="$options.name" :expand="expandSearch" :showCollapseBtn="showCollapseBtn"><!-- v-clickoutside="(d) => (expandSearch = false)" --><ul class="search-list"><slot name="searchFilter"></slot><ul class="sg-search-btns"><slot name="searchBtns"></slot></ul><ul class="sg-operate-btns"><slot name="operateBtns"></slot></ul></ul><!-- 折叠按钮 --><sgCollapseBtn v-model="expandSearch" /></div>
</template>
<script>
import clickoutside from "element-ui/src/utils/clickoutside";import sgCollapseBtn from "@/vue/components/admin/sgCollapseBtn";
export default {name: "sgSearch",directives: { clickoutside },components: {sgCollapseBtn,},data() {return {expandSearch: false,showCollapseBtn: false,defaultHeight: 50, //组件默认高度};},props: ["value", //是否显示"disabled", //是否禁用"collapse","data","showCollapseButton", //显示折叠按钮],computed: {},watch: {collapse: {handler(newValue, oldValue) {this.expandSearch = !newValue;},deep: true, //深度监听immediate: true, //立即执行},expandSearch: {handler(newValue, oldValue) {this.$emit(`update:collapse`, !newValue);this.$nextTick(() => {this.getHeight();// this.getTop();});},deep: true, //深度监听// immediate: true, //立即执行},showCollapseButton: {handler(newValue, oldValue) {this.$nextTick(() => {this.getShowCollapseBtn();});},deep: true, //深度监听// immediate: true, //立即执行},},created() {},mounted() {this.$el.style.setProperty("--defaultHeight", `${this.defaultHeight}px`); //js往css传递局部参数this.getShowCollapseBtn();this.$nextTick(() => {this.getHeight();// this.getTop();});},methods: {getHeight() {let height = this.$el ? this.$el.getBoundingClientRect().height : 0;this.$emit(`getHeight`, height);},/* getTop() {let rect = this.$el ? this.$el.getBoundingClientRect() : null;if (rect) {let top = this.$el ? rect.top + rect.height : 0;this.$emit(`getTop`, top);}}, */getShowCollapseBtn(d) {if (this.showCollapseButton === "" || this.showCollapseButton) {this.showCollapseBtn = true;} else if (this.showCollapseButton === false) {this.showCollapseBtn = false;} else {let len_search_list = this.$el.querySelectorAll(`.search-list>li`).length;/*let len_search_btns = this.$el.querySelectorAll(`.sg-search-btns>*`).length;let len_operate_btns = this.$el.querySelectorAll(`.sg-operate-btns>*`).length;let len = len_search_list + len_search_btns + len_operate_btns;this.showCollapseBtn = len > 5; */let searchList = this.$el.querySelector(`.search-list`);this.showCollapseBtn =len_search_list > 3 || searchList.offsetHeight > this.defaultHeight;}},},destroyed() {},
};
</script>
<style lang="scss" scoped>
.sgSearch {position: relative;$defaultHeight: var(--defaultHeight); //默认高度$collapseHeight: 75px; //折叠高度$expandHeight: max-content; //展开高度$colCount: 4; //每行数量$itemGap: 10px; //每一项间距$itemLabelGap: 5px; //每一项标签间距width: 100%;flex-grow: 1;height: $defaultHeight;box-sizing: border-box;.sgCollapseBtn {display: none;}&[showCollapseBtn] {padding-bottom: 30px;height: $collapseHeight;.sgCollapseBtn {display: block;}}& > .search-list {width: 100%;flex-grow: 1;display: flex;flex-wrap: wrap;& > * {flex-shrink: 0;}& > li {width: calc((100% - #{$itemGap} * (#{$colCount} - 1)) / #{$colCount});flex-wrap: nowrap;align-items: baseline;box-sizing: border-box;margin-right: $itemGap;margin-bottom: $itemGap;display: none;&:nth-of-type(1),&:nth-of-type(2),&:nth-of-type(3) {display: flex;}label {flex-shrink: 0;margin-right: $itemLabelGap;text-align: right;}&:nth-of-type(#{$colCount}n),&:last-of-type {margin-right: 0;}}.sg-search-btns {display: flex;flex-wrap: nowrap;align-items: baseline;& > * {margin-right: $itemGap;}}.sg-operate-btns {display: flex;justify-content: flex-end;align-items: baseline;flex-wrap: nowrap;margin-left: auto;& > * {margin-left: $itemGap;}}}&[expand] {height: $expandHeight;& > .search-list {& > li {display: flex;}}}
}
</style>

应用

<template><div :class="$options.name"><sgSearch:collapse.sync="collapseSearch"@keyup.enter="(collapseSearch = true), (currentPage = 1), initList()"@getHeight="(d) => (sgSearchHeight = d)"><template slot="searchFilter"><li><label>搜索</label><el-input clearable placeholder="请输入关键词" v-model.trim="keyword" /></li><li style="width: 150px"><label>状态</label><el-select style="width: 100%" v-model="ZT" placeholder="请选择" clearable><el-optionv-for="(a, i) in ZTs":key="i":value="a.value":label="a.label"></el-option></el-select></li><li><label>创建时间</label><el-date-pickerv-model="GXSJ"ref="GXSJ"type="daterange"align="right"unlink-panelsrange-separator="至"start-placeholder="开始日期"end-placeholder="结束日期":picker-options="$global.pickerOptions"clearable/></li><li><label>更新时间</label><el-date-pickerv-model="GXSJ"ref="GXSJ"type="daterange"align="right"unlink-panelsrange-separator="至"start-placeholder="开始日期"end-placeholder="结束日期":picker-options="$global.pickerOptions"clearable/></li></template><template slot="searchBtns"><el-buttonsize="medium"type="primary"icon="el-icon-search"@click="(collapseSearch = true), (currentPage = 1), initList()">搜索</el-button><el-buttonsize="medium"type="primary"@click="resetFilterData(), initList()"plain>重置</el-button></template><template slot="operateBtns"><el-button size="medium" type="primary" @click="add">添加</el-button><el-button:disabled="selection.length === 0"size="medium"type="danger"@click="delAny">批量删除</el-button></template></sgSearch><divclass="sg-table"v-loading="loading":full="fullscreenTable"@click="collapseSearch = true"><el-table:data="tableData"ref="table"stripeborder:header-cell-style="{ background: '#f5f7fa' }":height="`calc(100vh - ${fullscreenTable ? 10 : 160 + sgSearchHeight}px -  ${total > 10 ? 40 : 0}px)`":show-header="true"style="width: 100%"@row-click="row_click"@selection-change="selection_change":row-class-name="row_class_name"><template slot="empty"><el-empty v-show="!loading" :image="require('@/assets/404.png')"><span slot="description">暂无数据</span><el-button type="primary" icon="el-icon-s-promotion" plain @click="add">去哪里添加数据</el-button></el-empty></template><el-table-column type="selection" width="50" /><el-table-column type="index" label="序号" width="60" /><!-- <el-table-column prop="字段" label="列名" minWidth="200" /> --><el-table-column :resizable="false" prop="ID" label="身份证号" minWidth="200"><template v-slot:header="scope"><span>身份证号<fullscreenTable v-model="fullscreenTable" /></span></template><template slot-scope="scope"><span>【索引{{ scope.$index }}】{{ scope.row.ID }}</span></template></el-table-column><el-table-column label="用户名" show-overflow-tooltip minWidth="100"><template slot-scope="scope"><span>{{ scope.row.username }}</span></template></el-table-column><el-table-column label="姓名" show-overflow-tooltip minWidth="80"><template slot-scope="scope"><span>{{ scope.row.name }}</span></template></el-table-column><el-table-column label="权限角色" show-overflow-tooltip minWidth="100"><template slot-scope="scope"><span>{{ scope.row.role || `未分配` }}</span></template></el-table-column><el-table-column label="操作" width="175"><template slot-scope="scope"><el-buttonsize="mini"type="primary"@click.stop="edit(scope.row)"@dblclick.native.stop>修改</el-button><el-buttonsize="mini"type="danger"@click.stop="del(scope.row)"@dblclick.native.stop>删除</el-button></template></el-table-column></el-table><el-paginationstyle="width: 100%; text-align: center; margin-top: 10px"background:hidden="total <= 10":layout="`total, sizes, prev, pager, next, jumper`":page-sizes="[10, 20, 50, 100]":pager-count="7":current-page.sync="currentPage":page-size.sync="pageSize":total="total"@size-change="initList"@current-change="initList"/></div></div>
</template>
<script>
import sgSearch from "@/vue/components/admin/sgSearch";
export default {name: "sgBody",components: { sgSearch },data() {return {ZT: 1, //当前状态ZTs: [{ value: 1, label: "显示文本1" },{ value: 2, label: "显示文本2" },{ value: 3, label: "显示文本3" },{ value: 4, label: "显示文本4" },{ value: 5, label: "显示文本5" },],fullscreenTable: false, //全屏表格collapseSearch: false, //折叠搜索栏sgSearchHeight: 0, //搜索栏的高度tableData: [{ ID: "330110198704103091", username: "username1", name: "姓名1", role: "role1" },{ ID: "330110198704103092", username: "username2", name: "姓名2", role: "role2" },{ ID: "330110198704103093", username: "username3", name: "姓名3", role: "role3" },{ ID: "330110198704103094", username: "username4", name: "姓名4", role: "role4" },{ ID: "330110198704103095", username: "username5", name: "姓名5", role: "role5" },], //表格数据selection: [], //表格选中项数组currentPage: 1,pageSize: 10,// total: 0,total: 999,};},methods: {row_click(row, column, event) {this.$refs.table.toggleRowSelection(row);},selection_change(selection) {this.selection = selection;},row_class_name({ row, rowIndex }) {return this.selection.some((v) => v.ID === row.ID) ? "selected" : "";},},
};
</script>

 

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

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

相关文章

深度学习从入门到不想放弃-7

上一章的内容 深度学习从入门到不想放弃-6 (qq.com) 今天讲的也算基础(这个系列后来我一寻思,全是基础 ),但是可能要着重说下,今天讲前向计算和反向传播,在哪儿它都永远是核心,不管面对什么模型 前向计算: 有的叫也叫正向传播,正向计算的,有的直接把前向的方法梯度下…

解决 postman测试接口报404 Not Found

JDK版本&#xff1a;jdk17 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 文章目录 问题描述原因分析解决方案 问题描述 当我使用postman测试接口时&#xff0c;报了 404 Not Found 的错误&#xff0c;报错截图如下所示 但我的后端程序中已经定义了该接口&#xff0c;如下所示 …

代码随想录算法训练营第三十一天 |基础知识,455.分发饼干,376.摆动序列,53.最大子序和(已补充)

基础知识&#xff1a; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课(opens new window)&#xff1a;贪心算法理论基础&#xff01;(opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家对本题的理解。 #什么是贪心 贪心的本质…

第一篇【传奇开心果系列】Python的pyttsx3库技术点案例示例:文本转换语言

传奇开心果短博文系列 系列短博文目录Python的pyttsx3库技术点案例示例系列 短博文目录前言一、pyttsx3主要特点和功能介绍二、pyttsx3文字转语音操作步骤介绍三、多平台支持介绍和示例代码四、多语言支持介绍和示例代码五、自定义语言引擎介绍和示例代码六、调整语速和音量介绍…

【Mybatis】从0学习Mybatis(2)

前言 本篇文章是从0学习Mybatis的第一篇文章&#xff0c;由于篇幅太长CSDN会限流&#xff0c;因此我打算分开两期来写&#xff0c;这是第二期&#xff01;第一期在这儿&#xff1a;【Mybatis】从0学习Mybatis&#xff08;1&#xff09;-CSDN博客 1.什么是ResultMap结果映射&am…

【教程】C++语言基础学习笔记(七)——Array数组

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

蓝桥杯第十四届电子类单片机组程序设计

目录 前言 蓝桥杯大赛历届真题&#xff08;点击查看&#xff09; 一、第十四届比赛题目 1.比赛原题 2.题目解读 1&#xff09;任务要求 2&#xff09;注意事项 二、任务实现 1.NE555读取时机的问题 1&#xff09;缩短计数时间 2&#xff09;实时读取 2.温度传感器读…

机器学习和统计学的区别?

1、本质区别&#xff1a; 目标&#xff1a;机器学习的核心目标是建立一个可以自动学习和改进的模型&#xff0c;以预测未知数据。它更关注结果的准确性和模型的泛化能力&#xff0c;通常不关心模型是否可以解释。而统计学的目标是探究变量之间的关系&#xff0c;理解数据的内在…

算法沉淀——队列+宽度优先搜索(BFS)(leetcode真题剖析)

算法沉淀——队列宽度优先搜索&#xff08;BFS&#xff09; 01.N 叉树的层序遍历02.二叉树的锯齿形层序遍历03.二叉树最大宽度04.在每个树行中找最大值 队列 宽度优先搜索算法&#xff08;Queue BFS&#xff09;是一种常用于图的遍历的算法&#xff0c;特别适用于求解最短路径…

知识价值2-什么是IDE?新手用哪个IDE比较好?

IDE是集成开发环境&#xff08;Integrated Development Environment&#xff09;的缩写&#xff0c;是一种软件应用程序&#xff0c;旨在提供集成的工具集&#xff0c;以方便开发人员进行软件开发。IDE通常包括代码编辑器、编译器、调试器和其他工具&#xff0c;以支持软件开发…

python+django+vue汽车票在线预订系统58ip7

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 使用说明 使用Navicat或者其它工具&#xff0c;在mysql中创建对应名称的数据库&#xff0c;并导入项目的sql文件&#xff1b; 使用PyChar…

PHP开发日志 ━━ 深入理解三元操作与一般条件语句的不同

概况 三元运算符的功能与“if…else”流程语句一致。 在一般情况下&#xff0c;三元操作替换if条件语句可以精简代码&#xff0c;并且更为直观&#xff0c;但是在下面的情况中使用三元操作将会返回警告。 借图&#xff1a; 案例 比如原代码&#xff1a; class classA{publ…

详解tomcat中的jmx监控

目录 1.概述 2.如何开启tomcat的JMX 3.tomcat如何实现JMX的源码分析 1.概述 本文是博主JAVA监控技术系列文章的第二篇&#xff0c;前面一篇文章中我们介绍了JAVA监控技术的基石——jmx&#xff1a; 【JMX】JAVA监控的基石-CSDN博客 本文我们将从使用和源码实现两个方面聊…

算法学习——LeetCode力扣回溯篇3

算法学习——LeetCode力扣回溯篇3 491. 非递减子序列 491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。…

android 控制台输出 缺失

问题 android 控制台输出内容缺失 详细问题 笔者进行android开发&#xff0c;期望控制台打印Log日志或是输出内容 Log.i("tag","content");或 System.out.println("content")但是实际上&#xff0c;上述内容并没有按照笔者期望打印 解决方…

PhP+vue企业原材料采购系统_cxg0o

伴随着我国社会的发展&#xff0c;人民生活质量日益提高。互联网逐步进入千家万户&#xff0c;改变传统的管理方式&#xff0c;原材料采购系统以互联网为基础&#xff0c;利用php技术&#xff0c;结合vue框架和MySQL数据库开发设计一套原材料采购系统&#xff0c;提高工作效率的…

Stable Diffusion 模型下载:ToonYou(平涂卡通)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

linux系统下vscode portable版本的python环境搭建003:venv

这里写自定义目录标题 python安装方案一. 使用源码安装&#xff08;有[构建工具](https://blog.csdn.net/ResumeProject/article/details/136095629)的情况下&#xff09;方案二.使用系统包管理器 虚拟环境安装TESTCG 本文目的&#xff1a;希望在获得一个新的系统之后&#xff…

电脑监控屏幕软件有哪些(监控电脑屏幕的软件)

随着信息技术的迅猛发展&#xff0c;电脑屏幕监控软件已成为企业、家庭以及教育机构保护数据安全、提升工作效率以及进行行为分析的重要工具。本文将详细介绍几款主流的电脑屏幕监控软件&#xff0c;包括它们的功能、特点以及适用场景&#xff0c;帮助读者更好地了解并选择合适…