当前位置:首页 > 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展示物流路径:

vue实现类似淘宝快递

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实现快递单号查询

vue实现快递单号查询

实现快递单号查询的步骤 获取快递API接口 需要选择一个可靠的快递查询API服务提供商,例如快递100、快递鸟等。注册账号后获取API密钥(Key)和必要的接口文档。通常这些API支持通过快递单号查询…

vue实现淘宝搜索

vue实现淘宝搜索

Vue实现淘宝搜索功能 淘宝搜索功能的核心包括关键词输入、实时搜索建议、商品列表展示和筛选功能。以下是实现的关键步骤: 1. 创建搜索组件 <template> <div c…

css淘宝页面制作

css淘宝页面制作

CSS淘宝页面制作指南 淘宝页面制作需要结合HTML结构和CSS样式,以下为关键步骤和注意事项: 布局设计 淘宝页面通常采用响应式布局,确保在不同设备上正常显示。使用Flexbox或Grid实现多列…

js实现快递单套打

js实现快递单套打

快递单套打实现方法 使用JavaScript实现快递单套打功能,关键在于精准定位打印内容和处理打印样式。以下是具体实现步骤: 准备工作 获取快递单模板的PDF或图片文件 测量需要填充内容的坐标位置…

vue实现手机淘宝

vue实现手机淘宝

Vue 实现手机淘宝功能 实现类似手机淘宝的功能需要结合 Vue.js 框架和相关的技术栈。以下是关键步骤和实现方法: 项目初始化 使用 Vue CLI 创建项目,安装必要的依赖如 Vue Rout…