想实现高级搜索,有四个条件,目录名,报表名,标签名,描述,这个是卸载多选框里的,选择哪个搜索的时候就要搜,还有个关键字跟时间是另外的,怎么才能实现呢
代码如下:
<el-form
ref="searchform"
label-width="70px"
size="small"
>
<el-form-item label="搜索范围">
<el-checkbox-group
v-model="searchform.checkList"
>
<el-checkbox label="目录名称"></el-checkbox>
<el-checkbox label="报表名称"></el-checkbox>
<el-checkbox label="标签名称"></el-checkbox>
<el-checkbox label="报表描述"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="关键字">
<el-input
v-model="searchform.keywords"
placeholder="请输入关键字"
></el-input>
</el-form-item>
<el-form-item label="发布时间">
<el-date-picker
v-model="searchform.pubdate"
align="right"
type="daterange"
placeholder="选择日期"
:picker-options="pickerOptions"
style="width: 444px"
start-placeholder="开始日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
</el-form>
searchform 不就是所有的筛选条件了吗 接着用这个筛选条件 调后端接口不就可以了吗
你具体是哪里有疑惑呢,看你这个搜索已经写好了啊
针对高级搜索功能,可以按照以下步骤来实现:
import axios from 'axios'
methods: {
fetchData() {
axios.get('https://api.example.com/data')
.then(response => {
this.data = response.data
})
.catch(error => {
console.log(error);
})
}
}
可以将获取的数据存储到组件的data选项中,方便后期进行搜索操作。
<template>
<div>
<div>
<label>目录名</label>
<input type="checkbox" v-model="searchCatalog">
</div>
<div>
<label>报表名</label>
<input type="checkbox" v-model="searchReport">
</div>
<div>
<label>标签名</label>
<input type="checkbox" v-model="searchTag">
</div>
<div>
<label>描述</label>
<input type="checkbox" v-model="searchDesc">
</div>
</div>
</template>
<script>
export default {
data() {
return {
searchCatalog: false,
searchReport: false,
searchTag: false,
searchDesc: false
}
}
}
</script>
当用户选择需要搜索的条件之后,可以根据这些条件进行接口数据的筛选。
computed: {
filteredData: function() {
var data = this.data;
var searchCatalog = this.searchCatalog;
var searchReport = this.searchReport;
var searchTag = this.searchTag;
var searchDesc = this.searchDesc;
if (searchCatalog)
data = data.filter(item => item.catalog.indexOf(searchCatalog) > -1);
if (searchReport)
data = data.filter(item => item.report.indexOf(searchReport) > -1);
if (searchTag)
data = data.filter(item => item.tag.indexOf(searchTag) > -1);
if (searchDesc)
data = data.filter(item => item.desc.indexOf(searchDesc) > -1);
return data;
}
}
在这里,利用computed属性获取筛选后的数据,根据用户选择的搜索条件进行接口数据的筛选。
<template>
<div>
<label>输入关键字进行搜索</label>
<input type="text" v-model="keyword">
</div>
</template>
<script>
export default {
data() {
return {
keyword: ""
}
},
computed: {
filteredData: function() {
if (!this.keyword) return this.data;
return this.data.filter((item) => {
return item.name.toLowerCase().indexOf(this.keyword.toLowerCase()) > -1 ||
item.age.toLowerCase().indexOf(this.keyword.toLowerCase()) > -1 ||
item.sex.toLowerCase().indexOf(this.keyword.toLowerCase()) > -1;
});
}
}
}
</script>
在这里,利用computed属性获取筛选后的数据,根据用户输入的关键字进行数据的筛选。
<template>
<div>
<label>选择时间范围</label>
<el-date-picker type="daterange" v-model="dateRange"></el-date-picker>
</div>
</template>
<script>
export default {
data() {
return {
dateRange: []
}
},
computed: {
filteredData: function() {
if (this.dateRange.length === 0) return this.data;
var start = new Date(this.dateRange[0])
var end = new Date(this.dateRange[1])
return this.data.filter((item) => {
var itemTime = new Date(item.time)
return itemTime >= start && itemTime <= end
})
}
}
}
</script>
在这里,利用computed属性获取筛选后的数据,根据用户选择的时间范围进行数据的筛选。
<template>
<div>
<div>
<label>目录名</label>
<input type="checkbox" v-model="searchCatalog">
</div>
<div>
<label>报表名</label>
<input type="checkbox" v-model="searchReport">
</div>
<div>
<label>标签名</label>
<input type="checkbox" v-model="searchTag">
</div>
<div>
<label>描述</label>
<input type="checkbox" v-model="searchDesc">
</div>
<div>
<label>输入关键字进行搜索</label>
<input type="text" v-model="keyword">
</div>
<div>
<label>选择时间范围</label>
<el-date-picker type="daterange" v-model="dateRange"></el-date-picker>
</div>
<button @click="search">搜索</button>
<div v-for="(item,index) in filteredData" :key="index">
{{item}}
</div>
</div>
</template>
<script>
export default {
data() {
return {
searchCatalog: false,
searchReport: false,
searchTag: false,
searchDesc: false,
keyword: "",
dateRange: []
}
},
computed: {
filteredData: function() {
var data = this.data;
var searchCatalog = this.searchCatalog;
var searchReport = this.searchReport;
var searchTag = this.searchTag;
var searchDesc = this.searchDesc;
var keyword = this.keyword;
var dateRange = this.dateRange;
if (searchCatalog)
data = data.filter(item => item.catalog.indexOf(searchCatalog) > -1);
if (searchReport)
data = data.filter(item => item.report.indexOf(searchReport) > -1);
if (searchTag)
data = data.filter(item => item.tag.indexOf(searchTag) > -1);
if (searchDesc)
data = data.filter(item => item.desc.indexOf(searchDesc) > -1);
if (keyword) {
data = data.filter((item) => {
return item.name.toLowerCase().indexOf(keyword.toLowerCase()) > -1 ||
item.age.toLowerCase().indexOf(keyword.toLowerCase()) > -1 ||
item.sex.toLowerCase().indexOf(keyword.toLowerCase()) > -1;
});
}
if (dateRange.length > 0) {
var start = new Date(dateRange[0])
var end = new Date(dateRange[1])
data = data.filter((item) => {
var itemTime = new Date(item.time)
return itemTime >= start && itemTime <= end
})
}
return data;
}
},
methods: {
search() {
console.log(this.filteredData);
}
}
}
</script>
在这里,利用button按钮来触发搜索操作,搜索过后,筛选后的数据在页面中展示。