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

var newlist = new Vue({
      el:'#app',
      data:{
            formtips:[

            ],
            tabbtn: '',//搜索切换
            cataloglist:[],//文献分类选中目录
            iscataloglist:false,
            timestart:'',//检索起始时间
            timeend:'',//检索结束时间

            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'},
            ]
        },
        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',
                }
              ];
            },
            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({
                   titletypeAuthor:'author',
                   typeinp:'',
                   accuracy:'accurate',
                   containlist:'andwidth',
                 });
                 this.formtips.push({
                   titletypeAuthor:'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',
                          }
                        ];

                      }else{
                        this.formtips=[
                          {
                            titletypeAuthor:'author',
                            typeinp:'',
                            accuracy:'accurate',
                            containlist:'andwidth',


                          },
                          {
                            titletypeAuthor:'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);
            }

        },

    })


css

/*临时样式*/
  ul,li{
    list-style: none;
    margin:0;
    padding:0;
  }
    .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;
        /*临时*/
        text-align: center;
        border: 1px solid #59A4D2;
    }
    .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-right: 22px;
    }
    .formgroup{
        display: inline-block;
    }
    .formcontrol{
        border: 1px solid #999;
        width: 80px;
        height: 25px;
    }
    .forminp{
        border: 1px solid #146AC4;
        width: 120px;
        height: 25px;
    }
    .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: 25px;
        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;
    }

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,点击检索后,使选中的检索条件通过body传递
let body={
    formtips:this.formtips,
    cataloglist:this.cataloglist,
    timestart:this.timestart,
    timeend:this.timeend
}

默认高级搜索











作者搜索










点击减号减少搜索条件









增加搜索条件,此时三列搜索条件,选择搜索内容
















点击检索,打开控制台查看body内容




































  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值