当前位置:首页 > VUE

vue实现选座位

2026-03-28 20:03:01VUE

实现选座位功能(Vue)

基础数据结构设计

使用二维数组表示座位布局,每个座位包含状态(可选/已选/不可选)和唯一标识符。

data() {
  return {
    seats: [
      [
        { id: 'A1', status: 'available' },
        { id: 'A2', status: 'unavailable' }
      ],
      [
        { id: 'B1', status: 'available' },
        { id: 'B2', status: 'available' }
      ]
    ],
    selectedSeats: []
  }
}

模板渲染

使用嵌套 v-for 渲染座位表格,动态绑定样式类。

vue实现选座位

<div class="seat-map">
  <div v-for="(row, rowIndex) in seats" :key="rowIndex" class="seat-row">
    <div 
      v-for="seat in row" 
      :key="seat.id"
      :class="['seat', seat.status]"
      @click="selectSeat(seat)"
    >
      {{ seat.id }}
    </div>
  </div>
</div>

样式定义

通过 CSS 类控制不同状态的视觉表现。

.seat {
  width: 40px;
  height: 40px;
  margin: 5px;
  display: inline-flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  border: 1px solid #ccc;
}

.available { background-color: #e8f5e9; }
.unavailable { background-color: #ffcdd2; cursor: not-allowed; }
.selected { background-color: #bbdefb; }

座位选择逻辑

点击时修改座位状态并更新已选列表。

vue实现选座位

methods: {
  selectSeat(seat) {
    if (seat.status !== 'available') return;

    const index = this.selectedSeats.findIndex(s => s.id === seat.id);
    if (index >= 0) {
      seat.status = 'available';
      this.selectedSeats.splice(index, 1);
    } else {
      seat.status = 'selected';
      this.selectedSeats.push(seat);
    }
  }
}

进阶功能实现

添加最大可选数量限制和确认按钮。

selectSeat(seat) {
  if (seat.status !== 'available') return;

  if (this.selectedSeats.length >= 5 && !this.selectedSeats.includes(seat)) {
    alert('最多选择5个座位');
    return;
  }
  // ...原有逻辑
}
<button 
  @click="confirmSelection" 
  :disabled="selectedSeats.length === 0"
>
  确认选择 ({{ selectedSeats.length }})
</button>

服务器交互示例

提交已选座位到后端API。

async confirmSelection() {
  try {
    const response = await axios.post('/api/seats/book', {
      seats: this.selectedSeats.map(s => s.id)
    });
    alert('预订成功');
  } catch (error) {
    alert('操作失败');
  }
}

标签: 座位vue
分享给朋友:

相关文章

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Token…

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogress…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="app"…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现组件

vue实现组件

Vue 组件实现基础 Vue 组件是可复用的 Vue 实例,用于封装 UI 和逻辑。通过 .vue 文件或直接注册组件实现。 单文件组件 (SFC) 示例 <template>…