cxgj/widgets/views/goods-sku.php
2024-01-29 16:03:12 +08:00

395 lines
16 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @author Any
* @description KISS
* @date 2021年10月7日
* @version 1.0.0
*
* _____LOG_____
*
*/
?>
<style>
.input-control-group .btn-control,
.input-control-group .input-wrap,
.input-control-group .label {
display: inline-block;
height: 30px;
line-height: 30px;
padding: 0 10px;
font-size: 12px;
border: 1px solid #C9C9C9;
background-color: #fff;
color: #555;
float: left;
}
.input-control-group .input-wrap {
border-left-width: 0;
border-right-width: 0;
}
.input-control-group .input-wrap .input-control {
height:100%;
border-width: 0;
}
.input-control-group .btn-control:hover {
background-color: #009688;
border: 1px solid #009688;
color: #fff;
cursor: pointer;
}
</style>
<div class="layui-form-item attr-group-panel" id="<?=$id?>" lay-ignore>
<label class="layui-form-label">业务类型</label>
<div class="layui-input-block">
<div class="input-control-group">
<label class="label">业务组</label>
<div class="input-wrap">
<input type="text" name="" required="" placeholder="请输入业务" autocomplete="off" class="input-control" v-model="attr_group_name">
</div>
<span class="btn-control" v-on:click="add_attr_group"><i class="layui-icon"></i>添加</span>
</div>
</div>
<div class="attr-group-list layui-input-block layui-mt-15 layui-mb-15" v-for="(attr_group,index) in attr_groups">
<div class="attr-group-item">
<div class="layui-btn-group">
<button class="layui-btn layui-btn-primary layui-btn-sm">{{attr_group['attr_group_name']}}</button>
<button class="layui-btn layui-btn-primary layui-btn-sm" v-on:click="remove_attr_group(index)"><i class="layui-icon">ဆ</i></button>
</div>
</div>
<div class="layui-mt-15">
<div class="input-control-group">
<label class="label">{{attr_group['attr_group_name']}}</label>
<div class="input-wrap">
<input type="text" name="" required="" placeholder="请输入规格值" autocomplete="off" class="input-control" v-model="attr_group.attr_name">
</div>
<span class="btn-control" v-on:click="add_attr_name(index)"><i class="layui-icon"></i>添加</span>
</div>
</div>
<div class="layui-row">
<button class="layui-btn layui-btn-sm layui-btn-normal layui-mt-15" v-for="(attr_item,i) in attr_group['attr_list']" v-on:click="remove_attr_name(index,i)">{{attr_item['attr_name']}}&nbsp;<i class="layui-icon"></i> </button>
</div>
</div>
<div class="layui-input-block" v-show="attr_groups.length > 0">
<table class="layui-table">
<thead>
<th v-for="attr_group in attr_groups" v-show="attr_group['attr_list'].length > 0">{{attr_group['attr_group_name']}}</th>
<th>
<div class="layui-inline">价格</div>
<div class="layui-inline">
<input class="layui-input" type="text" placeholder="批量设置价格" name="batch_price" v-model="batch_price" style="margin-right: 0;height: 34px;line-height: 34px;width:120px"/>
</div>
<div class="layui-inline">
<button class="layui-btn layui-btn-primary layui-btn-sm" v-on:click="batch_set_goods_price()" >设置</button>
</div>
</th>
</thead>
<tbody>
<tr v-for="(goods_attr,index) in attr">
<td v-for="attr_val in goods_attr['attr_list']">{{attr_val.attr_name}}</td>
<td><input class="layui-input" type="number" placeholder="" name="" v-model="attr[index]['price']" style="margin-right: 0;height: 34px;line-height: 34px;"/></td>
</tr>
</tbody>
</table>
</div>
<div class="layui-form-mid layui-word-aux"></div>
<div class="layui-hide" id="uploadCoverPicBtn"></div>
</div>
<script>
<?php $this->beginBlock('js_script_wrap') ?>
var _attr_<?=$id?> = JSON.parse('<?=$attr?>');
var _attr_groups_<?=$id?> = JSON.parse('<?=$attr_groups?>');
function fixAttrGroups(action){
var data = {};
data.attr_groups = _attr_groups_<?=$id?>;
data.attr = _attr_<?=$id?>;
$.each(data.attr_groups,function(index,item){
if(action){
item.attr_name = '';
} else {
delete item.attr_name;
}
data.attr_groups[index] = item;
});
$.each(data.attr,function(index,item){
if(!action && item.integral_num){
item.integral_num = item.integral_num * 1;
}
data.attr[index] = item;
});
return data;
}
fixAttrGroups('set');
(function($,layui,layer){
function doExchange(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 doExchange(newArray);
}
else {
return doubleArrays[0];
}
}
function hasExistAttr(mark, attr){
for(var i in attr){
var _mark = '';
for(var j in attr[i].attr_list){
_mark += attr[i].attr_list[j]['attr_group_name'] + '=' + attr[i].attr_list[j]['attr_name'] + '=';
}
if(mark == _mark){
return attr[i];
}
}
return null;
};
var vm = new Vue({
el:'#<?=$id?>',
data:{
attr:_attr_<?=$id?>,
attr_groups:_attr_groups_<?=$id?>,
attr_group_name:'',
batch_price:'',
batch_stock:'',
batch_integral_num:'',
upload_cover_pic_index:-1,
},
methods:{
remit:function(){
_attr_<?=$id?> = vm.attr;
_attr_groups_<?=$id?> = vm.attr_groups;
},
//添加规格组
add_attr_group:function(){
var attr_group_name = vm.attr_group_name;
attr_group_name = $.trim(attr_group_name);
if(attr_group_name.length == 0){
vm.attr_group_name = '';
return;
}
var flag = false;
for(var i in vm.attr_groups){
if(vm.attr_groups[i]['attr_group_name'] == attr_group_name){
flag = true;
break;
}
}
if(!flag){
vm.attr_groups.push({
'attr_group_name':attr_group_name,
'attr_list':[],
});
}
vm.attr_group_name = '';
vm.update_attr();
},
remove_attr_group:function(index){
var attr_groups = vm.attr_groups;
attr_groups.splice(index,1);
vm.attr_groups = attr_groups;
vm.update_attr();
},
add_attr_name:function(index){
var attr_list = vm.attr_groups[index]['attr_list'];
var attr_name = vm.attr_groups[index]['attr_name'];
attr_name = $.trim(attr_name);
if(attr_name.length == 0){
vm.attr_groups[index]['attr_name'] = '';
return;
}
var flag = false;
for(var i in attr_list){
if(attr_name == attr_list[i]['attr_name']){
flag = true;
break;
}
}
if(!flag){
attr_list.push({attr_name:attr_name});
vm.attr_groups[index]['attr_list'] = attr_list;
}
vm.attr_groups[index]['attr_name'] = '';
vm.update_attr();
},
remove_attr_name:function(index,attr_list_index){
var attr_list = vm.attr_groups[index]['attr_list'];
attr_list.splice(attr_list_index,1);
vm.attr_groups[index]['attr_list'] = attr_list;
vm.update_attr();
},
update_attr(){
vm.handle_attr_groups();
var attr_temp = vm.attr;
var attr_arr = [];
var attr_groups = vm.attr_groups;
for(var i in attr_groups){
var arr = [];
for(var j in attr_groups[i]['attr_list']){
arr.push(attr_groups[i]['attr_list'][j]['attr_id'] + "=,=," + attr_groups[i]['attr_list'][j]['attr_name']);
}
attr_arr.push(arr);
}
var attr_arr_sort = doExchange(attr_arr);
var attr = [];
for(var i in attr_arr_sort){
var item = {};
var attr_list = [];
var attr_list_arr = attr_arr_sort[i].split(',,,');
var sign_ids = [];
var mark = "";
for(var j in attr_list_arr){
var attr_id_name = attr_list_arr[j].split("=,=,");
var attr_id = attr_id_name.shift();
var attr_name = attr_id_name.pop();
sign_ids.push(attr_id);
attr_list.push({attr_id:attr_id,attr_name:attr_name,attr_group_name:attr_groups[j]['attr_group_name'],attr_group_id:attr_groups[j]['attr_group_id']});
mark += attr_groups[j]['attr_group_name'] + '=' + attr_name + '=';
}
var exists = hasExistAttr(mark,attr_temp);
if(exists){
attr.push(exists);
continue;
}
item.sign_id = sign_ids.join(':');
item.attr_list = attr_list;
item.price = '';
<?php if($open_integral):?>
item.integral_num = 0;
<?php endif;?>
attr.push(item);
}
vm.attr = attr;
vm.remit();
},
handle_attr_groups:function(){
var attr_groups = vm.attr_groups;
var attr_id = 0;
$.each(attr_groups,function(index,item){
item.attr_group_id = index+1;
$.each(item.attr_list,function(attr_list_index, sub_item){
attr_id += 1;
sub_item.attr_id = attr_id;
item.attr_list[attr_list_index] = sub_item;
});
attr_groups[index] = item;
});
vm.attr_groups = attr_groups;
},
batch_set_goods_price(){
var price = vm.batch_price;
if(price * 1 < 0){
return;
}
var attr = vm.attr;
$.each(attr,function(index,item){
item.price = price;
attr[index] = item;
});
vm.batch_price = '';
vm.attr = attr;
vm.remit();
},
batch_set_goods_stock(){
var stock = vm.batch_stock;
if(stock * 1 < 0){
return;
}
var attr = vm.attr;
$.each(attr,function(index,item){
item.stock = stock;
attr[index] = item;
});
vm.batch_stock = '';
vm.attr = attr;
vm.remit();
},
batch_set_goods_integral_num(){
var integral_num = vm.batch_integral_num;
if(integral_num * 1 < 0){
return;
}
var attr = vm.attr;
$.each(attr,function(index,item){
item.integral_num = integral_num;
attr[index] = item;
});
vm.batch_integral_num = '';
vm.attr = attr;
vm.remit();
},
upload_goods_cover_pic(index){
vm.upload_cover_pic_index = index;
$('#uploadCoverPicBtn').trigger('click');
}
}
});
layui.use(['upload', 'element'],function(){
var uploader = layui.upload;
setTimeout(function(){
uploader.render({
elem: '#uploadCoverPicBtn'
, url: '<?= $url ?>'
, accept: 'images'
, exts:'png|jpg|jpeg|gif|ico|bmp'
, before: function (obj) {
//预读本地文件示例不支持ie8
obj.preview(function (index, file, result) {
console.log(result)
if(vm.upload_cover_pic_index != -1){
vm.attr[vm.upload_cover_pic_index]['cover_pic'] = result;
}
});
}
, progress: function(n, elem){
}
, done: function (res) {
//如果上传失败
if (res.code != 0) {
return layer.msg(res.msg);
}
if(vm.upload_cover_pic_index != -1){
vm.attr[vm.upload_cover_pic_index]['cover_pic'] = res.data.url;
vm.upload_cover_pic_index = -1;
}
}
, error: function () {
}
});
},1000);
})
})($,layui,layer);
<?php $this->endBlock(); ?>
</script>
<?php $this->registerJs($this->blocks['js_script_wrap'], \yii\web\View::POS_END); ?>