后台商品属性组合小例子

今天2016.12.23马上圣诞节了,先祝大家圣诞快乐。最近,一直在忙公司购物webApp项目,用到技术vue vue-router等(等到项目上线后拿出来分享下)。这两天穿插着后台让帮忙做一个关于商品属性组合方面东西。今天交付给后台了,距离下班的这段时间时间把写的东西分享出来。当然代码里边还有很多可以优化的地方,后期如果有时间再拿出来说。

话不多说,先把结果图拿出来看下,知道是个什么东西。当然可能有些我说的不好,可以再详细的看下代码。

哎呦我去,公司这网速传了老半天。

大体操作流程是这样的

1.点击“添加多级型号”按钮,弹出层选择商品的默认型号“颜色或者尺码”(也可以新建)

2.点击弹出层确定后,商品规格的一些默认选项 如:颜色:::xxl,xxxl,m,s

3.选择完对应规格后会进行组合,动态生成表格

 知识点

1.用到的js库(jquery,layer.js)jq不说了,layer应该大家也不知道 不知道的同学点这里 http://www.layui.com/doc/modules/layer.html

2.面向对象编程

3.js内部的一些知识 数组 循环等等

这块核心代码 是两个类 我大概贴出来(当然个人习惯不是说写的很好,请大家指正)类1 :Skumodel 生成规格 类2:SkuCell动态产生表格内容类

  1 /***
  2              * Skumodel 为生成规格类
  3              * title为规格名字  string  例:尺码
  4              * times将要生成的规格项目  Array  例如:尺码:xxl,xl,m,s
  5              * dataid为产生型号的标识最外层元素上的id   string
  6              * **/
  7             var Skumodel = function(title, items, dataid) {
  8                 //最外层div+标题栏
  9                 this.title = title || "";
 10                 this.items = items || [];
 11                 this.container = $(‘<div class="sku_container" id="‘ + dataid + ‘"><div class="sku_modellist_title">‘ + this.title + ‘:</div></div>‘);
 12                 //模型列表
 13                 this.skumodels = $(‘<div class="sku_models"></div>‘);
 14                 this.skumlist = $(‘<div class="sku_list"></div>‘)
 15                 this.skuinputcon = $(‘<div class="sku_add"></div>‘);
 16                 //输入框
 17                 this.skuinput = $(‘<input type="text" placeholder="请输入型号属性">‘);
 18                 //新建按钮
 19                 this.addbtn = $(‘<a>新建</a>‘);
 20                 this.init(this.items)
 21             }
 22             Skumodel.prototype = {
 23                 //初始化显示组件
 24                 init: function(items) {
 25                     var html = ""
 26                     for(var i = 0; i < items.length; i++) {
 27                         html += ‘<span class="sku_item"><a data-id="‘ + getIndex() + ‘">‘ + items[i] + ‘</a><i class="sku_item_close">×</i></span>‘;
 28                     }
 29                     //获取所有生成按钮
 30                     this.skumlist.append($(html))
 31                     this.skumodels.append(this.skumlist)
 32                     this.container.append(this.skumodels)
 33                     this.skuinputcon.append(this.skuinput)
 34                     this.skuinputcon.append(this.addbtn)
 35                     this.skumodels.append(this.skuinputcon)
 36                     $(".sku_modellist").append(this.container);
 37                     this.bindEvent()
 38                 },
 39                 bindEvent: function() {
 40                     var self = this;
 41                     //点击新建按钮产生
 42                     this.addbtn.click(function() {
 43                         self.createItem();
 44                     });
 45                     this.activeItem();
 46                     //点击删除按钮删除
 47                     this.deleteItem();
 48                     //控制删除符号
 49                     this.toggleCloseEle();
 50                 },
 51                 //创建sku子元素
 52                 createItem: function() {
 53                     var value=$.trim(this.skuinput.val())
 54                     if(value.length <= 0) {
 55                         layer.alert("请输入内容");
 56                         return
 57                     }
 58                     if(sizes[this.title].indexOf(value)>=0){
 59                         layer.msg("请勿重复创建")
 60                         return;
 61                     }
 62                     sizes[this.title].push(this.skuinput.val())
 63                     this.skumlist.append($(‘<span class="sku_item"><a id="‘ + getIndex() + ‘">‘ + value + ‘</a><i class="sku_item_close">×</i></span>‘))
 64                     this.skuinput.val("")
 65                 },
 66                 //子元素是否选中事件
 67                 activeItem: function() {
 68                     this.skumlist.on("click", "a", function() {
 69                         $(this).toggleClass("itemactive");
 70                         tableContent()
 71                     });
 72                 },
 73                 //监听删除元素
 74                 deleteItem: function() {
 75                     var self=this;
 76                     this.skumlist.on("click", ".sku_item_close", function() {
 77                         $(this).parent().remove();
 78                         var text = $(this).parent().find("a").text();
 79                         var textarr = sizes[self.title];
 80                         textarr.splice(textarr.indexOf(text), 1)
 81                         tableContent();
 82                     });
 83                 },
 84                 //控制删除符号的显示
 85                 toggleCloseEle: function() {
 86                     //显示删除符号
 87                     this.skumlist.on("mouseover", ".sku_item", function() {
 88                         $(this).find(".sku_item_close").css({
 89                             display: "inline-block"
 90                         })
 91                     });
 92                     //显示删除符号
 93                     this.skumlist.on("mouseout", ".sku_item", function() {
 94                         $(this).find(".sku_item_close").css({
 95                             display: "none"
 96                         })
 97                     });
 98                 }
 99             };
100
101             /****
102              * SkuCell动态产生表格内容类
103              * cellist为表格内部元素    Array   如["红色","xxl"]
104              * dataid为行表格id 产生元素的唯一标识   string
105              * ***/
106             var SkuCell = function(celllist, dataid) {
107                 //每行表格的父元素
108                 this.cellcon = $(‘<div id="‘ + dataid + ‘" class="sku_cell clearfix"></div>‘);
109                 //价格输入
110                 this.moneyInput = $(‘<div class="sku_t_title"><input /></div>‘);
111                 //库存输入
112                 this.leftInput = $(‘<div class="sku_t_title"><input /></div>‘);
113                 this.init(celllist)
114             };
115             SkuCell.prototype = {
116                 constructor: SkuCell,
117                 init: function(celllist) {
118                     var html = "";
119                     for(var i = 0; i < celllist.length; i++) {
120                         html += ‘<div class="sku_t_title">‘ + celllist[i] + ‘</div>‘
121                     }
122                     this.cellcon.append($(html));
123                     this.cellcon.append(this.moneyInput);
124                     this.cellcon.append(this.leftInput);
125                     $(‘.sku_tablecell‘).append(this.cellcon)
126                 }
127             };

接下来就是组合部分

            /***
             * 排列组合计算出选择的规格型号的组合方式
             *
             * */
            function getResult() {
                var head = arguments[0][0];
                for(var i in arguments[0]) {
                    if(i != 0) {
                        head = group(head, arguments[0][i])
                    }
                }
                tabledata = [];
                $(".sku_cell").each(function(index) {
                    tabledata.push($(this).attr("id"))
                }).hide()
                for(var j = 0, len = head.length; j < len; j++) {
                    var newcell = head[j]["datatext"].split(‘,‘)
                    var dataid = head[j]["dataid"];
                    if(tabledata.indexOf(dataid) < 0) {
                        new SkuCell(newcell, dataid)
                    } else {
                        $("#" + dataid).show()
                    }
                }
            };
            //组合前两个数据
            function group(first, second) {
                var result = [];
                for(var i = 0, leni = first.length; i < leni; i++) {
                    for(var j = 0, len = second.length; j < len; j++) {
                        result.push({
                            dataid: first[i]["dataid"] + "-" + second[j]["dataid"],
                            datatext: first[i]["datatext"] + "," + second[j]["datatext"]
                        })
                    }
                }
                return result
            }

详细部分大家下载demo看下,地址:https://github.com/huashuaipeng/productdemo

时间: 2024-10-24 04:24:24

后台商品属性组合小例子的相关文章

JavaScript之属性操作及小例子

一.属性操作示例代码 代码详解: 首先要知道,html找标签是通过选择器,JavaScript寻找标签是通过,例: document.getElementById('box');可这么理解:在文档下寻找通过id标签获取元素 所以,下面两行代码可理解为:声明变量=后面接收通过box标签获得span区域元素,通过ul标签获得ul区域元素 var box=document.getElementById('box'); var ul=document.getElementById('ul');接下来就可

ecshop 属性表(attribute)商品属性表(goods_attr)货品表(prduct) 商品数量的联系

一个商城的商品属性存放在属性表(attribute)里 ,每个商品对应的属性在goods_attr里 goods_attr与(attribute)想关联,商品表里有商品数量的字段goods_number为什么有这个货品表呢? 因为 某件商品有多种属性的时候,那这个商品就成为了货品,也就是说不同属性的相同商品应该也存在差异,所以当设置商品属性的attr_type=1(表示单选属性)的时候,在 前台include/lib_comment.php 函数sort_goods_attr_id_array将

Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期

学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看new Vue(options)实例,这个过程发生了什么. vm实例上的属性又如何添加上去的,又如何渲染到浏览器页面上的. 关于vue的数据依赖和虚拟dom都是重点,必然会在以后的帖子记录. 这篇帖子就根据下例子,看看实例化一个vm实例做了啥吧. 先把小例子贴出来: <div id="app&

关于 JS 面向对象继承属性和方法的小例子

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>关于 JS 面向对象继承属性和方法的小例子</h1> </body> </html> <script> //人的构造函

spring小例子-springMVC+mybits整合的小例子

这段时间没更博,找房去了...   吐槽一下,自如太坑了...承诺的三年不涨房租,结果今年一看北京房租都在涨也跟着涨了... 而且自如太贵了,租不起了.. 突然有点理解女生找对象要房了..   搬家太受罪了... 今天更一下springMVC整合mybits形成最简单的网站demo. 大概效果就是这样的:左边是数据库查询结果,右边是页面访问结果: 首先,一个简单的springMVC小例子可以看这个http://www.cnblogs.com/xuejupo/p/5236448.html 这是在这

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)

lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能) 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能,调整索引行新增记录的图片字段. //封装类 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Web; using Lucene.Ne

AJAX一些基础知识和小例子讲解

首先说下AJAX不是一种语言 是一种技术. AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. ajax核心是一个new XMLHttpRequest()对象/ 在ie5.6中为new ActiveXObject("Microsoft.XMLHTTP")对象; XMLHttpRequest对象用于数据

前端实现商品属性选择

一.效果图 二.后台返回的数据格式 [{ "saleName": "颜色", "dim": 1, "saleAttrList": [{ "imagePath": null, "saleValue": "白色", "skuIds": [ 1, 2, 3 ] }, { "imagePath": null, "saleVal

appium webdriver 基本操作及小例子等

#encoding=utf-8 ''' ''' #driver新建 driver=webdriver.Remote('http://localhost:4723/wd/hub',caps) #关闭driver driver.quit() #find_element_by_id box=driver.find_element_by_id('com.xsteach.appedu:id/rl_home_top_search') box=driver.find_element_by_id('rl_hom