记录一次vue的增(insert)查(select)。

这次分到了一个完整的模块,记录一下。以便下次可以借鉴!
首先是查询的前端开始(只记录JS部分):
1.1.1按条件查询的JS:
在这里插入图片描述

  /**
       * 分页查询
       */
      loadTableData(pageSize,pageNum){
        if(this.queryData.occurrenceTime != ''){
          let time = commonJs.formatDate(this.queryData.occurrenceTime);
          this.queryData.occurrenceTime = time.replace(/\-/g,' ');
        }
        accidentCApi.getAccidentQuery(pageSize,pageNum,this.queryData).then(
          (response)=>{
            this.tableData = response.data.data.list;
            /*this.total = response.data.data.total;*/
          }
        );
      },

执行初始化函数:
在这里插入图片描述

1.1.2 写好前端的查询字段:

data () {
      return {
        apiUrl,
        accidentId:'', // ID
        way:'',//0:详情  1:新增  2:编辑
        ruleForm: {
         memberName:'',
          bedName:'',
          occurrenceTime:'',
          levelName:'',
          personnel:'',
          chargePenson:'',
          className:'',
          reason:'',
          remark:'',
          measures:'',
          result:'',
          paths:[], // 图片数组
        },
      }
    },

在这里插入图片描述
这样就可以展示数据了:
在这里插入图片描述
1.1.3前端描述完毕,可以描述后台的分页查询代码;
1.1.3–1 controller层代码:

 /**
     *   事故登记---分页查询--条件搜索
     * @param pageSize
     * @param pageNum
     * @param
     * @return
     */
    @POST(value = "/v1/accident/{pageSize}/{pageNum}")
    @ApiOperation(httpMethod = "POST", value = "[日常管理]-[事故登记分页查询]", notes = "事故登记分页查询", response = AccidentCDTO.class)
    public String getAccidentInfoList(
            @ApiParam(name = "pageSize", value = "分页大小", required = true) @PathVariable("pageSize") int pageSize,
            @ApiParam(name = "pageNum", value = "当前页数", required = true) @PathVariable("pageNum") int pageNum,
            @ApiParam(name = "query", value = "查询条件", required = false)@RequestBody AccidentQueryCDTO query) {

        return ResultContent(ResultStatus.SUCCESS, accidentCService.listAccidentQuery(query, pageNum, pageSize));
    }

在这里插入图片描述

1.1.3–2service层和service实现

  @Override
    public PageInfo<AccidentCDTO> listAccidentQuery(AccidentQueryCDTO accidentQueryCDTO, int pageSize, int pageNum) {
        // 分页设置
        PageHelper.startPage(pageNum, pageSize);
        Long orgId = CurrentContext.getCurrentOrgId();
        Long tenantId = CurrentContext.getCurrentTenantId();
        accidentQueryCDTO.setOrgId(orgId);
        accidentQueryCDTO.setTenantId(tenantId);
        List<AccidentCDTO> list = dao.listAccidentQuery(accidentQueryCDTO);
        long total = ((Page) list).getTotal();
        PageInfo<AccidentCDTO> pageResult = new PageInfo<>(list);
        pageResult.setTotal(total);
        // 查询总共的事故数量
        Integer number = dao.countAccident();
        accidentQueryCDTO.setTotal(number);

        // 按照分类进行统计事故数量
        List<Map>  mapList = dao.countAccidentByName();
        accidentQueryCDTO.setClassNameAndCount(mapList);
        return pageResult;
    }

1.1.3–3dao层的SQL的写法如下:

 <select id="listAccidentQuery" resultType="com.xksh.pensioncloud.daily.dto.AccidentQueryCDTO">
        SELECT
  member_name AS memberName,
  bed_Name AS bedName,
  LEVEL_NAME AS levelName,
  OCCURRENCE_TIME AS occurrenceTime,
  PERSONNEL AS personnel,
  CHARGE_PENSON AS chargePenson,
  CLASS_NAME AS className,
  accident_id as accidentId,
  remark AS remark
FROM
  tb_cloud_accident
   WHERE DELETED = 0
        AND ORG_ID = #{orgId}
        AND TENANT_ID = #{tenantId}
        <if test="null != memberName and  memberName != '' ">
            AND  member_name like concat('%',#{memberName},'%')
        </if>
        <if test="null != occurrenceTime and  occurrenceTime != '' ">
            AND OCCURRENCE_TIME BETWEEN STR_TO_DATE(CONCAT(#{occurrenceTime},'00 00 00'),'%Y %m %d %H %i %s')
            AND STR_TO_DATE(CONCAT(#{occurrenceTime},'23 59 59'),'%Y %m %d %H %i %s')
        </if>
        <if test="null != bedName and bedName != '' ">
            AND  bed_Name like concat('%',#{bedName},'%')
        </if>
        <if test="null != personnel and personnel != '' ">
            AND  PERSONNEL like concat('%',#{personnel},'%')
        </if>
        <if test="null != chargePenson and chargePenson != '' ">
            AND  CHARGE_PENSON like concat('%',#{chargePenson},'%')
        </if>
        <if test="null != remark and remark != '' ">
            AND  remark like concat('%',#{remark},'%')
        </if>
        <if test="null != levelName and levelName != '' ">
            AND  LEVEL_NAME like concat('%',#{levelName},'%')
        </if>
        <if test="classId != null and classId != 0">
            AND CLASS_ID = #{classId}
        </if>
        ORDER BY CREATE_TIME DESC
    </select>

在这里插入图片描述

1.2查询详情;
1.2.1根据一个函数,从主页调到对应的ID的详情页;

   detail(way,row){
        this.$router.push({name: 'accidentDetail',params:{way:way,row:row,}});
      },
      /**

在这里插入图片描述

  <template scope="scope">
                    <el-button type="text" size="small" @click.stop="detail(0,scope.row)">
                      详情</el-button>
                  </template>

在这里插入图片描述

1.2.2
JS代码的写法:

  /**
       * 获取事故登记详情
       */
      getDetailInfo(accidentId){
        accidentCApi.getDetailInfo(accidentId).then(
          (response)=>{
            debugger
            this.ruleForm = response.data.data;
          }
        );
      },

在这里插入图片描述

定义好返回的字段:

  data () {
      return {
        apiUrl,
        accidentId:'', // ID
        way:'',//0:详情  1:新增  2:编辑
        ruleForm: {
         memberName:'',
          bedName:'',
          occurrenceTime:'',
          levelName:'',
          personnel:'',
          chargePenson:'',
          className:'',
          reason:'',
          remark:'',
          measures:'',
          result:'',
          paths:[], // 图片数组
        },
      }
    },

|

1.2.3 后台代码的写法
1.2.3–1controller层

/**
     * 事故详情
     * @param accidentId
     * @return
     */
    @POST(value = "/info/{accidentId}")
    @ApiOperation(httpMethod = "POST", value = "[日常管理]-[事故登记]-[事故登记详情]", notes = "事故登记详情", response = AccidentCDTO.class)
    public String getDeathInfo(@ApiParam(name = "accidentId", value = "事故登记id", required = true) @PathVariable("accidentId") Long accidentId) {
        if(accidentId !=null){
            return ResultContent(ResultStatus.SUCCESS, accidentCService.findById(accidentId));
        }else{
            return ResultContent(ResultStatus.BEAN_VALID_FAILED,"参数错误");
        }
    }

在这里插入图片描述

1.2.3–2service层的实现的写法:

  @Override
    public AccidentCDTO findById(Long accidentId) {
        AccidentCDO accidentCDO = this.dao.selectByPrimaryKey(accidentId);
        List<String> list = new ArrayList<>();
        AccidentCDTO accidentCDTO = new AccidentCDTO();
        // 将DO 转换为DTO
        BeanUtils.copyProperties(accidentCDO,accidentCDTO);
        // 图片查询
        List<AccidentEnclosureCDO>  accidentEnclosureCDOS = accidentEnclosureCService.findById(accidentId);
        for(AccidentEnclosureCDO enclosureCDO :accidentEnclosureCDOS){
             list.add(enclosureCDO.getFile());
        }
        // 返给前端path集合
         accidentCDTO.setPaths(list);
        return  accidentCDTO;
    }

在这里插入图片描述

1.2.3–3 接下来的话,只要DO和DAO按照规范写,就可以不用写简单的SQL语句了。

在这里插入图片描述
在这里插入图片描述

1.3 新增:
前端JS的部分:
在这里插入图片描述
将前端的对象封装到对象中,定义对象
在这里插入图片描述

  data () {
      return {
        // 关于图片的
        apiUrl,
        token:'',
        bedInfoStatus:'',
        AccidentClassList:[], // 事故分类
        levelList:[], // 事故等级
        accidentId:'', // ID
        loginInfo:'',
        realName:'', // 管理员名字
        way:'',//0:详情  1:新增  2:编辑
        ruleFileList:[],
        ruleForm: {
          memberId:null,
          memberName:'',
          bedId:null,
          bedName:'',
          occurrenceTime:'',
          levelId:'',
          levelName:'',
          personnel:'',
          chargePenson:'',
          classId:'',
          className:'',
          reason:'',
          remark:'',
          measures:'',
          ruleFileList:[],
          result:'',
        },
        queryData:{

        },
        members:[{
          memberId:1,
          memberName: "张小建",
          value: "张小建",
        }],
        memberView:{
          "memberName": ""
        },

1.3.2 通过一个函数将表单提交。
在这里插入图片描述

  /**
       * 新增事故登记
       */
      submitForm(formName){
        let self = this;
        self.queryData.memberId = self.ruleForm.memberId; // 会员姓名
        self.queryData.memberName = self.ruleForm.memberName;
        self.queryData.bedId = self.ruleForm.bedId;  // 床位号
        self.queryData.bedName = self.ruleForm.bedName;
        self.queryData.occurrenceTime = self.ruleForm.occurrenceTime; // 发生时间
        self.queryData.levelId = self.ruleForm.levelId;  // 事故等级
        self.queryData.levelName = self.ruleForm.levelName;
        self.queryData.personnel = self.ruleForm.personnel; // 值班人员
        self.queryData.chargePenson = self.ruleForm.chargePenson; // 负责人
        self.queryData.classId = self.ruleForm.classId; // 事故分类
        self.queryData.className = self.ruleForm.className;
        self.queryData.reason = self.ruleForm.reason ; // 事故原因
        self.queryData.remark = self.ruleForm.remark;   // 事故描述
        self.queryData.measures = self.ruleForm.measures; // 处理措施
        self.queryData.result = self.ruleForm.result; // 处理结果
        self.queryData.ruleFileList = self.ruleForm.ruleFileList; // 图片的URL集合
        self.$refs[formName].validate((valid) => {
          if (valid) {
            self.queryData.occurrenceTime=commonJs.formatDateTime(self.queryData.occurrenceTime);
            accidentCApi.insertAccident(self.queryData).then(
              (response) => {
                if (response.data.status == 200) {
                  self.$message({
                    message: '保存成功',
                    type: 'success'
                  });
                  self.$router.push({name: 'accident'});
                } else {
                  self.$message({
                    message: '保存失败',
                    type: 'error'
                  });
                }
              },
            );
          }
        });
      },

1.3.3 后台代码的写法
1.3.3—1controller层的写法:

  /**
     * 新增事故登记
     * @param accidentCDTO
     * @return
     */
    @POST(value = "/addAccident")
    @ApiOperation(httpMethod = "POST", value = "[日常管理]-[事故登记]-[新增事故登记]", notes = "新建事故登记记录")
    public String addAccident(@ApiParam(name = "accidentCDTO", value = "保存信息", required = false)
                                   @RequestBody AccidentCDTO accidentCDTO) {
        return ResultContent(ResultStatus.SUCCESS, accidentCService.addAccident(accidentCDTO));
    }

在这里插入图片描述
1.3.3---- 后台service的写法:

 @Override
    @Transactional
    public int addAccident(AccidentCDTO accidentCDTO) {
        int result = 0;
        // 事故登记实体新增
        AccidentCDO accidentCDO = new AccidentCDO();
        BeanUtils.copyProperties(accidentCDTO,accidentCDO);
        accidentCDO.setPersonnel(CurrentContext.getCurrentUserName());
        result = this.dao.insertSelective(accidentCDO);
        // 获得该事故的主键Id
        Long accidentId = accidentCDO.getAccidentId();
        List<Map<String, String>> ruleFileList = accidentCDTO.getRuleFileList();
        // 事故图片与事故登记实体的对应关系新增
        for(Map<String, String> file : ruleFileList){
            AccidentEnclosureCDO accidentEnclosureCDO = new AccidentEnclosureCDO();
            accidentEnclosureCDO.setAccidentId(accidentId);
            accidentEnclosureCDO.setDateUpload(new Date());
            accidentEnclosureCDO.setFile(file.get("path"));
           accidentEnclosureCService.save(accidentEnclosureCDO);
        }
        return result;
    }

在这里插入图片描述
1.3.3–3 dao层,因为是简单的SQL,自动生成。只需要DO与DAO符合就可以了。不阐述。

1.4.1 关于图书上传—新增图片;
前端的写法:

 <div class="panel-content">
            <el-row>
              <el-col :span="24">
                <el-upload class="upload-demo" ref="upload" accept=".jpg,.jpeg,.png,.JPG,.JPEG" :action="apiUrl+'/annexs?access_token='+token" :multiple="true" :on-success="handSuccess" :on-preview="handlePreview" :on-remove="handleRemove"  :auto-upload="false">
                  <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
                  <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
                  <div slot="tip" class="el-upload__tip">1、只能上传jpg/png文件,且不超过5M(最多可上传9张)<br/>2、保证文件清晰</div>
                </el-upload>
              </el-col>
            </el-row>
          </div>

在这里插入图片描述

通过success函数,将成功上传的返回的参数,放到file中,通过push跟ruleForm一起提交到后台。
在这里插入图片描述
通过三个简单的函数,进行提交:
在这里插入图片描述
1.4.2. 调用后台的先前的接口,直接将图片保存到后台的数据库。然后将返回的url,封装到ruleForm中,当成一个数组传送到后台进行解析。插入到数据库中。
在这里插入图片描述
1.5.1 展示图片:
前端写法:
在这里插入图片描述
然后在img中现实 图片数组:
在这里插入图片描述
1.5.2 后台代码的写法:
1.5.2–1 controller层的代码复用:
1.5.3–2 service层的实现:

在这里插入图片描述
dao层和SQL均为简单的SQL,符合规则可以自动生成。
到此,大体描述完成了!!!
本次描述了 对一个实体的条件查询;根据ID查询详情;以及新增;而新增方面包含了图片的上传,以及后面新加的图片详情的查询。 与上一讲的修改,合在一起,就是一个模块的完整的增删改查了。以后碰到类似的,可以进行借鉴这里的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

virtuousOne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值