order-shipping.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template id="order-shipping">
  2. <div>
  3. <el-dialog title="基本信息" :visible.sync="isShowChangeShipping" @close="dialogClose">
  4. <el-form :model="form" ref="ships" :rules="rules" label-width="80px" size="small" label-position="top" style="padding: 0 30px;">
  5. <el-form-item label="">
  6. <el-table ref="multipleTable" :data="order_info.detail" size="small" border style="width: 100%" @selection-change="handleSelectionChange">
  7. <el-table-column type="selection" width="55" :selectable="selectable"></el-table-column>
  8. <el-table-column label="商品" width="200" prop="goods_name">
  9. <template slot-scope="scope">
  10. <com-ellipsis :line="1" :text="scope.row.goods_name"></com-ellipsis>
  11. </template>
  12. </el-table-column>
  13. <el-table-column prop="num" label="数量" width="120">
  14. </el-table-column>
  15. <el-table-column prop="is_feedback" label="售后状态" show-overflow-tooltip>
  16. <template slot-scope="scope">
  17. <el-tag v-if="scope.row.is_feedback == 1" type="danger" size="small" effect="plain">售后中</el-tag>
  18. <el-tag v-if="scope.row.is_feedback == 2" type="danger" size="small" effect="plain">售后完成</el-tag>
  19. </template>
  20. </el-table-column>
  21. <el-table-column prop="num" label="状态" show-overflow-tooltip>
  22. <template slot-scope="scope">{{ scope.row.shipping_status == 1 ? '已发货' : '待发货' }}</template>
  23. </el-table-column>
  24. </el-table>
  25. </el-form-item>
  26. <div class="title-box" style="margin: 15px 0;">
  27. <span class="text" style="background-color: #FEFAEF;color: #E6A23C;padding: 6px;margin-right: 10px;">物流信息</span>
  28. <span style="color: red;">*注:物流修改仅支持修改一次</span>
  29. </div>
  30. <el-form-item label="发货方式">
  31. <el-radio-group v-model="form.shipping_type">
  32. <el-radio :label="1">快递</el-radio>
  33. <el-radio :label="0">无需物流</el-radio>
  34. </el-radio-group>
  35. </el-form-item>
  36. <div v-if="form.shipping_type == 1">
  37. <el-form-item label="快递公司" prop="company">
  38. <el-select style="width:30%" v-model="form.express_id" placeholder="请选择快递公司" style="width: 100%" @change="handleExpressChange">
  39. <el-option v-for="company in express_companys" :key="company.id" :label="company.name" :value="company.id">
  40. </el-option>
  41. </el-select>
  42. </el-form-item>
  43. <el-form-item label="商家编码" prop="customer_name"
  44. v-if="form.shipping_type == 1 && (form.express_name === '京东物流' || form.express_name === '京东快运')">
  45. <el-input style="width:50%" placeholder="请输入商家编码" size="small" v-model="form.customer_name"
  46. autocomplete="off"></el-input>
  47. </el-form-item>
  48. <el-form-item label="快递单号" prop="express_no">
  49. <el-input style="width:50%" v-model="form.express_no"></el-input>
  50. </el-form-item>
  51. <el-form-item label="商家备注" prop="memo">
  52. <el-input style="width:50%" type="textarea" v-model="form.memo"></el-input>
  53. </el-form-item>
  54. <el-form-item>
  55. <div>收货信息:</div>
  56. <div style="line-height: 22px;">收货人:{{ order_info.receiver_name }}</div>
  57. <div style="line-height: 22px;">联系电话:{{ order_info.mobile }}</div>
  58. <div style="line-height: 22px;">收货地址: {{order_info.region_name}} {{order_info.address}}</div>
  59. </el-form-item>
  60. </div>
  61. </el-form>
  62. <div slot="footer" class="dialog-footer">
  63. <el-button @click="isShowChangeShipping = false">取 消</el-button>
  64. <el-button type="primary" @click="comfirm('ships')" :v-loading="changeShippingLoading">确 定</el-button>
  65. </div>
  66. </el-dialog>
  67. </div>
  68. </template>
  69. <script>
  70. Vue.component('order-shipping', {
  71. template: '#order-shipping',
  72. props: {
  73. is_show: {
  74. type: Boolean,
  75. default: false
  76. },
  77. order_info: {
  78. type: Object,
  79. default: function() {
  80. return {};
  81. }
  82. },
  83. changeShippingLoading:{
  84. type:Boolean,
  85. default:false
  86. },
  87. shipping_form: {
  88. type: Object,
  89. default: function() {
  90. return {};
  91. }
  92. }
  93. },
  94. data() {
  95. return {
  96. express_companys: [],
  97. form: {
  98. id:'',
  99. order_detail_ids:[],// 选中的发货商品
  100. shipping_type: 1, // 发货方式 [1快递 0无需物流]
  101. express_id: '', // 快递公司
  102. express_name:'', // 快递名称
  103. customer_name:'', // 京东物流编号
  104. express_no: '', // 快递单号
  105. memo: '', //卖家备注
  106. },
  107. isShowChangeShipping: false,
  108. order_status_list: {
  109. '0': "待付款",
  110. '1': "待发货",
  111. '2': "已发货",
  112. '3': "已收货",
  113. '4': "已完成",
  114. '-1': "售后申请",
  115. '-2': "退款中",
  116. '-3': "售后完成",
  117. '-4': "已关闭",
  118. },
  119. rules: {
  120. express_id: [{
  121. required: true,
  122. message: '请选择快递公司',
  123. trigger: 'change'
  124. }],
  125. express_no: [{
  126. required: true,
  127. message: '请填写快递单号',
  128. trigger: 'change'
  129. }],
  130. customer_name: [{
  131. required: true,
  132. message: '请填写商家编码',
  133. trigger: 'change'
  134. }]
  135. }
  136. }
  137. },
  138. watch: {
  139. is_show: function(newVal) {
  140. if(newVal){
  141. // 获取订单物流信息列表
  142. this.$nextTick(()=>{
  143. this.$refs.multipleTable.toggleAllSelection(true);
  144. })
  145. if(isEmpty(this.express_companys)) this.getOrderShipping()
  146. }
  147. this.isShowChangeShipping = newVal;
  148. if (!this.shipping_form.order_no && Object.keys(this.shipping_form).length > 1) {
  149. this.shipping_form.shipping_change = 1;// 修改物流
  150. this.form = this.shipping_form;
  151. } else {
  152. this.form.express_id = ''; // 快递公司
  153. this.form.express_name = ''; // 快递名称
  154. this.form.customer_name = ''; // 京东物流编号
  155. this.form.express_no = ''; // 快递单号
  156. this.form.memo = ''; //卖家备注
  157. }
  158. },
  159. order_info(val) {
  160. // // console.log(val, 'val')
  161. this.form.id = val.id
  162. // this.form.detail = val.detail
  163. // this.form.region_name = val.region_name
  164. // this.form.address = val.address
  165. }
  166. },
  167. methods: {
  168. getOrderShipping(){
  169. request({
  170. params: {
  171. r: 'mall/order/shipping'
  172. },
  173. }).then(res => {
  174. if(res.data.code == 0){
  175. this.express_companys = res.data.data.express_list;
  176. this.form.customer_name = res.data.data.jd_mch_code;
  177. }
  178. })
  179. },
  180. selectable(row,index){
  181. if (row.is_feedback != 0) {
  182. return false;
  183. }
  184. return row.shipping_status == 0;
  185. },
  186. handleSelectionChange(e) {
  187. this.form.order_detail_ids = getValues(e,'id');
  188. },
  189. handleExpressChange(e){
  190. let index = this.express_companys.findIndex(v => v.id == e);
  191. this.form.express_name = this.express_companys[index].name;
  192. },
  193. comfirm(formName) {
  194. let res = this.getOrderDetailIds();
  195. if (res.length <= 0) {
  196. this.$message.error('请选择发货商品');
  197. return false;
  198. }
  199. if (this.form.shipping_type == 1 && this.form.express_id <= 0) {
  200. this.$message.error('请选择快递公司');
  201. return false;
  202. }
  203. if (this.form.shipping_type == 1) {
  204. this.$refs[formName].validate((valid) => {
  205. if (valid) {
  206. if (typeof this.form.order_detail_ids == 'string') this.form.order_detail_ids = JSON.parse(this.form.order_detail_ids);
  207. this.$emit('submit',this.form);
  208. } else {
  209. console.log('error submit!!');
  210. return;
  211. }
  212. });
  213. } else {
  214. this.$emit('submit',this.form);
  215. }
  216. },
  217. dialogClose() {
  218. this.$emit('close')
  219. },
  220. getOrderDetailIds() {
  221. // 选中的订单商品
  222. let orderDetailIds = [];
  223. Object.keys(this.form.order_detail_ids).forEach(function (item) {
  224. orderDetailIds.push(item.id)
  225. });
  226. return orderDetailIds;
  227. },
  228. }
  229. })
  230. </script>