接上篇《58、订单修改收货地址的功能》
上一篇我们完成了订单列表的修改收货地址功能,本篇我们来实现订单的物流信息查询功能。

一、要实现的效果

我们要实现点击操作列的“物流进度”绿色按钮,弹出该订单的物流信息记录,并以时间轴的形式显示出来:

二、物流信息对话框编写

我们来实现点击“物流进度”绿色按钮弹出物流信息对话框的效果,首先为“物流进度”按钮绑定一个名为“showProgressBox”的click点击事件:

<el-table-column label="操作" width="200px"><template slot-scope="{}"><el-button size= "mini" type="primary" icon="el-icon-edit" @click="showBox()"></el-button><el-button size= "mini" type="success" icon="el-icon-location" @click="showProgressBox()"></el-button></template>
</el-table-column>

然后在div的内部最后添加物流信息的对话框逻辑:

<!-- 物流进度的对话框 -->
<el-dialog :title="物流进度" :visible.sync="progressVisible" width="50%"><span>{{progressInfo}}</span><span slot="footer" class="dialog-footer"><el-button @click="progressVisible = false">取 消</el-button><el-button type="primary" @click="progressVisible = false">确 定</el-button></span>
</el-dialog>

然后在数据区域定义progressVisible显示属性,默认为false不显示;定义progressInfo物流信息参数,默认为一段测试文字:

data(){return{//查询条件queryInfo:{query: '',pagenum: 1,pagesize: 10},//订单列表,默认为空orderlist: [],total: 0, //数据总数addressVisible: false, //控制修改地址对话框显示addressForm:{address1: [],address2: ''},addressFormRules:{address1:[{required: true,message:'请选择省市区/县',trigger: 'blur'}],address2:[{required: true,message:'请输入详细地址',trigger: 'blur'}]},citydata: cityData,progressVisible: false,progressInfo: '这是一段信息'}
},

然后在方法区定义showProgressBox函数,触发时对话框显示:

//展示物流进度的对话框
showProgressBox(){this.progressVisible = true;
}

效果:

二、获取物流信息
获取物流信息的API如下:

请求路径:/kuaidi/:id
请求方法:get
供测试的物流单号:1106975712662
响应数据:
{
  "data": [
    {
      "time": "2018-05-10 09:39:00",
      "ftime": "2018-05-10 09:39:00",
      "context": "已签收,感谢使用顺丰,期待再次为您服务",
      "location": ""
    },
    {
      "time": "2018-05-10 08:23:00",
      "ftime": "2018-05-10 08:23:00",
      "context": "[北京市]北京海淀育新小区营业点派件员 顺丰速运 95338正在为您派件",
      "location": ""
    },
    {
      "time": "2018-05-10 07:32:00",
      "ftime": "2018-05-10 07:32:00",
      "context": "快件到达 [北京海淀育新小区营业点]",
      "location": ""
    },
    {
      "time": "2018-05-10 02:03:00",
      "ftime": "2018-05-10 02:03:00",
      "context": "快件在[北京顺义集散中心]已装车,准备发往 [北京海淀育新小区营业点]",
      "location": ""
    },
    {
      "time": "2018-05-09 23:05:00",
      "ftime": "2018-05-09 23:05:00",
      "context": "快件到达 [北京顺义集散中心]",
      "location": ""
    },
    {
      "time": "2018-05-09 21:21:00",
      "ftime": "2018-05-09 21:21:00",
      "context": "快件在[北京宝胜营业点]已装车,准备发往 [北京顺义集散中心]",
      "location": ""
    },
    {
      "time": "2018-05-09 13:07:00",
      "ftime": "2018-05-09 13:07:00",
      "context": "顺丰速运 已收取快件",
      "location": ""
    },
    {
      "time": "2018-05-09 12:25:03",
      "ftime": "2018-05-09 12:25:03",
      "context": "卖家发货",
      "location": ""
    },
    {
      "time": "2018-05-09 12:22:24",
      "ftime": "2018-05-09 12:22:24",
      "context": "您的订单将由HLA(北京海淀区清河中街店)门店安排发货。",
      "location": ""
    },
    {
      "time": "2018-05-08 21:36:04",
      "ftime": "2018-05-08 21:36:04",
      "context": "商品已经下单",
      "location": ""
    }
  ],
  "meta": { "status": 200, "message": "获取物流信息成功!" }
}

如果上述API在访问时Node后台直接挂掉,或者出现以下信息:

说明物流接口已经失效了(原接口实际上也是访问的第三方物流接口,该物流接口有可能随时会作废。)
如果接口失效,我们可以在order下创建一个progressInfo.js文件,把API中的样例返回数据json粘贴上去,在最外面包裹一层“export default []”(json放在大括号里):

然后在script中import进去:

import progressTest from './progressInfo.js'

然后在数据区定义这个测试数据“progressTestInfo”:

data(){return{//查询条件queryInfo:{query: '',pagenum: 1,pagesize: 10},//订单列表,默认为空orderlist: [],total: 0, //数据总数addressVisible: false, //控制修改地址对话框显示addressForm:{address1: [],address2: ''},addressFormRules:{address1:[{required: true,message:'请选择省市区/县',trigger: 'blur'}],address2:[{required: true,message:'请输入详细地址',trigger: 'blur'}]},citydata: cityData,progressVisible: false,progressInfo: '这是一段信息',progressTestInfo: progressTest}
},

我们在方法区showProgressBox函数中获取该物流信息(这里以物流号1106975712662为例,获取真实订单物流号的逻辑有兴趣的同学可以翻看API来完善,这里主要讲思路),并赋值给progressInfo(如果接口失效,就将静态的js数据赋值给progressInfo):

//展示物流进度的对话框
async showProgressBox(){const {data: res} = await this.$http.get('kuaidi/1106975712662');if(res.meta.status!==200){return this.$message.error('获取物流进度失败!')}if(res.data==null||res.data==''||JSON.stringify(res.data).indexOf('查无结果') !=-1){//如果接口不可用了,取个模拟数据this.progressInfo = progressTestInfo}else{//接口可用this.progressInfo = res.data;}this.progressVisible = true;
}

效果:

注:我这边接口是可用的,所以查询了1106975712662订单的信息,如果失效的话查询的是静态js的数据。

三、以时间轴形式显示物流进度

上面的物流信息太乱,我们需要用时间线组件来优化显示,打开ElementUI的文档,有关于时间线组件的介绍(vue2.6.0之后的版本才可以使用该组件,童鞋们需要注意):

官网源码:

<div class="block"><div class="radio">排序:<el-radio-group v-model="reverse"><el-radio :label="true">倒序</el-radio><el-radio :label="false">正序</el-radio></el-radio-group></div><el-timeline :reverse="reverse"><el-timeline-itemv-for="(activity, index) in activities":key="index":timestamp="activity.timestamp">{{activity.content}}</el-timeline-item></el-timeline>
</div><script>export default {data() {return {reverse: true,activities: [{content: '活动按期开始',timestamp: '2018-04-15'}, {content: '通过审核',timestamp: '2018-04-13'}, {content: '创建成功',timestamp: '2018-04-11'}]};}};
</script>

解释:使用的为el-timeline和el-timeline-item标签,在el-timeline-item中v-for循环了activities数组,key为数组主键,timestamp为数据中展示时间的字段,然后activity.content作为展示内容显示在el-timeline-item标签内。首先我们在element.js中引入Timeline和TimelineItem组件:

import Vue from 'vue'
import { Button, Form, FormItem, Input, Message, Container, Header, Aside, Main, Menu, Submenu, MenuItem, MenuItemGroup,Breadcrumb,BreadcrumbItem,Card,Row,Col,Table,TableColumn,Switch,Tooltip,Pagination,Dialog,MessageBox,Tag,Tree,Select,Option,Cascader,Alert,Tabs,TabPane,Steps,Step,CheckboxGroup,Checkbox,Upload,Timeline,TimelineItem } from 'element-ui'Vue.use(Button);Vue.use(Form);Vue.use(FormItem);Vue.use(Input);
Vue.use(Container);Vue.use(Header);Vue.use(Aside);Vue.use(Main);
Vue.use(Menu);Vue.use(Submenu);Vue.use(MenuItem);Vue.use(MenuItemGroup);
Vue.use(Breadcrumb);Vue.use(BreadcrumbItem);Vue.use(Card);Vue.use(Row);
Vue.use(Col);Vue.use(Table);Vue.use(TableColumn);Vue.use(Switch);Vue.use(Tooltip);
Vue.use(Pagination);Vue.use(Dialog);Vue.use(Tag);Vue.use(Tree);Vue.use(Select);
Vue.use(Option);Vue.use(Cascader);Vue.use(Alert);Vue.use(Tabs);Vue.use(TabPane);
Vue.use(Steps);Vue.use(Step);Vue.use(CheckboxGroup);Vue.use(Checkbox);Vue.use(Upload);
Vue.use(Timeline);Vue.use(TimelineItem);
Vue.prototype.$message = Message
Vue.prototype.$confirm = MessageBox.confirm

然后在物流进度对话框中引入el-timeline和el-timeline-item标签,并循环遍历获取到的progressInfo对象,其中时间戳字段是progressInfo对象子元素的“time”字段,显示内容是progressInfo对象子元素的“context”字段:

<!-- 物流进度的对话框 -->
<el-dialog :title="物流进度" :visible.sync="progressVisible" width="50%"><el-timeline :reverse="reverse"><el-timeline-itemv-for="(activity, index) in progressInfo":key="index":timestamp="activity.time">{{activity.context}}</el-timeline-item></el-timeline><span slot="footer" class="dialog-footer"><el-button @click="progressVisible = false">取 消</el-button><el-button type="primary" @click="progressVisible = false">确 定</el-button></span>
</el-dialog>

效果:

至此我们的订单物流信息查询功能完成。

四、提交分支代码

至此,我们订单管理的所有功能开发完毕,我们将分支代码提交并合并至master主分支上。
首先使用“git branch”查看当前所在分支,是order分支;然后使用“git add .”将修改内容添加到暂存区,然后执行“git commit”将修改内容提交至当前本地分支;然后使用“git push”将本地分支push到云端;最后通过“git checkout master”将分支切换到master分支,执行“git merge order”将order的内容合并至master主分支,然后将本地master分支推送到云端,此时master更新到了最新:


前往Gitee查看首页的提交记录,可以看到合并成功:

至此我们的订单管理模块就完成了。
下一篇我们来开发数据报表模块的相关功能。

参考:黑马程序员(www.itheima.com)Vue项目实战教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/125706079

【VUE项目实战】59、订单的物流信息查询功能相关推荐

  1. 【VUE项目实战】56、商品添加功能(六)-提交添加的商品

    接上篇<55.商品添加功能(五)-商品内容模块> 上一篇我们完成了商品内容编辑模块的开发,也即是完成了商品所有的信息编辑,本篇我们就来开发提交商品所有信息到后台的功能. 一.要实现的效果 ...

  2. 【VUE项目实战】54、商品添加功能(四)-商品图片上传模块

    接上篇<53.商品添加功能(三)-商品参数及属性模块> 上一篇我们完成了商品参数和商品属性面板的开发,本篇我们来完成商品图片上传模块的开发. 一.要实现的效果 我们在商品图片页签,需要放置 ...

  3. 【VUE项目实战】41、添加商品分类功能(二)

    接上篇<40.添加商品分类功能(一)> 上一篇我们实现了部分添加商品分类的功能,本篇我们来继续处理添加分类时表单相关的内容. 一.优化上一章剩余的小问题 首先我们先处理一下选中之后想要清除 ...

  4. 黑马瑞吉外卖项目之用户订单信息分页查询功能

    这里导入OrderDto并添加sumNum package com.itheima.reggie.dto;import com.itheima.reggie.entity.OrderDetail; i ...

  5. Vue项目实战:订单确认页面实现

    目录 订单父组件结构封装 地址和商品数据加载 地址删除功能实现 新增地址交互实现 地址编辑和订单提交 订单确认页面 如下: (1)订单父组件结构封装 回顾路由文件router.js中关于order的路 ...

  6. Vue项目实战-vue2(移动端)

    Vue项目实战(移动端)# 相关资料 (一) 创建项目 (二) 禁用Eslint (三) devtool (四) 添加less支持 (五) vue路由配置(背诵) (六) 父子组件通信(背诵) (七) ...

  7. 【VUE项目实战】32、权限管理-实现角色列表

    接上篇<31.权限管理-实现权限列表> 上个阶段我们完成了权限管理模块,本篇我们来介绍用户.角色和权限三者的关系,并完成角色管理列表模块. 一.权限管理业务分析 通过权限管理模块,控制不同 ...

  8. 【VUE项目实战】37、商品分类功能介绍和基本结构搭建

    接上篇<36.用户分配角色功能> 上一篇我们完成了为用户分配角色的功能,结束了权限管理模块.本篇我们开启新模块"分类管理"的开发,先进行模块的介绍和基本结构的搭建. 一 ...

  9. 【VUE项目实战】1、学习目标以及概述

    之前我们分别学习了ES6和Vue的基础,下面新开启的系列,是从0开始通过Vue搭建一个电商管理系统,从而学习Vue的具体实战. 以下博文记录,均参考黑马程序员(www.itheima.com)Vue项 ...

最新文章

  1. 特征工程 - 特征筛选
  2. 网络推广外包——网络推广外包专员如何做好网站首页设计
  3. ARIMA模型实例讲解——网络流量预测可以使用啊
  4. [UML]UML系列——类图class的关联关系(聚合、组合)
  5. 全球域名解析商域名增量Top10:万网增量及涨幅皆第三
  6. openresty配置部署
  7. DAVY的神龙帕夫——读者的心灵故事|十二橄榄枝的传说
  8. asr1601芯片平台实现ssl加密的websocket
  9. vb.net 同时给多个属性赋值_Python尚学堂高淇|1721时间表示unix时间点毫秒微秒time模块浮点数自动转换强制转换增强赋值运算符...
  10. IE overflow:hidden失效的解决方法:
  11. SharePoint【Site Definition 系列】-- 04. 相对快捷地创建List Definition的Schema.xml文件
  12. 一年级计算机课程视频教程,一年级视频教程_一年级免费学习视频大全
  13. 四川大学计算机专业贵州分数线,四川大学2019贵州录取分数线
  14. 【网络是怎么连接的】| 【03】探索集线器、交换机和路由器
  15. python脚本报错-qt.qpa.plugin: Could not load the Qt platform plugin “xcb“
  16. 山东大学软件工程应用与实践——RIME输入法配置文件分析
  17. CodeForces 1015 C Songs Compression
  18. LSV打印并制作城市地图教程 还可以做分布图、标注图
  19. 计算机更换配件导致系统,旧电脑怎么升级 旧电脑要换哪些配件
  20. 聪明的笨鸟(人-AI试验版)

热门文章

  1. openbox在ubuntu下安装及配置
  2. 28、Intel RealSense Depth Camera D415相机使用教程
  3. MAX3485使用记录
  4. ANSYS Maxwell 2D螺线管磁场分析
  5. OCR技术使书籍报刊电子化
  6. 中小企业MES生产执行系统源码 MES源码
  7. asp毕业设计——基于asp+access的在线教育系统设计与实现(毕业论文+程序源码)——在线教育系统
  8. 五行字两张图描述拦截器
  9. JLINK 灯不亮了 解决方案
  10. 异星工厂mod位置linux,异星工厂存档位置在哪 MOD安装在哪