传智健康项目day02(中)

简介: 传智健康项目day02

4. 检查项分页

本项目所有分页功能都是基于ajax的异步请求来完成的,请求参数和后台响应数据格式都使用json数据格式。


请求参数包括页码、每页显示记录数、查询条件。


请求参数的json格式为:{currentPage:1,pageSize:10,queryString:’‘itcast’’}


后台响应数据包括总记录数、当前页需要展示的数据集合。


响应数据的json格式为:{total:1000,rows:[]}


如下图:

dfcbb87ecca4d9ae951271714cf8555c.png


4.1 完善页面

4.1.1 定义分页相关模型数据

pagination: {//分页相关模型数据
  currentPage: 1,//当前页码
  pageSize:10,//每页显示的记录数
  total:0,//总记录数
  queryString:null//查询条件
},
dataList: [],//当前页要展示的分页列表数据

4.1.2 定义分页方法

在页面中提供了findPage方法用于分页查询,为了能够在checkitem.html页面加载后直接可以展示分页数据,可以在VUE提供的钩子函数created中调用findPage方法

//钩子函数,VUE对象初始化完成后自动执行
created() {
  this.findPage();
}
 //分页查询
findPage() {
    //分页参数
    var param = {
        currentPage:this.pagination.currentPage,//页码
        pageSize:this.pagination.pageSize,//每页需要显示的记录数
        queryString:this.pagination.queryString//查询条件
    };
    //请求后台
    axios.post("/checkItem/findPage.do",param).then( res=>{
        //为模型数据赋值,基于VUE的双向绑定展示到页面上
        this.pagination.total  =res.data.total;
        this.dataList = res.data.rows;
    })
}

4.1.3 完善分页方法执行时机

除了在created钩子函数中调用findPage方法查询分页数据之外,当用户点击查询按钮或者点击分页条中的页码时也需要调用findPage方法重新发起查询请求。

为查询按钮绑定单击事件,调用findPage方法

<el-button @click="findPage()" class="dalfBut">查询</el-button>

为分页条组件绑定current-change事件,此事件是分页条组件自己定义的事件,当页码改变时触发,对应的处理函数为handleCurrentChange

<el-pagination
               class="pagiantion"
               @current-change="handleCurrentChange"
               :current-page="pagination.currentPage"
               :page-size="pagination.pageSize"
               layout="total, prev, pager, next, jumper"
               :total="pagination.total">
</el-pagination>

定义handleCurrentChange方法

//切换页码
handleCurrentChange(currentPage) {
  //currentPage为切换后的页码
  this.pagination.currentPage = currentPage;
  this.findPage();
}

4.2 后台代码

4.2.1 Controller

在CheckItemController中增加分页查询方法

//分页查询
@RequestMapping("/findPage")
public PageResult findPage(@RequestBody QueryPageBean queryPageBean){
    PageResult pageResult = checkItemService.pageQuery(queryPageBean);
    return pageResult;
}

4.2.2 服务接口

在CheckItemService服务接口中扩展分页查询方法

public PageResult pageQuery(QueryPageBean queryPageBean);

4.2.3 服务实现类

在CheckItemServiceImpl服务实现类中实现分页查询方法,基于Mybatis分页助手插件实现分页

//分页查询
@Override
public PageResult pageQuery(QueryPageBean queryPageBean) {
    Integer currentPage = queryPageBean.getCurrentPage();//当前页
    Integer pageSize = queryPageBean.getPageSize();//每页显示的条数
    String queryString = queryPageBean.getQueryString();//查询条件
    //解决一个小bug:当在当前页搜索非当前页的内容时,出现查找不到的情况..
    //解决办法:如果搜索的由内容时,则从第一个开始进行搜索..
    if(queryString!=null&&queryString.trim().length()!=0){//
        currentPage = 1;
    }
    // if(queryString!=null&&queryString.trim()!=""){//这样不可以,为什么呢??
    //     currentPage = 1;
    // }
    //完成分页查询,基于Mybatis框架提供的分页助手插件完成
    PageHelper.startPage(currentPage,pageSize); //底层基于ThreadLocal,最后会形成limt语句,追加到sql后面
    Page <CheckItem> page = checkItemMapper.selectByCondition(queryString);
    long total = page.getTotal();
    List <CheckItem> rows = page.getResult();
    return new PageResult(total,rows);
}

4.2.4 Dao接口

在CheckItemDao接口中扩展分页查询方法

public Page<CheckItem> selectByCondition(String queryString);

4.2.5 Mapper映射文件

在CheckItemDao.xml文件中增加SQL定义

<select id="selectByCondition" parameterType="string" 
        resultType="com.itheima.pojo.CheckItem">
  select * from t_checkitem
  <if test="value != null and value.length > 0">
    where code = #{value} or name = #{value}
  </if>
</select>

5. 删除检查项

5.1 完善页面

为了防止用户误操作,点击删除按钮时需要弹出确认删除的提示,用户点击取消则不做任何操作,用户点击确定按钮再提交删除请求。

5.1.1 绑定单击事件

需要为删除按钮绑定单击事件,并且将当前行数据作为参数传递给处理函数

<el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button
// 删除
handleDelete(row) {
  alert(row.id);
}

5.1.2 弹出确认操作提示

用户点击删除按钮会执行handleDelete方法,此处需要完善handleDelete方法,弹出确认提示信息。ElementUI提供了$confirm方法来实现确认提示信息弹框效果

// 删除
handleDelete(row) {
  //alert(row.id);
  this.$confirm("确认删除当前选中记录吗?","提示",
                {type:'warning'}
   ).then(()=>{
    //点击确定按钮时只需此处代码
    alert('用户点击的是确定按钮');
  }).catch(()=>{
      alert('用户点击的是取消按钮');
   })
}

5.1.3 发送请求

如果用户点击确定按钮就需要发送ajax请求,并且将当前检查项的id作为参数提交到后台进行删除操作

// 删除
handleDelete(row) {//row其实就是一个json对象,json的结构:{"age":"0-100","attention":"无","code":"0011","id":38,"name":"白细胞计数","price":10.0,"remark":"白细胞计数","sex":"0","type":"2"}
    // alert(row.id);
    this.$confirm("你确认要删除当前数据吗?","提示",{
        type:"warning"
    }).then(()=>{
        //用户点击确认按钮,发送ajax请求,将将检查项ID提交到Controller进行处理
        //alert("用户点击了确认..")
        axios.get("/checkItem/delete.do?id="+row.id).then((res)=>{
            if(res.data.flag){
                this.$message({
                    type:'success',
                    message:res.data.message
                });
                //重新进行分页查询
                this.findPage();
            }else{
                //执行失败.
                this.$message.error(res.data.message);
            }
        })
    }).catch(()=>{
        this.$message({
            type:'info',
            message:"操作已取消!"
        })
    })
}

5.2 后台代码

5.2.1 Controller

在CheckItemController中增加删除方法

//删除检查项
@RequestMapping("/delete")
public Result delete(Integer id){
    try {
        checkItemService.deleteById(id);
    }catch (Exception e){
        return new Result(false,MessageConstant.DELETE_CHECKITEM_FAIL);
    }
    return new Result(true,MessageConstant.DELETE_CHECKITEM_SUCCESS);
}

5.2.2 服务接口

在CheckItemService服务接口中扩展删除方法

public void delete(Integer id);


5.2.3 服务实现类

注意:不能直接删除,需要判断当前检查项是否和检查组关联,如果已经和检查组进行了关联则不允许删除

//删除检查项
@Override
public void deleteById(Integer id) {
    //查询当前检查项是否和检查组关联
    Integer count = checkItemMapper.findCountByCheckItemId(id);
    if (count>0){
        //当前项被引用,不能删除
        throw new RuntimeException("当前项被引用,不能删除");//抛出异常,controller返回操作失败..
    }
    checkItemMapper.deleteById(id);
}

5.2.4 Dao接口

在CheckItemDao接口中扩展方法findCountByCheckItemId和deleteById

public void deleteById(Integer id);
public long findCountByCheckItemId(Integer checkItemId);

5.2.5 Mapper映射文件

在CheckItemDao.xml中扩展SQL语句

<!--删除-->
<delete id="deleteById" parameterType="int">
  delete from t_checkitem where id = #{id}
</delete>
<!--根据检查项id查询中间关系表-->
<select id="findCountByCheckItemId" resultType="long" parameterType="int">
  select count(*) from t_checkgroup_checkitem where checkitem_id = #{checkitem_id}
</select>
相关文章
|
安全 Java 测试技术
【开题报告】基于SpringBoot的高校就业管理系统的设计与实现
【开题报告】基于SpringBoot的高校就业管理系统的设计与实现
509 0
|
7月前
|
安全 JavaScript Java
社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)
社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)
74 0
|
7月前
|
运维 安全 数据库
PAM案例——某三甲医院
x医院现有业务系统100+,所对接的数据库已超300+,业务系统再持续扩大。针对目前数据库访问该医院数据中心技术人员是这样描述的:内部人员和第三方人员访问数据库的访问路径、访问方式难以管理,而且很难从根源消除这种现象,有时发生紧急情况他们会绕过审计系统直接访问数据库去修改数据,他们登录数据库后干了什么、改了什么、甚至删除了什么我们全都不知道。
79 0
PAM案例——某三甲医院
|
7月前
|
前端开发 Java 数据库连接
基于SpringBoot的乡村医生诊疗系统的设计与实现
基于SpringBoot的乡村医生诊疗系统的设计与实现
|
SQL 前端开发 数据库
|
SQL 前端开发 数据可视化
|
SQL 前端开发 JavaScript
传智健康day03 预约管理-检查组管理1
传智健康day03 预约管理-检查组管理1
传智健康day03 预约管理-检查组管理1
|
XML 缓存 Java
传智健康day07 页面静态化
传智健康day07 页面静态化
传智健康day07 页面静态化
|
移动开发 Dubbo Java
传智健康day06 移动端开发-体检预约1
传智健康day06 移动端开发-体检预约1
传智健康day06 移动端开发-体检预约1
|
运维 监控 Java
传智健康day06 移动端开发-体检预约2
传智健康day06 移动端开发-体检预约2
传智健康day06 移动端开发-体检预约2