order-shipping.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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 label="商家备注1" prop="memo_arr1">
  55. <el-input style="width:50%" type="textarea" v-model="form.memo_arr1"></el-input>
  56. </el-form-item>
  57. <el-form-item label="商家备注2" prop="memo_arr2">
  58. <el-input style="width:50%" type="textarea" v-model="form.memo_arr2"></el-input>
  59. </el-form-item>
  60. <el-form-item label="商家备注3" prop="memo_arr3">
  61. <el-input style="width:50%" type="textarea" v-model="form.memo_arr3"></el-input>
  62. </el-form-item>
  63. <el-form-item>
  64. <div>收货信息:</div>
  65. <div style="line-height: 22px;">收货人:{{ order_info.receiver_name }}</div>
  66. <div style="line-height: 22px;">联系电话:{{ order_info.mobile }}</div>
  67. <div style="line-height: 22px;">收货地址: {{order_info.region_name}} {{order_info.address}}</div>
  68. </el-form-item>
  69. </div>
  70. <div v-if="form.shipping_type == 0">
  71. <!-- <el-form-item label="商家备注" prop="memo">
  72. <el-input style="width:50%" type="textarea" v-model="form.memo"></el-input>
  73. </el-form-item> -->
  74. <el-form-item label="商家备注1" prop="memo_arr1">
  75. <el-input style="width:50%" type="textarea" v-model="form.memo_arr1"></el-input>
  76. </el-form-item>
  77. <el-form-item label="商家备注2" prop="memo_arr2">
  78. <el-input style="width:50%" type="textarea" v-model="form.memo_arr2"></el-input>
  79. </el-form-item>
  80. <el-form-item label="商家备注3" prop="memo_arr3">
  81. <el-input style="width:50%" type="textarea" v-model="form.memo_arr3"></el-input>
  82. </el-form-item>
  83. </div>
  84. </el-form>
  85. <div slot="footer" class="dialog-footer">
  86. <el-button @click="isShowChangeShipping = false">取 消</el-button>
  87. <el-button type="primary" @click="comfirm('ships')" :v-loading="changeShippingLoading">确 定</el-button>
  88. </div>
  89. </el-dialog>
  90. </div>
  91. </template>
  92. <script>
  93. Vue.component('order-shipping', {
  94. template: '#order-shipping',
  95. props: {
  96. is_show: {
  97. type: Boolean,
  98. default: false
  99. },
  100. order_info: {
  101. type: Object,
  102. default: function() {
  103. return {};
  104. }
  105. },
  106. changeShippingLoading:{
  107. type:Boolean,
  108. default:false
  109. },
  110. shipping_form: {
  111. type: Object,
  112. default: function() {
  113. return {};
  114. }
  115. }
  116. },
  117. data() {
  118. return {
  119. express_companys: [],
  120. form: {
  121. id:'',
  122. order_detail_ids:[],// 选中的发货商品
  123. shipping_type: 1, // 发货方式 [1快递 0无需物流]
  124. express_id: '', // 快递公司
  125. express_name:'', // 快递名称
  126. customer_name:'', // 京东物流编号
  127. express_no: '', // 快递单号
  128. memo: '', //卖家备注
  129. memo_arr1: '', //卖家备注
  130. memo_arr2: '', //卖家备注
  131. memo_arr3: '', //卖家备注
  132. },
  133. isShowChangeShipping: false,
  134. order_status_list: {
  135. '0': "待付款",
  136. '1': "待发货",
  137. '2': "已发货",
  138. '3': "已收货",
  139. '4': "已完成",
  140. '-1': "售后申请",
  141. '-2': "退款中",
  142. '-3': "售后完成",
  143. '-4': "已关闭",
  144. },
  145. rules: {
  146. express_id: [{
  147. required: true,
  148. message: '请选择快递公司',
  149. trigger: 'change'
  150. }],
  151. express_no: [{
  152. required: true,
  153. message: '请填写快递单号',
  154. trigger: 'change'
  155. }],
  156. customer_name: [{
  157. required: true,
  158. message: '请填写商家编码',
  159. trigger: 'change'
  160. }]
  161. }
  162. }
  163. },
  164. watch: {
  165. is_show: function(newVal) {
  166. if(newVal){
  167. // 获取订单物流信息列表
  168. this.$nextTick(()=>{
  169. this.$refs.multipleTable.toggleAllSelection(true);
  170. })
  171. if(isEmpty(this.express_companys)) this.getOrderShipping()
  172. }
  173. this.isShowChangeShipping = newVal;
  174. if (!this.shipping_form.order_no && Object.keys(this.shipping_form).length > 1) {
  175. this.shipping_form.shipping_change = 1;// 修改物流
  176. this.form = this.shipping_form;
  177. } else {
  178. this.form.express_id = ''; // 快递公司
  179. this.form.express_name = ''; // 快递名称
  180. this.form.customer_name = ''; // 京东物流编号
  181. this.form.express_no = ''; // 快递单号
  182. this.form.memo = ''; //卖家备注
  183. }
  184. },
  185. order_info(val) {
  186. // // console.log(val, 'val')
  187. this.form.id = val.id
  188. // this.form.detail = val.detail
  189. // this.form.region_name = val.region_name
  190. // this.form.address = val.address
  191. }
  192. },
  193. methods: {
  194. getOrderShipping(){
  195. request({
  196. params: {
  197. r: 'happiness/client/order/shipping'
  198. },
  199. }).then(res => {
  200. if(res.data.code == 0){
  201. this.express_companys = res.data.data.express_list;
  202. this.form.customer_name = res.data.data.jd_mch_code;
  203. }
  204. })
  205. },
  206. selectable(row,index){
  207. if (row.is_feedback != 0) {
  208. return false;
  209. }
  210. return row.shipping_status == 0;
  211. },
  212. handleSelectionChange(e) {
  213. this.form.order_detail_ids = getValues(e,'id');
  214. },
  215. handleExpressChange(e){
  216. let index = this.express_companys.findIndex(v => v.id == e);
  217. this.form.express_name = this.express_companys[index].name;
  218. },
  219. comfirm(formName) {
  220. let res = this.getOrderDetailIds();
  221. if (res.length <= 0) {
  222. this.$message.error('请选择发货商品');
  223. return false;
  224. }
  225. if (this.form.shipping_type == 1 && this.form.express_id <= 0) {
  226. this.$message.error('请选择快递公司');
  227. return false;
  228. }
  229. if (this.form.shipping_type == 1) {
  230. this.$refs[formName].validate((valid) => {
  231. if (valid) {
  232. if (typeof this.form.order_detail_ids == 'string') this.form.order_detail_ids = JSON.parse(this.form.order_detail_ids);
  233. this.$emit('submit',this.form);
  234. } else {
  235. console.log('error submit!!');
  236. return;
  237. }
  238. });
  239. } else {
  240. this.$emit('submit',this.form);
  241. }
  242. },
  243. dialogClose() {
  244. this.$emit('close')
  245. },
  246. getOrderDetailIds() {
  247. // 选中的订单商品
  248. let orderDetailIds = [];
  249. Object.keys(this.form.order_detail_ids).forEach(function (item) {
  250. orderDetailIds.push(item.id)
  251. });
  252. return orderDetailIds;
  253. },
  254. }
  255. })
  256. </script>