初始上传
241
addon/store/shop/view/account/lists.html
Executable file
@@ -0,0 +1,241 @@
|
||||
<style>
|
||||
.layui-card-body .content{width: 33.3%;}
|
||||
.layui-layout-admin .screen{margin-bottom: 15px;}
|
||||
.account-data-sum{padding-left:10px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-card panel-content card-common card-brief">
|
||||
<div class="layui-card-header simple">
|
||||
<span class="card-title">账户概况</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
|
||||
<div class="content">
|
||||
<p class="title">待结算(元)</p>
|
||||
<p class="money">{$stat.total_account}</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">已结算(元)</p>
|
||||
<p class="money">{$stat.total_account_withdraw}</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">结算中(元)</p>
|
||||
<p class="money">{$stat.total_account_apply}</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">
|
||||
<select name="store_id" lay-filter="store_id">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$store_list" item="store"}
|
||||
<option value="{$store['store_id']}">{$store['store_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">来源方式</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="from_type">
|
||||
<option value="">全部</option>
|
||||
{foreach $from_type_list as $from_type_k=> $from_type_v}
|
||||
<option value="{$from_type_k}">{$from_type_v.type_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">发生时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="start_date" id="start_time" placeholder="请输入开始时间" autocomplete="off" readonly>
|
||||
</div>
|
||||
<div class="layui-input-inline split">-</div>
|
||||
<div class="layui-input-inline end-time">
|
||||
<input type="text" class="layui-input" name="end_date" id="end_time" placeholder="请输入结束时间" autocomplete="off" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">备注</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="remark" placeholder="请输入开始时间" autocomplete="off">
|
||||
</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">导出</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="exportList()">导出记录</button>
|
||||
<span class="account-data-sum">账户汇总:<span id="account_data_sum">0.00</span>元</span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="withdraw_list" lay-filter="withdraw_list"></table>
|
||||
|
||||
<script type="text/html" id="status">
|
||||
{{# if(d.status == 0){ }}
|
||||
<div class="layui-elip" style="color: red">
|
||||
{{# }else if(d.status == 1){ }}
|
||||
<div class="layui-elip" style="color: blue">
|
||||
{{# }else if(d.status == 2){ }}
|
||||
<div class="layui-elip" style="color: green">
|
||||
{{# }else if(d.status == -1){ }}
|
||||
<div class="layui-elip" style="color: gray">
|
||||
{{# } }}
|
||||
{{ d.status_name }}</div>
|
||||
</script>
|
||||
|
||||
<!--操作-->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="detail">查看</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table,upload;
|
||||
layui.use(['form', 'laydate','laytpl'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate,
|
||||
currentDate = new Date(),
|
||||
laytpl = layui.laytpl,
|
||||
minDate = "";
|
||||
form.render();
|
||||
|
||||
currentDate.setDate(currentDate.getDate() - 7);
|
||||
|
||||
//开始时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
//结束时间
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
})
|
||||
|
||||
/**
|
||||
* 表格加载
|
||||
*/
|
||||
table = new Table({
|
||||
elem: '#withdraw_list',
|
||||
url: ns.url("store://shop/account/lists"),
|
||||
beforeParseData: function (res){
|
||||
$("#account_data_sum").html(Number(res.data.account_data_sum).toFixed(2));
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
field: 'store_name',
|
||||
title: '门店',
|
||||
width: '12%',
|
||||
unresize: 'false',
|
||||
},{
|
||||
field: 'type_name',
|
||||
title: '来源方式',
|
||||
width: '10%',
|
||||
unresize: 'false',
|
||||
}, {
|
||||
field: 'account_data',
|
||||
title: '记录金额',
|
||||
width: '10%',
|
||||
unresize: 'false',
|
||||
}, {
|
||||
title: '发生时间',
|
||||
unresize: 'false',
|
||||
width: '16%',
|
||||
templet: function(data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
field: 'remark',
|
||||
title: '备注',
|
||||
width: '44%',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
return '<div class="text">'+ data.remark +'</div>'
|
||||
}
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch(obj.event){
|
||||
case 'detail':
|
||||
detail(data);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(export)', function(data){
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
url: ns.url("store://shop/account/addexport"),
|
||||
data: data.field,
|
||||
success: function (res) {
|
||||
console.log(res);
|
||||
}
|
||||
})
|
||||
setTimeout(()=>{
|
||||
window.open(ns.href("store://shop/account/exportlist"));
|
||||
}, 500);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 查看详情
|
||||
*/
|
||||
function detail(data) {
|
||||
switch(data.from_type){
|
||||
case 'order':
|
||||
window.open(ns.href("shop/order/detail",{order_id:data.related_id}));
|
||||
break;
|
||||
case 'refund':
|
||||
window.open(ns.href("shop/orderrefund/detail",{order_goods_id:data.related_id}));
|
||||
break;
|
||||
case 'withdraw':
|
||||
window.open(ns.href("store://shop/withdraw/detail",{withdraw_id:data.related_id}));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function exportList(){
|
||||
window.open(ns.href("store://shop/account/exportlist"));
|
||||
}
|
||||
</script>
|
||||
316
addon/store/shop/view/config/index.html
Executable file
@@ -0,0 +1,316 @@
|
||||
<style>
|
||||
.layui-form-label{width: 160px;}
|
||||
.layui-form-label + .layui-input-block{margin-left: 160px;}
|
||||
.word-aux{margin-left: 160px;}
|
||||
.form-row{margin-left: 160px;}
|
||||
.confirm-popup.prompt-block span{height:18px;}
|
||||
.confirm-popup.prompt-block .prompt {display: inline-block;width: auto;margin-left: 5px;}
|
||||
.confirm-popup.prompt-block .prompt-box{width: 230px;left: 42px;}
|
||||
.confirm-popup.prompt-block .prompt img{width: 200px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">运营设置</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店运营模式:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="store_business" value="shop" title="平台运营模式" {if $business_config.store_business eq 'shop'}checked{/if} />
|
||||
<input type="radio" name="store_business" value="store" title="连锁门店模式" {if $business_config.store_business eq 'store'}checked{/if} />
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>平台运营模式:展示平台整体页面,商品全部展示,考虑门店库存</p>
|
||||
<p>连锁门店模式:只会展示门店独立页面,商品查询只需查询对应门店</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店切换:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_allow_change" value="1" title="允许用户切换门店" {if $business_config.is_allow_change eq 1}checked{/if} />
|
||||
<input type="radio" name="is_allow_change" value="0" title="禁止用户切换门店" {if $business_config.is_allow_change eq 0}checked{/if} />
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">禁止切换门店,会锁定距离用户最近的门店,定位失败进入默认总店</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店确认弹窗:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="confirm_popup_control" value="1" title="开启" {if $business_config.confirm_popup_control eq 1}checked{/if} />
|
||||
<input type="radio" name="confirm_popup_control" value="0" title="关闭" {if $business_config.confirm_popup_control eq 0}checked{/if} />
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux prompt-block confirm-popup">
|
||||
<span>开启后,每次进入门店时弹窗提示当前门店信息</span>
|
||||
<div class="prompt">
|
||||
<span class="text-color">示例</span>
|
||||
<div class="growth-box reason-box reason-growth prompt-box">
|
||||
<div class="prompt-con">
|
||||
<img src="STORE_IMG/store_confirm_popup_preview.png">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="display: none;">
|
||||
<label class="layui-form-label">功能设置:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="store_auth" lay-filter="store_auth" value="config" title="是否允许门店设置" lay-skin="primary" {if strpos($business_config['store_auth'], 'config') !== false}checked{/if} />
|
||||
<input type="checkbox" name="store_auth" lay-filter="store_auth" value="balance" title="是否允许调整会员余额" lay-skin="primary" {if strpos($business_config['store_auth'], 'balance') !== false}checked{/if} />
|
||||
<input type="checkbox" name="store_auth" lay-filter="store_auth" value="point" title="是否允许调整会员积分" lay-skin="primary" {if strpos($business_config['store_auth'], 'point') !== false}checked{/if} />
|
||||
<input type="checkbox" name="store_auth" lay-filter="store_auth" value="coupon" title="是否允许发放优惠券" lay-skin="primary" {if strpos($business_config['store_auth'], 'coupon') !== false}checked{/if} />
|
||||
<input type="checkbox" name="store_auth" lay-filter="store_auth" value="adjust" title="是否允许会员改价" lay-skin="primary" {if strpos($business_config['store_auth'], 'adjust') !== false}checked{/if} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">结算设置</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否需要结算:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_settlement" lay-filter="is_settlement" value="0" title="总部直营,无需结算" {if $withdraw_config.is_settlement eq 0}checked{/if} />
|
||||
<input type="radio" name="is_settlement" lay-filter="is_settlement" value="1" title="总部收款,周期性自动结算" {if $withdraw_config.is_settlement eq 1}checked{/if} />
|
||||
<input type="radio" name="is_settlement" lay-filter="is_settlement" value="2" title="总部收款,门店申请结算" {if $withdraw_config.period_type eq 4}checked{/if} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item period-type layui-hide">
|
||||
<label class="layui-form-label">结算周期:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="period_type" value="1" title="每日结算" {if $withdraw_config.period_type eq 1 || $withdraw_config.period_type eq 4}checked{/if} />
|
||||
<input type="radio" name="period_type" value="2" title="每周结算" {if $withdraw_config.period_type eq 2}checked{/if} />
|
||||
<input type="radio" name="period_type" value="3" title="每月结算" {if $withdraw_config.period_type eq 3}checked{/if} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item settlement-rate">
|
||||
<label class="layui-form-label">门店抽成比率:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="settlement_rate" lay-verify="positivEinteger" placeholder="0" class="layui-input len-short" autocomplete="off" value="{$withdraw_config.settlement_rate}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">%</div>
|
||||
</div>
|
||||
<div class="word-aux">门店抽成比率需是0-100,且保存两位小数</div>
|
||||
</div>
|
||||
<div class="layui-form-item is-withdraw">
|
||||
<label class="layui-form-label">是否提现:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="is_withdraw" value="1" lay-filter="third_party" lay-skin="switch" {if $withdraw_config.is_withdraw eq 1}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{notempty name="$pay_type_list"}
|
||||
<div class="layui-form-item settlement-pay-type">
|
||||
<label class="layui-form-label">结算付款控制:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
{foreach name="$pay_type_list" item="vo" key="k"}
|
||||
<input type="checkbox" name="settlement_pay_type" value="{$k}" title="{$vo}" lay-skin="primary" {if strpos($withdraw_config['settlement_pay_type'], $k) !== false}checked{/if} />
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/notempty}
|
||||
<div class="layui-form-item settlement-cost">
|
||||
<label class="layui-form-label">结算成本控制:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="settlement_cost" lay-filter="settlement_cost" value="coupon" title="结算优惠券" lay-skin="primary" {if strpos($withdraw_config['settlement_cost'], 'coupon') !== false}checked{/if} />
|
||||
<input type="checkbox" name="settlement_cost" lay-filter="settlement_cost" value="point" title="结算积分抵扣" lay-skin="primary" {if strpos($withdraw_config['settlement_cost'], 'point') !== false}checked{/if} />
|
||||
<input type="checkbox" name="settlement_cost" lay-filter="settlement_cost" value="fenxiao_commission" title="结算扣除佣金" lay-skin="primary" {if strpos($withdraw_config['settlement_cost'], 'fenxiao_commission') !== false}checked{/if} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item is-audit">
|
||||
<label class="layui-form-label">是否提现审核:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="is_audit" value="1" lay-skin="switch" {if $withdraw_config.is_audit eq 1}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item is-audit">
|
||||
<label class="layui-form-label">是否自动转账:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="is_auto_transfer" value="1" lay-skin="switch" {if $withdraw_config.is_auto_transfer eq 1}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">只有微信和支付宝支付支持自动转账</div>
|
||||
</div>
|
||||
<div class="layui-form-item withdraw-least">
|
||||
<label class="layui-form-label">最低提现金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="withdraw_least" lay-verify="withdrawLeast" placeholder="0" class="layui-input len-short" autocomplete="off" value="{$withdraw_config.withdraw_least}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">最低提现金额必须大于0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form,
|
||||
repeat_flag = false, //防重复标识
|
||||
submitIsSettlement;
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
initFn();
|
||||
|
||||
// 是否出现结算周期
|
||||
form.on('radio(is_settlement)', function(data){
|
||||
submitIsSettlement = data.value;
|
||||
if(parseFloat(data.value) == 0){
|
||||
$(".settlement-rate").addClass("layui-hide");
|
||||
$(".period-type").addClass("layui-hide");
|
||||
$('.settlement-pay-type').addClass("layui-hide");
|
||||
$(".settlement-cost").addClass("layui-hide");
|
||||
$(".is-withdraw").addClass("layui-hide");
|
||||
$(".withdraw-least").addClass("layui-hide");
|
||||
$(".is-audit").addClass("layui-hide");
|
||||
}else if(parseFloat(data.value) == 1){
|
||||
$(".is-withdraw").addClass("layui-hide");
|
||||
$(".settlement-rate").removeClass("layui-hide");
|
||||
$(".period-type").removeClass("layui-hide");
|
||||
$('.settlement-pay-type').removeClass("layui-hide");
|
||||
$(".settlement-cost").removeClass("layui-hide");
|
||||
$(".withdraw-least").addClass("layui-hide");
|
||||
$(".is-audit").removeClass("layui-hide");
|
||||
}else if(parseFloat(data.value) == 2){
|
||||
$('.settlement-pay-type').removeClass("layui-hide");
|
||||
$(".settlement-cost").removeClass("layui-hide");
|
||||
$(".is-withdraw").removeClass("layui-hide");
|
||||
$(".settlement-rate").removeClass("layui-hide");
|
||||
$(".period-type").addClass("layui-hide");
|
||||
$(".withdraw-least").removeClass("layui-hide");
|
||||
$(".is-audit").removeClass("layui-hide");
|
||||
}
|
||||
});
|
||||
|
||||
// 验证正整数
|
||||
form.verify({
|
||||
positivEinteger: function(value) {
|
||||
if (parseFloat(value) < 0 || parseFloat(value) > 100) {
|
||||
return '请输入0-100之间的数';
|
||||
}
|
||||
if (value.split(".").length > 1) {
|
||||
let len = value.split(".")[1].length;
|
||||
if (len > 2) {
|
||||
return '门店抽成比率最多两位小数';
|
||||
}
|
||||
}
|
||||
},
|
||||
withdrawLeast: function(value){
|
||||
if(value <= 0){
|
||||
return '最低提现金额必须大于0';
|
||||
}
|
||||
if (value.split(".").length > 1) {
|
||||
let len = value.split(".")[1].length;
|
||||
if (len > 2) {
|
||||
return '最低提现金额最多保留两位小数';
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
let field = data.field;
|
||||
|
||||
if($('input[name="settlement_pay_type"]').length) {
|
||||
field.settlement_pay_type = [];
|
||||
$('input[name="settlement_pay_type"]:checked').each(function () {
|
||||
field.settlement_pay_type.push($(this).val());
|
||||
});
|
||||
field.settlement_pay_type = field.settlement_pay_type.toString();
|
||||
}
|
||||
|
||||
field.settlement_cost = [];
|
||||
$('input[name="settlement_cost"]:checked').each(function () {
|
||||
field.settlement_cost.push($(this).val());
|
||||
});
|
||||
field.settlement_cost = field.settlement_cost.toString();
|
||||
|
||||
field.store_auth = [];
|
||||
$('input[name="store_auth"]:checked').each(function () {
|
||||
field.store_auth.push($(this).val());
|
||||
});
|
||||
field.store_auth = field.store_auth.toString();
|
||||
|
||||
if(submitIsSettlement == 2){
|
||||
field.is_settlement = 1;
|
||||
field.period_type = 4;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("store://shop/config/index"),
|
||||
data: field,
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function initFn(){
|
||||
// 是否展示结算周期
|
||||
var isSettlement = '{$withdraw_config.is_settlement}';
|
||||
var periodType = '{$withdraw_config.period_type}';
|
||||
|
||||
if(parseFloat(isSettlement) == 0){
|
||||
$(".settlement-rate").addClass("layui-hide");
|
||||
$(".period-type").addClass("layui-hide");
|
||||
$('.settlement-pay-type').addClass("layui-hide");
|
||||
$(".settlement-cost").addClass("layui-hide");
|
||||
$(".is-withdraw").addClass("layui-hide");
|
||||
}else if(parseFloat(isSettlement) == 1){
|
||||
$(".is-withdraw").addClass("layui-hide");
|
||||
$(".settlement-rate").removeClass("layui-hide");
|
||||
$(".period-type").removeClass("layui-hide");
|
||||
$('.settlement-pay-type').removeClass("layui-hide");
|
||||
$(".settlement-cost").removeClass("layui-hide");
|
||||
$(".is-audit").removeClass("layui-hide");
|
||||
$(".withdraw-least").addClass("layui-hide");
|
||||
}
|
||||
|
||||
if(parseFloat(periodType) == 4){
|
||||
submitIsSettlement = 2;
|
||||
$('.settlement-pay-type').removeClass("layui-hide");
|
||||
$(".settlement-cost").removeClass("layui-hide");
|
||||
$(".is-withdraw").removeClass("layui-hide");
|
||||
$(".settlement-rate").removeClass("layui-hide");
|
||||
$(".period-type").addClass("layui-hide");
|
||||
$(".is-audit").removeClass("layui-hide");
|
||||
$(".withdraw-least").removeClass("layui-hide");
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
BIN
addon/store/shop/view/public/img/shop_icon/settlement.png
Executable file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
addon/store/shop/view/public/img/shop_icon/settlement_new.png
Executable file
|
After Width: | Height: | Size: 663 B |
BIN
addon/store/shop/view/public/img/shop_icon/settlement_select.png
Executable file
|
After Width: | Height: | Size: 557 B |
BIN
addon/store/shop/view/public/img/store_confirm_popup_preview.png
Executable file
|
After Width: | Height: | Size: 376 KiB |
BIN
addon/store/shop/view/public/img/template/baozhang.png
Executable file
|
After Width: | Height: | Size: 23 KiB |
BIN
addon/store/shop/view/public/img/template/bg.png
Executable file
|
After Width: | Height: | Size: 233 KiB |
BIN
addon/store/shop/view/public/img/template/gg_1.png
Executable file
|
After Width: | Height: | Size: 350 KiB |
BIN
addon/store/shop/view/public/img/template/gg_2.png
Executable file
|
After Width: | Height: | Size: 75 KiB |
BIN
addon/store/shop/view/public/img/template/nav_1.png
Executable file
|
After Width: | Height: | Size: 21 KiB |
BIN
addon/store/shop/view/public/img/template/nav_10.png
Executable file
|
After Width: | Height: | Size: 18 KiB |
BIN
addon/store/shop/view/public/img/template/nav_2.png
Executable file
|
After Width: | Height: | Size: 18 KiB |
BIN
addon/store/shop/view/public/img/template/nav_3.png
Executable file
|
After Width: | Height: | Size: 19 KiB |
BIN
addon/store/shop/view/public/img/template/nav_4.png
Executable file
|
After Width: | Height: | Size: 18 KiB |
BIN
addon/store/shop/view/public/img/template/nav_5.png
Executable file
|
After Width: | Height: | Size: 17 KiB |
BIN
addon/store/shop/view/public/img/template/nav_6.png
Executable file
|
After Width: | Height: | Size: 16 KiB |
BIN
addon/store/shop/view/public/img/template/nav_7.png
Executable file
|
After Width: | Height: | Size: 21 KiB |
BIN
addon/store/shop/view/public/img/template/nav_8.png
Executable file
|
After Width: | Height: | Size: 19 KiB |
BIN
addon/store/shop/view/public/img/template/nav_9.png
Executable file
|
After Width: | Height: | Size: 19 KiB |
BIN
addon/store/shop/view/public/img/template/new.png
Executable file
|
After Width: | Height: | Size: 924 B |
BIN
addon/store/shop/view/public/img/template/notice.png
Executable file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
addon/store/shop/view/public/img/template/point.png
Executable file
|
After Width: | Height: | Size: 109 KiB |
BIN
addon/store/shop/view/public/img/template/rubik_cube_1.png
Executable file
|
After Width: | Height: | Size: 14 KiB |
BIN
addon/store/shop/view/public/img/template/rubik_cube_2.png
Executable file
|
After Width: | Height: | Size: 14 KiB |
BIN
addon/store/shop/view/public/img/template/rubik_cube_3.png
Executable file
|
After Width: | Height: | Size: 14 KiB |
BIN
addon/store/shop/view/public/img/template/rubik_cube_4.png
Executable file
|
After Width: | Height: | Size: 14 KiB |
BIN
addon/store/shop/view/public/img/template/rubik_cube_5.png
Executable file
|
After Width: | Height: | Size: 77 KiB |
BIN
addon/store/shop/view/public/img/template/rubik_cube_6.png
Executable file
|
After Width: | Height: | Size: 57 KiB |
BIN
addon/store/shop/view/public/img/template/rubik_cube_7.png
Executable file
|
After Width: | Height: | Size: 44 KiB |
BIN
addon/store/shop/view/public/img/template/search.png
Executable file
|
After Width: | Height: | Size: 1.9 KiB |
83
addon/store/shop/view/settlement/detail.html
Executable file
@@ -0,0 +1,83 @@
|
||||
<style>
|
||||
#detail_list {
|
||||
margin-top: 15px;
|
||||
}
|
||||
</style>
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>账期时间:{if $info.start_time > 0}{:date('Y-m-d H:i:s', $info.start_time)} {else/} {:date('Y-m-d H:i:s', $store_info['create_time'])} {/if} 至 {:date('Y-m-d H:i:s', $info.end_time)}</li>
|
||||
<li>线上结算金额 = 线上付款金额(<span style="color: red">¥{$info.order_money}</span>)</li>
|
||||
<li>线下付款金额<span style="color: red">¥{$info.offline_order_money}</span></li>
|
||||
<li>线下退款金额<span style="color: red">¥{$info.offline_refund_money}</span></li>
|
||||
<li>门店抽成金额<span style="color: red">¥{$info.store_commission}</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="detail_list" lay-filter="detail_list"></table>
|
||||
<script>
|
||||
layui.use(['laydate','form'], function () {
|
||||
var form = layui.form;
|
||||
form.render();
|
||||
var table = new Table({
|
||||
elem: '#detail_list',
|
||||
url: ns.url("store://shop/settlement/detail", {'settlement_id': {$info.id}}),
|
||||
where:{id:"{$info.id}"},
|
||||
cols: [
|
||||
[{
|
||||
field: 'order_no',
|
||||
title: '订单编号',
|
||||
unresize: 'false',
|
||||
width: '18%'
|
||||
}, {
|
||||
field: 'pay_type_name',
|
||||
title: '支付方式',
|
||||
unresize: 'false',
|
||||
width: '12%'
|
||||
}, {
|
||||
field:'order_money',
|
||||
title: '订单销售额(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
templet: function (res){
|
||||
return '¥'+res.order_money;
|
||||
},
|
||||
width: '12%'
|
||||
}, {
|
||||
field:'refund_money',
|
||||
title: '订单退款(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
templet: function (res){
|
||||
return '¥'+res.refund_money;
|
||||
},
|
||||
width: '14%'
|
||||
}, {
|
||||
title: '门店抽成(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
templet: function (res){
|
||||
return '¥'+res.store_commission;
|
||||
},
|
||||
width: '12%'
|
||||
}, {
|
||||
unresize: 'false',
|
||||
width: '12%'
|
||||
}, {
|
||||
field: 'finish_time',
|
||||
title: '订单完成时间',
|
||||
unresize: 'false',
|
||||
templet: function (res){
|
||||
if(res.finish_time == 0){
|
||||
return '--';
|
||||
}else{
|
||||
return ns.time_to_date(res.finish_time)
|
||||
}
|
||||
},
|
||||
width: '20%'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
227
addon/store/shop/view/settlement/index.html
Executable file
@@ -0,0 +1,227 @@
|
||||
<style>
|
||||
.calendar{text-align: center;line-height: 34px;}
|
||||
.layui-layout-admin .single-filter-box{padding-bottom: 0;}
|
||||
</style>
|
||||
<!-- 筛选面板 -->
|
||||
<div class="single-filter-box">
|
||||
<div class="layui-form">
|
||||
<div class="layui-inline">
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline"></div>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<select name="store_id" lay-filter="store_id">
|
||||
<option value="">请选择门店</option>
|
||||
{foreach name="$store_list" item="store"}
|
||||
<option value="{$store['store_id']}">{$store['store_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="start_time" id="start_time" placeholder="结算开始时间" class="layui-input" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-input-inline end-time">
|
||||
<input type="text" name="end_time" id="end_time" placeholder="结算结束时间" class="layui-input" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="search">搜索</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab">
|
||||
|
||||
<div class="layui-tab-content">
|
||||
<table id="account_list" lay-filter="account_list"></table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{# if(d.is_settlement == 0){ }}
|
||||
<a class="layui-btn" lay-event="settlement">结算</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="detail">详情</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="shop_money">
|
||||
<span style="color: red;">¥{{d.shop_money}}</span>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="reviewReason">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label mid">结算备注:</label>
|
||||
<div class="layui-input-block len-mid">
|
||||
<textarea name="remark" placeholder="请输入内容" class="layui-textarea" maxlength="150"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<input name="settlement_id" value="{{d.id}}" type="hidden"/>
|
||||
<div class="form-row mid">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">结算</button>
|
||||
<button onclick="cancel()" class="layui-btn layui-btn-primary">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var start_time,end_time,
|
||||
repeat_flag = false;
|
||||
layui.use(['laydate','form','laytpl'], function () {
|
||||
var laydate = layui.laydate,
|
||||
laytpl = layui.laytpl,
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
//开始时间
|
||||
laydate.render({
|
||||
elem: '#start_time' //指定元素
|
||||
});
|
||||
//结束时间
|
||||
laydate.render({
|
||||
elem: '#end_time' //指定元素
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
data.field.start_time = start_time;
|
||||
data.field.end_time = end_time;
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
function settlement(data) {
|
||||
laytpl($("#reviewReason").html()).render(data, function(html){
|
||||
layer.open({
|
||||
type: 1,
|
||||
title:'结算',
|
||||
content: html,
|
||||
area: ['500px']
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
form.on('submit(save)', function (data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("store://shop/settlement/settlement"),
|
||||
data: data.field,
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
listenerHash(); // 刷新页面
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var table = new Table({
|
||||
elem: '#account_list',
|
||||
url: ns.url("store://shop/settlement/index"),
|
||||
cols: [
|
||||
[{
|
||||
field:'settlement_no',
|
||||
title: '账单编号',
|
||||
unresize: 'false',
|
||||
width:'16%',
|
||||
},{
|
||||
field: 'store_name',
|
||||
title: '门店',
|
||||
width:'10%',
|
||||
}, {
|
||||
title: '订单总额',
|
||||
unresize: 'false',
|
||||
width:'8%',
|
||||
align: 'right',
|
||||
templet: function (res){
|
||||
return '¥' + (res.order_money*1 + res.offline_order_money*1 - res.refund_shop_money*1- res.offline_refund_money*1);
|
||||
}
|
||||
}, {
|
||||
title: '线上结算金额',
|
||||
unresize: 'false',
|
||||
width:'9%',
|
||||
align: 'right',
|
||||
templet: function (res) {
|
||||
return '<span style="color: red;">¥'+ (res.order_money*1 - res.refund_shop_money*1 -res.commission*1) + '</span>';
|
||||
}
|
||||
}, {
|
||||
title: '线下结算金额',
|
||||
unresize: 'false',
|
||||
width:'9%',
|
||||
align: 'right',
|
||||
templet: function (res){
|
||||
return '<span style="color: red;">¥'+ (res.offline_order_money*1 - res.offline_refund_money*1) + '</span>';
|
||||
}
|
||||
},{
|
||||
title: '门店抽成金额',
|
||||
unresize: 'false',
|
||||
width:'10%',
|
||||
align: 'right',
|
||||
templet: function (res){
|
||||
return '<span style="color: red;">¥'+ (res.store_commission) + '</span>';
|
||||
}
|
||||
}, {
|
||||
title: '结算开始时间',
|
||||
unresize: 'false',
|
||||
width:'14%',
|
||||
templet: function (res){
|
||||
if(res.start_time == 0){
|
||||
return '--';
|
||||
}else{
|
||||
return ns.time_to_date(res.start_time)
|
||||
}
|
||||
}
|
||||
}, {
|
||||
title: '结算结束时间',
|
||||
unresize: 'false',
|
||||
width:'14%',
|
||||
templet: function (res){
|
||||
if(res.end_time == 0){
|
||||
return '--';
|
||||
}else{
|
||||
return ns.time_to_date(res.end_time)
|
||||
}
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'settlement': //编辑
|
||||
settlement(data);
|
||||
break;
|
||||
case 'detail':
|
||||
location.hash = ns.hash("store://shop/settlement/detail",{'settlement_id': data.id});
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function cancel(){
|
||||
layer.closeAll()
|
||||
}
|
||||
</script>
|
||||
413
addon/store/shop/view/stat/store.html
Executable file
@@ -0,0 +1,413 @@
|
||||
<style>
|
||||
/*时间选择*/
|
||||
.time-screen .screen{display: flex}
|
||||
.time-screen .screen .item {height: 32px;line-height: 32px;padding: 0 20px;border: 1px solid #D2D2D2;cursor: pointer;border-right: none;border-left: none;position: relative}
|
||||
.time-screen .screen .item:after{content: '';position: absolute;top: -1px;left: 0;bottom: -1px;right: -1px;border-right: 1px solid #D2D2D2;border-left: 1px solid #D2D2D2;}
|
||||
.time-screen .screen .selected,.time-screen .item:hover{color: #fff;background: var(--base-color);border-color: var(--base-color) }
|
||||
.time-screen .screen .selected:after, .time-screen .item:hover:after {border-right: 1px solid var(--base-color);border-left: 1px solid var(--base-color);}
|
||||
|
||||
.data-wrap {display: flex;flex-wrap: wrap; margin-top: 15px;}
|
||||
.data-wrap .data-item {display: flex;min-width: 250px;margin-bottom: 15px;}
|
||||
.data-wrap .data-item .box {flex: 1;margin-right: 15px;border: 1px solid #eee;box-sizing: border-box;padding: 15px;cursor: pointer}
|
||||
.data-wrap .data-item:last-child .box {margin-right: 0}
|
||||
.data-wrap .data-item .value {font-size: 25px;font-weight: bolder;line-height: 40px}
|
||||
.data-wrap .data-item .js-prompt-top {color:#C8C9CC;font-size:14px;z-index:999;cursor:pointer;}
|
||||
.data-wrap .data-item .info {font-size: 12px;color: #999;}
|
||||
.data-wrap .info .iconfont {font-size: 12px;}
|
||||
.data-wrap .data-item .text-color-green {color: #00A717}
|
||||
.data-wrap .data-item .text-color-red {color: #ff0000}
|
||||
.data-wrap .data-item.selected .box {border-color: var(--base-color);color: var(--base-color);}
|
||||
.statistics-wrap {position: relative}
|
||||
.statistics-wrap .loading {background: rgba(255,255,255,.5);position: absolute;left: 0; top: 0;text-align: center;width: 100%;height: 100%;box-sizing: border-box;padding-top: 100px;display: none}
|
||||
.statistics-wrap .loading i {font-size: 25px}
|
||||
|
||||
.layui-layer-content .layui-form-label {width: 100px}
|
||||
.echart {margin-top: 15px}
|
||||
.echart-wrap {margin-top: 30px;display: flex;}
|
||||
.echart-wrap .main {flex: 1;height: 400px}
|
||||
.echart-wrap .main:nth-child(2) {margin-left: 15px}
|
||||
.date-input{width: 300px}
|
||||
.time-screen{display: flex;justify-content: space-between; }
|
||||
</style>
|
||||
|
||||
<div class="main-wrap">
|
||||
<div class="time-screen statistics">
|
||||
<div class="screen">
|
||||
<div class="item selected" date-type="today">今日</div>
|
||||
<div class="item" date-type="yesterday">昨日</div>
|
||||
<div class="item" date-type="seven">7日内</div>
|
||||
<div class="item" date-type="thirty">30日内</div>
|
||||
<div class="item" date-type="custom">自定义</div>
|
||||
</div>
|
||||
<div class="layui-form">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">门店</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="store_id" lay-filter="store_id">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$store_list" item="store_vo"}
|
||||
<option value="{$store_vo['store_id']}">{$store_vo['store_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="statistics-wrap">
|
||||
<div class="data-wrap">
|
||||
<div class="data-item selected" data-value="expected_earnings_total_money">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">预计收入(元)</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="money">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="billing_money">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">开单金额数(元)</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="money">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="billing_count">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">开单数量</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="num">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="buycard_money">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">办卡金额数(元)</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="money">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="buycard_count">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">办卡数</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="num">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="recharge_money">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">会员充值金额(元)</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="money">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="recharge_count">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">会员充值数量</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="num">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="refund_money">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">会员退款金额(元)</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="money">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="refund_count">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">会员退款数量</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="num">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="order_member_count">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">门店下单会员数</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="num">0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-item" data-value="balance_money">
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span class="title-text">会员余额消费金额</span>
|
||||
<!-- <span class="iconfont iconwenhao js-prompt-top" data-tips="统计时间内,新注册会员的数量"></span> -->
|
||||
</div>
|
||||
<div class="value" data-type="money">0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="loading">
|
||||
<i class="common-loading-layer layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="echart-wrap">
|
||||
<div class="main" id="main"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="custom-box">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">选择时间:</label>
|
||||
|
||||
<div class="layui-inline layui-inline-margin" id="time_fission">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="date" name="date" autocomplete="off" class="layui-input date-input" placeholder="请选择日期">
|
||||
<i class="iconfont iconriqi"></i>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="start_time" value="">
|
||||
<input type="hidden" name="end_time" value="">
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script src="SHOP_JS/echarts.min.js"></script>
|
||||
<script>
|
||||
var store_id = "",form;
|
||||
|
||||
initFn();
|
||||
function initFn(){
|
||||
// 选择门店
|
||||
layui.use('form', function () {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
form.on('select(store_id)', function(data){
|
||||
store_id = data.value;
|
||||
let type = $('.time-screen.statistics .item.selected').attr("date-type");
|
||||
cutTimeTemp(type);
|
||||
});
|
||||
});
|
||||
|
||||
// 切换时间
|
||||
$('.time-screen.statistics .item').click(function () {
|
||||
var type = $(this).attr('date-type');
|
||||
if (type != 'custom') $(this).addClass('selected').siblings().removeClass('selected');
|
||||
cutTimeTemp(type);
|
||||
});
|
||||
|
||||
getShopStatData({}, 'hour');
|
||||
getShopStatistics({});
|
||||
|
||||
// 切换数据模块
|
||||
$('.statistics-wrap .data-item').click(function () {
|
||||
if ($(this).hasClass('selected')) return;
|
||||
$('.statistics-wrap .data-item').removeClass('selected');
|
||||
$(this).addClass('selected');
|
||||
fetchEchart();
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择模块
|
||||
* */
|
||||
function cutTimeTemp(type){
|
||||
var self = this;
|
||||
switch (type) {
|
||||
case 'today':
|
||||
var time = {
|
||||
start_time: (new Date('{$today} 00:00:00')).getTime() / 1000,
|
||||
end_time: (new Date('{$today} 23:59:59')).getTime() / 1000,
|
||||
store_id
|
||||
}
|
||||
getShopStatistics(time);
|
||||
getShopStatData(time, 'hour');
|
||||
break;
|
||||
case 'yesterday':
|
||||
var time = {
|
||||
start_time: (new Date('{$yesterday} 00:00:00')).getTime() / 1000,
|
||||
end_time: (new Date('{$yesterday} 23:59:59')).getTime() / 1000,
|
||||
store_id
|
||||
}
|
||||
getShopStatistics(time);
|
||||
getShopStatData(time, 'hour');
|
||||
break;
|
||||
case 'seven':
|
||||
var dateObj = new Date(Date.now() - 604800000);
|
||||
var date = dateObj.getFullYear() + '-' + (dateObj.getMonth() + 1) + '-' + dateObj.getDate();
|
||||
var date1 = new Date(Date.now()).getFullYear() + '-' + (new Date(Date.now()).getMonth() + 1) + '-' + new Date(Date.now()).getDate();
|
||||
var data1 = {start_time: new Date(date).getTime() / 1000, end_time:new Date(date1).getTime() / 1000};
|
||||
getShopStatistics(data1);
|
||||
getShopStatData(data1, 'day');
|
||||
break;
|
||||
case 'thirty':
|
||||
var dateObj = new Date(Date.now() - 2592000000);
|
||||
var date = dateObj.getFullYear() + '-' + (dateObj.getMonth() + 1) + '-' + dateObj.getDate();
|
||||
var date1 = new Date(Date.now()).getFullYear() + '-' + (new Date(Date.now()).getMonth() + 1) + '-' + new Date(Date.now()).getDate();
|
||||
let data = {start_time: new Date(date).getTime() / 1000, end_time:new Date(date1).getTime() / 1000,store_id};
|
||||
getShopStatistics(data);
|
||||
getShopStatData(data, 'day');
|
||||
break;
|
||||
case 'custom':
|
||||
var _layer = layer.open({
|
||||
title: '自定义时间选择',
|
||||
type: 1,
|
||||
area: ['480px', '160px'], //自定义文本域宽高
|
||||
btn: ['确认', '取消'],
|
||||
content: $('#custom-box').html(),
|
||||
success: function (layero, index) {
|
||||
new LayDate({
|
||||
elem: '#date',
|
||||
type: 'datetime',
|
||||
rangeId:['start_time','end_time'],
|
||||
max: '{:date("Y-m-d")}',
|
||||
value:[],
|
||||
done: function(value, date, endDate){
|
||||
var time_arr = value.split(' - ');
|
||||
var start_time = time_arr[0];
|
||||
var end_time = time_arr[1];
|
||||
$('input[name="start_time"]').val(time_arr[0]);
|
||||
$('input[name="end_time"]').val(time_arr[1]);
|
||||
}
|
||||
});
|
||||
},
|
||||
yes: function () {
|
||||
var start_time = $('input[name="start_time"]').val();
|
||||
var end_time = $('input[name="end_time"]').val();
|
||||
if (start_time == ''){
|
||||
layer.msg('请选择时间');
|
||||
return;
|
||||
}
|
||||
var time = {
|
||||
start_time: (new Date(start_time)).getTime() / 1000,
|
||||
end_time: (new Date(end_time)).getTime() / 1000
|
||||
};
|
||||
getShopStatistics(time);
|
||||
getShopStatData(time, 'day');
|
||||
$(self).addClass('selected').siblings().removeClass('selected');
|
||||
layer.close(_layer);
|
||||
}
|
||||
})
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取统计数据
|
||||
* */
|
||||
function getShopStatistics(data) {
|
||||
$('.statistics-wrap .loading').show();
|
||||
$.ajax({
|
||||
dataType: "JSON",
|
||||
type: "POST",
|
||||
data: data,
|
||||
url: ns.url("store://shop/stat/statTotal"),
|
||||
success: function(res){
|
||||
$('.statistics-wrap .loading').hide();
|
||||
if (res.code == 0) {
|
||||
Object.keys(res.data).forEach(function (key) {
|
||||
var type = $('[data-value="'+ key +'"] .value').attr('data-type');
|
||||
var value = (type == 'money' ? moneyFormat(res.data[key]) : parseInt(res.data[key])) || 0;
|
||||
$('[data-value="'+ key +'"] .value').text(value);
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取趋势数据
|
||||
* */
|
||||
var statData = [];
|
||||
function getShopStatData(data, type) {
|
||||
$.ajax({
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
url: type == 'hour' ? ns.url("store://shop/stat/hourStatData") : ns.url("store://shop/stat/dayStatData"),
|
||||
data: data,
|
||||
success: function(res) {
|
||||
statData = res.data;
|
||||
fetchEchart();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 渲染echart图表
|
||||
*/
|
||||
// 图表
|
||||
if($('#main').length) {
|
||||
var baseColor = getComputedStyle(document.documentElement).getPropertyValue('--base-color');
|
||||
var myChart = echarts.init(document.getElementById('main'));
|
||||
var option = {
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
legend: {
|
||||
data: ['新增商品数'],
|
||||
textStyle: {
|
||||
fontSize: 14,
|
||||
color: "#000"
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: '4%',
|
||||
right: '4%'
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
boundaryGap: false,
|
||||
data: []
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
axisLabel: {
|
||||
formatter: '{value} '
|
||||
},
|
||||
splitLine: {
|
||||
show: false
|
||||
},
|
||||
},
|
||||
color: [baseColor],
|
||||
series: [
|
||||
{
|
||||
name: '新增商品数',
|
||||
type: 'line',
|
||||
smooth: true,
|
||||
data: [],
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
||||
// 图表函数
|
||||
function fetchEchart() {
|
||||
var key = $('.statistics-wrap .data-item.selected').attr('data-value');
|
||||
option.xAxis.data = statData.time;
|
||||
option.legend.data[0] = $('.statistics-wrap .data-item.selected .title-text').text();
|
||||
option.series[0].name = $('.statistics-wrap .data-item.selected .title-text').text();
|
||||
option.series[0].data = statData[key];
|
||||
myChart.setOption(option);
|
||||
}
|
||||
</script>
|
||||
680
addon/store/shop/view/store/add_store.html
Executable file
@@ -0,0 +1,680 @@
|
||||
<style>
|
||||
#container{ width: 650px; height: 500px; }
|
||||
#container > div {z-index: 500!important}
|
||||
.empty-address{ display: none; }
|
||||
.address-content {display: inline-block;vertical-align: top;}
|
||||
.empty-address-text{font-size: 14px;color: #f43530;height: 34px;line-height: 34px;}
|
||||
.empty-address-text a{cursor: pointer;}
|
||||
.upload_img_square {border-radius: 0}
|
||||
.upload-img-block .upload-img-box .preview_img{width: 100%; height: 100%; display: flex; justify-content: center; align-items: center;}
|
||||
.upload-img-block .upload-img-box .preview_img img{max-width: 100%; max-height: 100%;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap" lay-filter="editselffetch">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>{$title}名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="store_name" autocomplete="off" lay-verify="store_name" class="layui-input len-long">
|
||||
</div>
|
||||
<div class="word-aux">{$title}的名称(招牌)</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>{$title}类型:</label>
|
||||
<div class="layui-input-inline len-mid">
|
||||
<select name="store_type" lay-verify="required">
|
||||
<option value="">请选择门店类型</option>
|
||||
{foreach $store_type as $k => $v}
|
||||
<option value="{$v.type}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}Logo:</label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block icon">
|
||||
<div class="upload-img-box logo-image-box hover"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>{$title}Logo在PC及移动端对应页面及列表作为{$title}标志出现。</p>
|
||||
<p>建议图片尺寸:100 * 100像素,图片格式:jpg、png、jpeg。</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}图片:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="js-store-image"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}简介:</label>
|
||||
<div class="layui-input-block">
|
||||
<script id="editor" type="text/plain" class="special-length" style="height:300px;"></script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}电话:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="telphone" autocomplete="off" lay-verify="tel" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if $category_status == 1}
|
||||
<div class="layui-form-item store-category">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店分类:</label>
|
||||
<div class="layui-input-inline len-mid">
|
||||
<select name="category_id" lay-verify="required">
|
||||
{foreach $category_list as $k => $v}
|
||||
<option value="{$v.category_id}" >{$v.category_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item label-list">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店标签:</label>
|
||||
<div class="layui-input-inline len-long">
|
||||
{foreach $label_list as $k => $v}
|
||||
<input type="checkbox" name="label_id" value="{$v.label_id}" title="{$v.label_name}" lay-skin="primary" />
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--自提点地址-->
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>{$title}地址:</label>
|
||||
<div class="layui-input-inline len-mid area-select">
|
||||
<select name="province_id" lay-filter="province_id" lay-verify="province_id">
|
||||
<option value="">请选择省份</option>
|
||||
{foreach $province_list as $k => $v}
|
||||
<option value="{$v.id}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline len-mid area-select">
|
||||
<select name="city_id" lay-filter="city_id" lay-verify="city_id">
|
||||
<option value="">请选择城市</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline len-mid area-select">
|
||||
<select name="district_id" lay-filter="district_id" lay-verify="district_id">
|
||||
<option value="">请选择区/县</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="address" placeholder="请填写{$title}的具体地址" lay-verify="required" autocomplete="off" class="layui-input len-long address-content" value="">
|
||||
<input type = "hidden" name="longitude" lay-verify="required" class="layui-input"/>
|
||||
<input type = "hidden" name="latitude" lay-verify="required" class="layui-input"/>
|
||||
<button class='layui-btn-primary layui-btn' onclick="refreshFrom();">查找地址</button>
|
||||
</div>
|
||||
<div class="word-aux">点击查找地址可在地图上显示输入的地理位置</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">地图定位:</label>
|
||||
{if $tencent_map_key}
|
||||
{if $check_map_key.status == 0}
|
||||
<div class="layui-input-block special-length">
|
||||
<div id="container" class="selffetch-map"></div>
|
||||
</div>
|
||||
{else/}
|
||||
<div class="empty-local-map">
|
||||
<div class="word-aux empty-address-text">{$check_map_key.message}。<a href="{:href_url('shop/config/map')}" class="text-color">重新配置</a></div>
|
||||
</div>
|
||||
{/if}
|
||||
{else/}
|
||||
<div class="empty-local-map">
|
||||
<div class="word-aux empty-address-text">腾讯地图尚未配置,无法定位地址。<a href="{:href_url('shop/config/map')}" class="text-color">点击配置</a></div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="word-aux empty-address">请选择地理位置!在地图上点击得到的地理位置会自动填入到对应的输入框中</div>
|
||||
</div>
|
||||
|
||||
{if $is_exit == 1}
|
||||
<div class="layui-form-item layui-hide">
|
||||
<label class="layui-form-label">同城配送:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_o2o" value="1" lay-skin="switch">
|
||||
</div>
|
||||
<div class="word-aux ">开启同城配送需要门店设置配送费用以及配送员</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-hide">
|
||||
<label class="layui-form-label">门店自提:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_pickup" value="1" lay-skin="switch" checked lay-filter="pickup">
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item time-view layui-hide">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">自提日期:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="time_type" value="0" title="每天" lay-filter="time_type" checked>
|
||||
<input type="radio" name="time_type" value="1" title="自定义" lay-filter="time_type">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="time-view layui-hide">
|
||||
<div class="layui-form-item time-type-view" lay-verify="time_week">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" value="1" class='time-week' name="time_week[]" title="周一" lay-skin="primary">
|
||||
<input type="checkbox" value="2" class='time-week' name="time_week[]" title="周二" lay-skin="primary">
|
||||
<input type="checkbox" value="3" class='time-week' name="time_week[]" title="周三" lay-skin="primary">
|
||||
<input type="checkbox" value="4" class='time-week' name="time_week[]" title="周四" lay-skin="primary">
|
||||
<input type="checkbox" value="5" class='time-week' name="time_week[]" title="周五" lay-skin="primary">
|
||||
<input type="checkbox" value="6" class='time-week' name="time_week[]" title="周六" lay-skin="primary">
|
||||
<input type="checkbox" value="0" class='time-week' name="time_week[]" title="周日" lay-skin="primary">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item time-type-view-all" >
|
||||
<label class="layui-form-label">自提时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime" lay-verify="start_time" placeholder="自提开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="自提开始时间" >
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime" lay-verify="end_time" placeholder="自提结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="自提结束时间" >
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{if $is_exit == 1}
|
||||
<div class="layui-form-item layui-hide">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">库存设置:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="stock_type" value="all" title="总部统一库存" checked>
|
||||
<input type="radio" name="stock_type" value="store" title="{$title}独立库存" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">总部统一库存:门店不用入库,商品查询以及销售由总部进行出入库<br>门店独立库存:门店自提以及收银扣除门店库存,门店需要入库</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $is_exit == 1}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}管理员:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="len-mid">
|
||||
<select name="uid">
|
||||
<option value="">请选择员工</option>
|
||||
{foreach $user_list as $k => $v}
|
||||
<option value="{$v.uid}">{$v.username}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">请选择员工作为门店管理员</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backStockList()">返回</button>
|
||||
<a id="storeImage"></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="storeLogoImageTpl">
|
||||
{{# if(d.list){ }}
|
||||
<div class="preview_img">
|
||||
<img layer-src src="{{ns.img(d.list)}}" class="img_prev"/>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<div>
|
||||
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" ></i>
|
||||
</div>
|
||||
<div class="replace_img js-replace js-add-logo-image">点击替换</div>
|
||||
</div>
|
||||
<input type="hidden" name="store_image" value="{{d.list}}">
|
||||
{{# }else{ }}
|
||||
<div class="upload-default">
|
||||
<div class="upload js-add-logo-image" >
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/html" id="storeImageTpl">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i])}}" layer-src>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<div class="replace_img" data-index="{{i}}">点击替换</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.config.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.all.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script type="text/javascript" src="SHOP_JS/address.js"></script>
|
||||
<script src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key={$tencent_map_key}"></script>
|
||||
<script src="https://map.qq.com/api/js?v=2.exp&key={$tencent_map_key}"></script>
|
||||
<script src="https://mapapi.qq.com/jsapi_v2/2/4/148/main.js"></script>
|
||||
<script type="text/javascript" src="STATIC_JS/qq_map.js?time=20240601"></script>
|
||||
<script>
|
||||
var form, repeat_flag, map_class, laytpl;
|
||||
var saveData = null;
|
||||
var completeUploadNum = 0;
|
||||
var storeImage = [];
|
||||
var STORE_IMAGE_MAX = 5;
|
||||
var ue = UE.getEditor('editor');
|
||||
|
||||
layui.use(['form','laydate', 'laytpl'], function() {
|
||||
var laydate = layui.laydate;
|
||||
form = layui.form;
|
||||
repeat_flag = false;//防重复标识
|
||||
laytpl = layui.laytpl;
|
||||
|
||||
if($("#container").length) {
|
||||
setTimeout(function () {
|
||||
map_class = new mapClass("container", {lat: '', lng: ''});
|
||||
map_class.mpKey = '{$tencent_map_key}';
|
||||
},200);
|
||||
}
|
||||
form.render();
|
||||
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#startTime'
|
||||
, type: 'time'
|
||||
,value: ""
|
||||
,done: function(value, date, endDate) {
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$("input[name=start_time]").val(time);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#endTime'
|
||||
, type: 'time'
|
||||
,value: ""
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$("input[name=end_time]").val(time);
|
||||
}
|
||||
});
|
||||
|
||||
form.verify({
|
||||
start_time: function(value, item){
|
||||
var end_time = $("input[name=end_time]").val();
|
||||
var start_time = $("input[name=start_time]").val();
|
||||
if(parseInt(start_time) > parseInt(end_time)){
|
||||
return '营业开始时间不能大于自提结束时间';
|
||||
}
|
||||
|
||||
},
|
||||
end_time: function(value, item){
|
||||
var end_time = $("input[name=end_time]").val();
|
||||
var start_time = $("input[name=start_time]").val();
|
||||
|
||||
if(parseInt(end_time) < parseInt(start_time)){
|
||||
return '营业结束时间不能小于自提开始时间';
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
$('.time-type-view').hide();
|
||||
|
||||
form.on('radio(time_type)', function(data){
|
||||
timeTypeChange(data.value);
|
||||
});
|
||||
|
||||
form.on('switch(pickup)', function(data){
|
||||
if(data.elem.checked){
|
||||
$('.time-view').removeClass('layui-hide')
|
||||
}else{
|
||||
$('.time-view').addClass('layui-hide')
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
form.verify({
|
||||
required : function(value, item){
|
||||
var msg = $(item).attr("placeholder") != undefined ? $(item).attr("placeholder") : '';
|
||||
if(value == '') return msg;
|
||||
},
|
||||
province_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择省份';
|
||||
}
|
||||
},
|
||||
city_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择城市';
|
||||
}
|
||||
},
|
||||
// district_id : function(value, item){
|
||||
// if(value == ''){
|
||||
// return '请选择区/县';
|
||||
// }
|
||||
// },
|
||||
tel : function(value, item) {
|
||||
if (value != '') {
|
||||
if (!ns.parse_telephone(value) && !ns.parse_mobile(value)) {
|
||||
return '请输入正确的电话号码或手机号!';
|
||||
}
|
||||
}
|
||||
},
|
||||
store_name : function (value,item) {
|
||||
if(value == ""){
|
||||
return '请输入{$title}名称';
|
||||
}
|
||||
},
|
||||
time_week: function(){
|
||||
|
||||
var supportTradeType = [];
|
||||
$('[name="support_trade_type"]:checked').each(function () {
|
||||
supportTradeType.push($(this).val())
|
||||
})
|
||||
|
||||
if (supportTradeType.indexOf('store') != -1 && $('[name="time_type"]:checked').val() == 1 && !$('.time-week:checked').length)
|
||||
return '请选择可配送日期';
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
function saveFunc(){
|
||||
var data = saveData;
|
||||
var full_address = [];
|
||||
full_address.push($("select[name=province_id] option:selected").text());
|
||||
full_address.push($("select[name=city_id] option:selected").text());
|
||||
full_address.push($("select[name=district_id] option:selected").text());
|
||||
|
||||
data.field.full_address = full_address.toString();
|
||||
|
||||
var supportTradeType = [];
|
||||
$('[name="support_trade_type"]:checked').each(function () {
|
||||
supportTradeType.push($(this).val())
|
||||
})
|
||||
{if $is_exit}
|
||||
data.field.support_trade_type = supportTradeType.toString();
|
||||
{else /}
|
||||
data.field.support_trade_type = 'store';
|
||||
{/if}
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("store://shop/store/addStore"),
|
||||
async : true,
|
||||
data : data.field,
|
||||
success : function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('添加成功', {
|
||||
title: '操作提示',
|
||||
btn: ['返回列表', '继续添加'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("store://shop/store/lists");
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var labelLen = $("input[name='label_id']:checked").length;
|
||||
var labelId = [];
|
||||
var labelName = [];
|
||||
if(!labelLen){
|
||||
layer.msg("请至少选择一个门店标签");
|
||||
return false;
|
||||
}
|
||||
for(var i = 0; i < labelLen; i++){
|
||||
labelId.push($("input[name='label_id']:checked").eq(i).val());
|
||||
labelName.push($("input[name='label_id']:checked").eq(i).attr('title'));
|
||||
}
|
||||
data.field.label_id = labelLen ? (',' + labelId.toString() + ',') : '';
|
||||
data.field.label_name = labelLen ? (',' + labelName.toString() + ',') : '';
|
||||
data.field.category_name = $("select[name='category_id'] option:selected").text();
|
||||
data.field.store_images = storeImage.toString();
|
||||
data.field.store_introduce = ue.getContent();
|
||||
|
||||
saveData = data;
|
||||
|
||||
if( data.field.longitude == "" || data.field.latitude == ""){
|
||||
layer.msg('请确认地理位置!');
|
||||
$(".empty-address").show();
|
||||
return;
|
||||
}else{
|
||||
$(".empty-address").hide();
|
||||
}
|
||||
|
||||
saveFunc();
|
||||
});
|
||||
|
||||
// 添加logo图片
|
||||
let storeLogoImage = '';
|
||||
$("body").off("click", ".js-add-logo-image").on("click", ".js-add-logo-image", function () {
|
||||
openAlbum(function (data) {
|
||||
storeLogoImage = data[0].pic_path;
|
||||
refreshLogoStoreImage();
|
||||
}, 1, 1);
|
||||
});
|
||||
|
||||
//渲染logo图片
|
||||
function refreshLogoStoreImage() {
|
||||
var store_image_template = $("#storeLogoImageTpl").html();
|
||||
var data = {
|
||||
list: storeLogoImage
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".logo-image-box").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeLogoImage.length) {
|
||||
//预览
|
||||
$(".logo-image-box .js-preview").click(function () {
|
||||
$(this).parent().parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".logo-image-box .js-delete").click(function () {
|
||||
storeLogoImage = '';
|
||||
refreshLogoStoreImage();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshLogoStoreImage();
|
||||
|
||||
// 添加门店图片
|
||||
$("body").off("click", ".js-add-image").on("click", ".js-add-image", function () {
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (storeImage.length < STORE_IMAGE_MAX) storeImage.push(data[i].pic_path);
|
||||
}
|
||||
refreshStoreImage();
|
||||
}, 5, 1);
|
||||
});
|
||||
|
||||
//渲染门店图片
|
||||
function refreshStoreImage() {
|
||||
var store_image_template = $("#storeImageTpl").html();
|
||||
var data = {
|
||||
list: storeImage,
|
||||
max: STORE_IMAGE_MAX
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".js-store-image").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeImage.length) {
|
||||
|
||||
//预览
|
||||
$(".js-store-image .js-preview").click(function () {
|
||||
$(this).parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".js-store-image .js-delete").click(function () {
|
||||
var index = $(this).attr("data-index");
|
||||
storeImage.splice(index, 1);
|
||||
refreshStoreImage();
|
||||
});
|
||||
|
||||
// 拖拽
|
||||
$('.js-store-image .upload_img_square_item').arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
var indexBefore = $(e).attr("data-index");//拖拽前的原始位置
|
||||
var indexAfter = $(e).index();//拖拽后的位置
|
||||
var temp = storeImage[indexBefore];
|
||||
storeImage[indexBefore] = storeImage[indexAfter];
|
||||
storeImage[indexAfter] = temp;
|
||||
refreshStoreImage();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//最多传十张图
|
||||
if (storeImage.length < STORE_IMAGE_MAX) {
|
||||
$(".js-add-image").show();
|
||||
} else {
|
||||
$(".js-add-image").hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshStoreImage();
|
||||
});
|
||||
|
||||
function backStockList() {
|
||||
location.hash = ns.hash("store://shop/store/lists");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新渲染表单
|
||||
*/
|
||||
function refreshFrom(){
|
||||
form.render();
|
||||
orderAddressChange();//改变地址
|
||||
map_class.mapChange();
|
||||
}
|
||||
|
||||
//动态改变订单地址赋值
|
||||
function orderAddressChange(){
|
||||
map_class.address.province = $("select[name=province_id]").val();
|
||||
map_class.address.province_name = $("select[name=province_id] option:selected").text();
|
||||
map_class.address.city = $("select[name=city_id]").val();
|
||||
map_class.address.city_name = $("select[name=city_id] option:selected").text();
|
||||
map_class.address.district = $("select[name=district_id]").val();
|
||||
map_class.address.district_name = $("select[name=district_id] option:selected").text();
|
||||
map_class.address.detail_address = $("input[name=address]").val()
|
||||
}
|
||||
|
||||
/**
|
||||
* 地址下拉框(主要用于坐标记录)
|
||||
*/
|
||||
function selectCallBack(){
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
}
|
||||
|
||||
//地图点击回调事件
|
||||
function mapChangeCallBack(){
|
||||
$("input[name=address]").val(map_class.address.address);//详细地址
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("shop/address/getGeographicId"),
|
||||
async : true,
|
||||
data : {
|
||||
"address" : map_class.address.area
|
||||
},
|
||||
success : function(data) {
|
||||
map_class.address.province = data.province_id;
|
||||
map_class.address.city = data.city_id;
|
||||
map_class.address.district = data.district_id;
|
||||
map_class.address.township = data.subdistrict_id;
|
||||
map_class.map_change = false;
|
||||
form.val("editselffetch", {
|
||||
"province_id": data.province_id
|
||||
});
|
||||
$("select[name=province_id]").change();
|
||||
form.val("editselffetch", {
|
||||
"city_id": data.city_id
|
||||
});
|
||||
$("select[name=city_id]").change();
|
||||
form.val("editselffetch", {
|
||||
"district_id": data.district_id
|
||||
});
|
||||
refreshFrom();//重新渲染form
|
||||
map_class.map_change = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function timeTypeChange(type){
|
||||
if(type == 1){
|
||||
$('.time-type-view').show();
|
||||
}else{
|
||||
$('.time-type-view').hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
103
addon/store/shop/view/store/adddeliver.html
Executable file
@@ -0,0 +1,103 @@
|
||||
<style>
|
||||
.form-row{margin-top: 0;margin-left: 220px;}
|
||||
.express-sheet-rule .form-row{margin-left: 200px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">配送员信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>配送员名称:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="deliver_name" lay-verify="required|deliverName" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>配送员手机号:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="deliver_mobile" lay-verify="required|deliverMobile" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" value="{$store_id ?? 0}" name="store_id">
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary" onclick="back()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form'], function() {
|
||||
var form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/local/addDeliver"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('添加成功', {
|
||||
title: '操作提示',
|
||||
btn: ['返回列表', '继续添加'],
|
||||
closeBtn: 0,
|
||||
yes: function (index, layero) {
|
||||
if ($('input[name="store_id"]').val() > 0) {
|
||||
location.hash = ns.hash("store://shop/store/deliverLists", {'store_id': $('input[name="store_id"]').val()});
|
||||
} else {
|
||||
location.hash = ns.hash("shop/local/deliverLists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function (index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
deliverName: function(value){
|
||||
if (value == '') {
|
||||
return '配送员名称不能为空!';
|
||||
}
|
||||
},
|
||||
deliverMobile: function (value) {
|
||||
if (value == '') {
|
||||
return '手机号不能为空!';
|
||||
}
|
||||
if (!ns.parse_mobile(value)) {
|
||||
return '请输入合法的手机号!'
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function back(){
|
||||
if($('input[name="store_id"]').val() > 0){
|
||||
location.hash = ns.hash("store://shop/store/deliverLists",{'store_id':$('input[name="store_id"]').val()});
|
||||
}else{
|
||||
location.hash = ns.hash("shop/local/deliverLists");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
180
addon/store/shop/view/store/category.html
Executable file
@@ -0,0 +1,180 @@
|
||||
<style>
|
||||
.layui-form-radio{margin-top: 0;}
|
||||
.layui-form-label{width: 160px;}
|
||||
.layui-form-label + .layui-input-block{margin-left: 160px;}
|
||||
.word-aux{margin-left: 160px;}
|
||||
.card-common{margin-top: 0;}
|
||||
|
||||
/* 分类数据 */
|
||||
.category-table{width: 665px;}
|
||||
.category-table .category-head, .category-table .category-tr{display: flex;width: 100%;height: 50px;padding: 8px 0;box-sizing: border-box;background-color: #f9f9fc;}
|
||||
.category-table .category-body{overflow: auto;max-height: 470px;}
|
||||
.category-table .category-head span:first-of-type, .category-table .category-tr .tr-input{flex: 1;}
|
||||
.category-table .category-head span:last-of-type{width: 150px;text-align: center;}
|
||||
.category-table .category-head span{padding: 0 15px;box-sizing: border-box;}
|
||||
.category-table .category-tr{background-color: transparent;border-bottom: 1px solid #e4e4e4;padding: 15px 0;height: auto;}
|
||||
.category-table .category-tr .tr-input{background-color: transparent;padding-left: 15px;}
|
||||
.category-table .category-tr .tr-input input{border: 1px solid #e4e4e4;height: 36px;line-height: 36px;border-radius: 3px;width: 350px;padding: 0 15px;box-sizing: border-box;}
|
||||
.category-table .category-tr .tr-active{display: flex;}
|
||||
.category-table .category-tr .tr-delete, .category-table .category-tr .tr-save{cursor: pointer; padding: 0 15px;}
|
||||
.add-category{cursor: pointer;}
|
||||
.category-empty{padding: 15px 0;text-align: center;border-bottom: 1px solid #e4e4e4;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">分类设置</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item is-withdraw">
|
||||
<label class="layui-form-label">门店分类:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="status" value="1" lay-filter="status_filter" lay-skin="switch" {if $status == 1} checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">启用门店分类后,用户选择门店时,将显示门店分类并可以切换筛选。</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分类数据:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="category-table">
|
||||
<div class="category-head">
|
||||
<span>分类名称</span>
|
||||
<span>操作</span>
|
||||
</div>
|
||||
<div class="category-body"></div>
|
||||
</div>
|
||||
<div class="add-category text-color" onclick="addCategory()">+添加分类名称</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form;
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
getCategory();
|
||||
|
||||
form.on('switch(status_filter)', function(data){
|
||||
let val = data.elem.checked ? 1 : 0;
|
||||
categoryConfig(val);
|
||||
});
|
||||
});
|
||||
|
||||
function getCategory(){
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/store/category"),
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
if (res.code == 0) {
|
||||
let list = res.data.list;
|
||||
let html = "";
|
||||
if(list.length) {
|
||||
list.forEach((item, index) => {
|
||||
html += `
|
||||
<div class="category-tr">
|
||||
<div class="tr-input">
|
||||
<input type="text" attr_category_id="${item.category_id}" value="${item.category_name}" />
|
||||
</div>
|
||||
<div class="tr-active">
|
||||
<span class="tr-save text-color" onclick="editCategory(this)">保存</span>
|
||||
<span class="tr-delete text-color" onclick="deleteCategory(this)">删除</span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
}else{
|
||||
html = '<div class="category-empty">暂无分类,请添加分类</div>';
|
||||
}
|
||||
$(".category-table .category-body").html(html);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function addCategory(){
|
||||
var html = `
|
||||
<div class="category-tr">
|
||||
<div class="tr-input">
|
||||
<input type="text" />
|
||||
</div>
|
||||
<div class="tr-active">
|
||||
<span class="tr-save text-color" onclick="editCategory(this)">保存</span>
|
||||
<span class="tr-delete text-color" onclick="deleteCategory(this)">删除</span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
$(".category-table .category-body").append(html);
|
||||
|
||||
let len = $(".category-table .category-body .category-tr").length;
|
||||
if(len) $(".category-table .category-empty").remove();
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/store/addCategory"),
|
||||
data:{category_name: ''},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
if (res.code == 0) {
|
||||
let data = res.data;
|
||||
$(".category-table .category-body .tr-input input").last().attr("attr_category_id",data);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function editCategory(event){
|
||||
let categoryId = $(event).parents(".category-tr").find("input").attr("attr_category_id");
|
||||
let categoryName = $(event).parents(".category-tr").find("input").val();
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/store/editCategory"),
|
||||
data:{category_id: categoryId, category_name: categoryName},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
if (res.code == 0) {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function deleteCategory(event){
|
||||
let categoryId = $(event).parents(".category-tr").find("input").attr("attr_category_id");
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/store/deleteCategory"),
|
||||
data:{category_id: categoryId},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
$(event).parents('.category-tr').remove();
|
||||
let len = $(".category-table .category-body .category-tr").length;
|
||||
if(!len){
|
||||
let html = `<div class="category-empty">暂无分类,请添加分类</div>`;
|
||||
$(".category-table .category-body").append(html);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function categoryConfig(data){
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/store/categoryConfig"),
|
||||
data:{status: data},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
158
addon/store/shop/view/store/deliverlists.html
Executable file
@@ -0,0 +1,158 @@
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加配送员</button>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入配送员名称" class="layui-input">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="deliverLists" lay-filter="deliverLists"></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>
|
||||
var form, table;
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
var repeat_flag = false; //防重复标识
|
||||
|
||||
table = new Table({
|
||||
elem: '#deliverLists',
|
||||
url: ns.url("store://shop/store/deliverlists"),
|
||||
where:{'store_id':"{$store_id}"},
|
||||
cols: [
|
||||
[{
|
||||
title: '配送员名称',
|
||||
unresize: 'false',
|
||||
field: 'deliver_name',
|
||||
width: '40%'
|
||||
}, {
|
||||
field:'deliver_mobile',
|
||||
title: '配送员电话',
|
||||
unresize: 'false',
|
||||
width: '40%'
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
],
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("store://shop/store/editDeliver?store_id={$store_id}&deliver_id=" + data.deliver_id);
|
||||
break;
|
||||
case 'delete': //删除
|
||||
deleteDeliver(data.deliver_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteDeliver(deliver_ids) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要删除该配送员吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/local/deleteDeliver"),
|
||||
data: {deliver_ids},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload(
|
||||
{
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.bottomToolbar(function(obj) {
|
||||
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "del":
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].company_id);
|
||||
deleteCompany(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.toolbar(function(obj) {
|
||||
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "del":
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].company_id);
|
||||
deleteCompany(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("store://shop/store/addDeliver?store_id={$store_id}");
|
||||
}
|
||||
</script>
|
||||
679
addon/store/shop/view/store/edit_store.html
Executable file
@@ -0,0 +1,679 @@
|
||||
<style>
|
||||
#container{ width: 650px; height: 500px; }
|
||||
#container > div {z-index: 500!important}
|
||||
.empty-address{ display: none; }
|
||||
.address-content {display: inline-block;vertical-align: top;}
|
||||
.empty-address-text{font-size: 14px;color: #f43530;height: 34px;line-height: 34px;}
|
||||
.tag-wrap{overflow: auto;height: 140px;}
|
||||
.upload-img-block .upload-img-box .preview_img{width: 100%; height: 100%; display: flex; justify-content: center; align-items: center;}
|
||||
.upload-img-block .upload-img-box .preview_img img{max-width: 100%; max-height: 100%;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap" lay-filter="storeform" >
|
||||
<input type="hidden" name="store_id" value="{$store_id}"/>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>{$title}名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="store_name" autocomplete="off" lay-verify="store_name" class="layui-input len-mid" value="{$info.store_name}">
|
||||
</div>
|
||||
<div class="word-aux">{$title}的名称(招牌)</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>{$title}类型:</label>
|
||||
<div class="layui-input-inline len-mid">
|
||||
<select name="store_type" lay-verify="required">
|
||||
<option value="">请选择门店类型</option>
|
||||
{foreach $store_type as $k => $v}
|
||||
<option value="{$v.type}" {if $info.store_type eq $v.type}selected{/if}>{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}Logo:</label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block icon">
|
||||
<div class="upload-img-box logo-image-box {if !empty($info.store_image)}hover{/if}" >
|
||||
<input type="hidden" name="store_image" value="{$info.store_image}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>{$title}Logo在PC及移动端对应页面及列表作为{$title}标志出现。</p>
|
||||
<p>建议图片尺寸:100 * 100像素,图片格式:jpg、png、jpeg。</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}图片:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="js-store-image"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}简介:</label>
|
||||
<div class="layui-input-block">
|
||||
<script id="editor" type="text/plain" class="special-length" style="height:300px;"></script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{$title}电话:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="telphone" value="{$info.telphone}" lay-verify="tel" autocomplete="off" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if $category_status == 1}
|
||||
<div class="layui-form-item store-category">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店分类:</label>
|
||||
<div class="layui-input-inline len-mid">
|
||||
<select name="category_id" lay-verify="required">
|
||||
{foreach $category_list as $k => $v}
|
||||
<option value="{$v.category_id}" {if $info.category_id eq $v.category_id}selected{/if}>{$v.category_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item label-list">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店标签:</label>
|
||||
<div class="layui-input-inline len-long">
|
||||
{foreach $label_list as $k => $v}
|
||||
<input type="checkbox" name="label_id" value="{$v.label_id}" title="{$v.label_name}" lay-skin="primary" {if strpos($info.label_id, ','.$v['label_id'].',') !== false}checked{/if}/>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--自提点地址-->
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">* </span>{$title}地址:</label>
|
||||
<div class="layui-input-inline area-select">
|
||||
<select name="province_id" lay-filter="province_id" lay-verify="province_id">
|
||||
{foreach $province_list as $k => $v}
|
||||
<option value="{$v.id}" {if $info.province_id == $v.id}select{/if}>{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline area-select">
|
||||
<select name="city_id" lay-filter="city_id" lay-verify="city_id">
|
||||
<option value="">请选择城市</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline area-select">
|
||||
<select name="district_id" lay-filter="district_id" lay-verify="district_id">
|
||||
<option value="">请选择区/县</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="address" placeholder="请填写{$title}的具体地址" value="{$info.address}" lay-verify="required" autocomplete="off" class="layui-input len-long address-content">
|
||||
<input type = "hidden" name="longitude" lay-verify="required" class="layui-input" value="{$info.longitude}"/>
|
||||
<input type = "hidden" name="latitude" lay-verify="required" class="layui-input" value="{$info.latitude}"/>
|
||||
<button class='layui-btn-primary layui-btn' onclick="refreshFrom();">查找地址</button>
|
||||
</div>
|
||||
<div class="word-aux">点击查找地址可在地图上显示输入的地理位置</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">地图定位:</label>
|
||||
{if $tencent_map_key}
|
||||
{if $check_map_key.status == 0}
|
||||
<div class="layui-input-block">
|
||||
<div id="container" class="selffetch-map"></div>
|
||||
</div>
|
||||
{else/}
|
||||
<div class="empty-local-map">
|
||||
<div class="word-aux empty-address-text">{$check_map_key.message}。<a href="{:href_url('shop/config/map')}" class="text-color">重新配置</a></div>
|
||||
</div>
|
||||
{/if}
|
||||
{else/}
|
||||
<div class="empty-local-map">
|
||||
<div class="word-aux empty-address-text">腾讯地图尚未配置,无法定位地址。<a href="{:href_url('shop/config/map')}" class="text-color">点击配置</a></div>
|
||||
</div>
|
||||
{/if}
|
||||
<span class="layui-word-aux empty-address">请选择地理位置!在地图上点击得到的地理位置会自动填入到对应的输入框中</span>
|
||||
</div>
|
||||
|
||||
{if $is_exit == 1}
|
||||
|
||||
<div class="layui-form-item layui-hide">
|
||||
<label class="layui-form-label">同城配送:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_o2o" value="1" lay-skin="switch" {if $info['is_o2o'] == 1} checked {/if}>
|
||||
</div>
|
||||
<div class="word-aux ">开启同城配送需要门店设置配送费用以及配送员</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-hide">
|
||||
<label class="layui-form-label">门店自提:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_pickup" value="1" lay-skin="switch" {if $info['is_pickup'] == 1} checked {/if} lay-filter="pickup">
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item time-view layui-hide">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">自提日期:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="time_type" value="0" title="每天" lay-filter="time_type" {if $info.time_type == 0 || !isset($info.time_type)}checked{/if}/>
|
||||
<input type="radio" name="time_type" value="1" title="自定义" lay-filter="time_type" {if $info.time_type == 1 }checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="time-view layui-hide">
|
||||
<div class="layui-form-item time-type-view" lay-verify="time_week">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" value="1" class='time-week' name="time_week[]" title="周一" lay-skin="primary" {if !empty($info.time_week) && in_array(1,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="2" class='time-week' name="time_week[]" title="周二" lay-skin="primary" {if !empty($info.time_week) && in_array(2,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="3" class='time-week' name="time_week[]" title="周三" lay-skin="primary" {if !empty($info.time_week) && in_array(3,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="4" class='time-week' name="time_week[]" title="周四" lay-skin="primary" {if !empty($info.time_week) && in_array(4,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="5" class='time-week' name="time_week[]" title="周五" lay-skin="primary" {if !empty($info.time_week) && in_array(5,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="6" class='time-week' name="time_week[]" title="周六" lay-skin="primary" {if !empty($info.time_week) && in_array(6,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="0" class='time-week' name="time_week[]" title="周日" lay-skin="primary" {if !empty($info.time_week) && in_array(0,$info.time_week)} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item time-type-view-all" >
|
||||
<label class="layui-form-label">自提时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime" lay-verify="start_time" placeholder="自提开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="自提开始时间" value="{$info.start_time}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime" lay-verify="end_time" placeholder="自提结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="自提结束时间" value="{$info.end_time}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{if $is_exit == 1}
|
||||
<div class="layui-form-item layui-hide">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">库存设置:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="stock_type" value="all" title="总部统一库存" {if $info['stock_type'] == 'all'} checked {/if}>
|
||||
<input type="radio" name="stock_type" value="store" title="{$title}独立库存" {if $info['stock_type'] == 'store'} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">总部统一库存:门店不用入库,商品查询以及销售由总部进行出入库<br>门店独立库存:门店自提以及收银扣除门店库存,门店需要入库</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backStockList()">返回</button>
|
||||
<a id="storeImage"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="storeLogoImageTpl">
|
||||
{{# if(d.list){ }}
|
||||
<div class="preview_img">
|
||||
<img layer-src src="{{ns.img(d.list)}}" class="img_prev"/>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<div>
|
||||
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" ></i>
|
||||
</div>
|
||||
<div class="replace_img js-replace js-add-logo-image">点击替换</div>
|
||||
</div>
|
||||
<input type="hidden" name="store_image" value="{{d.list}}">
|
||||
{{# }else{ }}
|
||||
<div class="upload-default">
|
||||
<div class="upload js-add-logo-image" >
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/html" id="storeImageTpl">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i])}}" layer-src>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<div class="replace_img" data-index="{{i}}">点击替换</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.config.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.all.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script type="text/javascript" src="SHOP_JS/address.js"></script>
|
||||
<script src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key={$tencent_map_key}"></script>
|
||||
<script src="https://map.qq.com/api/js?v=2.exp&key={$tencent_map_key}"></script>
|
||||
<script src="https://mapapi.qq.com/jsapi_v2/2/4/148/main.js"></script>
|
||||
<script type="text/javascript" src="STATIC_JS/qq_map.js?time=20240601"></script>
|
||||
<script>
|
||||
var form,laytpl, repeat_flag, map_class;
|
||||
var saveData = null;
|
||||
var completeUploadNum = 0;
|
||||
var storeImage = [];
|
||||
{notempty name="$info.store_images"}
|
||||
storeImage = '{$info.store_images}'.split(',');
|
||||
{/notempty}
|
||||
var STORE_IMAGE_MAX = 5;
|
||||
var ue = UE.getEditor('editor');
|
||||
{notempty name="$info.store_introduce"}
|
||||
ue.ready(function() {
|
||||
ue.setContent(`{:html_entity_decode($info.store_introduce)}`);
|
||||
});
|
||||
{/notempty}
|
||||
|
||||
layui.use(['form','laydate','laytpl'], function() {
|
||||
var laydate = layui.laydate;
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
repeat_flag = false;//防重复标识
|
||||
|
||||
form.render();
|
||||
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#startTime'
|
||||
, type: 'time'
|
||||
,value: "{:date('H:i:s', strtotime(date('Y-m-d')) + $info.start_time)}"
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$("input[name=start_time]").val(time);
|
||||
}
|
||||
|
||||
});
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#endTime'
|
||||
, type: 'time'
|
||||
,value: "{:date('H:i:s', strtotime(date('Y-m-d')) + $info.end_time)}"
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$("input[name=end_time]").val(time);
|
||||
}
|
||||
});
|
||||
|
||||
form.verify({
|
||||
start_time: function(value, item){
|
||||
var end_time = $("input[name=end_time]").val();
|
||||
var start_time = $("input[name=start_time]").val();
|
||||
if(parseInt(start_time) > parseInt(end_time)){
|
||||
return '营业开始时间不能大于自提结束时间';
|
||||
}
|
||||
|
||||
},
|
||||
end_time: function(value, item){
|
||||
var end_time = $("input[name=end_time]").val();
|
||||
var start_time = $("input[name=start_time]").val();
|
||||
|
||||
if(parseInt(end_time) < parseInt(start_time)){
|
||||
return '营业结束时间不能小于自提开始时间';
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
timeTypeChange($("input[name=time_type]:checked").val());
|
||||
|
||||
form.on('radio(time_type)', function(data){
|
||||
timeTypeChange(data.value);
|
||||
});
|
||||
form.on('switch(pickup)', function(data){
|
||||
if(data.elem.checked){
|
||||
$('.time-view').removeClass('layui-hide')
|
||||
}else{
|
||||
$('.time-view').addClass('layui-hide')
|
||||
}
|
||||
});
|
||||
|
||||
var initdata = {province_id : '{$info.province_id}', city_id : '{$info.city_id}', district_id : '{$info.district_id}'};
|
||||
initAddress(initdata, "storeform");
|
||||
|
||||
if('{$info.latitude}' == "" || '{$info.longitude}' == ""){
|
||||
var latlng = {lat:'',lng:''};
|
||||
}else{
|
||||
var latlng = {lat:'{$info.latitude}',lng:'{$info.longitude}'};
|
||||
}
|
||||
|
||||
if($("#container").length) {
|
||||
//地图展示
|
||||
setTimeout(function () {
|
||||
map_class = new mapClass("container", latlng);
|
||||
},200);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
form.verify({
|
||||
required : function(value, item){
|
||||
var msg = $(item).attr("placeholder") != undefined ? $(item).attr("placeholder") : '';
|
||||
if(value == '') return msg;
|
||||
},
|
||||
province_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择省份';
|
||||
}
|
||||
},
|
||||
city_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择城市';
|
||||
}
|
||||
},
|
||||
// district_id : function(value, item){
|
||||
// if(value == ''){
|
||||
// return '请选择区/县';
|
||||
// }
|
||||
// },
|
||||
tel : function(value, item) {
|
||||
if (value != '') {
|
||||
if (!ns.parse_telephone(value) && !ns.parse_mobile(value)) {
|
||||
return '请输入正确的电话号码或手机号!';
|
||||
}
|
||||
}
|
||||
},
|
||||
store_name : function (value,item) {
|
||||
if(value == ""){
|
||||
return '请输入{$title}名称';
|
||||
}
|
||||
},
|
||||
time_week: function(){
|
||||
var supportTradeType = [];
|
||||
$('[name="support_trade_type"]:checked').each(function () {
|
||||
supportTradeType.push($(this).val())
|
||||
})
|
||||
|
||||
if (supportTradeType.indexOf('store') != -1 && $('[name="time_type"]:checked').val() == 1 && !$('.time-week:checked').length)
|
||||
return '请选择可配送日期';
|
||||
}
|
||||
});
|
||||
|
||||
function saveFunc(){
|
||||
var data = saveData;
|
||||
|
||||
var full_address = [];
|
||||
full_address.push($("select[name=province_id] option:selected").text());
|
||||
full_address.push($("select[name=city_id] option:selected").text());
|
||||
full_address.push($("select[name=district_id] option:selected").text());
|
||||
|
||||
data.field.full_address = full_address.toString();
|
||||
|
||||
var supportTradeType = [];
|
||||
$('[name="support_trade_type"]:checked').each(function () {
|
||||
supportTradeType.push($(this).val())
|
||||
})
|
||||
{if $is_exit}
|
||||
data.field.support_trade_type = supportTradeType.toString();
|
||||
{else /}
|
||||
data.field.support_trade_type = 'store';
|
||||
{/if}
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("store://shop/store/editStore"),
|
||||
async : true,
|
||||
data : data.field,
|
||||
success : function(res) {
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
layer.confirm('编辑成功', {
|
||||
title: '操作提示',
|
||||
btn: ['返回列表', '继续操作'],
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("store://shop/store/lists");
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
|
||||
var labelLen = $("input[name='label_id']:checked").length;
|
||||
var labelId = [];
|
||||
var labelName = [];
|
||||
if(!labelLen){
|
||||
layer.msg("请至少选择一个门店标签");
|
||||
return false;
|
||||
}
|
||||
for(var i = 0; i < labelLen; i++){
|
||||
labelId.push($("input[name='label_id']:checked").eq(i).val());
|
||||
labelName.push($("input[name='label_id']:checked").eq(i).attr('title'));
|
||||
}
|
||||
data.field.label_id = labelLen ? (',' + labelId.toString() + ',') : '';
|
||||
data.field.label_name = labelLen ? (',' + labelName.toString() + ',') : '';
|
||||
data.field.category_name = $("select[name='category_id'] option:selected").text();
|
||||
data.field.store_images = storeImage.toString();
|
||||
data.field.store_introduce = ue.getContent();
|
||||
|
||||
saveData = data;
|
||||
|
||||
if( data.field.longitude == "" || data.field.latitude == ""){
|
||||
layer.msg('请确认地理位置!');
|
||||
$(".empty-address").show();
|
||||
return;
|
||||
}else{
|
||||
$(".empty-address").hide();
|
||||
}
|
||||
saveFunc();
|
||||
});
|
||||
|
||||
// 添加logo图片
|
||||
let storeLogoImage = '{$info.store_image}';
|
||||
$("body").off("click", ".js-add-logo-image").on("click", ".js-add-logo-image", function () {
|
||||
openAlbum(function (data) {
|
||||
storeLogoImage = data[0].pic_path;
|
||||
refreshLogoStoreImage();
|
||||
}, 1, 1);
|
||||
});
|
||||
|
||||
//渲染logo图片
|
||||
function refreshLogoStoreImage() {
|
||||
|
||||
var store_image_template = $("#storeLogoImageTpl").html();
|
||||
var data = {
|
||||
list: storeLogoImage
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".logo-image-box").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeLogoImage.length) {
|
||||
//预览
|
||||
$(".logo-image-box .js-preview").click(function () {
|
||||
$(this).parent().parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".logo-image-box .js-delete").click(function () {
|
||||
storeLogoImage = '';
|
||||
refreshLogoStoreImage();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshLogoStoreImage();
|
||||
|
||||
// 添加门店图片
|
||||
$("body").off("click", ".js-add-image").on("click", ".js-add-image", function () {
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (storeImage.length < STORE_IMAGE_MAX) storeImage.push(data[i].pic_path);
|
||||
}
|
||||
refreshStoreImage();
|
||||
}, 5, 1);
|
||||
});
|
||||
|
||||
//渲染门店图片
|
||||
function refreshStoreImage() {
|
||||
var store_image_template = $("#storeImageTpl").html();
|
||||
var data = {
|
||||
list: storeImage,
|
||||
max: STORE_IMAGE_MAX
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".js-store-image").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeImage.length) {
|
||||
|
||||
//预览
|
||||
$(".js-store-image .js-preview").click(function () {
|
||||
$(this).parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".js-store-image .js-delete").click(function () {
|
||||
var index = $(this).attr("data-index");
|
||||
storeImage.splice(index, 1);
|
||||
refreshStoreImage();
|
||||
});
|
||||
|
||||
// 拖拽
|
||||
$('.js-store-image .upload_img_square_item').arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
var indexBefore = $(e).attr("data-index");//拖拽前的原始位置
|
||||
var indexAfter = $(e).index();//拖拽后的位置
|
||||
var temp = storeImage[indexBefore];
|
||||
storeImage[indexBefore] = storeImage[indexAfter];
|
||||
storeImage[indexAfter] = temp;
|
||||
refreshStoreImage();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//最多传十张图
|
||||
if (storeImage.length < STORE_IMAGE_MAX) {
|
||||
$(".js-add-image").show();
|
||||
} else {
|
||||
$(".js-add-image").hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshStoreImage();
|
||||
});
|
||||
|
||||
function backStockList() {
|
||||
location.hash = ns.hash("store://shop/store/lists");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新渲染表单
|
||||
*/
|
||||
function refreshFrom(){
|
||||
form.render();
|
||||
orderAddressChange();//改变地址
|
||||
map_class.mapChange();
|
||||
}
|
||||
|
||||
//动态改变订单地址赋值
|
||||
function orderAddressChange(){
|
||||
map_class.address.province = $("select[name=province_id]").val();
|
||||
map_class.address.province_name = $("select[name=province_id] option:selected").text();
|
||||
map_class.address.city = $("select[name=city_id]").val();
|
||||
map_class.address.city_name = $("select[name=city_id] option:selected").text();
|
||||
map_class.address.district = $("select[name=district_id]").val();
|
||||
map_class.address.district_name = $("select[name=district_id] option:selected").text();
|
||||
map_class.address.detail_address = $("input[name='address']").val();
|
||||
}
|
||||
|
||||
/**
|
||||
* 地址下拉框(主要用于坐标记录)
|
||||
*/
|
||||
function selectCallBack(){
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
}
|
||||
|
||||
//地图点击回调事件
|
||||
function mapChangeCallBack(){
|
||||
$("input[name=address]").val(map_class.address.address);//详细地址
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("shop/address/getGeographicId"),
|
||||
async : true,
|
||||
data : {
|
||||
"address" : map_class.address.area
|
||||
},
|
||||
success : function(data) {
|
||||
map_class.address.province = data.province_id;
|
||||
map_class.address.city = data.city_id;
|
||||
map_class.address.district = data.district_id;
|
||||
map_class.address.township = data.subdistrict_id;
|
||||
map_class.map_change = false;
|
||||
form.val("storeform", {
|
||||
"province_id": data.province_id
|
||||
});
|
||||
$("select[name=province_id]").change();
|
||||
form.val("storeform", {
|
||||
"city_id": data.city_id
|
||||
});
|
||||
$("select[name=city_id]").change();
|
||||
form.val("storeform", {
|
||||
"district_id": data.district_id
|
||||
});
|
||||
refreshFrom();//重新渲染form
|
||||
map_class.map_change = true;
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
function timeTypeChange(type){
|
||||
if(type == 1){
|
||||
$('.time-type-view').show();
|
||||
}else{
|
||||
$('.time-type-view').hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
94
addon/store/shop/view/store/editdeliver.html
Executable file
@@ -0,0 +1,94 @@
|
||||
<style>
|
||||
.form-row{margin-top: 0;margin-left: 220px;}
|
||||
.express-sheet-rule .form-row{margin-left: 200px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">配送员信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>配送员名称:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="deliver_name" lay-verify="required|deliverName" value="{$deliver_info.deliver_name}" class="layui-input len-long">
|
||||
<input type="hidden" name="deliver_id" lay-verify="required|deliverName" value="{$deliver_id}" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>配送员手机号:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="deliver_mobile" lay-verify="required|deliverMobile" value="{$deliver_info.deliver_mobile}" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" value="{$store_id ?? 0}" name="store_id">
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary" onclick="back()">返回</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form'], function() {
|
||||
var form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/local/editDeliver"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.msg(res.message);
|
||||
if($('input[name="store_id"]').val() > 0){
|
||||
location.hash = ns.hash("store://shop/store/deliverLists",{'store_id':$('input[name="store_id"]').val()});
|
||||
}else{
|
||||
location.hash = ns.hash("shop/local/deliverLists");
|
||||
}
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
deliverName: function(value){
|
||||
if (value == '') {
|
||||
return '配送员名称不能为空!';
|
||||
}
|
||||
},
|
||||
deliverMobile: function (value) {
|
||||
if (value == '') {
|
||||
return '手机号不能为空!';
|
||||
}
|
||||
if (!ns.parse_mobile(value)) {
|
||||
return '请输入合法的手机号!'
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function back(){
|
||||
if($('input[name="store_id"]').val() > 0){
|
||||
location.hash = ns.hash("store://shop/store/deliverLists",{'store_id':$('input[name="store_id"]').val()});
|
||||
}else{
|
||||
location.hash = ns.hash("shop/local/deliverLists");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
206
addon/store/shop/view/store/index.html
Executable file
@@ -0,0 +1,206 @@
|
||||
<link rel="stylesheet" href="SHOP_CSS/index.css">
|
||||
<style>
|
||||
.echart-wrap .head { display: flex; }
|
||||
.echart-wrap .head .title {flex: 1}
|
||||
.echart-wrap .head .sort-type {display: flex;border: 1px solid #eee;border-radius: 5px;overflow:hidden}
|
||||
.echart-wrap .sort-type .type-item {width: 80px;text-align: center;background: #F5F5F5;line-height: 28px;cursor: pointer;transition: all .3s;font-size: 12px}
|
||||
.echart-wrap .sort-type .type-item:hover {background: #eee}
|
||||
.echart-wrap .sort-type .type-item.active {background: var(--base-color);color: #fff}
|
||||
.align-right {text-align: right!important;}
|
||||
.ranking-empty {text-align: center;padding: 100px 0;}
|
||||
.echart-wrap .common-wrap { min-width: calc((100% - 45px) / 2); max-width: calc((100% - 45px) / 2); box-sizing: border-box; }
|
||||
.echart-wrap .common-wrap .body {width: 100%}
|
||||
.ranking-wrap tr th {white-space: nowrap}
|
||||
.ranking-wrap .goods-name {height: 20px;overflow: hidden;text-overflow: ellipsis}
|
||||
</style>
|
||||
|
||||
<div class="common-wrap">
|
||||
<div class="head">
|
||||
<div class="title">实时概况</div>
|
||||
<div class="sub-title">更新时间:{:date('Y-m-d H:i:s')}</div>
|
||||
</div>
|
||||
<div class="body summary-wrap">
|
||||
<div class="summary-item">
|
||||
<div class="title">营业中门店数量</div>
|
||||
<div class="value" id="in_business_num">0</div>
|
||||
</div>
|
||||
<div class="summary-item">
|
||||
<div class="title">门店总数</div>
|
||||
<div class="value" id="store_num">0</div>
|
||||
</div>
|
||||
<div class="summary-item">
|
||||
<div class="title">累计门店订单量</div>
|
||||
<div class="value" id="total_order_num">0</div>
|
||||
</div>
|
||||
<div class="summary-item">
|
||||
<div class="title">累计门店交易额</div>
|
||||
<div class="value" id="total_order_money" value-type="money">0.00</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body summary-wrap">
|
||||
<div class="summary-item">
|
||||
<div class="title">待审核结算单</div>
|
||||
<div class="value" id="wait_audit_num">0</div>
|
||||
</div>
|
||||
<div class="summary-item">
|
||||
<div class="title">待审核结算金额(元)</div>
|
||||
<div class="value" id="wait_audit_money" value-type="money">0.00</div>
|
||||
</div>
|
||||
<div class="summary-item">
|
||||
<div class="title">待打款结算单</div>
|
||||
<div class="value" id="wait_transfer_num">0</div>
|
||||
</div>
|
||||
<div class="summary-item">
|
||||
<div class="title">待打款结算金额(元)</div>
|
||||
<div class="value" id="wait_transfer_money" value-type="money">0.00</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="echart-wrap ranking-wrap">
|
||||
<div class="common-wrap store-ranking">
|
||||
<div class="head">
|
||||
<div class="title">门店排行</div>
|
||||
<div class="sort-type">
|
||||
<div class="type-item active" sort-type="num">交易量</div>
|
||||
<div class="type-item" sort-type="money">交易额</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="market-item-content store body">
|
||||
<div class="ranking-empty">暂无排名</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="common-wrap goods-ranking">
|
||||
<div class="head">
|
||||
<div class="title">商品排行</div>
|
||||
<div class="sort-type">
|
||||
<div class="type-item active" sort-type="num">交易量</div>
|
||||
<div class="type-item" sort-type="money">交易额</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="market-item-content goods body">
|
||||
<div class="ranking-empty">暂无排名</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="SHOP_JS/echarts.min.js"></script>
|
||||
<script>
|
||||
//综合统计
|
||||
function getSumCount() {
|
||||
$.ajax({
|
||||
type:'post',
|
||||
dataType:'json',
|
||||
url:ns.url('store://shop/store/index'),
|
||||
success:function(res){
|
||||
if (res.code == 0) {
|
||||
Object.keys(res.data).forEach(function(key){
|
||||
let value = res.data[key];
|
||||
if ($('#' + key).attr('value-type') == 'money') value = moneyFormat(value);
|
||||
$('#' + key).text(value)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
getSumCount();
|
||||
|
||||
// 门店排名
|
||||
function storeRanking() {
|
||||
var order = $('.store-ranking .active').attr('sort-type');
|
||||
$.ajax({
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
url: ns.url("store://shop/store/storeranking"),
|
||||
data: {
|
||||
order: order
|
||||
},
|
||||
success: function(res) {
|
||||
var html = "";
|
||||
if(res.code >= 0 && res.data.length){
|
||||
html += `<table class="layui-table" lay-skin="nob">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>排名</th>
|
||||
<th>门店名称</th>
|
||||
<th class="align-right">${order == 'num' ? '交易量(单)' : '交易额(元)'}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>`;
|
||||
res.data.forEach((item,index)=>{
|
||||
html += `<tr>
|
||||
<td>${index + 1}</td>
|
||||
<td>${item.store_name}</td>
|
||||
<td class="align-right">${order == 'num' ? item.order_num : item.order_money}</td>
|
||||
</tr>
|
||||
`;
|
||||
});
|
||||
html += ' </tbody></table>'
|
||||
$(".market-item-content.store").html(html);
|
||||
}else{
|
||||
html += `<div class="ranking-empty">暂无排名</div>`;
|
||||
$(".market-item-content.store").html(html);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
storeRanking();
|
||||
|
||||
// 商品排名
|
||||
function goodsRanking() {
|
||||
var order = $('.goods-ranking .active').attr('sort-type');
|
||||
$.ajax({
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
url: ns.url("store://shop/store/goodsranking"),
|
||||
data: {
|
||||
order: order
|
||||
},
|
||||
success: function(res) {
|
||||
var html = "";
|
||||
if(res.code >= 0 && res.data.length){
|
||||
html += `<table class="layui-table" lay-skin="nob">
|
||||
<colgroup>
|
||||
<col>
|
||||
<col width="60%">
|
||||
<col>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>排名</th>
|
||||
<th>商品名称</th>
|
||||
<th class="align-right">${order == 'num' ? '交易量(件)' : '交易额(元)'}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>`;
|
||||
res.data.forEach((item,index)=>{
|
||||
html += `<tr>
|
||||
<td>${index + 1}</td>
|
||||
<td><div class="goods-name" title="${item.goods_name}">${item.goods_name}</div></td>
|
||||
<td class="align-right">${order == 'num' ? item.goods_num : item.goods_money}</td>
|
||||
</tr>
|
||||
`;
|
||||
});
|
||||
html += ' </tbody></table>';
|
||||
$(".market-item-content.goods").html(html);
|
||||
}else{
|
||||
html += `<div class="ranking-empty">暂无排名</div>`;
|
||||
$(".market-item-content.goods").html(html);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
goodsRanking();
|
||||
|
||||
$(function(){
|
||||
$('.store-ranking .type-item').click(function () {
|
||||
$(this).addClass('active').siblings().removeClass('active');
|
||||
storeRanking();
|
||||
})
|
||||
|
||||
$('.goods-ranking .type-item').click(function () {
|
||||
$(this).addClass('active').siblings().removeClass('active');
|
||||
goodsRanking();
|
||||
})
|
||||
})
|
||||
</script>
|
||||
137
addon/store/shop/view/store/label_select.html
Executable file
@@ -0,0 +1,137 @@
|
||||
<style>
|
||||
.store-label-list {
|
||||
padding: 0 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="store-label-list">
|
||||
<!-- 列表 -->
|
||||
<table id="store_label_list" lay-filter="store_label_list"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="checkbox">
|
||||
{{# if($.inArray(d.label_id.toString(), selected_id_arr) != -1){ }}
|
||||
<input type="checkbox" data-label-id="{{d.label_id}}" name="store_label_checkbox" lay-skin="primary" lay-filter="store_label_checkbox" checked>
|
||||
{{# }else{ }}
|
||||
<input type="checkbox" data-label-id="{{d.label_id}}" name="store_label_checkbox" lay-skin="primary" lay-filter="store_label_checkbox">
|
||||
{{# } }}
|
||||
<input type="hidden" data-label-id="{{d.label_id}}" name="store_label_json" value='{{ JSON.stringify(d) }}' />
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table, form, laytpl,
|
||||
select_id = "{$select_id}", //选中商品id
|
||||
selected_id_arr = select_id.length ? select_id.split(',') : [],
|
||||
select_list = []; //选中商品所有数据
|
||||
|
||||
$(function () {
|
||||
layui.use(['form', 'laytpl'], function () {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
|
||||
table = new Table({
|
||||
elem: '#store_label_list',
|
||||
url: ns.url("store://shop/store/labelSelect"),
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
title:'<input type="checkbox" name="store_label_checkbox_all" lay-skin="primary" lay-filter="store_label_checkbox_all">',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: '#checkbox'
|
||||
}, {
|
||||
width: '55%',
|
||||
title: '标签名称',
|
||||
field:'label_name',
|
||||
unresize: 'false',
|
||||
}, {
|
||||
width: '35%',
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
callback : function () {
|
||||
// 更新商品复选框状态
|
||||
for (var i=0;i<selected_id_arr.length;i++) {
|
||||
var selected = $("input[name='store_label_checkbox'][data-label-id='" + selected_id_arr[i] + "']");
|
||||
|
||||
if (selected.length) {
|
||||
$("input[name='store_label_checkbox'][data-label-id='" + selected_id_arr[i] + "']").prop("checked", true);
|
||||
}
|
||||
}
|
||||
|
||||
form.render();
|
||||
initData();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// 勾选商品
|
||||
form.on('checkbox(store_label_checkbox_all)', function (data) {
|
||||
var all_checked = data.elem.checked;
|
||||
$("input[name='store_label_checkbox']").each(function () {
|
||||
var checked = $(this).prop('checked');
|
||||
if (all_checked != checked) {
|
||||
$(this).next().click();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 勾选商品
|
||||
form.on('checkbox(store_label_checkbox)', function(data) {
|
||||
var label_id = $(data.elem).attr("data-label-id"), json = {};
|
||||
form.render();
|
||||
|
||||
var labelLen = $("input[name='store_label_checkbox'][data-label-id="+ label_id +"]:checked").length;
|
||||
if (labelLen){
|
||||
json = JSON.parse($("input[name='store_label_json'][data-label-id="+ label_id +"]").val());
|
||||
delete json.LAY_INDEX;
|
||||
delete json.LAY_TABLE_INDEX;
|
||||
delete json.create_time;
|
||||
select_list.push(json);
|
||||
} else{
|
||||
for (var i = 0; i < select_list.length; i++) {
|
||||
if (select_list[i].label_id == label_id) {
|
||||
select_list.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$.unique(select_list);
|
||||
});
|
||||
|
||||
//初始化数据
|
||||
function initData(){
|
||||
var labelLen = $("input[name='store_label_checkbox'][data-label-id]:checked").length;
|
||||
|
||||
for (var i = 0; i < labelLen; i++){
|
||||
var labelId = $("input[name='store_label_checkbox'][data-label-id]:checked").eq(i).attr("data-label-id");
|
||||
var ident = false;
|
||||
for (var k = 0; k < select_list.length; k++){
|
||||
if(select_list[k].id == labelId){
|
||||
ident = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ident) return;
|
||||
json = JSON.parse($("input[name='store_label_json'][data-label-id="+ labelId +"]").val());
|
||||
delete json.LAY_INDEX;
|
||||
delete json.LAY_TABLE_INDEX;
|
||||
delete json.create_time;
|
||||
|
||||
select_list.push(json);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function selectStoreLabelListener(callback) {
|
||||
var res = select_list;
|
||||
callback(res);
|
||||
}
|
||||
</script>
|
||||
249
addon/store/shop/view/store/lists.html
Executable file
@@ -0,0 +1,249 @@
|
||||
<link rel="stylesheet" type="text/css" href="SHOP_CSS/store_lists.css" />
|
||||
<style>
|
||||
.store-info{display: flex;align-items: center;}
|
||||
.store-info img{margin-right: 10px;width: 40px;}
|
||||
.store-info .store-tab-wrap{display: flex;flex-wrap: wrap;}
|
||||
.store-info .store-content p{line-height: 1;margin-bottom: 5px;}
|
||||
.store-info .store-tab-wrap span{font-size: 12px;border: 1px solid;border-radius: 2px;padding: 3px 4px;line-height: 1;margin-right: 5px;margin-top: 5px;}
|
||||
.relation-info{display: flex;flex-direction: column;}
|
||||
.relation-info p{white-space: break-spaces;line-height: 1.5;}
|
||||
.single-filter-box{
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加{$title}</button>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="keyword" placeholder="请输入{$title}名称" autocomplete="off" class="layui-input">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="store_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" lay-id="" lay-typer="">全部{$title}</li>
|
||||
<li lay-id="1" lay-type="1">营业中</li>
|
||||
<li lay-id="0" lay-type="1">休息中</li>
|
||||
<li lay-id="1" lay-type="2">已停业</li>
|
||||
</ul>
|
||||
<table id="store_list" lay-filter="store_list"></table>
|
||||
</div>
|
||||
|
||||
<!-- 门店信息 -->
|
||||
<script type="text/html" id="store_info">
|
||||
<div class="store-info">
|
||||
{{# if(d.store_image){ }}
|
||||
<img src="{{ns.img(d.store_image)}}" alt="" onerror="this.src = ns.img('{$default_img.store}')">
|
||||
{{# }else{ }}
|
||||
<img src="{{ns.img('{$default_img.store}')}}">
|
||||
{{# } }}
|
||||
<div class="store-content">
|
||||
<p>{{d.store_name}}</p>
|
||||
<div class="store-tab-wrap">
|
||||
{{# if(d.is_default == 1){ }}
|
||||
<span class="border-color text-color">总店</span>
|
||||
{{# } }}
|
||||
{{# if(d.is_pickup == 1){ }}
|
||||
<span class="border-color text-color">门店自提</span>
|
||||
{{# } }}
|
||||
{{# if(d.is_o2o == 1){ }}
|
||||
<span class="border-color text-color">同城配送</span>
|
||||
{{# } }}
|
||||
{{# if(d.is_express == 1){ }}
|
||||
<span class="border-color text-color">物流配送</span>
|
||||
{{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 联系信息 -->
|
||||
<script type="text/html" id="relation_info">
|
||||
<div class="relation-info">
|
||||
<p>联系方式:{{d.telphone || '--'}}</p>
|
||||
<p>地址:{{d.full_address + ' ' + d.address}}</p>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 订单信息 -->
|
||||
<script type="text/html" id="order_info">
|
||||
<div class="relation-info">
|
||||
<p>订单金额:¥{{d.order_money}}</p>
|
||||
<p>订单数量:{{d.order_num}}</p>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 门店信息 -->
|
||||
<script type="text/html" id="settlement_info">
|
||||
<div class="relation-info">
|
||||
{{# if(!d.is_settlement){ }}
|
||||
<p>无需结算</p>
|
||||
{{# }else{ }}
|
||||
<p>抽成总额:¥{{(parseFloat(d.account) + parseFloat(d.account_withdraw) + parseFloat(d.account_apply)).toFixed(2)}}</p>
|
||||
<p>待结算:¥{{parseFloat(d.account).toFixed(2)}}</p>
|
||||
<p>结算中:¥{{parseFloat(d.account_apply).toFixed(2)}}</p>
|
||||
<p>已结算:¥{{parseFloat(d.account_withdraw).toFixed(2)}}</p>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="editStore">门店设置</a>
|
||||
{{# if(d.is_default != 1){ }}
|
||||
{{# if(d.is_frozen) { }}
|
||||
<a class="layui-btn" lay-event="closeStore">开启</a>
|
||||
{{# } else{ }}
|
||||
<a class="layui-btn" lay-event="closeStore">停业</a>
|
||||
{{# } }}
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="joinStore">进入门店</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table,form,element;
|
||||
layui.use(['form','element'], function() {
|
||||
form = layui.form;
|
||||
element = layui.element;
|
||||
form.render();
|
||||
refreshTable();
|
||||
|
||||
// 搜索功能
|
||||
form.on('submit(search)', function(data) {
|
||||
refreshTable();
|
||||
});
|
||||
|
||||
element.on('tab(store_tab)', function(){
|
||||
refreshTable();
|
||||
});
|
||||
|
||||
// 监听工具栏操作
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'editStore':
|
||||
editStore(data.store_id);
|
||||
break;
|
||||
case 'closeStore':
|
||||
closeStore(data.store_id,data.is_frozen);
|
||||
break;
|
||||
case 'joinStore':
|
||||
joinStore(data.store_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 刷新表格列表
|
||||
function refreshTable(){
|
||||
table = new Table({
|
||||
id: 'store_list',
|
||||
elem: '#store_list',
|
||||
url: ns.url("store://shop/store/lists"),
|
||||
cols: [
|
||||
[ {
|
||||
title: '门店信息',
|
||||
unresize: 'false',
|
||||
width: '23%',
|
||||
templet: '#store_info'
|
||||
}, {
|
||||
title: '联系信息',
|
||||
unresize: 'false',
|
||||
width: '17%',
|
||||
templet: '#relation_info'
|
||||
}, {
|
||||
title: '结算比率',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function(data) {
|
||||
let html = '';
|
||||
if(data.is_settlement == 1){
|
||||
html += "<p>"+ (data.settlement_rate == 0 ? '跟随系统' : (data.settlement_rate + '%')) +"</p>";
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}, {
|
||||
title: '门店结算',
|
||||
unresize: 'false',
|
||||
width: '16%',
|
||||
templet: "#settlement_info"
|
||||
}, {
|
||||
title: '库存管理方式',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: function(data) {
|
||||
let stockType = data.stock_type == 'all' ? '总部统一库存' : '门店独立库存';
|
||||
return stockType;
|
||||
}
|
||||
},{
|
||||
unresize:'false',
|
||||
title: '门店状态',
|
||||
width: '8%',
|
||||
align: 'center',
|
||||
templet: function(data){
|
||||
let state = '--';
|
||||
if(data.is_frozen == 1){
|
||||
state = '<span style="color:red;">停业</span>';
|
||||
}else{
|
||||
state = data.status == 0 ? '<span style="color:#09bb07;">休息</span>' : '<span style="color:#105CFB;">正常</span>';
|
||||
}
|
||||
return state;
|
||||
}
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
}]
|
||||
],
|
||||
where: {
|
||||
search_text: $("input[name='keyword']").val(),
|
||||
status: $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-id'),
|
||||
type: $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-type')
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function joinStore(storeId) {
|
||||
window.open(ns.href("cashier://shop/index/cashier", {store_id: storeId}))
|
||||
}
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("store://shop/store/addStore");
|
||||
}
|
||||
|
||||
function editStore(data) {
|
||||
location.hash = ns.hash("store://shop/store/editStore",{"store_id":data});
|
||||
}
|
||||
|
||||
function closeStore(store_id, is_frozen){
|
||||
var msg = '{$title}已开始运营,确认要关闭吗?';
|
||||
if(is_frozen == 1) {
|
||||
msg = '确定要开启该{$title}吗?';
|
||||
}
|
||||
layer.confirm(msg, function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/store/frozenStore"),
|
||||
data: {store_id:store_id, is_frozen:is_frozen},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
refreshTable();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
1017
addon/store/shop/view/store/local.html
Executable file
578
addon/store/shop/view/store/operate.html
Executable file
@@ -0,0 +1,578 @@
|
||||
<style>
|
||||
.day-wrap {display: flex;align-items: center}
|
||||
.day-input {width: 80px}
|
||||
.day-input[readonly] {background: #f5f5f5}
|
||||
.day-wrap .layui-form-radio:nth-child(4) {margin-right: 0px}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap" lay-filter="storeform" >
|
||||
<input type="hidden" name="store_id" value="{$info.store_id}"/>
|
||||
<div class="layui-card card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">配送设置</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">物流配送:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_express" value="1" lay-skin="switch" {if !empty($info) && $info.is_express==1 }checked{/if}>
|
||||
</div>
|
||||
<div class="word-aux">物流配送只有在连锁门店模式有效,在平台运营模式,按照总店查询</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">同城配送:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_o2o" value="1" lay-skin="switch" {if $info['is_o2o'] == 1} checked {/if} lay-verify="is_o2o">
|
||||
</div>
|
||||
<div class="word-aux ">开启同城配送需要门店设置配送费用以及配送员</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店自提:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_pickup" value="1" lay-skin="switch" {if $info['is_pickup'] == 1} checked {/if} lay-verify="is_pickup" lay-filter="pickup">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item time-view {if $info['is_pickup'] == 0}layui-hide{/if}">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">自提日期:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="time_type" value="0" title="每天" lay-filter="time_type" {if $info.time_type == 0 || !isset($info.time_type)}checked{/if}/>
|
||||
<input type="radio" name="time_type" value="1" title="自定义" lay-filter="time_type" {if $info.time_type == 1 }checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="time-view {if $info['is_pickup'] == 0}layui-hide{/if}">
|
||||
<div class="layui-form-item time-type-view" lay-verify="time_week">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" value="1" class='time-week' name="time_week[]" title="周一" lay-skin="primary" {if !empty($info.time_week) && in_array(1,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="2" class='time-week' name="time_week[]" title="周二" lay-skin="primary" {if !empty($info.time_week) && in_array(2,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="3" class='time-week' name="time_week[]" title="周三" lay-skin="primary" {if !empty($info.time_week) && in_array(3,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="4" class='time-week' name="time_week[]" title="周四" lay-skin="primary" {if !empty($info.time_week) && in_array(4,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="5" class='time-week' name="time_week[]" title="周五" lay-skin="primary" {if !empty($info.time_week) && in_array(5,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="6" class='time-week' name="time_week[]" title="周六" lay-skin="primary" {if !empty($info.time_week) && in_array(6,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="0" class='time-week' name="time_week[]" title="周日" lay-skin="primary" {if !empty($info.time_week) && in_array(0,$info.time_week)} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="time-type-view-all">
|
||||
<div class="delivery-time">
|
||||
{foreach name="$info.delivery_time" key="k" item="item"}
|
||||
<div class="layui-form-item" >
|
||||
<label class="layui-form-label">{$k == 0 ? '自提时段设置:' : ''}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime{$k == 0 ? '' : $k}" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="{$item.start_time}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime{$k == 0 ? '' : $k}" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="{$item.end_time}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
{if $k eq 0}
|
||||
<a href="javascript:;" class="text-color add">添加</a>
|
||||
{else/}
|
||||
<a href="javascript:;" class="text-color delete">删除</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">细分时段:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="time_interval" value="30" title="30分钟" {if $info.time_interval == 30}checked{/if}/>
|
||||
<input type="radio" name="time_interval" value="60" title="一小时" {if $info.time_interval == 60}checked{/if}/>
|
||||
<input type="radio" name="time_interval" value="90" title="90分钟" {if $info.time_interval == 90}checked{/if}/>
|
||||
<input type="radio" name="time_interval" value="120" title="两小时" {if $info.time_interval == 120}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">提前预约:</label>
|
||||
<div class="layui-input-block day-wrap">
|
||||
<input type="radio" name="advance_day" value="0" title="无需提前" {if $info.advance_day == 0}checked{/if} lay-filter="day_select"/>
|
||||
<input type="radio" name="advance_day" value="1" title="提前" {if $info.advance_day != 0}checked{/if} lay-filter="day_select"/>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="advance_day_num" lay-verify="advance_day" class="layui-input day-input" {if $info.advance_day == 0}readonly{else/}value="{$info.advance_day}"{/if}>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">天</div>
|
||||
</div>
|
||||
<div class="word-aux">预约提货是否需提前进行预约</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">最长预约:</label>
|
||||
<div class="layui-input-block day-wrap">
|
||||
<input type="radio" name="most_day" value="0" title="仅当日" {if $info.most_day == 0}checked{/if} lay-filter="day_select"/>
|
||||
<input type="radio" name="most_day" value="1" title="可预约" {if $info.most_day != 0}checked{/if} lay-filter="day_select"/>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="most_day_num" lay-verify="most_day" class="layui-input day-input" {if $info.most_day == 0}readonly{else/}value="{$info.most_day}"{/if}>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">天内</div>
|
||||
</div>
|
||||
<div class="word-aux">预约提货最长可预约多少天内进行提货</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">库存设置</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">库存设置:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" {if $info.is_default}disabled{/if} name="stock_type" value="all" title="总部统一库存" {if $info['stock_type'] == 'all'} checked {/if}>
|
||||
<input type="radio" {if $info.is_default}disabled{/if} name="stock_type" value="store" title="门店独立库存" {if $info['stock_type'] == 'store'} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">总部统一库存:门店不用入库,商品查询以及销售由总部进行出入库<br>门店独立库存:门店自提以及收银扣除门店库存,门店需要入库</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">营业设置</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item" {if $info.is_default == 1}style="display:none;"{/if}>
|
||||
<label class="layui-form-label">营业状态:</label>
|
||||
<div class="layui-input-block">
|
||||
{if $info.is_default == 1}
|
||||
<input type="checkbox" name="status" value="1" lay-skin="switch" checked lay-filter="status" title="营业|休息">
|
||||
{else/}
|
||||
<input type="checkbox" name="status" value="1" lay-skin="switch" lay-filter="status" {if !empty($info) && $info.status==1 }checked{/if} title="营业|休息">
|
||||
{/if}
|
||||
</div>
|
||||
<div class="word-aux">门店休息并且设置前台不展示则前台无法看到该门店</div>
|
||||
</div>
|
||||
|
||||
<div class="close-block {if $info.status == 1}layui-hide{/if}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">休息展示:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="close_show" value="0" title="前台不展示" lay-filter="close_show" {if $info.close_show == 0}checked{/if}/>
|
||||
<input type="radio" name="close_show" value="1" title="前台展示" lay-filter="close_show" {if $info.close_show == 1}checked{/if}/>
|
||||
</div>
|
||||
<div class="word-aux">门店休息并且设置前台不展示则前台无法看到该门店</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item {if $info.close_show == 0}layui-hide{/if} close-desc-block" >
|
||||
<label class="layui-form-label"><span class="required">*</span>休息说明:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="close_desc" autocomplete="off" lay-verify="close_desc" class="layui-input len-long" value="{$info.close_desc}" placeholder="请输入临时停业说明,最多输入50个字">
|
||||
</div>
|
||||
<div class="word-aux">门店休息且前台展示时会显示该说明,最多输入50个字</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="time-type-view-all">
|
||||
<div class="open-date-delivery-time">
|
||||
{foreach name="$info.open_date_config" key="k" item="item"}
|
||||
<div class="layui-form-item" >
|
||||
<label class="layui-form-label">{$k == 0 ? '营业时间设置:' : ''}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="openDateStartTime{$k == 0 ? '' : $k}" lay-verify="open_date_start_time" placeholder="营业开始时间" value="" readonly >
|
||||
<input type="hidden" name="open_date_start_time" placeholder="配送开始时间" value="{$item.start_time}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="openDateEndTime{$k == 0 ? '' : $k}" lay-verify="open_date_end_time" placeholder="营业结束时间" value="" readonly >
|
||||
<input type="hidden" name="open_date_end_time" placeholder="配送结束时间" value="{$item.end_time}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
{if $k eq 0}
|
||||
<a href="javascript:;" class="text-color add">添加</a>
|
||||
{else/}
|
||||
<a href="javascript:;" class="text-color delete">删除</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="word-aux">如果不设置,则默认全天营业</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">非营业时间配送下单:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="out_open_date_o2o_pay" value="1" title="允许" lay-filter="time_type" {if $info.out_open_date_o2o_pay == 1}checked{/if}/>
|
||||
<input type="radio" name="out_open_date_o2o_pay" value="0" title="不允许" lay-filter="time_type" {if $info.out_open_date_o2o_pay == 0 }checked{/if}/>
|
||||
</div>
|
||||
<div class="word-aux">如果设置为不允许,则在非营业时间用户不可以选择同城配送下单</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backStockList()">返回</button>
|
||||
<a id="storeImage"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form, repeat_flag, map_class;
|
||||
var saveData = null;
|
||||
var totalUploadNum = 0;
|
||||
var completeUploadNum = 0;
|
||||
var upload;
|
||||
var store_business = "{$business_config['store_business']}";
|
||||
|
||||
layui.use(['form','laydate'], function() {
|
||||
var laydate = layui.laydate;
|
||||
form = layui.form;
|
||||
repeat_flag = false;//防重复标识
|
||||
|
||||
form.render();
|
||||
|
||||
/************************************* 自提时间选择 开始 **********************************/
|
||||
function fetchTimeSelect(){
|
||||
$('.delivery-time .layui-form-item').each(function (index, item) {
|
||||
//时间选择器
|
||||
var startTime = $(item).find("input[name=start_time]").val(), endTime = $(item).find("input[name=end_time]").val(), initTime = parseInt({:strtotime(date('Y-m-d'))});
|
||||
laydate.render({
|
||||
elem: '#startTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=start_time]").val(time || 0);
|
||||
}
|
||||
});
|
||||
$('#startTime' + (index ? index : '')).val(startTime ? ns.time_to_date((initTime + parseInt(startTime)), 'H:i:s') : '');
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#endTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=end_time]").val(time || 0);
|
||||
}
|
||||
});
|
||||
$('#endTime' + (index ? index : '')).val(endTime ? ns.time_to_date((initTime + parseInt(endTime)), 'H:i:s') : '');
|
||||
})
|
||||
}
|
||||
fetchTimeSelect();
|
||||
|
||||
$('body').off('click', '.delivery-time .delete').on('click', '.delivery-time .delete', function () {
|
||||
$(this).parents('.layui-form-item').remove()
|
||||
});
|
||||
|
||||
$('body').off('click', '.delivery-time .add').on('click', '.delivery-time .add', function () {
|
||||
var length = $('.delivery-time .layui-form-item').length;
|
||||
if (length >= 3) { layer.msg('最多添加三个时段'); return;}
|
||||
var h = `<div class="layui-form-item" >
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime`+ length +`" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime`+ length +`" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
<a href="javascript:;" class="text-color delete">删除</a>
|
||||
</div>
|
||||
</div>`;
|
||||
$('.delivery-time').append(h);
|
||||
fetchTimeSelect();
|
||||
});
|
||||
/************************************* 自提时间选择 结束 **********************************/
|
||||
|
||||
/************************************* 营业时间选择 开始 **********************************/
|
||||
function fetchOpenDateTimeSelect(){
|
||||
$('.open-date-delivery-time .layui-form-item').each(function (index, item) {
|
||||
//时间选择器
|
||||
var startTime = $(item).find("input[name=open_date_start_time]").val(), endTime = $(item).find("input[name=open_date_end_time]").val(), initTime = parseInt({:strtotime(date('Y-m-d'))});
|
||||
laydate.render({
|
||||
elem: '#openDateStartTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=open_date_start_time]").val(time || 0);
|
||||
}
|
||||
});
|
||||
$('#openDateStartTime' + (index ? index : '')).val(startTime ? ns.time_to_date((initTime + parseInt(startTime)), 'H:i:s') : '');
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#openDateEndTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=open_date_end_time]").val(time || 0);
|
||||
}
|
||||
});
|
||||
$('#openDateEndTime' + (index ? index : '')).val(endTime ? ns.time_to_date((initTime + parseInt(endTime)), 'H:i:s') : '');
|
||||
})
|
||||
}
|
||||
fetchOpenDateTimeSelect();
|
||||
|
||||
$('body').off('click', '.open-date-delivery-time .delete').on('click', '.open-date-delivery-time .delete', function () {
|
||||
$(this).parents('.layui-form-item').remove();
|
||||
});
|
||||
|
||||
$('body').off('click', '.open-date-delivery-time .add').on('click', '.open-date-delivery-time .add', function () {
|
||||
var length = $('.open-date-delivery-time .layui-form-item').length;
|
||||
if (length >= 3) { layer.msg('最多添加三个时段'); return;}
|
||||
var h = `<div class="layui-form-item" >
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="openDateStartTime`+ length +`" lay-verify="open_date_start_time" placeholder="营业开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="open_date_start_time" placeholder="营业开始时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="openDateEndTime`+ length +`" lay-verify="open_date_end_time" placeholder="营业结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="open_date_end_time" placeholder="营业送结束时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
<a href="javascript:;" class="text-color delete">删除</a>
|
||||
</div>
|
||||
</div>`;
|
||||
$('.open-date-delivery-time').append(h);
|
||||
fetchOpenDateTimeSelect();
|
||||
});
|
||||
/************************************* 营业时间选择 结束 **********************************/
|
||||
|
||||
form.on('radio(day_select)', function (data){
|
||||
if (data.value == 1) {
|
||||
$(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', false);
|
||||
} else {
|
||||
$(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', true);
|
||||
}
|
||||
})
|
||||
|
||||
form.on('switch(status)', function (data){
|
||||
if (!data.elem.checked) {
|
||||
$(".close-block").removeClass('layui-hide');
|
||||
} else {
|
||||
$(".close-block").addClass('layui-hide');
|
||||
}
|
||||
})
|
||||
|
||||
form.on('radio(close_show)', function (data){
|
||||
if (data.value == 1) {
|
||||
$(".close-desc-block").removeClass('layui-hide');
|
||||
} else {
|
||||
$(".close-desc-block").addClass('layui-hide');
|
||||
}
|
||||
})
|
||||
|
||||
form.verify({
|
||||
start_time: function(value, item){
|
||||
if($('[name="is_pickup"]').is(':checked')) {
|
||||
if(!value) return '请选择自提开始时间';
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
|
||||
if (parseInt(start_time) > parseInt(end_time)) {
|
||||
return '开始时间不能大于结束时间';
|
||||
}
|
||||
// var prev_endtime = $(item).parents('.layui-form-item').prev('.layui-form-item').find("input[name=end_time]").val();
|
||||
// if (prev_endtime && parseInt(prev_endtime) > parseInt(start_time)) return '开始时间不能小于上一阶段结束时间';
|
||||
}
|
||||
},
|
||||
end_time: function(value, item){
|
||||
if($('[name="is_pickup"]').is(':checked')) {
|
||||
if(!value) return '请选择自提结束时间';
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
|
||||
var time_interval = $('[name="time_interval"]:checked').val();
|
||||
if (parseInt(end_time) < parseInt(start_time)) {
|
||||
return '结束时间不能小于开始时间';
|
||||
}
|
||||
if ((parseInt(end_time) - parseInt(start_time)) / 60 < parseInt(time_interval)) {
|
||||
return '时间间隔不能小于' + time_interval + '分钟';
|
||||
}
|
||||
}
|
||||
},
|
||||
open_date_start_time: function(value, item){
|
||||
if(!value && $('input[name=open_date_start_time]').length > 1) return '请选择营业开始时间';
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=open_date_end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=open_date_start_time]").val();
|
||||
if (parseInt(start_time) > parseInt(end_time)) {
|
||||
return '开始时间不能大于结束时间';
|
||||
}
|
||||
var prev_endtime = $(item).parents('.layui-form-item').prev('.layui-form-item').find("input[name=open_date_end_time]").val();
|
||||
// if (prev_endtime && parseInt(prev_endtime) > parseInt(start_time)) return '开始时间不能小于上一阶段结束时间';
|
||||
},
|
||||
open_date_end_time: function(value, item){
|
||||
if(!value && ($('input[name=open_date_end_time]').length > 1 || Number($('input[name=open_date_start_time]').val()) > 0)) return '请选择营业结束时间';
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=open_date_end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=open_date_start_time]").val();
|
||||
if (parseInt(end_time) < parseInt(start_time)) {
|
||||
return '结束时间不能小于开始时间';
|
||||
}
|
||||
},
|
||||
required : function(value, item){
|
||||
var msg = $(item).attr("placeholder") != undefined ? $(item).attr("placeholder") : '';
|
||||
if(value == '') return msg;
|
||||
},
|
||||
time_week: function(){
|
||||
if ($('[name="is_pickup"]').is(':checked') && $('[name="time_type"]:checked').val() == 1 && !$('.time-week:checked').length)
|
||||
return '请选择可配送日期';
|
||||
},
|
||||
advance_day: function (value){
|
||||
if ($('[name="advance_day"]:checked').val() == 1) {
|
||||
if (value == '' || value == 0) return '请输入提前预约时间';
|
||||
if (value < 0) return '提前预约时间不能为负数';
|
||||
}
|
||||
},
|
||||
most_day: function (value){
|
||||
if ($('[name="most_day"]:checked').val() == 1) {
|
||||
if (value == '' || value == 0) return '请输入最长可预约时间';
|
||||
if (value < 0) return '最长可预约时间不能为负数';
|
||||
if (value > 15) return '最长可预约时间不能超过15天';
|
||||
}
|
||||
},
|
||||
is_o2o:function (value, item){
|
||||
var longitude = '{$info.longitude}';
|
||||
var latitude = '{$info.latitude}';
|
||||
if((!longitude || !latitude) && item.checked){
|
||||
return '开启同城配送需先完善门店地址';
|
||||
}
|
||||
},
|
||||
is_pickup:function (value, item){
|
||||
var longitude = '{$info.longitude}';
|
||||
var latitude = '{$info.latitude}';
|
||||
if((!longitude || !latitude) && item.checked){
|
||||
return '开启门店自提需先完善门店地址';
|
||||
}
|
||||
},
|
||||
close_desc:function (value){
|
||||
var status = $("input[name=status]").prop('checked');
|
||||
var close_show = $("input[name=close_show]:checked").val();
|
||||
if(!status && close_show === '1' && !value){
|
||||
return '请输入休息说明';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
timeTypeChange($("input[name=time_type]:checked").val());
|
||||
|
||||
form.on('radio(time_type)', function(data){
|
||||
timeTypeChange(data.value);
|
||||
});
|
||||
form.on('switch(pickup)', function(data){
|
||||
if(data.elem.checked){
|
||||
$('.time-view').removeClass('layui-hide')
|
||||
}else{
|
||||
$('.time-view').addClass('layui-hide')
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
//组装自提时间
|
||||
data.field.delivery_time = [];
|
||||
$('.delivery-time .layui-form-item').each(function (index, item) {
|
||||
data.field.delivery_time.push({
|
||||
start_time: $(item).find("input[name=start_time]").val(),
|
||||
end_time: $(item).find("input[name=end_time]").val()
|
||||
})
|
||||
});
|
||||
data.field.delivery_time = JSON.stringify(data.field.delivery_time);
|
||||
//组装营业时间
|
||||
data.field.open_date_config = [];
|
||||
$('.open-date-delivery-time .layui-form-item').each(function (index, item) {
|
||||
let start_time = $(item).find("input[name=open_date_start_time]").val();
|
||||
let end_time = $(item).find("input[name=open_date_end_time]").val();
|
||||
if(Number(start_time) >= 0 && Number(end_time) > 0){
|
||||
data.field.open_date_config.push({
|
||||
start_time: start_time,
|
||||
end_time: end_time,
|
||||
})
|
||||
}
|
||||
});
|
||||
data.field.open_date = getOpenDateShow(data.field.open_date_config);
|
||||
data.field.open_date_config = JSON.stringify(data.field.open_date_config);
|
||||
|
||||
data.field.advance_day = $('[name="advance_day"]:checked').val() == 0 ? 0 : $('[name="advance_day_num"]').val();
|
||||
data.field.most_day = $('[name="most_day"]:checked').val() == 0 ? 0 : $('[name="most_day_num"]').val();
|
||||
|
||||
if (store_business == 'store' && !data.field.is_express && !data.field.is_o2o && !data.field.is_pickup) {
|
||||
layer.msg('至少需启用一种配送方式');
|
||||
return;
|
||||
}
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("store://shop/store/operate"),
|
||||
async : true,
|
||||
data : data.field,
|
||||
success : function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('编辑成功', {
|
||||
title: '操作提示',
|
||||
btn: ['返回列表', '继续操作'],
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("store://shop/store/lists");
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
//获取营业时间显示
|
||||
function getOpenDateShow(open_date_config) {
|
||||
let open_date = '';
|
||||
if(open_date_config.length > 0){
|
||||
let arr = [];
|
||||
open_date_config.forEach((item)=>{
|
||||
arr.push(stampToTime(item.start_time)+'-'+stampToTime(item.end_time));
|
||||
})
|
||||
open_date = arr.join(',');
|
||||
}else{
|
||||
open_date = '全天';
|
||||
}
|
||||
return open_date;
|
||||
}
|
||||
|
||||
//时间戳转时间
|
||||
function stampToTime(stamp, type='all'){
|
||||
let m = Math.floor(stamp / 60);
|
||||
let h = Math.floor(m / 60);
|
||||
m = m % 60;
|
||||
if(m < 10) m = '0'+m;
|
||||
if(h < 10) h = '0'+h;
|
||||
if(type === 'harf' && h > 12) h -= 12;
|
||||
return h + ':' + m;
|
||||
}
|
||||
|
||||
function backStockList() {
|
||||
location.hash = ns.hash("store://shop/store/lists");
|
||||
}
|
||||
|
||||
function timeTypeChange(type){
|
||||
if(type == 1){
|
||||
$('.time-type-view').show();
|
||||
}else{
|
||||
$('.time-type-view').hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
50
addon/store/shop/view/store/select.html
Executable file
@@ -0,0 +1,50 @@
|
||||
<style>
|
||||
html,body {width: 100%;height: 100%}
|
||||
.store-empty {display: flex;height: 100%; align-items: center;justify-content: center}
|
||||
.store-wrap {display: flex;height: 100%;flex-wrap: wrap;overflow-y: auto;padding: 15px;box-sizing: border-box}
|
||||
.store-wrap .store-item {box-sizing: border-box;margin: 0 15px 15px 0;border: 1px solid #f5f5f5;width: calc((100% - 30px) / 3);padding: 10px;cursor: pointer}
|
||||
.store-wrap .store-item.active {border-color: var(--base-color);}
|
||||
.store-wrap .store-item .name {font-weight: bold;}
|
||||
.store-wrap .store-item .status {margin: 5px 0;line-height: 1;font-size: 12px}
|
||||
.store-wrap .store-item .address {color: #999;font-size: 12px}
|
||||
.store-wrap .store-item:nth-child(3n+3) {margin-right: 0}
|
||||
.open {color: #00A717;}
|
||||
.close {color: #ff0000;}
|
||||
</style>
|
||||
|
||||
{notempty name="store_list"}
|
||||
<div class="store-wrap">
|
||||
{foreach name="store_list" item="vo"}
|
||||
<div class="store-item {if in_array($vo.store_id, $store_id)}active{/if}" data-store="{$vo.store_id}">
|
||||
<div class="name">{$vo.store_name}</div>
|
||||
<div class="status">
|
||||
{if $vo.is_frozen == 1 || $vo.status == 0}
|
||||
<span class="close">未开启</span>
|
||||
{else/}
|
||||
<span class="open">开启中</span>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="address">{$vo.full_address}{$vo.address}</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{else/}
|
||||
<div class="store-empty">暂无可用门店</div>
|
||||
{/notempty}
|
||||
|
||||
<script>
|
||||
var storeList = {:json_encode($store_list)};
|
||||
$('.store-item').click(function () {
|
||||
if ($(this).hasClass('active')) $(this).removeClass('active');
|
||||
else $(this).addClass('active');
|
||||
})
|
||||
|
||||
function selectStoreListener(callback) {
|
||||
var store = [];
|
||||
$('.store-item.active').each(function () {
|
||||
var index = $(this).index();
|
||||
store.push(storeList[index])
|
||||
})
|
||||
if (typeof callback == "function") callback(store);
|
||||
}
|
||||
</script>
|
||||
394
addon/store/shop/view/store/settlement.html
Executable file
@@ -0,0 +1,394 @@
|
||||
<style>
|
||||
.layui-form-radio{margin-top: 0;}
|
||||
.layui-form-label{width: 160px;}
|
||||
.layui-form-label + .layui-input-block{margin-left: 160px;}
|
||||
.word-aux{margin-left: 160px;}
|
||||
.form-row{margin-left: 160px;}
|
||||
.bank-type-wrap{display: flex;}
|
||||
.bank-type-wrap .bank-type-item{display: flex;align-items: center;margin-right: 15px;}
|
||||
.bank-type-wrap .bank-type-item .layui-form-radio{padding: 0;margin: 0;}
|
||||
.bank-type-wrap .bank-type-item .layui-form-radio .layui-icon{margin-right: 5px;}
|
||||
.bank-type-wrap .bank-type-item > .iconfont{margin-right: 3px;}
|
||||
.bank-type-wrap .bank-type-item:nth-child(2) > .iconfont{color: #24af41;}
|
||||
.bank-type-wrap .bank-type-item:nth-child(3) > .iconfont{color: #00a0e9;}
|
||||
|
||||
.img-box{position: relative;}
|
||||
.img-box .img-load{position: absolute;width: 100%;height: 100%;background: rgba(0,0,0,0.8);left:0;top:0;color:#fff;display: flex;justify-content: center;align-items: center;align-content: center;line-height: 20px;padding: 4px;box-sizing: border-box;cursor: pointer;}
|
||||
</style>
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">结算设置</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item is-withdraw">
|
||||
<label class="layui-form-label">是否结算:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="is_settlement" lay-filter="is_settlement" value="1" lay-filter="third_party" lay-skin="switch" {if $info.is_settlement == 1} checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item settlement_rate {if $info.is_settlement == 0} layui-hide{/if}" >
|
||||
<label class="layui-form-label">门店抽成:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="settlement_rate" lay-filter="settlement_rate" value="0" title="跟随系统" {if $info.settlement_rate == 0} checked{/if} />
|
||||
<input type="radio" name="settlement_rate" lay-filter="settlement_rate" value="1" title="自定义"{if $info.settlement_rate > 0} checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux along-system {if $info.settlement_rate != 0}layui-hide{/if}">跟随系统时门店抽成比率是{$withdraw_config.settlement_rate}%</div>
|
||||
</div>
|
||||
<div class="layui-form-item settlement-rate-wrap {if $info.is_settlement == 0 || $info.settlement_rate == 0} layui-hide{/if}">
|
||||
<label class="layui-form-label">门店抽成比率:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="settlement_rate" lay-verify="settlement_rate" placeholder="0" class="layui-input len-short" autocomplete="off" value="{$info.settlement_rate}"/>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">%</div>
|
||||
</div>
|
||||
<div class="word-aux">门店抽成比率需是0-100且保存两位小数</div>
|
||||
</div>
|
||||
<div class="layui-form-item bank-type {if $info.is_settlement == 0} layui-hide{/if}">
|
||||
<label class="layui-form-label">账户类型:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="bank_type" lay-filter="bank_type" value="3" title="银行卡" {if $info.bank_type == 3 || $info.bank_type == 0} checked{/if}/>
|
||||
<input type="radio" name="bank_type" lay-filter="bank_type" value="1" title="微信" {if $info.bank_type == 1} checked{/if}/>
|
||||
<input type="radio" name="bank_type" lay-filter="bank_type" value="2" title="支付宝" {if $info.bank_type == 2} checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 银行卡 -->
|
||||
<div class="layui-form-item bank_card {if $info.is_settlement == 0 || $info.bank_type != 3} layui-hide{/if}">
|
||||
<label class="layui-form-label"><span class="required">*</span>开户行:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="bank_type_name" {if $info.bank_type == 3}lay-verify="bank_type_name"{/if} placeholder="请输入开户行" class="layui-input len-mid" autocomplete="off" value="{$info.bank_type_name}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item bank_card {if $info.is_settlement == 0 || $info.bank_type != 3} layui-hide{/if}">
|
||||
<label class="layui-form-label"><span class="required">*</span>户头:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="bank_user_name" {if $info.bank_type == 3}lay-verify="bank_user_name"{/if} placeholder="请输入户头" class="layui-input len-mid" autocomplete="off" value="{$info.bank_user_name}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item bank_card {if $info.is_settlement == 0 || $info.bank_type != 3} layui-hide{/if}">
|
||||
<label class="layui-form-label"><span class="required">*</span>账户:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="bank_type_account" {if $info.bank_type == 3}lay-verify="bank_type_account"{/if} placeholder="请输入账户" class="layui-input len-mid" autocomplete="off" value="{$info.bank_type_account}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 微信 -->
|
||||
<div class="layui-form-item wixin-wrap {if $info.is_settlement == 0 || $info.bank_type != 1} layui-hide{/if}">
|
||||
<label class="layui-form-label">微信绑定:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="img-box" style="height: 100px!important;width: auto;" id="wechat_auth_qrcode">
|
||||
<image src="" />
|
||||
<div class="img-load layui-hide"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">请扫描二维码与微信绑定</div>
|
||||
</div>
|
||||
<div class="layui-form-item wixin-wrap {if $info.is_settlement == 0 || $info.bank_type != 1} layui-hide{/if}">
|
||||
<label class="layui-form-label"><span class="required">*</span>微信openid:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="bank_type_account_weixin" {if $info.bank_type == 1}lay-verify="bank_type_account_weixin"{/if} class="layui-input len-mid" autocomplete="off" value="{$info.bank_type_account}" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item wixin-wrap {if $info.is_settlement == 0 || $info.bank_type != 1} layui-hide{/if}">
|
||||
<label class="layui-form-label"><span class="required">*</span>真实姓名:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="bank_user_name_weixin" {if $info.bank_type == 1}lay-verify="bank_user_name_weixin"{/if} placeholder="请输入微信名" class="layui-input len-mid" autocomplete="off" value="{$info.bank_user_name}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">请输入真实姓名,否则转账会校验失败</div>
|
||||
</div>
|
||||
|
||||
<!-- 支付宝 -->
|
||||
<div class="layui-form-item alipay-wrap {if $info.is_settlement == 0 || $info.bank_type != 2} layui-hide{/if}">
|
||||
<label class="layui-form-label"><span class="required">*</span>真实名字:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="bank_user_name_alipay" {if $info.bank_type == 2}lay-verify="bank_user_name_alipay"{/if} placeholder="请输入真实名字" class="layui-input len-mid" autocomplete="off" value="{$info.bank_user_name}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item alipay-wrap {if $info.is_settlement == 0 || $info.bank_type != 2} layui-hide{/if}">
|
||||
<label class="layui-form-label"><span class="required">*</span>支付宝账号:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="bank_type_account_alipay" {if $info.bank_type == 2}lay-verify="required"{/if} placeholder="请输入支付宝账户" class="layui-input len-mid" autocomplete="off" value="{$info.bank_type_account}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="store_id" value="{$store_id}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form,
|
||||
repeat_flag=false,
|
||||
isSettlementRate=false, //抽成比率是否跟随系统
|
||||
bankType='{$info.bank_type}' == 0 ? 3 : '{$info.bank_type}'; //账户类型
|
||||
|
||||
//微信授权
|
||||
var wechatAuth;
|
||||
getWechatAuthInstance();
|
||||
wechatAuth.bankTypeChange(bankType);
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
// 是否结算
|
||||
form.on('switch(is_settlement)', function (data) {
|
||||
$(".bank_card").addClass("layui-hide");
|
||||
$(".wixin-wrap").addClass("layui-hide");
|
||||
$(".alipay-wrap").addClass("layui-hide");
|
||||
|
||||
if (data.elem.checked) {
|
||||
$(".settlement_rate").removeClass("layui-hide");
|
||||
$(".bank-type").removeClass("layui-hide");
|
||||
|
||||
//账户类型
|
||||
if (bankType == 1) {
|
||||
$(".wixin-wrap").removeClass("layui-hide");
|
||||
} else if (bankType == 2) {
|
||||
$(".alipay-wrap").removeClass("layui-hide");
|
||||
} else if (bankType == 3) {
|
||||
$(".bank_card").removeClass("layui-hide");
|
||||
}
|
||||
} else {
|
||||
$(".settlement-rate-wrap").addClass("layui-hide");
|
||||
$(".settlement_rate").addClass("layui-hide");
|
||||
$(".bank-type").addClass("layui-hide");
|
||||
}
|
||||
|
||||
if (isSettlementRate) {
|
||||
$(".along-system").addClass("layui-hide");
|
||||
$(".settlement-rate-wrap").removeClass("layui-hide");
|
||||
} else {
|
||||
$(".along-system").removeClass("layui-hide");
|
||||
$(".settlement-rate-wrap").addClass("layui-hide");
|
||||
}
|
||||
});
|
||||
|
||||
// 提现抽成
|
||||
form.on('radio(settlement_rate)', function (data) {
|
||||
isSettlementRate = Boolean(parseFloat(data.value));
|
||||
if (parseFloat(data.value)) {
|
||||
$(".along-system").addClass("layui-hide");
|
||||
$(".settlement-rate-wrap").removeClass("layui-hide");
|
||||
} else {
|
||||
$(".along-system").removeClass("layui-hide");
|
||||
$(".settlement-rate-wrap").addClass("layui-hide");
|
||||
}
|
||||
});
|
||||
|
||||
// 账户类型选择
|
||||
form.on('radio(bank_type)', function (data) {
|
||||
bankType = parseFloat(data.value);
|
||||
|
||||
$("input[name='bank_type_name']").removeAttr('lay-verify');
|
||||
$("input[name='bank_user_name']").removeAttr('lay-verify');
|
||||
$("input[name='bank_type_account']").removeAttr('lay-verify');
|
||||
$("input[name='bank_user_name_alipay']").removeAttr('lay-verify');
|
||||
$("input[name='bank_type_account_alipay']").removeAttr('lay-verify');
|
||||
$("input[name='bank_user_name_weixin']").removeAttr('lay-verify');
|
||||
if (parseFloat(data.value) == 1) {
|
||||
$(".bank_card").addClass("layui-hide");
|
||||
$(".wixin-wrap").removeClass("layui-hide");
|
||||
$(".alipay-wrap").addClass("layui-hide");
|
||||
|
||||
$("input[name='bank_user_name_weixin']").attr('lay-verify', 'required');
|
||||
$("input[name='bank_type_account_weixin']").attr('lay-verify', 'required');
|
||||
} else if (parseFloat(data.value) == 2) {
|
||||
$(".bank_card").addClass("layui-hide");
|
||||
$(".wixin-wrap").addClass("layui-hide");
|
||||
$(".alipay-wrap").removeClass("layui-hide");
|
||||
|
||||
$("input[name='bank_user_name_alipay']").attr('lay-verify', 'required');
|
||||
$("input[name='bank_type_account_alipay']").attr('lay-verify', 'required');
|
||||
} else if (parseFloat(data.value) == 3) {
|
||||
$(".bank_card").removeClass("layui-hide");
|
||||
$(".wixin-wrap").addClass("layui-hide");
|
||||
$(".alipay-wrap").addClass("layui-hide");
|
||||
|
||||
$("input[name='bank_type_name']").attr('lay-verify', 'required');
|
||||
$("input[name='bank_user_name']").attr('lay-verify', 'required');
|
||||
$("input[name='bank_type_account']").attr('lay-verify', 'required');
|
||||
}
|
||||
|
||||
wechatAuth.bankTypeChange(data.value);
|
||||
});
|
||||
|
||||
form.on('submit(save)', function (data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
let field = data.field;
|
||||
if (bankType == 1){
|
||||
field.bank_user_name = field.bank_user_name_weixin;
|
||||
field.bank_type_account = field.bank_type_account_weixin;
|
||||
} else if (bankType == 2) {
|
||||
field.bank_user_name = field.bank_user_name_alipay;
|
||||
field.bank_type_account = field.bank_type_account_alipay;
|
||||
}
|
||||
|
||||
if (!isSettlementRate) {
|
||||
field.settlement_rate = 0;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("store://shop/store/settlement"),
|
||||
data: field,
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 验证正整数
|
||||
form.verify({
|
||||
bank_type_name:function(value){
|
||||
if($("input[name='is_settlement']:checked").val() && parseInt($("input[name='bank_type']:checked").val()) == 3){
|
||||
if(value.length == 0){
|
||||
return '请输入开户行';
|
||||
}
|
||||
}
|
||||
},
|
||||
bank_user_name:function(value){
|
||||
if($("input[name='is_settlement']:checked").val() && parseInt($("input[name='bank_type']:checked").val()) == 3){
|
||||
if(value.length == 0){
|
||||
return '请输入户头';
|
||||
}
|
||||
}
|
||||
},
|
||||
bank_type_account:function(value){
|
||||
if($("input[name='is_settlement']:checked").val() && parseInt($("input[name='bank_type']:checked").val()) == 3){
|
||||
if(value.length == 0){
|
||||
return '请输入账户';
|
||||
}
|
||||
}
|
||||
},
|
||||
bank_user_name_weixin:function(value){
|
||||
if($("input[name='is_settlement']:checked").val() && parseInt($("input[name='bank_type']:checked").val()) == 1){
|
||||
if(value.length == 0){
|
||||
return '请输入微信名';
|
||||
}
|
||||
}
|
||||
},
|
||||
bank_user_name_alipay:function(value){
|
||||
if($("input[name='is_settlement']:checked").val() && parseInt($("input[name='bank_type']:checked").val()) == 2){
|
||||
if(value.length == 0){
|
||||
return '请输入真实名字';
|
||||
}
|
||||
}
|
||||
},
|
||||
bank_type_account_alipay:function(value){
|
||||
if($("input[name='is_settlement']:checked").val() && parseInt($("input[name='bank_type']:checked").val()) == 2){
|
||||
if(value.length == 0){
|
||||
return '请输入支付宝账号';
|
||||
}
|
||||
}
|
||||
},
|
||||
settlement_rate: function (value) {
|
||||
if (parseFloat(value) < 0 || parseFloat(value) > 100) {
|
||||
return '请输入0-100之间的数';
|
||||
}
|
||||
let len = value.split(".")[1] ? value.split(".")[1].length : 0;
|
||||
if (len > 2) {
|
||||
return '门店抽成比率最多两位小数';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
//微信授权操作
|
||||
function getWechatAuthInstance(){
|
||||
wechatAuth = {
|
||||
cache_key : '',
|
||||
interval: null,
|
||||
create: function (){
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("store://shop/store/createWechatAuthQrcode"),
|
||||
data: {},
|
||||
success: (res) => {
|
||||
if(res.code >= 0){
|
||||
this.cache_key = res.data.cache_key;
|
||||
$("#wechat_auth_qrcode img").attr('src', res.data.qrcode);
|
||||
this.startCheck();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
check: function (){
|
||||
//如果切换了页面就不要继续执行了
|
||||
if(location.hash.indexOf('store://shop/store/settlement') === -1){
|
||||
this.stopCheck();
|
||||
}
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("store://shop/store/getWechatAuthData"),
|
||||
data: {
|
||||
cache_key : this.cache_key,
|
||||
},
|
||||
success: (res) => {
|
||||
if (res.code >= 0 && res.data){
|
||||
$("#wechat_auth_qrcode .img-load").removeClass("layui-hide").html('已绑定成功<br/>点击重新绑定');
|
||||
$("input[name='bank_type_account_weixin']").val(res.data.openid)
|
||||
this.stopCheck();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
startCheck: function (){
|
||||
clearInterval(this.interval);
|
||||
this.interval = setInterval(()=>{
|
||||
this.check();
|
||||
}, 1000)
|
||||
},
|
||||
stopCheck: function(){
|
||||
clearInterval(this.interval);
|
||||
},
|
||||
init: function(){
|
||||
let img_load_dom = $("#wechat_auth_qrcode .img-load");
|
||||
img_load_dom.click(()=>{
|
||||
img_load_dom.addClass('layui-hide');
|
||||
this.create();
|
||||
})
|
||||
},
|
||||
bankTypeChange: function (bank_type){
|
||||
if(parseInt(bank_type) === 1){
|
||||
this.create();
|
||||
}else{
|
||||
this.stopCheck();
|
||||
}
|
||||
}
|
||||
}
|
||||
wechatAuth.init();
|
||||
}
|
||||
</script>
|
||||
269
addon/store/shop/view/store/tag.html
Executable file
@@ -0,0 +1,269 @@
|
||||
<style>
|
||||
.layui-layer-content {padding-bottom: 20px!important;}
|
||||
</style>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="addLabel()">添加标签</button>
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入门店标签名称" autocomplete="off" class="layui-input" maxlength="10">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="attr_class_list" lay-filter="attr_class_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="addLabel">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid"><span class="required">*</span>门店标签:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="label_name" type="text" placeholder="请输入门店标签名称" lay-verify="required" class="layui-input len-mid" maxlength="10">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row mid">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="editLabel">
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid"><span class="required">*</span>门店标签:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="label_name" type="text" value="{{ d.label_name }}" placeholder="请输入门店标签名称" lay-verify="required" class="layui-input len-mid" maxlength="10">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="label_id" value="{{ d.label_id }}">
|
||||
<div class="form-row mid">
|
||||
<button class="layui-btn" lay-submit lay-filter="edit_save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
<!-- 编辑排序 -->
|
||||
<script type="text/html" id="editSort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.label_id}}, this)" value="{{d.sort}}" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl, add_attr_index = -1,
|
||||
form, table;
|
||||
layui.use(['form', 'laytpl'], function() {
|
||||
var repeat_flag = false; //防重复标识
|
||||
laytpl = layui.laytpl;
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#attr_class_list',
|
||||
url: ns.url("store://shop/store/tag"),
|
||||
cols: [
|
||||
[{
|
||||
field: 'label_name',
|
||||
title: '标签名称',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
unresize: 'false',
|
||||
title: '创建时间',
|
||||
width: '20%',
|
||||
align: 'center',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
field: 'sort',
|
||||
width: '20%',
|
||||
title: '排序',
|
||||
templet: '#editSort',
|
||||
sort: true
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align: 'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit':
|
||||
editLabel(data);
|
||||
break;
|
||||
case 'delete':
|
||||
deleteLabel(data.label_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteLabel(id) {
|
||||
layer.confirm('确认删除该标签吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/store/deleteLabel"),
|
||||
data: {
|
||||
label_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url('store://shop/store/addLabel'),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(data) {
|
||||
layer.msg(data.message);
|
||||
if (data.code == 0) {
|
||||
table.reload();
|
||||
layer.close(add_attr_index);
|
||||
}
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
form.on('submit(edit_save)', function(data) {
|
||||
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url('store://shop/store/editLabel'),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(data) {
|
||||
layer.msg(data.message);
|
||||
if (data.code == 0) {
|
||||
table.reload();
|
||||
layer.close(add_attr_index);
|
||||
}
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
function addLabel() {
|
||||
var add_attr = $("#addLabel").html();
|
||||
laytpl(add_attr).render({}, function(html) {
|
||||
add_attr_index = layer.open({
|
||||
title: '添加门店标签',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['500px', '220px'],
|
||||
content: html
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function editLabel(data) {
|
||||
var add_attr = $("#editLabel").html();
|
||||
laytpl(add_attr).render(data, function(html) {
|
||||
add_attr_index = layer.open({
|
||||
title: '编辑门店标签',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['500px', '220px'],
|
||||
content: html
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function closeAttrLayer() {
|
||||
layer.close(add_attr_index);
|
||||
}
|
||||
|
||||
// 监听单元格编辑
|
||||
function editSort(id, event){
|
||||
var data = $(event).val();
|
||||
|
||||
if (data == '') {
|
||||
$(event).val(0);
|
||||
data = 0;
|
||||
}
|
||||
|
||||
if(!new RegExp("^-?[0-9]\\d*$").test(data)){
|
||||
layer.msg("排序号只能是整数");
|
||||
return ;
|
||||
}
|
||||
if(data<0){
|
||||
layer.msg("排序号必须大于0");
|
||||
return ;
|
||||
}
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url('store://shop/store/modifySort'),
|
||||
data: {
|
||||
label_id: id,
|
||||
sort: data
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if(res.code==0){
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
128
addon/store/shop/view/withdraw/detail.html
Executable file
@@ -0,0 +1,128 @@
|
||||
<link rel="stylesheet" href="STATIC_CSS/promotion_detail.css">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">结算信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="promotion-view">
|
||||
<div class="promotion-view-item">
|
||||
<label>结算编号:</label>
|
||||
<span>{$withdraw_info.withdraw_no}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>结算状态:</label>
|
||||
<span>{$withdraw_info.status_name}</span>
|
||||
</div>
|
||||
{if $withdraw_info['status'] == -1 || $withdraw_info['status'] == -2}
|
||||
<div class="promotion-view-item">
|
||||
<label>拒绝理由:</label>
|
||||
<span>{$withdraw_info.refuse_reason}</span>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="promotion-view-item">
|
||||
<label>结算金额:</label>
|
||||
<span>{$withdraw_info.money}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>转账方式:</label>
|
||||
<span>{$withdraw_info.transfer_type_name}</span>
|
||||
</div>
|
||||
|
||||
<div class="promotion-view-item">
|
||||
<label>结算类型:</label>
|
||||
<span>{$withdraw_info.settlement_type_name}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>结算申请时间:</label>
|
||||
<span>{:time_to_date($withdraw_info.apply_time)}</span>
|
||||
</div>
|
||||
{if $withdraw_info.transfer_type == "bank"}
|
||||
<div class="promotion-view-item">
|
||||
<label>银行名称:</label>
|
||||
<span>{$withdraw_info['bank_name']}</span>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="promotion-view-item">
|
||||
<label>结算收款账号:</label>
|
||||
<span>{$withdraw_info.account_number}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>结算方式:</label>
|
||||
<span>{$withdraw_info.transfer_type_name}</span>
|
||||
</div>
|
||||
|
||||
<div class="promotion-view-item">
|
||||
<label>真实姓名:</label>
|
||||
<span>{$withdraw_info.realname}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="promotion-view">
|
||||
{if !empty($withdraw_info['voucher_img'])}
|
||||
<div class="promotion-view-item-line">
|
||||
<label class="promotion-view-item-custom-label">转账凭证:</label>
|
||||
<div class="promotion-view-item-custom-box img-upload">
|
||||
<div class="upload-img-block icon">
|
||||
<div class="upload-img-box">
|
||||
{if condition="$withdraw_info.voucher_img"}
|
||||
<img layer-src src="{:img($withdraw_info.voucher_img)}" >
|
||||
{else/}
|
||||
<img layer-src src="__STATIC__/img/shape.png" />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if !empty($withdraw_info.voucher_desc)}
|
||||
<div class="promotion-view-item-line">
|
||||
<label class="promotion-view-item-custom-label">凭证说明:</label>
|
||||
<div class="promotion-view-item-custom-box">{$withdraw_info.voucher_desc}</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{if $withdraw_info.settlement_type != 'apply'}
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">周期结算</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="promotion-view">
|
||||
<div class="promotion-view-item">
|
||||
<label>周期结算编号:</label>
|
||||
<span>{$withdraw_info.settlement_info.settlement_no}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>周期开始时间:</label>
|
||||
<span>{:time_to_date($withdraw_info.settlement_info.start_time)}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>周期结束时间:</label>
|
||||
<span>{:time_to_date($withdraw_info.settlement_info.end_time)}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>结算订单总额:</label>
|
||||
<span>{$withdraw_info.settlement_info.order_money}</span>
|
||||
</div>
|
||||
|
||||
<div class="promotion-view-item">
|
||||
<label>结算总分销佣金:</label>
|
||||
<span>{$withdraw_info.settlement_info.commission}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="form-row sm">
|
||||
<button class="layui-btn layui-btn-primary" onclick="backStockWithdrawList()">返回</button>
|
||||
</div>
|
||||
<script>
|
||||
function backStockWithdrawList() {
|
||||
location.hash = ns.hash("store://shop/withdraw/lists");
|
||||
}
|
||||
</script>
|
||||
577
addon/store/shop/view/withdraw/lists.html
Executable file
@@ -0,0 +1,577 @@
|
||||
<style>
|
||||
.layui-card-body .content{width: 33.3%;}
|
||||
.layui-layout-admin .screen{margin-bottom: 15px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-card panel-content card-common card-brief">
|
||||
<div class="layui-card-header simple">
|
||||
<span class="card-title">结算概况</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
|
||||
<div class="content">
|
||||
<p class="title">待结算(元)</p>
|
||||
<p class="money">{$stat.total_account}</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">已结算(元)</p>
|
||||
<p class="money">{$stat.total_account_withdraw}</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p class="title">结算中(元)</p>
|
||||
<p class="money">{$stat.total_account_apply}</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">
|
||||
<select name="store_id" lay-filter="store_id">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$store_list" item="store"}
|
||||
<option value="{$store['store_id']}">{$store['store_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">结算方式</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="transfer_type">
|
||||
<option value="">全部</option>
|
||||
{foreach $transfer_type_list as $transfer_type_k=> $transfer_type_v}
|
||||
<option value="{$transfer_type_k}">{$transfer_type_v}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">结算类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="settlement_type">
|
||||
<option value="">全部</option>
|
||||
{foreach $settlement_type_list as $settlement_type_k=> $settlement_type_v}
|
||||
<option value="{$settlement_type_k}">{$settlement_type_v}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="status">
|
||||
<option value="all">全部</option>
|
||||
{foreach $status_list as $status_k=> $status_v}
|
||||
<option value="{$status_k}">{$status_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_date" id="start_time" placeholder="请输入开始时间" autocomplete="off" readonly>
|
||||
</div>
|
||||
<div class="layui-input-inline split">-</div>
|
||||
<div class="layui-input-inline end-time">
|
||||
<input type="text" class="layui-input" name="end_date" id="end_time" placeholder="请输入结束时间" autocomplete="off" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">转账时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="transfer_start_date" id="transfer_start_time" placeholder="请输入开始时间" autocomplete="off" readonly>
|
||||
</div>
|
||||
<div class="layui-input-inline split">-</div>
|
||||
<div class="layui-input-inline end-time">
|
||||
<input type="text" class="layui-input" name="transfer_end_date" id="transfer_end_time" placeholder="请输入结束时间" autocomplete="off" readonly>
|
||||
</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="withdraw_list" lay-filter="withdraw_list"></table>
|
||||
|
||||
<script type="text/html" id="status">
|
||||
{{# if(d.status == 0){ }}
|
||||
<div class="layui-elip text-color">{{ d.status_name }}</div>
|
||||
{{# }else if(d.status == 1){ }}
|
||||
<div class="layui-elip text-color">{{ d.status_name }}</div>
|
||||
{{# }else if(d.status == 2){ }}
|
||||
<div class="layui-elip" style="color: green">{{ d.status_name }}</div>
|
||||
{{# }else if(d.status == 3){ }}
|
||||
<div class="layui-elip" style="color: gray">{{ d.status_name }}</div>
|
||||
{{# }else if(d.status == -1){ }}
|
||||
<div class="layui-elip text" style="color: red">{{ d.status_name }}</div>
|
||||
<div class="layui-elip text" style="color: gray">{{d.refuse_reason}}</div>
|
||||
{{# }else if(d.status == -2){ }}
|
||||
<div class="layui-elip text" style="color: red">{{ d.status_name }}</div>
|
||||
<div class="layui-elip text" style="color: gray">{{d.refuse_reason}}</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<!--操作-->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="detail">查看</a>
|
||||
{{# if(d.status == 0){ }}
|
||||
<a href="javascript:;" class="layui-btn" lay-event="agree">同意</a>
|
||||
<a href="javascript:;" class="layui-btn" lay-event="refuse">拒绝</a>
|
||||
{{# }else if(d.status == 1){ }}
|
||||
{{# if((d.transfer_type != "bank" && (d.transfer_type != 'wechatpay' || (d.transfer_type == 'wechatpay' && !transfer_v3_type)) )){ }}
|
||||
<a href="javascript:;" class="layui-btn" lay-event="transfer">在线转账</a>
|
||||
{{# } }}
|
||||
{{# if(d.transfer_type != 'wechatpay' || (d.transfer_type == 'wechatpay' && !transfer_v3_type)){ }}
|
||||
<a href="javascript:;" class="layui-btn" lay-event="actiontransfer">手动转账</a>
|
||||
{{# } }}
|
||||
<a href="javascript:;" class="layui-btn" lay-event="refuse">拒绝</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!--时间-->
|
||||
<script type="text/html" id="apply_time">
|
||||
<div class="layui-elip" title="{{ns.time_to_date(d.apply_time)}}">{{ns.time_to_date(d.apply_time)}}</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table,upload;
|
||||
var transfer_v3_type = "{$transfer_v3_type}"
|
||||
layui.use(['form', 'laydate','laytpl'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate,
|
||||
currentDate = new Date(),
|
||||
laytpl = layui.laytpl,
|
||||
minDate = "";
|
||||
form.render();
|
||||
|
||||
currentDate.setDate(currentDate.getDate() - 7);
|
||||
|
||||
//开始时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
//结束时间
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
})
|
||||
|
||||
laydate.render({
|
||||
elem: '#transfer_start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#transfer_end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
/**
|
||||
* 重新渲染结束时间
|
||||
*/
|
||||
function reRender(){
|
||||
$("#end_time").remove();
|
||||
$(".end-time").html('<input type="text" class="layui-input" placeholder="结束时间" name="end_date" id="end_time" >');
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime',
|
||||
min: minDate
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 表格加载
|
||||
*/
|
||||
table = new Table({
|
||||
elem: '#withdraw_list',
|
||||
url: ns.url("store://shop/withdraw/lists"),
|
||||
cols: [
|
||||
[{
|
||||
field: 'store_name',
|
||||
title: '门店',
|
||||
width: '13%',
|
||||
unresize: 'false',
|
||||
},{
|
||||
field: 'telphone',
|
||||
title: '联系人',
|
||||
width: '11%',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
return data.telphone || '--';
|
||||
}
|
||||
}, {
|
||||
field: 'transfer_type_name',
|
||||
title: '结算方式',
|
||||
width: '10%',
|
||||
unresize: 'false',
|
||||
}, {
|
||||
field:'settlement_type_name',
|
||||
title: '结算类型',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
}, {
|
||||
field: 'money',
|
||||
title: '结算金额',
|
||||
width: '10%',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
templet: function(data) {
|
||||
return '¥'+ data.money
|
||||
}
|
||||
},{
|
||||
field: 'status_name',
|
||||
title: '结算状态',
|
||||
width: '10%',
|
||||
unresize: 'false',
|
||||
templet: '#status'
|
||||
}, {
|
||||
title: '申请时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: '#apply_time'
|
||||
}, {
|
||||
title: '转账时间',
|
||||
unresize: 'false',
|
||||
width: '13%',
|
||||
templet: function(data) {
|
||||
return `<div class="layui-elip" title="`+ ns.time_to_date(data.transfer_time) +`">`+ ns.time_to_date(data.transfer_time) +`</div>`
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch(obj.event){
|
||||
case 'detail':
|
||||
detail(data);
|
||||
break;
|
||||
case 'detail_refuse':
|
||||
layer.open({
|
||||
title: '拒绝理由',
|
||||
content: data.refuse_reason,
|
||||
})
|
||||
break;
|
||||
case 'agree':
|
||||
agree(data);
|
||||
break;
|
||||
case 'refuse':
|
||||
refuse(data);
|
||||
break;
|
||||
case 'transfer':
|
||||
transfer(data);
|
||||
break;
|
||||
case 'actiontransfer':
|
||||
laytpl($("#actiontransfer_html").html()).render(data, function(html) {
|
||||
layer_pass = layer.open({
|
||||
title: '结算转账',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['800px'],
|
||||
content: html,
|
||||
});
|
||||
});
|
||||
|
||||
//转账凭证
|
||||
upload = new Upload({
|
||||
elem: '#voucher_img'
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
//提交
|
||||
form.on('submit(actiontransfer)', function(data) {
|
||||
actiontransfer(data.field);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 查看详情
|
||||
*/
|
||||
function detail(field) {
|
||||
location.hash = ns.hash("store://shop/withdraw/detail",{withdraw_id:field.withdraw_id});
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动转账
|
||||
*/
|
||||
var transfer_repeat_flag = false;
|
||||
function transfer(field) {
|
||||
if(transfer_repeat_flag) return false;
|
||||
transfer_repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要进行自动转账吗?', function(index) {
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/withdraw/transfer"),
|
||||
data: field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
transfer_repeat_flag = false;
|
||||
if (res.code >= 0) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
});
|
||||
layer.closeAll();
|
||||
} else {
|
||||
layer.closeAll();
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
transfer_repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动转账
|
||||
*/
|
||||
var actiontransfer_repeat_flag = false;
|
||||
function actiontransfer(field) {
|
||||
if(actiontransfer_repeat_flag) return false;
|
||||
actiontransfer_repeat_flag = true;
|
||||
|
||||
// 删除图片
|
||||
// if(!data.field.certificate) upload.delete();
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/withdraw/transferfinish"),
|
||||
data: field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
actiontransfer_repeat_flag = false;
|
||||
if (res.code >= 0) {
|
||||
// table.reload({
|
||||
// page: {
|
||||
// curr: 1
|
||||
// }
|
||||
// });
|
||||
layer.closeAll();
|
||||
listenerHash(); // 刷新页面
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 同意
|
||||
*/
|
||||
var agree_repeat_flag = false;
|
||||
function agree(field) {
|
||||
if(agree_repeat_flag) return false;
|
||||
agree_repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要通过该转账申请吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/withdraw/agree"),
|
||||
data: field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
agree_repeat_flag = false;
|
||||
|
||||
layer.closeAll();
|
||||
if (res.code >= 0) {
|
||||
listenerHash(); // 刷新页面
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.closeAll();
|
||||
agree_repeat_flag = false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 拒绝
|
||||
*/
|
||||
var refuse_repeat_flag = false;
|
||||
function refuse(field) {
|
||||
layer.prompt({
|
||||
title: '拒绝理由',
|
||||
formType: 2,
|
||||
yes: function(index, layero) {
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
|
||||
if (value) {
|
||||
if(refuse_repeat_flag) return false;
|
||||
refuse_repeat_flag = true;
|
||||
|
||||
field.refuse_reason = value;
|
||||
$.ajax({
|
||||
url: ns.url("store://shop/withdraw/refuse"),
|
||||
data: field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
refuse_repeat_flag = false;
|
||||
|
||||
if (res.code >= 0) {
|
||||
listenerHash(); // 刷新页面
|
||||
}
|
||||
}
|
||||
});
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请输入拒绝理由!', {icon: 5, anim: 6});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function closePass() {
|
||||
layer.close(layer_pass);
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 在线转账html -->
|
||||
<script type="text/html" id="actiontransfer_html">
|
||||
<div class="layui-form" lay-filter="form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">结算类型:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text ">{{d.transfer_type_name}}</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# if(d.transfer_type == "bank"){ }}
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">账户名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text ">{{d.bank_name}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">银行账号:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text ">{{d.account_number}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">真实姓名:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text ">{{ d.realname }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# }else if(d.transfer_type == "alipay"){ }}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">支付宝账号:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text ">{{d.account_number}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">真实姓名:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text ">{{ d.realname }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# }else if(d.transfer_type == "wechatpay"){ }}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">微信号:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text ">{{d.account_number}}</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">结算金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text">{{d.money}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">转账凭证:</label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block">
|
||||
<div class="upload-img-box">
|
||||
<div class="upload-default" id="voucher_img">
|
||||
<div class="upload">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<div>
|
||||
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
|
||||
</div>
|
||||
<div class="replace_img js-replace">点击替换</div>
|
||||
</div>
|
||||
<input type="hidden" name="voucher_img" >
|
||||
</div>
|
||||
<!-- <p id="certificate" class="no-replace">替换</p>
|
||||
<input type="hidden" name="certificate" >
|
||||
<i class="del">x</i> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">转账凭证说明:</label>
|
||||
<div class="layui-input-block len-long">
|
||||
<textarea name="voucher_desc" class="layui-textarea" maxlength="150"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="withdraw_id" value="{{ d.withdraw_id }}">
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="actiontransfer">确定</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closePass()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||