初始上传
This commit is contained in:
186
app/shop/view/verify/add_user.html
Executable file
186
app/shop/view/verify/add_user.html
Executable file
@@ -0,0 +1,186 @@
|
||||
<style>
|
||||
/* 关联会员 */
|
||||
.search-result { border: 1px solid; padding: 15px 30px 15px 15px; display: flex; align-items: center; position: relative;margin-top:10px;border-color: #e5e5e5 !important; }
|
||||
.search-res-img { width: 50px; height: 50px; margin-right: 5px; text-align: center; line-height: 50px; }
|
||||
.search-res-img img { max-width: 100%; max-height: 100%; }
|
||||
.search-res-intro p { line-height: 24px; }
|
||||
.search-res-close { position: absolute; top: 5px; right: 5px; }
|
||||
.check-member .layui-btn {position: absolute;top: 1px;border-color: #e5e5e5;padding: 0 10px;border-right: 0;border-top: 0;border-bottom: 0;left: 207px;height: 32px;}
|
||||
.check-admin .layui-btn {position: absolute;top: 2px;border-color: #e5e5e5;padding: 0 10px;border-right: 0;border-top: 0;border-bottom: 0;left: 207px;height: 31px;}
|
||||
.layui-input-block {overflow: hidden;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>核销人员姓名:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="verifier_name" type="text" placeholder="请输入核销人员姓名" lay-verify="required" class="layui-input len-long" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item check-member-box">
|
||||
<label class="layui-form-label"><span class="required">*</span>关联前台会员:</label>
|
||||
<div class="layui-input-block check-member">
|
||||
<input type="text" id="search_text" name="search_text" placeholder="请输入用户名或手机" class="layui-input len-mid member-name" lay-verify='search_text'>
|
||||
<button type="button" class="layui-btn layui-btn-primary " onclick="checkMember()">
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
<input type="hidden" name="member_id" lay-verify='member_id'/>
|
||||
</div>
|
||||
<p class="word-aux">关联会员后才能在手机上使用核销台功能,否则无法在手机上核销</p>
|
||||
|
||||
{if addon_is_exit('store') == 1}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">核销员类型:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="verifier_type" value="0" title="平台核销员" lay-filter="verifier_type" checked>
|
||||
<input type="radio" name="verifier_type" value="1" title="门店核销员" lay-filter="verifier_type" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item js-store-template">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店选择:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="store_id" lay-search="" lay-verify="store_id">
|
||||
<option value="">请选择门店</option>
|
||||
{foreach name="$store_list" item="vo"}
|
||||
<option value="{$vo['store_id']}">{$vo['store_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backVerify()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form,repeat_flag = false;//防重复标识
|
||||
layui.use('form', function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
$(".js-store-template").hide();
|
||||
form.on('radio(verifier_type)', function(data) {
|
||||
if (data.value == 0) {
|
||||
$(".js-store-template").hide();
|
||||
}else{
|
||||
$(".js-store-template").show();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
search_text:function(value){
|
||||
if(value == ''){
|
||||
return '请选择前台会员';
|
||||
}
|
||||
},
|
||||
member_id:function(value){
|
||||
if(value == ''){
|
||||
return '请选择前台会员';
|
||||
}
|
||||
},
|
||||
store_id: function(value) {
|
||||
var verifier_type = $("input[name='verifier_type']:checked").val();
|
||||
if(verifier_type == 1){
|
||||
if(value == ''){
|
||||
return '请选择门店';
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/verify/addUser"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(data){
|
||||
layer.msg(data.message);
|
||||
repeat_flag = false;
|
||||
if(data.code == 0){
|
||||
location.hash = ns.hash("shop/verify/user");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('.check-member .layui-input').focus(function (){
|
||||
$(this).next('.layui-btn').addClass('border-color');
|
||||
}).blur(function () {
|
||||
$(this).next('.layui-btn').removeClass('border-color');
|
||||
})
|
||||
|
||||
/**
|
||||
* 点击搜索
|
||||
*/
|
||||
var repeat_flag_member = false;
|
||||
var html, val;
|
||||
|
||||
function checkMember() {
|
||||
var parent = $(".check-member");
|
||||
var con = parent.find(".member-name").val();
|
||||
$(".layui-word-aux").remove();
|
||||
$(".search-result").remove();
|
||||
|
||||
if (repeat_flag_member) return false;
|
||||
repeat_flag_member = true;
|
||||
|
||||
if (con == "" || con == null || con.trim() == "") {
|
||||
repeat_flag = false;
|
||||
} else {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("shop/verify/searchMember"),
|
||||
data: {
|
||||
'search_text': con
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
repeat_flag_member = false;
|
||||
if (res.data == null) {
|
||||
html = '<span class="layui-word-aux">未找到该用户</span>';
|
||||
val = res.data;
|
||||
} else {
|
||||
html = '<div class="search-result layui-input-inline">' +
|
||||
'<div class="search-res-img">' +
|
||||
'<img src="' + ( res.data.headimg ? ns.img(res.data.headimg) : ns.img("{$default_headimg}")) + '" />' +
|
||||
'</div>' +
|
||||
'<div class="search-res-intro">' +
|
||||
'<p>用户名:' + res.data.username + '</p>' +
|
||||
'<p>电话:' + res.data.mobile + '</p>' +
|
||||
'</div>' +
|
||||
'<div class="search-res-close" onclick="closeMember()">' +
|
||||
'<i class="iconfont iconclose_light"></i>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
val = res.data.member_id;
|
||||
}
|
||||
|
||||
$("input[name='member_id']").attr("value", val);
|
||||
$(".check-member").append(html);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function closeMember() {
|
||||
$(".search-result").hide();
|
||||
}
|
||||
|
||||
function backVerify() {
|
||||
location.hash = ns.hash("shop/verify/user");
|
||||
}
|
||||
</script>
|
||||
193
app/shop/view/verify/edit_user.html
Executable file
193
app/shop/view/verify/edit_user.html
Executable file
@@ -0,0 +1,193 @@
|
||||
<style>
|
||||
/* 关联会员 */
|
||||
.search-result { border: 1px solid; padding: 15px 30px 15px 15px; display: flex; align-items: center; position: relative;margin-top:10px;border-color: #e5e5e5 !important; }
|
||||
.search-res-img { width: 50px; height: 50px; margin-right: 5px; text-align: center; line-height: 50px; }
|
||||
.search-res-img img { max-width: 100%; max-height: 100%; }
|
||||
.search-res-intro p { line-height: 24px; }
|
||||
.search-res-close { position: absolute; top: 5px; right: 5px; }
|
||||
.check-member .layui-btn {position: absolute;top: 0;border-color: #e5e5e5;padding: 0 10px;border-right: 0;left: 207px;}
|
||||
.check-admin .layui-btn {position: absolute;top: 0;border-color: #e5e5e5;padding: 0 10px;border-right: 0;left: 207px;}
|
||||
.layui-input-block {overflow: hidden;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>核销人员姓名:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="verifier_name" type="text" value="{$data.verifier_name}" placeholder="请输入核销人员姓名" lay-verify="required" class="layui-input len-long" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item check-member-box">
|
||||
<label class="layui-form-label"><span class="required">*</span>关联前台会员:</label>
|
||||
<div class="layui-input-block check-member">
|
||||
<input type="text" id="search_text" name="search_text" placeholder="请输入用户名或手机" class="layui-input len-mid member-name" value="{$data.member_name}">
|
||||
<button type="button" class="layui-btn layui-btn-primary" onclick="checkMember()">
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
<input type="hidden" name="member_id" value="{$data.member_id}" />
|
||||
</div>
|
||||
<p class="word-aux">关联会员后才能在手机上使用核销台功能,否则无法在手机上核销</p>
|
||||
|
||||
{if addon_is_exit('store') == 1}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">核销员类型:</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="verifier_type" type="radio" name="verifier_type" value="0" title="平台核销员" lay-filter="verifier_type" {if $data.verifier_type == 0} checked {/if}>
|
||||
<input class="verifier_type" type="radio" name="verifier_type" value="1" title="门店核销员" lay-filter="verifier_type" {if $data.verifier_type == 1} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item js-store-template">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店选择:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="store_id" lay-search="" lay-verify="store_id">
|
||||
<option value="">请选择门店</option>
|
||||
{foreach name="$store_list" item="vo"}
|
||||
<option value="{$vo['store_id']}" {if $vo['store_id'] == $data['store_id']} selected {/if} >{$vo['store_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backVerify()">返回</button>
|
||||
</div>
|
||||
<!-- 隐藏域 -->
|
||||
<input type="hidden" name="verifier_id" value="{$data.verifier_id}"/>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form,repeat_flag = false;//防重复标识
|
||||
layui.use('form', function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
// 隐藏
|
||||
switchVerierType($("input[name='verifier_type']:checked").val());
|
||||
checkMember();
|
||||
|
||||
function switchVerierType(type){
|
||||
if (type == 0) {
|
||||
$(".js-store-template").hide();
|
||||
}else{
|
||||
$(".js-store-template").show();
|
||||
}
|
||||
}
|
||||
|
||||
form.on('radio(verifier_type)', function(data) {
|
||||
switchVerierType(data.value);
|
||||
});
|
||||
|
||||
// 表单验证
|
||||
form.verify({
|
||||
search_text:function(value){
|
||||
if(value == ''){
|
||||
return '请选择前台会员';
|
||||
}
|
||||
},
|
||||
member_id:function(value){
|
||||
if(value == ''){
|
||||
return '请选择前台会员';
|
||||
}
|
||||
},
|
||||
store_id: function(value) {
|
||||
var verifier_type = $("input[name='verifier_type']:checked").val();
|
||||
if(verifier_type == 1){
|
||||
if(value == ''){
|
||||
return '请选择门店';
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// 监听提交
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/verify/editUser"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(data){
|
||||
layer.msg(data.message);
|
||||
repeat_flag = false;
|
||||
if(data.code == 0){
|
||||
location.hash = ns.hash("shop/verify/user");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('.check-member .layui-input').focus(function (){
|
||||
$(this).next('.layui-btn').addClass('border-color');
|
||||
}).blur(function () {
|
||||
$(this).next('.layui-btn').removeClass('border-color');
|
||||
});
|
||||
|
||||
/**
|
||||
* 点击搜索
|
||||
*/
|
||||
var repeat_flag_member = false;
|
||||
var html, val;
|
||||
|
||||
function checkMember() {
|
||||
var parent = $(".check-member");
|
||||
var con = parent.find(".member-name").val();
|
||||
$(".layui-word-aux").remove();
|
||||
$(".search-result").remove();
|
||||
|
||||
if (repeat_flag_member) return false;
|
||||
repeat_flag_member = true;
|
||||
|
||||
if (con == "" || con == null || con.trim() == "") {
|
||||
repeat_flag = false;
|
||||
} else {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("shop/verify/searchMember"),
|
||||
data: {
|
||||
'search_text': con
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
repeat_flag_member = false;
|
||||
|
||||
if (res.data == null) {
|
||||
html = '<span class="layui-word-aux">未找到该用户</span>';
|
||||
val = res.data;
|
||||
} else {
|
||||
html = '<div class="search-result layui-input-inline">' +
|
||||
'<div class="search-res-img">' +
|
||||
'<img src="' + ( res.data.headimg ? ns.img(res.data.headimg) : ns.img("{$default_headimg}")) + '" />' +
|
||||
'</div>' +
|
||||
'<div class="search-res-intro">' +
|
||||
'<p>用户名:' + res.data.username + '</p>' +
|
||||
'<p>电话:' + res.data.mobile + '</p>' +
|
||||
'</div>' +
|
||||
'<div class="search-res-close" onclick="closeMember()">' +
|
||||
'<i class="iconfont iconclose_light"></i>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
val = res.data.member_id;
|
||||
}
|
||||
|
||||
$("input[name='member_id']").attr("value", val);
|
||||
$(".check-member").append(html);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function closeMember() {
|
||||
$(".search-result").hide();
|
||||
}
|
||||
|
||||
function backVerify() {
|
||||
location.hash = ns.hash("shop/verify/user");
|
||||
}
|
||||
</script>
|
||||
310
app/shop/view/verify/lists.html
Executable file
310
app/shop/view/verify/lists.html
Executable file
@@ -0,0 +1,310 @@
|
||||
<style>
|
||||
.screen{margin-bottom: 15px;}
|
||||
.contraction span {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
text-align: center;
|
||||
line-height: 14px;
|
||||
user-select: none;
|
||||
}
|
||||
.verify-list {
|
||||
overflow: hidden;
|
||||
padding: 0 45px;
|
||||
}
|
||||
.verify-list li .img-wrap {
|
||||
vertical-align: middle;
|
||||
margin-right: 8px;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
text-align: center;
|
||||
border: 1px solid #e2e2e2;
|
||||
}
|
||||
.verify-list li .img-wrap img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.verify-list li .info-wrap{
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.verify-list li .name-wrap{
|
||||
flex: 1;
|
||||
}
|
||||
.verify-list li .info-wrap span.sku-name {
|
||||
-webkit-line-clamp: 2;
|
||||
margin-bottom: 5px;
|
||||
line-height: 1.3;
|
||||
margin-top: 0;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
}
|
||||
.verify-list li .info-wrap span {
|
||||
display: -webkit-box;
|
||||
margin-top: 5px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: normal;
|
||||
word-break: break-all;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 1;
|
||||
line-height: 1;
|
||||
font-size: 12px;
|
||||
}
|
||||
.verify-list li {
|
||||
float: left;
|
||||
display: flex;
|
||||
padding: 10px;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
border: 1px solid #EFEFEF;
|
||||
width: 294px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.table-title .title-content p{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}
|
||||
.table-title .title-content .verify-type{font-size:12px;margin-right: 4px;padding: 0px 6px;display: inline-block; border: 1px solid;border-radius: 3px;line-height: 18px}
|
||||
.table-title .title-content .verify-code{display:inline-block;width:200px}
|
||||
.layui-table-box .layui-table-body .laytable-cell-1-0-0{padding-top: 5px;padding-bottom: 5px}
|
||||
</style>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<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="verifier_name" placeholder="请输入核销员名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">核销码:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="verify_code" 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="verify_type">
|
||||
<option value="">请选择核销码类型</option>
|
||||
{foreach $verify_type as $k => $v}
|
||||
<option value="{$k}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">核销地址:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="verify_from">
|
||||
<option value="">请选择核销地址</option>
|
||||
{foreach $verify_from as $k => $v}
|
||||
<option value="{$k}">{$v}</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" id="start_time" autocomplete="off" placeholder="开始时间" 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" id="end_time" autocomplete="off" placeholder="结束时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</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>
|
||||
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="export_verify" >批量导出</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="verify_list" lay-filter="verify_list"></table>
|
||||
|
||||
<!-- 核销信息 -->
|
||||
<script type="text/html" id="verify_code">
|
||||
<div class="table-title">
|
||||
<div class="contraction" data-id="{{d.id}}" data-open="0">
|
||||
<span>+</span>
|
||||
</div>
|
||||
|
||||
<div class="title-content table-title">
|
||||
{{# if(d.verify_type == "pickup"){ }}
|
||||
<div class="title-pic"><img src="SHOP_IMG/hexiao_dindan.png"></div>
|
||||
{{# } }}
|
||||
{{# if(d.verify_type == "virtualgoods"){ }}
|
||||
<div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
|
||||
{{# } }}
|
||||
<div class="title-content" style="overflow: unset;">
|
||||
<p title="{{ d.order_info.order_name }}">{{ d.order_info.order_name }}</p>
|
||||
<span class="verify-type text-color border-color">{{ d.verify_type_name}}</span>
|
||||
<span class="verify-code">核销码:{{ d.verify_code }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 核销内容 -->
|
||||
<script type="text/html" id="verifyList">
|
||||
<tr class="js-list-{{d.index}}" id="sku_img_{{d.index}}">
|
||||
<td colspan="8">
|
||||
<ul class="verify-list">
|
||||
{{# for(var i=0; i<d.list.length; i++){ }}
|
||||
<li>
|
||||
<div class="img-wrap">
|
||||
<img layer-src src="{{ns.img(d.list[i].img, 'mid')}}">
|
||||
</div>
|
||||
<div class="info-wrap">
|
||||
<div class="name-wrap">
|
||||
<span class="sku-name">{{d.list[i].name}}</span>
|
||||
</div>
|
||||
<span class="price">价格:¥{{d.list[i].price}}</span>
|
||||
<span class="sale_num">数量:{{d.list[i].num}}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{# } }}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
$(function () {
|
||||
$("body").off("click", ".contraction").on("click", ".contraction", function () {
|
||||
|
||||
var id = $(this).attr("data-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-list-" + index).remove();
|
||||
} else {
|
||||
$(this).children("span").text("-");
|
||||
$.ajax({
|
||||
url: ns.url("shop/verify/verifyInfo"),
|
||||
data: {id: id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
async: false,
|
||||
success: function (res) {
|
||||
var verify_list = $("#verifyList").html();
|
||||
var data = {
|
||||
list: res.data.data.item_array,
|
||||
index: index
|
||||
};
|
||||
|
||||
laytpl(verify_list).render(data, function (html) {
|
||||
tr.after(html);
|
||||
});
|
||||
layer.photos({
|
||||
photos: '.img-wrap',
|
||||
anim: 5
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
$(this).attr("data-open", (open == 0 ? 1 : 0));
|
||||
});
|
||||
|
||||
layui.use(['form', 'laydate','laytpl'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
var table,
|
||||
form = layui.form,
|
||||
laydate = layui.laydate;
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
/**
|
||||
* 加载表格
|
||||
*/
|
||||
table = new Table({
|
||||
elem: '#verify_list',
|
||||
url: ns.url("shop/verify/lists"), //数据接口
|
||||
cols: [
|
||||
[{
|
||||
title: '核销信息',
|
||||
width: '30%',
|
||||
templet: '#verify_code'
|
||||
},
|
||||
{
|
||||
field: 'order_no',
|
||||
title: '订单编号',
|
||||
width: '12%',
|
||||
templet: function (data) {
|
||||
return '<a href="'+ ns.href("shop/order/detail", {order_id:data.order_info.order_id}) +'" target="_blank">'+ data.order_no +'</a>';
|
||||
}
|
||||
},{
|
||||
field: 'name',
|
||||
title: '买家姓名',
|
||||
width: '8%'
|
||||
},
|
||||
{
|
||||
field: 'verifyFrom',
|
||||
title: '核销地址',
|
||||
width: '8%',
|
||||
},
|
||||
{
|
||||
field: 'verify_remark',
|
||||
title: '核销备注',
|
||||
unresize: 'false',
|
||||
width: '22%',
|
||||
align: 'right',
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
//批量导出
|
||||
form.on('submit(export_verify)', function (data) {
|
||||
location.href = ns.url("shop/verify/exportVerify?request_mode=download", data.field);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
})
|
||||
</script>
|
||||
397
app/shop/view/verify/order_verify.html
Executable file
397
app/shop/view/verify/order_verify.html
Executable file
@@ -0,0 +1,397 @@
|
||||
<style>
|
||||
.screen{margin-bottom: 15px;}
|
||||
.contraction span{cursor: pointer;display: inline-block;width: 17px;height: 17px;text-align: center;line-height: 14px;user-select: none;}
|
||||
.verify-list{overflow: hidden;padding: 0 45px;}
|
||||
.verify-list li .img-wrap{vertical-align: middle;margin-right: 8px;width: 80px;height: 80px;text-align: center;border: 1px solid #e2e2e2;}
|
||||
.verify-list li .img-wrap img{max-width: 100%;max-height: 100%;}
|
||||
.verify-list li .info-wrap{flex: 1;display: flex;flex-direction: column;}
|
||||
.verify-list li .name-wrap{flex: 1;}
|
||||
.verify-list li .info-wrap span.sku-name{-webkit-line-clamp: 2;margin-bottom: 5px;line-height: 1.3;margin-top: 0;color: #333;font-size: 14px;}
|
||||
.verify-list li .info-wrap span{display: -webkit-box;margin-top: 5px;overflow: hidden;text-overflow: ellipsis;white-space: normal;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;line-height: 1;font-size: 12px;}
|
||||
.verify-list li{float: left;display: flex;padding: 10px;margin-right: 10px;margin-bottom: 10px;border: 1px solid #EFEFEF;width: 294px;align-items: center;}
|
||||
.table-title .title-content p{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}
|
||||
.goods-box{display: flex;padding: 10px;justify-content: space-between;margin-bottom: 20px;}
|
||||
.goods-box .goods-info{width: 340px;}
|
||||
.goods-box .goods-info .goods-name{text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;display: -moz-box;-moz-line-clamp: 2;-moz-box-orient: vertical;overflow-wrap: break-word;word-break: break-all;white-space: normal;overflow: hidden;height: 38px;}
|
||||
.goods-box .goods-info .goods-desc{margin-top: 5px;}
|
||||
.goods-box .goods-img{margin-right: 15px;display: flex;align-items: center;}
|
||||
.goods-box .goods-img img{width: 80px;max-height: 80px;}
|
||||
.goods-box .box-left{display: flex;}
|
||||
.goods-box .box-right{display: flex;align-items: center;}
|
||||
|
||||
.user-detail{cursor: pointer;}
|
||||
.table-title .title-content{overflow: unset;}
|
||||
.table-title .title-content p{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}
|
||||
.table-title .title-content .verify-type{font-size:12px;margin-right: 4px;padding: 0px 6px;display: inline-block; border: 1px solid;border-radius: 3px;line-height: 18px}
|
||||
.table-title .title-content .verify-code{display:inline-block;width:200px}
|
||||
.layui-table-box .layui-table-body .laytable-cell-1-0-0{padding-top: 5px;padding-bottom: 5px}
|
||||
.layui-layout-admin .stat-box{background-color: #F2F3F5;margin-bottom: 15px;}
|
||||
|
||||
.layui-card-body .content{flex: 1;width: auto;}
|
||||
.layui-card-body .content:first-child {flex: unset;margin-right: 30px}
|
||||
.layui-card-body .bottom-title{color: #909399;font-size: 14px;margin-top: 5px;}
|
||||
.layui-laydate-content tr{border: none;}
|
||||
</style>
|
||||
|
||||
<div class="layui-card card-common card-brief panel-content">
|
||||
<div class="layui-card-header simple">
|
||||
<span class="card-title">核销概况</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="content">
|
||||
<p class="title">核销码总数(个)<a class="text-color" target="_blank" href="{:href_url('shop/verify/verifycard')}">核销台</a></p>
|
||||
<p class="money" id="total_count">0</p>
|
||||
<p class="bottom-title">
|
||||
<span>虚拟商品:<span id="verify_goods_count">0</span></span>
|
||||
<span>订单自提:<span id="pickup_count">0</span></span>
|
||||
<span>卡项商品:<span id="card_goods_count">0</span></span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">已核销(次)</p>
|
||||
<p class="money" id="verify_use_num">0</p>
|
||||
<p class="bottom-title">
|
||||
<span> </span>
|
||||
<span> </span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">待核销(虚拟商品)</p>
|
||||
<p class="money" id="verify_goods_num">0</p>
|
||||
<p class="bottom-title">
|
||||
<span> </span>
|
||||
<span> </span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">待核销(订单自提)</p>
|
||||
<p class="money" id="pickup_num">0</p>
|
||||
<p class="bottom-title">
|
||||
<span> </span>
|
||||
<span> </span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">待核销(卡项商品)</p>
|
||||
<p class="money" id="card_goods_num">0</p>
|
||||
<p class="bottom-title">
|
||||
<span> </span>
|
||||
<span> </span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<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="verify_code" 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="verify_type">
|
||||
<option value="">全部</option>
|
||||
{foreach $verify_type as $k => $v}
|
||||
<option value="{$k}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">核销码状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="is_verify">
|
||||
<option value="">全部</option>
|
||||
{foreach $status_list as $val}
|
||||
<option value="{$val.id}">{$val.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">用户搜索</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="member_field" lay-filter="member_field">
|
||||
<option value="nickname">昵称</option>
|
||||
<option value="mobile">手机号</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-form-mid"> </div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="member_field_value" autocomplete="off" class="layui-input" placeholder="请输入昵称"/>
|
||||
</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="verify_list" lay-filter="verify_list"></table>
|
||||
|
||||
<!-- 工具栏操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="record">核销记录</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="userdetail">
|
||||
<div class='table-title user-detail' onclick="memberDetail({{d.member_id}})">
|
||||
<div class='title-pic'>
|
||||
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
|
||||
</div>
|
||||
<div class='title-content'>{{d.nickname}}</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 核销信息 -->
|
||||
<script type="text/html" id="verify_code">
|
||||
<div class="table-title">
|
||||
<div class="contraction" data-id="{{d.id}}" data-open="0">
|
||||
<span>+</span>
|
||||
</div>
|
||||
<div class="title-content table-title" style="overflow: unset;">
|
||||
{{# if(d.verify_type == "pickup"){ }}
|
||||
<div class="title-pic"><img src="{{ns.img(d.sku_image)}}" onerror="this.src = 'SHOP_IMG/hexiao_dindan.png' "></div>
|
||||
{{# } }}
|
||||
{{# if(d.verify_type == "virtualgoods"){ }}
|
||||
<div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
|
||||
{{# } }}
|
||||
{{# if(d.verify_type == "pickup" || d.verify_type == "virtualgoods"){ }}
|
||||
<div class="title-content" style="overflow: unset;">
|
||||
<p title="{{ d.order_info.order_name }}">{{ d.order_info.order_name }}</p>
|
||||
<span class="verify-type text-color border-color">{{ d.verify_type_name}}</span>
|
||||
<span class="verify-code">核销码:{{ d.verify_code }}</span>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.verify_type == "cardgoods"){ }}
|
||||
<div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
|
||||
<div class="title-content" style="overflow: unset;">
|
||||
<p title="{{ d.name }}">{{ d.sku_name }}</p>
|
||||
<span class="verify-type text-color border-color">{{ d.verify_type_name}}</span>
|
||||
<span class="verify-code">核销码:{{ d.verify_code }}</span>
|
||||
</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 核销内容 -->
|
||||
<script type="text/html" id="verifyList">
|
||||
<tr class="js-list-{{d.index}}" id="sku_img_{{d.index}}">
|
||||
<td colspan="8">
|
||||
<ul class="verify-list">
|
||||
{{# for(var i=0; i<d.list.length; i++){ }}
|
||||
<li>
|
||||
<div class="img-wrap">
|
||||
<img layer-src src="{{ns.img(d.list[i].img, 'mid')}}">
|
||||
</div>
|
||||
<div class="info-wrap">
|
||||
<div class="name-wrap">
|
||||
<span class="sku-name">{{d.list[i].name}}</span>
|
||||
</div>
|
||||
<span class="price">价格:¥{{d.list[i].price}}</span>
|
||||
<span class="sale_num">数量:{{d.list[i].num}}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{# } }}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
$(function () {
|
||||
|
||||
$("body").off("click", ".contraction").on("click", ".contraction", function () {
|
||||
|
||||
var id = $(this).attr("data-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-list-" + index).remove();
|
||||
} else {
|
||||
$(this).children("span").text("-");
|
||||
$.ajax({
|
||||
url: ns.url("shop/verify/verifyInfo"),
|
||||
data: {id: id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
async: false,
|
||||
success: function (res) {
|
||||
var verify_list = $("#verifyList").html();
|
||||
var data = {
|
||||
list: res.data.data.item_array,
|
||||
index: index
|
||||
};
|
||||
laytpl(verify_list).render(data, function (html) {
|
||||
tr.after(html);
|
||||
});
|
||||
layer.photos({
|
||||
photos: '.img-wrap',
|
||||
anim: 5
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
$(this).attr("data-open", (open == 0 ? 1 : 0));
|
||||
});
|
||||
|
||||
layui.use(['form', 'laydate','laytpl'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
var table,
|
||||
form = layui.form,
|
||||
laydate = layui.laydate;
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
/**
|
||||
* 加载表格
|
||||
*/
|
||||
table = new Table({
|
||||
elem: '#verify_list',
|
||||
url: ns.url("shop/verify/orderverify"), //数据接口
|
||||
cols: [
|
||||
[{
|
||||
title: '核销信息',
|
||||
width: '30%',
|
||||
templet: '#verify_code'
|
||||
},{
|
||||
field: 'name',
|
||||
title: '买家信息',
|
||||
width: '15%',
|
||||
align: 'center',
|
||||
templet: function (data) {
|
||||
if(data.member_info){
|
||||
let html = '';
|
||||
html += '<div style="line-height: 20px;"><a class="text-color" target="_blank" href="' + ns.href("shop/member/editmember?member_id=") + data.member_info.member_id + '">' + data.member_info.nickname + '</a></div>';
|
||||
html += '<div style="line-height: 20px;">'+ data.member_info.mobile +'</div>';
|
||||
return html;
|
||||
}else{
|
||||
return '';
|
||||
}
|
||||
}
|
||||
},{
|
||||
field: '',
|
||||
title: '已核销/可核销',
|
||||
align: 'center',
|
||||
templet: function (data) {
|
||||
return data.verify_use_num + '/' + (data.verify_total_count ? data.verify_total_count : '不限次');
|
||||
}
|
||||
},{
|
||||
field: '',
|
||||
title: '核销状态',
|
||||
align: 'center',
|
||||
templet: function (data) {
|
||||
return data.is_verify_info ? data.is_verify_info.name : '';
|
||||
}
|
||||
},{
|
||||
field: 'verify_time',
|
||||
title: '创建时间',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time); //创建时间转换方法
|
||||
}
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'record':
|
||||
window.open(ns.href("shop/verify/records?verify_code=" + data.verify_code));
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
form.on('select(member_field)', function (data){
|
||||
var member_field_name = $(data.elem).find('option:selected').text();
|
||||
$("input[name='member_field_value']").attr('placeholder', '请输入'+member_field_name);
|
||||
})
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
var reg = new RegExp(regexp_config.mobile);
|
||||
if(data.field.member_field === 'mobile' && data.field.member_field_value && !reg.test(data.field.member_field_value)){
|
||||
layer.msg('请输入正确的手机号');
|
||||
return false;
|
||||
}
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
//批量导出
|
||||
form.on('submit(export_verify)', function (data) {
|
||||
location.href = ns.url("shop/verify/exportVerify?request_mode=download", data.field);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
getStat()
|
||||
function getStat(){
|
||||
$.ajax({
|
||||
url: ns.url("shop/verify/stat"),
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
$("#card_goods_count").html(res.card_goods_count)
|
||||
$("#card_goods_num").html(res.card_goods_num)
|
||||
$("#pickup_count").html(res.pickup_count)
|
||||
$("#pickup_num").html(res.pickup_num)
|
||||
$("#total_count").html(res.total_count)
|
||||
$("#verify_goods_count").html(res.verify_goods_count)
|
||||
$("#verify_goods_num").html(res.verify_goods_num)
|
||||
$("#verify_use_num").html(res.verify_use_num)
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function memberDetail(member_id){
|
||||
window.open(ns.href("shop/member/editmember", {'member_id':member_id}))
|
||||
}
|
||||
</script>
|
||||
283
app/shop/view/verify/records.html
Executable file
283
app/shop/view/verify/records.html
Executable file
@@ -0,0 +1,283 @@
|
||||
<style>
|
||||
.screen{margin-bottom: 15px;}
|
||||
.contraction span{cursor: pointer;display: inline-block;width: 17px;height: 17px;text-align: center;line-height: 14px;user-select: none;}
|
||||
.verify-list{overflow: hidden;padding: 0 45px;}
|
||||
.verify-list li .img-wrap{vertical-align: middle;margin-right: 8px;width: 80px;height: 80px;text-align: center;border: 1px solid #e2e2e2;}
|
||||
.verify-list li .img-wrap img{max-width: 100%;max-height: 100%;}
|
||||
.verify-list li .info-wrap{flex: 1;display: flex;flex-direction: column;}
|
||||
.verify-list li .name-wrap{flex: 1;}
|
||||
.verify-list li .info-wrap span.sku-name{-webkit-line-clamp: 2;margin-bottom: 5px;line-height: 1.3;margin-top: 0;color: #333;font-size: 14px;}
|
||||
.verify-list li .info-wrap span{display: -webkit-box;margin-top: 5px;overflow: hidden;text-overflow: ellipsis;white-space: normal;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;line-height: 1;font-size: 12px;}
|
||||
.verify-list li{float: left;display: flex;padding: 10px;margin-right: 10px;margin-bottom: 10px;border: 1px solid #EFEFEF;width: 294px;align-items: center;}
|
||||
.table-title .title-content p{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}
|
||||
.table-title .title-content .verify-type{font-size:12px;margin-right: 4px;padding: 0px 6px;display: inline-block; border: 1px solid;border-radius: 3px;line-height: 18px}
|
||||
.table-title .title-content .verify-code{display:inline-block;width:200px}
|
||||
.layui-table-box .layui-table-body .laytable-cell-1-0-0{padding-top: 5px;padding-bottom: 5px}
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
</style>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<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="verifier_name" placeholder="请输入核销员名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">核销码:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="verify_code" value="{$verify_code}" 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="verify_type">
|
||||
<option value="">请选择核销类型</option>
|
||||
{foreach $verify_type as $k => $v}
|
||||
<option value="{$k}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</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" id="start_time" autocomplete="off" placeholder="开始时间" 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" id="end_time" autocomplete="off" placeholder="结束时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</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>
|
||||
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="export_verify">批量导出</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="verify_list" lay-filter="verify_list"></table>
|
||||
|
||||
<!-- 核销信息 -->
|
||||
<script type="text/html" id="verify_code">
|
||||
<div class="table-title">
|
||||
<div class="contraction" data-id="{{d.id}}" data-open="0">
|
||||
<span>+</span>
|
||||
</div>
|
||||
|
||||
<div class="title-content table-title" style="overflow: unset;">
|
||||
{{# if(d.verify_type == "pickup"){ }}
|
||||
<div class="title-pic"><img src="SHOP_IMG/hexiao_dindan.png"></div>
|
||||
{{# } }}
|
||||
{{# if(d.verify_type == "virtualgoods"){ }}
|
||||
<div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
|
||||
{{# } }}
|
||||
{{# if(d.verify_type == "pickup" || d.verify_type == "virtualgoods"){ }}
|
||||
<div class="title-content" style="overflow: unset;">
|
||||
<p title="{{ d.order_info.order_name }}">{{ d.order_info.order_name }}</p>
|
||||
<span class="verify-type text-color border-color">{{ d.verify_type_name}}</span>
|
||||
<span class="verify-code">核销码:{{ d.verify_code }}</span>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.verify_type == "cardgoods"){ }}
|
||||
<div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
|
||||
<div class="title-content" style="overflow: unset;">
|
||||
<p title="{{ d.name }}">{{ d.name }}</p>
|
||||
<span class="verify-type text-color border-color">{{ d.verify_type_name}}</span>
|
||||
<span class="verify-code">核销码:{{ d.verify_code }}</span>
|
||||
</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 核销内容 -->
|
||||
<script type="text/html" id="verifyList">
|
||||
<tr class="js-list-{{d.index}}" id="sku_img_{{d.index}}">
|
||||
<td colspan="8">
|
||||
<ul class="verify-list">
|
||||
{{# for(var i=0; i<d.list.length; i++){ }}
|
||||
<li>
|
||||
<div class="img-wrap">
|
||||
<img layer-src src="{{ns.img(d.list[i].img, 'mid')}}">
|
||||
</div>
|
||||
<div class="info-wrap">
|
||||
<div class="name-wrap">
|
||||
<span class="sku-name">{{d.list[i].name}}</span>
|
||||
</div>
|
||||
<span class="price">价格:¥{{d.list[i].price}}</span>
|
||||
<span class="sale_num">数量:{{d.list[i].num}}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{# } }}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
$(function () {
|
||||
$("body").off("click", ".contraction").on("click", ".contraction", function () {
|
||||
|
||||
var id = $(this).attr("data-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-list-" + index).remove();
|
||||
} else {
|
||||
$(this).children("span").text("-");
|
||||
$.ajax({
|
||||
url: ns.url("shop/verify/verifyInfo"),
|
||||
data: {id: id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
async: false,
|
||||
success: function (res) {
|
||||
var verify_list = $("#verifyList").html();
|
||||
var data = {
|
||||
list: res.data.data.item_array,
|
||||
index: index
|
||||
};
|
||||
|
||||
laytpl(verify_list).render(data, function (html) {
|
||||
tr.after(html);
|
||||
});
|
||||
layer.photos({
|
||||
photos: '.img-wrap',
|
||||
anim: 5
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
$(this).attr("data-open", (open == 0 ? 1 : 0));
|
||||
});
|
||||
|
||||
layui.use(['form', 'laydate','laytpl'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
var table,
|
||||
form = layui.form,
|
||||
laydate = layui.laydate;
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
/**
|
||||
* 加载表格
|
||||
*/
|
||||
table = new Table({
|
||||
elem: '#verify_list',
|
||||
url: ns.url("shop/verify/records"), //数据接口
|
||||
where: {
|
||||
verify_code: $('input[name="verify_code"]').val()
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
title: '核销信息',
|
||||
width: '30%',
|
||||
templet: '#verify_code'
|
||||
},
|
||||
{
|
||||
title: '核销门店',
|
||||
width: '8%',
|
||||
templet: function (data) {
|
||||
return data.store_name ? data.store_name : '--';
|
||||
}
|
||||
},{
|
||||
field: 'verifier_name',
|
||||
title: '核销员',
|
||||
width: '10%',
|
||||
templet: function (data) {
|
||||
if(data.verify_from == 'mobile'){
|
||||
return '<a href="'+ ns.href("shop/verify/edituser", {verifier_id:data.verifier_id}) +'" target="_blank">'+ data.verifier_name +'</a>';
|
||||
}else{
|
||||
return data.verifier_name;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'verify_time',
|
||||
title: '核销时间',
|
||||
width: '17%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.verify_time); //创建时间转换方法
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'verify_num',
|
||||
title: '核销次数',
|
||||
width: '10%',
|
||||
},
|
||||
{
|
||||
field: 'verify_remark',
|
||||
title: '核销备注',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
align: 'right',
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
//批量导出
|
||||
form.on('submit(export_verify)', function (data) {
|
||||
location.href = ns.url("shop/verify/exportVerify?request_mode=download", data.field);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
})
|
||||
</script>
|
||||
232
app/shop/view/verify/user.html
Executable file
232
app/shop/view/verify/user.html
Executable file
@@ -0,0 +1,232 @@
|
||||
<!-- 按钮容器 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加核销人员</button>
|
||||
</div>
|
||||
|
||||
<!-- 筛选面板 -->
|
||||
<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-inline">
|
||||
<label class="layui-form-label">核销员名称:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="verifier_name" placeholder="请输入核销员名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if addon_is_exit('store') == 1}
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">核销员类型:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="verifier_type" lay-filter="verifier_type">
|
||||
<option value="">全部</option>
|
||||
<option value="0">平台核销员</option>
|
||||
<option value="1">门店核销员</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">核销门店:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="store_id" lay-verify="store_id">
|
||||
<option value="">请选择门店</option>
|
||||
{foreach name="$store_list" item="vo"}
|
||||
<option value="{$vo['store_id']}">{$vo['store_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-filter="search" lay-submit>筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="user_list" lay-filter="user_list"></table>
|
||||
|
||||
<!-- 工具栏操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="toolbarOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||||
</script>
|
||||
|
||||
<!-- 批量删除 -->
|
||||
<script type="text/html" id="batchOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use('form', function() {
|
||||
var table,
|
||||
form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#user_list',
|
||||
url: ns.url("shop/verify/user"),
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
width: '3%',
|
||||
type: 'checkbox',
|
||||
unresize: 'false',
|
||||
},
|
||||
{
|
||||
field: 'verifier_name',
|
||||
title: '核销员',
|
||||
unresize: 'false'
|
||||
},
|
||||
{
|
||||
title: '核销员类型',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
if(data.verifier_type != 0){
|
||||
return '门店核销员';
|
||||
}else{
|
||||
return "平台核销员";
|
||||
}
|
||||
}
|
||||
},
|
||||
{if addon_is_exit('store') == 1}
|
||||
{
|
||||
title: '核销门店',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
if(data.store_id != 0){
|
||||
if(data.store_name != null && data.store_name != ''){
|
||||
return data.store_name;
|
||||
}else{
|
||||
return "--";
|
||||
}
|
||||
}else{
|
||||
return "--";
|
||||
}
|
||||
}
|
||||
},
|
||||
{/if}
|
||||
{
|
||||
title: '会员账号',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
if(data.member_id != 0){
|
||||
if(data.username != ''){
|
||||
return data.username;
|
||||
}else{
|
||||
return data.mobile;
|
||||
}
|
||||
}else{
|
||||
return "--";
|
||||
}
|
||||
}
|
||||
}, {
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
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 'edit': //编辑
|
||||
location.hash = ns.hash("shop/verify/editUser", {"verifier_id": data.verifier_id});
|
||||
break;
|
||||
case 'delete': //删除
|
||||
deleteData(data.verifier_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// 批量操作
|
||||
table.toolbar(function (obj) {
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "delete":
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].verifier_id);
|
||||
deleteData(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// 批量操作
|
||||
table.bottomToolbar(function(obj) {
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "delete":
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].verifier_id);
|
||||
deleteData(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// 删除
|
||||
function deleteData(ids) {
|
||||
layer.confirm('确定要删除核销员吗?', function(index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/verify/deleteUser"),
|
||||
data: {ids},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 搜索功能
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("shop/verify/addUser");
|
||||
}
|
||||
</script>
|
||||
171
app/shop/view/verify/verify_card.html
Executable file
171
app/shop/view/verify/verify_card.html
Executable file
@@ -0,0 +1,171 @@
|
||||
<link rel="stylesheet" type="text/css" href="SHOP_CSS/verify.css" />
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<div class="layui-form" style="margin: 0;">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="verify_code" placeholder="请输入核销码" autocomplete="off" class="layui-input len-long" id="verify_code">
|
||||
<button type="button" class="layui-btn layui-btn-primary code-searsh" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verify-block">
|
||||
|
||||
<div class="search-content-block">
|
||||
<div class="search-content">
|
||||
<div class="verify-step-text">
|
||||
<ul class="layui-timeline">
|
||||
<li class="layui-timeline-item">
|
||||
<i class="layui-icon layui-timeline-axis text-color"></i>
|
||||
<div class="layui-timeline-content layui-text">
|
||||
<h3 class="verify-step-text-title">搜索核销码</h3>
|
||||
<p class="verify-step-text-content">
|
||||
请顾客出示核销码并点击“核销台”,
|
||||
扫描二维码或输入二维码上方的核销码
|
||||
</p>
|
||||
<p class="verify-step-text-content" style="color:red"> 使用扫码枪时,光标必须在输入框内,并且输入法是英文状态,方可进行使用。</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="layui-timeline-item">
|
||||
<i class="layui-icon layui-timeline-axis text-color"></i>
|
||||
<div class="layui-timeline-content layui-text">
|
||||
<h3 class="verify-step-text-title">验证</h3>
|
||||
<p class="verify-step-text-content">提供有效期验证,其他信息请自行核对</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="layui-timeline-item">
|
||||
<i class="layui-icon layui-timeline-axis text-color"></i>
|
||||
<div class="layui-timeline-content layui-text">
|
||||
<h3 class="verify-step-text-title">验证完成</h3>
|
||||
<p class="verify-step-text-content">验证完成后,可在“核销记录”查看相关验证信息</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verify-no-block layui-hide"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 核销数据展示 -->
|
||||
<script type="text/html" id="verify_html">
|
||||
<div class="verify-info">
|
||||
<div class="verify-info-inner">
|
||||
{{# layui.each(d.item_array, function(index, item){ }}
|
||||
<div class="verify-info-item">
|
||||
<div class="verify-info-img">
|
||||
<img src="{{ ns.img(item.img, 'mid') }}" alt="">
|
||||
</div>
|
||||
<div class="verify-info-inner-item">
|
||||
<p class="verify-info-name">
|
||||
{{ item.name }}
|
||||
</p>
|
||||
{{# layui.each(item.remark_array, function(remark_index, remark_item){ }}
|
||||
<p>
|
||||
{{ remark_item.title }}:<span>{{ remark_item.value }}</span>
|
||||
</p>
|
||||
{{# }); }}
|
||||
</div>
|
||||
</div>
|
||||
{{# }); }}
|
||||
|
||||
</div>
|
||||
<div class="verify-info-desc">
|
||||
{{# layui.each(d.remark_array, function(remark_array_index, remark_array_item){ }}
|
||||
<p class="verify-info-desc-item">
|
||||
{{ remark_array_item.title }}:{{ remark_array_item.value }}
|
||||
</p>
|
||||
{{# }); }}
|
||||
<button type="button" class="layui-btn verify-button" onclick="verify();">验证使用</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var form;
|
||||
var submitting = false;
|
||||
layui.use('form', function () {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
form.on('submit(search)', function(data){
|
||||
var val = data.field;
|
||||
if(submitting) return false;
|
||||
submitting = true;
|
||||
$.ajax({
|
||||
url: '{:addon_url("shop/verify/verifycard")}',
|
||||
data: data.field,
|
||||
dataType: 'json',
|
||||
type: "post",
|
||||
success: function (res) {
|
||||
submitting = false;
|
||||
if(res.code == 0){
|
||||
$(".search-content").addClass("layui-hide");
|
||||
var data = res.data;
|
||||
|
||||
//渲染模板引擎
|
||||
var getTpl = $("#verify_html").html();
|
||||
layui.use(['laytpl','form'], function(){
|
||||
var laytpl = layui.laytpl;
|
||||
laytpl(getTpl).render(data.data, function(html) {
|
||||
$(".verify-no-block").html(html);
|
||||
})
|
||||
});
|
||||
|
||||
$(".verify-no-block").removeClass("layui-hide");
|
||||
}else{
|
||||
$(".verify-no-block").addClass("layui-hide");
|
||||
$(".search-content").removeClass("layui-hide");
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 验证
|
||||
*/
|
||||
var is_submit = true;
|
||||
function verify(){
|
||||
var verify_code = $("input[name='verify_code']").val();
|
||||
if(verify_code == ""){
|
||||
layer.msg("虚拟码不可为空!");
|
||||
return false;
|
||||
}
|
||||
if(!is_submit){
|
||||
return;
|
||||
}
|
||||
is_submit = false;
|
||||
$.ajax({
|
||||
url: '{:addon_url("shop/verify/verify")}',
|
||||
data: {"verify_code" : verify_code},
|
||||
dataType: 'json',
|
||||
type: "post",
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
if(res.code == 0){
|
||||
listenerHash(); // 刷新页面
|
||||
}else{
|
||||
is_submit = true;
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
$(function(){
|
||||
//扫码枪触发操作
|
||||
$(document).keydown(function (event) {
|
||||
if (event.keyCode == 13 && $("#verify_code").val()) {
|
||||
$(".code-searsh").trigger("click");
|
||||
}
|
||||
});
|
||||
})
|
||||
</script>
|
||||
Reference in New Issue
Block a user