初始上传
This commit is contained in:
537
addon/cardservice/shop/view/reserve/add_reserve.html
Executable file
537
addon/cardservice/shop/view/reserve/add_reserve.html
Executable file
@@ -0,0 +1,537 @@
|
||||
<link rel="stylesheet" href="ADDON_CARDSERVICE_CSS/add_reserve.css">
|
||||
<div class="main-wrap">
|
||||
<div class="layui-form" lay-filter="form">
|
||||
<br>
|
||||
{empty name="info"}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>手机号:</label>
|
||||
<div class="layui-input-inline search-wrap">
|
||||
<input type="text" class="layui-input len-mid" name="mobile" placeholder="请输入客户手机号" autocomplete="off" lay-verify="required">
|
||||
<i class="iconfont iconsousuo"></i>
|
||||
</div>
|
||||
</div>
|
||||
{else/}
|
||||
<input type="hidden" name="reserve_id" value="{$info.reserve_id}">
|
||||
{/empty}
|
||||
<div class="error">请输入正确的手机号</div>
|
||||
<div class="layui-form-item" lay-verify="member">
|
||||
<label class="layui-form-label"><span class="required">*</span>客户:</label>
|
||||
<div class="layui-input-block member">
|
||||
{notempty name="info"}
|
||||
<div class="member-info">
|
||||
<input type="hidden" name="member_id" value="{$info.member_id}">
|
||||
{notempty name="$info.headimg"}
|
||||
<img src="{:img($info.headimg)}" onerror="this.src = 'STATIC_IMG/default_img/head.png' " alt="">
|
||||
{else/}
|
||||
<img src="STATIC_IMG/default_img/head.png" alt="">
|
||||
{/notempty}
|
||||
<div class="info">
|
||||
<div class="name">{$info.nickname}</div>
|
||||
<div>
|
||||
<span>手机号:{$info.mobile}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>预约门店:</label>
|
||||
<div class="layui-input-inline len-mid">
|
||||
<select name="store_id" lay-filter="store" {notempty name="info"}disabled{/notempty}>
|
||||
{foreach $store_list as $k=> $v}
|
||||
<option value="{$v.store_id}" {if !empty($info) && $info['store_id'] == $v['store_id']} selected {/if}>{$v.store_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" lay-verify="service">
|
||||
<label class="layui-form-label"><span class="required">*</span>项目:</label>
|
||||
<div class="layui-input-block service-table">
|
||||
<table class="layui-table" lay-skin="line">
|
||||
<colgroup>
|
||||
<col width="50%">
|
||||
<col width="30%">
|
||||
<col width="20%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>预约项目</th>
|
||||
<th>员工</th>
|
||||
<th class="align-center">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{notempty name="info"}
|
||||
{foreach name="info.item" item="vo"}
|
||||
<tr>
|
||||
<td>
|
||||
<div class="service-item service-item-btn">
|
||||
<div class="info" >
|
||||
<input type="hidden" name="sku" value="{$vo.sku_id}">
|
||||
<input type="hidden" name="goods" value="{$vo.goods_id}">
|
||||
<div class="title" title="{$vo.goods_name}">{$vo.goods_name}</div>
|
||||
<div class="desc">项目时长:{$vo.service_length}分钟 ¥{$vo.price}</div>
|
||||
</div>
|
||||
<i class="iconfont iconlower-triangle"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="servicer-item servicer-item-btn">
|
||||
{if $vo.reserve_user_id}
|
||||
<div class="info">
|
||||
<input type="hidden" name="servicer_id" value="{$vo.reserve_user_id}">
|
||||
<div class="title" title="{$vo.username}">{$vo.username}</div>
|
||||
</div>
|
||||
{else/}
|
||||
<div class="info">请选择员工</div>
|
||||
{/if}
|
||||
<i class="iconfont iconlower-triangle"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td class="align-center"><a href="javascript:;" class="text-color delete">删除</a></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{else/}
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<div class="service-item service-item-btn" id="">
|
||||
<div class="info">请选择项目</div>
|
||||
<i class="iconfont iconlower-triangle"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="servicer-item servicer-item-btn">
|
||||
<div class="info">请选择员工</div>
|
||||
<i class="iconfont iconlower-triangle"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td class="align-center"><a href="javascript:;" class="text-color delete">删除</a></td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</tbody>
|
||||
</table>
|
||||
<button class="layui-btn layui-btn-primary add">添加</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>到店时间:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
{notempty name="info"}
|
||||
<input type="text" id="reserveDate" name="date" autocomplete="off" class="layui-input" placeholder="请选择到店日期" value="{:date('Y-m-d', $info.reserve_time)}" lay-verify="required">
|
||||
{else/}
|
||||
<input type="text" id="reserveDate" name="date" autocomplete="off" class="layui-input" placeholder="请选择到店日期" value="{:date('Y-m-d')}" lay-verify="required">
|
||||
{/notempty}
|
||||
<i class="iconfont iconriqi"></i>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
{notempty name="info"}
|
||||
<input type="text" id="reserveTime" name="time" autocomplete="off" class="layui-input" value="{:date('H:i', $info.reserve_time)}" placeholder="请选择到店时间" readonly lay-verify="required">
|
||||
{else/}
|
||||
<input type="text" id="reserveTime" name="time" autocomplete="off" class="layui-input" placeholder="请选择到店时间" readonly lay-verify="required">
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">预约需提前{$config.advance}小时预约</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">备注:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="remark" cols="30" rows="6" class="layui-textarea len-long">{$info.remark ?? ''}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="save-wrap">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{php}$today = strtotime(date('Y-m-d')) {/php}
|
||||
<script type="text/html" id="selectTime">
|
||||
<div class="select-time">
|
||||
<div class="time-wrap today">
|
||||
{for start="$config.start" end="$config.end + 1800" name="i" step="1800"}
|
||||
{if $today + $i > time()}
|
||||
<div class="time-item" data-value="{:date('H:i', ($today + $i) )}">{:date('H:i', ($today + $i) )}</div>
|
||||
{/if}
|
||||
{/for}
|
||||
</div>
|
||||
<div class="time-wrap no-today">
|
||||
{for start="$config.start" end="$config.end + 1800" name="i" step="1800"}
|
||||
<div class="time-item" data-value="{:date('H:i', ($today + $i) )}">{:date('H:i', ($today + $i) )}</div>
|
||||
{/for}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="selectService">
|
||||
<div class="select-service">
|
||||
<div class="service-wrap">
|
||||
{notempty name="$service"}
|
||||
<div class="flex-wrap">
|
||||
{foreach name="$service" item="vo"}
|
||||
<div class="item">
|
||||
<input type="hidden" name="sku" value="{$vo.sku_id}">
|
||||
<input type="hidden" name="goods" value="{$vo.goods_id}">
|
||||
<div class="title" title="{$vo.goods_name}">{$vo.goods_name}</div>
|
||||
<div class="desc">项目时长:{$vo.service_length}分钟 ¥{$vo.price}</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{else/}
|
||||
<div class="flex-wrap">
|
||||
<div class="empty">暂无可预约的项目</div>
|
||||
<div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="selectServicer">
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var today = "{$today}";
|
||||
var laydate, dropdown, form, target, repeat = false;
|
||||
layui.use(['laytpl', 'laydate', 'dropdown', 'form'], function(){
|
||||
laytpl = layui.laytpl;
|
||||
laydate = layui.laydate;
|
||||
dropdown = layui.dropdown;
|
||||
form = layui.form;
|
||||
|
||||
$('.search-wrap .iconfont').click(function () {
|
||||
var mobile = $('[name="mobile"]').val();
|
||||
if (mobile.length == 0) {
|
||||
$('.error').text('请输入客户手机号').show();
|
||||
return;
|
||||
}
|
||||
if (!ns.parse_mobile(mobile)) {
|
||||
$('.error').text('请输入正确的手机号').show();
|
||||
return;
|
||||
}
|
||||
$('.error').hide();
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/member/searchMember"),
|
||||
data: {
|
||||
search_text: mobile
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
if (res.code == 0 && res.data) {
|
||||
$('.error').hide();
|
||||
var info = res.data;
|
||||
$('.member').html(` <div class="member-info">
|
||||
<input type="hidden" name="member_id" value="` + info.member_id + `">
|
||||
`+ (info.headimg ? `<img src="${ns.img(info.headimg)}" onerror="this.src = \'STATIC_IMG/default_img/head.png\' " alt="">` : '<img src="STATIC_IMG/default_head_square.png" alt="">') + `
|
||||
<div class="info">
|
||||
<div class="name">` + info.nickname + `</div>
|
||||
<div>
|
||||
<span>手机号:` + info.mobile + `</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>`);
|
||||
} else {
|
||||
$('.member').html('');
|
||||
$('.error').text('未查找到该客户').show();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 切换门店
|
||||
form.on('select(store)', function (data) {
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/getconfig"),
|
||||
data: {'store_id' : data.value},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
if (res.code == 0) {
|
||||
let data = res.data.value;
|
||||
let time = "{:time()}";
|
||||
let html = `
|
||||
<div class="select-time">
|
||||
<div class="time-wrap today">
|
||||
`;
|
||||
|
||||
for (let i = data.start; i <= (data.end + 1800); i+=1800){
|
||||
if(parseInt(today) + parseInt(i) > time){
|
||||
let data_value = ns.time_to_date(parseInt(today)+parseInt(i), 'H:i');
|
||||
data_value = $.trim(data_value);
|
||||
html += `<div class="time-item" data-value="${data_value}">${data_value}</div>`;
|
||||
}
|
||||
}
|
||||
html += '</div>';
|
||||
html += '<div class="time-wrap no-today">';
|
||||
for (let i = data.start; i <= (data.end + 1800); i+=1800){
|
||||
|
||||
let data_value = ns.time_to_date(parseInt(today)+parseInt(i), 'H:i');
|
||||
data_value = $.trim(data_value);
|
||||
html += `
|
||||
<div class="time-item" data-value="${data_value}">${data_value}</div>
|
||||
`;
|
||||
}
|
||||
|
||||
html += `
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
$('#selectTime').html(html);
|
||||
$('#reserveTime').val('');
|
||||
initTime(data.week);
|
||||
$('.servicer-item-btn .info').html('请选择员工');
|
||||
getServicer();
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#reserveDate',
|
||||
type: 'date',
|
||||
min: 0,
|
||||
done: function(value, date, endDate){
|
||||
$('[name="time"]').val('');
|
||||
}
|
||||
});
|
||||
|
||||
initTime("{:implode($config.week)}");
|
||||
|
||||
$('body').off('click', '.time-wrap .time-item').on('click', '.time-wrap .time-item', function () {
|
||||
if ($(this).hasClass('no-select')) {
|
||||
layer.msg('不在可预约时间内');
|
||||
return;
|
||||
}
|
||||
dropdown.hide('#reserveTime');
|
||||
$('[name="time"]').val($(this).text());
|
||||
});
|
||||
|
||||
getServicer();
|
||||
|
||||
initDropdown();
|
||||
|
||||
$('.service-table .add').click(function () {
|
||||
var service_id = ns.gen_non_duplicate(5);
|
||||
var servicer_id = ns.gen_non_duplicate(5);
|
||||
$('.service-table tbody').append(`<tr>
|
||||
<td>
|
||||
<div class="service-item service-item-btn" id="${service_id}">
|
||||
<div class="info">请选择项目</div>
|
||||
<i class="iconfont iconlower-triangle"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="servicer-item servicer-item-btn" id="${servicer_id}">
|
||||
<div class="info">请选择员工</div>
|
||||
<i class="iconfont iconlower-triangle"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td class="align-center"><a href="javascript:;" class="text-color delete">删除</a></td>
|
||||
</tr>`);
|
||||
|
||||
dropdown.suite("#"+service_id, {
|
||||
template: "selectService",
|
||||
maxWidth:'660',
|
||||
success: function ($dom) {
|
||||
$dom.addClass('border-color').css({
|
||||
'outline':'none',
|
||||
'border':'2px solid'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
dropdown.suite("#"+servicer_id, {
|
||||
template: "selectServicer",
|
||||
maxWidth:'660',
|
||||
success: function ($dom) {
|
||||
$dom.addClass('border-color').css({
|
||||
'outline':'none',
|
||||
'border':'2px solid'
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 选择项目
|
||||
$('body').off('click', '.service-wrap .item').on('click', '.service-wrap .item', function () {
|
||||
var id = $(this).parents('.layu-dropdown-root').prev().attr('id');
|
||||
dropdown.hide('#'+id);
|
||||
var target = $('#'+id).find('.info');
|
||||
if ($(this).find('[name="sku"]').val() != $(target).find('[name="sku"]').val()) {
|
||||
$(target).html($(this).html());
|
||||
$(target).parents('tr').find('.servicer-item .info').html('请选择员工');
|
||||
}
|
||||
});
|
||||
|
||||
// 选择员工
|
||||
$('body').off('click', '.select-servicer .select-item').on('click', '.select-servicer .select-item', function () {
|
||||
var id = $(this).parents('.layu-dropdown-root').prev().attr('id');
|
||||
dropdown.hide('#'+id);
|
||||
var target = $('#'+id).find('.info');
|
||||
$(target).html($(this).html());
|
||||
});
|
||||
|
||||
$('body').off('click', '.service-table .delete').on('click', '.service-table .delete', function () {
|
||||
if ($('.service-table tbody tr').length == 1) {
|
||||
layer.msg('至少需要有一项项目');
|
||||
return;
|
||||
}
|
||||
$(this).parents('tr').remove();
|
||||
});
|
||||
|
||||
form.verify({
|
||||
member: function () {
|
||||
if (!$('[name="member_id"]').val()) {
|
||||
return '请选择客户';
|
||||
}
|
||||
},
|
||||
service: function () {
|
||||
if (!$('[name="sku"]').val()) {
|
||||
return '请选择项目';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(save)', function (data) {
|
||||
if (repeat) return;
|
||||
repeat = false;
|
||||
|
||||
data.field.goods = [];
|
||||
$('.service-table tbody tr').each(function () {
|
||||
data.field.goods.push({
|
||||
sku_id: $(this).find('[name="sku"]').val(),
|
||||
uid: $(this).find('[name="servicer"]').val() ? $(this).find('[name="servicer"]').val() : 0
|
||||
})
|
||||
});
|
||||
data.field.goods = JSON.stringify(data.field.goods);
|
||||
|
||||
$.ajax({
|
||||
url: data.field.reserve_id ? ns.url("cardservice://shop/reserve/updatereserve") : ns.url("cardservice://shop/reserve/addreserve"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
if (res.code == 0) {
|
||||
layer.msg("保存成功");
|
||||
setTimeout(function(){
|
||||
parent.listenerHash(); // 刷新页面
|
||||
parent.layer.closeAll();
|
||||
},500)
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
repeat = false;
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
function initDropdown(){
|
||||
$('.service-item-btn').each(function (i, e) {
|
||||
var id = ns.gen_non_duplicate(5);
|
||||
if($(e).attr('id') == '' || $(e).attr('id') == undefined) $(e).attr('id', id);
|
||||
id = $(e).attr('id');
|
||||
|
||||
dropdown.suite("#"+id, {
|
||||
template: "selectService",
|
||||
maxWidth:'660',
|
||||
success: function ($dom) {
|
||||
$dom.addClass('border-color').css({
|
||||
'outline':'none',
|
||||
'border':'2px solid'
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
function initTime(config){
|
||||
// 选择预约时间
|
||||
dropdown.suite("#reserveTime", {
|
||||
template: "selectTime",
|
||||
maxWidth:'660',
|
||||
success: function ($dom) {
|
||||
var date = $('[name="date"]').val();
|
||||
$('.time-wrap').css('display', 'none');
|
||||
|
||||
if (date == "{:date('Y-m-d')}") {
|
||||
$('.today').css('display', 'flex')
|
||||
} else {
|
||||
$('.no-today').css('display', 'flex')
|
||||
}
|
||||
|
||||
var dateArr = date.split('-'),
|
||||
dateEl = new Date(dateArr[0], parseInt(dateArr[1] - 1), dateArr[2]);
|
||||
|
||||
if (config.indexOf(dateEl.getDay()) == -1) {
|
||||
$('.time-wrap .time-item').addClass('no-select');
|
||||
}
|
||||
|
||||
var time = $('[name="time"]').val();
|
||||
$('.time-wrap .time-item[data-value="'+ time +'"]').addClass('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getServicer(){
|
||||
let store_id = $('[name="store_id"]').val();
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/servicerlist"),
|
||||
data: {'store_id':store_id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
if (res.code == 0) {
|
||||
let html = '';
|
||||
|
||||
let store_html = '';
|
||||
|
||||
for(let i in res.data){
|
||||
let item = res.data[i];
|
||||
store_html += `
|
||||
<div class="select-item">
|
||||
<div class="title">${item.username}</div>
|
||||
<input type="hidden" name="servicer" value="${item.uid}">
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
html += `
|
||||
<div class="select-servicer">
|
||||
<div class="select-item">
|
||||
<div class="title">不选择员工</div>
|
||||
<input type="hidden" name="servicer" value="0">
|
||||
</div>
|
||||
${store_html}
|
||||
</div>
|
||||
`;
|
||||
|
||||
$('#selectServicer').html(html);
|
||||
|
||||
$('.servicer-item-btn').each(function (i, e) {
|
||||
var id = ns.gen_non_duplicate(5);
|
||||
if($(e).attr('id') == '' || $(e).attr('id') == undefined) $(e).attr('id', id);
|
||||
id = $(e).attr('id');
|
||||
dropdown.suite("#"+id, {
|
||||
template: "selectServicer",
|
||||
maxWidth:'660',
|
||||
success: function ($dom) {
|
||||
$dom.addClass('border-color').css({
|
||||
'outline':'none',
|
||||
'border':'2px solid'
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
108
addon/cardservice/shop/view/reserve/config.html
Executable file
108
addon/cardservice/shop/view/reserve/config.html
Executable file
@@ -0,0 +1,108 @@
|
||||
<style>
|
||||
.layui-input {
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="layui-form main-wrap form-wrap" lay-filter="form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>预约时间:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" title="周一" lay-skin="primary" name="week[]" value="1" {if in_array(1, $config.week)}checked{/if}>
|
||||
<input type="checkbox" title="周二" lay-skin="primary" name="week[]" value="2" {if in_array(2, $config.week)}checked{/if}>
|
||||
<input type="checkbox" title="周三" lay-skin="primary" name="week[]" value="3" {if in_array(3, $config.week)}checked{/if}>
|
||||
<input type="checkbox" title="周四" lay-skin="primary" name="week[]" value="4" {if in_array(4, $config.week)}checked{/if}>
|
||||
<input type="checkbox" title="周五" lay-skin="primary" name="week[]" value="5" {if in_array(5, $config.week)}checked{/if}>
|
||||
<input type="checkbox" title="周六" lay-skin="primary" name="week[]" value="6" {if in_array(6, $config.week)}checked{/if}>
|
||||
<input type="checkbox" title="周日" lay-skin="primary" name="week[]" value="0" {if in_array(0, $config.week)}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline len-short">
|
||||
{php}$today = strtotime(date('Y-m-d')) {/php}
|
||||
<select name="start">
|
||||
{for start="0" end="48" name="i"}
|
||||
<option value="{$i * 1800}" {if $config.start == ($i * 1800)}selected{/if}>{:date('H:i', $today + ($i * 1800))}</option>
|
||||
{/for}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">-</div>
|
||||
<div class="layui-input-inline len-short">
|
||||
<select name="end" id="">
|
||||
{for start="0" end="48" name="i"}
|
||||
<option value="{$i * 1800}" {if $config.end == ($i * 1800)}selected{/if}>{:date('H:i', $today + ($i * 1800))}</option>
|
||||
{/for}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>预约时间间隔:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" title="30分钟" lay-skin="primary" name="interval" value="30" {if empty($config) || $config.interval == 30}checked{/if}>
|
||||
<input type="radio" title="1小时" lay-skin="primary" name="interval" value="60" {if !empty($config) && $config.interval == 60}checked{/if}>
|
||||
<input type="radio" title="90分钟" lay-skin="primary" name="interval" value="90" {if !empty($config) && $config.interval == 90}checked{/if}>
|
||||
<input type="radio" title="2小时" lay-skin="primary" name="interval" value="120" {if !empty($config) && $config.interval == 120}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>预约提前:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="advance" value="{$config.advance ?? 1}" class="layui-input len-short" lay-verify="advance">
|
||||
<div class="layui-word-aux">小时</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>每时段可预约:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="max" value="{$config.max ?? 1}" class="layui-input len-short" lay-verify="max">
|
||||
<div class="layui-word-aux">人</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn bg-color " lay-submit="" lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var repeat_flag = false, form;
|
||||
|
||||
layui.use(['form'], function () {
|
||||
form = layui.form;
|
||||
|
||||
form.verify({
|
||||
advance(value) {
|
||||
if (isNaN(value) || !/(^[1-9]\d*$)/.test(value)) {
|
||||
return "预约提前时间格式输入错误";
|
||||
}
|
||||
if (value < 0) {
|
||||
return "预约提前时间不能小于0";
|
||||
}
|
||||
},
|
||||
max(value) {
|
||||
if (isNaN(value) || !/(^[1-9]\d*$)/.test(value)) {
|
||||
return "每时段可预约人数格式输入错误";
|
||||
}
|
||||
if (value < 0) {
|
||||
return "每时段可预约人数不能小于0";
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
form.on('submit(save)', function (data) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/config"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message, { time: 1000 }, function () {});
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
})
|
||||
})
|
||||
</script>
|
||||
75
addon/cardservice/shop/view/reserve/detail.html
Executable file
75
addon/cardservice/shop/view/reserve/detail.html
Executable file
@@ -0,0 +1,75 @@
|
||||
<style>
|
||||
.align-right {text-align: right!important;}
|
||||
.service-table {width: 600px!important;}
|
||||
</style>
|
||||
<div class="main-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">预约客户:</label>
|
||||
<div class="layui-input-inline">
|
||||
<a href="{:href_url('shop/member/editmember?member_id='.$info.member_id)}" target="_blank">{$info.nickname} {$info.mobile}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">预约门店:</label>
|
||||
<div class="layui-input-inline">{$info.store_name ? $info.store_name : ''}</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">预约状态:</label>
|
||||
<div class="layui-input-inline">{$info.reserve_state_name}</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">预约到店时间:</label>
|
||||
<div class="layui-input-inline">{:date('Y-m-d H:i', $info.reserve_time)}</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">创建时间:</label>
|
||||
<div class="layui-input-inline">{:date('Y-m-d H:i', $info.create_time)}</div>
|
||||
</div>
|
||||
{if $info.to_store_time}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">到店时间:</label>
|
||||
<div class="layui-input-inline">{:date('Y-m-d H:i', $info.to_store_time)}</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if $info.cancel_time}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">取消时间:</label>
|
||||
<div class="layui-input-inline">{:date('Y-m-d H:i', $info.cancel_time)}</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">预约项目:</label>
|
||||
<div class="layui-input-inline service-table">
|
||||
<table class="layui-table" lay-skin="line">
|
||||
<colgroup>
|
||||
<col width="62%">
|
||||
<col width="18%">
|
||||
<col>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>项目</th>
|
||||
<th>技师</th>
|
||||
<th class="align-right">项目时长</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach name="info.item" item="item"}
|
||||
<tr>
|
||||
<td>{$item.goods_name}</td>
|
||||
<td>{if $item.reserve_user_id}{$item.username}{else/}未选择员工{/if}</td>
|
||||
<td class="align-right">{$item.service_length}分钟</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">备注:</label>
|
||||
<div class="layui-input-inline">{$info.remark ? $info.remark : '-'}</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn layui-btn-primary" onclick="layer.closeAll();">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
461
addon/cardservice/shop/view/reserve/index.html
Executable file
461
addon/cardservice/shop/view/reserve/index.html
Executable file
@@ -0,0 +1,461 @@
|
||||
<link rel="stylesheet" href="ADDON_CARDSERVICE_CSS/reserve_index.css">
|
||||
<style>
|
||||
.layui-layer-loading {
|
||||
box-shadow: unset!important;
|
||||
}
|
||||
.screen.reserve {
|
||||
padding: 0;
|
||||
margin-top: 20px;
|
||||
}
|
||||
{foreach name="reserve_state" item="vo"}
|
||||
.{$vo.state} {
|
||||
background-color: {$vo.color};
|
||||
border-color: {$vo.color};
|
||||
}
|
||||
.{$vo.state}-color {
|
||||
color: {$vo.color};
|
||||
}
|
||||
{/foreach}
|
||||
</style>
|
||||
|
||||
|
||||
<div class="layui-card layui-form reserve-data">
|
||||
<div class="uni-flex panel-head">
|
||||
<button class="layui-btn" onclick="addReserve()">添加预约</button>
|
||||
<div class="status uni-flex">
|
||||
{foreach name="reserve_state" item="vo"}
|
||||
<div class="color {$vo.state}"></div>
|
||||
<div>{$vo.name}</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
<div class="screen reserve">
|
||||
<div class="layui-colla-item">
|
||||
<div 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">
|
||||
<select name="store_id">
|
||||
<option value="">全部</option>
|
||||
{foreach $store_list as $k=> $v}
|
||||
<option value="{$v.store_id}">{$v.store_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn bg-color" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<!-- 看板类型 -->
|
||||
<!-- <div class="time-type">-->
|
||||
<!-- <span class="on" data-type="week">周</span>-->
|
||||
<!-- <span data-type="month">月</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- 看板数据 -->
|
||||
<div class="time-data" id="time-data">
|
||||
<div class="uni-flex time-wrap">
|
||||
<span class="iconfont iconback_light" onclick="prevWeek()"></span>
|
||||
<div class="date">{$data[0]['date']} - {$data[6]['date']}</div>
|
||||
<span class="iconfont iconyoujiantou" onclick="nextWeek()"></span>
|
||||
</div>
|
||||
<div class="head uni-flex">
|
||||
{foreach name="$data" item="item"}
|
||||
<div>
|
||||
<button class="layui-btn {if $item.currday eq 0}layui-btn-primary{/if}">{$item.week}<span>{$item.date}</span></button>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="body uni-flex">
|
||||
{foreach name="$data" item="item"}
|
||||
<div class="common-scrollbar" data-page="1" data-total="{$item.data.page_count}" data-start="{$item.start}" data-end="{$item.end}">
|
||||
<div class="box">
|
||||
{notempty name="item.data.list"}
|
||||
{foreach name="item.data.list" item="vo"}
|
||||
<div class="panel-item {$vo.reserve_state}">
|
||||
<div class="username">{$vo.nickname}</div>
|
||||
<div class="time {$vo.reserve_state}">{:date('H:i', $vo.reserve_time)}</div>
|
||||
{php}
|
||||
$vo['reserve_item'] = explode(',', $vo['reserve_item']);
|
||||
{/php}
|
||||
{foreach name="$vo.reserve_item" item="goods_name"}
|
||||
<div class="service">{$goods_name}</div>
|
||||
{/foreach}
|
||||
<div class="action" data-state="{$vo.reserve_state}" data-id="{$vo.reserve_id}">
|
||||
<span class="iconfont iconyuandian"></span>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 周看板数据 -->
|
||||
<script type="text/html" id="dataTpl">
|
||||
<div class="uni-flex time-wrap">
|
||||
<span class="iconfont iconback_light" onclick="prevWeek()"></span>
|
||||
<div class="date">{{ d[0].date }} - {{ d[6].date }}</div>
|
||||
<span class="iconfont iconyoujiantou" onclick="nextWeek()"></span>
|
||||
</div>
|
||||
<div class="head uni-flex">
|
||||
{{# layui.each(d, function(index, item){ }}
|
||||
<div>
|
||||
<button class="layui-btn {{# if(item.currday == 0){ }}layui-btn-primary{{# } }}">{{ item.week }}<span>{{ item.date }}</span></button>
|
||||
</div>
|
||||
{{# }); }}
|
||||
</div>
|
||||
<div class="body uni-flex">
|
||||
{{# layui.each(d, function(index, item){ }}
|
||||
<div class="common-scrollbar" data-page="0" data-total="1" data-start="{{item.start}}" data-end="{{item.end}}">
|
||||
<div class="box"></div>
|
||||
</div>
|
||||
{{# }); }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="reserveTpl">
|
||||
{{# layui.each(d, function(vindex, vo){ }}
|
||||
<div class="panel-item {{ vo.reserve_state }}">
|
||||
<div class="username">{{ vo.nickname }}</div>
|
||||
<div class="time {{ vo.reserve_state }}">{{ ns.time_to_date(vo.reserve_time, 'H:i') }}</div>
|
||||
{{# vo.reserve_item.split(',').forEach(function(goods_name){ }}
|
||||
<div class="service">{{ goods_name }}</div>
|
||||
{{# }); }}
|
||||
<div class="action" data-state="{{ vo.reserve_state }}" data-id="{{ vo.reserve_id }}">
|
||||
<span class="iconfont iconyuandian"></span>
|
||||
</div>
|
||||
</div>
|
||||
{{# }); }}
|
||||
</script>
|
||||
|
||||
<!-- 月看板日期模板 -->
|
||||
<script type="text/html" id="month-table-tpl">
|
||||
<div class="uni-flex time-wrap">
|
||||
<span class="iconfont iconback_light" onclick="prevMonth()"></span>
|
||||
<div class="date">{{ data_year }}/{{ data_month < 10 ? '0' + data_month : data_month }}</div>
|
||||
<span class="iconfont iconyoujiantou" onclick="nextMonth()"></span>
|
||||
</div>
|
||||
<div class="month-table">
|
||||
<div class="table-head">
|
||||
<div class="table-tr">
|
||||
<div class="table-td">周一</div>
|
||||
<div class="table-td">周二</div>
|
||||
<div class="table-td">周三</div>
|
||||
<div class="table-td">周四</div>
|
||||
<div class="table-td">周五</div>
|
||||
<div class="table-td">周六</div>
|
||||
<div class="table-td">周日</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-body">
|
||||
{{# d.forEach(function(week_days, week_index){ }}
|
||||
<div class="table-tr">
|
||||
{{# week_days.forEach(function(item, index){ }}
|
||||
<div class="table-td {{ item.is_curr_month ? '' : 'not-curr-month' }}">
|
||||
<div class="top">{{ item.day }}</div>
|
||||
<div class="bottom" id="{{item.month}}_month_{{item.day}}_day">
|
||||
<!-- 每日数据 -->
|
||||
</div>
|
||||
</div>
|
||||
{{# }) }}
|
||||
</div>
|
||||
{{# }) }}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 月看板每日数据模板 -->
|
||||
<script type="text/html" id="month-table-td-tpl">
|
||||
{{# d.list.forEach(function(item, index){ }}
|
||||
<div class="item-box">
|
||||
<div class="item" data-reserve_id="{{ item.reserve_id }}">
|
||||
<span class="{{ item.reserve_state }}"></span>
|
||||
<span>{{ item.reserve_item }}</span>
|
||||
</div>
|
||||
<div class="detail-card">
|
||||
<div class="username">{{ item.nickname }}</div>
|
||||
<div class="time {{ item.reserve_state }}">{{ ns.time_to_date(item.reserve_time, 'H:i') }}</div>
|
||||
{{# item.reserve_item.split(',').forEach(function(goods_name){ }}
|
||||
<div class="service">{{ goods_name }}</div>
|
||||
{{# }); }}
|
||||
<div class="state {{ item.reserve_state }}-color">{{ item.reserve_state_name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# }) }}
|
||||
{{# if(d.count > d.list.length){ }}
|
||||
{{# let more_url = ns.href('cardservice://shop/reserve/lists', {start_time:d.start_time, end_time:d.end_time}); }}
|
||||
<div class="more"><a href="{{ more_url }}" target="_blank">查看全部{{ d.count }}条预约 ></a></div>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
{include file="reserve/reserve_action"}
|
||||
<script>
|
||||
var dropdown, laytpl, form, _dropdown = {};
|
||||
var data_year = (new Date()).getFullYear();
|
||||
var data_month = (new Date()).getMonth() + 1;
|
||||
|
||||
layui.use(['form', 'laytpl', 'dropdown'], function(){
|
||||
|
||||
dropdown = layui.dropdown;
|
||||
laytpl = layui.laytpl;
|
||||
form = layui.form;
|
||||
|
||||
init();
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
curr = 0;
|
||||
getWeekData();
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
// 触底加载
|
||||
$('.panel-body .common-scrollbar').scroll(function () {
|
||||
var top = $(this).scrollTop();
|
||||
var windowHeight = $(this).height();
|
||||
var documentHeight = $(this).find('.box').height();
|
||||
|
||||
if (documentHeight - top - windowHeight < 20) {
|
||||
loadinfo($(this))
|
||||
}
|
||||
});
|
||||
|
||||
function addReserve() {
|
||||
layer.open({
|
||||
title: '添加预约',
|
||||
type: 2,
|
||||
content: ns.url('cardservice://shop/reserve/addreserve?request_mode=iframe'),
|
||||
area: ['800px', '690px'],
|
||||
success: function (layero, index) {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
var curr = 0, repeat = false;
|
||||
function prevWeek() { curr -= 1; getWeekData(); }
|
||||
function nextWeek() { curr += 1; getWeekData(); }
|
||||
|
||||
function getWeekData() {
|
||||
if (repeat) return;
|
||||
repeat = true;
|
||||
|
||||
layer.load(3,{shade: [0.8, '#fff']});
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/getweekday"),
|
||||
data: {
|
||||
length: curr
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat = false;
|
||||
if (res.code == 0) {
|
||||
laytpl($('#dataTpl').html()).render(res.data, function(string){
|
||||
$('#time-data').html(string);
|
||||
layer.closeAll();
|
||||
$('.panel-body .common-scrollbar').scroll(function () {
|
||||
var top = $(this).scrollTop();
|
||||
var windowHeight = $(this).height();
|
||||
var documentHeight = $(this).find('.box').height();
|
||||
if (documentHeight - top - windowHeight < 20) {
|
||||
loadinfo($(this))
|
||||
}
|
||||
});
|
||||
|
||||
$('.panel-body .common-scrollbar').each(function (index, item) {
|
||||
loadinfo($(item))
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
} else {
|
||||
layer.msg('请求错误');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function loadinfo(elem) {
|
||||
var page = parseInt(elem.attr('data-page')),
|
||||
total = elem.attr('data-total');
|
||||
|
||||
if (page >= total) return;
|
||||
page += 1;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/lists"),
|
||||
data: {
|
||||
page: page,
|
||||
start_time: elem.attr('data-start'),
|
||||
end_time: elem.attr('data-end'),
|
||||
store_id: $('[name="store_id"]').val(),
|
||||
search_text: $('[name="search_text"]').val(),
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
if (res.code == 0 && res.data.list.length) {
|
||||
elem.attr('data-page', page);
|
||||
laytpl($('#reserveTpl').html()).render(res.data.list, function(string) {
|
||||
elem.find('.box').append(string);
|
||||
init();
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getMonthDays() {
|
||||
layer.load(3,{shade: [0.8, '#fff']});
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/getMonthDays"),
|
||||
data: {
|
||||
year : data_year,
|
||||
month : data_month,
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
if (res.code == 0) {
|
||||
var month_data = [];
|
||||
var week_data = [];
|
||||
var month_day_num = res.data.length;
|
||||
res.data.forEach(function(item, index){
|
||||
week_data.push(item);
|
||||
if(week_data.length === 7 || index === month_day_num - 1){
|
||||
month_data.push(week_data);
|
||||
week_data = [];
|
||||
}
|
||||
});
|
||||
laytpl($('#month-table-tpl').html()).render(month_data, function(string){
|
||||
$("#time-data").html(string);
|
||||
layer.closeAll();
|
||||
res.data.forEach(function(item, index){
|
||||
getDayData(item);
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getDayData(item) {
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/lists"),
|
||||
data: {
|
||||
page: 1,
|
||||
page_size:3,
|
||||
start_time: ns.date_to_time(item.start_time),
|
||||
end_time: ns.date_to_time(item.end_time),
|
||||
store_id: $('[name="store_id"]').val(),
|
||||
search_text: $('[name="search_text"]').val(),
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
if (res.code == 0 && res.data.list.length) {
|
||||
res.data.start_time = item.start_time;
|
||||
res.data.end_time = item.end_time;
|
||||
laytpl($('#month-table-td-tpl').html()).render(res.data, function(string) {
|
||||
$(`#${item.month}_month_${item.day}_day`).html(string);
|
||||
init();
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("#time-data").on('click', '.table-td .bottom .item', function(){
|
||||
let reserve_id = $(this).attr('data-reserve_id');
|
||||
reserveEvent('detail', {reserve_id: reserve_id});
|
||||
});
|
||||
|
||||
function prevMonth(){
|
||||
if(data_month > 1){
|
||||
data_month --;
|
||||
}else{
|
||||
data_month = 12;
|
||||
data_year --;
|
||||
}
|
||||
getMonthDays();
|
||||
}
|
||||
|
||||
function nextMonth(){
|
||||
if(data_month < 12){
|
||||
data_month ++;
|
||||
}else{
|
||||
data_month = 1;
|
||||
data_year ++;
|
||||
}
|
||||
getMonthDays();
|
||||
}
|
||||
|
||||
$(".time-type span").on('click', function(){
|
||||
$(this).addClass('on').siblings().removeClass('on');
|
||||
var type = $(this).attr('data-type');
|
||||
if(type === 'week'){
|
||||
curr = 0;
|
||||
getWeekData();
|
||||
}else{
|
||||
data_year = (new Date()).getFullYear();
|
||||
data_month = (new Date()).getMonth() + 1;
|
||||
getMonthDays();
|
||||
}
|
||||
});
|
||||
|
||||
function init(){
|
||||
$('body .panel-item .action').each(function () {
|
||||
var state = $(this).attr('data-state');
|
||||
var reserveId = $(this).attr('data-id');
|
||||
var menuData = getMemuData(state);
|
||||
var elem = $(this);
|
||||
let id = $(elem).attr('id');
|
||||
if(id == '' || id == undefined){
|
||||
id = ns.gen_non_duplicate(5);
|
||||
$(elem).attr('id', id)
|
||||
}
|
||||
|
||||
if (!_dropdown['reserve_id' + reserveId]) {
|
||||
dropdown.suite("#"+id, {
|
||||
menus: menuData,
|
||||
success: function ($dom) {
|
||||
$dom.addClass('border-color').css({
|
||||
'outline':'none',
|
||||
'border':'2px solid'
|
||||
});
|
||||
},
|
||||
onItemClick: function (event, menu) {
|
||||
let data_id = $('#'+id).attr('data-id');
|
||||
reserveEvent(event, {reserve_id: data_id}, function (res) {
|
||||
getWeekData()
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
373
addon/cardservice/shop/view/reserve/lists.html
Executable file
373
addon/cardservice/shop/view/reserve/lists.html
Executable file
@@ -0,0 +1,373 @@
|
||||
<style>
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline {
|
||||
background-color: #fff;
|
||||
}
|
||||
.table-btn .more-operation {
|
||||
display: none;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
background-color: #fff;
|
||||
box-shadow: 0 2px 8px 0 rgba(200, 201, 204, .5);
|
||||
position: absolute;
|
||||
z-index: 2000;
|
||||
border-radius: 2px;
|
||||
padding: 13px 12px;
|
||||
top: 40px;
|
||||
right: 5px;
|
||||
transform: translateX(10px);
|
||||
}
|
||||
.main-wrap{
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
.body-content {
|
||||
padding-top: 0!important;
|
||||
}
|
||||
.table-btn .more-operation:before {
|
||||
right: 7px;
|
||||
top: -14px;
|
||||
border: solid transparent;
|
||||
content: "";
|
||||
height: 0;
|
||||
width: 0;
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
border-bottom-color: #fff;
|
||||
border-width: 8px;
|
||||
}
|
||||
|
||||
.table-btn .more-operation .operation {
|
||||
display: block;
|
||||
text-align: right;
|
||||
margin-bottom: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.table-btn .more-operation .operation:last-child {
|
||||
margin-bottom: 0
|
||||
}
|
||||
.layui-table-view td:last-child>div {
|
||||
overflow: inherit;
|
||||
}
|
||||
.operation-wrap {
|
||||
position: relative;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="main-wrap">
|
||||
<div class="single-filter-box single-filter-box">
|
||||
<button class="layui-btn" onclick="addReserve()">添加预约</button>
|
||||
</div>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<div class="layui-form 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">
|
||||
<select name="store_id">
|
||||
<option value="">全部</option>
|
||||
{foreach $store_list as $k=> $v}
|
||||
<option value="{$v.store_id}">{$v.store_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">预约时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(7, this);return false;">近7天</button>
|
||||
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(30, this);return false;">近30天</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn bg-color" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<div class="table-tab layui-tab" lay-filter="list_tab">
|
||||
<div class="table-tab-list">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" lay-id="all">全部</li>
|
||||
{foreach name="$reserve_state" item="vo"}
|
||||
<li lay-id="{$vo.state}" data-type="reserve_state">{$vo.name}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layui-tab-content">
|
||||
<table id="reserve_list" lay-filter="reserve_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 用户信息 -->
|
||||
<script type="text/html" id="detail">
|
||||
<div class='table-title'>
|
||||
<div class='title-pic'>
|
||||
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = 'STATIC_IMG/default_img/head.png' ">
|
||||
</div>
|
||||
<div class='title-content'>
|
||||
<p class="layui-elip" title="{{d.nickname}}">{{d.nickname}}</p>
|
||||
{{# if(d.member_id != 0 && d.mobile){ }}
|
||||
<p title="{{d.mobile}}">{{d.mobile}}</p>
|
||||
{{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 工具栏操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="operation-wrap">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="detail">详情</a>
|
||||
{{# if(d.reserve_state == 'cancelled'){ }} <a class="layui-btn" lay-event="delete">删除预约</a> {{# } }}
|
||||
{{# if(d.reserve_state != 'completed' && d.reserve_state != 'cancelled'){ }} <a class="layui-btn" lay-event="more">更多</a>{{# } }}
|
||||
<div class="more-operation">
|
||||
{{# if(d.reserve_state == 'wait_confirm'){ }}
|
||||
<a class="operation" lay-event="confirm">确认预约</a>
|
||||
<a class="operation" lay-event="update">更改预约</a>
|
||||
{{# } }}
|
||||
{{# if(d.reserve_state == 'wait_to_store'){ }}
|
||||
<a class="operation" lay-event="tostore">确认到店</a>
|
||||
<a class="operation" lay-event="update">更改预约</a>
|
||||
{{# } }}
|
||||
{{# if(d.reserve_state == 'arrived_store'){ }} <a class="operation" lay-event="complet">确认完成</a> {{# } }}
|
||||
{{# if(d.reserve_state == 'wait_confirm' || d.reserve_state == 'wait_to_store' || d.reserve_state == 'arrived_store'){ }} <a class="operation" lay-event="cancel">取消预约</a> {{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{include file="reserve/reserve_action"}
|
||||
|
||||
<script type="text/javascript">
|
||||
var table, form, laytpl, element, currentDate = new Date(), minDate = "",laydate;
|
||||
|
||||
layui.use(['form', 'element', 'laydate'], function() {
|
||||
form = layui.form;
|
||||
laydate = layui.laydate;
|
||||
element = layui.element;
|
||||
currentDate.setDate(currentDate.getDate() - 7);
|
||||
form.render();
|
||||
|
||||
laydate.render({
|
||||
elem: '#start_time'
|
||||
,type: 'datetime'
|
||||
,change: function(value, date, endDate){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#end_time'
|
||||
,type: 'datetime'
|
||||
,change: function(value, date, endDate){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
|
||||
element.on('tab(list_tab)', function (data) {
|
||||
var state = $(data.elem).find('li:eq('+ data.index + ')').attr('lay-id');
|
||||
$('[name="reserve_state"]').val(state);
|
||||
table.reload({
|
||||
where: {
|
||||
reserve_state: state,
|
||||
search_text: $('input[name="search_text"]').val(),
|
||||
store_id: $('select[name="store_id"]').val(),
|
||||
start: $('input[name="start"]').val() ? new Date($('input[name="start"]').val()).valueOf / 100 : '',
|
||||
end: $('input[name="end"]').val() ? new Date($('input[name="end"]').val()).valueOf / 100 : ''
|
||||
},
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var cols = [
|
||||
[
|
||||
{
|
||||
title: '客户信息',
|
||||
width: '15%',
|
||||
templet: '#detail'
|
||||
},
|
||||
{
|
||||
field: 'service',
|
||||
title: '预约项目',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
var text = '';
|
||||
data.reserve_item.split(',').forEach(function (goods_name) {
|
||||
text += '<div class="goods-name">'+ goods_name +'</div>';
|
||||
});
|
||||
return text;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'service',
|
||||
title: '预约门店',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
return data.store_name ? data.store_name : '';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '预约到店时间',
|
||||
width: '10%',
|
||||
templet: function (data) {
|
||||
if (data.reserve_time) {
|
||||
let time = ns.time_to_date(data.reserve_time).split(' ');
|
||||
let text = '<div class="time-line-height"><p>'+ time[0] +'</p><p>'+ time[1] +'</p></div>';
|
||||
if ((data.reserve_time == 'wait_confirm' || data.reserve_time == 'wait_to_store') && data.reserve_time < {:time()}) text += '<div class="error">已超时</div>';
|
||||
return text;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '下单时间',
|
||||
width: '10%',
|
||||
templet: function (data) {
|
||||
let time = ns.time_to_date(data.create_time).split(' ');
|
||||
return '<div class="time-line-height"><p>'+ time[0] +'</p><p>'+ time[1] +'</p></div>';
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'reserve_state_name',
|
||||
title: '预约状态',
|
||||
width: '10%',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
title: '来源',
|
||||
width: '10%',
|
||||
align: 'center',
|
||||
templet: function (data) {
|
||||
return data.source == 'store' ? '门店添加' : '客户预约';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
width: '15%',
|
||||
align: 'right',
|
||||
toolbar: '#operation'
|
||||
}
|
||||
]
|
||||
];
|
||||
|
||||
/**
|
||||
* 加载表格
|
||||
*/
|
||||
table = new Table({
|
||||
elem: '#reserve_list',
|
||||
url: ns.url("cardservice://shop/reserve/lists"),
|
||||
where:{
|
||||
start_time : '{$start_time}',
|
||||
end_time : '{$end_time}',
|
||||
},
|
||||
cols: cols
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'more': //更多
|
||||
$('.more-operation').css('display', 'none');
|
||||
$(obj.tr).find('.more-operation').css('display', 'block');
|
||||
break;
|
||||
default:
|
||||
reserveEvent(obj.event, data, function () {
|
||||
table.reload();
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
$(document).click(function(event) {
|
||||
if ($(event.target).attr('lay-event') != 'more' && $('.more-operation').not(':hidden').length) {
|
||||
$('.more-operation').css('display', 'none');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
if (data.field.start_time && data.field.start_time != '') data.field.start_time = new Date(data.field.start_time).valueOf() / 1000;
|
||||
if (data.field.end_time && data.field.end_time != '') data.field.end_time = new Date(data.field.end_time).valueOf() / 1000;
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
function addReserve() {
|
||||
layer.open({
|
||||
title: '添加预约',
|
||||
type: 2,
|
||||
content: ns.url('cardservice://shop/reserve/addreserve', {request_mode: 'iframe'}),
|
||||
area: ['800px', '690px']
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 七天时间
|
||||
*/
|
||||
function datePick(date_num,event_obj){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
$(event_obj).addClass('selected');
|
||||
var now_date = new Date();
|
||||
|
||||
Date.prototype.Format = function (fmt,date_num) { //author: meizz
|
||||
this.setDate(this.getDate()-date_num);
|
||||
var o = {
|
||||
"M+": this.getMonth() + 1, //月份
|
||||
"d+": this.getDate(), //日
|
||||
"H+": this.getHours(), //小时
|
||||
"m+": this.getMinutes(), //分
|
||||
"s+": this.getSeconds(), //秒
|
||||
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
||||
"S": this.getMilliseconds() //毫秒
|
||||
};
|
||||
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||||
return fmt;
|
||||
};
|
||||
// var now_time = new Date().Format("yyyy-MM-dd HH:mm:ss",0);//当前日期
|
||||
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
|
||||
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
|
||||
$("input[name=start_time]").val(before_time,0);
|
||||
$("input[name=end_time]").val(now_time,date_num-1);
|
||||
}
|
||||
</script>
|
||||
253
addon/cardservice/shop/view/reserve/reserve_action.html
Executable file
253
addon/cardservice/shop/view/reserve/reserve_action.html
Executable file
@@ -0,0 +1,253 @@
|
||||
<script>
|
||||
var show_link_box_flag = true;
|
||||
function reserveEvent(event, data, callback) {
|
||||
switch (event) {
|
||||
case 'detail':
|
||||
var url = ns.url("cardservice://shop/reserve/detail");
|
||||
if (show_link_box_flag) {
|
||||
show_link_box_flag = false;
|
||||
$.post(url, {
|
||||
id: data.reserve_id
|
||||
}, function (str) {
|
||||
window.linkIndex = layer.open({
|
||||
type: 1,
|
||||
title: "预约详情",
|
||||
content: str,
|
||||
btn: [],
|
||||
area: ['850px'], //宽高
|
||||
maxWidth: 1920,
|
||||
cancel: function (index, layero) {
|
||||
show_link_box_flag = true;
|
||||
},
|
||||
end: function () {
|
||||
show_link_box_flag = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
break;
|
||||
case 'confirm':
|
||||
confirmReserve(data, callback);
|
||||
break;
|
||||
case 'update':
|
||||
updateReserve(data);
|
||||
break;
|
||||
case 'tostore':
|
||||
confirmToStore(data, callback);
|
||||
break;
|
||||
case 'complet':
|
||||
confirmComplete(data, callback);
|
||||
break;
|
||||
case 'cancel':
|
||||
cancelReserve(data, callback);
|
||||
break;
|
||||
case 'delete':
|
||||
deleteReserve(data, callback);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function getMemuData(state) {
|
||||
var menuData = [{txt: '预约详情', event: 'detail'}];
|
||||
switch (state) {
|
||||
case 'wait_confirm':
|
||||
menuData.push({txt: '确认预约', event: 'confirm'});
|
||||
menuData.push({txt: '更改预约', event: 'update'});
|
||||
menuData.push({txt: '取消预约', event: 'cancel'});
|
||||
break;
|
||||
case 'wait_to_store':
|
||||
menuData.push({txt: '确认到店', event: 'tostore'});
|
||||
menuData.push({txt: '更改预约', event: 'update'});
|
||||
menuData.push({txt: '取消预约', event: 'cancel'});
|
||||
break;
|
||||
case 'arrived_store':
|
||||
menuData.push({txt: '确认完成', event: 'complet'});
|
||||
break;
|
||||
case 'cancelled':
|
||||
menuData.push({txt: '删除预约', event: 'delete'});
|
||||
break;
|
||||
}
|
||||
return menuData;
|
||||
}
|
||||
|
||||
var repeat = false;
|
||||
function confirmReserve(data, callback) {
|
||||
layer.confirm('是否要确认该预约?', function(index){
|
||||
if (repeat) return;
|
||||
repeat = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/confirm"),
|
||||
data: {
|
||||
reserve_id: data.reserve_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat = false;
|
||||
if (res.code == 0) {
|
||||
try {
|
||||
data.elem.attr('data-state', 'wait_to_store');
|
||||
data.elem.parents('.panel-item').attr('class', 'panel-item wait_to_store');
|
||||
data.elem.parents('.panel-item').find('.time').attr('class', 'time wait_to_store');
|
||||
var menuData = getMemuData('wait_to_store');
|
||||
_dropdown['reserve_id' + data.reserve_id].reload({
|
||||
data: menuData,
|
||||
show: false
|
||||
})
|
||||
} catch (e) {
|
||||
}
|
||||
typeof callback == 'function' && callback(data);
|
||||
} else {
|
||||
layer.msg(res.message)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function confirmToStore(data, callback) {
|
||||
layer.confirm('是否确认客户已经到店?', function(index){
|
||||
if (repeat) return;
|
||||
repeat = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/confirmtostore"),
|
||||
data: {
|
||||
reserve_id: data.reserve_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat = false;
|
||||
if (res.code == 0) {
|
||||
try {
|
||||
data.elem.attr('data-state', 'arrived_store');
|
||||
data.elem.parents('.panel-item').attr('class', 'panel-item arrived_store');
|
||||
data.elem.parents('.panel-item').find('.time').attr('class', 'time arrived_store');
|
||||
var menuData = getMemuData('arrived_store');
|
||||
_dropdown['reserve_id' + data.reserve_id].reload({
|
||||
data: menuData,
|
||||
show: false
|
||||
})
|
||||
} catch (e) {
|
||||
}
|
||||
typeof callback == 'function' && callback(data);
|
||||
} else {
|
||||
layer.msg(res.message)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function confirmComplete(data, callback) {
|
||||
layer.confirm('确认已完成预约?', function(index){
|
||||
if (repeat) return;
|
||||
repeat = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/complete"),
|
||||
data: {
|
||||
reserve_id: data.reserve_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat = false;
|
||||
if (res.code == 0) {
|
||||
try {
|
||||
data.elem.attr('data-state', 'completed');
|
||||
data.elem.parents('.panel-item').attr('class', 'panel-item completed');
|
||||
data.elem.parents('.panel-item').find('.time').attr('class', 'time completed');
|
||||
var menuData = getMemuData('completed');
|
||||
_dropdown['reserve_id' + data.reserve_id].reload({
|
||||
data: menuData,
|
||||
show: false
|
||||
})
|
||||
} catch (e) {
|
||||
}
|
||||
typeof callback == 'function' && callback(data);
|
||||
} else {
|
||||
layer.msg(res.message)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function cancelReserve(data, callback) {
|
||||
layer.confirm('确认要取消该预约?', function(index){
|
||||
if (repeat) return;
|
||||
repeat = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/cancel"),
|
||||
data: {
|
||||
reserve_id: data.reserve_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat = false;
|
||||
if (res.code == 0) {
|
||||
try {
|
||||
data.elem.attr('data-state', 'cancelled');
|
||||
data.elem.parents('.panel-item').attr('class', 'panel-item cancelled');
|
||||
data.elem.parents('.panel-item').find('.time').attr('class', 'time cancelled');
|
||||
var menuData = getMemuData('cancelled');
|
||||
_dropdown['reserve_id' + data.reserve_id].reload({
|
||||
data: menuData,
|
||||
show: false
|
||||
})
|
||||
} catch (e) {
|
||||
}
|
||||
typeof callback == 'function' && callback(data);
|
||||
} else {
|
||||
layer.msg(res.message)
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function deleteReserve(data, callback) {
|
||||
layer.confirm('确认要删除该预约?', function(index){
|
||||
if (repeat) return;
|
||||
repeat = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("cardservice://shop/reserve/deletereserve"),
|
||||
data: {
|
||||
reserve_id: data.reserve_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat = false;
|
||||
if (res.code == 0) {
|
||||
try {
|
||||
data.elem.parents('.panel-item').remove();
|
||||
} catch (e) {
|
||||
}
|
||||
typeof callback == 'function' && callback(data);
|
||||
} else {
|
||||
layer.msg(res.message)
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function updateReserve(data) {
|
||||
layer.open({
|
||||
title: '修改预约',
|
||||
type: 2,
|
||||
content: ns.url('cardservice://shop/reserve/updatereserve',{
|
||||
request_mode: 'iframe',
|
||||
id:data.reserve_id
|
||||
}),
|
||||
area: ['800px', '620px'],
|
||||
})
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user