From 9670daf02159b7af69b0321772b839d5d6975277 Mon Sep 17 00:00:00 2001 From: Devil Date: Sun, 6 Oct 2019 16:49:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=94=AE=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Orderaftersale.php | 1 + application/service/OrderAftersaleService.php | 12 +- public/appmini/old/baidu/app.js | 6 +- public/appmini/old/weixin/app.js | 6 +- public/appmini/old/weixin/app.json | 8 +- public/appmini/old/weixin/app.wxss | 15 + .../user-orderaftersale-detail.js | 274 +++++++++++++++++- .../user-orderaftersale-detail.json | 5 +- .../user-orderaftersale-detail.wxml | 174 ++++++++--- .../user-orderaftersale-detail.wxss | 78 +++++ 10 files changed, 525 insertions(+), 54 deletions(-) diff --git a/application/api/controller/Orderaftersale.php b/application/api/controller/Orderaftersale.php index f64e60126..42712eb35 100644 --- a/application/api/controller/Orderaftersale.php +++ b/application/api/controller/Orderaftersale.php @@ -137,6 +137,7 @@ class Orderaftersale extends Common '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_goods_address' => MyC('home_order_aftersale_return_goods_address', '管理员未填写', true), ]; return DataReturn('success', 0, $result); } diff --git a/application/service/OrderAftersaleService.php b/application/service/OrderAftersaleService.php index 5dc5c2fbf..4e0adf306 100644 --- a/application/service/OrderAftersaleService.php +++ b/application/service/OrderAftersaleService.php @@ -118,8 +118,8 @@ class OrderAftersaleService [ 'checked_type' => 'length', 'key_name' => 'msg', - 'checked_data' => '5,200', - 'error_msg' => '退款说明 5~200 个字符之间', + 'checked_data' => '200', + 'error_msg' => '退款说明最多 200 个字符', ], [ 'checked_type' => 'length', @@ -194,8 +194,12 @@ class OrderAftersaleService // 附件处理 $images = []; - if(!empty($params['images']) && is_array($params['images'])) + if(!empty($params['images'])) { + if(!is_array($params['images'])) + { + $params['images'] = json_decode(htmlspecialchars_decode($params['images']), true); + } foreach($params['images'] as $v) { $images[] = ResourcesService::AttachmentPathHandle($v); @@ -227,7 +231,7 @@ class OrderAftersaleService } /** - * + * 用户退货 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 diff --git a/public/appmini/old/baidu/app.js b/public/appmini/old/baidu/app.js index dc698ceef..5adc4e474 100755 --- a/public/appmini/old/baidu/app.js +++ b/public/appmini/old/baidu/app.js @@ -274,7 +274,11 @@ App({ */ fields_check(data, validation) { for (var i in validation) { - if ((data[validation[i]['fields']] || null) == null) { + var temp_value = data[validation[i]["fields"]]; + var temp_is_can_zero = validation[i]["is_can_zero"] || null; + + if ((temp_value == undefined || temp_value.length == 0 || temp_value == -1) || (temp_is_can_zero == null && temp_value == 0) + ) { this.showToast(validation[i]['msg']); return false; } diff --git a/public/appmini/old/weixin/app.js b/public/appmini/old/weixin/app.js index d450326aa..6c5de82f4 100755 --- a/public/appmini/old/weixin/app.js +++ b/public/appmini/old/weixin/app.js @@ -287,7 +287,11 @@ App({ */ fields_check(data, validation) { for (var i in validation) { - if ((data[validation[i]['fields']] || null) == null) { + var temp_value = data[validation[i]["fields"]]; + var temp_is_can_zero = validation[i]["is_can_zero"] || null; + + if ((temp_value == undefined || temp_value.length == 0 || temp_value == -1) || (temp_is_can_zero == null && temp_value == 0) + ) { this.showToast(validation[i]['msg']); return false; } diff --git a/public/appmini/old/weixin/app.json b/public/appmini/old/weixin/app.json index b5f4ad94b..3f8f5fc76 100755 --- a/public/appmini/old/weixin/app.json +++ b/public/appmini/old/weixin/app.json @@ -1,7 +1,8 @@ { - "pages": ["pages/user-orderaftersale-detail/user-orderaftersale-detail", - "pages/user-order/user-order", + "pages": [ "pages/user/user", + "pages/user-order/user-order", + "pages/index/index", "pages/goods-category/goods-category", "pages/cart/cart", @@ -23,7 +24,8 @@ "pages/message/message", "pages/user-integral/user-integral", "pages/user-goods-browse/user-goods-browse", - "pages/user-orderaftersale/user-orderaftersale" + "pages/user-orderaftersale/user-orderaftersale", + "pages/user-orderaftersale-detail/user-orderaftersale-detail" ], "window": { "navigationBarTitleText": "{{application_title}}", diff --git a/public/appmini/old/weixin/app.wxss b/public/appmini/old/weixin/app.wxss index b9e3f2d12..3c1767159 100755 --- a/public/appmini/old/weixin/app.wxss +++ b/public/appmini/old/weixin/app.wxss @@ -362,6 +362,7 @@ button[disabled].bg-primary { border-bottom: 1px solid #eee; border-radius: 0; width: 100%; + box-sizing: border-box; padding: 0 10rpx; } .form-gorup input, @@ -379,12 +380,26 @@ button[disabled].bg-primary { */ .form-container-upload .form-upload-data .item { padding: 10rpx; + position: relative; + } + .form-container-upload .form-upload-data .delete-icon { + position: absolute; + top: 18rpx; + right: 18rpx; + color: #e5e5e5; + background-color: #d9534f; + padding: 5rpx 18rpx; + font-size: 30rpx; + border-style: solid; + border-width: 0 0 1px 1px; + border-color: #eee; } .form-container-upload .form-upload-data image { width: 200rpx; height: 200rpx; padding: 5rpx; border: 1px solid #eee; + display: block; } .form-container-upload .upload-icon { margin: 10rpx 0 0 10rpx; diff --git a/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.js b/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.js index 55eac0e91..0e5e18864 100644 --- a/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.js +++ b/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.js @@ -5,7 +5,9 @@ Page({ data_list_loding_status: 1, data_list_loding_msg: '', data_bottom_line_status: false, + popup_delivery_status: false, + // 接口数据 order_data: null, new_aftersale_data: null, step_data: null, @@ -14,18 +16,101 @@ Page({ return_money_goods_reason: [], aftersale_type_list: [], reason_data_list: [], + return_goods_address: null, + + // 售后基础信息 + panel_base_data_list: [ + { + name: '退款类型', + field: 'type_text', + }, + { + name: '当前状态', + field: 'status_text', + }, + { + name: '申请原因', + field: 'reason', + }, + { + name: '退货数量', + field: 'number', + }, + { + name: '退款金额', + field: 'price', + }, + { + name: '退款说明', + field: 'msg', + }, + { + name: '退款方式', + field: 'refundment_text', + }, + { + name: '拒绝原因', + field: 'refuse_reason', + }, + { + name: '申请时间', + field: 'apply_time_time', + }, + { + name: '确认时间', + field: 'confirm_time_time', + }, + { + name: '退货时间', + field: 'delivery_time_time', + }, + { + name: '审核时间', + field: 'audit_time_time', + }, + { + name: '取消时间', + field: 'cancel_time_time', + }, + { + name: '添加时间', + field: 'add_time_time', + }, + { + name: '更新时间', + field: 'upd_time_time', + } + ], + + // 快递信息 + panel_express_data_list: [ + { + name: '快递名称', + field: 'express_name', + }, + { + name: '快递单号', + field: 'express_number', + }, + { + name: '退货时间', + field: 'delivery_time_time', + } + ], + // 表单数据 + form_button_disabled: false, form_type: -1, form_reason_index: -1, form_price: '', form_msg: '', form_number: 0, form_images_list: [], + form_express_name: '', + form_express_number: '', }, onLoad(params) { - params['oid'] = 4; - params['did'] = 8; this.setData({ params: params }); this.init(); }, @@ -60,18 +145,19 @@ Page({ data_list_loding_msg: '', order_data: data.order_data || null, - new_aftersale_data: data.new_aftersale_data || null, + new_aftersale_data: ((data.new_aftersale_data || null) == null || data.new_aftersale_data.length <= 0) ? null : data.new_aftersale_data, step_data: data.step_data || null, returned_data: data.returned_data || null, 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 || [], + return_goods_address: data.return_goods_address || null, form_price: (data.returned_data || null != null) ? data.returned_data.refund_price : 0, }); } else { self.setData({ - data_list_loding_status: 2, + data_list_loding_status: 0, data_bottom_line_status: false, data_list_loding_msg: res.data.msg, }); @@ -99,6 +185,7 @@ Page({ form_type: value, form_reason_index: (this.data.form_type == value) ? this.data.form_reason_index : -1, reason_data_list: (value == 0) ? this.data.return_only_money_reason : this.data.return_money_goods_reason, + form_number: (value == 0) ? 0 : this.data.returned_data.returned_quantity, }); }, @@ -130,6 +217,46 @@ Page({ }); }, + // 快递名称 + form_express_name_event(e) { + this.setData({ + form_express_name: e.detail.value + }); + }, + + // 快递单号 + form_express_number_event(e) { + this.setData({ + form_express_number: e.detail.value + }); + }, + + // 上传图片预览 + upload_show_event(e) { + wx.previewImage({ + current: this.data.form_images_list[e.currentTarget.dataset.index], + urls: this.data.form_images_list, + }); + }, + + // 图片删除 + upload_delete_event(e) { + var self = this; + wx.showModal({ + title: '温馨提示', + content: '删除后不可恢复、继续吗?', + success(res) { + if (res.confirm) { + var list = self.data.form_images_list; + list.splice(e.currentTarget.dataset.index, 1); + self.setData({ + form_images_list: list, + }); + } + } + }); + }, + // 文件上传 file_upload_event(e) { var self = this; @@ -182,6 +309,145 @@ Page({ } }, + // 售后表单提交 + form_submit_event(e) { + // 表单数据 + var form_data = { + order_id: this.data.params.oid, + order_detail_id: this.data.params.did, + type: this.data.form_type, + reason: this.data.reason_data_list[this.data.form_reason_index], + number: (this.data.form_type == 0) ? 0 : this.data.form_number, + price: this.data.form_price, + msg: this.data.form_msg, + images: JSON.stringify(this.data.form_images_list), + } + + // 防止金额大于计算的金额 + if (form_data['price'] > this.data.returned_data['refund_price']) + { + form_data['price'] = this.data.returned_data['refund_price']; + } + + // 防止数量大于计算的数量 + if (form_data['number'] > this.data.returned_data['returned_quantity']) { + form_data['number'] = this.data.returned_data['returned_quantity']; + } + + // 数据校验 + var validation = [ + { fields: "type", msg: "请选择操作类型", is_can_zero: 1 }, + { fields: "reason", msg: "请选择原因" }, + { fields: "msg", msg: "请填写退款说明" } + ]; + if (form_data['type'] == 1) + { + validation.push({ fields: "number", msg: "请选择退货数量" }); + } + + // 校验参数并提交 + if (app.fields_check(form_data, validation)) { + var self = this; + wx.showLoading({ title: "处理中..." }); + self.setData({ form_button_disabled: true }); + wx.request({ + url: app.get_request_url("create", "orderaftersale"), + method: "POST", + data: form_data, + dataType: "json", + header: { 'content-type': 'application/x-www-form-urlencoded' }, + success: res => { + wx.hideLoading(); + if (res.data.code == 0) { + app.showToast(res.data.msg, "success"); + setTimeout(function () { + self.init(); + }, 1000); + } else { + self.setData({ form_button_disabled: false}); + app.showToast(res.data.msg); + } + }, + fail: () => { + wx.hideLoading(); + self.setData({ form_button_disabled: false }); + app.showToast("服务器请求出错"); + } + }); + } + }, + + // 退货开启弹层 + delivery_submit_event(e) { + this.setData({ popup_delivery_status: true }); + }, + + // 退货弹层关闭 + popup_delivery_close_event(e) { + this.setData({ popup_delivery_status: false }); + }, + + // 退货表单 + form_delivery_submit_event(e) { + // 表单数据 + var form_data = { + id: this.data.new_aftersale_data.id, + express_name: this.data.form_express_name, + express_number: this.data.form_express_number, + } + + // 数据校验 + var validation = [ + { fields: "express_name", msg: "请填写快递名称" }, + { fields: "express_number", msg: "请填写快递单号" }, + ]; + + // 校验参数并提交 + if (app.fields_check(form_data, validation)) { + var self = this; + wx.showLoading({ title: "处理中..." }); + self.setData({ form_button_disabled: true }); + wx.request({ + url: app.get_request_url("delivery", "orderaftersale"), + method: "POST", + data: form_data, + dataType: "json", + header: { 'content-type': 'application/x-www-form-urlencoded' }, + success: res => { + wx.hideLoading(); + self.setData({ popup_delivery_status: false}); + if (res.data.code == 0) { + app.showToast(res.data.msg, "success"); + setTimeout(function () { + self.init(); + }, 1000); + } else { + self.setData({ form_button_disabled: false }); + app.showToast(res.data.msg); + } + }, + fail: () => { + wx.hideLoading(); + self.setData({ form_button_disabled: false }); + app.showToast("服务器请求出错"); + } + }); + } + }, + + // 凭证图片预览 + images_view_event(e) { + wx.previewImage({ + current: this.data.new_aftersale_data.images[e.currentTarget.dataset.index], + urls: this.data.new_aftersale_data.images, + }); + }, + + // 查看售后数据 + show_aftersale_event(e) { + console.log(1); + }, + // 下拉刷新 onPullDownRefresh() { this.init(); diff --git a/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.json b/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.json index 331ad4f3d..7d179bfd5 100644 --- a/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.json +++ b/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.json @@ -1,3 +1,6 @@ { - "enablePullDownRefresh": true + "enablePullDownRefresh": true, + "usingComponents": { + "component-popup": "/components/popup/popup" + } } \ No newline at end of file diff --git a/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.wxml b/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.wxml index 2481dde86..eb2db5ec5 100644 --- a/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.wxml +++ b/public/appmini/old/weixin/pages/user-orderaftersale-detail/user-orderaftersale-detail.wxml @@ -21,58 +21,152 @@ - - - - - {{item.name}} - {{item.desc}} + + + + + {{new_aftersale_data.tips_msg}} + 详情查看 >> + + - - + - - - - 退款原因必选 - - - {{form_reason_index == -1 ? '请选择原因' : reason_data_list[form_reason_index]}} - - + + + + 退货地址: + {{return_goods_address}} + - - 商品件数必填 - + + + {{new_aftersale_data.tips_msg}} + 详情查看 >> - - 退款金额必填 - + + + + + 申请信息 + + + {{item.name}}: + {{new_aftersale_data[item.field] || ''}} + + + + + + + 快递信息 + + + {{item.name}}: + {{new_aftersale_data[item.field] || ''}} + + + + + + + 凭证 + + + + + + + - - 退款说明必填 -