function dr_sku_add_group() { var id = parseInt($("#dr_sku_result .fc-sku-group:last").attr("did")); if (id == NaN || id == 'NaN' || isNaN(id)) { id = 0; } else { id++; } id = dr_sku_get_id(id); var html = tpl_group; html = html.replace(/\{id\}/g, id); html = html.replace(/\{name\}/g, "属性名称_"+(id+1)); html = html.replace(/\{value\}/g, ""); $("#dr_sku_result").append(html); } function dr_sku_get_id(id) { if ($('#dr_sku_group_'+id).length) { id = parseInt(id) + 1; return dr_sku_get_id(id); } return id; } /** 取下一组规格值的 iid:在当前属性组内取 max(did/行 id 后缀)+1,并避开已占用的 DOM id */ function dr_sku_get_next_value_iid(id) { var maxIid = -1; var prefix = "dr_sku_value_" + id + "_"; var $values = $("#dr_sku_group_"+id).find(".fc-sku-group-body").first().find(".fc-sku-group-value"); $values.each(function () { var $el = $(this); var d = parseInt($el.attr("did"), 10); if (!isNaN(d) && d > maxIid) { maxIid = d; } var eid = $el.attr("id") || ""; if (eid.indexOf(prefix) === 0) { var suf = parseInt(eid.slice(prefix.length), 10); if (!isNaN(suf) && suf > maxIid) { maxIid = suf; } } }); var next = maxIid + 1; while ($("#dr_sku_group_"+id+" #"+prefix+next).length) { next++; } return next; } function dr_sku_del_group(id) { $("#dr_sku_group_"+id).remove(); step.Creat_Table(); } function dr_sku_del_value(id, iid) { $("#dr_sku_group_"+id+" #dr_sku_value_"+id+"_"+iid).remove(); step.Creat_Table(); } function dr_sku_init() { step.Creat_Table(); } function dr_sku_edit_group(id) { var name = $("#dr_sku_group_"+id+" .fc-sku-group-name .fc-sku-group-name-input").html(); $("#dr_sku_group_"+id+" .fc-sku-group-name .fc-sku-group-name-input").html(''); $("#dr_sku_group_"+id+" .fc-sku-group-name .edit").hide(); $("#dr_sku_group_"+id+" .fc-sku-group-name .save").show(); } function dr_sku_save_group(id) { var name = $("#dr_sku_group_"+id+" .fc-sku-group-name .fc-sku-group-name-input .name").val(); $("#dr_sku_group_"+id+" .fc-sku-group-name .fc-sku-group-name-input").html(name); $("#dr_sku_group_"+id+" .fc-sku-group-name .edit").show(); $("#dr_sku_group_"+id+" .fc-sku-group-name .save").hide(); $("#dr_sku_group_text_"+id).val(name); step.Creat_Table(); } function dr_sku_add_value(id) { var html = tpl_value; var iid = dr_sku_get_next_value_iid(id); html = html.replace(/\{id\}/g, id); html = html.replace(/\{iid\}/g, iid); html = html.replace(/\{name\}/g, "值_"+(iid+1)); $("#dr_sku_group_"+id).find(".fc-sku-group-body").first().append(html); step.Creat_Table(); } function dr_select_sku_price() { $('.fc-sku-select-price .fc-sku-value').click(function () { $(this).parent('.fc-sku-select-price').find('.fc-sku-value').removeClass('red'); $(this).addClass('red'); dr_get_sku_price(); }); } function dr_get_sku_price() { var oname = new Array(); $('.fc-sku-select-price').each(function () { oname.push($(this).find('.red').attr('fvalue')); }); var k = oname.join("_"); $('#dr_sku_value').val(k); $('#dr_sku_price').html($('#dr_sku_price_'+k).val()); $('#dr_sku_quantity').html($('#dr_sku_quantity_'+k).val()); $('#dr_sku_sn').html($('#dr_sku_sn_'+k).val()); } var myArraymin=function(array) { return Float.min.apply(Float,array); } var step = { //SKU信息组合 Creat_Table: function () { step.hebingFunction(); var $skuRoot = $("#dr_sku_result"); var SKUObj = $skuRoot.length ? $skuRoot.find(".fc-sku-group") : $(".fc-sku-group"); //var skuCount = SKUObj.length;// var arrayName = new Array(); //名称组数 var arrayTile = new Array(); //标题组数 var arrayInfor = new Array(); //盛放每组选中的CheckBox值的对象 var arrayColumn = new Array(); //指定列,用来合并哪些列 var bCheck = true;//是否全选 $.each(SKUObj, function () { var columnIndex = $(this).attr('did'); var $body = $(this).find(".fc-sku-group-body").first(); if (!$body.length) { return; } arrayColumn.push(columnIndex); arrayTile.push($(this).find(".fc-sku-group-name-input").html()); var order = new Array(); var order_name = new Array(); $body.find(".fc-sku-value-name-input").each(function () { order.push($(this).val()); order_name.push($(this).attr("fname")); }); arrayInfor.push(order); arrayName.push(order_name); if (order.join() == "") { bCheck = false; } }); //console.log(arrayTile); //开始创建Table表 if (bCheck == true) { var RowsCount = 0; $("#dr_sku_table").html(""); var table = $("
"); table.appendTo($("#dr_sku_table")); var thead = $(""); thead.appendTo(table); var trHead = $(""); trHead.appendTo(thead); //创建表头 $.each(arrayTile, function (index, item) { var td = $("" + item + ""); td.appendTo(trHead); }); var itemColumHead = $(sku_field_name); itemColumHead.appendTo(trHead); var tbody = $(""); tbody.appendTo(table); ////生成组合 var zuheDate = step.doExchange(arrayInfor); var zuheDate2 = step.doExchange(arrayName); if (zuheDate != 'undefined' && zuheDate != undefined && zuheDate.length > 0) { //创建行 $.each(zuheDate, function (index, item) { var td_array = item.split(","); var tr = $(""); var oname = zuheDate2[index].replace(/,/g, "_"); tr.appendTo(tbody); $.each(td_array, function (i, values) { var td = $("" + values + ""); td.appendTo(tr); }); for(var key in sku_field_id){ var ovalue = arrayValue[oname+"_"+sku_field_id[key]]; if (ovalue == undefined) { ovalue = ''; } if (sku_field_id[key] == 'image') { // 图片模式 var oimg = ''; var is_show_img = 'display:none'; if (ovalue && ovalue != 0) { oimg = arrayValue[oname+"_"+sku_field_id[key]+"_url"] is_show_img = 'display:block'; } var td = $(""); } else { var td = $(""); } td.appendTo(tr); } }); } //结束创建Table表 arrayColumn.pop();//删除数组中最后一项 //合并单元格 $(table).mergeCell({ // 目前只有cols这么一个配置项, 用数组表示列的索引,从0开始 cols: arrayColumn }); } },//合并行 hebingFunction: function () { $.fn.mergeCell = function (options) { return this.each(function () { var cols = options.cols; for (var i = cols.length - 1; cols[i] != undefined; i--) { // fixbug console调试 // console.debug(cols[i]); mergeCell($(this), cols[i]); } dispose($(this)); }); }; // 如果对javascript的closure和scope概念比较清楚, 这是个插件内部使用的private方法 function mergeCell($table, colIndex) { $table.data('col-content', ''); // 存放单元格内容 $table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1 $table.data('col-td', $()); // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象 $table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用 // 我们对每一行数据进行"扫面"处理 关键是定位col-td, 和其对应的rowspan $('tbody tr', $table).each(function (index) { // td:eq中的colIndex即列索引 var $td = $('td:eq(' + colIndex + ')', this); // 取出单元格的当前内容 var currentContent = $td.html(); // 第一次时走此分支 if ($table.data('col-content') == '') { $table.data('col-content', currentContent); $table.data('col-td', $td); } else { // 上一行与当前行内容相同 if ($table.data('col-content') == currentContent) { // 上一行与当前行内容相同则col-rowspan累加, 保存新值 var rowspan = $table.data('col-rowspan') + 1; $table.data('col-rowspan', rowspan); // 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响 $td.hide(); // 最后一行的情况比较特殊一点 // 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan if (++index == $table.data('trNum')) $table.data('col-td').attr('rowspan', $table.data('col-rowspan')); } else { // 上一行与当前行内容不同 // col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理 if ($table.data('col-rowspan') != 1) { $table.data('col-td').attr('rowspan', $table.data('col-rowspan')); } // 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan $table.data('col-td', $td); $table.data('col-content', $td.html()); $table.data('col-rowspan', 1); } } }); } // 同样是个private函数 清理内存之用 function dispose($table) { $table.removeData(); } }, //组合数组 doExchange: function (doubleArrays) { var len = doubleArrays.length; if (len >= 2) { var arr1 = doubleArrays[0]; var arr2 = doubleArrays[1]; var len1 = doubleArrays[0].length; var len2 = doubleArrays[1].length; var newlen = len1 * len2; var temp = new Array(newlen); var index = 0; for (var i = 0; i < len1; i++) { for (var j = 0; j < len2; j++) { temp[index] = arr1[i] + "," + arr2[j]; index++; } } var newArray = new Array(len - 1); newArray[0] = temp; if (len > 2) { var _count = 1; for (var i = 2; i < len; i++) { newArray[_count] = doubleArrays[i]; _count++; } } //console.log(newArray); return step.doExchange(newArray); } else { return doubleArrays[0]; } } }