小程序订单售后
parent
7a4ead6f2c
commit
4a8dbb6a9d
|
|
@ -66,9 +66,10 @@ class Order extends Common
|
|||
|
||||
// 获取列表
|
||||
$data_params = array(
|
||||
'm' => $start,
|
||||
'n' => $number,
|
||||
'where' => $where,
|
||||
'm' => $start,
|
||||
'n' => $number,
|
||||
'where' => $where,
|
||||
'is_orderaftersale' => 1,
|
||||
);
|
||||
$data = OrderService::OrderList($data_params);
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,191 @@
|
|||
<?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\api\controller;
|
||||
|
||||
use app\service\OrderAftersaleService;
|
||||
|
||||
/**
|
||||
* 订单售后
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2019-10-04T21: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 = $this->data_post;
|
||||
$params['user'] = $this->user;
|
||||
$params['user_type'] = 'user';
|
||||
|
||||
// 分页
|
||||
$number = 10;
|
||||
$page = max(1, isset($this->data_post['page']) ? intval($this->data_post['page']) : 1);
|
||||
|
||||
// 条件
|
||||
$where = OrderService::OrderListWhere($params);
|
||||
|
||||
// 获取总数
|
||||
$total = OrderAftersaleService::OrderAftersaleTotal($where);
|
||||
$page_total = ceil($total/$number);
|
||||
$start = intval(($page-1)*$number);
|
||||
|
||||
// 获取列表
|
||||
$data_params = array(
|
||||
'm' => $start,
|
||||
'n' => $number,
|
||||
'where' => $where,
|
||||
'is_orderaftersale' => 1,
|
||||
);
|
||||
$data = OrderAftersaleService::OrderAftersaleList($data_params);
|
||||
|
||||
// 返回数据
|
||||
$result = [
|
||||
'total' => $total,
|
||||
'page_total' => $page_total,
|
||||
'data' => $data['data'],
|
||||
'aftersale_type_list' => lang('common_order_aftersale_type_list'),
|
||||
];
|
||||
return DataReturn('success', 0, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 售后页面
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-21
|
||||
* @desc description
|
||||
*/
|
||||
public function Aftersale()
|
||||
{
|
||||
$order_id = isset($this->data_post['oid']) ? intval($this->data_post['oid']) : 0;
|
||||
$order_detail_id = isset($this->data_post['did']) ? intval($this->data_post['did']) : 0;
|
||||
$ret = OrderAftersaleService::OrdferGoodsRow($order_id, $order_detail_id, $this->user['id']);
|
||||
if($ret['code'] == 0)
|
||||
{
|
||||
// 获取当前订单商品售后最新的一条纪录
|
||||
$data_params = [
|
||||
'm' => 0,
|
||||
'n' => 1,
|
||||
'where' => [
|
||||
['order_detail_id', '=', $order_detail_id],
|
||||
['user_id', '=', $this->user['id']],
|
||||
],
|
||||
];
|
||||
$new_aftersale = OrderAftersaleService::OrderAftersaleList($data_params);
|
||||
if(!empty($new_aftersale['data'][0]))
|
||||
{
|
||||
$new_aftersale_data = $new_aftersale['data'][0];
|
||||
$new_aftersale_data['tips_msg'] = OrderAftersaleService::OrderAftersaleTipsMsg($new_aftersale_data);
|
||||
} else {
|
||||
$new_aftersale_data = [];
|
||||
}
|
||||
|
||||
// 进度
|
||||
$step_data = OrderAftersaleService::OrderAftersaleStep($new_aftersale_data);
|
||||
|
||||
// 可退款退货
|
||||
$returned = OrderAftersaleService::OrderAftersaleCalculation($order_id, $order_detail_id);
|
||||
|
||||
// 仅退款原因
|
||||
$return_only_money_reason = MyC('home_order_aftersale_return_only_money_reason');
|
||||
|
||||
// 退款退货原因
|
||||
$return_money_goods_reason = MyC('home_order_aftersale_return_money_goods_reason');
|
||||
|
||||
// 返回数据
|
||||
$result = [
|
||||
'order_data' => $ret['data'],
|
||||
'new_aftersale_data' => $new_aftersale_data,
|
||||
'step_data' => $step_data,
|
||||
'returned_data' => $returned['data'],
|
||||
'return_only_money_reason' => empty($return_only_money_reason) ? [] : explode("\n", $return_only_money_reason),
|
||||
'return_money_goods_reason' => empty($return_money_goods_reason) ? [] : explode("\n", $return_money_goods_reason),
|
||||
'aftersale_type_list' => lang('common_order_aftersale_type_list'),
|
||||
];
|
||||
return DataReturn('success', 0, $result);
|
||||
}
|
||||
return DataReturn($ret['msg'], -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请售后创建
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-23
|
||||
* @desc description
|
||||
*/
|
||||
public function Create()
|
||||
{
|
||||
$params = $this->data_post;
|
||||
$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 = $this->data_post;
|
||||
$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()
|
||||
{
|
||||
$params = $this->data_post;
|
||||
$params['user'] = $this->user;
|
||||
return OrderAftersaleService::AftersaleCancel($params);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -57,6 +57,8 @@ App({
|
|||
"user_integral": "我的积分",
|
||||
"user_goods_browse": "我的足迹",
|
||||
"goods_comment": "商品评论",
|
||||
"user_orderaftersale": "退款/售后",
|
||||
"user_orderaftersale_detail": "售后详情",
|
||||
},
|
||||
|
||||
// 请求地址
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"pages": [
|
||||
"pages/user-order/user-order",
|
||||
"pages/user/user",
|
||||
"pages/index/index",
|
||||
"pages/goods-category/goods-category",
|
||||
"pages/cart/cart",
|
||||
"pages/user/user",
|
||||
"pages/web-view/web-view",
|
||||
"pages/login/login",
|
||||
"pages/paytips/paytips",
|
||||
|
|
@ -14,7 +15,6 @@
|
|||
"pages/buy/buy",
|
||||
"pages/user-address/user-address",
|
||||
"pages/user-address-save/user-address-save",
|
||||
"pages/user-order/user-order",
|
||||
"pages/user-order-detail/user-order-detail",
|
||||
"pages/user-faovr/user-faovr",
|
||||
"pages/user-answer-list/user-answer-list",
|
||||
|
|
@ -22,7 +22,9 @@
|
|||
"pages/answer-form/answer-form",
|
||||
"pages/message/message",
|
||||
"pages/user-integral/user-integral",
|
||||
"pages/user-goods-browse/user-goods-browse"
|
||||
"pages/user-goods-browse/user-goods-browse",
|
||||
"pages/user-orderaftersale/user-orderaftersale",
|
||||
"pages/user-orderaftersale-detail/user-orderaftersale-detail"
|
||||
],
|
||||
"window": {
|
||||
"navigationBarTitleText": "{{application_title}}",
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
|
|
@ -370,4 +370,20 @@ Page({
|
|||
});
|
||||
this.get_data_list(1);
|
||||
},
|
||||
|
||||
// 售后订单事件
|
||||
orderaftersale_event(e) {
|
||||
var oid = e.currentTarget.dataset.oid || 0;
|
||||
var did = e.currentTarget.dataset.did || 0;
|
||||
if(oid == 0 || did == 0)
|
||||
{
|
||||
app.showToast("参数有误");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 进入售后页面
|
||||
wx.navigateTo({
|
||||
url: "/pages/user-orderaftersale-detail/user-orderaftersale-detail?oid=" + oid+"&did="+did
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
{{spec.type}}:{{spec.value}}
|
||||
</view>
|
||||
</block>
|
||||
<view class="orderaftersale-btn-text" catchtap="orderaftersale_event" data-oid="{{item.id}}" data-did="{{detail.id}}">{{detail.orderaftersale_btn_text}}</view>
|
||||
</view>
|
||||
<view class="oh goods-price">
|
||||
<text class="sales-price">¥{{detail.price}}</text>
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
.goods-base {
|
||||
min-height: 160rpx;
|
||||
margin-left: 180rpx;
|
||||
position: relative;
|
||||
}
|
||||
.goods-title {
|
||||
line-height: 36rpx;
|
||||
|
|
@ -59,6 +60,12 @@
|
|||
.item-operation button {
|
||||
padding: 0 35rpx;
|
||||
}
|
||||
.orderaftersale-btn-text {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
color: #4d7fa7;
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
|
|
|
|||
|
|
@ -0,0 +1,88 @@
|
|||
const app = getApp();
|
||||
Page({
|
||||
data: {
|
||||
params: null,
|
||||
data_list_loding_status: 1,
|
||||
data_list_loding_msg: '',
|
||||
data_bottom_line_status: false,
|
||||
|
||||
order_data: [],
|
||||
new_aftersale_data: [],
|
||||
step_data: [],
|
||||
returned_data: [],
|
||||
return_only_money_reason: [],
|
||||
return_money_goods_reason: [],
|
||||
aftersale_type_list: [],
|
||||
},
|
||||
|
||||
onLoad(params) {
|
||||
this.setData({ params: params });
|
||||
this.init();
|
||||
},
|
||||
|
||||
onShow() {
|
||||
wx.setNavigationBarTitle({ title: app.data.common_pages_title.user_orderaftersale_detail });
|
||||
},
|
||||
|
||||
init() {
|
||||
var self = this;
|
||||
wx.showLoading({ title: "加载中..." });
|
||||
this.setData({
|
||||
data_list_loding_status: 1
|
||||
});
|
||||
|
||||
wx.request({
|
||||
url: app.get_request_url("aftersale", "orderaftersale"),
|
||||
method: "POST",
|
||||
data: {
|
||||
oid: this.data.params.oid,
|
||||
did: this.data.params.did
|
||||
},
|
||||
dataType: "json",
|
||||
success: res => {
|
||||
wx.hideLoading();
|
||||
wx.stopPullDownRefresh();
|
||||
if (res.data.code == 0) {
|
||||
var data = res.data.data;
|
||||
self.setData({
|
||||
data_list_loding_status: 3,
|
||||
data_bottom_line_status: true,
|
||||
data_list_loding_msg: '',
|
||||
|
||||
order_data: data.order_data || [],
|
||||
new_aftersale_data: data.new_aftersale_data || [],
|
||||
step_data: data.step_data || [],
|
||||
returned_data: data.returned_data || [],
|
||||
return_only_money_reason: data.return_only_money_reason || [],
|
||||
return_money_goods_reason: data.return_money_goods_reason || [],
|
||||
aftersale_type_list: data.aftersale_type_list || [],
|
||||
});
|
||||
} else {
|
||||
self.setData({
|
||||
data_list_loding_status: 2,
|
||||
data_bottom_line_status: false,
|
||||
data_list_loding_msg: res.data.msg,
|
||||
});
|
||||
app.showToast(res.data.msg);
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
wx.hideLoading();
|
||||
wx.stopPullDownRefresh();
|
||||
self.setData({
|
||||
data_list_loding_status: 2,
|
||||
data_bottom_line_status: false,
|
||||
data_list_loding_msg: '服务器请求出错',
|
||||
});
|
||||
|
||||
app.showToast("服务器请求出错");
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 下拉刷新
|
||||
onPullDownRefresh() {
|
||||
this.init();
|
||||
},
|
||||
|
||||
});
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<!--pages/user-orderaftersale-detail/user-orderaftersale-detail.wxml-->
|
||||
<text>pages/user-orderaftersale-detail/user-orderaftersale-detail.wxml</text>
|
||||
|
|
@ -0,0 +1 @@
|
|||
/* pages/user-orderaftersale-detail/user-orderaftersale-detail.wxss */
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
const app = getApp();
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad: function (options) {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom: function () {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage: function () {
|
||||
|
||||
}
|
||||
})
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"usingComponents": {}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<!--pages/user-orderaftersale.wxml-->
|
||||
<text>pages/user-orderaftersale.wxml</text>
|
||||
|
|
@ -0,0 +1 @@
|
|||
/* pages/user-orderaftersale.wxss */
|
||||
|
|
@ -13,10 +13,11 @@ Page({
|
|||
{ name: "我的积分", url: "user-integral", count: 0 },
|
||||
],
|
||||
user_order_status_list: [
|
||||
{ name: "待付款", status: 1, count: 0 },
|
||||
{ name: "待发货", status: 2, count: 0 },
|
||||
{ name: "待收货", status: 3, count: 0 },
|
||||
{ name: "已完成", status: 4, count: 0 },
|
||||
{ name: "待付款", status: 1, count: 0, url: "/pages/user-order/user-order?status=1" },
|
||||
{ name: "待发货", status: 2, count: 0, url: "/pages/user-order/user-order?status=2" },
|
||||
{ name: "待收货", status: 3, count: 0, url: "/pages/user-order/user-order?status=3" },
|
||||
{ name: "已完成", status: 4, count: 0, url: "/pages/user-order/user-order?status=4" },
|
||||
{ name: "退款/售后", status: 101, count: 0, url: "/pages/user-orderaftersale/user-orderaftersale" },
|
||||
],
|
||||
nav_lists: [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
</navigator>
|
||||
<view wx:if="{{item.url == 'user-order' && user_order_status_list.length > 0}}" class="items-list br-b oh">
|
||||
<block wx:for="{{user_order_status_list}}" wx:key="key" wx:for-item="items">
|
||||
<navigator url="/pages/{{item.url}}/{{item.url}}?status={{items.status}}" hover-class="none">
|
||||
<navigator url="{{items.url}}" hover-class="none">
|
||||
<view class="items fl tc">
|
||||
<view class="badge-icon">
|
||||
<component-badge prop-number="{{items.count}}"></component-badge>
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
padding: 15rpx 0;
|
||||
}
|
||||
.items-list .items {
|
||||
width: 25%;
|
||||
width: 20%;
|
||||
position: relative;
|
||||
}
|
||||
.items-list .items .items-icon {
|
||||
|
|
|
|||
Loading…
Reference in New Issue