1    分类管理
1.1    分层显示列表数据
1、    显示第一级分类数据
  思路:一打开页面时加载一个方法查询所有的一级分类数据
  第一步:在ng-init中添加方法
 
   第二步:添加js方法

$scope.findByParentId=function (parentId) {
itemCatService.findByParentId(parentId).success(function (response) {
$scope.list=response;
})
}

第三步:完成后台的方法
 主要service:

    @Override
public List<TbItemCat> findByParentId(Long parentId) {
// select * from tb_item_cat where parent_id=?
TbItemCatExample example = new TbItemCatExample();
example.createCriteria().andParentIdEqualTo(parentId);
return itemCatMapper.selectByExample(example);
}

1.2    控制“查询下级”显隐
思路:用一个变量记录当前显示的是第几级  grade

第一步:在js中添加一个变量
$scope.grade=1;  //此变量用来记录当前页面显示数据的层级 默认显示是第一级

第二步:添加一个方法。更改grade的值
 

//点击查询下级的方法
$scope.setGrade=function(grade){
$scope.grade=grade;
}

第三步:使用ng-if控制显隐

1.3    面包屑的原路返回
分析图:
  
第一步:需要两个对象记录面包屑上的显示数据
 
第二步:点击查询下级时对entity1和entity2的赋值
在setGrade上添加一个参数
 
第三步:修改setGrade的方法

//点击查询下级的方法
$scope.setGrade=function(grade,pojo){
$scope.grade=grade;

if($scope.grade==1){
$scope.entity1=null;
$scope.entity2=null;
}
if($scope.grade==2){
$scope.entity1=pojo; //grade等于2 赋值
$scope.entity2=null;
}
if($scope.grade==3){
$scope.entity2=pojo; //grade等于3 赋值
}
}

第四步:添加面包屑显隐的控制
 
1.4    新增
第一步:动态显示模板数据
 ng-init中添加查询所有模板的方法

 
$scope.findTypeTemplateAll=function () {
typeTemplateService.findAll().success(function (response) {
$scope.typeTemplateList=response;
})
}

第二步:在select中显示数据 使用ng-options

 
第三步:调整保存方法
 添加一个变量:记录保存数据的父id

 
 向即将保存的entity中追加一个parentId属性并赋值

 

2    运营商的登录和安全验证控制(SpringSecurity)
2.1    运营商项目中添spring-security的控制
第一步:添加依赖  config  web

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>

第二步:在web.xml添加过滤器,添加一个监听器 加载spring-security.xml
 过滤的名字filter-name必须是:springSecurityFilterChain
 过滤的类名:DelegatingFilterProxy

<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

使用前端制器加载spring-security.xml
 

第三步:在项目中添加spring-security.xml
 
   注意:静态资源的放行

<!-- 以下页面不被拦截 -->
<http pattern="/login.html" security="none"></http>
<http pattern="/login_error.html" security="none"></http>
<http pattern="/css/**" security="none"></http>
<http pattern="/img/**" security="none"></http>
<http pattern="/js/**" security="none"></http>
<http pattern="/plugins/**" security="none"></http>
<http pattern="/assets/**" security="none"></http>
<http pattern="/data/**" security="none"></http>

第四步:修改登录页面的表单
1、    form表单提交方式method一定是post ,action一定是/login
2、    form表单中输入用户名和密码的input 必须是 username password
3、    提交方式是表单的直接提交

2.2    首页上显示当前登录人账号

修改indexService的方法
 

 
2.3    退出登录
第一步:在spring-security.xml中添加
 
第二步:修改首页上的注销按钮
 
3    商家入驻(商家注册)
第一步:参考manager-web项目添加配置文件
 注意放行的资源:
   

注意两个默认值
 
4    运营商审核商家

第一步:构建查询参数
  
第二步:修改sellerService的代码
 

第三步:修改controller中的方法 使用restFul风格

    @RequestMapping("/search/{pageNum}/{pageSize}")
// @PathVariable从URL上获取参数的值
public PageResult search(@RequestBody TbSeller seller,
@PathVariable("pageNum") int pageNum, @PathVariable("pageSize") int pageSize ){
return sellerService.findPage(seller, pageNum, pageSize);
}

第四步:调整service方法
 

第五步:完成审核方法
页面代码:
 

JS代码:
$scope.updateStatus=function(status,info){
var flag = window.confirm("确认要"+info+"此商家吗?");
if(flag){
// update tb_seller set status=? where seller_id=?
sellerService.updateStatus(status,$scope.entity.sellerId).success(function(response){
if(response.success){
$scope.reloadList();
}else{
alert(response.message);
}
})
}
}

后台: service代码:
 

   @Override
public void updateStatus(String status, String id) {
// update tb_seller set status=? where id=?
TbSeller tbSeller = sellerMapper.selectByPrimaryKey(id);
tbSeller.setStatus(status);
sellerMapper.updateByPrimaryKey(tbSeller);
}

5    商家的登录和安全验证控制
6.不足扩展

iframe策略,如下图所示

5.数据显隐、原路返回(面包屑)、SpringSecurity_spring

restful风格的接口方式(传参方式)