16分布式电商项目 - 模板管理功能(一)

简介: 16分布式电商项目 - 模板管理功能(一)

1.需求及表结构分析

1.需求分析

首选我们需要理解模板的作用。模板主要有两个:

1.是用于关联品牌与规格

2.定义扩充属性

2.表结构分析

tb_type_template 模板表

字段 类型 长度 含义
id BigInt 主键
name Varchar 80 模板名称
Spec_ids Varchar 1000 关联规格(json 格式)
brand_ids Varchar 1000 关联品牌(json 格式
custom_attribute_items Varchar 2000 扩展属性

2.模板列表

1.引入JS

修改 type_template.html ,引入 JS

<script type="text/javascript" src="../plugins/angularjs/angular.min.js"> </script>
<script src="../plugins/angularjs/pagination.js"></script>
<link rel="stylesheet" href="../plugins/angularjs/pagination.css">
<script type="text/javascript" src="../js/base_pagination.js"> </script>
<script type="text/javascript" src="../js/service/typeTemplateService.js"> </script>
<script type="text/javascript" src="../js/controller/baseController.js"> </script>
<script type="text/javascript" src="../js/controller/typeTemplateController.js"> </script>

2.放置分页组件

<tm-pagination conf="paginationConf"></tm-pagination>

3.指令与表达式

<body class="hold-transition skin-red sidebar-mini" ng-app="pinyougou" ng-controller="typeTemplateController" >
 <tr ng-repeat="entity in list">
  <td><input type="checkbox"></td> 
  <td>{{entity.id}}</td>
  <td>{{entity.name}}</td>
  <td>{{entity.brandIds}}</td>
  <td>{{entity.specIds}}</td>
  <td>{{entity.customAttributeItems}}</td> 
  <td class="text-center"> 
    <button type="button" class="btn bg-olive btn-xs" data-toggle="modal" data-target="#editModal" >修改</button> 
  </td>
</tr>

4.优化模板列表的显示

我们现在完成的列表中都是以 JSON 格式显示的,不利于用户的查询。

我们需要将信息以更友好的方式展现出来,如下图形式

我们需要将一个 json 字符串中某个属性的值提取出来,用逗号拼接成一个新的字符串。这样的功能比较常用,所以我们将方法写到 baseController.js

//提取 json 字符串数据中某个属性,返回拼接字符串 逗号分隔
$scope.jsonToString=function(jsonString,key){
  var json=JSON.parse(jsonString);//将 json 字符串转换为 json 对象
  var value="";
  for(var i=0;i<json.length;i++){
    if(i>0){
    value+=","
  }
    value+=json[i][key];
  }
  return value;
}

页面上使用该函数进行转换

<tr ng-repeat="entity in list">
  <td><input type="checkbox" ng-click="updateSelection($event,entity.id)"></td>
  <td>{{entity.id}}</td>
  <td>{{entity.name}}</td>
  <td>{{jsonToString(entity.brandIds,'text')}}</td>
  <td>{{jsonToString(entity.specIds,'text')}}</td>
  <td>{{jsonToString(entity.customAttributeItems,'text')}}</td> 
  <td class="text-center"> 
    <button type="button" class="btn bg-olive btn-xs" data-toggle="modal" data-target="#editModal" ng-click="findOne(entity.id)">修改</button> 
  </td>
</tr>

3.品牌下拉列表

在弹出窗口中有个品牌下拉列表,要求品牌是可以选择多个,这与我们之前的单选的下拉列表是不同的。我们要想实现这个功能,需要使用 select2 组件来完成。

1.认识select2

我们来看例子:我们需要的就是这样可以多选的下拉框

2.显示品牌下拉列表(静态)

(1)修改 type_template.html 引入 JS

<link rel="stylesheet" href="../plugins/select2/select2.css" />
 <link rel="stylesheet" href="../plugins/select2/select2-bootstrap.css" />
 <script src="../plugins/select2/select2.min.js" type="text/javascript"></script>
 <script type="text/javascript" src="../js/angular-select2.js"> </script>

(2)修改 typeTemplateController.js ,定义品牌列表数据。

$scope.brandList={data:[{id:1,text:'联想'},{id:2,text:'华为'},{id:3,text:'小米'}]};//
品牌列表

(3)在 type_template.html 用 select2 组件实现多选下拉框

<input select2 select2-model="entity.brandIds" config="brandList" multiple placeholder="选择品牌(可多选)" class="form-control" type="text"/>

multiple 表示可多选

Config 用于配置数据来源

select2-model 用于指定用户选择后提交的变量

最终实现效果如下:

3. 后端数据支撑

我们现在让这个下拉列表的数据从数据库中提取,修改后端代码

(1)pinyougou-dao 工程 ,在 TbBrandMapper.xml 中添加 SQL 语句配置

<select id="selectOptionList" resultType="java.util.Map" >
 select id,name as text from tb_brand
 </select>

(2)在 pinyougou-dao 的 TbBrandMapper 中添加方法定义

List<Map> selectOptionList();

(3)修改 pinyougou-sellergoods-interface 的 BrandService.java,增加方法定义

/**
* 品牌下拉框数据
*/
List<Map> selectOptionList();

(4)修改 pinyougou-sellergoods-service 的BrandServiceImpl.java,增加方法。

/**
* 列表数据
*/
public List<Map> selectOptionList() {
return brandMapper.selectOptionList();
}

(5)修改 pinyougou-manager-web 的BrandController.java

@RequestMapping("/selectOptionList")
public List<Map> selectOptionList(){
  return brandService.selectOptionList();
}

(6)修改 pinyougou-manager-web 的 brandService.js

//下拉列表数据
this.selectOptionList=function(){
return $http.get('../brand/selectOptionList.do');
}

(7)修改 pinyougou-manager-web 的typeTemplateController.js

因为我们在模板控制层中需要使用品牌服务层的方法,所以需要添加依赖注入

//控制层
app.controller('typeTemplateController' ,function($scope,$controller ,typeTemplate
Service ,brandService){

使用品牌服务方法实现查询,结果赋给变量

$scope.brandList={data:[]};//品牌列表
//读取品牌列表
$scope.findBrandList=function(){
  brandService.selectOptionList().success(
  function(response){
    $scope.brandList={data:response};
  }
);
}

(8)修改 type_template.html ,添加 JS 引入

<script type="text/javascript" src="../js/base_pagination.js"> </script>
<script type="text/javascript" src="../js/service/typeTemplateService.js"> </script>
<script type="text/javascript" src="../js/service/brandService.js"> </script>
<script type="text/javascript" src="../js/controller/baseController.js"> </script>
<script type="text/javascript" src="../js/controller/typeTemplateController.js"> 
</script>

特别注意一下,JS 引入的位置,要在typeTemplateController.js 之前,因为该控制器要使用到它

4.规格下拉列表

(代码略,参照品牌下拉列表的实现步骤 )

目录
相关文章
|
6月前
|
NoSQL 调度 Redis
19- 你的项目中哪里用到了分布式锁
在一个项目中,为解决集群环境下SpringTask定时任务的重复执行问题,采用了Redis实现分布式锁来管理任务调度,防止资源浪费。后来因任务量和执行规则增加,以及单节点效率限制,系统改用XXL-JOB,分布式锁不再使用。
68 2
|
6月前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(一)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
89 0
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
122 1
|
5月前
|
NoSQL Java 应用服务中间件
大厂面试必备:如何轻松实现分布式Session管理?
这篇文章介绍三种分布式Session的实现方案:基于JWT的Token、基于Tomcat的Redis和基于Spring的Redis。JWT方案通过生成Token存储用户信息,实现无状态、可扩展的会话管理,但可能增加请求负载且数据安全性较低。Tomcat与Redis结合,通过配置Tomcat和Redis,实现Session集中管理和高性能存储,但配置相对复杂。Spring整合Redis适用于SpringBoot和SpringCloud项目,集成方便,扩展性强,但同样依赖外部Redis服务。每种方法有其优缺点,适用场景不同。作者小米是一个技术爱好者,欢迎关注其微信公众号“软件求生”获取更多技术内容
243 4
|
2月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
90 6
面试官:项目中如何实现分布式锁?
|
5月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
227 0
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14933 30
|
3月前
|
监控 Cloud Native 容灾
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
|
3月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
6月前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
45 0

热门文章

最新文章