order-refund.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <template id="order-refund">
  2. <div>
  3. <el-dialog title="售后处理" :visible.sync="isShowChangeShipping" @close="dialogClose" :close-on-click-modal="false">
  4. <el-form :model="refundForm" :rules="rules" ref="refundForm" label-width="80px" size="small" label-position="top" style="padding: 0 20px;">
  5. <el-alert v-if="handle_type == 'send_address'" title="需您同意售后申请,买家才能退货给您; 买家退货后您需再次确认收货后,退款将自动原路退回至买家付款账户。" :closable="false" type="warning"></el-alert>
  6. <el-alert v-else-if="handle_type == 'exchange'" title="需您同意售后申请,买家才能退货给您; 您确认收到退货后重新发货,买家确认收到退货商品售后结束。" :closable="false" type="warning"></el-alert>
  7. <el-form-item :label="'售后类型: ' + refund_type[refund_info.type]"></el-form-item>
  8. <template v-if="handle_type == 'send_address'">
  9. <el-form-item :label="'售后金额: ' + refund_info.refund_price"></el-form-item>
  10. <!-- <el-form-item :label="'实付金额: ' + refund_info.orderDetail.goods_price"></el-form-item>-->
  11. <el-form-item :label="'运费金额: ' + (refund_info.order.shipping_money ?? 0)"></el-form-item>
  12. <el-form-item label="退款金额:" v-if="refund_info.type != 3">
  13. <el-input v-model="refundForm.refund_price" onInput="value=toNumber(value,2)" style="width:50%"></el-input>
  14. </el-form-item>
  15. <el-form-item label="备注:" >
  16. <el-input v-model="refundForm.refund_remark" style="width:50%"></el-input>
  17. </el-form-item>
  18. <el-form-item label="退货地址:">
  19. <el-radio-group v-model="refundForm.address_type">
  20. <el-radio border :label="1">选择地址 </el-radio>
  21. <el-radio border :label="2">使用新地址</el-radio>
  22. </el-radio-group>
  23. </el-form-item>
  24. <el-form-item v-if="refundForm.address_type == 1">
  25. <el-select class="width-150" placeholder="请选择退货地址" @change="selectAddress" v-model="default_address.name">
  26. <el-option
  27. v-for="items in address_list"
  28. :label="items.name"
  29. :value="items.address">
  30. </el-option>
  31. </el-select>
  32. </el-form-item>
  33. <div v-if="refundForm.address_type == 1" style="padding-left: 25px;">
  34. <el-form-item label="">
  35. 收件人:{{ default_address.consignee }}<br/>
  36. 手机号码:{{ default_address.mobile }}<br/>
  37. 收货地址:{{ default_address.address }}
  38. </el-form-item>
  39. </div>
  40. <div v-if="refundForm.address_type == 2">
  41. <el-form-item label="收货人" prop="consignee">
  42. <el-input style="width:50%" v-model="refundForm.consignee"></el-input>
  43. </el-form-item>
  44. <el-form-item label="收货人手机号码" prop="mobile">
  45. <el-input style="width:50%" v-model="refundForm.mobile" maxlength="11" onkeyup="value= value.replace(/[^\d]/g,'')"></el-input>
  46. </el-form-item>
  47. <el-form-item label="详细地址" prop="address">
  48. <el-input style="width:50%" type="textarea" v-model="refundForm.address"></el-input>
  49. </el-form-item>
  50. </div>
  51. </template>
  52. <template v-else-if="handle_type == 'exchange'">
  53. <el-form-item :label="'收货人: ' + refund_info.order.receiver_name"></el-form-item>
  54. <el-form-item :label="'收货人手机号码: ' + refund_info.order.mobile"></el-form-item>
  55. <el-form-item :label="'收货地址: ' + refund_info.order.region_name +' '+ refund_info.order.address"></el-form-item>
  56. <el-form-item label="快递公司" prop="company">
  57. <el-select style="width:30%" v-model="refundForm.express_id" placeholder="请选择快递公司" style="width: 100%" @change="handleExpressChange">
  58. <el-option v-for="company in express_companys" :key="company.id" :label="company.name" :value="company.id">
  59. </el-option>
  60. </el-select>
  61. </el-form-item>
  62. <el-form-item label="商家编码" prop="customer_name" v-if="refundForm.saler_express === '京东物流' || refundForm.saler_express === '京东快运'">
  63. <el-input style="width:50%" placeholder="请输入商家编码" size="small" v-model="refundForm.customer_name" autocomplete="off"></el-input>
  64. </el-form-item>
  65. <el-form-item label="快递单号" prop="saler_express_no">
  66. <el-input style="width:50%" v-model="refundForm.saler_express_no"></el-input>
  67. </el-form-item>
  68. </template>
  69. </el-form>
  70. <div slot="footer" class="dialog-footer">
  71. <el-button @click="isShowChangeShipping = false">取 消</el-button>
  72. <el-button type="primary" @click="comfirm('refundForm')" :v-loading="changeShippingLoading">确 定</el-button>
  73. </div>
  74. </el-dialog>
  75. </div>
  76. </template>
  77. <script>
  78. Vue.component('order-refund', {
  79. template: '#order-refund',
  80. props: {
  81. is_show: {
  82. type: Boolean,
  83. default: false
  84. },
  85. refund_info: {
  86. type: Object,
  87. default: function() {
  88. return {};
  89. }
  90. },
  91. changeShippingLoading:{
  92. type:Boolean,
  93. default:false
  94. },
  95. default_address: {
  96. type: Object,
  97. default: function() {
  98. return {};
  99. }
  100. },
  101. address_list: {
  102. type: Array,
  103. default: function() {
  104. return {};
  105. }
  106. },
  107. handle_step_status: {
  108. default: 0
  109. },
  110. handle_type: {
  111. type: String,
  112. default: 'send_address'
  113. }
  114. },
  115. data() {
  116. return {
  117. express_companys: [],
  118. refundForm: {
  119. address_type: 1,
  120. consignee: null,
  121. mobile: null,
  122. address: null,
  123. express_id: null,
  124. saler_express: null,
  125. saler_express_no: null,
  126. customer_name: null,
  127. refund_price:'',
  128. refund_remark:'',
  129. },
  130. isShowChangeShipping: false,
  131. refund_type: {
  132. '1': '仅退款',
  133. '2': '退货退款',
  134. '3': '换货',
  135. },
  136. rules: {
  137. consignee: [{
  138. required: true,
  139. message: '请填写收货人姓名',
  140. trigger: 'blur'
  141. }],
  142. mobile: [{
  143. required: true,
  144. validator: (rule, value, callback) => {
  145. if(value==''){
  146. callback('请输入手机号');
  147. return
  148. }
  149. // if(!(/^1\d{10}$/.test(value))){
  150. // callback('手机号码有误,请重填');
  151. // }
  152. callback();
  153. }
  154. }],
  155. address: [{
  156. required: true,
  157. message: '请填写收货地址',
  158. trigger: 'blur'
  159. }],
  160. }
  161. }
  162. },
  163. watch: {
  164. is_show: function(newVal) {
  165. if(newVal){
  166. // 获取订单物流信息列表
  167. if(isEmpty(this.express_companys)) this.getOrderShipping();
  168. }
  169. this.isShowChangeShipping = newVal;
  170. this.refundForm.id = this.refund_info.id
  171. this.refundForm.step_status = this.handle_step_status;
  172. this.refundForm.refund_price = this.refund_info.refund_price
  173. }
  174. },
  175. methods: {
  176. getOrderShipping(){
  177. request({
  178. params: {
  179. r: 'mall/order/shipping'
  180. },
  181. }).then(res => {
  182. if(res.data.code == 0){
  183. this.express_companys = res.data.data.express_list
  184. }
  185. })
  186. },
  187. handleExpressChange(e){
  188. let index = this.express_companys.findIndex(v => v.id == e);
  189. this.refundForm.saler_express = this.express_companys[index].name;
  190. },
  191. comfirm(formName) {
  192. if (this.refundForm.address_type == 2) {
  193. this.$refs[formName].validate((valid) => {
  194. if (valid) {
  195. this.$emit('submit',this.refundForm);
  196. } else {
  197. console.log('error submit!!');
  198. return;
  199. }
  200. });
  201. } else {
  202. this.refundForm.mobile = this.default_address.mobile;
  203. this.refundForm.consignee = this.default_address.consignee;
  204. this.refundForm.address = this.default_address.address;
  205. this.$emit('submit',this.refundForm);
  206. }
  207. },
  208. dialogClose() {
  209. this.$emit('close')
  210. },
  211. selectAddress(data) {
  212. this.$emit('address', data);
  213. }
  214. }
  215. })
  216. </script>