传智健康_day3

news2024/11/28 17:52:46

本章对检查组管理进行开发

一.新增检查组

1.修改新增弹层可见属性,添加重置表单功能

2.动态刷新检查组包含的检查项信息

 <tr v-for="c in tableData">

使用for循环来遍历查询出tableData中的数据

tableData是一个数组对象,定义在VUE中的一个模型数据,对应当前能够查询到的所有检查项的数据。

里面的数据应该是从数据库中搜索出来的所有检查项信息,包装成一个检查项对象,然后将所有的信息放到一个集合中,最终转成一个JSON数据,也就是tableData。

遍历tableData将里面的值展示在表格中就可以实现前端效果

如何为tableData赋值:发送一个ajax请求,查出所有的数据,把这个数据赋值给tableData即可

3.如何实现查询所有数据

前端代码 

//发送ajax请求查询所有检查项信息,转为json,赋值给tableData
                    axios.get("/checkitem/findAll.do").then((res) => {
                        if(res.data.flag){//查询操作成功
                            this.tableData = res.data.data;
                        }else{//查询数据操作失败
                            this.$message.error(res.data.message);
                        }
                    });
                },

复选框效果,点击第二三四列也可以让复选框选中

 标签的id都和input的id相同,所以会实现复选框效果

 

 选中的检查项绑定到了模型数据中,复选框绑定的模型数据对应的值:value,提交时模型数据对应的value值进行提交即可

4.新增检查组_表单提交

重置复选框表单和新建检查组时的默认展示界面

当点击新增检查组时,v-model对应的模型数据就是默认展示的tab,所以将activeName设置为first,就是默认展示name为first的tab界面

this.checkitemIds = [];//重置复选框
//添加
                handleAdd () {
                    // alert(this.checkitemIds);
                    //表单校验
                    //发送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();
                    });
                },

注意这里的表单检验功能没有做,后续需要补充

后端代码:

分别在CheckGroupController、CheckGroupService、CheckGroupServiceImpl、CheckGroupDao、CheckGroupDao.xml中扩展方法查询所有检查项数据

@RestController
@RequestMapping("/checkgroup")
public class CheckGroupController {
    @Reference
    private CheckGroupService checkGroupService;
    //新增检查组
    @RequestMapping("/add")
    public Result add(@RequestBody CheckGroup checkGroup,Integer[] checkitemIds){//前端提交的是json数据,需要添加注解@RequestBody
        try{
            checkGroupService.add(checkGroup,checkitemIds);
        }catch (Exception e){
            e.printStackTrace();
            return new Result(false, MessageConstant.ADD_CHECKGROUP_FAIL);
        }
        return new Result(true,MessageConstant.ADD_CHECKGROUP_SUCCESS);
    }
}
public interface CheckGroupService {
    public void add(CheckGroup checkGroup, Integer[] checkitemIds);
}
@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {
    //新增检查组,同时需要让检查组关联检查项
    @Autowired
    private CheckGroupDao checkGroupDao;
    public void add(CheckGroup checkGroup, Integer[] checkitemIds){
        //新增检查组,操作检查组表
        checkGroupDao.add(checkGroup);
        //设置检查组和检查项的多对多关联关系,操作中间关系表
        Integer checkGroupId = checkGroup.getId();
        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);
            }
        }
    }
}
public interface CheckGroupDao {
    public void add(CheckGroup checkGroup);
    public void setCheckGroupAndCheckItem(Map map);
}
<mapper namespace="com.itheima.dao.CheckGroupDao">
    <!--插入检查组数据-->
    <insert id="add" parameterType="com.itheima.pojo.CheckGroup">
        <!--新增的检查组记录的id是自增的,通过mybatis框架提供的selectKey标签获得自增产生的id,并且赋值给CheckGroup实体类的id属性 -->
        <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="map">
        insert into t_checkgroup_checkitem(checkgroup_id,checkitem_id)
        values
        (#{checkgroup_id},#{checkitem_id})
    </insert>

</mapper>

LAST_INSERT_ID(),获得新建记录的ID

selectKey的作用是获得新建的记录的ID

order="AFTER",有此属性的sql语句将会在执行完其它sql语句再执行本语句

keyProperty="id",将获得的ID封装给实体类的id

二.检查组分页查询

前端代码

1.findPage()

封装分页参数param(页码,每页显示记录数,查询条件

发送ajax请求,为VUE的模型对象赋值,进行前端展示

2.findPage()调用时机

页面加载完成时(钩子函数

用户点击查询按钮时(为查询按钮绑定单击事件

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

后台代码

1.Controller

参数的传递有以下两种方法

PageResult pageResult = checkGroupService.pageQuery(
    queryPageBean.getCurrentPage(), 
    queryPageBean.getPageSize(), 
    queryPageBean.getQueryString()
  );
  return pageResult;
//调用Service方法,在Controller中对queryPageBean的三个参数进行获取
return checkGroupService.pageQuery(queryPageBean);
//直接将queryPageBean传递给Service,在Service中对queryPageBean三个参数进行操作

2.Service

3.ServiceImpl

分页查询使用mybatis提供的分页查询助手插件

PageHelper.startPage(currentPage,pageSize);

 4.Dao接口

创建方法

5.Mapper文件

三.编辑检查组

前端代码

1.基本信息回显

检查组信息回显,检查项信息回显

2.提交更新好的检查组内容

总共发送三次ajax请求

handleUpdate(row) {
                    // 弹出编辑窗口
                    this.dialogFormVisible4Edit = true;
                    //1.发送ajax请求,根据id查询当前检查组信息,用于前端回显
                    axios.get("/checkgroup/findById.do?id=" + row.id).then((res) => {
                        if(res.data.flag){
                            //本次操作成功
                            this.formData = res.data.data;
                        }else{
                            // 本次操作失败
                            this.$messages.error(res.data.messages);
                        }
                    });
                    //2.发送ajax请求查询所有检查项信息,转为json,赋值给tableData,用于展示所有检查项
                    axios.get("/checkitem/findAll.do").then((res) => {
                        if(res.data.flag){//查询操作成功
                            this.tableData = res.data.data;
                            //3.发送ajax请求,查询当前检查组包含的所有检查项id,用于展示检查组包含的检查项(页面复选框回显
                            axios.get("/checkgroup/findCheckItemIdsByCheckGroupId.do?id=" + row.id).then((res) =>{
                                this.checkitemIds = res.data.data;
                            });
                        }else{//查询数据操作失败
                            this.$message.error(res.data.message);
                        }
                    });
                },

2.提交更新后的表单 

//编辑
                handleEdit () {
                    //发送ajax请求,将修改后的表单数据(检查组信息,检查项信息)提交到后台进行处理
                    axios.post("/checkgroup/edit.do?checkitemIds=" + this.checkitemIds,this.formData).then((res) =>{
                        //关闭编辑窗口
                        this.dialogFormVisible4Edit = false;
                        if(response.data.flag){
                            //编辑成功,弹出成功提示
                            this.$message({
                                message: response.data.message,
                                type: 'success'
                            });
                        }else{
                            //编辑失败,弹出错误提示
                            this.$message.error(response.data.message);
                        }
                    }).finally(()=> {
                        this.findPage();
                    });
                },

后端代码

前端发送了一个ajax请求,后端的Controller就要提供一个方法来应对

1.findById,findAll

2.findCheckItemIdsByCheckGroupId    //根据检查组ID查询关联的检查项ID

3.edit

Controller

service

serviceImpl

其中更新检查项功能,检查项关联的检查组如果减少或增加或不变,或者原先的检查组减少,新增了其他检查组。后台如何实现?

可以直接把原先的检查组记录直接删除,因为编辑检查组界面会显示原先的检查项记录,在数据库中对原先的记录删除,前端的记录不变,对检查组复选框进行操作,得到的记录就是更新后的记录。

//编辑检查组信息,同时需要关联检查项
    public void edit(CheckGroup checkGroup, Integer[] checkitemIds) {
        //修改检查组基本信息,操作检查表t_checkgroup表
        checkGroupDao.edit(checkGroup);
        //修改当前检查组关联的检查项,操作中间关系表
        checkGroupDao.deleteAssociation(checkGroup.getId());
        //重新建立当前检查组和检查表的关联关系,可以直接使用添加检查组时写的建立关联方法
        Integer checkGroupId = checkGroup.getId();
        this.setCheckGroupAndCheckItem(checkGroupId,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

mapper

四.删除检查组

1.前端代码

弹出确认删除弹框

首先将检查组和检查项的关联关系删除,再对检查组进行删除

// 删除
                handleDelete(row) {
                    this.$confirm("确定要删除这条数据吗?","提示",{
                        type:"warning"
                    }).then(()=>{
                        //用户点击确定按钮,发送ajax请求,将要删除数据的id提交到controller进行处理
                        axios.get("/checkgroup/delete.do?id=" + row.id).then((res)=>{
                            if(res.data.flag){
                                //执行成功
                                //弹出删除成功提示信息
                                this.$message({
                                    type:"success",
                                    message:res.data.message
                                });
                            }else{
                                //执行失败
                                this.$message.error(res.data.message);
                            }
                            this.findPage();
                        });
                    }).catch(()=>{
                        this.$message({
                            type:"info",
                            message:"操作取消"
                        });
                    });
                }

2.后端代码

分别在CheckGroupController、CheckGroupService、CheckGroupServiceImpl、CheckGroupDao、CheckGroupDao.xml中扩展方法删除根据ID查询的关联记录和检查项记录

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hadoop分布式安装

文章目录1. 将安装包hadoop-3.1.3.tar.gz上次至linux中2. 进行解压操作3. 修改目录名称4. 配置环境变量5. 远程传输5.1 scp远程传输6. 免密登录7. 集群规划8. 修改自定义配置文件8.1 hadoop-env.sh8.2 core-site.xml8.3 hdfs-site.xml8.4 mapred-site.xml8.5 yarn-site.xml8.6 …

ReactNative入门

React基本用法&#xff1a; react与js不同的点在于 react使用的是虚拟DOM js是真实DOM 作用&#xff1a;当有新的数据填充 可以复用之前的&#xff0c;而js需要整体重新渲染 创建虚拟DOM还可以使用jsx语法直接声明&#xff1a; 注意要用babel标签将jsx转化为js 但是建议采用j…

UNIX环境高级编程——进程环境

7.1 引言 本章主要讲解了进程的环境。 7.2 main函数 C程序总是从main函数开始执行&#xff0c;其函数原型为&#xff1a; int main(int argc, char *argv[]);argc是命令行参数的数目&#xff0c;argv是指向参数的各个指针所构成的数组&#xff1b;当内核执行C程序时&#x…

SpringBoot集成Kafka详解

一、使用idea创建SpringBoot项目 1.1 使用Spring Initializr创建一个SpringBoot程序 点击Next。 1.2 添加依赖 依赖说明&#xff1a; Lombok简化实体类开发。 Spring Web让项目集成web开发所有依赖&#xff0c;包括Spring MVC&#xff0c;内置tomcat等。 Spring for Apache…

HNU-操作系统OS-2023期中考试复习-刷题

往年期中卷极难获得&#xff0c;这里找了几套卷子。可以看看。 因为往年都是从第一周开始上课的&#xff0c;所以进度会快一点&#xff0c;这学期是从第四周开始上课的&#xff0c;所以进程会慢些&#xff0c;讲到第九章所以只考到第九章。 同样因为太忙了&#xff0c;答案找…

图像分类卷积神经网络模型综述

图像分类卷积神经网络模型综述遇到问题 图像分类&#xff1a;核心任务是从给定的分类集合中给图像分配一个标签任务。 输入&#xff1a;图片 输出&#xff1a;类别。 数据集MNIST数据集 MNIST数据集是用来识别手写数字&#xff0c;由0~9共10类别组成。 从MNIST数据集的SD-1和…

ctfshow web入门web119-124

1.web119 和118题类似&#xff0c;只不过是过滤了PATH 0可以用任何字符代替&#xff0c;比如A,{A},A,{0} KaTeX parse error: Expected }, got # at position 2: {#̲SHLVL}1&#xff0c;或者{##},${#?} {PHP_VERSION:~A}2,php版本为x.x.2时 ${#IFS}3(linux下是3&#xff0c;…

IntelliJ IDEA 2023.1正式发布,Maven项目大提速支持Apache Dubbo

你好&#xff0c;我是YourBatman&#xff1a;做爱做之事❣交配交之人。 &#x1f4da;前言 一年一个大版本&#xff0c;共计3个中型版本&#xff0c;北京时间2023年3月月29日终于迎来了IntelliJ IDEA今年的首个版本2023.1。老规矩&#xff0c;吃肉之前&#xff0c;可以先把这…

顺丰科技x腾讯安全iOA联合案例获云安全联盟CSA 2022安全革新奖

近年来&#xff0c;随着云计算、大数据、物联网等技术的加速创新和应用&#xff0c;一场数字化的变革开始席卷各行各业。远程办公、业务协同、分支互联等需求涌现&#xff0c;随之而来的还有更加复杂多元的高级网络攻击。在此背景下&#xff0c;传统的基于边界的网络安全防护理…

矩阵键盘+CH559制作国产USB矩阵键盘

矩阵键盘+CH559制作国产USB矩阵键盘 文章目录 矩阵键盘+CH559制作国产USB矩阵键盘为什么选择CH559作为主控芯片?如何实现该款矩阵USB键盘?如何将矩阵键盘的信号转化为USB键盘信号?原材料: 矩阵键盘(附带行列键码定义)CH559开发板将矩阵键盘的所有排线连接到单片机的GPIO引…

基于stm32mp157 linux开发板ARM裸机开发教程5:ARM微处理器指令系统(连载中)

前言&#xff1a; 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中&#xff0c;使其内容更加丰富&#xff0c;讲解更加细致&#xff0c;全文所使用的开发平台均为华清远见FS-MP1A开发板&#xff08;STM32MP157开发板&#xff09; 针对对FS-MP1A开发板&…

Python | Python的自我介绍(前世今生)

本文概要 本篇文章主要介绍Python这门语言的前世今生&#xff0c;适合刚入门的小白或者想了解Python历史的同学&#xff0c;文中描述很详细&#xff0c;具有一定的学习价值&#xff0c;感兴趣的小伙伴快来一起学习吧。 个人简介 ☀️大家好&#xff01;我是新人小白博主朦胧的…

【机器学习】样本不均衡(class-imbalance)——解决方案与问题思考

目录问题提出问题重述与再理解第一个问题&#xff1a;假如样本不均衡&#xff0c;哪种分类器的泛化性能较好&#xff1f;第二个问腿&#xff1a;在样本不均衡的情况下&#xff0c;如何获得更健壮的模型问题解决方法样本不均衡对机器学习模型会造成什么影响什么模型适合样本不均…

小黑今天上午着急忙慌实习公司楼下笔试,晚上准备和尚香疯狂星期四明天继续现场笔试的leetcode之旅:1091. 二进制矩阵中的最短路径

小黑代码1 class Solution:def shortestPathBinaryMatrix(self, grid: List[List[int]]) -> int:# 一定无解的情况if grid[0][0] 1 or grid[-1][-1] 1:return -1# 矩阵长度n len(grid)# 起点即终点if n 1:return 1# 访问集合seen {(0, 0)}# 初始化队列q collections.…

射频功率放大器在空气耦合超声检测系统中的应用

实验名称&#xff1a;空气耦合超声检测系统研究方向&#xff1a;超声测试设备&#xff1a;ATA-8202射频功率放大器、探头、ATA-5620前置放大器、超声波接收器、数据采集卡、计算机。实验过程&#xff1a;图&#xff1a;空气耦合超声检测锂电池系统锂电池空气耦合超声检测具体过…

TryHackMe-Year of the Dog(Linux渗透测试)

Year of the Dog 谁知道呢&#xff1f;狗咬了一口&#xff01; 端口扫描 循例nmap Web枚举 进80 用gobuster扫了一圈没有任何发现&#xff0c;图像也没有隐写 在主页的请求头的cookie有一个id 改成其他错误值会导致异常&#xff0c;看见叫id&#xff0c;习惯性加个了引号 爆…

【java】集合类

文章目录集合根接口LIST列表迭代器Queue|Deque|PriorityQueueSet集合HashSetLinkedHashSetTreeSet键盘读入MapHashMapLinkedHashMapStream流stream()ints()Collections工具类集合根接口 所有的集合类最终都是实现自集合根接口的&#xff0c;比如ArrayList类&#xff0c;它的祖先…

走向国际市场,怎样用Facebook广告抢占商机?

在当今全球化的商业世界中&#xff0c;企业要想在国际市场中占据一席之地&#xff0c;除了打造优质产品和服务外&#xff0c;有效的营销手段也是至关重要的。 而Facebook作为全球最大的社交媒体平台&#xff0c;其广告投放服务为企业提供了一个快速、便捷、有效的推广途径。那…

安全校验和框架---JWT和Shrio

安全架构 加密 分类 可逆加密和不可逆加密 不可逆加密&#xff1a;常见的不可逆加密算法有MD5&#xff0c;HMAC&#xff0c;SHA1、SHA-224、SHA-256、SHA-384&#xff0c;和SHA-512&#xff0c;其中SHA-224、SHA-256、SHA-384&#xff1b; 可逆加密分为对称加密和非对称加密…

2023最新面试题-Java-5

自定义类加载器 1. 为什么需要自定义类加载器 网上的大部分自定义类加载器文章&#xff0c;几乎都是贴一段实现代码&#xff0c;然后分析一两句自定义ClassLoader的 原理。但是我觉得首先得把为什么需要自定义加载器这个问题搞清楚&#xff0c;因为如果不明白它的作用的情况 …