初始上传

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

View File

@@ -0,0 +1,162 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>打印发货单</title>
<style media="print" type="text/css">.noprint{display:none}</style>
<style media="screen,print" type="text/css">
.order-print{
padding: 20px;
border: 1px dashed #ccc;
}
.order-print .print-title{
font-size: 24px;
text-align: center;
font-weight: normal;
}
.order-print .order-info{
width: 100%;
font-size: 12px;
border-collapse: collapse;
}
.order-print .order-info thead .basic-info{
display: flex;
height: 20px;
line-height: 20px;
font-weight: normal;
}
.order-print .order-info thead .basic-info:last-of-type{
margin-bottom: 15px;
}
.order-print .order-info thead .basic-info span{
flex: 1;
text-align: left;
}
.order-print .order-info thead tr:nth-child(3) th{
border: none;
border-top: 2px solid;
border-bottom: 2px solid;
padding: 2px 0;
background-color: #e7e7e7;
}
.order-print .order-info tbody tr td, .order-print .order-info tfoot th{
padding: 8px 0;
}
.order-print .order-info tbody .table-foot td{
border-top: 2px solid #000;
border-bottom: 2px solid #000;
background-color: #f7f7f7;
}
.order-print .order-info tfoot th{
text-align: left;
border-bottom: 2px solid #000;
}
.order-print .order-info tfoot th span{
display: inline-block;
height: 20px;
width: 172px;
line-height: 20px;
font-weight: normal;
}
</style>
</head>
<body>
<div class="order-print">
<table class="order-info">
<thead>
<tr>
<th colspan="5">
<h1 class="print-title">{$order_detail.site_name} 发货单</h1>
</th>
</tr>
<tr>
<th colspan="5">
<div class="basic-info">
<span>收货人:{$order_detail.name}</span>
<span>电话:{$order_detail.mobile}</span>
</div>
<div class="basic-info">地址:{$order_detail.full_address} {$order_detail.address}</div>
<div class="basic-info">
<span>订单号:{$order_detail.order_no}</span>
<span>下单时间:{$order_detail.create_time|date="Y-m-d"}</span>
</div>
{if !empty($order_detail.promotion_type_name)}
<div class="basic-info">
<span>订单活动:{$order_detail.promotion_type_name}</span>
</div>
{/if}
<div class="basic-info">
<span>卖家备注:{$order_detail.remark}</span>
</div>
<div class="basic-info">
<span>买家备注:{$order_detail.buyer_message}</span>
</div>
</th>
</tr>
<tr>
<th align="center">序号</th>
<th align="left">商品名称</th>
<th align="left" style="width: 100px">商品编码</th>
<th align="left">单价(元)</th>
<th align="left">数量</th>
<th align="left">小计(元)</th>
</tr>
</thead>
<tbody>
{php}
$total_goods_num = 0;
$total_goods_money = 0.00;
$promotion_money = 0.00;
{/php}
{foreach $order_detail['order_goods'] as $list_k => $order_goods_item}
{php}
$total_goods_num += $order_goods_item['num'];
$total_goods_money += $order_goods_item['goods_money'];
$promotion_money += $order_goods_item['promotion_money'] + $order_goods_item['coupon_money'] + $order_goods_item['adjust_money'] + $order_goods_item['point_money'];
{/php}
<tr class="table-body">
<td align="center">{$list_k+1}</td>
<td class="tl">{$order_goods_item.sku_name}</td>
<td class="tl" style="width: 100px">{$order_goods_item.sku_no}</td>
<td class="tl">{$order_goods_item.price}</td>
<td>{$order_goods_item.num}</td>
<td class="tl">{$order_goods_item.goods_money}</td>
</tr>
{/foreach}
{php}
$total_goods_money = number_format($total_goods_money,2);
$order_money = number_format($order_detail['order_money'] - $order_detail['refund_money'], 2);
if($order_money < 0 || empty($order_detail['order_goods'])) $order_money = 0.00;
$promotion_money = number_format($promotion_money,2);
{/php}
<tr class="table-foot">
<td></td>
<td colspan="3">合计</td>
<td>{$total_goods_num}</td>
<td>{$total_goods_money}</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="6">
<span>总计:¥{$total_goods_money}</span>
<span>运费:¥{$order_detail.delivery_money}</span>
<span>优惠:¥{$promotion_money}</span>
<span>订单总额:¥{$order_money}</span>
<span>店铺:{$order_detail.site_name}</span>
</th>
</tr>
</tfoot>
</table>
</div>
</body>
</html>

444
app/shop/view/order/config.html Executable file
View File

@@ -0,0 +1,444 @@
<style>
.layui-card.card-common.card-brief .balance-boday {
padding-left: 20px
}
.layui-card.card-common.card-brief .layui-form-radio {
margin: 0px
}
.invoice-content-block .layui-form-select {
margin-bottom: 10px
}
.invoice-content-block .layui-form-select:last-child {
margin-bottom: 0
}
.invoice-content-block .item {
position: relative;
margin-bottom: 10px
}
.invoice-content-block .item .layui-icon-close {
font-size: 12px;
position: absolute;
top: -8px;
right: -8px;
width: 16px;
height: 16px;
line-height: 16px;
text-align: center;
color: #fff;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
background: rgba(0, 0, 0, .3);
cursor: pointer
}
.invoice-tip {
padding-left: 90px;
}
.examples {
cursor: pointer;
}
.examples2 {
cursor: pointer;
font-weight: 600;
}
.radio-type{
display: none;
}
</style>
<div class="layui-form">
<div class="layui-card card-common card-brief top head">
<div class="layui-card-header">
<span class="card-title">余额支付</span>
</div>
<div class="layui-form-item balance-boday">
<label class="layui-form-label">是否启用:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="balance_show" value="0" title="关闭" autocomplete="off" class="layui-input len-long" {if $balance_config.balance_show==0} checked {/if}>
<input type="radio" name="balance_show" value="1" title="开启" autocomplete="off" class="layui-input len-long" {if $balance_config.balance_show==1} checked {/if}>
</div>
</div>
<div class="word-aux">当启用余额支付,在客户端待支付订单会显示使用余额,反之,则不显示。 <a onclick="showDemo()" class="examples text-color">查看示例</a></div>
</div>
</div>
<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">
<div class="layui-input-inline">
<input type="number" name="order_auto_close_time" value="{$order_event_time_config.auto_close ?? 0}" lay-verify="closetime" autocomplete="off" class="layui-input len-short">
</div>
<span class="layui-form-mid">分钟</span>
</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="number" name="order_auto_take_delivery_time" value="{$order_event_time_config.auto_take_delivery ?? ''}" lay-verify="deliverytime" autocomplete="off" class="layui-input len-short">
</div>
<span class="layui-form-mid"></span>
</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="number" name="order_auto_complete_time" value="{$order_event_time_config.auto_complete ?? ''}" lay-verify="positiv" autocomplete="off" class="layui-input len-short">
</div>
<span class="layui-form-mid"></span>
</div>
<div class="word-aux">收货后多长时间订单自动完成设置为0时表示订单收货后立即完成</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="number" name="after_sales_time" value="{$order_event_time_config.after_sales_time ?? 0}" lay-verify="positivEinteger" autocomplete="off" class="layui-input len-short">
</div>
<span class="layui-form-mid"></span>
</div>
<div class="word-aux">订单完成后多长时间内可申请售后设置为0则订单完成后不可售后</div>
</div>
</div>
</div>
<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">
<div class="layui-input-inline">
<input type="radio" name="evaluate_status" value="0" title="关闭" autocomplete="off" class="layui-input len-long" {if $order_evaluate_config.evaluate_status==0} checked {/if}>
<input type="radio" name="evaluate_status" value="1" title="开启" autocomplete="off" class="layui-input len-long" {if $order_evaluate_config.evaluate_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="layui-input-inline">
<input type="radio" name="evaluate_show" value="0" title="关闭" autocomplete="off" class="layui-input len-long" {if $order_evaluate_config.evaluate_show==0} checked {/if}>
<input type="radio" name="evaluate_show" value="1" title="开启" autocomplete="off" class="layui-input len-long" {if $order_evaluate_config.evaluate_show==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="layui-input-inline">
<input type="radio" name="evaluate_audit" value="0" title="关闭" autocomplete="off" class="layui-input len-long" {if $order_evaluate_config.evaluate_audit==0} checked {/if}>
<input type="radio" name="evaluate_audit" value="1" title="开启" autocomplete="off" class="layui-input len-long" {if $order_evaluate_config.evaluate_audit==1} checked {/if}>
</div>
</div>
<div class="word-aux">评价是否需要后台审核</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief head">
<div class="layui-card-header">
<span class="card-title">语音提醒 &nbsp;&nbsp;<a class="text-color" style="font-weight: normal;font-size: 12px;" href="https://www.kancloud.cn/niucloud/niushop_b2c_v5/3238481" target="_blank">配置文档(开启语音提醒需要开启推送设置)</a></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" id="order_pay_audio_box">
<audio controls height="100" width="100">
<source src="{:img($order_remind_config.order_pay_audio)}" type="audio/mpeg">
</audio>
</div>
<div class="layui-input-inline">
<span class="text-color" style="cursor: pointer;" id="upload_order_pay_audio">更换</span>
</div>
<input type="hidden" name="order_remind_order_pay_audio" value="{$order_remind_config.order_pay_audio}"/>
</div>
<div class="word-aux" style="clear: both;">
<p>当用户通过pc或小程序下单并支付成功时对应的门店收银台会通过语音方式进行提醒。</p>
<p>目前只支持mp3和wav格式的语音。</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收款成功:</label>
<div class="layui-input-block">
<div class="layui-input-inline" id="cashier_order_pay_audio_box">
<audio controls height="100" width="100">
<source src="{:img($order_remind_config.cashier_order_pay_audio)}" type="audio/mpeg">
</audio>
</div>
<div class="layui-input-inline">
<span class="text-color" style="cursor: pointer;" id="upload_cashier_order_pay_audio">更换</span>
</div>
<input type="hidden" name="order_remind_cashier_order_pay_audio" value="{$order_remind_config.cashier_order_pay_audio}"/>
</div>
<div class="word-aux" style="clear: both;">
<p>当用户在门店收银台直接下单,支付成功后会通过语音方式进行提醒。</p>
<p>目前只支持mp3和wav格式的语音。</p>
</div>
</div>
</div>
</div>
<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"><span class="required">*</span>未发货自动退款:</label>
<div class="layui-input-inline">
<input type="radio" name="auto_refund" value="0" title="关闭" autocomplete="off" class="layui-input len-long" {if $order_refund_config.auto_refund==0} checked {/if}>
<input type="radio" name="auto_refund" value="1" title="开启" autocomplete="off" class="layui-input len-long" {if $order_refund_config.auto_refund==1} checked {/if}>
</div>
</div>
<div class="word-aux">开启后,未发货申请退款将自动同意并转账,否则需要审核</div>
</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-block">
<textarea name="order_refund_reason_type" class="layui-textarea len-long" maxlength="150">{$order_refund_config.reason_type}</textarea>
</div>
<div class="word-aux">每行一个退款原因</div>
</div>
</div>
</div>
<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"><span class="required">*</span>发票开关:</label>
<div class="layui-input-inline">
<input type="radio" name="invoice_status" value="0" title="关闭" lay-filter='postage' autocomplete="off" class="layui-input len-long" {if $order_event_time_config.invoice_status==0} checked {/if}>
<input type="radio" name="invoice_status" value="1" title="开启" lay-filter='postage' autocomplete="off" class="layui-input len-long" {if $order_event_time_config.invoice_status==1} checked {/if}>
</div>
</div>
<div class="layui-form-item radio-type-box {if $order_event_time_config.invoice_status==0} radio-type {/if}">
<label class="layui-form-label"><span class="required">*</span>发票税率:</label>
<div class="layui-input-inline">
<input type="number" name="invoice_rate" min="0" lay-verify="required" value="{$order_event_time_config.invoice_rate}" placeholder="请输入税率" autocomplete="off" class="layui-input len-short">
</div>
<span class="layui-form-mid">%</span>
</div>
<div class="layui-form-item invoice-content-block radio-type-box {if $order_event_time_config.invoice_status==0} radio-type {/if}">
<label class="layui-form-label"><span class="required">*</span>发票内容:</label>
<div class="layui-input-inline invoice-content-box">
<input type="hidden" lay-verify="invoice_content2">
{if !empty($order_event_time_config.invoice_content)}
{foreach $order_event_time_config.invoice_content as $k => $v}
<div class="item">
<input type="text" name="invoice_content[]" lay-verify="invoice_content" value="{$v}" placeholder="请输入发票内容" autocomplete="off" class="layui-input len-short short-required">
<i class="layui-icon layui-icon-close"></i>
</div>
{/foreach}
{else/}
<div class="item">
<input type="text" name="invoice_content[]" lay-verify="invoice_content" value="" placeholder="请输入发票内容" autocomplete="off" class="layui-input len-short short-required">
<i class="layui-icon layui-icon-close"></i>
</div>
{/if}
</div>
<a class="layui-btn layui-btn-primary add-invoice-content-button">添加</a>
</div>
<div class="layui-form-item radio-type-box {if $order_event_time_config.invoice_status==0} radio-type {/if}">
<label class="layui-form-label"><span class="required">*</span>邮寄费用:</label>
<div class="layui-input-block">
<input type="number" name="invoice_money" min="0" lay-verify="required" value="{$order_event_time_config.invoice_money}" placeholder="请输入费用" autocomplete="off" class="layui-input len-short">
</div>
</div>
<div class="layui-form-item radio-type-box {if $order_event_time_config.invoice_status==0} radio-type {/if}">
<label class="layui-form-label"><span class="required">*</span>支持发票类型:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="hidden" lay-verify="support_invoice">
<input type="checkbox" class="support-invoice-type" name="invoice_type[]" value="1" title="普通发票" lay-skin="primary" {if !empty($order_event_time_config.invoice_type) && in_array(1, $order_event_time_config['invoice_type'])}checked{/if}>
<input type="checkbox" class="support-invoice-type2" name="invoice_type[]" value="2" title="电子发票" lay-skin="primary" {if !empty($order_event_time_config.invoice_type) && in_array(2, $order_event_time_config['invoice_type'])}checked{/if}>
</div>
</div>
</div>
<div class="layui-form-item radio-type-box {if $order_event_time_config.invoice_status==0} radio-type {/if}">
<label class="invoice-tip text-color">注:普通发票需要给客户进行邮寄,电子发票需要给客户发送对应预留邮件 <a onclick="showDemo2()" class="examples2 text-color">查看示例</a></label>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
</div>
</div>
<script>
layui.use(['form', 'upload'], function() {
var form = layui.form,
upload = layui.upload,
repeat_flag = false; //防重复标识
form.render();
var audio_arr = ['order_pay_audio', 'cashier_order_pay_audio'];
audio_arr.forEach((field)=>{
upload.render({
elem: '#upload_'+field,
url: ns.url('shop/upload/audio'),
accept: "audio",
done: function(res){
if(res.code >= 0){
layer.msg('上传成功');
$("input[name='order_remind_"+field+"']").val(res.data.path);
$("#"+field+"_box").html(`<audio controls height="100" width="100">
<source src="${ns.img(res.data.path)}" type="audio/mpeg">
</audio>`);
}else{
layer.msg(res.message);
}
}
});
})
form.on('submit(save)', function(data) {
var value = $("input[name='invoice_rate']").val();
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 1) {
layer.msg("发票税率最多保留一位小数!", {icon: 5, anim: 6});
return;
}
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
url: ns.url("shop/order/config"),
data: data.field,
dataType: 'JSON',
success: function(res) {
repeat_flag = false;
layer.msg(res.message);
}
});
});
form.on('radio(postage)',function(data){
if(this.value == 1){
$('.radio-type-box').removeClass("radio-type")
}else if( this.value == 0){
$('.radio-type-box').addClass("radio-type")
}
})
// 验证正整数
form.verify({
support_invoice:function(value){
if(parseInt($("input[name='invoice_status']:checked").val().toString()) == 1){
if($('.support-invoice-type').is(':checked') == false && $('.support-invoice-type2').is(':checked') == false ){
return '发票类型不能为空';
}
}
},
invoice_content2:function(value){
if( $('.invoice-content-box > .item').length == 0 && parseInt($("input[name='invoice_status']:checked").val().toString()) == 1 ){
return '发票内容不能为空';
}
},
positivEinteger: function(value) {
if (!new RegExp("^(\\d|[1-9]\\d|99)$").test(value)) {
return '请输入0-99之间的正整数';
}
},
positiv: function(value) {
if (!new RegExp("^[0-9]+$").test(value)) {
return '时间不能小于0且必须是整数';
}
},
invoice_content: function(value) {
if (parseInt($("input[name='invoice_status']:checked").val().toString()) == 1) {
if (value == "") {
return '发票内不能为空';
}
}
},
closetime: function(value) {
if (!new RegExp("^[0-9]+$").test(value)) {
return '自动关闭时间须是整数天数!';
}
if (parseInt(value) < 1) {
return '自动关闭时间须大于0天';
}
},
deliverytime: function(value) {
if (!ns.getRegexp('>0num').test(value)) {
return '自动收货天数必须为大于零的整数!';
}
},
});
//添加发票内容
$(".add-invoice-content-button").click(function() {
var html = '';
html += '<div class="item">';
html +=
'<input type="text" name="invoice_content[]" lay-verify="invoice_content" value="" placeholder="请输入发票内容" autocomplete="off" class="layui-input len-short" >';
html += '<i class="layui-icon layui-icon-close" ></i>';
html += '</div>';
$(".invoice-content-box").append(html);
});
//删除发票内容
$('.invoice-content-block ').on('click', ".layui-icon-close", function() {
$(this).parent().remove();
});
});
function showDemo() {
layer.open({
title: '查看示例',
type: 1,
area: ['500px', '660px'],
content: '<img style="margin:20px 80px;" src="SHOP_IMG/yue_pay.png">'
})
}
function showDemo2() {
layer.open({
title: '查看示例',
type: 1,
area: ['500px', '660px'],
content: '<img style="margin:20px 80px;" src="SHOP_IMG/fapiao.png">'
})
}
</script>

620
app/shop/view/order/detail.html Executable file
View File

@@ -0,0 +1,620 @@
<link rel="stylesheet" href="SHOP_CSS/order_detail.css"/>
<link rel="stylesheet" href="SHOP_CSS/package.css"/>
<!-- 订单详情、订单状态 -->
<div class="layui-card card-common card-brief order-detail">
<div class="layui-card-header">
<span class="card-title">订单详情</span>
</div>
<div class="order-information order-information-bottom layui-card-body">
<div class="order-information-contentOne">
<div class="contentOne-content">
<div class="contentOne-content-title">交易流水号:</div>
<div class="contentOne-content-text text-num">{$order_detail['out_trade_no']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">订单编号:</div>
<div class="contentOne-content-text text-num">{$order_detail['order_no']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">订单类型:</div>
<div class="contentOne-content-text">{$order_detail['order_type_name']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">订单来源:</div>
<div class="contentOne-content-text">{$order_detail.order_from_name}</div>
</div>
{if $order_detail.pay_status == 1}
<div class="contentOne-content">
<div class="contentOne-content-title">付款方式:</div>
<div class="contentOne-content-text">{$order_detail.pay_type_name}</div>
</div>
{/if}
<div class="contentOne-content">
<div class="contentOne-content-title">买家:</div>
<div class="contentOne-content-text"><a class="text-color" href="javascript:toMemberDetail();">{$order_detail.nickname}</a></div>
</div>
</div>
<div class="order-information-contentTwo">
<div class="contentOne-content">
<div class="contentOne-content-title">配送方式:</div>
<div class="contentOne-content-text">{$order_detail['delivery_type_name']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">收货人:</div>
<div class="contentOne-content-text">{$order_detail['name']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">联系电话:</div>
<div class="contentOne-content-text">{$order_detail['mobile']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">收货地址:</div>
<input type="text" class="address" id="address" value="{$order_detail['full_address']}-{$order_detail['address']}">
<div class="contentOne-content-text contentOne-content-text-die" title="{$order_detail['full_address']}-{$order_detail['address']}">{$order_detail['full_address']}-{$order_detail['address']}</div>
<div class="copy-icon-box"><a href="javascript:ns.copy('address');" class="iconfont iconfuzhi" style="margin-top: 4px"></a></div>
</div>
</div>
<div class="order-information-contentTwo">
<div class="contentOne-content">
<div class="contentOne-content-title">营销活动:</div>
<div class="contentOne-content-text">{if empty($order_detail['promotion_type_name'])}-{else/}{$order_detail['promotion_type_name']}{/if}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">买家留言:</div>
<div class="contentOne-content-text contentOne-content-text-die">
{if $order_detail['buyer_message'] == ""}
-
{else/}
{$order_detail['buyer_message']}
{/if}
</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">备注:</div>
<div class="contentOne-content-text">
{if $order_detail['remark'] == ""}
-
{else/}
{$order_detail['remark']}
{/if}
</div>
</div>
</div>
</div>
<div class="layui-card-header">
<span class="card-title">订单状态</span>
</div>
<div class="order-information-contentOne order-orderStatus-contentOne layui-card-body">
<div class="contentOne-content">
<div class="contentOne-content-title">订单状态:</div>
<div class="contentOne-content-text contentOne-content-textNew">{$order_detail.order_status_name}</div>
</div>
<div class="contentTow-operation">
<div class="contentTow-operation-content bg-color-light-9 contentTow-operation-new" onclick="orderRemark('{$order_detail.order_id}')">备注</div>
{php}
$order_json_data = json_decode($order_detail['order_status_action'], true);
$action = $order_json_data['action'];
{/php}
{foreach $action as $action_k => $action_item}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new bg-color-light-9" href="javascript:orderAction('{$action_item.action}', '{$order_detail.order_id}')">{$action_item.title}</a>
{/foreach}
{if in_array($order_detail.order_type,[1,2,3]) && $order_detail.order_status != -1}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new bg-color-light-9" href="javascript:printDeliverOrder('{$order_detail.order_id}');" >打印发货单</a>
{/if}
{if addon_is_exit("printer") && $order_detail.order_status != -1}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new bg-color-light-9" href="javascript:printTicket('{$order_detail.order_id}');" >打印小票</a>
{/if}
{if $order_detail.order_type == 1 && $order_detail.order_status == 1}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new bg-color-light-9" href="javascript:orderPrintElectronicsheet('{$order_detail.order_id}');" >打印电子面单</a>
{/if}
</div>
<div class="orderStatus">
<div class="orderStatus-content-title">提醒:</div>
<div class="orderStatus-content-text">
<p class="text-tile">买家付款成功后,货款将直接进入您的商户号(微信、支付宝)</p>
<p class="text-tile">请及时关注你发出的包裹状态,确保可以配送至买家手中</p>
<p class="text-tile">如果买家表示没收到货或货物有问题,请及时联系买家处理,友好协商</p>
</div>
</div>
</div>
{if isset($order_detail.form)}
<!-- 表单信息 -->
<div class="formFields">
<div class="layui-card-header">
<span class="card-title">表单信息</span>
</div>
<div class="order-information order-formFields layui-card-body">
{foreach name="$order_detail.form" item="vo"}
<div class="contentOne-content">
<div class="contentOne-content-title">{$vo.value.title}</div>
<div class="contentOne-content-text">
{if $vo.controller == 'Img'}
{foreach name="$vo.img_lists" item="io"}
<div class="form-img">
<div class="form-img-wrap">
<img src="{:img($io)}" layer-src>
</div>
</div>
{/foreach}
{else/}
{if isset($vo.val)}
{$vo.val}
{/if}
{/if}
</div>
</div>
{/foreach}
</div>
</div>
{/if}
{if $order_detail['is_invoice'] == 1}
<!-- 发票信息 -->
<div class="formFields">
<div class="layui-card-header">
<span class="card-title">发票信息</span>
</div>
<div class="order-information order-formFields layui-card-body">
<div class="contentOne-content">
<div class="contentOne-content-title">发票类型:</div>
<div class="contentOne-content-text">{if $order_detail['invoice_type'] == 1}纸质{else/}电子{/if}{if $order_detail['is_tax_invoice'] == 1}专票{else/}普票{/if}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票抬头:</div>
<div class="contentOne-content-text">{$order_detail['invoice_title']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票抬头类型:</div>
<div class="contentOne-content-text">{$order_detail['invoice_title_type'] == 1 ? '个人' : '企业'}</div>
</div>
{if $order_detail['invoice_title_type'] == 2}
<div class="contentOne-content">
<div class="contentOne-content-title">纳税人识别号:</div>
<div class="contentOne-content-text">{$order_detail['taxpayer_number']}</div>
</div>
{/if}
<div class="contentOne-content">
<div class="contentOne-content-title">发票内容:</div>
<div class="contentOne-content-text">{$order_detail['invoice_content']}</div>
</div>
{if $order_detail['invoice_type'] == 1}
<div class="contentOne-content">
<div class="contentOne-content-title">发票邮寄地址:</div>
<div class="contentOne-content-text">{$order_detail['invoice_full_address']}</div>
</div>
{else/}
<div class="contentOne-content">
<div class="contentOne-content-title">发票接收邮件:</div>
<div class="contentOne-content-text">{$order_detail['invoice_email']}</div>
</div>
{/if}
<div class="contentOne-content">
<div class="contentOne-content-title">发票费用:</div>
<div class="contentOne-content-text">¥{$order_detail.invoice_money}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票税率:</div>
<div class="contentOne-content-text">{$order_detail.invoice_rate}%</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票邮寄费用:</div>
<div class="contentOne-content-text">¥{$order_detail.invoice_delivery_money}</div>
</div>
</div>
</div>
{/if}
</div>
{if !empty($order_detail['package_list'])}
<!-- 物流信息 -->
<div class="distribution layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">物流信息</span>
</div>
<div class="order-information layui-card-body">
<div class="order-information-contentOne order-package">
<ul class="package-list">
{foreach $order_detail['package_list'] as $package_k => $package_v}
<li {if $package_k == 0}class="layui-this bg-color-light-9"{/if}>{$package_v.package_name}</li>
{/foreach}
</ul>
<div class="order-package-content">
{foreach $order_detail['package_list'] as $package_k => $package_v}
<div class="layui-tab-item{if $package_k == 0} layui-show{/if}">
<div class="package-inner">
<div class="package-head">
<div class="contentOne-content">
<label class="contentOne-content-title">发货时间:</label>
<div class="contentOne-content-text">
{:time_to_date($package_v["delivery_time"])}
</div>
</div>
{if $order_detail.delivery_type == 'express' && $package_v.delivery_type == 1}
<div class="contentOne-content">
<label class="contentOne-content-title">物流公司:</label>
<div class="contentOne-content-text">{$package_v.express_company_name}</div>
</div>
<div class="contentOne-content">
<label class="contentOne-content-title">运单号:</label>
<div class="contentOne-content-text">{$package_v.delivery_no}</div>
</div>
{/if}
<div class="contentOne-content">
{php}
$packageV = json_encode($package_v);
{/php}
{if in_array($order_detail.order_status,[1,3])}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new bg-color-light-9" onclick="logisticsOperation('{$order_detail.order_id}','{$package_v.id}',{$packageV})">修改物流</a>
{/if}
</div>
</div>
<div class="package-body">
<div class="goods-list">
{foreach $package_v['goods_list'] as $goods_k => $goods_v }
<div class="goods-item">
<div class="package-inner-goods-item-inner">
<div class="package-inner-goods-item-image"><img layer-src src="{:img($goods_v.sku_image,'')}"></div>
<div class="package-inner-goods-item-info">
<p class="package-inner-goods-item-name multi-line-hiding" title="{:$goods_v.sku_name}">{:$goods_v.sku_name}</p>
<p class="package-inner-goods-item-name">数量:{$goods_v.num}</p>
</div>
</div>
</div>
{/foreach}
</div>
</div>
<div class="package-inner-express">
<div class="package-inner-content-item">
<div class="package-head">
{if $order_detail.delivery_type == 'express' && $package_v.delivery_type == 1}
<div class="contentOne-content" style="padding-right: 20px;">
<label class="contentOne-content-title">物流状态:</label>
<div class="contentOne-content-text">
{if $package_v.trace.success}
{$package_v.trace.status_name}
{else/}
{$package_v.trace.reason}
{/if}
</div>
</div>
{/if}
{if $package_v.type != 'electronicsheet'}
<!--<div class="contentOne-content">
<a onclick="printElectronicsheet({$order_detail.order_id})" class="contentTow-operation-content bg-color-light-9 contentTow-operation-new bg-color-light-9">重新打印电子面单</a>
</div>-->
{/if}
</div>
</div>
{if $package_v.trace.success}
<div class="shop-operation-time">
<ul class="layui-timeline">
{foreach $package_v.trace.list as $trace_k => $trace_v}
<li class="layui-timeline-item">
<div class="layui-time-left">
<p>{:date('Y-m-d', strtotime($trace_v.datetime))}</p>
<p>{:date('H:i:s', strtotime($trace_v.datetime))}</p>
</div>
<div class="layui-icon layui-timeline-axis">
<span class="layui-icon-center"></span>
</div>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">{$trace_v.remark}</div>
</div>
</li>
{/foreach}
</ul>
</div>
{/if}
</div>
</div>
</div>
{/foreach}
</div>
</div>
</div>
</div>
{/if}
<!-- 商品信息、订单操作日志 -->
<div class="shop-information layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">商品信息</span>
</div>
<div class="shop-information-table layui-card-body">
<table lay-filter="parse-table-order-product" lay-skin="line">
<thead>
<tr class="table-trOne">
<th lay-data="{field:'product_name', width:200}">商品</th>
<th lay-data="{field:'price'}">价格</th>
<th lay-data="{field:'sku_no'}">商品编码</th>
<th lay-data="{field:'sale_num'}">数量</th>
<th lay-data="{field:'total_money'}">小计(元)</th>
<th lay-data="{field:'refund_status'}">退款状态</th>
</tr>
</thead>
<tbody>
{foreach $order_detail['order_goods'] as $list_k => $order_goods_item}
<tr class="table-trTow">
<td>{$order_goods_item.sku_name}</td>
<td>{$order_goods_item.price}</td>
<td>{$order_goods_item.sku_no}</td>
<td>{$order_goods_item.num}</td>
<td>{$order_goods_item.goods_money}</td>
<td>
{if $order_goods_item.refund_status != 0}
<div><a class="" href='{:href_url("shop/orderrefund/detail?order_goods_id=".$order_goods_item["order_goods_id"])}'>{$order_goods_item.refund_status_name}</a></div>
{php}
$refund_money = $order_goods_item['shop_active_refund_money']+$order_goods_item['refund_real_money'];
$refund_money = sprintf("%.2f",$refund_money);
{/php}
{if $refund_money > 0}
<div style="color:red;">¥{$refund_money}</div>
{/if}
{elseif $order_detail.is_enable_refund == 1 && $order_detail.promotion_type != 'blindbox' && $order_goods_item.shop_active_refund == 0 && $order_goods_item.real_goods_money > 0}
<div><a class="text-color" href="javascript:;" style="border:1px solid;padding:2px;" onclick="shopActiveRefund('{$order_goods_item.order_goods_id}')" >主动退款</a></div>
{/if}
</td>
</tr>
{if isset($order_goods_item.form)}
<tr>
<td colspan="6">
<div class="order-goods-form">
{foreach name="$order_goods_item.form" item="vo"}
<div class="form-item">
<div class="field-title">{$vo.value.title}</div>
<div class="field-content">
{if $vo.controller == 'Img'}
{foreach name="$vo.img_lists" item="io"}
<div class="form-img">
<div class="form-img-wrap">
<img src="{:img($io)}" layer-src>
</div>
</div>
{/foreach}
{else/}
{if isset($vo.val)}
{$vo.val}
{/if}
{/if}
</div>
</div>
{/foreach}
</div>
</td>
</tr>
{/if}
{/foreach}
</tbody>
</table>
<div class="table-trThree table-trFour">
<div>
<p>商品总额:<span>¥{$order_detail["goods_money"]}</span></p>
</div>
<div>
<p>店铺优惠券:<span>¥{$order_detail["coupon_money"]}</span></p>
</div>
<div>
<p>店铺优惠:<span>¥{$order_detail["promotion_money"]}</span></p>
</div>
{if $order_detail["point_money"] > 0}
<div>
<p>积分抵扣:<span>¥{$order_detail["point_money"]}</span></p>
</div>
{/if}
{if $order_detail["balance_money"] > 0}
<div>
<p>余额:<span>¥{$order_detail["balance_money"]}</span></p>
</div>
{/if}
<div>
<p>订单调价:<span>¥{$order_detail["adjust_money"]}</span></p>
</div>
<div>
<p>配送费用:<span>¥{$order_detail["delivery_money"]}</span></p>
</div>
<div>
<p>发票费用:<span>¥{$order_detail["invoice_money"]}</span></p>
</div>
<div>
<p>发票邮寄费用:<span>¥{$order_detail["invoice_delivery_money"]}</span></p>
</div>
{if $order_detail["member_card_money"] > 0}
<div>
<p>会员卡:<span>¥{$order_detail["member_card_money"]}</span></p>
</div>
{/if}
</div>
<div class="table-settlement">
订单共<span>{$order_detail["goods_num"]}</span>件商品,共计<span>¥{$order_detail["order_money"]}</span>
</div>
</div>
</div>
{notempty name="$order_detail.order_log"}
<!-- 订单操作 -->
<div class="shop-operation layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">订单操作日志</span>
</div>
<div class="shop-operation-time layui-card-body">
<ul class="layui-timeline">
{foreach name="$order_detail.order_log" item="vo"}
<li class="layui-timeline-item">
<div class="layui-time-left">
<p>{:date('Y-m-d', $vo.action_time)}</p>
<p>{:date('H:i:s', $vo.action_time)}</p>
</div>
<div class="layui-icon layui-timeline-axis">
<span class="layui-icon-center"></span>
</div>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">{$vo.action}</div>
</div>
</li>
{/foreach}
</ul>
</div>
</div>
{/notempty}
{include file="order/order_common_action" /}
<!-- 修改订单收货地址 -->
{include file="order/order_action" /}
<!-- 发货 -->
{include file="order/order_delivery_action" /}
<!-- 主动退款 -->
{include file="order/shop_active_refund" /}
<!--打印相关-->
{include file="electronicsheet/print_html" /}
<script src="SHOP_JS/lodop_funcs.js"></script>
<script>
$('.package-list li').click(function(){
$(this).addClass('layui-this').siblings('li').removeClass('layui-this');
$('.order-package-content .layui-tab-item:eq('+ $(this).index() +')').addClass('layui-show').siblings('.layui-tab-item').removeClass('layui-show');
})
function logisticsOperation(orderId,packageId,dataJson) {
//获取模板
var getTpl = $("#logistics_html").html();
var data = {};
data.dataJson = dataJson;
$.ajax({
type: "post",
url: ns.url("shop/express/getShopExpressCompanyList"),
dataType: 'json',
async: false,
success: function (res) {
if (res.code == 0) {
data.express_company = res.data;
}
}
});
laytpl(getTpl).render(data, function (html) {
layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
fixed: false,
scrollbar: false,
title: "修改物流信息",
area: '800px',
content: html,
cancel: function (index, layero) {
//右上角关闭回调
layer.close(index);
//return false 开启该代码可禁止点击该按钮关闭
},
success: function (layero, index) {
form.render();
form.on('radio(delivery_type)', function (data) {
if (data.value == 1) {
$(".express-type").removeClass("layui-hide");
} else {
$(".express-type").addClass("layui-hide");
}
});
var submitting = false;
form.on('submit(button_logistics_order)', function (data) {
var express_company_id = data.field.express_company_id;
if (data.field.delivery_type == 1 && express_company_id <= 0) {
layer.msg('请选择物流公司', {time: 2000, icon: 5});
return;
}
if (data.field.delivery_no == "" && data.field.delivery_type == 1) {
layer.msg('物流单号不能为空', {time: 2000, icon: 5});
return;
}
if (submitting) return false;
submitting = true;
data.field.order_id = orderId;
data.field.package_id = packageId;
$.ajax({
type: "post",
url: '{:addon_url("shop/delivery/editOrderDelivery")}',
async: true,
dataType: 'json',
data: data.field,
success: function (res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer.index - 1);
reloadList();
}
submitting = false;
}
})
});
}
});
})
}
function toMemberDetail(){
let member_id = '{$order_detail.member_id}';
window.open(ns.href("shop/member/editmember", {member_id:member_id}));
}
</script>
<script type="text/html" id="logistics_html">
<div class="order-delivery">
<div class="layui-form">
<input type="hidden" name="type" value="manual">
<div class="layui-form-item delivery-type">
<label class="layui-form-label">发货方式</label>
<div class="layui-input-block">
{{# if(d.dataJson.delivery_type == 1){ }}
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="1" title="物流发货" checked>
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="0" title='无需物流'>
{{# }else{ }}
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="1" title="物流发货">
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="0" title='无需物流' checked>
{{# } }}
</div>
</div>
{{# if(d.dataJson.delivery_type == 1){ }}
<div class="express-type">
{{# }else{ }}
<div class="express-type layui-hide">
{{# } }}
<div class="layui-form-item logistics-company">
<label class="layui-form-label">物流公司</label>
<div class="layui-input-block len-mid">
<select name="express_company_id" lay-search lay-filter="express_company">
<option value="">请选择物流公司</option>
{{# layui.each(d.express_company, function(index, item){ }}
{{# if(item.company_id == d.dataJson.express_company_id){ }}
<option value="{{ item.company_id }}" selected>{{ item.company_name }}</option>
{{# }else{ }}
<option value="{{ item.company_id }}">{{ item.company_name }}</option>
{{# } }}
{{# }); }}
</select>
</div>
</div>
<div class="layui-form-item express-number">
<label class="layui-form-label">快递单号</label>
<div class="layui-input-block">
<input type="text" name="delivery_no" placeholder="" autocomplete="off" class="layui-input len-mid" value="{{d.dataJson.delivery_no}}">
</div>
</div>
</div>
<div class="form-row">
<button type="button" class="layui-btn" lay-submit lay-filter="button_logistics_order">保存</button>
</div>
</div>
</div>
</script>

206
app/shop/view/order/export.html Executable file
View File

@@ -0,0 +1,206 @@
<style>
.layui-card-header{background-color:#f8f8f8}
.apply-time{
float:left;
}
.export-select{float:left;}
.download-button{
float:right;
}
.export-list-view{
font-size:12px;
}
.export-foot-operation{overflow:hidden;margin-top:15px;}
.export-page{
float:right;
}
.export-content-bar{
float:left;
padding-top: 6px;
margin-left: 15px;
}
.export-foot-operation .layui-btn {
padding: 0px 5px;
font-size: 12px;
line-height: 2 !important;
height: auto;
display: inline-block;
}
.layui-unselect.layui-form-checkbox{
margin-top:-5px;
}
</style>
<div class="layui-layout layui-layout-admin">
<div class="body-content">
<div id="export_list"></div>
<div class="export-foot-operation">
<div class="export-content-bar layui-form bg-color-light-gray">
<input type="checkbox" name="export_select" lay-filter="allChoose" lay-skin="primary" title="全选">
</div>
<button class="layui-btn layui-btn-primary" onclick="deleteExport()">批量删除</button>
<div class='export-page' id="export_page"></div>
</div>
</div>
</div>
<script type="text/html" id="exportHtml">
{{# layui.each(d.data.list, function(index, item){ }}
<div class="layui-card export-list-view">
<div class="layui-card-header">
<div class="layui-form export-select">
<input type="checkbox" name="check[]" value="{{item.export_id}}" lay-skin="primary" title="">
</div>
<div class="apply-time">
序号{{ item.export_id }}&nbsp;&nbsp;&nbsp;
导出时间{{ ns.time_to_date(item.create_time) }}
&nbsp;&nbsp;&nbsp;导出主体{{ item.type == 1 ? '订单' : '商品'}}
</div>
<div class="download-button">
{{# if(item.status == 0){ }}
<span>正在导出中请耐心等待</span>
{{# }else{ }}
{{# if(item.path != ''){ }}
<a class="text-color" href="{{ ns.img(item.path) }}" target="_blank">下载</a>
{{#}}}
{{#}}}
&nbsp;&nbsp;<a class="text-color" href="javascript:void(0)" data-export_id ="{{item.export_id}}" onclick="deleteExport(this)">删除</a>
</div>
</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space10">
{{# layui.each(JSON.parse(item.condition), function(condition_index, condition_item){ }}
<div class="layui-col-md3">
{{condition_item.name}}{{condition_item.value || '-'}}
</div>
{{# }); }}
</div>
</div>
</div>
{{# }); }}
{{# if(d.data.list.length === 0){ }}
<div class="layui-card export-list-view">
<div class="layui-card-header">
<div class="apply-time">订单导出记录</div>
</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space10">
<div class="layui-col-md3">暂无导出记录</div>
</div>
</div>
</div>
{{# } }}
</script>
<script>
var laypage,form;
layui.use(['form', 'laytpl', 'laypage'], function() {
form = layui.form;
laytpl = layui.laytpl;
form.render();
exportList(1,10);
laypage = layui.laypage;
/**
* 全选
*/
form.on("checkbox(allChoose)", function(data) {
$("input[name='check[]']").each(function() {
this.checked = data.elem.checked;
});
form.render('checkbox');
})
});
function exportList(page, limit){
$.ajax({
url: '{:addon_url("shop/order/export")}',
data: {
limit,
page
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
var export_template = $("#exportHtml").html();
if(res.code >= 0){
laytpl(export_template).render(res, function (html) {
$("#export_list").html(html);
})
}
laypage.render({
elem: 'export_page',
count: res.data.count,
curr: page, //当前页
limit: limit,
jump: function(obj, first){
//obj包含了当前分页的所有参数比如
//首次不执行
if(!first){
exportList(obj.curr, obj.limit);
form.render();
}
}
});
form.render();
}
});
}
/**
* 删除导出记录
*/
var flag_delete = false;
function deleteExport(data) {
var export_ids = [];
if (!data) {
$("input[name='check[]']:checked").each(function (index, item) {
export_ids.push($(item).val());
});
} else {
export_ids.push($(data).attr("data-export_id"));
}
if (export_ids.length == 0) {
layer.msg('请选择要操作的数据');
return;
}
export_ids = export_ids.toString();
layer.confirm('确定要删除选择的订单导出记录吗?', {
btn: ['确定', '取消']
}, function (index) {
if (flag_delete) return;
flag_delete = true;
layer.close(index);
$.ajax({
type: "POST",
async: true,
url: ns.url("shop/order/deleteExport"),
data: {
export_ids: export_ids,
},
dataType: "JSON",
success: function (data) {
layer.msg(data.message);
flag_delete = false;
if (data.code == 0) {
listenerHash(); // 刷新页面
}
}
});
}, function () {
layer.close();
});
}
</script>

View File

@@ -0,0 +1,125 @@
<style>
.hide{display: none;}
</style>
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">发票抬头:</label>
<div class="layui-input-block">
{$order_detail.invoice_title}
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发票类型:</label>
<div class="layui-input-block">
{if $order_detail['invoice_type'] == 1}纸质{else/}电子{/if}{if $order_detail['is_tax_invoice'] == 1}专票{else/}普票{/if}
</div>
</div>
{if $order_detail['invoice_title_type'] == 2}
<div class="layui-form-item">
<label class="layui-form-label">纳税人识别号:</label>
<div class="layui-input-block">{$order_detail['taxpayer_number']}</div>
</div>
{/if}
<div class="layui-form-item">
<label class="layui-form-label">发票抬头类型:</label>
<div class="layui-input-block">{$order_detail['invoice_title_type'] == 1 ? '个人' : '企业'}</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">真实姓名:</label>
<div class="layui-input-block">{$order_detail.name}</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">联系电话:</label>
<div class="layui-input-block">{$order_detail.mobile}</div>
</div>
{if $order_detail['invoice_type'] == 1}
<div class="layui-form-item">
<label class="layui-form-label">邮寄地址:</label>
<div class="layui-input-block">{$order_detail.invoice_full_address}</div>
</div>
{/if}
{if $order_detail['invoice_type'] == 2}
<div class="layui-form-item">
<label class="layui-form-label">邮箱地址:</label>
<div class="layui-input-block">{$order_detail.invoice_email}</div>
</div>
{/if}
<div class="layui-form-item">
<label class="layui-form-label">开票状态:</label>
<div class="layui-input-inline">
{if $order_detail['invoice_status'] == 0}
<input type="radio" name="invoice_status" value="0" title="未开票" lay-filter="invoice_status" checked>
<input type="radio" name="invoice_status" value="1" title="已开票" lay-filter="invoice_status" >
{else/}
已开票
<input type="hidden" name="invoice_status" value="{$order_detail['invoice_status']}">
{/if}
</div>
</div>
<div class="layui-form-item {if $order_detail['invoice_status'] == 0}hide{/if} invoice_content">
<label class="layui-form-label">发票编号:</label>
<div class="layui-input-block">
<input class="layui-input len-long invoice_code" name="invoice_code" value="{$order_detail.invoice_code}">
</div>
</div>
<div class="layui-form-item {if $order_detail['invoice_status'] == 0}hide{/if} invoice_content">
<label class="layui-form-label">发票备注:</label>
<div class="layui-input-block">
<textarea class="layui-textarea len-long invoice_remark" name="invoice_remark" maxlength="150">{$order_detail.invoice_remark}</textarea>
</div>
</div>
<input type="hidden" name="order_id" value="{$order_id}">
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">确定</button>
<button class="layui-btn layui-btn-primary" onclick="revert()">返回</button>
</div>
</div>
<script>
var laytpl, add_attr_index = -1,
form, table;
layui.use(['form', 'laytpl'], function() {
laytpl = layui.laytpl;
form = layui.form;
form.render();
form.on('radio(invoice_status)', function (data) {
if( data.value == 1){
$(".invoice_content").show();
}else{
$(".invoice_content").hide();
}
});
form.on('submit(save)', function(data) {
if(data.field.invoice_status == 1){
// if(data.field.invoice_code == ''){
// layer.msg('发票编码不能为空',{icon:5})
// return false;
// }
// if(data.field.invoice_remark == ''){
// layer.msg('发票备注不能为空',{icon:5})
// return false;
// }
}else{
data.field.invoice_code = '';
data.field.invoice_remark = ''
}
$.ajax({
url: '{:addon_url("shop/order/invoiceEdit")}',
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(data) {
if(data.code==0){
layer.msg(data.message);
revert()
}
}
});
});
});
function revert(){
location.hash = ns.hash("shop/order/invoiceOrderList");
}
</script>

View File

@@ -0,0 +1,377 @@
<style>
.screen {margin-top: 15px;}
.layui-table-header tr th{padding:3px 0 !important;}
.layui-layout-admin .table-tab .layui-tab-title{margin-bottom: 15px;}
.layui-layout-admin .screen{margin-top: 0;}
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
.invoice-content{
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}
</style>
<div class="screen layui-collapse" lay-filter="selection_panel">
<div class="layui-colla-item">
<form class="layui-colla-content layui-form layui-show">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">订单编号</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="order_no">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">订单类型</label>
<div class="layui-input-inline">
<select name="order_type" lay-filter="order_type">
{foreach $order_type_list as $order_type_k => $order_type_val}
<option value="{$order_type_val.type}">{$order_type_val.name}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">发票类型</label>
<div class="layui-input-inline">
<select name="invoice_type" lay-filter="invoice_type">
<option value="">全部</option>
<option value="1">纸质发票</option>
<option value="2">电子发票</option>
</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="invoice_title">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">纳税人识别号</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="taxpayer_number">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">抬头类型</label>
<div class="layui-input-inline">
<select name="invoice_title_type" lay-filter="invoice_title_type">
<option value="">全部</option>
<option value="1">个人</option>
<option value="2">企业</option>
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">下单时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(7, this);return false;">近7天</button>
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(30, this);return false;">近30天</button>
</div>
</div>
<div class="form-row">
<button class="layui-btn" 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_invoice">批量导出</button>
</div>
</form>
</div>
</div>
<div class="layui-tab table-tab" lay-filter="invoice_list_tab">
<ul class="layui-tab-title">
<li class="layui-this" lay-id="">全部</li>
<li lay-id="0">未开票</li>
<li lay-id="1">已开票</li>
</ul>
<div class="layui-tab-content">
<!-- 列表 -->
<table id="order_list" lay-filter="order_list"></table>
</div>
</div>
<!-- 工具栏操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
{{# if (d.order_status >0){ }}
{{# if (d.invoice_status == 0){ }}
<a class="layui-btn" lay-event="edit">开票</a>
{{# }else{ }}
<a class="layui-btn" lay-event="edit">编辑</a>
{{# } }}
{{# } }}
<a class="layui-btn" lay-event="detail">查看订单</a>
</div>
</script>
<script>
var is_refresh = false;
var form;
var order_type_status_json = {:json_encode($order_type_list)};
layui.use(['form', 'laydate', 'element', 'laytpl',], function() {
var table,
laydate = layui.laydate;
element = layui.element;
form = layui.form,
form.render();
//渲染时间
laydate.render({
elem: '#start_time',
type: 'datetime'
});
laydate.render({
elem: '#end_time',
type: 'datetime'
});
element.on('tab(invoice_list_tab)', function () {
table.reload({
page: {
curr: 1
},
where:{
'invoice_status':this.getAttribute('lay-id')
}
});
});
table = new Table({
elem: '#order_list',
url: ns.url("shop/order/invoiceorderlist"),
cols: [
[{
field: 'order_no',
title: '订单编号',
width: '12%',
unresize: 'false',
templet: function (data) {
var html = "";
html += '<span title="'+ data.order_no +'">'+ data.order_no +'</span>'
return html;
}
}, {
field: 'order_money',
title: '订单总额(元)',
unresize: 'false'
}, {
title: '发票金额',
unresize: 'false',
templet: function(data) {
var html = '<span title="' + data.invoice_money + '">' + data.invoice_money + '</span>';
if(data.invoice_delivery_money > 0){
html += '<br/><span title="邮寄费用:'+data.invoice_delivery_money + '">邮寄费用:'+data.invoice_delivery_money + '</span>';
}
return html;
}
},{
title: '发票类型',
unresize: 'false',
templet: function(data) {
var name = '';
if(data.invoice_type == 1){
name = '纸质';
}else{
name = '电子';
}
if(data.is_tax_invoice == 1){
name += '专用发票';
}else{
name += '普通发票';
}
return name;
}
}, {
title: '发票抬头',
unresize: 'false',
// width: '15%',
templet: function(data) {
var html = '<p class="invoice-content" title="发票抬头:'+ data.invoice_title + '">发票抬头:'+ data.invoice_title + '<p>';
var invoice_title_type_name = data.invoice_title_type == 1 ? '个人' : '企业';
// var html = '<p title="开票时间:'+ ns.time_to_date(data.create_time) + '">开票时间:'+ ns.time_to_date(data.create_time) + '<p>';
html += '<p class="invoice-content" title="抬头类型:'+ invoice_title_type_name + '">抬头类型:'+ invoice_title_type_name + '<p>';
if(data.invoice_title_type == 2){
html += '<p class="invoice-content" title="纳税人识别号:'+ data.taxpayer_number + '">纳税人识别号:'+data.taxpayer_number + '<p>';
}
html += '<p class="invoice-content" title="发票内容:'+ data.invoice_content + '">发票内容:'+ data.invoice_content + '<p>';
return html;
}
}, {
field: 'invoice_rate',
title: '发票税率(%',
unresize: 'false'
}, {
title: '开票状态',
unresize: 'false',
templet: function(data) {
var name = '';
if(data.invoice_status == 0){
name = '未开票';
}else{
name = '已开票';
}
return name;
}
}, {
field: 'order_type_name',
title: '订单类型',
unresize: 'false'
}, {
field: 'create_time',
title: '下单时间',
unresize: 'false',
templet: function (data) {
var create_time = ns.time_to_date(data.create_time)
var html = "";
html += '<span title="'+ create_time +'">'+ create_time +'</span>'
return html;
}
},
{
field: 'create_time',
title: '开票时间',
unresize: 'false',
templet: function (data) {
var invoice_time = ns.time_to_date(data.invoice_time)
var html = "";
html += '<span title="'+ invoice_time +'">'+ invoice_time +'</span>'
return html;
}
},
{
title: '操作',
toolbar: '#operation',
unresize: 'false',
align : 'right'
}]
]
});
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
return false;
});
//批量导出
form.on('submit(export_invoice)', function(data){
location.href = ns.url("shop/order/exportInvoice?request_mode=download",data.field);
return false;
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data,
event = obj.event;
switch (event) {
case 'detail': //查看
location.hash = ns.hash('shop/order/detail?order_id='+data.order_id);
break;
case 'edit': //编辑
location.hash = ns.hash('shop/order/invoiceEdit?order_id='+data.order_id);
break;
}
});
//订单类型
form.on('select(order_type)', function(data){
resetOrderStatus(data.value, 1);
return false;
});
});
/**
* 获取哈希值order_type
*/
function getHashOrderType(){
var hash_arr = getHashArr();
var order_type = "all";
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
if(item_arr[0].indexOf("order_type") != "-1") {
order_type = item_arr[1];
}
}
})
}
return order_type;
}
//重置状态tab 选项卡
function resetOrderStatus(order_type, is_tab){
var hash_order_type = getHashOrderType();
if(hash_order_type != order_type || is_refresh == false){
if(is_tab != 2 || is_refresh == false){
$("select[name=order_status] option").not(':first').remove();
}
var status_item = order_type_status_json[order_type]["status"];
$.each(status_item,function(index, itemobj){
if(is_tab != 2 || is_refresh == false) {
$("select[name=order_status]").append('<option value="' + index + '">' + itemobj + '</option>');
}
});
form.render('select');
}
}
/**
* 七天时间
*/
function datePick(date_num,event_obj){
$(".date-picker-btn").removeClass("selected");
$(event_obj).addClass('selected');
Date.prototype.Format = function (fmt,date_num) { //author: meizz
this.setDate(this.getDate()-date_num);
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
$("input[name=start_time]").val(before_time,0);
$("input[name=end_time]").val(now_time,date_num-1);
}
</script>

607
app/shop/view/order/lists.html Executable file
View File

@@ -0,0 +1,607 @@
<link rel="stylesheet" href="SHOP_CSS/order_list.css"/>
<style>
.layui-tab-content .order-operation-btn{display: flex;align-items: center;margin-top: 10px}
.layui-tab-content .order-operation-all-btn{width: 4%;text-align: center; }
.layui-tab-content .btn-box{ width: 96%;}
.layui-tab-content .order-operation-btn .btn-box span{padding: 0px 5px;font-size: 12px;line-height: 2;height: auto;display: inline-block; border: 1px solid #C9C9C9;cursor: pointer;}
.sub-selected-checkbox{display: flex;justify-content: center;align-items: center;}
.layui-layout-admin .layui-table-cell{height: 32px; line-height: 32px;}
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
</style>
<div class="screen layui-collapse" lay-filter="selection_panel">
<div class="layui-colla-item">
<form class="layui-colla-content layui-form layui-show" lay-filter="order_list">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">搜索方式</label>
<div class="layui-input-inline">
<select name="order_label" >
{foreach $order_label_list as $k => $label_val}
<option value="{$k}">{$label_val}</option>
{/foreach}
</select>
</div>
<div class="layui-form-mid">&nbsp;</div>
<div class="layui-input-inline">
<input type="text" name="search" autocomplete="off" class="layui-input" />
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">订单类型</label>
<div class="layui-input-inline">
<select name="order_type" lay-filter="order_type">
{foreach $order_type_list as $order_type_k => $order_type_val}
{if $order_type_val.type}
<option value="{$order_type_val.type}">{$order_type_val.name}</option>
{/if}
{/foreach}
</select>
</div>
</div>
{if addon_is_exit('store') == 1}
<div class="layui-inline">
<label class="layui-form-label">来源门店</label>
<div class="layui-input-inline">
<select name="store_id" lay-filter="store_id">
<option value="">全部</option>
{foreach $store_list as $k => $v}
<option value="{$v.store_id}">{$v.store_name}</option>
{/foreach}
</select>
</div>
</div>
{/if}
<div class="layui-inline">
<label class="layui-form-label">订单状态</label>
<div class="layui-input-inline">
<select name="order_status" lay-filter="order_status">
<option value="">全部</option>
{foreach $order_status_list as $k => $status_val}
<option value="{$k}">{$status_val}</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">
<select name="order_from">
<option value="">全部</option>
{foreach $order_from_list as $order_from_k => $order_from_v}
<option value="{$order_from_k}">{$order_from_v['name']}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">付款方式</label>
<div class="layui-input-inline">
<select name="pay_type" >
<option value="">全部</option>
{foreach pay_type_list as $pay_type_k => $pay_type_v}
<option value="{$pay_type_k}">{$pay_type_v}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">营销类型</label>
<div class="layui-input-inline">
<select name="promotion_type" lay-filter="promotion_type">
<option value="">全部</option>
{foreach $promotion_type as $promotion_type_k => $promotion_type_val}
<option value="{$promotion_type_val.type}">{$promotion_type_val.name}</option>
{/foreach}
</select>
</div>
</div>
{if $is_install_supply}
<div class="layui-inline">
<label class="layui-form-label">供应商</label>
<div class="layui-input-inline">
<select name="supplier_id">
<option value="">全部</option>
{foreach name="$supplier_list" item="vo"}
<option value="{$vo['supplier_id']}">{$vo['title']}</option>
{/foreach}
</select>
</div>
</div>
{/if}
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">下单时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-seven" onclick="datePick(7, this);return false;">近7天</button>
<button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-thirty" onclick="datePick(30, this);return false;">近30天</button>
</div>
<div class="layui-inline layui-hide" id="delivery_time_box">
<label class="layui-form-label">自提时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="delivery_start_time" placeholder="开始时间" id="delivery_start_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="delivery_end_time" placeholder="结束时间" id="delivery_end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit id="btn_search"lay-filter="btn_search">筛选</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order_goods">导出订单商品</button>
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order" >导出订单</button>
<a class="layui-btn layui-btn-primary" href="{:href_url('shop/order/export')}" target="_blank">查看导出记录</a>
</div>
<input type="hidden" name="status"/>
<input type="hidden" name="page"/>
</form>
</div>
</div>
<div class="layui-tab table-tab" lay-filter="order_tab">
<ul class="layui-tab-title">
<li class="layui-this" lay-id="">全部</li>
</ul>
<div class="layui-tab-content">
<!-- 列表 -->
<div class="layui-form order-operation-btn all-selected-checkbox" style="display: none">
<div class="order-operation-all-btn">
<input type="checkbox" name="" lay-skin="primary" lay-filter="allCheckbox">
<input type="hidden" name="allOrderId">
</div>
<div class="btn-box">
<span class="btn-deliver">批量收货</span>
</div>
</div>
<div id="order_list"></div>
</div>
</div>
<div id="order_page"></div>
<div id="order_operation"></div>
{include file="order/order_common_action" /}
<!-- 修改订单收货地址 -->
{include file="order/order_action" /}
<!-- 发货 -->
{include file="order/order_delivery_action" /}
<!-- 外卖发货 -->
{include file="order/order_delivery_local_action" /}
<!-- 主动退款 -->
{include file="order/shop_active_refund" /}
<!-- 虚拟订单发货 -->
{include file="virtualorder/virtual_order_delivery_action" /}
<script src="SHOP_JS/order_list.js?time=20250444"></script>
<script src="SHOP_JS/lodop_funcs.js"></script>
<script>
var laypage,element, form;
var is_refresh = false;
var laypage_util;
var orderIdAll = [];
var order_type_status_json = {:json_encode($order_type_list)};
// 通过hash获取页数
function getHashPage(){
var page = 1;
var startTime = '';
var endTime = '';
var hash_arr = getHashArr();
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
switch(item_arr[0]){
case "page":
page = item_arr[1];
break;
case "start_time":
startTime = ns.date_to_time(item_arr[1].split("%")[0]);
break;
case "end_time":
endTime = ns.date_to_time(item_arr[1].split("%")[0]);
break;
}
}
});
var _time = (endTime - startTime) / (24 * 60 * 60);
if (_time == 6) {
$(".date-picker-btn-seven").addClass("selected");
$(".date-picker-btn-thirty").removeClass("selected");
} else if (_time == 29) {
$(".date-picker-btn-thirty").addClass("selected");
$(".date-picker-btn-seven").removeClass("selected");
} else {
$(".date-picker-btn-seven").removeClass("selected");
$(".date-picker-btn-thirty").removeClass("selected");
}
return page;
}
//从hash中获取数据
function getHashData() {
var hash_arr = getHashArr();
var form_json = {
"end_time": "",
"delivery_end_time": "",
"order_from": "",
"order_label": $("select[name=order_label]").val(),
"order_name": "",
"order_status": "",
"promotion_type": "",
"pay_type": "",
"search": "",
"start_time": "",
"delivery_start_time": "",
"order_type": 'all',
'page_size': '',
"page": "",
"store_id": $("select[name=store_id]").val() || 0,
};
if (hash_arr.length > 0) {
$.each(hash_arr, function (index, itemobj) {
var item_arr = itemobj.split("=");
if (item_arr.length == 2) {
$.each(form_json, function (key, form_val) {
if (item_arr[0] == key) {
form_json[key] = item_arr[1];
}
})
}
})
}
resetOrderStatus(form_json.order_type, 2);
switchOrderType(form_json.order_type);
setOrderStatusTab(form_json.order_status);
form.val("order_list", form_json);
return form_json;
}
/**
* 获取哈希值order_type
*/
function getHashOrderType(){
var hash_arr = getHashArr();
var order_type = "all";
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
if(item_arr[0].indexOf("order_type") != "-1") {
order_type = item_arr[1];
}
}
})
}
return order_type;
}
layui.use(['laypage','laydate','form', 'element'], function(){
form = layui.form;
laypage = layui.laypage;
element = layui.element;
var laydate = layui.laydate;
form.render();
//渲染时间
laydate.render({
elem: '#start_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#end_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#delivery_start_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#delivery_end_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
//监听筛选事件
form.on('submit(btn_search)', function(data){
is_refresh = true;
data.field.page = 1;
resetOrderStatus(data.field.order_type, 2);
setHashOrderList(data.field);
setOrderStatusTab(data.field.order_status);
return false;
});
//批量导出(订单项)
form.on('submit(batch_export_order_goods)', function(data){
data.field.order_ids = orderIdAll.toString(); // 选择要导出的订单
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("shop/order/exportordergoods"),
data: data.field,
success: function (res) {
}
})
window.open(ns.href("shop/order/export",{}))
return false;
});
//批量导出(订单)
form.on('submit(batch_export_order)', function(data){
data.field.order_ids = orderIdAll.toString(); // 选择要导出的订单
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("shop/order/exportorder"),
data: data.field,
success: function (res) {
}
})
window.open(ns.href("shop/order/export",{}))
return false;
});
//订单类型
form.on('select(order_type)', function(data){
switchOrderType(data.value);
resetOrderStatus(data.value, 1);
return false;
});
//监听Tab切换以改变地址hash值
element.on('tab(order_tab)', function(){
$(".all-selected-checkbox input").prop("checked",false);
var status = this.getAttribute('lay-id');
form.val("order_list", {"order_status":status});
var hash_data = getHashList();
hash_data.order_status = status;
hash_data.page = 1;
setHashOrderList(hash_data);
});
getHashData();
getOrderList();//筛选
});
function switchOrderType(value){
if(value == 2 || value == 3){
var time_type = value == 2 ? '要求自提时间:': '要求送达时间:';
$("#delivery_time_box").removeClass('layui-hide').find('label').text(time_type);
}else{
$("#delivery_time_box").addClass('layui-hide');
}
}
function setOrderStatusTab(order_status){
$(".layui-tab-title li").removeClass("layui-this");
$(".layui-tab-title li").each(function(){
var status = $(this).attr("lay-id");
if(status == order_status){
$(this).addClass("layui-this")
}
});
}
//重置状态tab 选项卡
function resetOrderStatus(order_type, is_tab){
var hash_order_type = getHashOrderType();
if(hash_order_type != order_type || is_refresh == false){
if(is_tab != 1 || is_refresh == false) {
$(".layui-tab-title li").not(':first').remove();
$(".layui-tab-title li").find(":first").addClass("layui-this");
}
if(is_tab != 2 || is_refresh == false){
$("select[name=order_status] option").not(':first').remove();
}
var status_item = order_type_status_json[order_type]["status"];
$.each(status_item,function(index, itemobj){
if(is_tab != 1 || is_refresh == false) {
$(".layui-tab-title").append('<li lay-id="' + index + '">' + itemobj + '</li>');
}
if(is_tab != 2 || is_refresh == false) {
$("select[name=order_status]").append('<option value="' + index + '">' + itemobj + '</option>');
}
});
form.render('select');
}
}
//哈希值 订单数据
function setHashOrderList(data) {
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
var hash = ['url=shop/order/lists'];
for (let key in data) {
if (data[key] != '' && data[key] != 'all') {
hash.push(`${key}=${data[key]}`)
}
}
location.hash = hash.join('&');
getOrderList();
}
function getHashList(){
var hash_arr = getHashArr();
var form_json = {
"end_time" : "",
"delivery_end_time" : "",
"order_from" : "",
"order_label" : $("select[name=order_label]").val(),
"order_name" : "",
"order_status" : "",
"promotion_type" : "",
"pay_type" : "",
"search" : "",
"start_time" : "",
"delivery_start_time" : "",
"order_type" : 'all',
'page_size':'',
"page" : "",
"store_id" : $("select[name=store_id]").val() || 0
};
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
$.each(form_json,function(key, form_val){
if(item_arr[0].indexOf(key) != "-1"){
form_json[key] = item_arr[1];
}
})
}
})
}
return form_json;
}
var order = new Order();
function getOrderList(){
var url = ns.url("shop/order/lists", getHashArr().join('&'));
$.ajax({
type : 'get',
dataType: 'json',
url :url,
success : function(res){
if(res.code == 0){
setOrderInfo(res.data.list);
order.setData(res.data);
$("#order_list").html(order.fetch());
if(res.data.order_status == 3){
$(".order-operation-btn.all-selected-checkbox").show();
} else{
$(".order-operation-btn.all-selected-checkbox").hide();
}
form.render();
//批量选择
form.on('checkbox(allCheckbox)', function(data){
$(".sub-selected-checkbox input").prop("checked",data.elem.checked);
$(".all-selected-checkbox input").prop("checked",data.elem.checked);
$(".sub-selected-checkbox input").each(function(index,item){
if($(item).attr('disabled') == 'disabled'){
$(item).prop("checked",false);
}
});
form.render("checkbox");
getOrderId();
});
//全选选择
form.on('checkbox(subCheckbox)', function(data){
var subLen = $(".sub-selected-checkbox input:checked").length;
$(".all-selected-checkbox input").prop("checked",false);
if (subLen == 10){
$(".all-selected-checkbox input").prop("checked",true);
}
$(".sub-selected-checkbox input").each(function(index,item){
if($(item).attr('disabled') == 'disabled'){
$(item).prop("checked",false);
}
});
form.render("checkbox");
getOrderId();
});
//获取选中的id
function getOrderId(){
var lists = $(".sub-selected-checkbox input:checked");
orderIdAll = [];
lists.each(function(index,item){
if($(item).parents(".sub-selected-checkbox").attr("disabled") != "disabled"){
orderIdAll.push(JSON.parse($(item).parents(".sub-selected-checkbox").attr("data-id")));
}
});
}
laypage_util = new Page({
elem: 'order_page',
count: res.data.count,
curr: getHashPage(),
limit:getHashData()['page_size'] || 10,
callback: function(obj){
var hash_data = getHashData();
hash_data.page = obj.curr;
hash_data.page_size = obj.limit;
setHashOrderList(hash_data);
}
});
}else{
layer.msg(res.message);
}
}
});
}
/**
* 七天时间
*/
function datePick(date_num,event_obj){
$(".date-picker-btn").removeClass("selected");
$(event_obj).addClass('selected');
Date.prototype.Format = function (fmt,date_num) { //author: meizz
this.setDate(this.getDate()-date_num);
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
$("input[name=start_time]").val(before_time,0);
$("input[name=end_time]").val(now_time,date_num-1);
}
//批量收货
$("body").off("click",".layui-tab-content .btn-deliver").on("click",".layui-tab-content .btn-deliver", function () {
var subLen = $(".sub-selected-checkbox input:checked").length;
if (subLen <=0 ) {
layer.msg("请选择订单");
return false;
}
takeDelivery(orderIdAll.toString(), 1);
});
</script>

View File

@@ -0,0 +1,5 @@
<!-- 修改订单收货地址 -->
{include file="app/shop/view/order/order_address_update.html" /}
<!-- 门店自提 提货 -->
{include file="app/shop/view/storeorder/store_order_take_delivery.html" /}

View File

@@ -0,0 +1,371 @@
<!--<script type="text/javascript" src="{$http_type}://webapi.amap.com/maps?v=1.4.6&amp;key=2df5711d4e2fd9ecd1622b5a53fc6b1d"></script>-->
<!--<script type="text/javascript" src="STATIC_JS/map_address.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>
<style>
.update-address-html .order-map{width:876px;height:380px;}
.eg-text{ font-size: 12px;line-height: 1;color: red}
</style>
<!-- 修改收货地址模态 -->
<div id="update_address_box" class="update-address-box"></div>
<script type="text/html" id="update_address_html">
<div class="layui-form update-address-html" id='update_address'lay-filter="update_address">
<input type="hidden" name="order_id" value="{{ d.order_id }}"/>
<!--自提点地址-->
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">* </span></label>
<div class="layui-input-inline area-select">
<select name="province_id" lay-filter="province_id" lay-verify="province_id">
<option value="">请选择省份</option>
</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-inline" >
<input type="text" name="address" placeholder="请填写具体地址。" lay-verify="required" autocomplete="off" class="layui-input address-content len-long" value="{{# if(d.address != undefined){}}{{ d.address}}{{# } }}">
{{# if(d.order_type == 3){ }}
<input type = "hidden" name="longitude" lay-verify="required" class="layui-input" value="{{# if(d.longitude != undefined){}}{{ d.longitude}}{{# } }}"/>
<input type = "hidden" name="latitude" lay-verify="required" class="layui-input" value="{{# if(d.latitude != undefined){}}{{ d.latitude}}{{# } }}"/>
{{# } }}
</div>
{{# if(d.order_type == 3){ }}
<button class='layui-btn-primary layui-btn' onclick="refreshFrom();">查找地址</button>
{{# } }}
</div>
{{# if(d.order_type == 3){ }}
<!--地图定位-->
<div class="layui-form-item">
<label class="layui-form-label">地图定位</label>
<div class="layui-input-block special-length">
<div id="container" class="order-map"></div>
</div>
</div>
{{# } }}
<!--联系人方式-->
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">收货人</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" placeholder="请填写收货联系人" autocomplete="off" class="layui-input selffetch-input len-mid" value="{{# if(d.name != undefined){}}{{ d.name}}{{# } }}">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">手机号码</label>
<div class="layui-input-block">
<input type="text" name="mobile" lay-verify="mobile" placeholder="请填写手机号码" autocomplete="off" class="layui-input selffetch-input len-mid" value="{{# if(d.mobile != undefined){}}{{d.mobile }}{{# } }}">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">固定号码</label>
<div class="layui-input-block">
<input type="text" name="telephone" placeholder="请填写固定号码" autocomplete="off" class="layui-input selffetch-input len-mid" value="{{# if(d.telephone != undefined){}}{{d.telephone }}{{# } }}">
</div>
</div>
</div>
<div class="layui-form-item analysis">
<div class="layui-inline">
<label class="layui-form-label">智能识别地址</label>
<div class="layui-input-inline ">
<textarea class="layui-textarea len-long" id="address_text" style="width: 400px; height: 100px;" ></textarea>
<div class="eg-text">*示例:小红152********山西省太原市小店区****</div>
</div>
<div class="layui-input-inline ">
<button class="layui-btn" onclick="analysis()">解析</button>
</div>
</div>
</div>
<button class="layui-btn" lay-submit id="submit_address" lay-filter="submit_address" style="display:none;">保存</button>
</div>
</script>
<script>
var map_class, form,latlng;
// 订单地址修改
function orderAddressUpdate(order_id) {
var order_info = getOrderInfo(order_id);
var getTpl = $("#update_address_html").html();
var order_data = order_info;
laytpl(getTpl).render(order_data, function(html) {
layer_index = layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
offset: 'auto',
scrollbar: true,
fixed: false,
title: "编辑收货地址",
area: ['1200px'],
btn: ['确定', '取消'],
yes: function(index, layero){
$("#submit_address").click();
},
btn2: function(index, layero){
layer.close(index);
},
content: html,
success: function(layero, index){
form.render();
//初始化省级地址
getAreaList(0, 1);
var repeat_flag = false;//防重复标识
form.render();
var initdata = {province_id : order_data.province_id, city_id : order_data.city_id, district_id : order_data.district_id};
initAddress(initdata, "update_address");
if(order_data.order_type == 3) {
if ($.isEmptyObject(order_data) == true) {
latlng = {lat: '', lng: ''};
} else {
latlng = {lat: order_data.latitude, lng: order_data.longitude};
}
if($("#container").length) {
setTimeout(function () {
map_class = new mapClass("container", latlng);
},200);
}
}
form.render();
form.verify({
mobile:function (value){
if(!ns.getRegexp('mobile').test(value)){
return '请输入正确的手机号';
}
}
})
form.on('submit(submit_address)', function(data){
if(data.field.province_id == ''){
layer.msg('请选择省份', {icon: 5, anim: 6});
return;
}
if(data.field.city_id == ''){
layer.msg('请选择城市', {icon: 5, anim: 6});
return;
}
if(data.field.district_id == ''){
layer.msg('请选择区/县', {icon: 5, anim: 6});
return;
}
if(data.field.address == ''){
layer.msg('请输入详细地址', {icon: 5, anim: 6});
return;
}
//外卖订单修改地址必须选坐标
if(order_data.order_type == 3){
if(data.field.latitude == '' || data.field.longitude == '' ){
layer.msg('外卖订单必须选择地图坐标', {icon: 5, anim: 6});
return;
}
}
var province_name = $("option[value='" + data.field.province_id + "']").text();
var city_name = $("option[value='" + data.field.city_id + "']").text();
var district_name = $("option[value='" + data.field.district_id + "']").text();
// var community_name = $("option[value='" + data.field.community_id + "']").text();
data.field.province_name = province_name;
data.field.city_name = city_name;
data.field.district_name = district_name;
// data.field.community_name = community_name;
data.field.full_address = province_name + '-' + city_name + '-' + district_name;
if(repeat_flag)return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/order/editaddress"),
type: "POST",
dataType: "JSON",
async: false,
data: data.field,
success: function (res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer_index);
reloadList();
}else{
repeat_flag = false;
}
}
});
return false;
});
$.ajax({
url: ns.url("shop/address/geMapConfig"),
type: "POST",
dataType: "JSON",
async: false,
data: {},
success: function (res) {
if(res.data.key == ''){
let height = $(".layui-layer-content").height()
$(".layui-layer-content").height(height-140)
$(".analysis").hide()
}else{
$(".analysis").show()
}
}
});
}
});
form.render();
});
}
/**
* 重新渲染表单
*/
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.township = $("select[name=community_id]").val();
// map_class.address.township_name = $("select[name=community_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);//坐标
$("input[name=address]").val(map_class.address.address);//详细地址
}
//地图点击回调时间
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",
url : ns.url("shop/address/getGeographicId"),
dataType: 'json',
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.community_id;
map_class.map_change = false;
form.val("update_address", {
"province_id": data.province_id // "name": "value"
});
$("select[name=province_id]").change();
form.val("update_address", {
"city_id": data.city_id // "name": "value"
});
$("select[name=city_id]").change();
form.val("update_address", {
"district_id": data.district_id // "name": "value"
});
$("select[name=district_id]").change();
// form.val("update_address", {
// "community_id": data.community_id // "name": "value"
// });
refreshFrom();//重新渲染form
map_class.map_change = true;
}
})
}
function analysis(){
let address = $("#address_text").val();//详细地址
if(!address){
layer.msg('请输入详细地址', {icon: 5, anim: 6});
return;
}
$.ajax({
url: ns.url("shop/address/analysesAddress"),
type: "POST",
dataType: "JSON",
async: false,
data: {'address':address},
success: function (res) {
if(res.code == 0){
let change = false;
if(res.data.province_id !== ''){
form.val("update_address", {
"province_id": res.data.province_id // "name": "value"
});
$("select[name=province_id]").change();
change = true;
}
if(res.data.city_id !== '' || change){
form.val("update_address", {
"city_id": res.data.city_id // "name": "value"
});
$("select[name=city_id]").change();
}
if(res.data.district_id !== '' || change){
form.val("update_address", {
"district_id": res.data.district_id // "name": "value"
});
$("select[name=district_id]").change();
}
if(res.data.detail !== '' || change){
form.val("update_address", {
"address": res.data.detail // "name": "value"
});
}
if(res.data.name !== ''){
$("input[name='name']").val(res.data.name)
}
if(res.data.mobile !== ''){
$("input[name='mobile']").val(res.data.mobile)
}
if(res.data.lng !== ''){
$("input[name=longitude]").val(res.data.lng);//坐标
}
if(res.data.lat !== ''){
$("input[name=latitude]").val(res.data.lat);//坐标
}
refreshFrom();//重新渲染form
}else{
layer.msg(res.message);
}
}
});
}
</script>

View File

@@ -0,0 +1,161 @@
<!-- 调整价格模态 -->
<script type="text/html" id="adjust_price_html">
<div style="padding:10px;">
<div class="layui-form adjust-price-html" id='adjust_price'lay-filter="adjust_price">
<div style="color: #666;">注意 : 只有订单未付款时才支持改价,改价后请联系买家刷新订单核实订单金额后再支付</div>
<table class="layui-table">
<colgroup>
<col width="10%">
<col width="4%">
<col width="6%">
<col width="4%">
<col width="9%">
<col width="4%">
<col width="8%">
<col width="8%">
<col width="9%">
<col width="10%">
<col width="10%">
<col width="10%">
<col width="6%">
</colgroup>
<thead>
<tr>
<th>商品信息</th>
<th>单价</th>
<th>数量</th>
<th>小计</th>
<th>商品总额</th>
<th>优惠</th>
<th>优惠券</th>
<th>积分抵现</th>
<th>发票费用</th>
<th>发票邮寄费用</th>
<th>调整金额</th>
<th>运费</th>
<th>总计</th>
</tr>
</thead>
<tbody>
{{# layui.each(d.order_goods, function(index, item){ }}
<tr data-order_money="{{ d.order_money }}"data-adjust_money="{{ d.adjust_money }}"data-delivery_money="{{ d.delivery_money }}"
data-promotion_money="{{ d.promotion_money }}" data-coupon_money="{{ d.coupon_money }}" data-goods_money="{{ d.goods_money }}"
data-adjust_money="{{ d.adjust_money }}"data-delivery_money="{{ d.delivery_money }}" data-invoice_rate="{{ d.invoice_rate }}"
data-invoice_delivery_money="{{ d.invoice_delivery_money }}" data-is_invoice="{{ d.is_invoice }}" data-point_money="{{ d.point_money }}" >
<td>{{ item.sku_name }}</td>
<td>{{ item.price }}</td>
<td>{{ item.num }}</td>
<td>{{ item.goods_money }}</td>
{{# if(index == 0){ }}
<td rowspan="{{ d.order_goods.length }}">{{ d.goods_money }}</td>
<td rowspan="{{ d.order_goods.length }}">{{ d.promotion_money }}</td>
<td rowspan="{{ d.order_goods.length }}">{{ d.coupon_money }}</td>
<td rowspan="{{ d.order_goods.length }}">{{ d.point_money }}</td>
<td rowspan="{{ d.order_goods.length }}" class="adjust-invoice-money">{{ d.invoice_money }}</td>
<td rowspan="{{ d.order_goods.length }}" class="adjust-invoice-delivery-money">{{ d.invoice_delivery_money }}</td>
<td rowspan="{{ d.order_goods.length }}"><input type="number" name="adjust_money" min="{{ d.goods_money - d.promotion_money - d.coupon_money }}" class="layui-input adjust-money" onchange="adjustChange(this);" value="{{ d.adjust_money }}"/></td>
<td rowspan="{{ d.order_goods.length }}"><input type="number" name="delivery_money" class="layui-input delivery-money" onchange="adjustChange(this);" value="{{ d.delivery_money }}"/></td>
<td rowspan="{{ d.order_goods.length }}" class="adjust-pay-money">{{ d.order_money }}</td>
{{# } }}
</tr>
{{# }); }}
</tbody>
</table>
<div style="color: #666;">
<p><a class="text-color">实际商品金额</a> = - - - + </p>
<p><a class="text-color">发票费用</a> = * </p>
<p>订单总额 = <a class="text-color">实际商品金额</a> + <a class="text-color"></a> + + </p>
</div>
<input type="hidden" name="order_id" value="{{ d.order_id }}"/>
<button class="layui-btn" lay-submit id="submit_price" lay-filter="submit_price" style="display:none;">保存</button>
</div>
</div>
</script>
<script>
var form;
// 订单调价
function orderAdjustMoney(order_id) {
var order_info = getOrderInfo(order_id);
var getTpl = $("#adjust_price_html").html();
laytpl(getTpl).render(order_info, function (html) {
layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
offset: 'auto',
scrollbar: true,
fixed: false,
title: "调整价格",
area: ['1250px', 'auto'],
btn: ['确定', '取消'],
yes: function (index, layero) {
$("#submit_price").click();
},
btn2: function (index, layero) {
layer.close(index);
},
content: html,
success: function (layero, index) {
var repeat_flag = false;//防重复标识
form.render();
form.on('submit(submit_price)', function (data) {
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/order/adjustPrice"),
type: "POST",
dataType: "JSON",
async: false,
data: data.field,
success: function (res) {
layer.msg(res.message);
if (res.code == 0) {
layer.close(layer.index - 1);
reloadList();
} else {
repeat_flag = false;
}
}
});
return false;
});
}
});
form.render();
});
}
function adjustChange(obj){
var adjust_money = 0;
var delivery_money = 0;
var parent_obj = $(obj).parent().parent();
var o_order_money = parent_obj.attr("data-order_money");
var o_adjust_money = parent_obj.attr("data-adjust_money");
var o_delivery_money = parent_obj.attr("data-delivery_money");
var invoice_delivery_money = parent_obj.attr("data-invoice_delivery_money");
var promotion_money = parent_obj.attr("data-promotion_money");
var coupon_money = parent_obj.attr("data-coupon_money");
var goods_money = parent_obj.attr("data-goods_money");
var is_invoice = parent_obj.attr("data-is_invoice");
var point_money = parent_obj.attr("data-point_money");
$(".adjust-money").each(function(){
adjust_money += parseFloat($(this).val());
});
$(".delivery-money").each(function(){
delivery_money += parseFloat($(this).val());
});
var real_goods_money = parseFloat(goods_money) - parseFloat(promotion_money) - parseFloat(coupon_money) + parseFloat(adjust_money) - parseFloat(point_money);
var invoice_rate = is_invoice == 1 ? parent_obj.attr("data-invoice_rate") : 0;
var invoice_money = Math.round(parseFloat(real_goods_money) * parseFloat(invoice_rate)/100 * 100) / 100;
var total_money = parseFloat(goods_money) - parseFloat(promotion_money) - parseFloat(coupon_money) - parseFloat(point_money) + parseFloat(adjust_money) + parseFloat(invoice_delivery_money) + parseFloat(invoice_money) + parseFloat(delivery_money)
total_money = Math.round(total_money * 100) / 100;
$(obj).parent().parent().find(".adjust-invoice-money").text(invoice_money);
// $(obj).parent().parent().find(".adjust-invoice-delivery-money").text(total_money);
// var total_money = parseFloat(o_order_money) - parseFloat(o_adjust_money) - parseFloat(o_delivery_money) + parseFloat(adjust_money) + parseFloat(delivery_money);
$(".adjust-pay-money").html(total_money);
}
</script>

View File

@@ -0,0 +1,272 @@
<script type="text/javascript">
var laytpl;
var form;
var order_list = [];
var express_company_list = [];
var deliyer_list = [];
var printer_addon_is_exit = '{:addon_is_exit("printer")}';
var isTradeManaged = false; // 微信小程序是否已开通发货信息管理服务
function reloadList(){
{if !empty($order_detail)}
listenerHash(); // 刷新页面
layer.closeAll();
{else/}
getOrderList();
{/if}
}
$(function () {
// 获取物流公司
$.ajax({
type: "post",
url: ns.url("shop/express/getShopExpressCompanyList"),
dataType: 'json',
success: function (res) {
if (res.code == 0) {
express_company_list = res.data;
}
}
});
// 获取配送员
$.ajax({
type: "post",
url: ns.url("shop/local/getDeliverList"),
dataType: 'json',
success: function (res) {
if (res.code == 0) {
deliyer_list = res.data;
}
}
});
getOrderShippingIsTradeManaged();
});
//渲染模板引擎
layui.use(['laytpl','form'], function(){
laytpl = layui.laytpl;
form = layui.form;
form.render();
{if !empty($order_detail)} setOrderInfo([{:json_encode($order_detail)}]);{/if}
});
/**
** 设置订单信息
**/
function setOrderInfo(temp_order_list){
var temp = {};
temp_order_list.forEach(item => temp[item.order_id] = item);
order_list = temp;
}
/**
** 获取订单信息
**/
function getOrderInfo(order_id){
return order_list[order_id];
}
/**
* 订单操作
* @param fun
* @param order_id
*/
function orderAction(fun, order_id){
eval(fun+"("+order_id+")");
}
// 打印发货单
function printDeliverOrder(order_id) {
var url = ns.url("shop/printer/batchprintorder", {request_mode: 'download',order_id: order_id});
var LODOP = getLodop();
if (LODOP) {
LODOP.PRINT_INIT("发货单打印");
LODOP.ADD_PRINT_TBURL(5, 10, "770", "95%", url);
LODOP.SET_PRINT_STYLEA(0, "HOrient", 3);
LODOP.SET_PRINT_STYLEA(0, "VOrient", 3);
LODOP.ADD_PRINT_TEXT(590, 680, 130, 22, "页号:第#页/共&页");
LODOP.SET_PRINT_STYLEA(0, "ItemType", 2);
LODOP.SET_PRINT_STYLEA(0, "Horient", 1);
LODOP.SET_PRINT_STYLEA(0, "Vorient", 1);
LODOP.SET_SHOW_MODE("MESSAGE_GETING_URL", ""); //该语句隐藏进度条或修改提示信息
LODOP.PREVIEW(); //预览
}
}
// 订单备注
function orderRemark(order_id){
var order_info = getOrderInfo(order_id);
layer.prompt({
formType: 2,
value: order_info.remark,
title: '卖家备注',
area: ['400px', '100px'], //自定义文本域宽高
yes: function(index, layero){
var value = layero.find(".layui-layer-input").val();
if(value.trim().length > 200){
layer.msg("备注太长最多200个字符");
return false;
}
$.ajax({
type: "post",
url: ns.url("shop/order/orderRemark"),
async: true,
dataType: 'json',
data: {order_id : order_id, remark : value},
success: function (res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer.index - 1);
reloadList();
}
}
})
}
});
}
// 关闭订单
var closeRepeat = false;
function orderClose(order_id){
var temp_index = layer.confirm('确定要关闭该订单吗?', function(index) {
if (closeRepeat) return;
closeRepeat = true;
layer.close(index);
$.ajax({
url: ns.url("shop/order/close"),
data: {order_id : order_id},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer.index - 1);
reloadList();
}
closeRepeat = false;
}
});
}, function () {
layer.close();
closeRepeat = false;
});
}
/**
* 线下支付
* @param order_id
*/
var payRepeat = false;
function offlinePay(order_id){
var order_info = getOrderInfo(order_id);
ns.openOperateIframe({
url:ns.url("offlinepay://shop/pay/pay", {out_trade_no: order_info.out_trade_no,member_id:order_info.member_id}),
title:'线下支付',
area:['700px', '500px'],
getResFunc:'paySubmit',
success:function (res){
layer.msg(res.message);
if(res.code == 0){
reloadList();
}
payRepeat = false;
}
})
}
//线下支付审核
function offlinePayAudit(order_id){
var order_info = getOrderInfo(order_id);
window.open(ns.href('offlinepay://shop/pay/lists', {out_trade_no:order_info.out_trade_no}));
}
/**
* 删除订单
* @param order_id
*/
function orderDelete(order_id){
layer.confirm('确定要删除该订单吗?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("shop/order/delete"),
data: {order_id : order_id},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
if(res.code == 0){
reloadList();
}
}
});
}, function () {
layer.close();
});
}
/**
* 确认收货
* @param order_id
* @param type
*/
function takeDelivery(order_id, type = 0){
var html = "";
if(type == 0){
html = '确保买家已经收到您的商品,并且与买家协商完毕提前确认收货?';
}else{
html = '确保买家已经收到您的商品,并且与买家协商完毕提前确认收货?(退款中的订单及虚拟订单无法确认收货)';
}
layer.confirm(html, function(index) {
layer.close(index);
$.ajax({
url: ns.url("shop/order/takeDelivery"),
data: {order_id : order_id, type : type},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
if(res.code == 0){
reloadList();
}
}
});
}, function () {
layer.close();
});
}
// 打印订单小票
function printTicket(order_id){
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("shop/order/printTicket"),
data: {order_id},
success: function (res) {
if (res.code != 0) {
layer.msg(res.message ? res.message : '小票打印失败');
}
}
});
}
// 查询小程序是否已开通发货信息管理服务
function getOrderShippingIsTradeManaged() {
$.ajax({
type: "post",
url: ns.url("shop/order/orderShippingIsTradeManaged"),
dataType: 'json',
success: function (res) {
if (res.code == 0) {
isTradeManaged = res.data;
}
}
});
}
</script>
<!-- 修改订单价格 -->
{include file="app/shop/view/order/order_adjust_price.html" /}

View File

@@ -0,0 +1,831 @@
<!-- 订单物流发货 -->
<style>
.layui-table-body {
overflow: unset;
}
.delivery-content {
padding: 7px 0 !important;
}
.layui-table-view {
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.layui-form .order_goods_list thead th, .layui-form #order_goods_list tbody tr {
border-bottom: 1px solid #E6E6E6;
}
.layui-form .order_goods_list thead th {
background-color: #F5F5F5;
line-height: 30px;
}
.layui-form .order_goods_list tbody td {
line-height: 30px;
padding: 8px 15px;
}
#order_goods_list_box{
overflow: hidden;
}
#order_goods_list_box table{
margin: 0;
}
#order_goods_list_box table:nth-of-type(2){
display: block;
overflow: auto;
max-height: 300px;
}
.order-delivery .input-text {
height: auto;
min-height: 34px;
}
.edit-delivery-box table{
margin: 0;
}
.edit-delivery-box table:last-of-type{
display: block;
height: 430px;
overflow: auto;
}
.delivery-goods {
max-height: 200px;
overflow-y: scroll;
}
.delivery-goods::-webkit-scrollbar {
display: none;
}
.delivery-goods tr td {
padding: 8px 0;
}
.order-delivery .tips{
margin-bottom: 20px;
}
</style>
<!--发货订单弹出框-->
<script type="text/html" id="order_delivery_html">
<div class="order-delivery">
<div class="layui-form">
<input type="hidden" name="type" value="manual">
<div class="layui-form-item">
<label class="layui-form-label">收货地址</label>
<div class="layui-input-block">
<p class="input-text len-long"> {{ d.order_info.full_address }}{{ d.order_info.address }}</p>
</div>
</div>
<div class="layui-form-item delivery-type">
<label class="layui-form-label">发货方式</label>
<div class="layui-input-block">
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="1" title="物流发货" checked>
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="0" title="无需物流">
</div>
</div>
<div class="express-type">
<div class="layui-form-item logistics-company">
<label class="layui-form-label">物流公司</label>
<div class="layui-input-block len-mid">
<select name="express_company_id" lay-search lay-filter="express_company">
<option value="">请选择物流公司</option>
{{# layui.each(d.express_company, function(index, item){ }}
<option value="{{ item.company_id }}">{{ item.company_name }}</option>
{{# }); }}
</select>
</div>
</div>
<div class="layui-form-item express-number">
<label class="layui-form-label">快递单号</label>
<div class="layui-input-block">
<input type="text" name="delivery_no" placeholder="" autocomplete="off" class="layui-input len-mid">
</div>
</div>
</div>
<div class="form-row">
<button type="button" class="layui-btn" lay-submit id="button_delivery_order" lay-filter="button_delivery_order" style="display:none;">保存</button>
</div>
<div id="order_goods_list_box">
<table class="layui-table order_goods_list" lay-filter="order_goods" lay-skin="line" lay-filter="order_goods_list">
<colgroup>
<col width="5%">
<col width="29%">
<col width="15%">
<col width="24%">
<col width="13%">
<col width="14%">
</colgroup>
<thead>
<tr>
<th style="text-align: center;"><input type="checkbox" lay-skin="primary" lay-filter="selectAllTop"/></th>
<th>商品名称</th>
<th>数量</th>
<th>物流单号</th>
<th>物流状态</th>
<th>退款状态</th>
</tr>
</thead>
</table>
<div class="delivery-goods">
<table class="layui-table order_goods_list" lay-filter="order_goods" lay-skin="line">
<colgroup>
<col width="5%">
<col width="29%">
<col width="15%">
<col width="24%">
<col width="13%">
<col width="14%">
</colgroup>
<tbody>
{{# layui.each(d.order_goods_list, function(index, item){ }}
<tr>
<td style="text-align: center;">
<!-- 未申请 已拒绝 部分退款 才可以发货 -->
<input type="checkbox" lay-skin="primary" class="order_goods_id" lay-filter="select{{ item.order_goods_id }}" value="{{ item.order_goods_id }}" data-delivery-status="{{ item.delivery_status }}" {{# if(item.delivery_status == 1 || [0,-1,-3].indexOf(Number(item.refund_status)) == -1){ }} disabled {{# } }}/>
</td>
<td>{{ item.sku_name }}</td>
<td>{{ item.num }}</td>
<td>{{ item.delivery_no }}</td>
<td>{{ item.delivery_status_name }}</td>
<td>{{ item.refund_status_name ? item.refund_status_name : '' }}</td>
</tr>
{{# }); }}
{{# if(d.order_goods_list.length === 0){ }}
<tr>
<td colspan="5" align="center">无数据</td>
</tr>
{{# } }}
</tbody>
</table>
</div>
</div>
</div>
</div>
</script>
<!-- 批量订单发货 -->
<script type="text/html" id="order_batch_delivery_html">
<div class="order-delivery">
<div class="layui-form">
<input type="hidden" name="type" value="manual">
{if addon_is_exit('electronicsheet',$user_info.site_id) == 1}
<div class="layui-form-item">
<label class="layui-form-label">发货类型</label>
<div class="layui-input-inline">
<input type="radio" lay-filter="delivery_mode" name="type" value="electronicsheet" title="电子面单" checked>
<input type="radio" lay-filter="delivery_mode" name="type" value="manual" title="手动发货">
</div>
</div>
<input type="hidden" name="sheet_exists" value="1">
{else/}
<input type="hidden" name="sheet_exists" value="2">
{/if}
<div class="layui-form-item {if addon_is_exit('electronicsheet',$user_info.site_id) == 1} layui-hide {/if} delivery-type">
<label class="layui-form-label">发货方式</label>
<div class="layui-input-inline">
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="1" title="物流发货" checked>
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="0" title="无需物流">
</div>
</div>
{if addon_is_exit('electronicsheet',$user_info.site_id) == 1}
<div class="layui-form-item express-mode">
<label class="layui-form-label">面单模版</label>
<div class="layui-input-block len-mid">
<select name="template_id" lay-search lay-filter="express_company">
<option value="">请选择面单模版</option>
</select>
</div>
</div>
{/if}
<div class="express-type">
<div class="layui-form-item logistics-company {if addon_is_exit('electronicsheet',$user_info.site_id) == 1}layui-hide{/if}">
<label class="layui-form-label">物流公司</label>
<div class="layui-input-block len-mid">
<select name="express_company_id" lay-search lay-filter="express_company">
<option value="">请选择物流公司</option>
{{# layui.each(d.express_company, function(index, item){ }}
<option value="{{ item.company_id }}">{{ item.company_name }}</option>
{{# }); }}
</select>
</div>
</div>
</div>
<div class="form-row">
<button type="button" class="layui-btn" lay-submit id="button_delivery_order" lay-filter="button_delivery_order" style="display:none;">保存</button>
</div>
<div id="order_goods_list_box">
<table class="layui-table order_goods_list" lay-filter="order_goods" lay-skin="line">
<colgroup>
<col>
<col width="30%">
<col width="50%">
<col width="20%">
</colgroup>
<thead>
<tr>
<th></th>
<th>订单号</th>
<th>收货地址</th>
<th>操作</th>
</tr>
</thead>
</table>
<table class="layui-table order_goods_list" lay-filter="order_goods" lay-skin="line">
<colgroup>
<col width="">
<col width="30%">
<col width="50%">
<col width="20%">
</colgroup>
<tbody>
{{# layui.each(d.order_goods_list, function(index, item){ }}
<tr>
<td></td>
<td>{{ item.order_no }}</td>
<td>{{ item.full_address }}</td>
<td><a href="javascript:;" class="text-color goods-item-remove" data-order-id="{{item.order_id}}">删除</a></td>
</tr>
{{# }); }}
{{# if(d.order_goods_list.length === 0){ }}
<tr>
<td colspan="3" align="center">无数据</td>
</tr>
{{# } }}
</tbody>
</table>
</div>
</div>
</div>
</script>
<!-- 修改物流单号 -->
<script type="text/html" id="order_edit_delivery">
<div class="edit-delivery-box layui-form">
<table class="layui-table">
<colgroup>
<col width="30%">
<col width="30%">
<col width="40%">
</colgroup>
<thead>
<tr>
<th>序号</th>
<th>物流公司</th>
<th>快递单号</th>
</tr>
</thead>
</table>
<table class="layui-table">
<colgroup>
<col width="30%">
<col width="30%">
<col width="40%">
</colgroup>
<tbody>
{{#for(var i = 0; i < d.editDeliveryData.length; i++){ }}
<tr>
<td>{{d.editDeliveryData[i].id}}</td>
<td>
<select>
{{#for(var j = 0; j < d.express_company.length; j++){ }}
{{# if(d.express_company[j].company_id == d.editDeliveryData[i].express_company_id){ }}
<option selected value="{{d.express_company[j].company_id}}">{{d.express_company[j].company_name}}</option>
{{# }else{ }}
<option value="{{d.express_company[j].company_id}}">{{d.express_company[j].company_name}}</option>
{{# } }}
{{# } }}
</select>
</td>
<td>
<input type="text" class="layui-input" value="{{d.editDeliveryData[i].delivery_no}}">
</td>
</tr>
{{# } }}
</tbody>
</table>
</div>
</script>
<script>
// 订单发货
function orderDelivery(order_id) {
var submitting = false;
var order_info = getOrderInfo(order_id);
var product_arr = [];
layui.use(['table', 'form', 'laytpl'], function () {
var laytpl = layui.laytpl, table = layui.table, form = layui.form;
form.render();
var getTpl = $("#order_delivery_html").html();
var data = {order_info: order_info,express_company:express_company_list};
data.order_goods_list = order_info.order_goods;
laytpl(getTpl).render(data, function (html) {
layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
fixed: false,
scrollbar: false,
title: "订单发货",
area: '800px',
btn: ['保存'],
yes: function (index, layero) {
$("#button_delivery_order").click();
},
content: html,
cancel: function (index, layero) {
layer.close(index);
},
success: function (layero, index) {
form.render();
form.on('radio(delivery_type)', function (data) {
if (data.value == 1) {
$(".express-type").show();
} else {
$(".express-type").hide();
}
});
form.on('submit(button_delivery_order)', function (data) {
var express_company_id = data.field.express_company_id;
var template_id = data.field.template_id;
if (data.field.delivery_type == 1 && express_company_id <= 0) {
layer.msg('请选择物流公司', {time: 2000, icon: 5});
return;
}
if (data.field.delivery_no == "" && data.field.delivery_type == 1) {
layer.msg('物流单号不能为空', {time: 2000, icon: 5});
return;
}
var order_goods_id_array = [];
var isSecondDelivery = false; // 是否二次发货
var count =0;
$(".order_goods_id").each(function (i) {
var checked = $(this).prop("checked");
var disabled = $(this).prop('disabled');
if(disabled == false){
count++;
}
if (checked) {
order_goods_id_array.push($(this).val());
}
var deliveryStatus = $(this).attr('data-delivery-status');
// 存在已发货商品,当前操作被视为二次发货
if(deliveryStatus == 1){
isSecondDelivery = true;
}
});
if (order_goods_id_array == "") {
layer.msg('请选择发货商品', {time: 2000, icon: 5});
return;
}
var order_goods_ids = order_goods_id_array.toString();
data.field.order_goods_ids = order_goods_ids;
if (submitting) return false;
submitting = true;
$.ajax({
type: "post",
url: '{:addon_url("shop/order/delivery")}',
async: true,
dataType: 'json',
data: data.field,
success: function (res) {
layer.msg(res.message);
if(res.code >= 0){
layer.close(layer.index - 1);
reloadList();
}
submitting = false;
}
})
});
// 监听全选
form.on('checkbox(selectAllTop)', function (data) {
if (data.elem.checked) {
$("tr .order_goods_id:checkbox").each(function () {
if ($(this).attr("disabled") == undefined) {
$(this).prop("checked", true);
}
});
} else {
$("tr .order_goods_id:checkbox").each(function () {
$(this).prop("checked", false);
});
}
form.render();
});
// 监听每一行的复选框
var len = $("tbody .order_goods_id").length;
for (var i = 0; i < len; i++) {
var num = $(".order_goods_id").eq(i).val();
form.on('checkbox(select' + num + ')', function (data) {
if ($("tbody .order_goods_id:checked").length == len) {
$("input[lay-filter='selectAllTop']").prop("checked", true);
} else {
$("input[lay-filter='selectAllTop']").prop("checked", false);
}
form.render();
});
}
//复选框选中
table.on('checkbox(order_goods)', function (obj) {
if (obj.type == "all") {
var data = table.checkStatus('product_table');
var checkbox_data = data.data;
product_arr = [];
if (obj.checked) {
$.each(checkbox_data, function (index, itemobj) {
product_arr.push(itemobj.order_goods_id);
})
}
} else {
if (obj.checked) {
// if(index != -1){
product_arr.push(obj.data.order_goods_id);
// }
} else {
var index = $.inArray(obj.data.order_goods_id, product_arr);
product_arr.splice(index, 1);
}
}
$(".deliveryed_count").text(product_arr.length);
});
}
});
})
})
}
// 批量发货
function orderBatchDelivery(order_data) {
layui.use(['form', 'laytpl'], function () {
var batchSubmitting = false;
var laytpl = layui.laytpl, form = layui.form;
form.render();
var getTpl = $("#order_batch_delivery_html").html();
var data = {order_goods_list: order_data,express_company:express_company_list};
laytpl(getTpl).render(data, function (html) {
layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
fixed: false,
scrollbar: false,
title: "订单发货",
area: '800px',
btn: ['保存'],
yes: function (index, layero) {
$("#button_delivery_order").click();
},
content: html,
cancel: function (index, layero) {
//右上角关闭回调
layer.close(index);
//return false 开启该代码可禁止点击该按钮关闭
},
success: function (layero, index) {
var sheetExists = $("input[name='sheet_exists']").val();
var deliveryModeIdent = "";
if (sheetExists == 1) {
expressTemplate();
deliveryModeIdent = "electronicsheet";
} else if (sheetExists == 2) {
deliveryModeIdent = "manual";
}
$("#order_goods_list_box").html(tableContentChange(sheetExists));
form.render();
form.on('radio(delivery_type)', function (data) {
if (data.value == 1) {
$("#order_goods_list_box").html(tableContentChange(2));
$(".express-type").show();
} else {
$("#order_goods_list_box").html(tableContentChange(1));
$(".express-type").hide();
}
});
form.on('radio(delivery_mode)', function (data) {
deliveryModeIdent = data.value;
if (data.value == "electronicsheet") {
$(".express-mode").removeClass("layui-hide");
$(".express-number").addClass("layui-hide");
$(".delivery-type").addClass("layui-hide");
$(".logistics-company").addClass("layui-hide");
$("#order_goods_list_box").html(tableContentChange(1))
} else if (data.value == "manual") {
$(".express-mode").addClass("layui-hide");
$(".express-number").removeClass("layui-hide");
$(".logistics-company").removeClass("layui-hide");
$(".delivery-type").removeClass("layui-hide");
$("#order_goods_list_box").html(tableContentChange(2))
}
});
$("body").off("click", ".order_goods_list:eq(1) .goods-item-remove").on("click", ".order_goods_list:eq(1) .goods-item-remove", function () {
$(this).parents("tr").remove();
var orderId = $(this).attr("data-order-id");
for (var i=0;i<data.order_goods_list.length;i++){
if(data.order_goods_list[i].order_id == orderId){
data.order_goods_list.splice(i,1);
break;
}
}
var html = '<tr>';
html += '<td colspan="5" align="center">无数据</td>';
html += '</tr>';
if (!$(".order_goods_list:eq(1) tbody").text().trim()) {
$(".order_goods_list:eq(1) tbody").html(html)
}
});
form.on('submit(button_delivery_order)', function (data) {
var express_company_id = data.field.express_company_id;
var template_id = data.field.template_id;
if (template_id <= 0 && deliveryModeIdent == "electronicsheet") {
layer.msg('请选择面单模版', {time: 2000, icon: 5});
return;
}
if (data.field.delivery_type == 1 && express_company_id <= 0 && deliveryModeIdent == "manual") {
layer.msg('请选择物流公司', {time: 2000, icon: 5});
return;
}
var order_list = [];
for (var orderItem = 0; orderItem < $(".order_goods_list:eq(1) tbody tr").length; orderItem++) {
var json = {order_id: '', delivery_no: ''};
json.order_id = $(".order_goods_list:eq(1) tbody tr").eq(orderItem).find(".goods-item-remove").attr("data-order-id");
if ($(".order_goods_list:eq(1) tbody tr").eq(orderItem).find("input").length) {
json.delivery_no = $(".order_goods_list:eq(1) tbody tr").eq(orderItem).find("input").val();
}
order_list.push(json);
}
data.field.order_list = order_list;
if (batchSubmitting) return false;
batchSubmitting = true;
$.ajax({
type: "post",
url: '{:addon_url("shop/delivery/batchdelivery")}',
async: true,
dataType: 'json',
data: data.field,
success: function (res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer.index - 1);
reloadList();
}
batchSubmitting = false;
}
})
});
form.verify({
required: function (value, item) {
if (!value) {
return '物流单号为空';
}
}
});
function tableContentChange(type) {
var html = '<table class="layui-table order_goods_list" lay-filter="order_goods" lay-skin="line">';
html += '<colgroup>';
if (type == 2) {
html += '<col width="20%">';
html += '<col width="40%">';
html += '<col width="20%">';
html += '<col width="20%">';
} else if (type == 1) {
html += '<col>';
html += '<col width="30%">';
html += '<col width="50%">';
html += '<col width="20%">';
}
html += '</colgroup>';
html += '<thead>';
if (type == 2) {
html += '<tr>';
html += '<th>订单号</th>';
html += '<th>收货地址</th>';
html += '<th>物流单号</th>';
html += '<th>操作</th>';
html += '</tr>';
} else if (type == 1) {
html += '<tr>';
html += '<th></th>';
html += '<th>订单号</th>';
html += '<th>收货地址</th>';
html += '<th>操作</th>';
html += '</tr>';
}
html += '</thead>';
html += '</table>';
html += '<table class="layui-table order_goods_list" lay-filter="order_goods" lay-skin="line">';
html += '<colgroup>';
if (type == 2) {
html += '<col width="20%">';
html += '<col width="40%">';
html += '<col width="20%">';
html += '<col width="20%">';
} else if (type == 1) {
html += '<col>';
html += '<col width="30%">';
html += '<col width="50%">';
html += '<col width="20%">';
}
html += '</colgroup>';
html += '<tbody>';
if (data.order_goods_list.length > 0) {
for (var i = 0; i < data.order_goods_list.length; i++) {
if (type == 2) {
html += '<tr>';
html += `<td>${data.order_goods_list[i].order_no}</td>`;
html += `<td>${data.order_goods_list[i].full_address}</td>`;
html += `<td><input lay-verify="required" class="layui-input" type="text"></td>`;
html += `<td><a href="javascript:;" class="text-color goods-item-remove" data-order-id="${data.order_goods_list[i].order_id}">删除</a></td>`;
html += '</tr>';
} else if (type == 1) {
html += '<tr>';
html += `<td></td>`;
html += `<td>${data.order_goods_list[i].order_no}</td>`;
html += `<td>${data.order_goods_list[i].full_address}</td>`;
html += `<td><a href="javascript:;" class="text-color goods-item-remove" data-order-id="${data.order_goods_list[i].order_id}">删除</a></td>`;
html += '</tr>';
}
}
} else {
html += '<tr>';
html += `<td colspan="4" align="center">无数据</td>`;
html += '</tr>';
}
html += '</tbody>';
html += '</table>';
return html;
}
}
});
})
})
}
// 电子面单模版
function expressTemplate() {
$.ajax({
type: "post",
url: ns.url("shop/delivery/getexpresselectronicsheetlist"),
dataType: 'json',
success(res) {
if (res.code >= 0) {
var templateList = res.data;
var html = '';
html += '<select name="template_id" lay-search lay-filter="express_company">';
html += '<option value="">请选择面单模版</option>';
for (var i = 0; i < templateList.length; i++) {
html += '<option value=' + templateList[i].id + '>' + templateList[i].template_name + '</option>';
}
html += '</select>';
$(".express-mode div").html(html);
form.render();
}
}
})
}
// 修改物流单号
function editDelivery(order_id) {
var data = {};
// 物流信息
$.ajax({
type: "post",
url: ns.url("shop/delivery/getOrderDelivery"),
data:{order_id:order_id},
dataType: 'json',
async: false,
success:function(res) {
if (res.code >= 0) {
data.editDeliveryData = res.data;
}else{
layer.msg(layer.msg(res))
}
}
});
data.express_company = express_company_list; // 物流公司
var submitIdent = false;
laytpl($("#order_edit_delivery").html()).render(data, function(html) {
layer.open({
title: '修改物流单号',
skin: 'layer-tips-class',
type: 1,
btn:['保存','取消'],
area: ['800px', '600px'],
content: html,
yes: function () {
var submitArr = [];
var nullIdent = false;
if (submitIdent){
submitIdent = true;
layer.msg("请勿重复保存");
return false;
}
$(".edit-delivery-box tbody tr").each(function (index,item) {
var arr = {};
if (!$(item).find("td").eq(1).find("select option:selected").val()){
layer.msg("物流公司不能为空");
nullIdent = true;
return false;
}
if (!$(item).find("td").eq(2).find("input").val()){
layer.msg("物流单号不能为空");
nullIdent = true;
return false;
}
arr.express_company_id = $(item).find("td").eq(1).find("select option:selected").val();
arr.id = $(item).find("td").eq(0).text();
arr.delivery_no = $(item).find("td").eq(2).find("input").val();
submitArr.push(arr);
nullIdent = false;
});
if (nullIdent){
return false;
}
submitArr = JSON.stringify(submitArr);
$.ajax({
type: "post",
url: ns.url("shop/delivery/editOrderDelivery"),
dataType: 'json',
data:{delivery_json: submitArr},
success: function (res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer.index - 1);
reloadList();
}else{
submitIdent = false;
}
}
});
}
});
});
form.render();
}
</script>

View File

@@ -0,0 +1,173 @@
<!-- 订单物流发货 -->
<style>
.layui-table-body {
overflow: unset;
}
.delivery-content {
padding: 7px 0 !important;
}
.layui-table-view {
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.layui-form #order_goods_list thead th, .layui-form #order_goods_list tbody tr {
border-bottom: 1px solid #E6E6E6;
}
.layui-form #order_goods_list thead th {
background-color: #F5F5F5;
line-height: 30px;
}
.order-delivery .input-text {
height: auto;
min-height: 34px;
}
</style>
<!--发货订单弹出框-->
<script type="text/html" id="local_order_delivery_html">
<div class="order-delivery">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">收货地址</label>
<div class="layui-input-block">
<p class="input-text len-long"> {{ d.order_info.full_address }}{{ d.order_info.address }}</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发货方式</label>
<div class="layui-input-block">
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="default" title="商家自配送" checked>
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="default" title="第三方配送" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">配送员</label>
<div class="layui-input-block len-mid">
{{# if(!d.order_info.deliver_list){ }}
<input type="text" name="deliverer" lay-verify="required" placeholder="" autocomplete="off" class="layui-input len-mid">
{{# } }}
{{# if(d.order_info.deliver_list){ }}
<select name="deliverer" lay-search lay-filter="deliverer">
<option value="">请选择配送员</option>
{{# layui.each(d.order_info.deliver_list, function(index, item){ }}
<option value="{{ item.deliver_name }}" data-id="{{item.deliver_id}}">{{ item.deliver_name }}</option>
{{# }); }}
</select>
{{# } }}
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">配送员手机号</label>
<div class="layui-input-block">
<input type="text" name="deliverer_mobile" lay-verify="required|mobile" placeholder="" autocomplete="off" class="layui-input len-mid">
</div>
</div>
<input type="hidden" name="order_id" value="{{ d.order_info.order_id }}" class="layui-input" />
<div class="form-row">
<button type="button" class="layui-btn" lay-submit id="button_local_delivery_order" lay-filter="button_local_delivery_order" style="display:none;">保存</button>
</div>
</div>
</div>
</script>
<script>
// 外卖配送订单发货
function orderLocalDelivery(order_id) {
var submitting = false;
var store_addon_is_exit = '{:addon_is_exit("store")}';
layui.use(['form', 'laytpl'], function () {
var laytpl = layui.laytpl, form = layui.form;
form.render();
var getTpl = $("#local_order_delivery_html").html();
var data = {};
//查询订单信息
var order_info = getOrderInfo(order_id);
order_info.deliver_list = [];
for (var i=0;i<deliyer_list.length;i++){
// todo 要考虑没有门店插件的情况
if(store_addon_is_exit == 0 || (store_addon_is_exit == 1 && order_info.store_id == deliyer_list[i].store_id)) {
order_info.deliver_list.push(deliyer_list[i]);
}
}
data.order_info = order_info;
if (data.order_info.deliver_list) {
form.on('select(deliverer)', function (res) {
for (var i = 0; i < order_info.deliver_list.length; i++) {
if (order_info.deliver_list[i].deliver_name == res.value) {
$("input[name='deliverer_mobile']").val(order_info.deliver_list[i].deliver_mobile)
break;
}
}
});
}
laytpl(getTpl).render(data, function (html) {
layer_index = layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
fixed: false,
scrollbar: false,
title: "订单发货",
area: '800px',
btn: ['保存'],
yes: function (index, layero) {
$("#button_local_delivery_order").click();
},
content: html,
cancel: function (index, layero) {
//右上角关闭回调
layer.close(index);
//return false 开启该代码可禁止点击该按钮关闭
},
success: function (layero, index) {
form.render();
form.verify({
mobile:function (value){
if(!ns.getRegexp('mobile').test(value)){
return '请输入正确的手机号';
}
}
})
form.on('submit(button_local_delivery_order)', function (data) {
if (submitting) {
return false;
}
submitting = true;
$.ajax({
type: "post",
url: ns.url("shop/localorder/delivery"),
async: true,
dataType: 'json',
data: data.field,
success: function (res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer_index);
reloadList();
}
submitting = false;
}
})
});
}
});
})
})
}
</script>

View File

@@ -0,0 +1,434 @@
<link rel="stylesheet" href="SHOP_CSS/order_list.css"/>
<style>
.table-tab .layui-tab-content {padding-top: 0;}
.line-hiding{ cursor : default; -webkit-line-clamp: 2 !important;}
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
.layui-layout-admin .layui-table-cell{height: 32px;line-height: 32px;}
</style>
<div class="screen layui-collapse" lay-filter="selection_panel">
<div class="layui-colla-item">
<form class="layui-colla-content layui-form layui-show" lay-filter="order_list">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">搜索方式</label>
<div class="layui-input-inline">
<select name="order_label" >
{foreach $order_label_list as $k => $label_val}
<option value="{$k}">{$label_val}</option>
{/foreach}
</select>
</div>
<div class="layui-input-inline">
<input type="text" name="search" autocomplete="off" class="layui-input" />
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">营销类型</label>
<div class="layui-input-inline">
<select name="promotion_type" lay-filter="promotion_type">
<option value="">全部</option>
{foreach $promotion_type as $promotion_type_k => $promotion_type_val}
<option value="{$promotion_type_val.type}">{$promotion_type_val.name}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">订单来源</label>
<div class="layui-input-inline">
<select name="order_from">
<option value="">全部</option>
{foreach $order_from_list as $order_from_k => $order_from_v}
<option value="{$order_from_k}">{$order_from_v['name']}</option>
{/foreach}
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">下单时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-seven" onclick="datePick(7, this);return false;">近7天</button>
<button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-thirty" onclick="datePick(30, this);return false;">近30天</button>
</div>
<div class="layui-inline">
<label class="layui-form-label">付款方式</label>
<div class="layui-input-inline">
<select name="pay_type" >
<option value="">全部</option>
{foreach pay_type_list as $pay_type_k => $pay_type_v}
<option value="{$pay_type_k}">{$pay_type_v}</option>
{/foreach}
</select>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit id="btn_search"lay-filter="btn_search">筛选</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order_goods">导出订单商品</button>
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order" >导出订单</button>
<a class="layui-btn layui-btn-primary" href="{:href_url('shop/order/export')}" target="_blank">查看已生成报表</a>
</div>
<input type="hidden" name="status"/>
<input type="hidden" name="page"/>
</form>
</div>
</div>
<div class="layui-tab table-tab" lay-filter="order_tab">
<ul class="layui-tab-title">
<li class="layui-this" lay-id="">全部订单</li>
</ul>
<div class="layui-tab-content">
<!-- 列表 -->
<div id="order_list"></div>
</div>
</div>
<div id="order_page"></div>
<div id="order_operation"></div>
{include file="order/order_common_action" /}
<!-- 修改订单收货地址 -->
{include file="order/order_action" /}
<!-- 发货 -->
{include file="order/order_delivery_action" /}
<!-- 外卖发货 -->
{include file="localorder/local_order_delivery_action" /}
<!-- 主动退款 -->
{include file="order/shop_active_refund" /}
<script src="SHOP_JS/pickuporder.js"></script>
<script>
var laypage,element, form;
var is_refresh = false;
var laypage_util;
var order_type_status_json = {:json_encode($order_type_list)};
// 通过hash获取页数
function getHashPage(){
var page = 1;
var startTime = '';
var endTime = '';
var hash_arr = getHashArr();
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
if(item_arr[0].indexOf("page") != "-1"){
page = item_arr[1];
}
if (item_arr[0].indexOf("start_time") != "-1") {
startTime = ns.date_to_time(item_arr[1].split("%")[0]);
}
if (item_arr[0].indexOf("end_time") != "-1") {
endTime = ns.date_to_time(item_arr[1].split("%")[0]);
}
}
});
var _time = (endTime - startTime) / (24 * 60 * 60);
if (_time == 6) {
$(".date-picker-btn-seven").addClass("selected");
$(".date-picker-btn-thirty").removeClass("selected");
} else if (_time == 29) {
$(".date-picker-btn-thirty").addClass("selected");
$(".date-picker-btn-seven").removeClass("selected");
} else {
$(".date-picker-btn-seven").removeClass("selected");
$(".date-picker-btn-thirty").removeClass("selected");
}
return page;
}
//从hash中获取数据
function getHashData(){
var hash_arr = getHashArr();
var form_json = {
"end_time" : "",
"order_from" : "",
"order_label" : $("select[name=order_label]").val(),
"order_name" : "",
"order_status" : "",
"promotion_type" : "",
"pay_type" : "",
"search" : "",
"start_time" : "",
"order_type" : 'all',
'page_size':'',
"page" : ""
};
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
$.each(form_json,function(key, form_val){
if(item_arr[0].indexOf(key) != "-1"){
form_json[key] = item_arr[1];
}
})
}
})
}
form.val("order_list", form_json);
return form_json;
}
/**
* 获取哈希值order_type
*/
function getHashOrderType(){
var hash_arr = getHashArr();
var order_type = "all";
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
if(item_arr[0].indexOf("order_type") != "-1") {
order_type = item_arr[1];
}
}
})
}
return order_type;
}
layui.use(['laypage','laydate','form', 'element'], function(){
form = layui.form;
laypage = layui.laypage;
element = layui.element;
var laydate = layui.laydate;
form.render();
//渲染时间
laydate.render({
elem: '#start_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#end_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
//监听筛选事件
form.on('submit(btn_search)', function(data){
is_refresh = true;
data.field.page = 1;
if (!data.field.order_type){
data.field.order_type = 'all'
}
resetOrderStatus(data.field.order_type, 2);
setHashOrderList(data.field);
setOrderStatusTab(data.field.order_status);
return false;
});
//批量导出(订单项)
form.on('submit(batch_export_order_goods)', function(data){
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("shop/order/exportpickupordergoods"),
data: data.field,
success: function (res) {
}
})
window.open(ns.href("shop/order/export",{}))
return false;
});
//批量导出(订单)
form.on('submit(batch_export_order)', function(data) {
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("shop/order/exportpickuporder"),
data: data.field,
success: function (res) {
}
});
window.open(ns.href("shop/order/export", {}));
return false;
});
//订单类型
form.on('select(order_type)', function(data){
resetOrderStatus(data.value, 1);
return false;
});
//监听Tab切换以改变地址hash值
element.on('tab(order_tab)', function(){
var status = this.getAttribute('lay-id');
form.val("order_list", {"order_status":status});
var hash_data = getHashList();
hash_data.order_status = status;
hash_data.page = 1;
setHashOrderList(hash_data);
});
getHashData();
resetOrderStatus(2, 2);
getOrderList();//筛选
});
function setOrderStatusTab(order_status){
$(".layui-tab-title li").removeClass("layui-this");
$(".layui-tab-title li").each(function(){
var status = $(this).attr("lay-id");
if(status == order_status){
$(this).addClass("layui-this")
}
});
}
//重置状态tab 选项卡
function resetOrderStatus(order_type, is_tab){
var hash_order_type = getHashOrderType();
if(hash_order_type != order_type || is_refresh == false){
if(is_tab != 1 || is_refresh == false) {
$(".layui-tab-title li").not(':first').remove();
$(".layui-tab-title li").find(":first").addClass("layui-this");
}
if(is_tab != 2 || is_refresh == false){
$("select[name=order_status] option").not(':first').remove();
}
var status_item = order_type_status_json[order_type]["status"];
$.each(status_item,function(index, itemobj){
if(is_tab != 1 || is_refresh == false) {
$(".layui-tab-title").append('<li lay-id="' + index + '">' + itemobj + '</li>');
}
if(is_tab != 2 || is_refresh == false) {
$("select[name=order_status]").append('<option value="' + index + '">' + itemobj + '</option>');
}
});
form.render('select');
}
}
//哈希值 订单数据
function setHashOrderList(data){
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
var hash = ['url=shop/order/pickuporder'];
for (let key in data) {
if (data[key] != '' && data[key] != 'all') {
hash.push(`${key}=${data[key]}`)
}
}
location.hash = hash.join('&');
getOrderList();
}
function getHashList(){
var hash_arr = getHashArr();
var form_json = {
"end_time" : "",
"order_from" : "",
"order_label" : $("select[name=order_label]").val(),
"order_name" : "",
"order_status" : "",
"promotion_type" : "",
"pay_type" : "",
"search" : "",
"start_time" : "",
"order_type" : 'all',
'page_size':'',
"page" : ""
};
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
$.each(form_json,function(key, form_val){
if(item_arr[0].indexOf(key) != "-1"){
form_json[key] = item_arr[1];
}
})
}
})
}
return form_json;
}
var order = new Order();
function getOrderList(){
var url = ns.url("shop/order/pickuporder", getHashArr().join('&'));
$.ajax({
type : 'get',
dataType: 'json',
url :url,
success : function(res){
if(res.code == 0){
setOrderInfo(res.data.list);
order.setData(res.data);
$("#order_list").html(order.fetch());
laypage_util = new Page({
elem: 'order_page',
count: res.data.count,
curr: getHashPage(),
limit:getHashData()['page_size'] || 10,
callback: function(obj){
var hash_data = getHashData();
hash_data.page = obj.curr;
hash_data.page_size = obj.limit;
setHashOrderList(hash_data);
}
});
}else{
layer.msg(res.message);
}
}
});
}
/**
* 七天时间
*/
function datePick(date_num,event_obj){
$(".date-picker-btn").removeClass("selected");
$(event_obj).addClass('selected');
Date.prototype.Format = function (fmt,date_num) { //author: meizz
this.setDate(this.getDate()-date_num);
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
$("input[name=start_time]").val(before_time,0);
$("input[name=end_time]").val(now_time,date_num-1);
}
</script>

View File

@@ -0,0 +1,122 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="__STATIC__/css/seller_center.css" rel="stylesheet" type="text/css">
<style type="text/css">
body {
background: #FFF none;
}
</style>
<script src="__STATIC__/js/jquery-3.1.1.js"></script>
<script src="__STATIC__/ext/layui/layui.js"></script>
<script>
window.ns_url = {
baseUrl: "ROOT_URL/",
route: ['{:request()->module()}', '{:request()->controller()}', '{:request()->action()}'],
};
window.regexp_config = {:json_encode(config('regexp'))};
</script>
<script type="text/javascript" src="__STATIC__/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="__STATIC__/js/jquery.printarea.js" charset="utf-8"></script>
<title>{$menu_info['title']|default="打印发货单"} - {$shop_info['site_name']|default=""}</title>
</head>
<body>
{notempty name="order_detail"}
<div class="print-layout">
<div class="print-btn" id="printbtn" title="选择喷墨或激光打印机<br/>根据下列纸张描述进行<br/>设置并打印发货单据"><i></i><a href="javascript:void(0);">打印</a></div>
<div class="a5-size"></div>
<dl class="a5-tip">
<dt>
<h1>A5</h1>
<em>Size: 210mm x 148mm</em></dt>
<dd>当打印设置选择A5纸张、横向打印、无边距时每张A5打印纸可输出1页订单。</dd>
</dl>
<div class="a4-size"></div>
<dl class="a4-tip">
<dt>
<h1>A4</h1>
<em>Size: 210mm x 297mm</em></dt>
<dd>当打印设置选择A4纸张、竖向打印、无边距时每张A4打印纸可输出2页订单。</dd>
</dl>
<div class="print-page">
<div id="printarea">
<div class="orderprint">
<div class="top">
<div class="full-title">{$order_detail.site_name} 发货单</div>
</div>
<table class="buyer-info">
<tr>
<td class="w200">收货人:{$order_detail.name}</td>
<td>电话:{$order_detail.mobile}</td>
<td></td>
</tr>
<tr>
<td colspan="3">地址:{$order_detail.full_address} {$order_detail.address}</td>
</tr>
<tr>
<td>订单号:{$order_detail.order_no}</td>
<td>下单时间:{$order_detail.create_time|date="Y-m-d"}</td>
</tr>
</table>
<table class="order-info">
<thead>
<tr>
<th class="w40">序号</th>
<th class="tl">商品名称</th>
<th class="w70 tl">单价(元)</th>
<th class="w50">数量</th>
<th class="w70 tl">小计(元)</th>
</tr>
</thead>
<tbody>
{php}
$total_goods_num = 0;
{/php}
{foreach $order_detail['order_goods'] as $list_k => $order_goods_item}
{php}
$total_goods_num += $order_goods_item['num'];
{/php}
<tr>
<td>{$list_k+1}</td>
<td class="tl">{$order_goods_item.sku_name}</td>
<td class="tl">{$order_goods_item.price}</td>
<td>{$order_goods_item.num}</td>
<td class="tl">{$order_goods_item.goods_money}</td>
</tr>
{/foreach}
<tr>
<th></th>
<th colspan="2" class="tl">合计</th>
<th>{$total_goods_num}</th>
<th class="tl">{$order_detail.goods_money}</th>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="10">
<span>总计:¥{$order_detail.goods_money}</span>
<span>运费:¥{$order_detail.delivery_money}</span>
<span>优惠:¥{$order_detail.promotion_money}</span>
<span>订单总额:¥{$order_detail.order_money}</span>
<span>店铺:{$order_detail.site_name}</span>
</th>
</tr>
</tfoot>
</table>
<div class="explain"></div>
<div class="tc page">第1页/共1页</div>
</div>
</div>
</div>
</div>
<script>
$(function(){
$("#printbtn").click(function(){
$("#printarea").printArea();
});
});
</script>
{/notempty}
</body>
</html>

View File

@@ -0,0 +1,143 @@
<style>
.refund-view-list{font-size:14px;line-height:20px;color:#323233;color:var(--theme-stroke-1,#323233)}
.refund-view-item {margin-bottom: 10px;}
.refund-view-item-label{width:75px; vertical-align: top;}
.refund-view-item-content{display:inline-block}
.refund-view-list .word-aux{margin-left:74px;}
</style>
<!-- 店铺主动退款 -->
<script type="text/html" id="refund_transfer_html">
<div style="padding:10px;">
<div class="layui-form refund-transfer-html" id='refund_transfer'lay-filter="refund_transfer">
<div class="refund-view-list">
<div class="refund-view-item">
<label class="refund-view-item-label">退款金额</label>
<div class="refund-view-item-content">
<span class="refund-money">{{ d.order_goods_info.refund_apply_money }}</span>
</div>
</div>
<div class="refund-view-item">
<label class="refund-view-item-label">主动退款</label>
<div class="refund-view-item-content">
<input type='number' class="layui-input" name="shop_active_refund_money" value="{{d.order_goods_info.refund_apply_money}}" placeholder="0.00">
</div>
</div>
<div class="refund-view-item">
<label class="refund-view-item-label">完成状态</label>
<div class="refund-view-item-content">
<input type="radio" title="部分退款状态" checked name="refund_status" value="PARTIAL_REFUND">
<input type="radio" title="退款完成状态" name="refund_status" value="REFUND_COMPLETE">
</div>
<div class="word-aux">
<div>1如果是退部分金额退款后可以是部分退款状态或退款完成状态</div>
<div>2如果是退全部金额则退款后一定是退款完成状态</div>
<div>3退款完成才会执行相关业务如核销码失效卡包失效等操作</div>
</div>
</div>
<div class="refund-view-item">
<label class="refund-view-item-label">退款方式</label>
<div class="refund-view-item-content">
<input type="radio" title="原路退款" checked name="shop_active_refund_money_type" value="1">
<input type="radio" title="线下退款" name="shop_active_refund_money_type" value="2">
<input type="radio" title="退款到余额" name="shop_active_refund_money_type" value="3">
</div>
</div>
<div class="refund-view-item">
<label class="refund-view-item-label">退款说明</label>
<div class="refund-view-item-content">
<textarea name="shop_active_refund_remark" class="layui-textarea len-long" maxlength="150"></textarea>
</div>
</div>
</div>
<input type="hidden" name="order_goods_id" value="{{ d.order_goods_info.order_goods_id }}"/>
<button class="layui-btn" lay-submit id="submit_transfer" lay-filter="submit_transfer" style="display:none;">保存</button>
</div>
</div>
</script>
<script>
var laytpl,form,active_refund_layer;
layui.use(['laytpl','form'], function(){
laytpl = layui.laytpl;
form = layui.form;
form.render();
});
// 主动退款
function shopActiveRefund(order_goods_id) {
$.ajax({
url: ns.url("shop/orderrefund/getOrderGoodsRefundInfo"),
type: "POST",
dataType: "JSON",
async: false,
data: {order_goods_id: order_goods_id},
success: function (res) {
if (res.code >= 0) {
var getTpl = $("#refund_transfer_html").html();
var refund_data = res.data;
laytpl(getTpl).render(refund_data, function (html) {
active_refund_layer = layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
offset: 'auto',
scrollbar: true,
fixed: false,
title: "店铺主动退款",
area: ['700px', 'auto'],
btn: ['确认退款', '取消'],
yes: function (index, layero) {
$("#submit_transfer").click();
},
btn2: function (index, layero) {
layer.close(index);
},
content: html,
success: function (layero, index) {
var repeat_flag = false;//防重复标识
form.render();
form.on('submit(submit_transfer)', function (data) {
if(!ns.getRegexp('>=0float2').test(data.field.shop_active_refund_money)){
layer.msg('请输入正确的退款金额,最多保留两位小数');
return;
}
if(Number(data.field.shop_active_refund_money) > Number(refund_data.order_goods_info.refund_apply_money)){
layer.msg('主动退款金额不能大于可退款总额');
return;
}
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/orderrefund/shopActiveRefund"),
type: "POST",
dataType: "JSON",
data: data.field,
beforeSend: function () {layer_index = layer.load();},
complete: function () {layer.close(layer_index);},
success: function (res) {
layer.msg(res.message);
if (res.code == 0) {
layer.close(active_refund_layer);
reloadList();
} else {
repeat_flag = false;
}
}
});
return false;
});
}
});
form.render();
});
} else {
layer.msg(res.message);
}
}
});
}
</script>

View File

@@ -0,0 +1,63 @@
<style type="text/css">
.form-wrap {position: relative;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">标题:</label>
<div class="layui-input-inline">
<input type="text" name="title" required lay-verify="required" placeholder="请输入标题" value="{$document_info.data.title}" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">内容:</label>
<div class="layui-input-inline">
<script id="editor" type="text/plain" class="special-length" style="height:300px;"></script>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
<input type="hidden" name="" id="agreementContent" value="{$document_info.data.content}" />
</div>
<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>
//实例化富文本
var ue = UE.getEditor('editor');
if($("#agreementContent").val()){
ue.ready(function() {
ue.setContent($("#agreementContent").val());
});
}
layui.use('form', function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
//表单提交
form.on('submit(save)', function(data) {
if(repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url("shop/order/transactionagreement"),
data: {
'title': data.field.title,
'content': ue.getContent(),
},
dataType: 'JSON', //服务器返回json格式数据
type: 'POST', //HTTP请求类型
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
});
});
</script>