order-refund.php 9.4 KB

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