387 lines
10 KiB
HTML
387 lines
10 KiB
HTML
{extend name="base"/}
|
||
{block name="resources"}
|
||
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/layui/extend/cascader/cascader.css"/>
|
||
<style>
|
||
.contraction{display: inline-block;margin-right: 5px;}
|
||
.contraction span{cursor: pointer;display: inline-block;width: 17px;height: 17px;text-align: center;line-height: 14px;/* border: 1px solid #e9e9e9; */user-select: none;/* background: #fff; */}
|
||
.sku-list{overflow: hidden;padding: 0 45px;}
|
||
.sku-list li{float: left;display: flex;padding: 10px;margin-right: 10px;margin-bottom: 10px;border: 1px solid #EFEFEF;width: 294px;height: 140px;align-items: center;}
|
||
.sku-list li .img-wrap{vertical-align: middle;margin-right: 8px;width: 120px;height: 120px;text-align: center;line-height: 120px;}
|
||
.sku-list li .img-wrap img{max-width: 100%;max-height: 100%;}
|
||
/* .sku-list li .info-wrap span:first-of-type{font-weight: bold;} */
|
||
.sku-list li .info-wrap span{display: -webkit-box;margin-bottom: 5px;overflow: hidden;text-overflow: ellipsis;white-space: normal;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;}
|
||
.sku-list li .info-wrap span.sku-name{-webkit-line-clamp: 2;margin-bottom: 5px;}
|
||
.sku-list li .info-wrap span:last-child{margin-bottom: 0;}
|
||
.screen{margin-top: 15px;}
|
||
.category-wrap {width:185px!important;display: inline-block}
|
||
.el-input__inner {height:34px;line-height:34px;border-radius:2px;}
|
||
</style>
|
||
{/block}
|
||
{block name="main"}
|
||
|
||
<!-- 筛选面板 -->
|
||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||
<div class="layui-colla-item">
|
||
<form class="layui-colla-content layui-form layui-show">
|
||
<div class="layui-form-item">
|
||
<div class="layui-inline">
|
||
<label class="layui-form-label">商品名称</label>
|
||
<div class="layui-input-inline">
|
||
<input type="text" name="search_text" placeholder="请输入商品名称" autocomplete="off" class="layui-input">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="layui-inline">
|
||
<label class="layui-form-label">商品分类</label>
|
||
<div class="layui-input-inline category-wrap">
|
||
<input type="text" autocomplete="off" show="false" class="layui-input select-category" placeholder="请选择" readonly="">
|
||
<input type="hidden" name="category_id">
|
||
</div>
|
||
</div>
|
||
<div class="layui-inline">
|
||
<label class="layui-form-label">商品类型</label>
|
||
<div class="layui-input-inline">
|
||
<select name="goods_class" lay-filter="goods_class">
|
||
<option value="">全部</option>
|
||
<option value="1">实物商品</option>
|
||
<option value="2">虚拟商品</option>
|
||
{if $virtualcard_exit}<option value="3">电子卡密</option>{/if}
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="form-row">
|
||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 列表 -->
|
||
<table id="goods_list" lay-filter="goods_list"></table>
|
||
|
||
<!-- 商品信息 -->
|
||
<script type="text/html" id="goods_info">
|
||
<div class="table-title">
|
||
<div class="contraction" data-goods-id="{{d.goods_id}}" data-open="0">
|
||
<span>+</span>
|
||
</div>
|
||
<div class="title-pic">
|
||
<img layer-src="{{ns.img(d.goods_image.split(',')[0], 'big')}}" src="{{ns.img(d.goods_image.split(',')[0], 'small')}}"/>
|
||
</div>
|
||
<div class="title-content">
|
||
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.goods_name}}">{{d.goods_name}}</a>
|
||
</div>
|
||
</div>
|
||
</script>
|
||
|
||
<!-- 操作 -->
|
||
<script type="text/html" id="operation">
|
||
<div class="table-btn">
|
||
<a class="layui-btn" lay-event="delete">删除</a>
|
||
<a class="layui-btn" lay-event="recovery">恢复</a>
|
||
</div>
|
||
</script>
|
||
|
||
<!-- 批量操作 -->
|
||
<script type="text/html" id="toolbarOperation">
|
||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||
<button class="layui-btn layui-btn-primary" lay-event="recovery">恢复</button>
|
||
</script>
|
||
|
||
<!-- 批量操作 -->
|
||
<script type="text/html" id="batchOperation">
|
||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||
<button class="layui-btn layui-btn-primary" lay-event="recovery">恢复</button>
|
||
</script>
|
||
|
||
<!-- SKU商品列表 -->
|
||
<script type="text/html" id="skuList">
|
||
<tr class="js-sku-list-{{d.index}}">
|
||
<td></td>
|
||
<td colspan="8">
|
||
<ul class="sku-list">
|
||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||
<li>
|
||
<div class="img-wrap">
|
||
<img src="{{ns.img(d.list[i].sku_image, 'small')}}">
|
||
</div>
|
||
<div class="info-wrap">
|
||
<span class="sku-name">{{d.list[i].sku_name}}</span>
|
||
<span class="price">价格:¥{{d.list[i].price}}</span>
|
||
<span class="stock">库存:{{d.list[i].stock}}</span>
|
||
<span class="sale_num">销量:{{d.list[i].sale_num}}</span>
|
||
</div>
|
||
</li>
|
||
{{# } }}
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</script>
|
||
{/block}
|
||
{block name="script"}
|
||
<script>
|
||
layui.extend({
|
||
layCascader: '__STATIC__/ext/layui/extend/cascader/cascader'
|
||
})
|
||
var laytpl, layCascader;
|
||
$(function () {
|
||
$("body").on("click", ".contraction",function () {
|
||
var goods_id = $(this).attr("data-goods-id");
|
||
var open = $(this).attr("data-open");
|
||
var tr = $(this).parent().parent().parent().parent();
|
||
var index = tr.attr("data-index");
|
||
|
||
if(open == 1){
|
||
$(this).children("span").text("+");
|
||
$(".js-sku-list-"+index).remove();
|
||
}else{
|
||
$(this).children("span").text("-");
|
||
$.ajax({
|
||
url: ns.url("shop/goods/getGoodsSkuList"),
|
||
data: {goods_id:goods_id},
|
||
dataType: 'JSON',
|
||
type: 'POST',
|
||
async: false,
|
||
success: function (res) {
|
||
var list = res.data;
|
||
var sku_list = $("#skuList").html();
|
||
var data ={
|
||
list : list,
|
||
index : index
|
||
};
|
||
laytpl(sku_list).render(data, function(html) {
|
||
tr.after(html);
|
||
});
|
||
|
||
}
|
||
});
|
||
}
|
||
$(this).attr("data-open",(open == 0 ? 1 : 0));
|
||
|
||
})
|
||
});
|
||
layui.use(['form','laytpl', 'layCascader'], function () {
|
||
var form = layui.form,
|
||
repeat_flag = false; //防重复标识
|
||
|
||
laytpl = layui.laytpl;
|
||
layCascader = layui.layCascader;
|
||
|
||
form.render();
|
||
var table = new Table({
|
||
elem: '#goods_list',
|
||
url: ns.url("shop/goods/recycle"),
|
||
cols: [
|
||
[
|
||
{
|
||
type: 'checkbox',
|
||
unresize: 'false',
|
||
width: '3%'
|
||
},
|
||
{
|
||
title: '商品信息',
|
||
unresize: 'false',
|
||
width: '39%',
|
||
templet: '#goods_info'
|
||
},
|
||
{
|
||
field: 'price',
|
||
title: '价格',
|
||
unresize: 'false',
|
||
width: '6%',
|
||
align: 'right',
|
||
templet: function(data) {
|
||
return '¥'+ data.price;
|
||
}
|
||
},
|
||
{
|
||
unresize: 'false',
|
||
width: '2%'
|
||
},
|
||
{
|
||
field: 'goods_stock',
|
||
title: '库存',
|
||
unresize: 'false',
|
||
width: '8%'
|
||
},
|
||
{
|
||
field: 'sale_num',
|
||
title: '销量',
|
||
unresize: 'false',
|
||
width: '7%'
|
||
},
|
||
{
|
||
title: '商品状态',
|
||
unresize: 'false',
|
||
width: '8%',
|
||
templet: function (data) {
|
||
var str = '';
|
||
if (data.goods_state == 1) {
|
||
str = '正常';
|
||
} else if (data.goods_state == 0) {
|
||
str = '下架';
|
||
}
|
||
return str;
|
||
}
|
||
},
|
||
{
|
||
title: '创建时间',
|
||
unresize: 'false',
|
||
width: '15%',
|
||
templet: function (data) {
|
||
return ns.time_to_date(data.create_time);
|
||
}
|
||
},
|
||
{
|
||
title: '操作',
|
||
toolbar: '#operation',
|
||
unresize: 'false',
|
||
align : 'right'
|
||
}
|
||
]
|
||
],
|
||
toolbar: '#toolbarOperation',
|
||
bottomToolbar: "#batchOperation"
|
||
});
|
||
|
||
/**
|
||
* 监听工具栏操作
|
||
*/
|
||
table.tool(function (obj) {
|
||
var data = obj.data;
|
||
switch (obj.event) {
|
||
case 'delete':
|
||
//删除
|
||
deleteRecycleGoods(data.goods_id);
|
||
break;
|
||
case 'recovery':
|
||
//恢复
|
||
recoveryRecycle(data.goods_id);
|
||
break;
|
||
}
|
||
});
|
||
|
||
/**
|
||
* 删除
|
||
*/
|
||
function deleteRecycleGoods(goods_ids) {
|
||
layer.confirm('确定要删除该商品吗?', function () {
|
||
if (repeat_flag) return;
|
||
repeat_flag = true;
|
||
|
||
$.ajax({
|
||
url: ns.url("shop/goods/deleteRecycleGoods"),
|
||
data: {goods_ids : goods_ids.toString()},
|
||
dataType: 'JSON',
|
||
type: 'POST',
|
||
success: function (res) {
|
||
layer.msg(res.message);
|
||
repeat_flag = false;
|
||
if (res.code == 0) {
|
||
table.reload();
|
||
}
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
//商品恢复
|
||
function recoveryRecycle(goods_ids) {
|
||
|
||
if (repeat_flag) return;
|
||
repeat_flag = true;
|
||
|
||
$.ajax({
|
||
url: ns.url("shop/goods/recoveryRecycle"),
|
||
data: {goods_ids: goods_ids.toString()},
|
||
dataType: 'JSON',
|
||
type: 'POST',
|
||
success: function (res) {
|
||
layer.msg(res.message);
|
||
repeat_flag = false;
|
||
if (res.code == 0) {
|
||
table.reload();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 批量操作
|
||
*/
|
||
table.bottomToolbar(function (obj) {
|
||
|
||
if (obj.data.length < 1) {
|
||
layer.msg('请选择要操作的数据');
|
||
return;
|
||
}
|
||
var id_array = new Array();
|
||
for (i in obj.data) id_array.push(obj.data[i].goods_id);
|
||
switch (obj.event) {
|
||
case "delete":
|
||
deleteRecycleGoods(id_array.toString());
|
||
break;
|
||
case 'recovery':
|
||
//恢复
|
||
recoveryRecycle(id_array.toString());
|
||
break;
|
||
}
|
||
});
|
||
/**
|
||
* 批量操作
|
||
*/
|
||
table.toolbar(function (obj) {
|
||
|
||
if (obj.data.length < 1) {
|
||
layer.msg('请选择要操作的数据');
|
||
return;
|
||
}
|
||
var id_array = new Array();
|
||
for (i in obj.data) id_array.push(obj.data[i].goods_id);
|
||
switch (obj.event) {
|
||
case "delete":
|
||
deleteRecycleGoods(id_array.toString());
|
||
break;
|
||
case 'recovery':
|
||
//恢复
|
||
recoveryRecycle(id_array.toString());
|
||
break;
|
||
}
|
||
});
|
||
|
||
|
||
// 搜索功能
|
||
form.on('submit(search)', function (data) {
|
||
table.reload({
|
||
page: {
|
||
curr: 1
|
||
},
|
||
where: data.field
|
||
});
|
||
return false;
|
||
});
|
||
|
||
$.ajax({
|
||
url : ns.url("shop/goodscategory/lists"),
|
||
dataType: 'JSON',
|
||
type: 'POST',
|
||
success: function(res) {
|
||
var _cascader = layCascader({
|
||
elem: '.select-category',
|
||
options: res.data,
|
||
props: {
|
||
value: 'category_id',
|
||
label: 'category_name',
|
||
children: 'child_list'
|
||
}
|
||
});
|
||
_cascader.changeEvent(function (value, node) {
|
||
$('[name="category_id"]').val(value)
|
||
});
|
||
}
|
||
})
|
||
});
|
||
</script>
|
||
{/block} |