vue2.0多条件搜索组件使用详解


Posted in Javascript onMarch 26, 2020

本文为大家分享了vue2.0多条件搜索组件的实现方法,供大家参考,具体内容如下

搜索条件为死数据,通过select下拉,选取多个条件;同时可点击加号增加搜索条件,点击减号减少搜索条件;

templete

<template> 
 <div class="retrievalmian"> 
 <div class="retrievaltitle"> 
 <a class="btn-default tabbtn" @click="seniorsearch('')" :class="[tabbtn==''?'checked':'']" >高级搜索</a> 
 <a class="btn-default tabbtn" @click="seniorsearch('author')" :class="[tabbtn=='author'?'checked':'']" >作者搜索</a> 
 </div> 
 <div class="retrievalbar"> 
 <div class="formbody"> 
 <div class="formoperate"> 
 <span class="tipsicon addplus" @click="addplus" v-show="formtips.length<12"></span> 
 <span class="tipsicon removeminus" @click="removeminus" v-show="formtips.length>=4"></span> 
 </div> 
 <div class="formline"> 
 <div class="formtips" v-for="(item,index) in formtips"> 
 <div class="formgroup"> 
 <select class="formcontrol" v-model="item.titletype"> 
 <option v-for="typeselect in titletype" v-if="tabbtn==''" :value="typeselect.value">{{typeselect.text}}</option> 
 <option v-for="typeselect in titletypeAuthor" v-if="tabbtn=='author'&&!(index%2)" :value="typeselect.value">{{typeselect.text}}</option> 
 <option v-for="typeselect in titletypeAuthor2" v-if="tabbtn=='author'&&(index%2)" :value="typeselect.value">{{typeselect.text}}</option> 
 </select> 
 </div> 
 <div class="formgroup"> 
 <input type="text" class="forminp" v-model="item.typeinp"> 
 </div> 
 <div class="formgroup"> 
 <select class="formcontrol" > 
 <option v-for="accuracy in accuracys" :value="accuracy.value">{{accuracy.text}}</option> 
 </select> 
 </div> 
 <div class="formgroup"> 
 <select class="formcontrol" v-model="item.containlist"> 
 <option v-for="containlist in containlists" :value="containlist.value">{{containlist.text}}</option> 
 
 </select> 
 </div> 
 </div> 
 </div> 
 <div class="formline"> 
 <div class="formgroup"> 
 <div class="catalog" @click="catalogshow" >文献分类目录</div> 
 <div class="cataloghint"> 
 <ul class="cataloglist" v-show="iscataloglist"> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="核工业">核工业 
  </label> 
  </div> 
 </li> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="航天工业">航天工业 
  </label> 
  </div> 
 </li> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="航空工业">航空工业 
  </label> 
  </div> 
 </li> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="船舶工业">船舶工业 
  </label> 
  </div> 
 </li> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="兵器工业">兵器工业 
  </label> 
  </div> 
 </li> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="军工电子">军工电子 
  </label> 
  </div> 
 </li> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="国防综合">国防综合 
  </label> 
  </div> 
 </li> 
 <li> 
  <div class="checkbox"> 
  <label> 
  <input type="checkbox" v-model="cataloglist" value="其他">其他 
  </label> 
  </div> 
 </li> 
 
 </ul> 
 </div> 
 </div> 
 </div> 
 <div class="formline"> 
 <div class="formgroup"> 
 <select class="formcontrollarg" v-model="timestart"> 
 <option v-for="startlist in timestarts" :value="startlist.value">{{startlist.text}}</option> 
 </select> 
 <span>——</span> 
 <select class="formcontrollarg" v-model="timeend"> 
 <option v-for="endlist in timeends" :value="endlist.value">{{endlist.text}}</option> 
 </select> 
 </div> 
 </div> 
 <div class="formsearch"> 
 <button type="button" class="retrievalsearch btn btn-primary" @click="retrievalsearch">检索</button> 
 </div> 
 </div> 
 </div> 
 </div> 
</template>

script

<script> 
 import $ from 'jquery' 
 import conf from './../Conf'; 
 
 export default{ 
 data(){ 
 return { 
 formtips:[ 
 
 ], 
 tabbtn: '',//搜索切换 
 cataloglist:[],//文献分类选中目录 
 iscataloglist:false, 
 
 
 titletype:[ 
 { text: '标题', value: 'title' }, 
 { text: '正文', value: 'text' }, 
 { text: '项目', value: 'project' }, 
 { text: '人员', value: 'person' }, 
 { text: '机构', value: 'organization' }, 
 { text: '技术', value: 'tech' }, 
 { text: '地区', value: 'locaton' }, 
 { text: '国家', value: 'country' } 
 ], 
 titletypeAuthor:[{ text: '作者', value: 'author' }], 
 titletypeAuthor2:[{ text: '作者机构', value: 'authoruint' }], 
 accuracys: [ 
 {text:'精确',value:'accurate'}, 
 {text:'模糊',value:'blur'} 
 ], 
 containlists:[ 
 {text:'并含',value:'andwidth'}, 
 {text:'或含',value:'orwidth'}, 
 {text:'不含',value:'nowidth'}, 
 ], 
 
 timestart:'nolimit',//检索起始时间 
 timeend:'2017',//检索结束时间 
 timestarts:[],//开始时间选择数组 
 timeends:[],//结束时间选择数组 
 } 
 }, 
 watch:{ 
 
 }, 
 created: function () { 
 this.init(); 
 }, 
 methods: { 
 init: function(){ 
 this.formtips=[ 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 } 
 ]; 
 this.timestarts = [ 
 {text:'不限',value:'nolimit'}, 
 {text:'2016',value:'2016'}, 
 {text:'2015',value:'2015'}, 
 {text:'2014',value:'2014'}, 
 {text:'2013',value:'2013'}, 
 {text:'2012',value:'2012'}, 
 {text:'2011',value:'2011'}, 
 ]; 
 this.timeends = [ 
 {text:'2017',value:'2017'}, 
 {text:'2016',value:'2016'}, 
 {text:'2015',value:'2015'}, 
 {text:'2014',value:'2014'}, 
 {text:'2013',value:'2013'}, 
 {text:'2012',value:'2012'}, 
 {text:'2011',value:'2011'}, 
 ] 
 }, 
 addplus:function () { 
 if(this.tabbtn==''){ 
 this.formtips.push({ 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }); 
 this.formtips.push({ 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }); 
 }else{ 
 this.formtips.push({ 
 titletype:'author', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }); 
 this.formtips.push({ 
 titletype:'authoruint', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }); 
 } 
 
 }, 
 removeminus:function () { 
 this.formtips.splice(-2); 
 }, 
 seniorsearch:function (str) { 
 if(this.tabbtn!=str){ 
 this.tabbtn = str; 
 if(this.tabbtn==''){ 
 this.formtips=[ 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'title', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 } 
 ]; 
 }else{ 
 this.formtips=[ 
 { 
 titletype:'author', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'authoruint', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'author', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 }, 
 { 
 titletype:'authoruint', 
 typeinp:'', 
 accuracy:'accurate', 
 containlist:'andwidth', 
 } 
 ] 
 } 
 } 
 }, 
 
 catalogshow:function () { 
 this.iscataloglist = !this.iscataloglist; 
 console.log(this.cataloglist); 
 }, 
 
 retrievalsearch:function(){ 
 let body={ 
 formtips:this.formtips, 
 cataloglist:this.cataloglist, 
 timestart:this.timestart, 
 timeend:this.timeend 
 }//点击检索传的数据 
 console.log(body); 
 } 
 
 }, 
 
 } 
 
</script>

css

<style scoped> 
 /*临时样式*/ 
 .retrievalmian{ 
 margin: 20px; 
 width:75%; 
 } 
 /**/ 
 /*.retrievaltitle{*/ 
 /*background: #FCFCFC;*/ 
 /*}*/ 
 .retrievaltitle .tabbtn:first-child{ 
 margin-right: -5px; 
 } 
 .retrievaltitle .tabbtn:hover{ 
 text-decoration: none; 
 } 
 .retrievaltitle .tabbtn{ 
 padding: 2px 8px; 
 background: #FBFBFB; 
 border: 1px solid #DFDFDF; 
 margin-bottom: -1px; 
 } 
 .retrievaltitle .tabbtn.checked{ 
 color: #E50F10; 
 padding-top: 8px; 
 border-bottom: 1px solid #FBFBFB; 
 } 
 .retrievalbar{ 
 border: 1px solid #E5E5E5; 
 background: #FCFCFC; 
 } 
 .formbody{ 
 position: relative; 
 margin: 10px 0px; 
 } 
 .formoperate{ 
 position: absolute; 
 top:10px; 
 right: 20px; 
 } 
 
 .formoperate .tipsicon{ 
 color: #59A4D2; 
 display: inline-block; 
 line-height: 15px; 
 cursor: pointer; 
 margin-left: 15px; 
 width: 20px; 
 height: 20px; 
 } 
 .formoperate .addplus{ 
 background: url(../static/img/addplusicon.png) no-repeat center; 
 } 
 .formoperate .removeminus{ 
 background: url(../static/img/removeicon.png) no-repeat center; 
 } 
 .formline{ 
 padding: 5px 30px; 
 } 
 .formtips{ 
 display: inline-block; 
 margin-bottom: 10px; 
 margin-right: 10px; 
 } 
 .formgroup{ 
 display: inline-block; 
 } 
 .formcontrol{ 
 border: 1px solid #999; 
 width: 80px; 
 height: 22px; 
 } 
 .forminp{ 
 border: 1px solid #146AC4; 
 width: 120px; 
 height: 22px; 
 } 
 .formcontrollarg{ 
 width:120px; 
 height: 25px; 
 } 
 .formsearch{ 
 position: absolute; 
 bottom:10px; 
 right: 20px; 
 } 
 .retrievalsearch{ 
 padding: 5px 20px; 
 } 
 .formgroup .catalog{ 
 border: 1px solid #999; 
 width:120px; 
 height: 22px; 
 cursor: pointer; 
 background: url(../static/img/dropdown.png) no-repeat; 
 background-position: 95% 45%; 
 } 
 .cataloghint{ 
 position: relative; 
 } 
 .cataloglist{ 
 position: absolute; 
 top: -1px; 
 left: 0; 
 padding: 0; 
 border: 1px solid #999; 
 background: #fff; 
 z-index: 10; 
 width: 120px; 
 } 
 .cataloglist li{ 
 padding:2px 5px; 
 } 
 .cataloglist li:hover{ 
 background: #1e90ff; 
 } 
 .checkbox { 
 margin:0px; 
 } 
</style>

1、为保证点击加号出来的select标签的v-model不一样,讲v-model与v-for的item绑定;<divclass="formtips" v-for="(item,index) in formtips">
<selectclass="formcontrol" v-model="item.titletype" >

2、当点击减号使搜索条件只剩下一列时,减号消失 <spanclass="tipsicon removeminus" @click="removeminus"   v-show="formtips.length>=4" ></span>;同理给加号增加条件,通过长度判断,限制增加的检索条件最多为6列,加号消失

3、点击检索后,使选中的检索条件通过

let body={
 formtips:this.formtips,
 cataloglist:this.cataloglist,
 timestart:this.timestart,
 timeend:this.timeend
}

body传递
默认

高级搜索

vue2.0多条件搜索组件使用详解

作者搜索

vue2.0多条件搜索组件使用详解

点击减号

vue2.0多条件搜索组件使用详解

筛选条件三列,点击检索

vue2.0多条件搜索组件使用详解

控制台输出,点击检索要传的值body

vue2.0多条件搜索组件使用详解

更多搜索功能实现的精彩文章,请点击专题:javascript搜索功能汇总 进行学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js兼容标准的表格变色效果
Jun 28 Javascript
JQuery 使用attr方法实现下拉列表选中
Oct 13 Javascript
javascript使用appendChild追加节点实例
Jan 12 Javascript
javascript实现五星评价代码(源码下载)
Aug 11 Javascript
JavaScript探测CSS动画是否已经完成的方法
Aug 30 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
Oct 27 Javascript
js判断iframe中元素是否存在的实现代码
Dec 24 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
使用javascript做在线算法编程
May 25 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
vue缓存的keepalive页面刷新数据的方法
Apr 23 Javascript
用JavaScript实现贪吃蛇游戏
Oct 23 Javascript
Vue 进阶教程之v-model详解
May 06 #Javascript
jQuery动态追加页面数据以及事件委托详解
May 06 #jQuery
AngularJS封装$http.post()实例详解
May 06 #Javascript
JavaScript瀑布流布局实现代码
May 06 #Javascript
jquery点赞功能实现代码 点个赞吧!
May 29 #jQuery
jQuery extend()详解及简单实例
May 06 #jQuery
jquery仿微信聊天界面
May 06 #jQuery
You might like
yii2.0实现创建简单widgets示例
2016/07/18 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
js DOM的学习笔记
2011/12/22 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
python如何写出表白程序
2020/06/01 Python
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
行政文员岗位职责
2013/11/08 职场文书
导游的职业规划书范文
2013/12/27 职场文书
旅游安全协议书
2014/04/21 职场文书
小学生环保演讲稿
2014/04/25 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
介绍信怎么写
2015/05/05 职场文书
初三化学教学反思
2016/02/22 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server