电商商品规则属性sku 工具类

/**
 * 商品模块;
 * 使用:var SKU = sku.init({ id:‘sku‘, item: item, data:data });
 * @config item = [{"id":1,"name":"职位","sub":[{"id":1,"name":"adc"},{"id":2,"name":"辅助"},{"id":3,"name":"战士"}]},{"id":2,"name":"知名度","sub":[{"id":4,"name":"50%"},{"id":5,"name":80%"},{"id":6,"name":"90%"}]}];
 * @param data = [{"ids":[{"1":"1"},{"2":"4"}],"price":0,"stock":0,"sku":0}];
 * **/
layui.define([‘jquery‘,‘form‘],function(e){
    "use strict";var $ = layui.jquery,form=layui.form,o ={
        c : {sv:‘‘,iv:‘‘,tv:‘‘,item:[],itemed:[],data:[],tableTitleId:[],tableTitle:[],tableTd:[]},
        z:function (x,y,a) {
            for(var i=0;i<a.length;i++){if( x+‘_‘+y == a[i] ) return ‘checked‘;} return ‘‘;
        },
        y:function (s,d,a,h) {
            for(var i=0;i<d.length;i++){ h += ‘<input type="checkbox" data-id="‘+s+‘_‘+d[i].id+‘" title="‘+d[i].name+‘" lay-skin="primary" lay-filter="item"‘+ this.z(s,d[i].id,a) +‘>‘;} return h;
        },
        x:function (d,a,h) {
            return ‘<div class="layui-form-item" pane><label class="layui-form-label">‘+d.name+‘</label><div class="layui-input-block" data-id="‘+d.id+‘">‘+this.y(d.id,d.sub,a,‘‘)+‘</div></div>‘;
        },
        w:function (d,a,h) {
            for(var i=0;i<d.length;i++){ h += this.x(d[i],a,‘‘); } return h;
        },
        st:function () {
            return ‘<table class="layui-table" lay-skin="" style="margin:0"><thead>‘+this.sth()+‘</thead><tbody>‘+this.stb()+this.stf()+‘</tbody></table>‘;
        },
        sth:function () {
            var h = ‘<tr>‘; for(var i=0;i<this.c.tableTitle.length;i++){ h += ‘<th>‘ +this.c.tableTitle[i]+ ‘</th>‘;} h += ‘<th>价格</th><th>库存</th><!--<th>货号</th>--></tr>‘; return h;
        },
        stb:function () {
            var t =this, h = ‘‘, na = [];
            for(var i=0;i<t.c.data.length;i++){
                h += ‘<tr>‘;
                for(var s=0;s<t.c.data[i].ids.length;s++){
                    var k = ‘‘,v=‘‘;
                    for(var item in t.c.data[i].ids[s]){
                        k = item; v = t.c.data[i].ids[s][item];
                    }
                    if(!na[k] || na[k]<1){
                        na[k] = this.ai(t.c.data[i].ids[s][item],this.c.tableTd);
                        if(na[k]>0){
                            h += ‘<td rowspan="‘+na[k]+‘">‘;
                            h += this.gin(item,t.c.data[i].ids[s][item]);
                            h += ‘</td>‘;
                        }
                    }
                    na[k] --;
                }
                h += ‘<td><input class="layui-input layui-table-input" data-index="‘+i+‘" data-type="price" lay-filter="input"  value="‘+t.c.data[i].price+‘" ></td>‘;
                // h += ‘<td><input class="layui-input layui-table-input" data-index="‘+i+‘" data-type="stock" lay-filter="input" value="‘+t.c.data[i].stock+‘" ></td>‘;
                h += ‘<td><input class="layui-input layui-table-input" data-index="‘+i+‘" data-type="sku" lay-filter="input" value="‘+t.c.data[i].sku+‘" ></td>‘;
                h += ‘</tr>‘;
            }
            return h;
        },
        stf:function () {
            if(this.c.data.length < 2) return ‘‘;
            return ‘<tr><th colspan="‘+this.c.tableTitle.length+‘" style="text-align: center">批量修改</th><th><input type="text" class="layui-input layui-table-input" lay-filter="input" data-type="sku-price" /></th><!--<th><input type="text" class="layui-input layui-table-input" lay-filter="input" data-type="sku-stock" /></th>--><th><input type="text" class="layui-input layui-table-input" lay-filter="input" data-type="sku-sku" /></th></tr>‘;
        },
        gin:function (a,b) {
            for( var i=0;i<this.c.item.length;i++){
                if(a == this.c.item[i].id){
                    for(var x=0;x<this.c.item[i].sub.length;x++){
                        if( this.c.item[i].sub[x].id == b ) return this.c.item[i].sub[x].name;
                    }
                }
            }
            return ‘‘;
        },
        ai:function (a,b) {
            for(var i=0;i<b.length;i++){
                for(var s=0;s<b[i].length;s++){
                    if(a == b[i][s]){
                        var c = 1;
                        for(var y=i+1;y<b.length;y++){
                            c *= (b[y].length);
                        }
                        return c;
                    }
                }
            }
            return 0;
        },
        inArray:function (s,a) { if(s && a && a.length>0){ for(var i=0;i<a.length;i++){ if(s == a[i]) return true; } } return false; },
        citd:function (i,b) {
            if(b && !this.inArray(i,this.c.itemed)) { this.c.itemed.push(i);return;}
            if(!b && this.c.itemed.indexOf(i) > -1) {this.c.itemed.splice(this.c.itemed.indexOf(i),1);return;}
        },
        cd:function () {
            var it = this.c.itemed;
            var ids = this.c.tableTitleId;
            var arr = [];
            if(it.length<1) return;
            for(var i=0;i<ids.length;i++){
                for(var s=0;s<it.length;s++){
                    var kv = it[s].split(‘_‘);
                    if( kv[0] == ids[i] ) {
                        if(!arr[i]) arr[i] = [];
                        arr[i].push( kv[1] );
                    }
                }
            }
            this.c.tableTd = arr;
            var sarr = [[]];
            for (var i = 0; i < arr.length; i++) {
                var tarr = [];
                for (var j = 0; j < sarr.length; j++)
                    for (var k = 0; k < arr[i].length; k++)
                        tarr.push(sarr[j].concat(arr[i][k]));
                sarr = tarr;
            }
            var narr = [];
            for( var i=0;i<sarr.length;i++ ){
                var tarr = {};
                tarr[‘ids‘] = [];
                for(var ii=0;ii<sarr[i].length;ii++){
                    var obj = {};
                    obj[ ids[ii] ] = sarr[i][ii];
                    tarr[‘ids‘].push( obj );
                }
                var rr = this.ced(tarr[‘ids‘]);
                tarr[‘price‘] = rr[‘price‘];
                // tarr[‘stock‘] = rr[‘stock‘];
                tarr[‘sku‘] = rr[‘sku‘];
                narr.push(tarr);
            }
            this.c.data = JSON.parse(JSON.stringify(narr));
        },
        ced:function(ids){
            var arr = [];arr[‘price‘]=0;arr[‘stock‘]=0;arr[‘sku‘]=0;
            var nd = [];
            for(var i=0;i<ids.length;i++){
                for(var d in ids[i]) nd.push(d+‘_‘+ids[i][d]);
            }
            var sd = [];
            for(var i=0;i<this.c.data.length;i++){
                sd[i] = [];
                ids = this.c.data[i].ids;
                for(var s=0;s<ids.length;s++){
                    for(var d in ids[s]) sd[i].push(d+‘_‘+ids[s][d]);
                }
                // 比对数据
                var is = true;
                for(var s=0;s<nd.length;s++){
                    if(this.inArray(nd[s],sd[i])){
                        is = is * true;
                    }else{
                        is = is * false;
                    }
                }
                if(is){
                    arr[‘price‘] = parseFloat(this.c.data[i].price);
                    // arr[‘stock‘] = parseInt(this.c.data[i].stock);
                    arr[‘sku‘] = this.c.data[i].sku;
                    return arr;
                }
            }
            return arr;
        },
        sod:function () {
            this.c.itemed.sort(function (v1,v2) {
                var kv1 = v1.split(‘_‘);
                var kv2 = v2.split(‘_‘);
                if(parseInt(kv1[0]) < parseInt(kv2[0])) return -1;
                if(parseInt(kv1[0]) > parseInt(kv2[0])) return 1;
                if(parseInt(kv1[1]) < parseInt(kv2[1])) return -1;
                if(parseInt(kv1[1]) > parseInt(kv2[1])) return 1;
                return 0;
            });
        },
        stt:function (d,a) {
            var t = this,d = t.c.item,a = t.c.itemed;
            t.c.tableTitleId = [];t.c.tableTitle = [];
            for(var i=0;i<d.length;i++){
                for(var ii=0;ii<d[i].sub.length;ii++){
                    if( t.inArray( d[i].id+‘_‘+d[i].sub[ii].id , a) && !t.inArray( d[i].id , t.c.tableTitleId )){
                        t.c.tableTitle.push(d[i].name);
                        t.c.tableTitleId.push(d[i].id);
                    }
                }
            }
            return;
        },
        listenInput:function () {
            var t = this;
            $(‘input[lay-filter]‘).on(‘change‘,function (e) {
                var v = $(this).val();
                var p = $(this).attr(‘data-type‘);
                var i = $(this).attr(‘data-index‘);
                if(p==‘sku‘ && t.c.data[i]) t.c.data[i].sku = v;
                if(p==‘price‘ && t.c.data[i]) t.c.data[i].price = isNaN(parseFloat(v))?0:parseFloat(v);
                // if(p==‘stock‘ && t.c.data[i]) t.c.data[i].stock = isNaN(parseInt(v))?0:parseInt(v);
                if(p==‘sku-sku‘){ for(var k=0;k<t.c.data.length;k++) t.c.data[k].sku = v+(k+1);}
                if(p==‘sku-price‘){ for(var k=0;k<t.c.data.length;k++) t.c.data[k].price = isNaN(parseFloat(v))?0:parseFloat(v);}
                // if(p==‘sku-stock‘){ for(var k=0;k<t.c.data.length;k++) t.c.data[k].stock = isNaN(parseInt(v))?0:parseInt(v);}
                t.rl();
            })
        },
        listen:function () {
            var t = this;
            form.on(‘checkbox(item)‘, function(data){
                var id = $(data.elem).attr(‘data-id‘);
                t.citd(id,data.elem.checked);
                t.sod();
                t.stt();
                t.cd();
                t.rl();
            });
            this.listenInput();
        },
        getItem:function () {
            return this.c.item;
        },
        getData:function () {
            console.log(111111)
            console.log(this.c.data)
            return this.c.data;
        },
        si:function (d) {
            for(var i=0;i<d.length;i++){
                if(d[i].ids){
                    for(var ii=0;ii<d[i].ids.length;ii++){
                        for(var k in d[i].ids[ii]){
                            if(!this.inArray(k+‘_‘+d[i].ids[ii][k],this.c.itemed)) this.c.itemed.push(k+‘_‘+d[i].ids[ii][k]);
                        }
                    }
                }
            }
        },
        f:function (c) {
            var s=new Date().getTime(),t = this;
            t.c.sv = c.id?c.id:‘sku‘;
            t.c.iv = c.itemelem?c.itemelem:‘item-‘+s;
            t.c.tv = c.tableelem?c.tableelem:‘table-‘+s;
            t.c.item = c.item?c.item:[];
            t.c.data = c.data?JSON.parse(JSON.stringify(c.data)):[];
            t.c.itemed = [];
            if(t.c.data){t.si(t.c.data);t.sod();t.stt();t.cd();}
        },
        rl:function () {
            $(‘#‘+this.c.tv).html(this.st());
            this.listenInput();
        },
        l:function () {
            $(‘#‘+this.c.sv).append(‘<div id="‘+this.c.iv+‘">‘+this.w(this.c.item,this.c.itemed,‘‘)+‘</div>‘);
            $(‘#‘+this.c.sv).append(‘<div class="layui-form-item" pane><label class="layui-form-label">商品</label><div class="layui-input-block" id="‘+this.c.tv+‘">‘+this.st()+‘</div></div></div>‘);
            form.render(‘checkbox‘);this.listen();
        },
        init:function (c) {this.f(c);this.l();return o;}
    };o.v = ‘1.0.0‘; e(‘sku‘, o);
});

html 部分::

<!-- 商品测试 --><div style="display:none;" id="sku"  data-item="" data-data=""></div><div class="layui-form-item" pane>    <label class="layui-form-label"></label>    <div class="layui-input-inline" id="data-html">    </div></div><!--<div class="layui-form-item">    <div class="layui-input-inline">        <a class="layui-btn" id="_get">修改</a>    </div></div>-->js部分::
console.log(JSON.stringify(data.data))$("#sku").html("");item=data.data;var data = [{"ids":[{"1":"1"},{"2":"2"}],"price":0,"stock":0,"sku":0}];//加载默认数据SKU = sku.init({ id:‘sku‘, item: item, data:data });$("#_get").click(function () {    var data1=SKU.getData();//获取sku 数据    var data2=SKU.getItem();//获取sku 数据    property_ids=data1;    $(‘#data-html‘).html(JSON.stringify(data1))});

原文地址:https://www.cnblogs.com/caozengling/p/9165262.html

时间: 2024-10-13 01:57:17

电商商品规则属性sku 工具类的相关文章

属性 每秒10万吞吐 并发 架构 设计 58最核心的帖子中心服务IMC 类目服务 入口层是Java研发的,聚合层与检索层都是C语言研发的 电商系统里的SKU扩展服务

小结: 1. 海量异构数据的存储问题 如何将不同品类,异构的数据统一存储起来呢? (1)全品类通用属性统一存储: (2)单品类特有属性,品类类型与通用属性json来进行存储: 2. 入口层是Java研发的,聚合层与检索层都是C语言研发的 3. (1)数据库提供“帖子id”的正排查询需求: (2)所有非“帖子id”的个性化检索需求,统一走外置索引: 4. 定期全量重建索引 5. 为应对100亿级别数据量.几十万级别的吞吐量,业务线各种复杂的复杂检索查询,扩展性是设计重点: (1)统一的代理层,作为

多商家电商商品模型

最近几天在设计多商家电商商品模型,先后设计了几种方案.每个方案都有各自的特点,没有最好的方案,只有最适合的方案.这里把各种方案进行简单的说明. 1. 分散型商品模型 这种模型下,商品和单品的各种属性都有各个商家(或区域)分别管理.会产生大量的重复数据,相同商品没有统一的格式,后期统计分析困难.优点是结构简单易于理解,开发速度快. 2.平台集中管理商品模型 在这种模型下,平台统一管理商品.添加商品统一由平台进行,或者商家添加后提交到平台审核.平台实现了对商品的统一管理.但是商家需要维护单品的所有属

电商商品搜索现状

各大电商商品自然搜索都有自己独特的搜索算法,但总的说来都是根据商品计算搜索条件相关性,然后根据权重进行排序展示,那么哪些因数会影响商品排序名次呢? 拿某宝举例: 淘宝排名因素主要有:动态评分,收藏人气,发货速度,销量,转化率,是否橱窗推荐,浏览量,下架时间,是否公益宝贝,价格,是否交保证金,这些因素形成一个综合人气,淘宝排名默认综合排名. 1:默认综合排名=人气+销量+信誉+价格,其中人气=浏览量+收藏量 淘宝首页随便搜索一个产品下面强调一些产品关键词放前后位置不影响排名,比如新款特价女装内衣,

对象属性拷贝工具类的性能比较

一.对象属性拷贝工具类 ”天下武功,唯快不破“.在互联网行业中体现的更加淋淋尽致.我们在业务系统会经常遇到业务对象间属性的拷贝,对如外接口一般都使用特定的DTO对象,而不会使用领域模型,以避免两者的变动互相影响.我们不仅要关注“快”,还要注重CPU的稳定即避免CPU使用的大起大落现象.如何高效完成属性的拷贝并降低对CPU的使用率或避免CPU的抖动. 相关博文已经有很多,为什么还要自己在一篇类似的哪?原因有二:一是加深理解二是比较各自优劣.目前对象间属性的拷贝常用的方法大致如下: 手动拷贝(set

属性储存工具类SpUtils

属性储存工具类SharedPreferencesUtils package com.flyou.utils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import android.content.Context; import android.content.SharedPreferences; public class S

Dozer-对象属性映射工具类

Dozer-对象属性映射工具类 工具类代码: import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.dozer.DozerBeanMapper; import org.dozer.Mapper; /** * <pre>对象属性映射工具类</pre> * @author lmw * */ public class MapperUtil { private static f

电商商品中心类目体系

淘宝目前在线商品数超过 10 亿,如何精准的帮助用户找到他想要的商品呢?经过多年的探索,淘宝通过建立一套完整的类目属性体系,终于较好的解决了这一问题,今天就跟大家一起来谈谈淘宝的类目属性体系. ▍一点点历史和架构 2003 年淘宝刚上线时,商品量很少,没有分类. 后来,商品量上百,开始有了对商品进行单级分类,有点类似于现在的一级行业类目. 等到商品上万的时候,商品的单级分类已经不能满足需求,开始有了多级分类,就是一颗类目树了.从 06 年开始引入了属性,商家按照属性模板填写属性,用户可以按照属性

电商商品秒杀系统架构分析与实战

网址:http://my.oschina.net/xianggao/blog/524943 0 系列目录 1 秒杀业务分析 2 秒杀技术挑战 3 秒杀架构原则 4 秒杀架构设计 4.1 前端层设计 4.2 站点层设计 4.3 服务层设计 4.4 数据库设计 4.4.1 基本概念 4.4.2 设计思路 5 大并发带来的挑战 5.1 请求接口的合理设计 5.2 高并发的挑战:一定要“快” 5.3 重启与过载保护 6 作弊的手段:进攻与防守 6.1 同一个账号,一次性发出多个请求 6.2 多个账号,一

电商数据分析基础指标体系(8类)

目录 1.总体运营指标 2.网站流量指标 3.销售转化指标 4.客户价值指标 5.商品类指标 SKU SPU 6.市场营销活动指标 7.风控类指标 8.市场竞争指标 构建电商数据分析的基础指标体系,主要分为8类指标. 1.总体运营指标 总体运营指标:从流量.订单.总体销售业绩.整体指标进行把控,起码对运营的电商平台有大致了解,到底运营的怎么样?是亏了?还是赚了? 流量类指标 独立访客数(UV) 页面访客数(PV) 人均页面访问数 订单产生效率指标 总订单数量 访问到下单转化率 -- 漏斗模型 总