<li class="liClass"><a href="workbench/clue/index.do" target="workareaFrame"><span class="glyphicon glyphicon-search"></span> 线索(潜在客户)</a></li>
tbl_dic_value 存的是字典值 下拉列表中数据
/*根据typeCode查询数据字典值*/
页面刷新通过el表达式遍历集合显示数据
mapper层
List<DicValue> selectDicValueByTypeCode(String typeCode);<select id="selectDicValueByTypeCode" parameterType="string" resultMap="BaseResultMap"> select <include refid="Base_Column_List"></include> from tbl_dic_value where type_code=#{typeCode} order by order_no desc </select>
service层
List<DicValue> selectDicValueByTypeCode(String typeCode);public List<DicValue> selectDicValueByTypeCode(String typeCode) { return dicValueMapper.selectDicValueByTypeCode(typeCode); }
controller层
获取user List appellationList clueStateList sourceList 集合
把数据存到作用域
@Autowired UserService userService; @Autowired DicValuleService dicValuleService; @RequestMapping("/workbench/clue/index.do") public String index(HttpServletRequest request){ //调用service层 List<User> userList=userService.selectAllUsers(); List<DicValue> appellationList= dicValuleService.selectDicValueByTypeCode("appellation"); List<DicValue> clueStateList= dicValuleService.selectDicValueByTypeCode("clueState"); List<DicValue> sourceList= dicValuleService.selectDicValueByTypeCode("source"); //把数据存到request作用域中 request.setAttribute("userList",userList); request.setAttribute("appellationList",appellationList); request.setAttribute("clueStateList",clueStateList); request.setAttribute("sourceList",sourceList); //请求转发 return "workbench/clue/index"; }
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"; %> <html> <head> <base href="<%=basePath%>"> <meta charset="UTF-8"> <link href="jquery/bootstrap_3.3.0/css/bootstrap.min.css" type="text/css" rel="stylesheet" /> <link href="jquery/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="jquery/jquery-1.11.1-min.js"></script> <script type="text/javascript" src="jquery/bootstrap_3.3.0/js/bootstrap.min.js"></script> <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/js/bootstrap-datetimepicker.js"></script> <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/locale/bootstrap-datetimepicker.zh-CN.js"></script> <script type="text/javascript"> $(function(){ //给"创建"按钮添加单击事件 $("#createClueBtn").click(function () { //初始化工作 $("#createClueForm")[0].reset(); //弹出模态窗口 $("#createClueModal").modal("show"); }); //给"保存"按钮添加单击事件 $("#saveCreateClueBtn").click(function () { //收集参数 var fullname =$.trim($("#create-fullname").val()); var appellation =$("#create-appellation").val(); var owner =$("#create-owner").val(); var company =$.trim($("#create-company").val()); var job =$.trim($("#create-job").val()); var email =$.trim($("#create-email").val()); var phone =$.trim($("#create-phone").val()); var website =$.trim($("#create-website").val()); var mphone =$.trim($("#create-mphone").val()); var state =$("#create-state").val(); var source =$("#create-source").val(); var description =$.trim($("#create-description").val()); var contactSummary =$.trim($("#create-contactSummary").val()); var nextContactTime=$.trim($("#create-nextContactTime").val()); var address =$.trim($("#create-address").val()); //表单验证(作业) //表单验证(作业) if(owner==''){ alert("所有者不能为空"); return; } if(company==''){ alert("公司不能为空"); return; }if(fullname==''){ alert("姓名不能为空"); return; } //带*非空 //正则表达式验证 var regExp=/^1[3|4|5|6|7|8]\d{9}$/; if(!regExp.test(mphone)){ alert("请输入11为手机号码"); return; } //带*非空 //正则表达式验证 //发送请求 $.ajax({ url:'workbench/clue/saveCreateClue.do', data:{ fullname :fullname , appellation :appellation , owner :owner , company :company , job :job , email :email , phone :phone , website :website , mphone :mphone , state :state , source :source , description :description , contactSummary :contactSummary , nextContactTime:nextContactTime, address :address }, type:'post', dataType:'json', success:function (data) { if(data.code=="1"){ //关闭模态窗口 $("#createClueModal").modal("hide"); //刷新线索列表,显示第一页数据,保持每页显示条数不变(作业) }else{ //提示信息 alert(data.message); //模态窗口不关闭 $("#createClueModal").modal("show"); } } }); }); }); </script> </head> <body> <!-- 创建线索的模态窗口 --> <div class="modal fade" id="createClueModal" role="dialog"> <div class="modal-dialog" role="document" style="width: 90%;"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title" id="myModalLabel">创建线索</h4> </div> <div class="modal-body"> <form id="createClueForm" class="form-horizontal" role="form"> <div class="form-group"> <label for="create-owner" class="col-sm-2 control-label">所有者<span style="font-size: 15px; color: red;">*</span></label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="create-owner"> <c:forEach items="${userList}" var="u"> <option value="${u.id}">${u.name}</option> </c:forEach> </select> </div> <label for="create-company" class="col-sm-2 control-label">公司<span style="font-size: 15px; color: red;">*</span></label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-company"> </div> </div> <div class="form-group"> <label for="create-appellation" class="col-sm-2 control-label">称呼</label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="create-appellation"> <option></option> <c:forEach items="${appellationList}" var="app"> <option value="${app.id}">${app.value}</option> </c:forEach> </select> </div> <label for="create-fullname" class="col-sm-2 control-label">姓名<span style="font-size: 15px; color: red;">*</span></label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-fullname"> </div> </div> <div class="form-group"> <label for="create-job" class="col-sm-2 control-label">职位</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-job"> </div> <label for="create-email" class="col-sm-2 control-label">邮箱</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-email"> </div> </div> <div class="form-group"> <label for="create-phone" class="col-sm-2 control-label">公司座机</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-phone"> </div> <label for="create-website" class="col-sm-2 control-label">公司网站</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-website"> </div> </div> <div class="form-group"> <label for="create-mphone" class="col-sm-2 control-label">手机</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-mphone"> </div> <label for="create-state" class="col-sm-2 control-label">线索状态</label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="create-state"> <option></option> <c:forEach items="${clueStateList}" var="cs"> <option value="${cs.id}">${cs.value}</option> </c:forEach> </select> </div> </div> <div class="form-group"> <label for="create-source" class="col-sm-2 control-label">线索来源</label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="create-source"> <option></option> <c:forEach items="${sourceList}" var="sl"> <option value="${sl.id}">${sl.value}</option> </c:forEach> </select> </div> </div> <div class="form-group"> <label for="create-description" class="col-sm-2 control-label">线索描述</label> <div class="col-sm-10" style="width: 81%;"> <textarea class="form-control" rows="3" id="create-description"></textarea> </div> </div> <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative;"></div> <div style="position: relative;top: 15px;"> <div class="form-group"> <label for="create-contactSummary" class="col-sm-2 control-label">联系纪要</label> <div class="col-sm-10" style="width: 81%;"> <textarea class="form-control" rows="3" id="create-contactSummary"></textarea> </div> </div> <div class="form-group"> <label for="create-nextContactTime" class="col-sm-2 control-label">下次联系时间</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="create-nextContactTime"> </div> </div> </div> <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative; top : 10px;"></div> <div style="position: relative;top: 20px;"> <div class="form-group"> <label for="create-address" class="col-sm-2 control-label">详细地址</label> <div class="col-sm-10" style="width: 81%;"> <textarea class="form-control" rows="1" id="create-address"></textarea> </div> </div> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> <button type="button" class="btn btn-primary" id="saveCreateClueBtn">保存</button> </div> </div> </div> </div> <!-- 修改线索的模态窗口 --> <div class="modal fade" id="editClueModal" role="dialog"> <div class="modal-dialog" role="document" style="width: 90%;"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title">修改线索</h4> </div> <div class="modal-body"> <form class="form-horizontal" role="form"> <div class="form-group"> <label for="edit-clueOwner" class="col-sm-2 control-label">所有者<span style="font-size: 15px; color: red;">*</span></label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="edit-clueOwner"> <c:forEach items="${userList}" var="u"> <option value="${u.id}">${u.name}</option> </c:forEach> </select> </div> <label for="edit-company" class="col-sm-2 control-label">公司<span style="font-size: 15px; color: red;">*</span></label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-company" value="动力节点"> </div> </div> <div class="form-group"> <label for="edit-call" class="col-sm-2 control-label">称呼</label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="edit-call"> <option></option> <c:forEach items="${appellationList}" var="app"> <option value="${app.id}">${app.value}</option> </c:forEach> </select> </div> <label for="edit-surname" class="col-sm-2 control-label">姓名<span style="font-size: 15px; color: red;">*</span></label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-surname" value="李四"> </div> </div> <div class="form-group"> <label for="edit-job" class="col-sm-2 control-label">职位</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-job" value="CTO"> </div> <label for="edit-email" class="col-sm-2 control-label">邮箱</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-email" value="lisi@bjpowernode.com"> </div> </div> <div class="form-group"> <label for="edit-phone" class="col-sm-2 control-label">公司座机</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-phone" value="010-84846003"> </div> <label for="edit-website" class="col-sm-2 control-label">公司网站</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-website" value="http://www.bjpowernode.com"> </div> </div> <div class="form-group"> <label for="edit-mphone" class="col-sm-2 control-label">手机</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-mphone" value="12345678901"> </div> <label for="edit-status" class="col-sm-2 control-label">线索状态</label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="edit-status"> <option></option> <c:forEach items="${clueStateList}" var="cs"> <option value="${cs.id}">${cs.value}</option> </c:forEach> </select> </div> </div> <div class="form-group"> <label for="edit-source" class="col-sm-2 control-label">线索来源</label> <div class="col-sm-10" style="width: 300px;"> <select class="form-control" id="edit-source"> <option></option> <c:forEach items="${sourceList}" var="sl"> <option value="${sl.id}">${sl.value}</option> </c:forEach> </select> </div> </div> <div class="form-group"> <label for="edit-describe" class="col-sm-2 control-label">描述</label> <div class="col-sm-10" style="width: 81%;"> <textarea class="form-control" rows="3" id="edit-describe">这是一条线索的描述信息</textarea> </div> </div> <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative;"></div> <div style="position: relative;top: 15px;"> <div class="form-group"> <label for="edit-contactSummary" class="col-sm-2 control-label">联系纪要</label> <div class="col-sm-10" style="width: 81%;"> <textarea class="form-control" rows="3" id="edit-contactSummary">这个线索即将被转换</textarea> </div> </div> <div class="form-group"> <label for="edit-nextContactTime" class="col-sm-2 control-label">下次联系时间</label> <div class="col-sm-10" style="width: 300px;"> <input type="text" class="form-control" id="edit-nextContactTime" value="2017-05-01"> </div> </div> </div> <div style="height: 1px; width: 103%; background-color: #D5D5D5; left: -13px; position: relative; top : 10px;"></div> <div style="position: relative;top: 20px;"> <div class="form-group"> <label for="edit-address" class="col-sm-2 control-label">详细地址</label> <div class="col-sm-10" style="width: 81%;"> <textarea class="form-control" rows="1" id="edit-address">北京大兴区大族企业湾</textarea> </div> </div> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> <button type="button" class="btn btn-primary" data-dismiss="modal">更新</button> </div> </div> </div> </div> <div> <div style="position: relative; left: 10px; top: -10px;"> <div class="page-header"> <h3>线索列表</h3> </div> </div> </div> <div style="position: relative; top: -20px; left: 0px; width: 100%; height: 100%;"> <div style="width: 100%; position: absolute;top: 5px; left: 10px;"> <div class="btn-toolbar" role="toolbar" style="height: 80px;"> <form class="form-inline" role="form" style="position: relative;top: 8%; left: 5px;"> <div class="form-group"> <div class="input-group"> <div class="input-group-addon">名称</div> <input class="form-control" type="text"> </div> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-addon">公司</div> <input class="form-control" type="text"> </div> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-addon">公司座机</div> <input class="form-control" type="text"> </div> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-addon">线索来源</div> <select class="form-control"> <option></option> <c:forEach items="${sourceList}" var="sl"> <option value="${sl.id}">${sl.value}</option> </c:forEach> </select> </div> </div> <br> <div class="form-group"> <div class="input-group"> <div class="input-group-addon">所有者</div> <input class="form-control" type="text"> </div> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-addon">手机</div> <input class="form-control" type="text"> </div> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-addon">线索状态</div> <select class="form-control"> <option></option> <c:forEach items="${clueStateList}" var="cs"> <option value="${cs.id}">${cs.value}</option> </c:forEach> </select> </div> </div> <button type="submit" class="btn btn-default">查询</button> </form> </div> <div class="btn-toolbar" role="toolbar" style="background-color: #F7F7F7; height: 50px; position: relative;top: 40px;"> <div class="btn-group" style="position: relative; top: 18%;"> <button type="button" class="btn btn-primary" id="createClueBtn"><span class="glyphicon glyphicon-plus"></span> 创建</button> <button type="button" class="btn btn-default" data-toggle="modal" data-target="#editClueModal"><span class="glyphicon glyphicon-pencil"></span> 修改</button> <button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-minus"></span> 删除</button> </div> </div> <div style="position: relative;top: 50px;"> <table class="table table-hover"> <thead> <tr style="color: #B3B3B3;"> <td><input type="checkbox" /></td> <td>名称</td> <td>公司</td> <td>公司座机</td> <td>手机</td> <td>线索来源</td> <td>所有者</td> <td>线索状态</td> </tr> </thead> <tbody> <tr> <td><input type="checkbox" /></td> <td><a style="text-decoration: none; cursor: pointer;" onclick="window.location.href='workbench/clue/detailClue.do?id=a67c52e8702e4a4e89ab47d1751fc78b';">张三教授</a></td> <td>动力节点</td> <td>010-84846003</td> <td>12345678901</td> <td>广告</td> <td>zhangsan</td> <td>已联系</td> </tr> <tr class="active"> <td><input type="checkbox" /></td> <td><a style="text-decoration: none; cursor: pointer;" onclick="window.location.href='detail.jsp';">李四先生</a></td> <td>动力节点</td> <td>010-84846003</td> <td>12345678901</td> <td>广告</td> <td>zhangsan</td> <td>已联系</td> </tr> </tbody> </table> </div> <div style="height: 50px; position: relative;top: 60px;"> <div> <button type="button" class="btn btn-default" style="cursor: default;">共<b>50</b>条记录</button> </div> <div class="btn-group" style="position: relative;top: -34px; left: 110px;"> <button type="button" class="btn btn-default" style="cursor: default;">显示</button> <div class="btn-group"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> 10 <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li><a href="#">20</a></li> <li><a href="#">30</a></li> </ul> </div> <button type="button" class="btn btn-default" style="cursor: default;">条/页</button> </div> <div style="position: relative;top: -88px; left: 285px;"> <nav> <ul class="pagination"> <li class="disabled"><a href="#">首页</a></li> <li class="disabled"><a href="#">上一页</a></li> <li class="active"><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">下一页</a></li> <li class="disabled"><a href="#">末页</a></li> </ul> </nav> </div> </div> </div> </div> </body> </html>
创建线索模块
mapper层
/*保存创建的线索*/ int insertClue(Clue clue);<insert id="insertClue" parameterType="com.bjpowernode.crm.workbench.domain.Clue"> insert into tbl_clue(id, fullname, appellation, owner, company, job, email, phone, website, mphone, state, source, create_by, create_time, edit_by, edit_time, description, contact_summary, next_contact_time, address) values (#{id,jdbcType=CHAR}, #{fullname,jdbcType=VARCHAR}, #{appellation,jdbcType=VARCHAR}, #{owner,jdbcType=CHAR}, #{company,jdbcType=VARCHAR}, #{job,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{website,jdbcType=VARCHAR}, #{mphone,jdbcType=VARCHAR}, #{state,jdbcType=VARCHAR}, #{source,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=CHAR}, #{editBy,jdbcType=VARCHAR}, #{editTime,jdbcType=CHAR}, #{description,jdbcType=VARCHAR}, #{contactSummary,jdbcType=VARCHAR}, #{nextContactTime,jdbcType=CHAR}, #{address,jdbcType=VARCHAR}) </insert>
service层
int insertClue(Clue clue);@Autowired ClueMapper clueMapper; @Override public int insertClue(Clue clue) { return clueMapper.insertClue(clue); }
contoller层
@Autowired ClueService clueService; @RequestMapping("/workbench/clue/saveCreateClue.do") @ResponseBody public Object saveCreateClue(Clue clue, HttpSession session){ User user = (User) session.getAttribute("user"); //封装参数 clue.setId(UUID.randomUUID().toString().replaceAll("-","")); clue.setCreateTime(DateUtils.formateDateTime()); clue.setCreateBy(user.getId()); ReturnObject returnObject=new ReturnObject(); //调用service层方法 保存创建的线索 try{ int ret =clueService.insertClue(clue); if(ret>0){ returnObject.setCode("1"); returnObject.setMessage("插入线索活动成功"); }else { returnObject.setCode("0"); returnObject.setMessage("插入线索活动失败"); } }catch (Exception e){ returnObject.setCode("0"); returnObject.setMessage("插入线索活动失败"); e.printStackTrace(); } return returnObject; }
点击保存 (收集参数)表单验证 发送请求ajax携带参数给controller层
controller层执行插入Clue类 返回json格式数据
插入成功 保存完成后 关闭模态窗口,刷新线索列表 显示第一页数据 每页
条数不变 否则 模态窗口不关闭
//给"保存"按钮添加单击事件 $("#saveCreateClueBtn").click(function () { //收集参数 var fullname =$.trim($("#create-fullname").val()); var appellation =$("#create-appellation").val(); var owner =$("#create-owner").val(); var company =$.trim($("#create-company").val()); var job =$.trim($("#create-job").val()); var email =$.trim($("#create-email").val()); var phone =$.trim($("#create-phone").val()); var website =$.trim($("#create-website").val()); var mphone =$.trim($("#create-mphone").val()); var state =$("#create-state").val(); var source =$("#create-source").val(); var description =$.trim($("#create-description").val()); var contactSummary =$.trim($("#create-contactSummary").val()); var nextContactTime=$.trim($("#create-nextContactTime").val()); var address =$.trim($("#create-address").val()); //表单验证(作业) if(owner==''){ alert("所有者不能为空"); return; } if(company==''){ alert("公司不能为空"); return; }if(fullname==''){ alert("姓名不能为空"); return; } //带*非空 //正则表达式验证 var regExp=/^1[3|4|5|6|7|8]\d{9}$/; if(!regExp.test(mphone)){ alert("请输入11为手机号码"); return; } //发送请求 $.ajax({ url:'workbench/clue/saveCreateClue.do', data:{ fullname :fullname , appellation :appellation , owner :owner , company :company , job :job , email :email , phone :phone , website :website , mphone :mphone , state :state , source :source , description :description , contactSummary :contactSummary , nextContactTime:nextContactTime, address :address }, type:'post', dataType:'json', success:function (data) { if(data.code=="1"){ //关闭模态窗口 $("#createClueModal").modal("hide"); //刷新线索列表,显示第一页数据,保持每页显示条数不变(作业) queryClueByConditionForPage(1, $("#page-master").bs_pagination('getOption', 'rowsPerPage')); }else{ //提示信息 alert(data.message); //模态窗口不关闭 $("#createClueModal").modal("show"); } } }); });
//给"创建"按钮添加单击事件 $("#createClueBtn").click(function () { //初始化工作 $("#createClueForm")[0].reset(); //弹出模态窗口 $("#createClueModal").modal("show"); });