用户订单售后管理
parent
7cac938814
commit
5852b20bfb
|
|
@ -13,7 +13,6 @@ namespace app\index\controller;
|
|||
use app\service\OrderService;
|
||||
use app\service\PaymentService;
|
||||
use app\service\GoodsCommentsService;
|
||||
use app\service\OrderAftersaleService;
|
||||
|
||||
/**
|
||||
* 订单管理
|
||||
|
|
@ -200,85 +199,6 @@ class Order extends Common
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 售后页面
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-21
|
||||
* @desc description
|
||||
*/
|
||||
public function Aftersale()
|
||||
{
|
||||
// 参数
|
||||
$params = input();
|
||||
$order_id = isset($params['id']) ? intval($params['id']) : 0;
|
||||
$goods_id = isset($params['gid']) ? intval($params['gid']) : 0;
|
||||
$ret = OrderAftersaleService::OrdferGoodsRow($order_id, $goods_id, $this->user['id']);
|
||||
if($ret['code'] == 0)
|
||||
{
|
||||
$this->assign('goods', $ret['data']['items']);
|
||||
$this->assign('order', $ret['data']);
|
||||
|
||||
// 仅退款原因
|
||||
$return_only_money_reason = MyC('home_order_aftersale_return_only_money_reason');
|
||||
$this->assign('return_only_money_reason_list', empty($return_only_money_reason) ? [] : explode("\n", $return_only_money_reason));
|
||||
|
||||
// 退款退货原因
|
||||
$return_money_goods_reason = MyC('home_order_aftersale_return_money_goods_reason');
|
||||
$this->assign('return_money_goods_reason_list', empty($return_money_goods_reason) ? [] : explode("\n", $return_money_goods_reason));
|
||||
|
||||
// 获取当前订单商品售后最新的一条纪录
|
||||
$data_params = [
|
||||
'm' => 0,
|
||||
'n' => 1,
|
||||
'where' => [
|
||||
['order_id', '=', $order_id],
|
||||
['goods_id', '=', $goods_id],
|
||||
['user_id', '=', $this->user['id']],
|
||||
],
|
||||
];
|
||||
$new_aftersale = OrderAftersaleService::OrderGoodsAftersaleList($data_params);
|
||||
$this->assign('new_aftersale_data', empty($new_aftersale['data'][0]) ? [] : $new_aftersale['data'][0]);
|
||||
|
||||
$this->assign('params', $params);
|
||||
return $this->fetch();
|
||||
} else {
|
||||
$this->assign('msg', $ret['msg']);
|
||||
return $this->fetch('public/tips_error');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请售后创建
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-23
|
||||
* @desc description
|
||||
*/
|
||||
public function AftersaleCreate()
|
||||
{
|
||||
$params = input();
|
||||
$params['user'] = $this->user;
|
||||
return OrderAftersaleService::AftersaleCreate($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请售后-用户发货
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-23
|
||||
* @desc description
|
||||
*/
|
||||
public function AftersaleDelivery()
|
||||
{
|
||||
$params = input();
|
||||
$params['user'] = $this->user;
|
||||
return OrderAftersaleService::AftersaleDelivery($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单支付
|
||||
* @author Devil
|
||||
|
|
|
|||
|
|
@ -0,0 +1,240 @@
|
|||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Devil
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\service\OrderService;
|
||||
use app\service\PaymentService;
|
||||
use app\service\OrderAftersaleService;
|
||||
|
||||
/**
|
||||
* 订单售后
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-01T21:51:08+0800
|
||||
*/
|
||||
class Orderaftersale extends Common
|
||||
{
|
||||
/**
|
||||
* 构造方法
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-11-30
|
||||
* @desc description
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// 是否登录
|
||||
$this->IsLogin();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-09-28
|
||||
* @desc description
|
||||
*/
|
||||
public function Index()
|
||||
{
|
||||
// 参数
|
||||
$params = input();
|
||||
$params['user'] = $this->user;
|
||||
$params['user_type'] = 'user';
|
||||
|
||||
// 分页
|
||||
$number = 10;
|
||||
|
||||
// 条件
|
||||
$where = OrderAftersaleService::OrderAftersaleListWhere($params);
|
||||
|
||||
// 获取总数
|
||||
$total = OrderAftersaleService::OrderAftersaleTotal($where);
|
||||
|
||||
// 分页
|
||||
$page_params = array(
|
||||
'number' => $number,
|
||||
'total' => $total,
|
||||
'where' => $params,
|
||||
'page' => isset($params['page']) ? intval($params['page']) : 1,
|
||||
'url' => MyUrl('index/orderaftersale/index'),
|
||||
);
|
||||
$page = new \base\Page($page_params);
|
||||
$this->assign('page_html', $page->GetPageHtml());
|
||||
|
||||
// 获取列表
|
||||
$data_params = array(
|
||||
'm' => $page->GetPageStarNumber(),
|
||||
'n' => $number,
|
||||
'where' => $where,
|
||||
);
|
||||
$data = OrderAftersaleService::OrderAftersaleList($data_params);
|
||||
$this->assign('data_list', $data['data']);
|
||||
|
||||
// 静态数据
|
||||
$this->assign('common_order_aftersale_type_list', lang('common_order_aftersale_type_list'));
|
||||
$this->assign('common_order_aftersale_status_list', lang('common_order_aftersale_status_list'));
|
||||
$this->assign('common_order_aftersale_refundment_list', lang('common_order_aftersale_refundment_list'));
|
||||
|
||||
// 参数
|
||||
$this->assign('params', $params);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-10-08
|
||||
* @desc description
|
||||
*/
|
||||
public function Detail()
|
||||
{
|
||||
// 参数
|
||||
$params = input();
|
||||
$params['user'] = $this->user;
|
||||
$params['user_type'] = 'user';
|
||||
|
||||
// 条件
|
||||
$where = OrderService::OrderListWhere($params);
|
||||
|
||||
// 获取列表
|
||||
$data_params = array(
|
||||
'm' => 0,
|
||||
'n' => 1,
|
||||
'where' => $where,
|
||||
);
|
||||
$data = OrderService::OrderList($data_params);
|
||||
if(!empty($data['data'][0]))
|
||||
{
|
||||
// 发起支付 - 支付方式
|
||||
$this->assign('buy_payment_list', PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]));
|
||||
|
||||
$this->assign('data', $data['data'][0]);
|
||||
|
||||
// 参数
|
||||
$this->assign('params', $params);
|
||||
return $this->fetch();
|
||||
} else {
|
||||
$this->assign('msg', '没有相关数据');
|
||||
return $this->fetch('public/tips_error');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 售后页面
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-21
|
||||
* @desc description
|
||||
*/
|
||||
public function Aftersale()
|
||||
{
|
||||
// 参数
|
||||
$params = input();
|
||||
$order_id = isset($params['id']) ? intval($params['id']) : 0;
|
||||
$goods_id = isset($params['gid']) ? intval($params['gid']) : 0;
|
||||
$ret = OrderAftersaleService::OrdferGoodsRow($order_id, $goods_id, $this->user['id']);
|
||||
if($ret['code'] == 0)
|
||||
{
|
||||
$this->assign('goods', $ret['data']['items']);
|
||||
$this->assign('order', $ret['data']);
|
||||
|
||||
// 仅退款原因
|
||||
$return_only_money_reason = MyC('home_order_aftersale_return_only_money_reason');
|
||||
$this->assign('return_only_money_reason_list', empty($return_only_money_reason) ? [] : explode("\n", $return_only_money_reason));
|
||||
|
||||
// 退款退货原因
|
||||
$return_money_goods_reason = MyC('home_order_aftersale_return_money_goods_reason');
|
||||
$this->assign('return_money_goods_reason_list', empty($return_money_goods_reason) ? [] : explode("\n", $return_money_goods_reason));
|
||||
|
||||
// 获取当前订单商品售后最新的一条纪录
|
||||
$data_params = [
|
||||
'm' => 0,
|
||||
'n' => 1,
|
||||
'where' => [
|
||||
['order_id', '=', $order_id],
|
||||
['goods_id', '=', $goods_id],
|
||||
['user_id', '=', $this->user['id']],
|
||||
],
|
||||
];
|
||||
$new_aftersale = OrderAftersaleService::OrderAftersaleList($data_params);
|
||||
$this->assign('new_aftersale_data', empty($new_aftersale['data'][0]) ? [] : $new_aftersale['data'][0]);
|
||||
|
||||
// 静态数据
|
||||
$this->assign('common_order_aftersale_type_list', lang('common_order_aftersale_type_list'));
|
||||
|
||||
$this->assign('params', $params);
|
||||
return $this->fetch();
|
||||
} else {
|
||||
$this->assign('msg', $ret['msg']);
|
||||
return $this->fetch('public/tips_error');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请售后创建
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-23
|
||||
* @desc description
|
||||
*/
|
||||
public function Create()
|
||||
{
|
||||
$params = input();
|
||||
$params['user'] = $this->user;
|
||||
return OrderAftersaleService::AftersaleCreate($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户退货
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-23
|
||||
* @desc description
|
||||
*/
|
||||
public function Delivery()
|
||||
{
|
||||
$params = input();
|
||||
$params['user'] = $this->user;
|
||||
return OrderAftersaleService::AftersaleDelivery($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单取消
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-09-30
|
||||
* @desc description
|
||||
*/
|
||||
public function Cancel()
|
||||
{
|
||||
if(input('post.'))
|
||||
{
|
||||
$params = input('post.');
|
||||
$params['user'] = $this->user;
|
||||
return OrderAftersaleService::AftersaleCancel($params);
|
||||
} else {
|
||||
$this->assign('msg', '非法访问');
|
||||
return $this->fetch('public/tips_error');
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -47,7 +47,7 @@ class Search extends Common
|
|||
$this->params['screening_price_id'] = intval(input('screening_price_id', 0));
|
||||
|
||||
// 搜索关键字
|
||||
$this->params['keywords'] = str_replace(['?', ' ', '+', '-'], '', trim(input('keywords')));
|
||||
$this->params['wd'] = str_replace(['?', ' ', '+', '-'], '', trim(input('wd')));
|
||||
|
||||
// 排序方式
|
||||
$this->params['order_by_field'] = input('order_by_field', 'default');
|
||||
|
|
@ -68,11 +68,11 @@ class Search extends Common
|
|||
{
|
||||
if(input('post.'))
|
||||
{
|
||||
$p = empty($this->params['keywords']) ? [] : ['keywords'=>$this->params['keywords']];
|
||||
$p = empty($this->params['wd']) ? [] : ['wd'=>$this->params['wd']];
|
||||
return redirect(MyUrl('index/search/index', $p));
|
||||
} else {
|
||||
// 品牌列表
|
||||
$this->assign('brand_list', BrandService::CategoryBrandList(['category_id'=>$this->params['category_id'], 'keywords'=>$this->params['keywords']]));
|
||||
$this->assign('brand_list', BrandService::CategoryBrandList(['category_id'=>$this->params['category_id'], 'keywords'=>$this->params['wd']]));
|
||||
|
||||
// 商品分类
|
||||
$this->assign('category_list', SearchService::GoodsCategoryList(['category_id'=>$this->params['category_id']]));
|
||||
|
|
@ -99,8 +99,9 @@ class Search extends Common
|
|||
* @desc description
|
||||
*/
|
||||
public function GoodsList()
|
||||
{
|
||||
{
|
||||
// 获取商品列表
|
||||
$this->params['keywords'] = $this->params['wd'];
|
||||
$ret = SearchService::GoodsList($this->params);
|
||||
if(empty($ret['data']['data']))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@
|
|||
</td>
|
||||
<td class="row-number">
|
||||
{{if in_array($order['status'], [2,3,4])}}
|
||||
<a href="{{:MyUrl('index/order/aftersale', ['id'=>$order['id'], 'gid'=>$goods['goods_id']])}}" target="_blank">申请售后</a>
|
||||
<a href="{{:MyUrl('index/orderaftersale/aftersale', ['id'=>$order['id'], 'gid'=>$goods['goods_id']])}}" target="_blank">申请售后</a>
|
||||
{{/if}}
|
||||
</td>
|
||||
{{if $keys eq 0}}
|
||||
|
|
|
|||
|
|
@ -120,64 +120,63 @@
|
|||
|
||||
<!-- 类型 -->
|
||||
<div class="am-cf aftersale-type">
|
||||
<div class="am-fl items-align" data-type="0">
|
||||
<div class="items-middle">
|
||||
<div class="am-fl icon">
|
||||
<i class="am-icon-random"></i>
|
||||
{{foreach $common_order_aftersale_type_list as $v}}
|
||||
<div class="items-align {{$v.class}}" data-type="{{$v.value}}">
|
||||
<div class="items-middle">
|
||||
<div class="am-fl icon">
|
||||
<i class="{{$v.icon}}"></i>
|
||||
</div>
|
||||
<p class="name">{{$v.name}}</p>
|
||||
<p class="desc">{{$v.desc}}</p>
|
||||
</div>
|
||||
<p class="name">仅退款</p>
|
||||
<p class="desc">未收到货(未签收),协商同意前提下</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="am-fr items-align" data-type="1">
|
||||
<div class="items-middle">
|
||||
<div class="am-fl icon">
|
||||
<i class="am-icon-retweet"></i>
|
||||
</div>
|
||||
<p class="name">退货退款</p>
|
||||
<p class="desc">已收到货,需要退换已收到的货物</p>
|
||||
</div>
|
||||
</div>
|
||||
{{/foreach}}
|
||||
</div>
|
||||
|
||||
<!-- 步骤 -->
|
||||
{{include file="order/aftersale_step" /}}
|
||||
{{include file="orderaftersale/step" /}}
|
||||
|
||||
<!-- 表单 -->
|
||||
<div class="am-panel am-panel-default aftersale-form-panel none">
|
||||
<div class="am-panel-bd">
|
||||
{{include file="order/aftersale_create" /}}
|
||||
{{include file="orderaftersale/create" /}}
|
||||
</div>
|
||||
</div>
|
||||
{{else /}}
|
||||
<!-- 步骤 -->
|
||||
{{include file="order/aftersale_step" /}}
|
||||
{{include file="orderaftersale/step" /}}
|
||||
|
||||
<!-- 状态环节 -->
|
||||
{{switch $new_aftersale_data.status}}
|
||||
{{case 0}}
|
||||
<div class="am-alert">
|
||||
当前订单商品售后已提交申请,等待管理员确认中!<a href="#">详情查看</a>
|
||||
当前订单商品售后已提交申请,等待管理员确认中!<a href="{{:MyUrl('index/orderaftersale/index', ['keywords'=>$new_aftersale_data['order_no']])}}">详情查看</a>
|
||||
</div>
|
||||
{{/case}}
|
||||
|
||||
{{case 1}}
|
||||
<div class="am-panel am-panel-default aftersale-form-panel">
|
||||
<div class="am-panel-bd">
|
||||
{{include file="order/aftersale_delivery" /}}
|
||||
{{if $new_aftersale_data['type'] eq 1}}
|
||||
<div class="am-panel am-panel-default aftersale-form-panel">
|
||||
<div class="am-panel-bd">
|
||||
{{include file="orderaftersale/delivery" /}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{else /}}
|
||||
<div class="am-alert">
|
||||
当前订单商品售后已提交申请,等待管理员确认中!<a href="{{:MyUrl('index/orderaftersale/index', ['keywords'=>$new_aftersale_data['order_no']])}}">详情查看</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/case}}
|
||||
|
||||
{{case 2}}
|
||||
<div class="am-alert">
|
||||
当前订单商品售后已退货,等待管理员审核中!<a href="#">详情查看</a>
|
||||
当前订单商品售后已退货,等待管理员审核中!<a href="{{:MyUrl('index/orderaftersale/index', ['keywords'=>$new_aftersale_data['order_no']])}}">详情查看</a>
|
||||
</div>
|
||||
{{/case}}
|
||||
|
||||
{{case 3}}
|
||||
<div class="am-alert am-alert-success">
|
||||
当前订单商品售后已处理结束!<a href="#">详情查看</a>
|
||||
当前订单商品售后已处理结束!<a href="{{:MyUrl('index/orderaftersale/index', ['keywords'=>$new_aftersale_data['order_no']])}}">详情查看</a>
|
||||
</div>
|
||||
{{/case}}
|
||||
{{/switch}}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<form class="am-form form-validation view-save" action="{{:MyUrl('index/order/aftersalecreate')}}" method="POST" request-type="ajax-reload">
|
||||
<form class="am-form form-validation view-save" action="{{:MyUrl('index/orderaftersale/create')}}" method="POST" request-type="ajax-reload">
|
||||
<div class="am-form-group">
|
||||
<label>退款原因<span class="am-form-group-label-tips-must">必选</span></label>
|
||||
<select name="reason" class="chosen-select" data-placeholder="退款原因..." data-validation-message="请选择退款原因" data-only-json='{{:json_encode($return_only_money_reason_list)}}' data-goods-json='{{:json_encode($return_money_goods_reason_list)}}' required>
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<form class="am-form form-validation view-save" action="{{:MyUrl('index/order/aftersaledelivery')}}" method="POST" request-type="ajax-reload">
|
||||
<form class="am-form form-validation view-save" action="{{:MyUrl('index/orderaftersale/delivery')}}" method="POST" request-type="ajax-reload">
|
||||
<div class="am-form-group">
|
||||
<label>快递名称<span class="am-form-group-label-tips-must">必选</span></label>
|
||||
<input type="text" name="express_name" class="am-radius" placeholder="快递名称" minlength="1" maxlength="60" data-validation-message="快递名称格式 1~60 个字符之间" required />
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
{{include file="public/header" /}}
|
||||
|
||||
<!-- header top nav -->
|
||||
{{include file="public/header_top_nav" /}}
|
||||
|
||||
<!-- search -->
|
||||
{{include file="public/nav_search" /}}
|
||||
|
||||
<!-- header nav -->
|
||||
{{include file="public/header_nav" /}}
|
||||
|
||||
<!-- goods category -->
|
||||
{{include file="public/goods_category" /}}
|
||||
|
||||
<!-- content -->
|
||||
<div class="am-container user-main">
|
||||
|
||||
<!-- user menu start -->
|
||||
{{include file="public/user_menu" /}}
|
||||
<!-- user menu end -->
|
||||
|
||||
<!-- content start -->
|
||||
<div class="user-content">
|
||||
<div class="user-content-body">
|
||||
<!-- form start -->
|
||||
<form class="am-form form-validation form-search" method="post" action="{{:MyUrl('index/orderaftersale/index')}}" request-type="form">
|
||||
<div class="thin">
|
||||
<div class="am-input-group am-input-group-sm am-fl so">
|
||||
<input type="text" autocomplete="off" name="keywords" class="am-radius" placeholder="订单号" value="{{if !empty($params.keywords)}}{{$params.keywords}}{{/if}}" />
|
||||
<span class="am-input-group-btn">
|
||||
<button class="am-btn am-btn-default am-radius" type="submit" data-am-loading="{spinner:'circle-o-notch', loadingText:'搜索中...'}">搜索</button>
|
||||
</span>
|
||||
</div>
|
||||
<label class="am-fl thin_sub more-submit">
|
||||
更多筛选条件
|
||||
{{if isset($params['is_more']) and $params['is_more'] eq 1}}
|
||||
<input type="checkbox" name="is_more" value="1" id="is_more" checked />
|
||||
<i class="am-icon-angle-up"></i>
|
||||
{{else /}}
|
||||
<input type="checkbox" name="is_more" value="1" id="is_more" />
|
||||
<i class="am-icon-angle-down"></i>
|
||||
{{/if}}
|
||||
</label>
|
||||
</div>
|
||||
<table class="so-list more-where {{if !isset($params['is_more'])}}none{{/if}}">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<span>类型:</span>
|
||||
<select name="type" class="chosen-select" data-placeholder="类型...">
|
||||
<option value="-1">类型...</option>
|
||||
{{if !empty($common_order_aftersale_type_list)}}
|
||||
{{foreach $common_order_aftersale_type_list as $v}}
|
||||
<option value="{{$v.value}}" {{if isset($params['type']) and $params['type'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<span>状态:</span>
|
||||
<select name="status" class="chosen-select" data-placeholder="状态...">
|
||||
<option value="-1">状态...</option>
|
||||
{{if !empty($common_order_aftersale_status_list)}}
|
||||
{{foreach $common_order_aftersale_status_list as $v}}
|
||||
<option value="{{$v.value}}" {{if isset($params['status']) and $params['status'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span>退款:</span>
|
||||
<select name="refundment" class="chosen-select" data-placeholder="退款...">
|
||||
<option value="-1">退款...</option>
|
||||
{{if !empty($common_order_aftersale_refundment_list)}}
|
||||
{{foreach $common_order_aftersale_refundment_list as $v}}
|
||||
<option value="{{$v.value}}" {{if isset($params['refundment']) and $params['refundment'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner:'circle-o-notch', loadingText:'搜索中...'}">搜索</button>
|
||||
<a href="{{:MyUrl('index/orderaftersale/index')}}" class="am-btn am-btn-warning am-radius am-btn-sm reset-submit">清除条件</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
<!-- form end -->
|
||||
|
||||
<!-- 列表 -->
|
||||
<div class="data-list am-margin-top-sm">
|
||||
<table class="am-table am-table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>申请信息</th>
|
||||
<th class="am-hide-sm-only">凭证</th>
|
||||
<th>状态</th>
|
||||
<th class="am-hide-sm-only">快递信息</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{if !empty($data_list)}}
|
||||
{{foreach $data_list as $v}}
|
||||
<tr>
|
||||
<td>
|
||||
类型:{{$v.type_text}}<br />
|
||||
原因:{{$v.reason}}<br />
|
||||
数量:{{$v.number}}<br />
|
||||
金额:{{$v.price}}<br />
|
||||
说明:{{$v.msg}}<br />
|
||||
时间:{{$v.apply_time_time}}
|
||||
</td>
|
||||
<td class="am-hide-sm-only">
|
||||
{{if !empty($v['images'])}}
|
||||
<div data-am-widget="slider" class="am-slider am-slider-a1" data-am-slider='{"directionNav":false, slideshow:false}' >
|
||||
<ul class="am-slides">
|
||||
{{foreach $v.images as $img}}
|
||||
<li>
|
||||
<img src="{{$img}}" />
|
||||
</li>
|
||||
{{/foreach}}
|
||||
</ul>
|
||||
</div>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>
|
||||
<p>{{$v.status_text}}</p>
|
||||
{{if $v['status'] eq 3 and !empty($v['refundment_text'])}}
|
||||
<span class="am-badge am-badge-success am-margin-top-xs">{{$v.refundment_text}}</span>
|
||||
{{/if}}
|
||||
{{if $v['status'] eq 4 and !empty($v['refuse_reason'])}}
|
||||
<span class="am-badge am-badge-danger am-margin-top-xs">{{$v.refuse_reason}}</span>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="am-hide-sm-only">
|
||||
{{if $v['type'] eq 1 and in_array($v['status'], [2,3])}}
|
||||
快递:{{$v.express_name}}<br />
|
||||
单号:{{$v.express_number}}<br />
|
||||
时间:{{$v.delivery_time_time}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="operation">
|
||||
{{if in_array($v['status'], [0,3])}}
|
||||
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-icon-paint-brush am-btn-block submit-ajax submit-cancel" data-url="{{:MyUrl('index/orderaftersale/cancel')}}" data-id="{{$v.id}}" data-view="reload"> 取消</button>
|
||||
{{/if}}
|
||||
<a href="{{:MyUrl('index/orderaftersale/detail', ['id'=>$v['id']])}}" target="_blank" class="am-btn am-btn-default am-btn-xs am-radius am-icon-cubes am-btn-block"> 详情</a>
|
||||
</td>
|
||||
</tr>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{if empty($data_list)}}
|
||||
<div class="table-no"><i class="am-icon-warning"></i> 没有相关数据</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<!-- 分页 -->
|
||||
{{if !empty($data_list)}}
|
||||
{{$page_html|raw}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- content end -->
|
||||
</div>
|
||||
|
||||
<!-- footer start -->
|
||||
{{include file="public/footer" /}}
|
||||
<!-- footer end -->
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
<i class="am-icon-caret-right"></i>
|
||||
<i class="am-icon-angle-right"></i>
|
||||
</li>
|
||||
<li class="am-text-truncate {{if isset($new_aftersale_data['status']) and $new_aftersale_data['status'] elt 3 and $new_aftersale_data['status'] egt 0}} selected{{/if}} {{if isset($new_aftersale_data['status']) and $new_aftersale_data['status'] eq 0}} selected-end{{/if}}">
|
||||
<li class="am-text-truncate {{if isset($new_aftersale_data['status']) and $new_aftersale_data['status'] elt 3 and $new_aftersale_data['status'] egt 0}} selected{{/if}} {{if isset($new_aftersale_data['status']) and $new_aftersale_data['status'] elt 2}} selected-end{{/if}}">
|
||||
<span class="number">2</span>
|
||||
<span class="text">管理员审核</span>
|
||||
{{if isset($new_aftersale_data['status']) and $new_aftersale_data['status'] elt 3 and $new_aftersale_data['status'] egt 0}}
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
</a> {{$Think.APPLICATION_VERSION}}
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://www.miitbeian.gov.cn/" target="_blank">{{:MyC('home_site_icp')}}</a>
|
||||
<a href="http://www.beian.miit.gov.cn/" target="_blank">{{:MyC('home_site_icp')}}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -14,13 +14,13 @@
|
|||
<div class="search-bar">
|
||||
<form action="{{:MyUrl('index/search/index')}}" method="POST">
|
||||
<div class="search-group">
|
||||
<input id="search-input" name="keywords" type="text" placeholder="其实搜索很简单^_^ !" value="{{if !empty($params['keywords'])}}{{$params.keywords}}{{/if}}" autocomplete="off" />
|
||||
<input id="search-input" name="wd" type="text" placeholder="其实搜索很简单^_^ !" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" />
|
||||
<input id="ai-topsearch" class="submit am-btn" placeholder="其实搜索很简单^_^ !" index="1" type="submit" value="搜索" />
|
||||
</div>
|
||||
{{if !empty($home_search_keywords)}}
|
||||
<ul class="search-hot-keywords">
|
||||
{{foreach $home_search_keywords as $v}}
|
||||
<li><a href="{{:MyUrl('index/search/index', ['keywords'=>$v])}}" target="_blank">{{$v}}</a></li>
|
||||
<li><a href="{{:MyUrl('index/search/index', ['wd'=>$v])}}" target="_blank">{{$v}}</a></li>
|
||||
{{/foreach}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
|
|
|||
|
|
@ -294,6 +294,29 @@ return array(
|
|||
4 => array('value' => 4, 'name' => '拨打电话'),
|
||||
),
|
||||
|
||||
// 订单售后类型
|
||||
'common_order_aftersale_type_list' => array(
|
||||
0 => array('value' => 0, 'name' => '仅退款', 'desc' => '未收到货(未签收),协商同意前提下', 'icon' => 'am-icon-random', 'class' => 'am-fl'),
|
||||
1 => array('value' => 1, 'name' => '退款退货', 'desc' => '已收到货,需要退换已收到的货物', 'icon' => 'am-icon-retweet', 'class' => 'am-fr'),
|
||||
),
|
||||
|
||||
// 订单售后状态
|
||||
'common_order_aftersale_status_list' => array(
|
||||
0 => array('value' => 0, 'name' => '待确认'),
|
||||
1 => array('value' => 1, 'name' => '待退货'),
|
||||
2 => array('value' => 2, 'name' => '待审核'),
|
||||
3 => array('value' => 3, 'name' => '已完成'),
|
||||
4 => array('value' => 4, 'name' => '已拒绝'),
|
||||
5 => array('value' => 5, 'name' => '已取消'),
|
||||
),
|
||||
|
||||
// 订单售后退款方式
|
||||
'common_order_aftersale_refundment_list' => array(
|
||||
0 => array('value' => 0, 'name' => '原路退回'),
|
||||
1 => array('value' => 1, 'name' => '退至钱包'),
|
||||
2 => array('value' => 2, 'name' => '手动处理'),
|
||||
),
|
||||
|
||||
|
||||
// 色彩值
|
||||
'common_color_list' => array(
|
||||
|
|
|
|||
|
|
@ -710,6 +710,13 @@ class NavigationService
|
|||
'contains' => ['orderindex', 'orderdetail', 'ordercomments'],
|
||||
'icon' => 'am-icon-th-list',
|
||||
],
|
||||
[
|
||||
'name' => '订单售后',
|
||||
'url' => MyUrl('index/orderaftersale/index'),
|
||||
'is_show' => 1,
|
||||
'contains' => ['orderaftersaleindex', 'orderaftersaleaftersale'],
|
||||
'icon' => 'am-icon-puzzle-piece',
|
||||
],
|
||||
[
|
||||
'name' => '我的收藏',
|
||||
'url' => MyUrl('index/userfavor/goods'),
|
||||
|
|
|
|||
|
|
@ -24,22 +24,6 @@ use app\service\ResourcesService;
|
|||
*/
|
||||
class OrderAftersaleService
|
||||
{
|
||||
// 订单售后类型
|
||||
public static $order_aftersale_type_list = [
|
||||
0 => '仅退款',
|
||||
1 => '退款退货',
|
||||
];
|
||||
|
||||
// 订单售后状态
|
||||
public static $order_aftersale_status_list = [
|
||||
0 => '待确认',
|
||||
1 => '待退货',
|
||||
2 => '待审核',
|
||||
3 => '已完成',
|
||||
4 => '已拒绝',
|
||||
5 => '已取消',
|
||||
];
|
||||
|
||||
/**
|
||||
* 获取一条订单,附带一条指定商品
|
||||
* @author Devil
|
||||
|
|
@ -166,7 +150,7 @@ class OrderAftersaleService
|
|||
['order_id', '=', intval($params['order_id'])],
|
||||
['goods_id', '=', intval($params['goods_id'])],
|
||||
['user_id', '=', $params['user']['id']],
|
||||
['status', '<=', 1],
|
||||
['status', '<=', 2],
|
||||
];
|
||||
$count = (int) Db::name('OrderAftersale')->where($where)->count();
|
||||
if($count > 0)
|
||||
|
|
@ -177,9 +161,8 @@ class OrderAftersaleService
|
|||
// 获取历史申请售后条件
|
||||
$where = [
|
||||
['order_id', '=', intval($params['order_id'])],
|
||||
['goods_id', '=', intval($params['goods_id'])],
|
||||
['user_id', '=', $params['user']['id']],
|
||||
['status', '<=', 2],
|
||||
['status', '<=', 3],
|
||||
];
|
||||
|
||||
// 退款金额
|
||||
|
|
@ -196,6 +179,7 @@ class OrderAftersaleService
|
|||
$number = isset($params['number']) ? intval($params['number']) : 0;
|
||||
|
||||
// 历史退货数量
|
||||
$where[] = ['goods_id', '=', intval($params['goods_id'])];
|
||||
$history_number = (int) Db::name('OrderAftersale')->where($where)->sum('number');
|
||||
if($params['type'] == 1)
|
||||
{
|
||||
|
|
@ -217,6 +201,7 @@ class OrderAftersaleService
|
|||
|
||||
// 数据
|
||||
$data = [
|
||||
'order_no' => $order['data']['order_no'],
|
||||
'type' => intval($params['type']),
|
||||
'order_id' => intval($params['order_id']),
|
||||
'goods_id' => intval($params['goods_id']),
|
||||
|
|
@ -226,6 +211,7 @@ class OrderAftersaleService
|
|||
'reason' => $params['reason'],
|
||||
'msg' => $params['msg'],
|
||||
'images' => json_encode($images),
|
||||
'status' => ($params['type'] == 0) ? 2 : 0,
|
||||
'add_time' => time(),
|
||||
'apply_time' => time(),
|
||||
];
|
||||
|
|
@ -296,7 +282,8 @@ class OrderAftersaleService
|
|||
}
|
||||
if($aftersale['status'] != 1)
|
||||
{
|
||||
return DataReturn('该售后订单状态不可操作['.self::$order_aftersale_status_list[$aftersale['status']].']', -10);
|
||||
$common_order_aftersale_status_list = lang('common_order_aftersale_status_list');
|
||||
return DataReturn('该售后订单状态不可操作['.$common_order_aftersale_status_list[$aftersale['status']]['name'].']', -10);
|
||||
}
|
||||
|
||||
// 数据
|
||||
|
|
@ -315,7 +302,7 @@ class OrderAftersaleService
|
|||
}
|
||||
|
||||
/**
|
||||
* 获取订单商品售后纪录列表
|
||||
* 获取订单售后纪录列表
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
|
|
@ -323,7 +310,7 @@ class OrderAftersaleService
|
|||
* @desc description
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function OrderGoodsAftersaleList($params = [])
|
||||
public static function OrderAftersaleList($params = [])
|
||||
{
|
||||
$where = empty($params['where']) ? [] : $params['where'];
|
||||
$m = isset($params['m']) ? intval($params['m']) : 0;
|
||||
|
|
@ -335,6 +322,9 @@ class OrderAftersaleService
|
|||
$data = Db::name('OrderAftersale')->field($field)->where($where)->limit($m, $n)->order($order_by)->select();
|
||||
if(!empty($data))
|
||||
{
|
||||
$common_order_aftersale_type_list = lang('common_order_aftersale_type_list');
|
||||
$common_order_aftersale_status_list = lang('common_order_aftersale_status_list');
|
||||
$common_order_aftersale_refundment_list = lang('common_order_aftersale_refundment_list');
|
||||
foreach($data as &$v)
|
||||
{
|
||||
// 用户信息
|
||||
|
|
@ -347,10 +337,13 @@ class OrderAftersaleService
|
|||
}
|
||||
|
||||
// 类型
|
||||
$v['type_text'] = self::$order_aftersale_type_list[$v['type']];
|
||||
$v['type_text'] = $common_order_aftersale_type_list[$v['type']]['name'];
|
||||
|
||||
// 状态
|
||||
$v['status_text'] = self::$order_aftersale_status_list[$v['status']];
|
||||
$v['status_text'] = $common_order_aftersale_status_list[$v['status']]['name'];
|
||||
|
||||
// 退款方式
|
||||
$v['refundment_text'] = $common_order_aftersale_refundment_list[$v['refundment']]['name'];
|
||||
|
||||
// 图片
|
||||
if(!empty($v['images']))
|
||||
|
|
@ -381,6 +374,10 @@ class OrderAftersaleService
|
|||
$v['audit_time_time'] = empty($v['audit_time']) ? null : date('Y-m-d H:i:s', $v['audit_time']);
|
||||
$v['audit_time_date'] = empty($v['audit_time']) ? null : date('Y-m-d', $v['audit_time']);
|
||||
|
||||
// 取消时间
|
||||
$v['cancel_time_time'] = empty($v['cancel_time']) ? null : date('Y-m-d H:i:s', $v['cancel_time']);
|
||||
$v['cancel_time_date'] = empty($v['cancel_time']) ? null : date('Y-m-d', $v['cancel_time']);
|
||||
|
||||
// 添加时间
|
||||
$v['add_time_time'] = date('Y-m-d H:i:s', $v['add_time']);
|
||||
$v['add_time_date'] = date('Y-m-d', $v['add_time']);
|
||||
|
|
@ -393,5 +390,150 @@ class OrderAftersaleService
|
|||
}
|
||||
return DataReturn('获取成功', 0, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单售后列表条件
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-09-29
|
||||
* @desc description
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function OrderAftersaleListWhere($params = [])
|
||||
{
|
||||
// 用户类型
|
||||
$user_type = isset($params['user_type']) ? $params['user_type'] : 'user';
|
||||
|
||||
// 条件初始化
|
||||
$where = [];
|
||||
|
||||
// id
|
||||
if(!empty($params['id']))
|
||||
{
|
||||
$where[] = ['id', '=', intval($params['id'])];
|
||||
}
|
||||
|
||||
// 用户类型
|
||||
if(isset($params['user_type']) && $params['user_type'] == 'user')
|
||||
{
|
||||
// 用户id
|
||||
if(!empty($params['user']))
|
||||
{
|
||||
$where[] = ['user_id', '=', $params['user']['id']];
|
||||
}
|
||||
}
|
||||
|
||||
// 关键字根据用户筛选
|
||||
if(!empty($params['keywords']))
|
||||
{
|
||||
if(empty($params['user']))
|
||||
{
|
||||
$user_ids = Db::name('User')->where('username|nickname|mobile|email', '=', $params['keywords'])->column('id');
|
||||
if(!empty($user_ids))
|
||||
{
|
||||
$where[] = ['user_id', 'in', $user_ids];
|
||||
} else {
|
||||
// 无数据条件,走单号条件
|
||||
$where[] = ['order_no', '=', $params['keywords']];
|
||||
}
|
||||
} else {
|
||||
// 用户走关键字
|
||||
$where[] = ['order_no', '=', $params['keywords']];
|
||||
}
|
||||
}
|
||||
|
||||
// 是否更多条件
|
||||
if(isset($params['is_more']) && $params['is_more'] == 1)
|
||||
{
|
||||
// 等值
|
||||
if(isset($params['type']) && $params['type'] > -1)
|
||||
{
|
||||
$where[] = ['type', '=', intval($params['type'])];
|
||||
}
|
||||
if(isset($params['refundment']) && $params['refundment'] > -1)
|
||||
{
|
||||
$where[] = ['refundment', '=', intval($params['refundment'])];
|
||||
}
|
||||
if(isset($params['status']) && $params['status'] > -1)
|
||||
{
|
||||
$where[] = ['status', '=', intval($params['status'])];
|
||||
}
|
||||
if(!empty($params['express_number']))
|
||||
{
|
||||
$where[] = ['express_number', '=', $params['express_number']];
|
||||
}
|
||||
|
||||
// 时间
|
||||
if(!empty($params['time_start']))
|
||||
{
|
||||
$where[] = ['add_time', '>', strtotime($params['time_start'])];
|
||||
}
|
||||
if(!empty($params['time_end']))
|
||||
{
|
||||
$where[] = ['add_time', '<', strtotime($params['time_end'])];
|
||||
}
|
||||
}
|
||||
return $where;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单售后总数
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-09-29
|
||||
* @desc description
|
||||
* @param [array] $where [条件]
|
||||
*/
|
||||
public static function OrderAftersaleTotal($where = [])
|
||||
{
|
||||
return (int) Db::name('OrderAftersale')->where($where)->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单售后取消
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-06T21:31:53+0800
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function AftersaleCancel($params = [])
|
||||
{
|
||||
// 请求参数
|
||||
$p = [
|
||||
[
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'id',
|
||||
'error_msg' => '操作id有误',
|
||||
],
|
||||
[
|
||||
'checked_type' => 'empty',
|
||||
'is_checked' => 2,
|
||||
'key_name' => 'user',
|
||||
'error_msg' => '用户信息有误',
|
||||
],
|
||||
];
|
||||
$ret = ParamsChecked($params, $p);
|
||||
if($ret !== true)
|
||||
{
|
||||
return DataReturn($ret, -1);
|
||||
}
|
||||
|
||||
// 数据更新
|
||||
$where = [
|
||||
'id' => intval($params['id']),
|
||||
];
|
||||
if(!empty($params['user']['id']))
|
||||
{
|
||||
$where['user_id'] = $params['user']['id'];
|
||||
}
|
||||
if(Db::name('OrderAftersale')->where($where)->update(['status'=>5, 'cancel_time'=>time(), 'upd_time'=>time()]))
|
||||
{
|
||||
return DataReturn('取消成功');
|
||||
}
|
||||
return DataReturn('取消失败', -100);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -163,14 +163,19 @@ class SearchService
|
|||
$screening_price = $price['min_price'].'-'.$price['max_price'];
|
||||
}
|
||||
|
||||
// 参数
|
||||
$params['screening_price'] = $screening_price;
|
||||
$params['ymd'] = date('Ymd');
|
||||
$params['add_time'] = time();
|
||||
unset($params['screening_price_id'], $params['page'], $params['max_price'], $params['min_price']);
|
||||
|
||||
// 添加日志
|
||||
Db::name('SearchHistory')->insert($params);
|
||||
$data = [
|
||||
'user_id' => isset($params['user_id']) ? intval($params['user_id']) : 0,
|
||||
'brand_id' => isset($params['brand_id']) ? intval($params['brand_id']) : 0,
|
||||
'category_id' => isset($params['category_id']) ? intval($params['category_id']) : 0,
|
||||
'keywords' => empty($params['keywords']) ? '' : $params['keywords'],
|
||||
'order_by_field' => empty($params['order_by_field']) ? '' : $params['order_by_field'],
|
||||
'order_by_type' => empty($params['order_by_type']) ? '' : $params['order_by_type'],
|
||||
'screening_price' => $screening_price,
|
||||
'ymd' => date('Ymd'),
|
||||
'add_time' => time(),
|
||||
];
|
||||
Db::name('SearchHistory')->insert($data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -307,6 +307,7 @@ color: #F5F5F2;font-size: 12px;cursor:pointer;border-radius:0px 0px; position: a
|
|||
}
|
||||
.footer-about li {
|
||||
text-align: left;
|
||||
line-height: 24px;
|
||||
}
|
||||
.footer-about li span, .footer-about li a {
|
||||
font-size: 14px;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
.data-list .am-slider {
|
||||
width: 130px;
|
||||
max-height: 108px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.data-list .operation {
|
||||
width: 100px;
|
||||
}
|
||||
|
|
@ -152,7 +152,7 @@ $(function()
|
|||
// 请求参数处理
|
||||
var data = {
|
||||
category_id: $('.search-content').data('category-id') || 0,
|
||||
keywords: $('#search-input').val() || '',
|
||||
wd: $('#search-input').val() || '',
|
||||
page: page || parseInt($('.search-pages-submit').attr('data-page')) || 1,
|
||||
order_by_field: $('.sort-nav li.active').attr('data-field') || 'default',
|
||||
order_by_type: $('.sort-nav li.active').attr('data-type') == 'asc' ? 'desc' : 'asc',
|
||||
|
|
|
|||
Loading…
Reference in New Issue