项目实战(P 7)(Day 35)

目录

学习目标:

学习内容:

        BUG解决

营销机会模块

        营销机会数据添加操作后端代码

思想:

Service层

Controller层

测试:

参数判断

 添加成功​

 遇到问题:

         添加数据前端代码

导入模板

书写JS 

controller层控制

关闭弹出层

监听表单sumit事件

        营销机会数据更新后端代码

思路:

dao层

service层

 controller层

 测试:

​ 前端代码

 ftl修改

add.update.js修改

学习时间:

心得 


学习目标:

实现营销机会数据的增删改查功能


学习内容:

        BUG解决

,parseData: function (res) { //res 即为原始返回的数据
            return {
                "code": res.code, //解析接口状态
                "count": res.count, //解析表格数据总条数 eg:共100页
                "data": res.date//解析table表格数据源
            };

        挺无语的,五行代码自己不会淘宝70块钱购买,一行价值15块。

        去网上看了下

        layui中table表格的基本操作

        发现是自己Service中data打成了date,所以一直搜不到数据

        淘宝解决是加了个强转,把date转换成data

         真的被自己蠢哭了

营销机会模块

        营销机会数据添加操作后端代码

思想:

添加营销机会
    添加营销机会
           1. 参数校验
               customerName客户名称    非空
               linkMan联系人           非空
               linkPhone联系号码       非空,手机号码格式正确
           2. 设置相关参数的默认值
               createMan创建人        当前登录用户名
               assignMan指派人
                   如果未设置指派人(默认)
                       state分配状态 (0=未分配,1=已分配)
                           0 = 未分配
                       assignTime指派时间
                           设置为null
                       devResult开发状态 (0=未开发,1=开发中,2=开发成功,3=开发失败)
                           0 = 未开发 (默认)
                   如果设置了指派人
                        state分配状态 (0=未分配,1=已分配)
                           1 = 已分配
                        assignTime指派时间
                           系统当前时间
                        devResult开发状态 (0=未开发,1=开发中,2=开发成功,3=开发失败)
                           1 = 开发中
               isValid是否有效  (0=无效,1=有效)
                   设置为有效 1= 有效
               createDate创建时间
                   默认是系统当前时间
               updateDate
                  默认是系统当前时间
           3. 执行添加操作,判断受影响的行数

Service层

@Transactional(propagation = Propagation.REQUIRED)
    public void addSaleChance(SaleChance saleChance){
        /* 1.校验参数 */
        checkSaleChanceParams(saleChance.getCustomerName(),saleChance.getLinkMan(),saleChance.getLinkPhone());

        /* 2. 设置相关字段的默认值 */
        // isValid是否有效  (0=无效,1=有效) 设置为有效 1= 有效
        saleChance.setIsValid(1);
        //createDate创建时间,默认是系统当前时间
        saleChance.setCreateDate(new Date());
        //updateDate 默认是系统当前时间
        saleChance.setUpdateDate(new Date());
        //如果未设置指派人(默认)
        if (StringUtils.isBlank(saleChance.getAssignMan())) {
            //state分配状态 (0 = 未分配,1 = 已分配) 0 = 未分配
            saleChance.setState(StateStatus.UNSTATE.getType());
            //assignTime指派时间 设置为null
            saleChance.setAssignTime(null);
            //devResult开发状态 (0 = 未开发,1 = 开发中,2 = 开发成功,3 = 开发失败)0 = 未开发 (默认)
            saleChance.setDevResult(DevResult.UNDEV.getStatus());
        }else {//如果设置了指派人
            //state分配状态 (0=未分配,1=已分配)1 = 已分配
            saleChance.setState(StateStatus.STATUS.getType());
            //assignTime指派时间 系统当前时间
            saleChance.setAssignTime(new Date());
            //devResult开发状态 (0=未开发,1=开发中,2=开发成功,3=开发失败)1 = 开发中
            saleChance.setDevResult(DevResult.DEVING.getStatus());
        }
        //3. 执行添加操作,判断受影响的行数
        AssertUtil.isTrue(saleChanceMapper.insertSelective(saleChance)!=1,"添加营销机会失败");
    }

    private void checkSaleChanceParams(String customerName,String linkMan ,String linkPhone) {
        // customerName客户名称    非空
        AssertUtil.isTrue(StringUtils.isBlank(customerName),"客户名称不能为空!");
        // linkMan联系人           非空
        AssertUtil.isTrue(StringUtils.isBlank(linkMan),"联系人不能为空!");
        // linkPhone联系号码       非空
        AssertUtil.isTrue(StringUtils.isBlank(linkPhone),"联系号码不能为空!");
        // linkPhone联系号码       非空,手机号码格式正确
        AssertUtil.isTrue(!PhoneUtil.isMobile(linkPhone),"联系号码格式不正确!");
    }

Controller层

/**
     * @author QQ星
     * 添加营销机会
     *
     * @param saleChance
     * @return com.github.pagehelper.PageInfo
     * @Date 2022/3/4 17:08
     */
    @PostMapping("add")
    @ResponseBody
    public ResultInfo addSaleChance(SaleChance saleChance, HttpServletRequest request){
        //从Cookie中获取当前登录的用户名
        String userName = CookieUtil.getCookieValue(request,"userName");
        //设置用户名到指派人
        saleChance.setAssignMan(userName);
        //调用Service层方法
        saleChanceService.addSaleChance(saleChance);
        return success("营销机会数据添加成功!");
    }

测试:

参数判断

 

 添加成功

 遇到问题:

         assignMan没有进去,代码写错

         添加数据前端代码

导入模板

书写JS 

/**
     * 打开添加/修改营销机会数据的窗口
     *      如果营销机会ID为空,则为添加操作
     *      如果营销机会ID不为空,则为修改操作
     */
    function openSaleChanceDialog(saleChanceId) {
        // 弹出层的标题
        var title = "<h3>营销机会管理 - 添加营销机会</h3>";
        var url = ctx + "/sale_chance/toSaleChancePage";

        // 判断营销机会ID是否为空
        if (saleChanceId != null && saleChanceId != '') {
            // 更新操作
            title  = "<h3>营销机会管理 - 更新营销机会</h3>";
            // 请求地址传递营销机会的ID
            url += '?saleChanceId=' + saleChanceId;
        }

        // iframe层
        layui.layer.open({
            // 类型
            type: 2,
            // 标题
            title: title,
            // 宽高
            area: ['500px', '620px'],
            // url地址
            content: url,
            // 可以最大化与最小化
            maxmin:true
        });
    }

controller层控制

@RequestMapping("toSaleChancePage")
    public String toSaleChancePage(){
        return "saleChance/add_update";
    }

关闭弹出层

 /**
     * 关闭弹出层
     */
    $("#closeBtn").click(function () {
        // 当你在iframe页面关闭自身时
        var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
        parent.layer.close(index); //再执行关闭
    });

监听表单sumit事件

/**
     * 监听表单submit事件
         form.on('submit(按钮元素的lay-filter属性值)', function (data) {

        });
     */
    form.on('submit(addOrUpdateSaleChance)', function (data) {
        // 提交数据时的加载层 (https://layer.layui.com/)
        var index = layer.msg("数据提交中,请稍后...",{
            icon:16, // 图标
            time:false, // 不关闭
            shade:0.8 // 设置遮罩的透明度
        });

        // 发送ajax请求
        var url = ctx + "/sale_chance/add"; // 添加操作

        // 通过营销机会的ID来判断当前需要执行添加操作还是修改操作
        // 如果营销机会的ID为空,则表示执行添加操作;如果ID不为空,则表示执行更新操作
        // 通过获取隐藏域中的ID
        var saleChanceId = $("[name='id']").val();
        // 判断ID是否为空
        if (saleChanceId != null && saleChanceId != '') {
            // 更新操作
            url = ctx + "/sale_chance/update";
        }

        //data.field拿到表单的所有数据
        $.post(url, data.field, function (result) {
            // 判断操作是否执行成功 200=成功
            if (result.code == 200) {
                // 成功
                // 提示成功
                layer.msg("操作成功!",{icon:6});
                // 关闭加载层
                layer.close(index);
                // 关闭弹出层
                layer.closeAll("iframe");
                // 刷新父窗口,重新加载数据
                parent.location.reload();
            } else {
                // 失败
                layer.msg(result.msg, {icon:5});
            }
        });

        // 阻止表单提交
        return false;

    });

        营销机会数据更新后端代码

思路:

更新营销机会
       1. 参数校验
           营销机会ID  非空,数据库中对应的记录存在
           customerName客户名称    非空
           linkMan联系人           非空
           linkPhone联系号码       非空,手机号码格式正确

       2. 设置相关参数的默认值
           updateDate更新时间  设置为系统当前时间
           assignMan指派人
               原始数据未设置
                   修改后未设置
                       不需要操作
                   修改后已设置
                       assignTime指派时间  设置为系统当前时间
                       分配状态    1=已分配
                       开发状态    1=开发中
               原始数据已设置
                   修改后未设置
                       assignTime指派时间  设置为null
                       分配状态    0=未分配
                       开发状态    0=未开发
                   修改后已设置
                       判断修改前后是否是同一个指派人
                           如果是,则不需要操作
                           如果不是,则需要更新 assignTime指派时间  设置为系统当前时间

       3. 执行更新操作,判断受影响的行数

dao层

因为指派人和指派时间可能会设置为null需要把条件去掉

            <!--
                不判断为空
            -->
            assign_man = #{assignMan,jdbcType=VARCHAR},
            assign_time = #{assignTime,jdbcType=TIMESTAMP},

service层

@Transactional(propagation = Propagation.REQUIRED)
    public void updateSaleChance(SaleChance saleChance) {
        /* 1. 参数校验  */
        //  营销机会ID  非空,数据库中对应的记录存在
        AssertUtil.isTrue(null == saleChance.getId(), "待更新记录不存在!");
        // 通过主键查询对象
        SaleChance temp = saleChanceMapper.selectByPrimaryKey(saleChance.getId());
        // 判断数据库中对应的记录存在
        AssertUtil.isTrue(temp == null,"待更新记录不存在!");
        // 参数校验
        checkSaleChanceParams(saleChance.getCustomerName(),saleChance.getLinkMan(), saleChance.getLinkPhone());


        /* 2. 设置相关参数的默认值 */
        // updateDate更新时间  设置为系统当前时间
        saleChance.setUpdateDate(new Date());
        // assignMan指派人
        // 判断原始数据是否存在
        if (StringUtils.isBlank(temp.getAssignMan())) { // 不存在
            // 判断修改后的值是否存在
            if (!StringUtils.isBlank(saleChance.getAssignMan())) { // 修改前为空,修改后有值
                // assignTime指派时间  设置为系统当前时间
                saleChance.setAssignTime(new Date());
                // 分配状态    1=已分配
                saleChance.setState(StateStatus.STATED.getType());
                // 开发状态    1=开发中
                saleChance.setDevResult(DevResult.DEVING.getStatus());
            }
        } else { // 存在
            // 判断修改后的值是否存在
            if (StringUtils.isBlank(saleChance.getAssignMan())) { // 修改前有值,修改后无值
                // assignTime指派时间  设置为null
                saleChance.setAssignTime(null);
                // 分配状态    0=未分配
                saleChance.setState(StateStatus.UNSTATE.getType());
                // 开发状态    0=未开发
                saleChance.setDevResult(DevResult.UNDEV.getStatus());
            } else { // 修改前有值,修改后有值
                // 判断修改前后是否是同一个用户
                if (!saleChance.getAssignMan().equals(temp.getAssignMan())) {
                    // 更新指派时间
                    saleChance.setAssignTime(new Date());
                } else {
                    // 设置指派时间为修改前的时间
                    saleChance.setAssignTime(temp.getAssignTime());
                }
            }
        }

        /* 3. 执行更新操作,判断受影响的行数 */
        AssertUtil.isTrue(saleChanceMapper.updateByPrimaryKeySelective(saleChance) != 1, "更新营销机会失败!");

    }

 controller层

        书写返回ResultInfo的update方法

/** 
     * @author QQ星
     * 更新营销机会
     *
     * @param saleChance
     * @return com.xxxx.crm.base.ResultInfo
     * @Date 2022/3/4 21:36
     */
    @PostMapping("update")
    @ResponseBody
    public ResultInfo updateSaleChance(SaleChance saleChance) {
        // 调用Service层的添加方法
        saleChanceService.updateSaleChance(saleChance);
        return success("营销机会数据更新成功!");
    }

 测试:

 前端代码

        打开添加/修改营销机会数据的窗口

/**
     * 打开添加/修改营销机会数据的窗口
     *      如果营销机会ID为空,则为添加操作
     *      如果营销机会ID不为空,则为修改操作
     */
    function openSaleChanceDialog(saleChanceId) {
        // 弹出层的标题
        var title = "<h3>营销机会管理 - 添加营销机会</h3>";
        var url = ctx + "/sale_chance/toSaleChancePage";

        // 判断营销机会ID是否为空
        if (saleChanceId != null && saleChanceId != '') {
            // 更新操作
            title  = "<h3>营销机会管理 - 更新营销机会</h3>";
            // 请求地址传递营销机会的ID
            url += '?saleChanceId=' + saleChanceId;
        }

        // iframe层
        layui.layer.open({
            // 类型
            type: 2,
            // 标题
            title: title,
            // 宽高
            area: ['500px', '620px'],
            // url地址
            content: url,
            // 可以最大化与最小化
            maxmin:true
        });
    }

/**
     * 行工具栏监听事件
         table.on('tool(数据表格的lay-filter属性值)', function (data) {

         });
     */
    table.on('tool(saleChances)', function (data) {
        // console.log(data);
        // 判断类型
        if (data.event == "edit") { // 编辑操作

            // 得到营销机会的ID
            var saleChanceId = data.data.id;
            // 打开修改营销机会数据的窗口
            openSaleChanceDialog(saleChanceId)

        } else if (data.event == "del") {

    }

});

 ftl修改

        需要把营销Id拿到然后传给后端去判断是添加还是更新操作

            <#-- 设置营销机会ID的隐藏域 -->
            <input type="hidden" name="id" value="${(saleChance.id)!}">

add.update.js修改

        通过营销机会的ID来判断当前需要执行添加操作还是修改操作

      // 通过营销机会的ID来判断当前需要执行添加操作还是修改操作
      // 如果营销机会的ID为空,则表示执行添加操作;如果ID不为空,则表示执行更新操作
      // 通过获取隐藏域中的ID
       var saleChanceId = $("[name='id']").val();
       // 判断ID是否为空
       if (saleChanceId != null && saleChanceId != '') {
          // 更新操作
          url = ctx + "/sale_chance/update";
        }

学习时间:

2022-3-4 9:30-12:19、16:34-18:11、19:05-20:12、21:34-23:26


心得 

        今天交学费了,自己data写错了写成date让前端一直接受不到数据,粗心写错还找了那么九都没有找出来,确实该交学费了,这样能更好的激励自己,还是太菜了,自己前端调试不怎么会,前端接受不到数据也没有仔细去看layui的table使用守则,还得努力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值