vue实现高级搜索功能

想实现高级搜索,有四个条件,目录名,报表名,标签名,描述,这个是卸载多选框里的,选择哪个搜索的时候就要搜,还有个关键字跟时间是另外的,怎么才能实现呢
代码如下:

 <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 不就是所有的筛选条件了吗 接着用这个筛选条件 调后端接口不就可以了吗
你具体是哪里有疑惑呢,看你这个搜索已经写好了啊

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7810037
  • 这篇博客你也可以参考下:高频率Vue面试题总结,vue面试就靠它!
  • 除此之外, 这篇博客: Vue项目初始化中的 2.输入仓库名称,不可重复,否则出错,最下边的第一个选项不能打勾选上,(现在好像都是默认没选上的,但是还是要注意),然后点击创建按钮 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    针对高级搜索功能,可以按照以下步骤来实现:

    1. 在Vue中利用axios进行接口数据获取。具体而言,可以设置一个methods方法,利用axios库进行接口数据获取,代码示例如下:
    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选项中,方便后期进行搜索操作。

    1. 利用多选框进行搜索条件的选择。可以在Vue模板中使用多选框,用户选择需要搜索的条件之后,再利用v-model绑定到组件的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>
    

    当用户选择需要搜索的条件之后,可以根据这些条件进行接口数据的筛选。

    1. 根据用户选择的搜索条件进行数据的筛选。针对需要搜索的四个条件,可以在Vue中利用filter方法进行数据的筛选,代码示例如下:
    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属性获取筛选后的数据,根据用户选择的搜索条件进行接口数据的筛选。

    1. 实现关键字的搜索。在这里可以在Vue模板中添加一个文本框,在用户输入关键字进行搜索的时候,利用v-model进行数据的绑定,根据用户输入的关键字进行数据的筛选,代码示例如下:
    <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属性获取筛选后的数据,根据用户输入的关键字进行数据的筛选。

    1. 实现时间的搜索。在这里可以添加Vue日期选择器组件,利用v-model进行数据的绑定,然后根据选择的开始时间和结束时间进行数据的筛选,代码示例如下:
    <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属性获取筛选后的数据,根据用户选择的时间范围进行数据的筛选。

    1. 将所有的搜索条件集成到一起。在前面的步骤中,针对不同的搜索条件分别进行了处理,最后需要将所有的搜索条件集成到一起,并且绑定到一个按钮上。当用户点击这个按钮以后,系统会自动进行筛选操作,并显示筛选后的数据列表。代码示例如下:
    <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按钮来触发搜索操作,搜索过后,筛选后的数据在页面中展示。