• 第3章业务功能开发(线索关联市场活动,动态搜索)


    客户需求

    用户在线索明细页面,点击"关联市场活动"按钮,弹出线索关联市场活动的模态窗口;

    用户在线索关联市场活动的模态窗口,输入搜索条件,每次键盘弹起,根据名称模糊查询市场活动,把所有符合条件的市场活动显示到列表中;

    用户选择要关联的市场活动,点击"关联"按钮,完成线索关联市场活动的功能.

    *每次至少关联一个市场活动

    *同一个市场活动只能跟同一个线索关联一次

    *关联成功之后,关闭模态窗口,刷新已经关联过的市场活动列表

    *关联失败,提示信息,模态窗口不关闭,已经关联过的市场活动列表也不刷新

    功能实现

    查询一条或多条市场活动数据,传递的参数为市场活动的名字和线索的id,这两个参数不属于同一个实体类,因此把他们封装为map集合进行传参

    1. ActivityMapper接口

    1. /**
    2. * 根据name模糊查询市场活动,并且把已经和clueId关联过的市场活动排除
    3. * @param map
    4. * @return
    5. */
    6. List selectActivityForDetailByNameClueId(Map map);

    ActivityMapper.xml文件

    1. <select id="selectActivityForDetailByNameClueId" parameterType="map" resultMap="BaseResultMap">
    2. select a.id,a.name,a.start_date,a.end_date,u.name as owner
    3. from tbl_activity a
    4. join tbl_user u on a.owner=u.id
    5. where a.name like '%' #{activityName} '%' and a.id not in (
    6. select activity_id
    7. from tbl_clue_activity_relation
    8. where clue_id=#{clueId}
    9. )
    10. select>

    2.ActivityService接口

    ActivityServiceImpl类

    1. @Override
    2. public List queryActivityForDetailByNameClueId(Map map) {
    3. return activityMapper.selectActivityForDetailByNameClueId(map);
    4. }

    3.ClueController

    1. @RequestMapping(value = "/workbench/clue/detailClue.do")
    2. public String detailClue(String id,HttpServletRequest request){
    3. //调用service层方法,查询数据
    4. Clue clue = clueService.queryClueForDetailById(id);
    5. List clueRemarks = clueRemarkService.queryClueRemarkForDetilByClueId(id);
    6. List activityList = activityService.queryActivityForDetailByClueId(id);
    7. //把数据保存到作用域中
    8. request.setAttribute("clue",clue);
    9. request.setAttribute("clueRemarks",clueRemarks);
    10. request.setAttribute("activityList",activityList);
    11. return "workbench/clue/detail";
    12. }

    4.clue的detail.jsp页面

    js

    1. //给关联市场活动按钮添加单击事件
    2. $("#bundActivityBtn").click(function () {
    3. //初始化工作
    4. //弹出线索关联市场活动的模态窗口
    5. $("#bundModal").modal("show");
    6. });
    7. //给市场活动搜索框添加键盘弹起事件
    8. $("#searchActivityTxt").keyup(function () {
    9. //收集参数
    10. var activityName=this.value;
    11. var clueId='${clue.id}';
    12. //发送请求
    13. $.ajax({
    14. url:"workbench/clue/queryActivityForDetailByNameClueId.do",
    15. type:'post',
    16. data:{
    17. activityName:activityName,
    18. clueId:clueId
    19. },
    20. dataType:'json',
    21. success:function (data) {
    22. //遍历data,显示搜索到的市场活动列表
    23. var htmlStr="";
    24. $.each(data,function (index,obj) {
    25. htmlStr+="";
    26. htmlStr+="";
    27. htmlStr+=""+obj.name+"";
    28. htmlStr+=""+obj.startDate+"";
    29. htmlStr+=""+obj.endDate+"";
    30. htmlStr+=""+obj.owner+"";
    31. htmlStr+="";
    32. });
    33. $("#tBody").html(htmlStr);
    34. }
    35. });
    36. });

    html

    1. <div class="modal fade" id="bundModal" role="dialog">
    2. <div class="modal-dialog" role="document" style="width: 80%;">
    3. <div class="modal-content">
    4. <div class="modal-header">
    5. <button type="button" class="close" data-dismiss="modal">
    6. <span aria-hidden="true">×span>
    7. button>
    8. <h4 class="modal-title">关联市场活动h4>
    9. div>
    10. <div class="modal-body">
    11. <div class="btn-group" style="position: relative; top: 18%; left: 8px;">
    12. <form class="form-inline" role="form">
    13. <div class="form-group has-feedback">
    14. <input type="text" id="searchActivityTxt" class="form-control" style="width: 300px;" placeholder="请输入市场活动名称,支持模糊查询">
    15. <span class="glyphicon glyphicon-search form-control-feedback">span>
    16. div>
    17. form>
    18. div>
    19. <table id="activityTable" class="table table-hover" style="width: 900px; position: relative;top: 10px;">
    20. <thead>
    21. <tr style="color: #B3B3B3;">
    22. <td><input type="checkbox"/>td>
    23. <td>名称td>
    24. <td>开始日期td>
    25. <td>结束日期td>
    26. <td>所有者td>
    27. <td>td>
    28. tr>
    29. thead>
    30. <tbody id="tBody">
    31. tbody>
    32. table>
    33. div>
    34. <div class="modal-footer">
    35. <button type="button" class="btn btn-default" data-dismiss="modal">取消button>
    36. <button type="button" class="btn btn-primary" id="saveBundActivityBtn">关联button>
    37. div>
    38. div>
    39. div>
    40. div>

    功能测试

    进入线索详细备注页面

    点击关联市场活动按钮,弹出市场活动搜索框,根据市场活动的名称来进行搜索,并且排除已经关联过该线索的市场活动

    点击ctrl键,查询所有市场活动

    输入具体的值,根据输入的值查询市场活动

     

  • 相关阅读:
    Git的基本使用(用户初始化配置、新建代码库、把文件提交到缓存区、把文件提交到本地仓库等)
    [红明谷CTF 2021]write_shell %09绕过过滤空格 ``执行
    通过 Nginx 实现多机负载均衡
    专利申请常见的几个误区!
    java项目之见福便利店信息管理系统(ssm框架)
    基于JAVA农村留守儿童帮扶系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    卷积神经网络文本分析,一文读懂卷积神经网络
    进亦忧,退亦忧,Github Copilot 集成进入 Visual Studio 带来的思考
    图论17(Leetcode864.获取所有钥匙的最短路径)
    React Redux
  • 原文地址:https://blog.csdn.net/weixin_59334478/article/details/126054691