前后端实现下拉框带条件查询(Vue+Java)

目录

  • 前言
  • 1. 前端
  • 2. 后端

前言

对于该基本知识熟门熟路,对此总结一套自身的模版如下

总体逻辑如下:通过前端下拉框或者其他组合框(多选勾选查询),将条件返回给后端处理,后端查询数据库,查询得到的结果返回给前端页面显示

  • 如果是下拉框单选,前端传输的是单个数据,后端只需要判断是否相等
  • 如果是下拉框多选,前端传输的是字符串,后端通过split裁剪获取各个字符串数组来判断

总体界面如下:
在这里插入图片描述

(如下模版已默认有自身的一套数据库以及Entity类,主要供前后端接口的基本实现)
对于相关的Java知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

1. 前端

<template>
  <el-form :inline="true" ref="formInline" :model="formInline" label-width="80px">
    <!-- 选择机种 -->
    <el-form-item label="机种">
      <el-select v-model="formInline.parentModel" multiple placeholder="机种">
        <el-option label="摩托车" value="摩托车"></el-option>
        <el-option label="汽车" value="汽车"></el-option>
        <el-option label="自行车" value="自行车"></el-option>
      </el-select>
    </el-form-item>

    <!-- 选择时间范围 -->
    <el-form-item label="周时间" prop="planTimePicker">
      <el-date-picker
        v-model="formInline.planTimePicker"
        type="daterange"
        :picker-options="pickerOptions"
        range-separator=""
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        align="center">
      </el-date-picker>
    </el-form-item>

    <!-- 查询按钮和重置按钮 -->
    <el-form-item>
      <el-button type="primary" size="small" @click="onSubmit">查询</el-button>
      <el-button size="small" @click="resetForm('formInline')">重置</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
import {getList} from "@/api/equipment/plan/weekplan";
import moment from 'moment'; // 导入日期处理库

export default {
  data() {
    return {
      // 表单数据模型
      formInline: {
        parentModel: [], // 选择的机种
        planTimePicker: null // 选择的时间范围
      },
      // 日期选择器配置
      pickerOptions: {
          shortcuts: [{
            text: '上周',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              // 设置起始日期为本周的第一天
              start.setDate(end.getDate() - end.getDay() - 6);
              // 设置结束日期为本周的最后一天
              end.setDate(end.getDate() - end.getDay() );
              picker.$emit('pick', [start, end]);
            }
          }, {
            text: '这周',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              // 设置起始日期为本周的第一天
              start.setDate(end.getDate() - end.getDay() + 1);
              // 设置结束日期为本周的最后一天
              end.setDate(end.getDate() - end.getDay() + 7);
              picker.$emit('pick', [start, end]);
            }
          }, {
            text: '下周',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              // 设置起始日期为下周的第一天
              start.setDate(end.getDate() - end.getDay() + 8);
              // 设置结束日期为下周的最后一天
              end.setDate(end.getDate() - end.getDay() + 14);
              picker.$emit('pick', [start, end]);
            }
          }]
        },
    };
  },
  methods: {
    // 提交查询
    onSubmit() {
      var js;
      var mTime = this.formInline.planTimePicker;
      
      var newmodel = '';
      if(this.formInline.parentModel){//添加检查
        for(var i=0;i<this.formInline.parentModel.length;i++){
          if(i==0){
            newmodel=this.formInline.parentModel[i]
          }else{
            newmodel=newmodel+'-'+this.formInline.parentModel[i]
          }
        }
      }
      
      if(mTime != null && mTime.length != 1){
        js = {
          "parentModel": newmodel,
          "planStartTime":moment(mTime[0]).format('YYYY-MM-DD'),
          "planEndTime":moment(mTime[1]).format('YYYY-MM-DD')
        };
      }else {
        js = {
          "parentModel": newmodel
        };
      }
      
      this.query = js;
      this.page.currentPage = 1;
      this.onLoad(this.page, js);
    },
    // 重置表单
    resetForm(formName) {
      this.$refs[formName].resetFields();
      this.formInline.parentModel = [];
      this.formInline.planTimePicker = null;
      this.onSubmit();
    },
    // 发起搜索请求方法
    onLoad(page, params = {}) {
      this.loading = true;
      getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
        console.log(res.data.data);
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        }).catch(error => {
        console.log(error);
      }).finally(() => {
        this.loading = false;
        this.selectionClear();
      });
    },
  }
};
</script>

对应请求后端的接口如下:

import request from '@/router/axios';

export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-equipment/weekplan/list',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}

其中涉及的快捷键选项可看如下文章:【ElementUI】详细分析DatePicker 日期选择器

2. 后端

对于后端的接口判断 只需要根据前端传输的数据以及数据库的属性进行判断即可:

@GetMapping("/list")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "分页", notes = "传入weekPlan")
public R<IPage<WeekPlanVO>> list(WeekPlanVO weekPlan, Query query) {
	QueryWrapper<WeekPlan> wrapper = new QueryWrapper<>();
	String parentModel =  weekPlan.getParentModel();
	if(!StringHelper.isNullOrEmptyString(parentModel)){
		wrapper.in("parent_model",parentModel.split("-"));
	}
	String planStartTime =  weekPlan.getPlanStartTime();
	String planEndTime =  weekPlan.getPlanEndTime();
	if(planStartTime != null && planEndTime != null){
		wrapper.eq("plan_time",planStartTime + "~" + planEndTime);
	}

	wrapper.orderByDesc("plan_time");
	IPage<WeekPlan> pages = weekPlanService.page(Condition.getPage(query), wrapper);
	return R.data(WeekPlanWrapper.build().pageVO(pages));

}

对应的VO类如下:

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "WeekPlanVO对象", description = "WeekPlanVO对象")
public class WeekPlanVO extends WeekPlan {
	private static final long serialVersionUID = 1L;

	/**
	 * 时间搜索开始
	 */
	private String planStartTime;

	/**
	 * 时间搜索结束
	 */
	private String planEndTime;


}

Entity类:

@Data
@TableName("equipment_week_plan")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "WeekPlan对象", description = "WeekPlan对象")
public class WeekPlan extends BaseEntity {

	private static final long serialVersionUID = 1L;
	
	/**
	 * 设备物种
	 */
	@ApiModelProperty(value = "设备物种")
	private String parentModel;
}

其Wrapper类:

public class WeekPlanWrapper extends BaseEntityWrapper<WeekPlan, WeekPlanVO>  {

	public static WeekPlanWrapper build() {
		return new WeekPlanWrapper();
 	}

	@Override
	public WeekPlanVO entityVO(WeekPlan weekPlan) {
		WeekPlanVO weekPlanVO = Objects.requireNonNull(BeanUtil.copy(weekPlan, WeekPlanVO.class));

		return weekPlanVO;
	}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Servlet】Servlet入门

文章目录 一、介绍二、入门案例导入servlet-api的解决办法 一、介绍 概念&#xff1a;server applet&#xff0c;即&#xff1a;运行在服务器端的小程序 Servlet就是一个接口&#xff0c;定义了Java类被浏览器访问到&#xff08;tomcat识别&#xff09;的规则。 将来我们定义…

bugku-web-速度要快

发现phpsessid 从上述提示 提示发送post请求&#xff0c;并且带有参数margin 发送后发现报文头部有一个字段叫flag&#xff0c;但好像每一次flag都不一样 构建Python脚本 request requests.Session()data {margin:find, } for i in range(50):html request.post(urlhttp:/…

JS详解-class-类的核心语法关于ES6与ES5

class基本核心语法&#xff1a; //定义类class Person{//公有属性(推荐此处定义)name// 定义属性并设置默认值price 100//构造函数constructor(name,age){// 构造函数内部的this实例化对象this.name namethis.age age// 动态添加属性(不推荐&#xff0c;查找麻烦)this.rank …

位运算算法(1)

目录 一、算法简述 191. 位1的个数 一、题目描述 二、思路解析 三、代码 338.比特位计数 一、题目描述 二、思路解析 三、代码 461.汉明距离 一、题目描述 二、思路解析 三、代码 声明&#xff1a;本博客涉及到的三道题均为一种做法的总结&#xff0c;建议先了解做…

ansible-tower安装

特别注意&#xff1a;不需要提前安装ansible&#xff0c;因为ansible tower中的setup.sh脚本会下载对应的ansible版本 ansible tower不支持Ubuntu系统,对cenos系统版本也有一定的限制&#xff0c;建议使用centos7.9。 准备一台全新的机器安装&#xff0c;因为ansible tower需要…

RISC-V/ARM mcu OpenOCD 调试架构解析

Risc-v/ARM mcu OpenOCD 调试架构解析 最近有使用到risc-v的单片机&#xff0c;所以了解了下risc-v单片机的编译与调试环境的搭建&#xff0c;面试时问到risc-v的调试可参看以下内容。 risc-v根据官方的推荐&#xff0c;调试器服务是选择OpenOCD&#xff0c;DopenOCD(开放片上…

2024多功能知识付费源码下载

多功能知识付费源码下载实现流量互导多渠道变现 源码介绍 资源变现类产品的许多优势&#xff0c;并剔除了那些无关紧要的元素&#xff0c;使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 支持&#xff1a;视频、音频、图文、文档…

【机器学习】揭秘无监督学习:机器如何自我学习发现数据奥秘

无监督学习&#xff1a;全面解析 引言 在机器学习的众多分支中&#xff0c;无监督学习因其在未标记数据上发现隐藏模式的能力而独树一帜。它不依赖于事先标记的输出&#xff0c;而是通过分析数据本身的结构和分布来揭示内在的关系和分类。本文深入探讨无监督学习的核心概念、…

2013年认证杯SPSSPRO杯数学建模C题(第一阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

学透Spring Boot 003 —— Spring 和 Spring Boot 常用注解(附面试题和思维导图)

这是 学透 Spring Boot 专栏 的第三篇&#xff0c;欢迎关注我&#xff0c;与我一起学习和探讨 Spring Boot 相关知识&#xff0c;学透 Spring Boot。 从面试题说起 今天我们通过一道和Spring Boot有关的常见面试题入手。 面试题&#xff1a;说说 Spring Boot 中有哪些常用注解…

图解PyTorch中的torch.gather函数和 scatter 函数

前言 torch.gather在目前基于 transformer or query based 的目标检测中&#xff0c;在最后获取目标结果时&#xff0c;经常用到。 这里记录下用法&#xff0c;防止之后又忘了。 介绍 torch.gather 官方文档对torch.gather()的定义非常简洁 定义&#xff1a;从原tensor中获…

[Java基础揉碎]注解

目录 介绍 基本的Annotation介绍 1) Override:限定某个方法&#xff0c;是重写父类方法,该注解只能用于方法 2) Deprecated: 用于表示某个程序元素(类&#xff0c;方法等)已过时 3) SuppressWarnings:抑制编译器警告 四大元注解 ​编辑 Retention ​编辑​编辑 Docume…

【MySQL】MySQL故障排查与环境优化

案例 MySQL是目前企业最常见的数据库之一 日常维护管理的过程中&#xff0c;会遇到很多故障 mysql默认配置无法满足高性能要求 数据流向 MySQL常见的故障案例 故障一 故障现象&#xff1a; ERROR 2002 (HY000): Cant connect to local MySQL server through socket data/m…

【计算机网络】select/poll

多路转接 - select/poll 一、I/O 多路转接之 select1. select 接口2. select 的使用3. select 的优缺点 二、I/O 多路转接之 poll1. poll 接口2. poll 的使用3. poll 与 select 的对比 一、I/O 多路转接之 select 多路转接属于 IO 复用方式的一种。系统提供 select() 函数来实…

如何在 Mac 上恢复已删除的数据

如果您丢失了 Mac 上的数据&#xff0c;请不要绝望。恢复数据比您想象的要容易&#xff0c;并且有很多方法可以尝试。 在 Mac 上遭受数据丢失是每个人都认为永远不会发生在他们身上的事情之一......直到它发生。不过&#xff0c;请不要担心&#xff0c;因为您可以通过多种方法…

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E)&#xff0c;⽣成树不同&#xff0c;每棵树的权&#xff08;即树中所有边上的权值之和&#xff09;也可能不同。设R为G的所有⽣成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称为G的…

解析网约车微服务中台架构:打造智能高效的出行平台

随着互联网技术的不断发展&#xff0c;网约车行业已经成为了城市出行的重要方式之一。为了应对市场竞争和用户需求的不断变化&#xff0c;各大网约车平台纷纷采用了微服务中台架构&#xff0c;以构建智能高效的出行平台。本文将深入探讨网约车微服务中台架构的核心概念、关键特…

反序列化漏洞

常见的反序列化流量特征&#xff1a; 像这种st2 045、068、shiro反序列化、fastjson这些java反序列化一类的流量特征 shiro就看cookie中Rememberme字段&#xff0c;什么都要从这里传 fastjson&#xff1a;可以在提交的包中找找json格式的数据&#xff0c;重点看一下有无rmi或…

【操作系统】想要更好的学习计算机,操作系统的知识必不可少!!!

操作系统的概念 导言一、日常生活中的操作系统二、计算机系统层次结构三、操作系统的定义3.1 控制和管理计算机资源3.2 组织、调度计算机的工作与资源的分配3.3 给用户和其他软件提供方便接口与环境3.4 总结 四、操作系统的目标和功能4.1 作为管理者4.1.1 处理机管理4.1.2 存储…

记录Xshell使用ed25519公钥免密链接SSH

试了半天&#xff0c;Xshell好像没办法导入linux生成的ssh公钥,因此需要以下步骤实现免密登录 结论&#xff0c;在linux公钥文件中&#xff0c;将客户端生成的ed25519公钥加上去即可(一个公钥单独一行) 1.使用Linux生成秘钥文件(不需要输入私钥密码passphrase)或者直接创建一…