初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View 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">&#xe615;</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>

View 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">&#xe615;</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
View 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>

View 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> &nbsp;&nbsp;
<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>&nbsp;</span>
<span>&nbsp;</span>
</p>
</div>
<div class="content">
<p class="title">待核销(虚拟商品)</p>
<p class="money" id="verify_goods_num">0</p>
<p class="bottom-title">
<span>&nbsp;</span>
<span>&nbsp;</span>
</p>
</div>
<div class="content">
<p class="title">待核销(订单自提)</p>
<p class="money" id="pickup_num">0</p>
<p class="bottom-title">
<span>&nbsp;</span>
<span>&nbsp;</span>
</p>
</div>
<div class="content">
<p class="title">待核销(卡项商品)</p>
<p class="money" id="card_goods_num">0</p>
<p class="bottom-title">
<span>&nbsp;</span>
<span>&nbsp;</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">&nbsp;</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
View 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
View 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>

View 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">&#xe615;</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">&#xe63f;</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">&#xe63f;</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">&#xe63f;</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>