当前位置:首页 > 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):

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获取数据并在父组件中渲染:

vue实现车次信息

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;
}

交互功能增强

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

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 实现信息录入通常涉及表单绑定、数据验证和提交处理。以下是常见的实现方式: 数据双向绑定 通过 v-model 实现表单元素与 Vue 数据的双向绑定:…

React如何获取地址栏信息

React如何获取地址栏信息

获取当前URL路径 使用window.location.pathname可以直接获取当前页面的路径部分。在React组件中,可以通过useEffect钩子监听路径变化: import { useEf…

js实现滚动订单信息

js实现滚动订单信息

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

js实现信息分享

js实现信息分享

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

php实现员工信息

php实现员工信息

员工信息管理系统实现 PHP结合MySQL可以高效实现员工信息管理功能。以下是关键实现步骤和代码示例: 数据库设计 创建员工信息表employees的基本SQL: CREATE TABLE emp…

vue实现信息表

vue实现信息表

Vue实现信息表的步骤 使用Vue实现信息表可以通过多种方式完成,包括使用原生Vue组件或结合第三方库如Element UI、Vuetify等。以下是几种常见的方法: 使用原生Vue组件 创建一个简…