当前位置:首页 > VUE

vue实现类似淘宝快递

2026-01-22 23:36:18VUE

Vue 实现类似淘宝快递物流跟踪功能

实现类似淘宝的快递物流跟踪功能需要结合前端展示和后端数据交互。以下是关键步骤和代码示例:

数据准备与接口设计

后端需提供物流信息接口,返回数据结构示例:

{
  "expressCompany": "顺丰速运",
  "expressNumber": "SF123456789",
  "status": "运输中",
  "steps": [
    {
      "time": "2023-05-01 14:00",
      "location": "北京市朝阳区",
      "description": "快件已签收"
    },
    {
      "time": "2023-04-30 09:30",
      "location": "北京市转运中心",
      "description": "快件运输中"
    }
  ]
}

Vue 组件实现

创建物流跟踪组件(ExpressTrack.vue):

<template>
  <div class="express-track">
    <div class="header">
      <span>{{ expressCompany }}</span>
      <span>{{ expressNumber }}</span>
      <span class="status-badge">{{ status }}</span>
    </div>

    <div class="timeline">
      <div 
        v-for="(step, index) in steps" 
        :key="index"
        :class="['step', { 'active': index === 0 }]"
      >
        <div class="dot"></div>
        <div class="line" v-if="index !== steps.length - 1"></div>
        <div class="content">
          <p>{{ step.description }}</p>
          <p class="time">{{ step.time }}</p>
          <p class="location">{{ step.location }}</p>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    expressData: {
      type: Object,
      required: true
    }
  },
  computed: {
    expressCompany() {
      return this.expressData.expressCompany
    },
    expressNumber() {
      return this.expressData.expressNumber
    },
    status() {
      return this.expressData.status
    },
    steps() {
      return [...this.expressData.steps].reverse()
    }
  }
}
</script>

<style scoped>
.express-track {
  padding: 20px;
  background: #fff;
  border-radius: 8px;
}

.header {
  display: flex;
  align-items: center;
  margin-bottom: 20px;
}

.status-badge {
  margin-left: auto;
  padding: 4px 8px;
  background: #ff5722;
  color: white;
  border-radius: 4px;
  font-size: 12px;
}

.timeline {
  position: relative;
  padding-left: 30px;
}

.step {
  position: relative;
  padding-bottom: 20px;
}

.dot {
  position: absolute;
  left: -30px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #e0e0e0;
  border: 3px solid #fff;
}

.active .dot {
  background: #4caf50;
  box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.3);
}

.line {
  position: absolute;
  left: -24px;
  top: 16px;
  width: 2px;
  height: calc(100% - 16px);
  background: #e0e0e0;
}

.active ~ .step .line {
  background: #4caf50;
}

.content {
  padding: 8px 16px;
  background: #f5f5f5;
  border-radius: 4px;
}

.time, .location {
  color: #666;
  font-size: 12px;
  margin-top: 4px;
}
</style>

接口调用与数据绑定

在父组件中调用接口并传递数据:

<template>
  <div>
    <ExpressTrack v-if="expressData" :expressData="expressData" />
    <div v-else>加载中...</div>
  </div>
</template>

<script>
import ExpressTrack from './ExpressTrack.vue'

export default {
  components: {
    ExpressTrack
  },
  data() {
    return {
      expressData: null
    }
  },
  async created() {
    try {
      const response = await fetch('/api/express/track?id=123')
      this.expressData = await response.json()
    } catch (error) {
      console.error('获取物流信息失败:', error)
    }
  }
}
</script>

功能增强建议

自动刷新功能

// 在组件中添加定时刷新
setInterval(async () => {
  const response = await fetch('/api/express/track?id=123')
  this.expressData = await response.json()
}, 30000) // 每30秒刷新一次

快递公司图标显示

<template>
  <div class="header">
    <img 
      :src="`/icons/${expressCompany}.png`" 
      width="24" 
      height="24"
    >
    <!-- 其他内容 -->
  </div>
</template>

地图集成 使用高德或百度地图API展示物流路径:

import AMapLoader from '@amap/amap-jsapi-loader'

methods: {
  initMap() {
    AMapLoader.load({
      key: 'YOUR_KEY',
      version: '2.0'
    }).then((AMap) => {
      const map = new AMap.Map('map-container', {
        viewMode: '2D',
        zoom: 10
      })

      // 添加物流路径标记
      this.steps.forEach(step => {
        new AMap.Marker({
          position: [step.lng, step.lat],
          map: map
        })
      })
    })
  }
}

注意事项

  • 物流数据通常需要从第三方快递接口获取,如快递鸟、快递100等
  • 时间显示建议使用day.js或moment.js进行格式化
  • 移动端适配需要考虑时间轴布局调整
  • 敏感信息如快递单号需要做部分隐藏处理(如SF1234)

vue实现类似淘宝快递

标签: 淘宝快递
分享给朋友:

相关文章

淘宝css导航栏制作

淘宝css导航栏制作

淘宝CSS导航栏制作方法 使用HTML和CSS可以轻松制作类似淘宝的导航栏。以下是一个常见的实现方式: HTML结构 <div class="nav-container"> &…

淘宝css代码制作

淘宝css代码制作

在淘宝店铺装修中,CSS代码用于自定义页面样式,提升视觉效果和用户体验。以下是常见的CSS代码制作方法和应用场景: 自定义店铺背景 通过CSS可以修改店铺背景颜色或图片,代码示例如下: bod…

用css制作淘宝网页

用css制作淘宝网页

淘宝网页的CSS制作要点 淘宝网页的布局和样式较为复杂,涉及响应式设计、商品展示、导航栏等。以下是一些关键CSS实现方法。 导航栏设计 导航栏通常固定在顶部,包含logo、搜索框和用户操作入口。使用…

淘宝css导航栏制作

淘宝css导航栏制作

淘宝CSS导航栏制作 制作类似淘宝的导航栏需要关注几个关键点:结构清晰、响应式设计、悬停效果以及图标使用。以下是具体实现方法: HTML结构 <div class="nav-container…

淘宝导航css制作

淘宝导航css制作

淘宝导航 CSS 制作方法 淘宝导航栏通常包含多个层级菜单、下拉框和响应式设计。以下是实现类似效果的 CSS 制作方法: 基础结构 导航栏通常使用 <nav> 或 <div>…

vue实现淘宝客服

vue实现淘宝客服

实现淘宝客服功能的技术要点 使用Vue实现类似淘宝客服的功能需要结合实时通信、消息列表管理和UI交互设计。以下是关键实现步骤: 后端服务搭建 选择WebSocket协议实现实时通信,Node.js…