146 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
| /**
 | ||
|  * author:zhangxiaowu
 | ||
|  * date:2016年9月11日
 | ||
|  * version:1.0
 | ||
|  * email:uf_zhangxiaowu@163.com
 | ||
|  */
 | ||
| 
 | ||
| var alreadySetSkuVals = {};//已经设置的SKU值数据
 | ||
| 
 | ||
| $(function(){
 | ||
| 	//sku属性发生改变时,进行表格创建
 | ||
| 	$(document).on("change",'.sku_value',function(){
 | ||
| 		getAlreadySetSkuVals();//获取已经设置的SKU值
 | ||
| 		console.log(alreadySetSkuVals);
 | ||
| 		var b = true;
 | ||
| 		var skuTypeArr =  [];//存放SKU类型的数组
 | ||
| 		var totalRow = 1;//总行数
 | ||
| 		//获取元素类型
 | ||
| 		$(".SKU_TYPE").each(function(){
 | ||
| 			//SKU类型节点
 | ||
| 			var skuTypeNode = $(this).children("li");
 | ||
| 			var skuTypeObj = {};//sku类型对象
 | ||
| 			//SKU属性类型标题
 | ||
| 			skuTypeObj.skuTypeTitle = $(skuTypeNode).attr("sku-type-name");
 | ||
| 			//SKU属性类型主键
 | ||
| 			var propid = $(skuTypeNode).attr("propid");
 | ||
| 			skuTypeObj.skuTypeKey = propid;
 | ||
| 			//是否是必选SKU 0:不是;1:是;
 | ||
| 			var is_required = $(skuTypeNode).attr("is_required");
 | ||
| 			skuValueArr = [];//存放SKU值得数组
 | ||
| 			//SKU相对应的节点
 | ||
| 			var skuValNode = $(this).next();
 | ||
| 			//获取SKU值
 | ||
| 			var skuValCheckBoxs = $(skuValNode).find("input[type='checkbox'][class*='sku_value']");
 | ||
| 			var checkedNodeLen = 0 ;//选中的SKU节点的个数
 | ||
| 			$(skuValCheckBoxs).each(function(){
 | ||
| 				if($(this).is(":checked")){
 | ||
| 					var skuValObj = {};//SKU值对象
 | ||
| 					skuValObj.skuValueTitle = $(this).val();//SKU值名称
 | ||
| 					skuValObj.skuValueId = $(this).attr("propvalid");//SKU值主键
 | ||
| 					skuValObj.skuPropId = $(this).attr("propid");//SKU类型主键
 | ||
| 					skuValueArr.push(skuValObj);
 | ||
| 					checkedNodeLen ++ ;
 | ||
| 				}
 | ||
| 			});
 | ||
| 			if(is_required && "1" == is_required){//必选sku
 | ||
| 				if(checkedNodeLen <= 0){//有必选的SKU仍然没有选中
 | ||
| 					b = false;
 | ||
| 					return false;//直接返回
 | ||
| 				}
 | ||
| 			}
 | ||
| 			if(skuValueArr && skuValueArr.length > 0){
 | ||
| 				totalRow = totalRow * skuValueArr.length;
 | ||
| 				skuTypeObj.skuValues = skuValueArr;//sku值数组
 | ||
| 				skuTypeObj.skuValueLen = skuValueArr.length;//sku值长度
 | ||
| 				skuTypeArr.push(skuTypeObj);//保存进数组中
 | ||
| 			}
 | ||
| 		});
 | ||
| 		var SKUTableDom = "";//sku表格数据
 | ||
| 		//开始创建行
 | ||
| 		if(b){//必选的SKU属性已经都选中了
 | ||
| 			
 | ||
| //			//调整顺序(少的在前面,多的在后面)
 | ||
| //			skuTypeArr.sort(function(skuType1,skuType2){
 | ||
| //				return (skuType1.skuValueLen - skuType2.skuValueLen)
 | ||
| //			});
 | ||
| //			
 | ||
| 			SKUTableDom += "<table class='skuTable'><tr>";
 | ||
| 			//创建表头
 | ||
| 			for(var t = 0 ; t < skuTypeArr.length ; t ++){
 | ||
| 				SKUTableDom += '<th>'+skuTypeArr[t].skuTypeTitle+'</th>';
 | ||
| 			}
 | ||
| 			SKUTableDom += '<th>价格</th><th>库存</th>';
 | ||
| 			SKUTableDom += "</tr>";
 | ||
| 			//循环处理表体
 | ||
| 			for(var i = 0 ; i < totalRow ; i ++){//总共需要创建多少行
 | ||
| 				var currRowDoms = "";
 | ||
| 				var rowCount = 1;//记录行数
 | ||
| 				var propvalidArr = [];//记录SKU值主键
 | ||
| 				var propIdArr = [];//属性类型主键
 | ||
| 				var propvalnameArr = [];//记录SKU值标题
 | ||
| 				var propNameArr = [];//属性类型标题
 | ||
| 				for(var j = 0 ; j < skuTypeArr.length ; j ++){//sku列
 | ||
| 					var skuValues = skuTypeArr[j].skuValues;//SKU值数组
 | ||
| 					var skuValueLen = skuValues.length;//sku值长度
 | ||
| 					rowCount = (rowCount * skuValueLen);//目前的生成的总行数
 | ||
| 					var anInterBankNum = (totalRow / rowCount);//跨行数
 | ||
| 					var point = ((i / anInterBankNum) % skuValueLen);
 | ||
| 					propNameArr.push(skuTypeArr[j].skuTypeTitle);
 | ||
| 					if(0  == (i % anInterBankNum)){//需要创建td
 | ||
| 						currRowDoms += '<td rowspan='+anInterBankNum+'>'+skuValues[point].skuValueTitle+'</td>';
 | ||
| 						propvalidArr.push(skuValues[point].skuValueId);
 | ||
| 						propIdArr.push(skuValues[point].skuPropId);
 | ||
| 						propvalnameArr.push(skuValues[point].skuValueTitle);
 | ||
| 					}else{
 | ||
| 						//当前单元格为跨行
 | ||
| 						propvalidArr.push(skuValues[parseInt(point)].skuValueId);
 | ||
| 						propIdArr.push(skuValues[parseInt(point)].skuPropId);
 | ||
| 						propvalnameArr.push(skuValues[parseInt(point)].skuValueTitle);
 | ||
| 					}
 | ||
| 				}
 | ||
| //				
 | ||
| //				//进行排序(主键小的在前,大的在后),注意:适用于数值类型的主键
 | ||
| //				propvalidArr.sort(function(provids1,propvids2){
 | ||
| //					return (provids1 - propvids2)
 | ||
| //				});
 | ||
| 				
 | ||
| 				var propvalids = propvalidArr.toString()
 | ||
| 				var alreadySetSkuPrice = "";//已经设置的SKU价格
 | ||
| 				var alreadySetSkuStock = "";//已经设置的SKU库存
 | ||
| 				//赋值
 | ||
| 				if(alreadySetSkuVals){
 | ||
| 					var currGroupSkuVal = alreadySetSkuVals[propvalids];//当前这组SKU值
 | ||
| 					if(currGroupSkuVal){
 | ||
| 						alreadySetSkuPrice = currGroupSkuVal.skuPrice;
 | ||
| 						alreadySetSkuStock = currGroupSkuVal.skuStock
 | ||
| 					}
 | ||
| 				}
 | ||
| 				//console.log(propvalids);
 | ||
| 				SKUTableDom += '<tr propvalids=\''+propvalids+'\' propids=\''+propIdArr.toString()+'\' propvalnames=\''+propvalnameArr.join(";")+'\'  propnames=\''+propNameArr.join(";")+'\' class="sku_table_tr">'+currRowDoms+'<td><input type="text" class="setting_sku_price" value="'+alreadySetSkuPrice+'"/></td><td><input type="text" class="setting_sku_stock" value="'+alreadySetSkuStock+'"/></td></tr>';
 | ||
| 			}
 | ||
| 			SKUTableDom += "</table>";
 | ||
| 		}
 | ||
| 		$("#skuTable").html(SKUTableDom);
 | ||
| 	});
 | ||
| });
 | ||
| 
 | ||
| /**
 | ||
|  * 获取已经设置的SKU值 
 | ||
|  */
 | ||
| function getAlreadySetSkuVals(){
 | ||
| 	alreadySetSkuVals = {};
 | ||
| 	//获取设置的SKU属性值
 | ||
| 	$("tr[class*='sku_table_tr']").each(function(){
 | ||
| 		var skuPrice = $(this).find("input[type='text'][class*='setting_sku_price']").val();//SKU价格
 | ||
| 		var skuStock = $(this).find("input[type='text'][class*='setting_sku_stock']").val();//SKU库存
 | ||
| 		if(skuPrice || skuStock){//已经设置了全部或部分值
 | ||
| 			var propvalids = $(this).attr("propvalids");//SKU值主键集合
 | ||
| 			alreadySetSkuVals[propvalids] = {
 | ||
| 				"skuPrice" : skuPrice,
 | ||
| 				"skuStock" : skuStock
 | ||
| 			}
 | ||
| 		}
 | ||
| 	});
 | ||
| }
 |