初始上传
This commit is contained in:
162
app/shop/view/order/batch_print_order.html
Executable file
162
app/shop/view/order/batch_print_order.html
Executable 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
444
app/shop/view/order/config.html
Executable 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">语音提醒 <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
620
app/shop/view/order/detail.html
Executable 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
206
app/shop/view/order/export.html
Executable 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 }}
|
||||
导出时间:{{ ns.time_to_date(item.create_time) }}
|
||||
导出主体:{{ 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>
|
||||
{{#}}}
|
||||
|
||||
{{#}}}
|
||||
<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>
|
||||
125
app/shop/view/order/invoice_edit.html
Executable file
125
app/shop/view/order/invoice_edit.html
Executable 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>
|
||||
377
app/shop/view/order/invoice_list.html
Executable file
377
app/shop/view/order/invoice_list.html
Executable 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
607
app/shop/view/order/lists.html
Executable 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"> </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>
|
||||
5
app/shop/view/order/order_action.html
Executable file
5
app/shop/view/order/order_action.html
Executable 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" /}
|
||||
371
app/shop/view/order/order_address_update.html
Executable file
371
app/shop/view/order/order_address_update.html
Executable file
@@ -0,0 +1,371 @@
|
||||
<!--<script type="text/javascript" src="{$http_type}://webapi.amap.com/maps?v=1.4.6&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>
|
||||
161
app/shop/view/order/order_adjust_price.html
Executable file
161
app/shop/view/order/order_adjust_price.html
Executable 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>
|
||||
272
app/shop/view/order/order_common_action.html
Executable file
272
app/shop/view/order/order_common_action.html
Executable 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" /}
|
||||
831
app/shop/view/order/order_delivery_action.html
Executable file
831
app/shop/view/order/order_delivery_action.html
Executable 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>
|
||||
173
app/shop/view/order/order_delivery_local_action.html
Executable file
173
app/shop/view/order/order_delivery_local_action.html
Executable 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>
|
||||
434
app/shop/view/order/pickuporder.html
Executable file
434
app/shop/view/order/pickuporder.html
Executable 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>
|
||||
122
app/shop/view/order/print_order.html
Executable file
122
app/shop/view/order/print_order.html
Executable 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>
|
||||
143
app/shop/view/order/shop_active_refund.html
Executable file
143
app/shop/view/order/shop_active_refund.html
Executable 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>
|
||||
63
app/shop/view/order/transaction_agreement.html
Executable file
63
app/shop/view/order/transaction_agreement.html
Executable 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>
|
||||
Reference in New Issue
Block a user