当前位置:首页 > VUE

vue实现车次信息

2026-03-07 22:05:06VUE

Vue 实现车次信息功能

数据结构设计

车次信息通常包含车次编号、出发站、到达站、出发时间、到达时间、历时、座位类型及价格等字段。建议使用如下数据结构:

trainList: [
  {
    trainNo: 'G1234',
    from: '北京',
    to: '上海',
    departTime: '08:00',
    arriveTime: '12:30',
    duration: '4小时30分',
    seats: [
      { type: '二等座', price: 553 },
      { type: '一等座', price: 933 }
    ]
  }
]

组件化开发

创建独立的车次信息组件(TrainItem.vue):

<template>
  <div class="train-item">
    <div class="train-header">
      <span class="train-no">{{ data.trainNo }}</span>
      <span class="train-route">{{ data.from }} - {{ data.to }}</span>
    </div>
    <div class="train-time">
      <span>{{ data.departTime }}</span>
      <span class="duration">{{ data.duration }}</span>
      <span>{{ data.arriveTime }}</span>
    </div>
    <div class="train-seats">
      <div v-for="seat in data.seats" :key="seat.type" class="seat-item">
        <span>{{ seat.type }}</span>
        <span>¥{{ seat.price }}</span>
      </div>
    </div>
  </div>
</template>

数据获取与渲染

通过API获取数据并在父组件中渲染:

export default {
  data() {
    return {
      trains: []
    }
  },
  async created() {
    try {
      const res = await axios.get('/api/trains')
      this.trains = res.data
    } catch (error) {
      console.error('获取车次数据失败', error)
    }
  }
}

样式优化

使用CSS Grid布局实现响应式设计:

.train-item {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  gap: 16px;
  padding: 12px;
  border-bottom: 1px solid #eee;
}

.train-time {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.duration {
  color: #999;
  font-size: 0.9em;
}

.seat-item {
  display: flex;
  justify-content: space-between;
  margin-bottom: 8px;
}

交互功能增强

添加车次筛选和排序功能:

vue实现车次信息

computed: {
  filteredTrains() {
    return this.trains.filter(train => {
      return train.from.includes(this.searchQuery) || 
             train.to.includes(this.searchQuery) ||
             train.trainNo.includes(this.searchQuery)
    }).sort((a, b) => {
      if (this.sortBy === 'time') {
        return a.departTime.localeCompare(b.departTime)
      } else if (this.sortBy === 'price') {
        return a.seats[0].price - b.seats[0].price
      }
      return 0
    })
  }
}

注意事项

  1. 对于大量车次数据,建议实现分页或虚拟滚动
  2. 时间显示应考虑时区转换
  3. 价格信息应支持货币格式化
  4. 移动端需优化触摸交互体验
  5. 可添加车次状态标识(如正点、晚点等)

标签: 车次信息
分享给朋友:

相关文章

vue实现信息删减

vue实现信息删减

Vue 实现信息删减的方法 在 Vue 中实现信息删减可以通过多种方式完成,以下是几种常见的实现方法: 使用计算属性(Computed Properties) 计算属性可以根据原始数据进行处理,返回…

vue实现消除信息数量

vue实现消除信息数量

Vue 实现消息数量消除功能 在 Vue 中实现消息数量消除功能通常涉及数据绑定、事件处理和状态管理。以下是几种常见实现方式: 数据驱动方式 通过 Vue 的响应式数据特性,当消息被阅读时更新数据状…

react如何获取执行进度信息

react如何获取执行进度信息

获取执行进度的方法 在React中获取执行进度信息通常涉及异步操作(如数据加载、文件上传等)的状态跟踪。以下是几种常见实现方式: 使用自定义状态管理 通过React的useState和useEffe…

PHP实现显示列表信息

PHP实现显示列表信息

数据库连接配置 创建 config.php 文件存储数据库连接信息: <?php $host = 'localhost'; // 数据库主机 $dbname = 'tes…

js实现滚动订单信息

js实现滚动订单信息

实现滚动订单信息的方法 使用CSS动画实现滚动 通过CSS的@keyframes和animation属性可以实现简单的滚动效果。创建一个包含订单信息的容器,设置动画使其垂直或水平移动。 &l…

js实现信息分享

js实现信息分享

实现信息分享的JavaScript方法 在JavaScript中实现信息分享功能通常涉及调用浏览器的原生分享API或集成第三方社交平台的SDK。以下是几种常见的实现方式: 使用Web Share A…