jh-admin/app/shop/view/address/manage.html

226 lines
9.4 KiB
HTML

{extend name="base"/}
{block name="resources"}
<style>
.layui-layout-admin.admin-style-2 .layui-body .layui-tab + .body-content {padding-top: 65px!important;}
.align-left {text-align: left!important;}
.align-right {text-align: right!important;}
.area-table .toggle {user-select: none;cursor: pointer;}
.area-table .toggle .icon {display: inline-block;width: 10px;text-align: center}
.area-table .flex-wrap {display: flex;align-items: center}
.area-table .level-icon { margin-right: 10px; }
.area-table .add-child {margin-left: 10px}
.area-table tr th:first-child, .area-table tr td:first-child {padding: 9px 0 9px 10px}
</style>
{/block}
{block name="main"}
<div class="single-filter-box" style="display: block ">
<button class="layui-btn add-area">添加地区</button>
</div>
<table class="layui-table area-table" lay-skin="nob">
<colgroup>
<col width="1%">
<col width="50%">
<col width="16%">
<col width="17%">
<col width="16%">
</colgroup>
<thead>
<tr>
<th></th>
<th class="align-left">名称</th>
<th class="align-left">简称</th>
<th class="align-left">地区编码</th>
<th class="align-right">操作</th>
</tr>
</thead>
{foreach name="area" item="vo"}
<tbody data-parent="0" data-id="{$vo.id}" data-level="1">
<tr>
{if $vo.child_num}
<td class="toggle"><span class="icon text-color">+</span></td>
{else/}
<td></td>
{/if}
<td class="flex-wrap">
<input type="text" class="layui-input len-mid" name="name" value="{$vo.name}">
<a href="javascript:;" class="text-color add-child">添加下级地区</a>
</td>
<td>
<input type="text" class="layui-input len-mid" name="shortname" value="{$vo.shortname}">
</td>
<td>{$vo.id}</td>
<td class="align-right">
<a href="javascript:;" class="text-color delete-area">删除</a>
</td>
</tr>
</tbody>
{/foreach}
</table>
<table>
</table>
{/block}
{block name="script"}
<script type="text/javascript">
$(function(){
// 点击展开子菜单
$('body').on('click', '.area-table .toggle', function(){
var data = $(this).parents('tbody').data();
if (!$('.area-table tbody[data-parent="'+ data.id +'"][data-id]').length) {
var child = getChild(data.id, data.level + 1);
if (child.length) {
var html = '';
child.forEach(function(item){
html += '<tbody data-parent="'+ data.id +'" data-id="'+ item.id +'" data-level="'+ (data.level + 1) +'"><tr>';
if (item.child_num) html += '<td class="toggle"><span class="icon text-color">+</span></td>';
else html += '<td></td>';
html += '<td class="flex-wrap"><span class="level-icon">'+ (data.level == 1 ? '|--' : '|----') +'</span><input type="text" class="layui-input len-mid" name="name" value="'+ item.name +'">';
if (data.level < 2) html += '<a href="javascript:;" class="add-child text-color">添加下级地区</a></td>';
else html += '</td>';
html += '<td><input type="text" class="layui-input len-mid" name="shortname" value="'+ item.shortname +'"></td>';
html += '<td>'+ item.id +'</td>';
html+= '<td class="align-right"><a href="javascript:;" class="text-color delete-area">删除</a></td>';
html+= '</tr></tbody>';
})
$(this).parents('tbody').after(html);
}
$(this).html('<span class="icon text-color">-</span>');
} else {
if ($('.area-table tbody[data-parent="'+ data.id +'"][data-id]:eq(0)').is(':hidden')) {
$('.area-table tbody[data-parent="'+ data.id +'"]').show();
$(this).html('<span class="icon text-color">-</span>');
} else {
$('.area-table tbody[data-parent="'+ data.id +'"]').hide();
$(this).html('<span class="icon text-color">+</span>');
}
}
})
// 添加子菜单
$('body').on('click', '.area-table .add-child', function(){
var data = $(this).parents('tbody').data();
var html = '<tbody data-parent="'+ data.id +'" data-id="0" data-level="'+ (data.level + 1) +'"><tr>';
html += '<td></td>';
html += '<td class="flex-wrap"><span class="level-icon">'+ (data.level == 1 ? '|--' : '|----') +'</span><input type="text" class="layui-input len-mid" name="name" value=""></td>';
html += '<td><input type="text" class="layui-input len-mid" name="shortname" value=""></td>';
html += '<td><input type="text" class="layui-input len-short" name="id" value=""></td>';
html += '<td class="align-right"></td>';
html+= '</tr></tbody>';
if (!$('.area-table tbody[data-parent="'+ data.id +'"]').length) {
$(this).parents('tbody').after(html);
} else {
$('.area-table tbody[data-parent="'+ data.id +'"]:last').after(html);
}
})
$('.add-area').click(function (){
var html = `<tbody data-parent="0" data-id="0" data-level="1">
<tr>
<td></td>
<td class="flex-wrap">
<input type="text" class="layui-input len-mid" name="name" value="">
</td>
<td>
<input type="text" class="layui-input len-mid" name="shortname" value="">
</td>
<td>
<input type="text" class="layui-input len-short" name="id" value="">
</td>
<td class="align-right">
</td>
</tr>
</tbody>`;
$('.area-table thead').after(html);
})
// 保存或编辑地区
$('body').on('change', '.area-table input', function(){
var tbody = $(this).parents('tbody');
var form = {
id: tbody.attr('data-id') != 0 ? tbody.attr('data-id') : tbody.find('[name="id"]').val().trim(),
pid: tbody.attr('data-parent'),
level: tbody.attr('data-level'),
name: tbody.find('[name="name"]').val().trim(),
shortname: tbody.find('[name="shortname"]').val().trim(),
};
if (form.id == 0 || !form.name) return;
$.ajax({
url: ns.url('shop/address/savearea'),
data: form,
dataType: 'json',
success: function(res){
if (res.code == 0) {
if (!tbody.attr('data-id')) tbody.attr('data-id', res.data);
} else {
layer.msg(res.message);
}
}
})
})
var deleteRepeat = false;
$('body').on('click', '.area-table .delete-area', function(){
var tbody = $(this).parents('tbody');
layer.confirm('删除该地区将会连该地区下级的地区也一并删除,是否要继续操作?', function() {
if (deleteRepeat) return;
deleteRepeat = true;
$.ajax({
url: ns.url('shop/address/deletearea'),
data: {
id: tbody.attr('data-id'),
level: tbody.attr('data-level'),
},
dataType: 'json',
success: function(res){
deleteRepeat = false;
if (res.code == 0) {
layer.closeAll();
tbody.remove();
switch (tbody.attr('data-level')) {
case '1':
$('.area-table tbody[data-parent="'+ tbody.attr('data-id') +'"]').each(function (){
let id = $(this).attr('data-id');
$('.area-table tbody[data-parent="'+ id +'"]').remove();
$(this).remove();
})
break;
case '2':
$('.area-table tbody[data-parent="'+ tbody.attr('data-id') +'"]').remove();
break;
}
} else {
layer.msg(res.message);
}
}
})
})
})
})
function getChild(pid, level){
var data = [];
$.ajax({
url: ns.url('shop/address/getAreaList'),
data: {
pid: pid,
level: level,
child: 1
},
dataType: 'json',
async: false,
success: function(res){
if (res.code == 0 && res.data) {
data = res.data;
}
}
})
return data;
}
</script>
{/block}