06、运营商商家列表显示,审核,安全框架登录加密,$watch的使用,商品新增中的部分实现,富文本编辑器的使用

运营商商家列表显示

只涉及到一张表的操作(tb_seller)。显示在seller_1.html审核页面上。
注意:表中有一列状态信息。0为未审核,1为审核通过,2为审核未通过,3为关闭商家

一、前端部分
绑定页面模型。
在这里插入图片描述
注意:由于审核的商家都是状态为0的商家,所以只需要查找状态为0的商家。
这里可以借用模糊查询,创建一个searchEntity对象
在这里插入图片描述

运营商显示当前详情

调用findOne方法,传入id即可。
在这里插入图片描述

运营商审核商家

1、查看详情之后,弹窗会有四个按钮
在这里插入图片描述
2、在前三个按钮上依次绑定更新状态的方法,传入id和状态值。
在这里插入图片描述
3、在js文件controller层定义更新状态的方法updateStatus

    //更改状态
    $scope.updateStatus=function (id, status) {
        sellerService.updateStatus(id, status).success(
            function (response) {
                if(response.success){
                    $scope.reloadList();	//刷新列表
                }else{
                    alert(response.message)
                }
            }
        )
    }

4、在判断登录密码的serviceImpl添加一个判断状态的条件
在这里插入图片描述

完成商家登录密码的加密处理

1、在spring-security.xml文件中放开注释掉的密码加密方法。
是使用security提供的加密方式进行加密和解密
在这里插入图片描述
2、在保存商家的时候先将密码加密再存储

/**
	 * 增加
	 */
	@Override
	public void add(TbSeller seller) {

		seller.setStatus("0");
		seller.setCreateTime(new Date());

        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        seller.setPassword(encoder.encode(seller.getPassword()));		//将密码进行加密处理

        sellerMapper.insert(seller);

	}

商品新增分析,实体类的说明

商品新增涉及到三张主要表格,tb_goods、tb_goods_desc和tb_item,其中,tb_goods表需要tb_typeTemplate表作支持,而tb_typeTemplate表又需要三张表做支持。而其中的tb_specification表又需要tb_specification_option表做支持。
所以完成商品新增一共需要涉及到8张表。

在这里插入图片描述
自定义实体类
要向一次性将三个主要对象的数据传到后台,需要我们自定义一个对象来存放这些数据。
自定义Goods实体类,生成对应的get/set方法。
在这里插入图片描述

AngularJS单选框中显示一级分类列表的数据

ng-options标签的使用

注意:在js文件中goodsController调用的service不太一样,引入了其他service。

在这里插入图片描述
需求分析
我们需要逐级选择商品分类的单选框,根据上一级选择的数据自动查找下一级的分类并显示。当选择完第三级分类时,再根据商品分类信息查找到模板id。

一、前端部分

1、当页面显示时,init默认调用findItemCatList()方法,查找顶级标签
在这里插入图片描述
2、在页面一级分类(顶级分类)的位置绑定模型。使用ng-options标签

ng-options标签的使用规则:
	需要在使用这个标签的同时绑定好要封装进去的模型对象,否则无法正常显示。
	ng-options语法:
		.......as......for......in...... 

在这里插入图片描述

2、在js文件controller添加对应方法查找一级分类。手写传入id是0;

	//查找一级分类
	$scope.findItemCatList=function () {
        itemCatService.findParentId(0).success(
            function (response) {
                $scope.itemCat1List = response;
            }
        )
    }

二、后端部分
调用的是findParentId的方法。

通过watch方法实现分类菜单联动效果

$watch方法的使用

需求分析:我们希望当第一级(顶级)分类被选中时,动态的去查找二级分类并显示到列表中。
在这里插入图片描述
在此,需要使用angularjs提供的$watch标签

一、前端部分
1、在页面对应位置仿照上述optioins的使用方法做处理。
在这里插入图片描述
2、在js文件的controller定义对应方法,使用$watch标签
$watch()里第一个参数指的是要监听哪一个值的变化。当这个对象发生变化时就会执行这个方法。findParentId传入newValue值即可。

  //使用$watch方法查询二级分类
    $scope.$watch('entity.goods.category1Id',function (newValue, oldValue) {
        itemCatService.findParentId(newValue).success(
            function (response) {
                $scope.itemCat2List = response;
            }
        )
    })

3、根据二级分类查找三级分类的方法同上。

根据选择的三级分类进行模板对象的查询

直接将查询到的数据封装进对象中。保存时对象中已经有数据了。

//使用$watch方法查询模板对象
	$scope.$watch('entity.goods.category3Id',function (newValue, oldValue) {
		itemCatService.findOne(newValue).success(
			function (response) {
				$scope.entity.goods.typeTemplateId = response.typeId;
            }
		)
    })

在页面中直接绑定这个对象:
在这里插入图片描述

通过模板中的brandIds显示品牌下拉列表

扩展属性的处理

直接定义一个typeTemplate对象接收返回值。
用$scope.typeTemplate.brandIds接收 $scope.typeTemplate.brandIds用于品牌显示
用$scope.entity.goodsDesc.customAttributeItems接收$scope.typeTemplate.customAttributeItems,这样的话,数据直接存入对象完成模型双向绑定。	
**注意要转成json格式**

1、页面绑定模型
在这里插入图片描述
2、js文件中的controller层,监视entity.goods.typeTemplateId的变化查询模板对象。
注意:此处需要先定义对象。(当页面报错没有定义对象时,定义即可)

 $scope.entity={goodsDesc:{cutstomAttributeItems:[]}}
    //查询模板对象
    $scope.$watch('entity.goods.typeTemplateId',function (newValue, oldValue) {
        typeTemplateService.findOne(newValue).success(
            function (response) {
                $scope.typeTemplate = response;
                $scope.typeTemplate.brandIds = JSON.parse( $scope.typeTemplate.brandIds);	//	用于品牌的展示

                //将模板的自定义属性直接赋值到封装对象中
				$scope.entity.goodsDesc.customAttributeItems =JSON.parse($scope.typeTemplate.customAttributeItems);	//用于自定义属性的展示
            }
        )
    })

富文本编辑器(KindEditor)的使用

富文本编辑器,Rich Text Editor, 简称 RTE, 它提供类似于 Microsoft Word 的编辑功能。常用的富文本编辑器:
KindEditor http://kindeditor.net/
UEditor http://ueditor.baidu.com/website/
CKEditor http://ckeditor.com/

导入js及相关css样式文件

<link rel="stylesheet" href="../plugins/kindeditor/themes/default/default.css" />
<script charset="utf-8" src="../plugins/kindeditor/kindeditor-min.js"></script>
<script charset="utf-8" src="../plugins/kindeditor/lang/zh_CN.js"></script>

在这里插入图片描述

将textarea的名字为content的创建成KindEditor编辑框,allowFileManager可以传图片

注意:一定要放在html页面的最下方。
<script type="text/javascript">
	var editor;
	KindEditor.ready(function(K) {
		editor = K.create('textarea[name="content"]', {
			allowFileManager : true
		});
	});
</script>	

在这里插入图片描述

goodsController.js文件的add方法中增加获取值的语句

//增加获取赋值
$scope.entity.goodsDesc.introduction=editor.html();

//以及清空
editor.html("");  //提交后清空

在这里插入图片描述

商品新增保存到数据库

由于涉及到多张表的保存,所以需要引入多个controller类和js文件。

先将GoodsController的接收参数改为我们自定义的Goods。将以下相关的接口和事项类都改动成我们自定义的Goods。
在这里插入图片描述

在GoodsServiceImpl类中,进行分表保存
1、保存tb_goods。直接调用mapper保存。
在这里插入图片描述

2、保存goodsDesc,需要先引入goodsDescMapper的类,调用保存。

在这里插入图片描述
在这里插入图片描述

特别注意:一对一关系需要手动维护。即,需要手动设置传入的id值。让他们建立对应的关系。

保存数据一对一关系手动维护
在goodsMapper的xml文件中的insert标签添加如下信息,将最后一个插入数据库的信息手动赋值id。
在这里插入图片描述
然后在保存goodsDesc时,手动添加id
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43421537/article/details/88304831