SSM综合练习crm
一、环境配置
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>crm32</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 配置spring --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-*.xml</param-value> </context-param> <!-- 配置监听器加载spring 加载spring配置文件applicationContext.xml--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置过滤器,解决post的乱码问题 --> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置SpringMVC --> <servlet> <servlet-name>boot-crm</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 配置springmvc什么时候启动,参数必须为整数 --> <!-- 如果为0或者大于0,则springMVC随着容器启动而启动 --> <!-- 如果小于0,则在第一次请求进来的时候启动 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>boot-crm</servlet-name> <!-- 所有的请求都进入springMVC --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 别名 --> <typeAliases> <package name="com.itheima.crm.pojo"/> </typeAliases> </configuration>
applicationConfig-dao.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 配置 读取properties文件 jdbc.properties --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 配置 数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 配置SqlSessionFactory --> <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 设置MyBatis核心配置文件 --> <property name="configLocation" value="classpath:sqlMapConfig.xml" /> <!-- 设置数据源 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置Mapper扫描 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 设置Mapper扫描包 --> <property name="basePackage" value="com.itheima.crm.mapper" /> </bean> </beans>
applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 配置Service扫描 注解--> <context:component-scan base-package="com.itheima.crm.service" /> </beans>
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 配置Controller扫描 --> <context:component-scan base-package="com.itheima.crm.controller" /> <!-- 配置注解驱动 --> <mvc:annotation-driven /> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean> <!-- 对静态资源放行 --> <mvc:resources location="/css/" mapping="/css/**"/> <mvc:resources location="/js/" mapping="/js/**"/> <mvc:resources location="/fonts/" mapping="/fonts/**"/> </beans>
二、pojo
BaseDict
package com.itheima.crm.pojo; import java.io.Serializable; public class BaseDict implements Serializable{ private String dict_id; private String dict_type_code; private String dict_type_name; private String dict_item_name; private String dict_item_code; private Integer dict_sort; private String dict_enable; private String dict_memo; public String getDict_id() { return dict_id; } public void setDict_id(String dict_id) { this.dict_id = dict_id; } public String getDict_type_code() { return dict_type_code; } public void setDict_type_code(String dict_type_code) { this.dict_type_code = dict_type_code; } public String getDict_type_name() { return dict_type_name; } public void setDict_type_name(String dict_type_name) { this.dict_type_name = dict_type_name; } public String getDict_item_name() { return dict_item_name; } public void setDict_item_name(String dict_item_name) { this.dict_item_name = dict_item_name; } public String getDict_item_code() { return dict_item_code; } public void setDict_item_code(String dict_item_code) { this.dict_item_code = dict_item_code; } public Integer getDict_sort() { return dict_sort; } public void setDict_sort(Integer dict_sort) { this.dict_sort = dict_sort; } public String getDict_enable() { return dict_enable; } public void setDict_enable(String dict_enable) { this.dict_enable = dict_enable; } public String getDict_memo() { return dict_memo; } public void setDict_memo(String dict_memo) { this.dict_memo = dict_memo; } @Override public String toString() { return "BaseDict [dict_id=" + dict_id + ", dict_type_code=" + dict_type_code + ", dict_type_name=" + dict_type_name + ", dict_item_name=" + dict_item_name + ", dict_item_code=" + dict_item_code + ", dict_sort=" + dict_sort + ", dict_enable=" + dict_enable + ", dict_memo=" + dict_memo + "]"; } }
Customer
package com.itheima.crm.pojo; import java.util.Date; public class Customer { private Long cust_id; private String cust_name; private Long cust_user_id; private Long cust_create_id; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; private String cust_phone; private String cust_mobile; private String cust_zipcode; private String cust_address; private Date cust_createtime; public Long getCust_id() { return cust_id; } public void setCust_id(Long cust_id) { this.cust_id = cust_id; } public String getCust_name() { return cust_name; } public void setCust_name(String cust_name) { this.cust_name = cust_name; } public Long getCust_user_id() { return cust_user_id; } public void setCust_user_id(Long cust_user_id) { this.cust_user_id = cust_user_id; } public Long getCust_create_id() { return cust_create_id; } public void setCust_create_id(Long cust_create_id) { this.cust_create_id = cust_create_id; } public String getCust_source() { return cust_source; } public void setCust_source(String cust_source) { this.cust_source = cust_source; } public String getCust_industry() { return cust_industry; } public void setCust_industry(String cust_industry) { this.cust_industry = cust_industry; } public String getCust_level() { return cust_level; } public void setCust_level(String cust_level) { this.cust_level = cust_level; } public String getCust_linkman() { return cust_linkman; } public void setCust_linkman(String cust_linkman) { this.cust_linkman = cust_linkman; } public String getCust_phone() { return cust_phone; } public void setCust_phone(String cust_phone) { this.cust_phone = cust_phone; } public String getCust_mobile() { return cust_mobile; } public void setCust_mobile(String cust_mobile) { this.cust_mobile = cust_mobile; } public String getCust_zipcode() { return cust_zipcode; } public void setCust_zipcode(String cust_zipcode) { this.cust_zipcode = cust_zipcode; } public String getCust_address() { return cust_address; } public void setCust_address(String cust_address) { this.cust_address = cust_address; } public Date getCust_createtime() { return cust_createtime; } public void setCust_createtime(Date cust_createtime) { this.cust_createtime = cust_createtime; } }
QueryVo
package com.itheima.crm.pojo; public class QueryVo { //客户名称 private String custName; //客户来源 private String custSource; //所属行业 private String custIndustry; //客户级别 private String custLevel; //当前页 private Integer page; //每页数 private Integer size; //开始行 private Integer startRow = 0; public Integer getStartRow() { return startRow; } public void setStartRow(Integer startRow) { this.startRow = startRow; } public String getCustName() { return custName; } public void setCustName(String custName) { this.custName = custName; } public String getCustSource() { return custSource; } public void setCustSource(String custSource) { this.custSource = custSource; } public String getCustIndustry() { return custIndustry; } public void setCustIndustry(String custIndustry) { this.custIndustry = custIndustry; } public String getCustLevel() { return custLevel; } public void setCustLevel(String custLevel) { this.custLevel = custLevel; } public Integer getPage() { return page; } public void setPage(Integer page) { this.page = page; } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } }
三、Controller
CustomerController
package com.itheima.crm.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.itheima.common.utils.Page; import com.itheima.crm.pojo.BaseDict; import com.itheima.crm.pojo.Customer; import com.itheima.crm.pojo.QueryVo; import com.itheima.crm.service.BaseDictService; import com.itheima.crm.service.CustomerService; /** * 客户管理 * @author mjl * */ @Controller public class CustomerController { @Autowired private BaseDictService baseDictService; @Autowired private CustomerService customerService; //入口 字典查询 @RequestMapping(value="/customer/list") public String list(QueryVo vo,Model model){ System.out.println("enter"); //客户来源 List<BaseDict> fromType = baseDictService.selectBaseDictListByCode("002"); //所属行业 List<BaseDict> industryType = baseDictService.selectBaseDictListByCode("001"); //客户级别 List<BaseDict> levelType = baseDictService.selectBaseDictListByCode("006"); model.addAttribute("fromType", fromType); model.addAttribute("industryType", industryType); model.addAttribute("levelType", levelType); //通过四个条件,查询分页对象 Page<Customer> page = customerService.selectPageByQueryVo(vo); model.addAttribute("page",page); model.addAttribute("custName", vo.getCustName()); model.addAttribute("custSource", vo.getCustSource()); model.addAttribute("custIndustry", vo.getCustIndustry()); model.addAttribute("custLevel", vo.getCustLevel()); return "customer"; } //去修改页面 @RequestMapping(value="customer/edit.action") public @ResponseBody Customer edit(Integer id){ return customerService.selectCustomerById(id); } //修改保存 @RequestMapping(value="customer/update.action") public @ResponseBody String update(Customer customer){ //修改 customerService.updateCustomerById(customer); return "OK"; } //删除 @RequestMapping(value="customer/delete.action") public @ResponseBody String delete(Integer id){ //删除 customerService.delete(id); return "OK"; } }
四、Service
BaseDictServiceImpl
package com.itheima.crm.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.itheima.crm.mapper.BaseDictDao; import com.itheima.crm.pojo.BaseDict; @Service public class BaseDictServiceImpl implements BaseDictService{ @Autowired private BaseDictDao baseDictDao; @Override public List<BaseDict> selectBaseDictListByCode(String code) { return baseDictDao.selectBaseDictListByCode(code); } }
CustomerServiceImpl
package com.itheima.crm.service; import com.itheima.common.utils.Page; import com.itheima.crm.pojo.Customer; import com.itheima.crm.pojo.QueryVo; public interface CustomerService { public Page<Customer> selectPageByQueryVo(QueryVo vo); //通过一个Id查询客户 public Customer selectCustomerById(Integer id); //通过Id修改客户 public void updateCustomerById(Customer customer); //通过Id删除客户 public void delete(Integer id); }
五、Mapper
BaseDictDao
package com.itheima.crm.mapper; import java.util.List; import com.itheima.crm.pojo.BaseDict; public interface BaseDictDao { //查询 public List<BaseDict> selectBaseDictListByCode(String code); }
BaseDictDao.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.itheima.crm.mapper.BaseDictDao"> <!-- 查询 --> <select id="selectBaseDictListByCode" parameterType="String" resultType="BaseDict"> SELECT * FROM base_dict WHERE dict_type_code = #{value} </select> </mapper>
CustomerDao
package com.itheima.crm.mapper; import java.util.List; import com.itheima.crm.pojo.BaseDict; import com.itheima.crm.pojo.Customer; import com.itheima.crm.pojo.QueryVo; public interface CustomerDao { //查询总条数 public Integer customerCount(QueryVo vo); //查询结果集 public List<Customer> selectCustomerListByQueryVo(QueryVo vo); //通过一个Id查询客户 public Customer selectCustomerById(Integer id); //通过Id修改客户 public void updateCustomerById(Customer customer); //通过Id删除客户 public void delete(Integer id); }
CustomerDao.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.itheima.crm.mapper.CustomerDao"> <!-- 查询总条数 --> <select id="customerCount" parameterType="QueryVo" resultType="Integer"> select count(1) from customer <where> <if test="custName != null and custName != ''"> cust_name like "%"#{custName}"%" </if> <if test="custSource != null and custSource != ''"> and cust_source = #{custSource} </if> <if test="custIndustry != null and custIndustry != ''"> and cust_industry = #{custIndustry} </if> <if test="custLevel != null and custLevel != ''"> and cust_level = #{custLevel} </if> </where> </select> <!-- 查询结果集 --> <select id="selectCustomerListByQueryVo" parameterType="QueryVo" resultType="Customer"> select * from customer <where> <if test="custName != null and custName != ''"> cust_name like "%"#{custName}"%" </if> <if test="custSource != null and custSource != ''"> and cust_source = #{custSource} </if> <if test="custIndustry != null and custIndustry != ''"> and cust_industry = #{custIndustry} </if> <if test="custLevel != null and custLevel != ''"> and cust_level = #{custLevel} </if> </where> limit #{startRow},#{size} </select> <!-- 通过Id查询客户 --> <select id="selectCustomerById" parameterType="Integer" resultType="Customer"> select * from customer <where> cust_id = #{id} </where> </select> <!-- 通过Id修改客户 --> <update id="updateCustomerById" parameterType="Customer"> update customer <set> <if test="cust_name != null"> cust_name = #{cust_name}, </if> <if test="cust_linkman != null"> cust_linkman = #{cust_linkman}, </if> </set> <where> cust_id = #{cust_id} </where> </update> <!-- 通过Id删除客户 --> <delete id="delete" parameterType="Integer"> delete from customer <where> cust_id = #{id} </where> </delete> </mapper>
六、jsp
customer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page trimDirectiveWhitespaces="true"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="itcast" uri="http://itcast.cn/common/"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <title>客户列表-BootCRM</title> <!-- Bootstrap Core CSS --> <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> <!-- DataTables CSS --> <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> <!-- Custom CSS --> <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="index.html">BOOT客户管理系统 v2.0</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-envelope fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-messages"> <li><a href="#"> <div> <strong>令狐冲</strong> <span class="pull-right text-muted"> <em>昨天</em> </span> </div> <div>今天晚上向大哥找我吃饭,讨论一下去梅庄的事...</div> </a></li> <li class="divider"></li> <li><a class="text-center" href="#"> <strong>查看全部消息</strong> <i class="fa fa-angle-right"></i> </a></li> </ul> <!-- /.dropdown-messages --></li> <!-- /.dropdown --> <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-tasks fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-tasks"> <li><a href="#"> <div> <p> <strong>任务 1</strong> <span class="pull-right text-muted">完成40%</span> </p> <div class="progress progress-striped active"> <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%"> <span class="sr-only">完成40%</span> </div> </div> </div> </a></li> <li class="divider"></li> <li><a href="#"> <div> <p> <strong>任务 2</strong> <span class="pull-right text-muted">完成20%</span> </p> <div class="progress progress-striped active"> <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%"> <span class="sr-only">完成20%</span> </div> </div> </div> </a></li> <li class="divider"></li> <li><a class="text-center" href="#"> <strong>查看所有任务</strong> <i class="fa fa-angle-right"></i> </a></li> </ul> <!-- /.dropdown-tasks --></li> <!-- /.dropdown --> <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-bell fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-alerts"> <li><a href="#"> <div> <i class="fa fa-comment fa-fw"></i> 新回复 <span class="pull-right text-muted small">4分钟之前</span> </div> </a></li> <li class="divider"></li> <li><a href="#"> <div> <i class="fa fa-envelope fa-fw"></i> 新消息 <span class="pull-right text-muted small">4分钟之前</span> </div> </a></li> <li class="divider"></li> <li><a href="#"> <div> <i class="fa fa-tasks fa-fw"></i> 新任务 <span class="pull-right text-muted small">4分钟之前</span> </div> </a></li> <li class="divider"></li> <li><a href="#"> <div> <i class="fa fa-upload fa-fw"></i> 服务器重启 <span class="pull-right text-muted small">4分钟之前</span> </div> </a></li> <li class="divider"></li> <li><a class="text-center" href="#"> <strong>查看所有提醒</strong> <i class="fa fa-angle-right"></i> </a></li> </ul> <!-- /.dropdown-alerts --></li> <!-- /.dropdown --> <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="#"><i class="fa fa-user fa-fw"></i> 用户设置</a></li> <li><a href="#"><i class="fa fa-gear fa-fw"></i> 系统设置</a></li> <li class="divider"></li> <li><a href="login.html"><i class="fa fa-sign-out fa-fw"></i> 退出登录</a></li> </ul> <!-- /.dropdown-user --></li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> <li class="sidebar-search"> <div class="input-group custom-search-form"> <input type="text" class="form-control" placeholder="查询内容..."> <span class="input-group-btn"> <button class="btn btn-default" type="button"> <i class="fa fa-search" style="padding: 3px 0 3px 0;"></i> </button> </span> </div> <!-- /input-group --> </li> <li><a href="customer.action" class="active"><i class="fa fa-edit fa-fw"></i> 客户管理</a></li> <li><a href="salevisit.action"><i class="fa fa-dashboard fa-fw"></i> 客户拜访</a></li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">客户管理</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="panel panel-default"> <div class="panel-body"> <form class="form-inline" action="${pageContext.request.contextPath }/customer/list.action" method="get"> <div class="form-group"> <label for="customerName">客户名称</label> <input type="text" class="form-control" id="customerName" value="${custName }" name="custName"> </div> <div class="form-group"> <label for="customerFrom">客户来源</label> <select class="form-control" id="customerFrom" placeholder="客户来源" name="custSource"> <option value="">--请选择--</option> <c:forEach items="${fromType}" var="item"> <option value="${item.dict_id}"<c:if test="${item.dict_id == custSource}"> selected</c:if>>${item.dict_item_name }</option> </c:forEach> </select> </div> <div class="form-group"> <label for="custIndustry">所属行业</label> <select class="form-control" id="custIndustry" name="custIndustry"> <option value="">--请选择--</option> <c:forEach items="${industryType}" var="item"> <option value="${item.dict_id}"<c:if test="${item.dict_id == custIndustry}"> selected</c:if>>${item.dict_item_name }</option> </c:forEach> </select> </div> <div class="form-group"> <label for="custLevel">客户级别</label> <select class="form-control" id="custLevel" name="custLevel"> <option value="">--请选择--</option> <c:forEach items="${levelType}" var="item"> <option value="${item.dict_id}"<c:if test="${item.dict_id == custLevel}"> selected</c:if>> ${item.dict_item_name } </option> </c:forEach> </select> </div> <button type="submit" class="btn btn-primary">查询</button> </form> </div> </div> <div class="row"> <div class="col-lg-12"> <div class="panel panel-default"> <div class="panel-heading">客户信息列表</div> <!-- /.panel-heading --> <table class="table table-bordered table-striped"> <thead> <tr> <th>ID</th> <th>客户名称</th> <th>客户来源</th> <th>客户所属行业</th> <th>客户级别</th> <th>固定电话</th> <th>手机</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach items="${page.rows}" var="row"> <tr> <td>${row.cust_id}</td> <td>${row.cust_name}</td> <td>${row.cust_source}</td> <td>${row.cust_industry}</td> <td>${row.cust_level}</td> <td>${row.cust_phone}</td> <td>${row.cust_mobile}</td> <td> <a href="#" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#customerEditDialog" onclick="editCustomer(${row.cust_id})">修改</a> <a href="#" class="btn btn-danger btn-xs" onclick="deleteCustomer(${row.cust_id})">删除</a> </td> </tr> </c:forEach> </tbody> </table> <!-- 分页 --> <div class="col-md-12 text-right"> <itcast:page url="${pageContext.request.contextPath }/customer/list.action" /> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> <!-- /.col-lg-12 --> </div> </div> <!-- /#page-wrapper --> </div> <!-- 客户编辑对话框 --> <div class="modal fade" id="customerEditDialog" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title" id="myModalLabel">修改客户信息</h4> </div> <div class="modal-body"> <form class="form-horizontal" id="edit_customer_form"> <input type="hidden" id="edit_cust_id" name="cust_id"/> <div class="form-group"> <label for="edit_customerName" class="col-sm-2 control-label">客户名称</label> <div class="col-sm-10"> <input type="text" class="form-control" id="edit_customerName" placeholder="客户名称" name="cust_name"> </div> </div> <div class="form-group"> <label for="edit_customerFrom" style="float:left;padding:7px 15px 0 27px;">客户来源</label> <div class="col-sm-10"> <select class="form-control" id="edit_customerFrom" placeholder="客户来源" name="cust_source"> <option value="">--请选择--</option> <c:forEach items="${fromType}" var="item"> <option value="${item.dict_id}"<c:if test="${item.dict_id == custSource}"> selected</c:if>>${item.dict_item_name }</option> </c:forEach> </select> </div> </div> <div class="form-group"> <label for="edit_custIndustry" style="float:left;padding:7px 15px 0 27px;">所属行业</label> <div class="col-sm-10"> <select class="form-control" id="edit_custIndustry" name="cust_industry"> <option value="">--请选择--</option> <c:forEach items="${industryType}" var="item"> <option value="${item.dict_id}"<c:if test="${item.dict_id == custIndustry}"> selected</c:if>>${item.dict_item_name }</option> </c:forEach> </select> </div> </div> <div class="form-group"> <label for="edit_custLevel" style="float:left;padding:7px 15px 0 27px;">客户级别</label> <div class="col-sm-10"> <select class="form-control" id="edit_custLevel" name="cust_level"> <option value="">--请选择--</option> <c:forEach items="${levelType}" var="item"> <option value="${item.dict_id}"<c:if test="${item.dict_id == custLevel}"> selected</c:if>>${item.dict_item_name }</option> </c:forEach> </select> </div> </div> <div class="form-group"> <label for="edit_linkMan" class="col-sm-2 control-label">联系人</label> <div class="col-sm-10"> <input type="text" class="form-control" id="edit_linkMan" placeholder="联系人" name="cust_linkman"> </div> </div> <div class="form-group"> <label for="edit_phone" class="col-sm-2 control-label">固定电话</label> <div class="col-sm-10"> <input type="text" class="form-control" id="edit_phone" placeholder="固定电话" name="cust_phone"> </div> </div> <div class="form-group"> <label for="edit_mobile" class="col-sm-2 control-label">移动电话</label> <div class="col-sm-10"> <input type="text" class="form-control" id="edit_mobile" placeholder="移动电话" name="cust_mobile"> </div> </div> <div class="form-group"> <label for="edit_zipcode" class="col-sm-2 control-label">邮政编码</label> <div class="col-sm-10"> <input type="text" class="form-control" id="edit_zipcode" placeholder="邮政编码" name="cust_zipcode"> </div> </div> <div class="form-group"> <label for="edit_address" class="col-sm-2 control-label">联系地址</label> <div class="col-sm-10"> <input type="text" class="form-control" id="edit_address" placeholder="联系地址" name="cust_address"> </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" onclick="updateCustomer()">保存修改</button> </div> </div> </div> </div> <!-- /#wrapper --> <!-- jQuery --> <script src="<%=basePath%>js/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="<%=basePath%>js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="<%=basePath%>js/metisMenu.min.js"></script> <!-- DataTables JavaScript --> <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> <!-- Custom Theme JavaScript --> <script src="<%=basePath%>js/sb-admin-2.js"></script> <script type="text/javascript"> /* 编辑 */ function editCustomer(id) { $.ajax({ type:"get", url:"<%=basePath%>customer/edit.action", data:{"id":id}, success:function(data) { $("#edit_cust_id").val(data.cust_id); $("#edit_customerName").val(data.cust_name); $("#edit_customerFrom").val(data.cust_source) $("#edit_custIndustry").val(data.cust_industry) $("#edit_custLevel").val(data.cust_level) $("#edit_linkMan").val(data.cust_linkman); $("#edit_phone").val(data.cust_phone); $("#edit_mobile").val(data.cust_mobile); $("#edit_zipcode").val(data.cust_zipcode); $("#edit_address").val(data.cust_address); } }); } /* 保存 */ function updateCustomer() { $.post( "<%=basePath%>customer/update.action", $("#edit_customer_form").serialize(), function(data){ alert("客户信息更新成功!"); window.location.reload(); }); } /* 删除 */ function deleteCustomer(id) { if(confirm('确实要删除该客户吗?')) { $.post( "<%=basePath%>customer/delete.action", {"id":id}, function(data){ alert("客户删除更新成功!"); window.location.reload(); }); } } </script> </body> </html>