新增检查组
需求分析
检查组其实就是多个检查项的集合,例如有一个检查组为“一般检查”,这个检查组可以包括多个检查项:身高、体重、收缩压、舒张压等。所以在添加检查组时需要选择这个检查组包括的检查项。
检查组对应的实体类为CheckGroup,对应的数据表为t_checkgroup。检查组和检查项为多对多关系,所以需要中间表t_checkgroup_checkitem进行关联。
新增检查组
完善页面
检查组管理页面对应的是checkgroup.html页面,根据产品设计的原型已经完成了页面基本结构的编写,现在需要完善页面动态效果。
弹出新增窗口
页面中已经提供了新增窗口,只是出于隐藏状态。只需要将控制展示状态的属性dialogFormVisible改为true即可显示出新增窗口。点击新建按钮时绑定的方法为handleCreate,所以在handleCreate方法中修改dialogFormVisible属性的值为true即可。同时为了增加用户体验度,需要每次点击新建按钮时清空表单输入项。
由于新增检查组时还需要选择此检查组包含的检查项,所以新增检查组窗口分为两部分信息:基本信息和检查项信息,如下图:
新建按钮绑定单击事件,对应的处理函数为handleCreate
<el-button type="primary" class="butT" @click="handleCreate()">新建</el-button>
// 重置表单 resetForm() { this.formData = {}; }, // 弹出添加窗口 handleCreate() { this.resetForm(); this.dialogFormVisible = true; }
动态展示检查项列表
现在虽然已经完成了新增窗口的弹出,但是在检查项信息标签页中需要动态展示所有的检查项信息列表数据,并且可以进行勾选。具体操作步骤如下:
(1)定义模型数据
tableData:[],//新增和编辑表单中对应的检查项列表数据 checkitemIds:[],//新增和编辑表单中检查项对应的复选框,基于双向绑定可以进行回显和数据提交
(2)动态展示检查项列表数据,数据来源于上面定义的tableData模型数据
<table class="datatable"> <thead> <tr> <th>选择</th> <th>项目编码</th> <th>项目名称</th> <th>项目说明</th> </tr> </thead> <tbody> <tr v-for="c in tableData"> <td> <input :id="c.id" v-model="checkitemIds" type="checkbox" :value="c.id"> </td> <td><label :for="c.id">{{c.code}}</label></td> <td><label :for="c.id">{{c.name}}</label></td> <td><label :for="c.id">{{c.remark}}</label></td> </tr> </tbody> </table>
(3)完善handleCreate方法,发送ajax请求查询所有检查项数据并将结果赋值给tableData模型数据用于页面表格展示
// 弹出添加窗口 handleCreate() { this.dialogFormVisible = true; this.resetForm(); //默认切换到第一个标签页(基本信息) this.activeName='first'; //重置 this.checkitemIds = []; //发送ajax请求查询所有检查项信息 axios.get("/checkitem/findAll.do").then((res)=> { if(res.data.flag){ //将检查项列表数据赋值给模型数据用于页面表格展示 this.tableData = res.data.data; }else{ this.$message.error(res.data.message); } }); }
(4)分别在CheckItemController、CheckItemService、CheckItemServiceImpl、CheckItemDao、CheckItemDao.xml中扩展方法查询所有检查项数据
CheckItemController:
//查询所有 @RequestMapping("/findAll") public Result findAll(){ List<CheckItem> checkItemList = checkItemService.findAll(); if(checkItemList != null && checkItemList.size() > 0){ Result result = new Result(true, MessageConstant.QUERY_CHECKITEM_SUCCESS); result.setData(checkItemList); return result; } return new Result(false,MessageConstant.QUERY_CHECKITEM_FAIL); }
CheckItemService:
public List<CheckItem> findAll();
CheckItemServiceImpl:
public List<CheckItem> findAll() { return checkItemDao.findAll(); }
CheckItemDao:
public List<CheckItem> findAll();
CheckItemDao.xml:
<select id="findAll" resultType="com.itheima.pojo.CheckItem"> select * from t_checkitem </select>
提交请求
当用户点击新增窗口中的确定按钮时发送ajax请求将数据提交到后台进行数据库操作。提交到后台的数据分为两部分:检查组基本信息(对应的模型数据为formData)和检查项id数组(对应的模型数据为checkitemIds)。
为确定按钮绑定单击事件,对应的处理函数为handleAdd
<el-button type="primary" @click="handleAdd()">确定</el-button>
完善handleAdd方法
//添加 handleAdd () { //发送ajax请求将模型数据提交到后台处理 axios.post( "/checkgroup/add.do?checkitemIds=" + this.checkitemIds, this.formData ) .then((response)=> { //关闭新增窗口 this.dialogFormVisible = false; if(response.data.flag){ //新增成功,弹出成功提示 this.$message({ message: response.data.message, type: 'success' }); }else{ //新增失败,弹出错误提示 this.$message.error(response.data.message); } }).finally(()=> { this.findPage(); }); }
后台代码
Controller
在health_backend工程中创建CheckGroupController
package com.itheima.controller; import com.alibaba.dubbo.config.annotation.Reference; import com.itheima.constant.MessageConstant; import com.itheima.entity.PageResult; import com.itheima.entity.QueryPageBean; import com.itheima.entity.Result; import com.itheima.pojo.CheckGroup; import com.itheima.pojo.CheckItem; import com.itheima.service.CheckGroupService; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 检查组管理 */ @RestController @RequestMapping("/checkgroup") public class CheckGroupController { @Reference private CheckGroupService checkGroupService; //新增 @RequestMapping("/add") public Result add(@RequestBody CheckGroup checkGroup,Integer[] checkitemIds){ try { checkGroupService.add(checkGroup,checkitemIds); }catch (Exception e){ //新增失败 return new Result(false, MessageConstant.ADD_CHECKGROUP_FAIL); } //新增成功 return new Result(true,MessageConstant.ADD_CHECKGROUP_SUCCESS); } }
服务接口
在health_interface工程中创建CheckGroupService接口
package com.itheima.service; import com.itheima.entity.PageResult; import com.itheima.pojo.CheckGroup; import java.util.List; /** * 检查组服务接口 */ public interface CheckGroupService { void add(CheckGroup checkGroup,Integer[] checkitemIds); }
服务实现类
在health_service_provider工程中创建CheckGroupServiceImpl实现类
package com.itheima.service; import com.alibaba.dubbo.config.annotation.Service; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.itheima.dao.CheckGroupDao; import com.itheima.entity.PageResult; import com.itheima.pojo.CheckGroup; import com.itheima.pojo.CheckItem; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 检查组服务 */ @Service(interfaceClass = CheckGroupService.class) @Transactional public class CheckGroupServiceImpl implements CheckGroupService { @Autowired private CheckGroupDao checkGroupDao; //添加检查组合,同时需要设置检查组合和检查项的关联关系 public void add(CheckGroup checkGroup, Integer[] checkitemIds) { checkGroupDao.add(checkGroup); setCheckGroupAndCheckItem(checkGroup.getId(),checkitemIds); } //设置检查组合和检查项的关联关系 public void setCheckGroupAndCheckItem(Integer checkGroupId,Integer[] checkitemIds){ if(checkitemIds != null && checkitemIds.length > 0){ for (Integer checkitemId : checkitemIds) { Map<String,Integer> map = new HashMap<>(); map.put("checkgroup_id",checkGroupId); map.put("checkitem_id",checkitemId); checkGroupDao.setCheckGroupAndCheckItem(map); } } } }
Dao接口
创建CheckGroupDao接口
package com.itheima.dao; import com.github.pagehelper.Page; import com.itheima.pojo.CheckGroup; import java.util.List; import java.util.Map; /** * 持久层Dao接口 */ public interface CheckGroupDao { void add(CheckGroup checkGroup); void setCheckGroupAndCheckItem(Map map); }
Mapper映射文件
创建CheckGroupDao.xml映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.itheima.dao.CheckGroupDao"> <!--新增--> <insert id="add" parameterType="com.itheima.pojo.CheckGroup"> <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() </selectKey> insert into t_checkgroup(code,name,sex,helpCode,remark,attention) values (#{code},#{name},#{sex},#{helpCode},#{remark},#{attention}) </insert> <!--设置检查组和检查项的关联关系--> <insert id="setCheckGroupAndCheckItem" parameterType="hashmap"> insert into t_checkgroup_checkitem(checkgroup_id,checkitem_id) values (#{checkgroup_id},#{checkitem_id}) </insert> </mapper>