当前位置:首页 > VUE

vue实现预约页面

2026-02-09 10:47:13VUE

实现预约页面的核心步骤

使用Vue CLI或Vite创建项目
通过npm create vue@latestnpm create vite@latest初始化项目,选择Vue模板。安装必要依赖如vue-routeraxios(如需后端交互)和UI库(如Element Plus)。

设计页面结构
src/views下创建预约页面组件(如Booking.vue),包含表单区域(日期选择器、时间槽、个人信息输入)和展示区域(预约规则或已约时段提示)。示例代码框架:

<template>
  <div class="booking-container">
    <h3>预约服务</h3>
    <form @submit.prevent="handleSubmit">
      <!-- 表单字段将在此添加 -->
    </form>
  </div>
</template>

关键功能实现

日期时间选择组件
推荐使用第三方组件如Element Plus的日期时间选择器:

<el-date-picker 
  v-model="selectedDate"
  type="date"
  placeholder="选择日期"
  :disabled-date="disablePastDates"
/>
<el-time-select
  v-model="selectedTime"
  :picker-options="{ start: '08:00', step: '00:30', end: '18:00' }"
/>

需在script中定义selectedDateselectedTime的响应式变量,并通过disablePastDates方法禁用过去日期。

表单验证逻辑
使用Vue的v-model绑定表单数据,配合vee-validate或原生验证:

vue实现预约页面

<el-input 
  v-model="form.name"
  :rules="[{ required: true, message: '请输入姓名' }]"
/>

methods中定义提交处理函数:

handleSubmit() {
  this.$refs.form.validate((valid) => {
    if (valid) {
      axios.post('/api/bookings', this.form)
        .then(response => alert('预约成功'))
    }
  })
}

数据交互与状态管理

API请求封装
创建src/api/booking.js封装预约相关请求:

import axios from 'axios'
export const createBooking = (data) => 
  axios.post('/bookings', data)

Pinia/Vuex状态管理(可选)
对于复杂场景,可用Pinia管理预约状态:

vue实现预约页面

// stores/booking.js
export const useBookingStore = defineStore('booking', {
  state: () => ({
    bookings: []
  }),
  actions: {
    async fetchBookings() {
      this.bookings = await getBookings()
    }
  }
})

样式优化与响应式

移动端适配
通过CSS媒体查询确保移动端体验:

@media (max-width: 768px) {
  .booking-container {
    padding: 10px;
  }
  .el-date-picker {
    width: 100%;
  }
}

加载状态与错误处理
在提交时显示加载状态:

<el-button 
  :loading="isSubmitting" 
  @click="handleSubmit"
>提交预约</el-button>

通过try/catch处理网络错误,使用ElMessage显示提示。

完整示例组件结构

<script setup>
import { ref } from 'vue'
import { createBooking } from '@/api/booking'

const form = ref({
  date: '',
  time: '',
  name: '',
  phone: ''
})
const isSubmitting = ref(false)

const handleSubmit = async () => {
  isSubmitting.value = true
  try {
    await createBooking(form.value)
    ElMessage.success('预约成功')
  } catch (error) {
    ElMessage.error(error.message)
  } finally {
    isSubmitting.value = false
  }
}
</script>

标签: 页面vue
分享给朋友:

相关文章

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件:…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> &l…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一…