Vue2.0组件实现动态搜索引擎

<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>
//     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>

<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/images/addplusicon.png) no-repeat center;
    }

    .formoperate .removeminus {
        background: url(../../../static/images/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/images/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>
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值