当前位置:首页 > VUE

vue实现预约功能

2026-02-18 14:24:42VUE

预约功能实现思路

在Vue中实现预约功能通常需要结合表单验证、时间选择、数据提交和状态管理。以下是核心实现步骤:

基础表单结构

创建预约表单组件,包含必要字段如姓名、联系方式、预约日期和时间:

<template>
  <form @submit.prevent="handleSubmit">
    <div>
      <label>姓名</label>
      <input v-model="form.name" type="text" required>
    </div>

    <div>
      <label>电话</label>
      <input v-model="form.phone" type="tel" required>
    </div>

    <div>
      <label>预约日期</label>
      <input v-model="form.date" type="date" :min="minDate">
    </div>

    <div>
      <label>预约时间</label>
      <select v-model="form.time">
        <option v-for="time in availableTimes" :value="time">{{ time }}</option>
      </select>
    </div>

    <button type="submit">提交预约</button>
  </form>
</template>

数据与验证处理

设置组件数据和方法处理表单提交:

vue实现预约功能

<script>
export default {
  data() {
    return {
      form: {
        name: '',
        phone: '',
        date: '',
        time: ''
      },
      minDate: new Date().toISOString().split('T')[0],
      availableTimes: ['09:00', '10:00', '11:00', '14:00', '15:00']
    }
  },
  methods: {
    validatePhone(phone) {
      const reg = /^1[3-9]\d{9}$/
      return reg.test(phone)
    },
    handleSubmit() {
      if (!this.validatePhone(this.form.phone)) {
        alert('请输入正确的手机号')
        return
      }

      // 提交数据到API
      this.submitReservation()
    },
    async submitReservation() {
      try {
        const response = await axios.post('/api/reservations', this.form)
        alert('预约成功')
      } catch (error) {
        alert('预约失败')
      }
    }
  }
}
</script>

时间选择优化

使用第三方日期时间选择器如vue-datepicker提升体验:

import DatePicker from 'vue2-datepicker'
import 'vue2-datepicker/index.css'

export default {
  components: { DatePicker },
  data() {
    return {
      timeOptions: {
        start: '09:00',
        step: '01:00',
        end: '18:00'
      }
    }
  }
}
<date-picker 
  v-model="form.date" 
  type="date" 
  :disabled-date="disablePastDates"
></date-picker>

预约状态管理

使用Vuex管理全局预约状态:

vue实现预约功能

// store/modules/reservation.js
export default {
  state: {
    reservations: []
  },
  mutations: {
    ADD_RESERVATION(state, payload) {
      state.reservations.push(payload)
    }
  },
  actions: {
    async createReservation({ commit }, formData) {
      const res = await api.createReservation(formData)
      commit('ADD_RESERVATION', res.data)
      return res
    }
  }
}

预约列表展示

创建独立组件展示预约信息:

<template>
  <div v-for="item in reservations" :key="item.id">
    <p>{{ item.name }} - {{ item.date }} {{ item.time }}</p>
    <p>状态: {{ item.status }}</p>
  </div>
</template>

<script>
import { mapState } from 'vuex'

export default {
  computed: {
    ...mapState(['reservations'])
  }
}
</script>

后端接口对接

配置axios实例处理API请求:

// api/reservation.js
import axios from 'axios'

const instance = axios.create({
  baseURL: 'https://your-api-endpoint.com'
})

export default {
  createReservation(data) {
    return instance.post('/reservations', data)
  },
  getReservations() {
    return instance.get('/reservations')
  }
}

实时更新处理

使用WebSocket或定时刷新保持数据同步:

mounted() {
  this.fetchReservations()
  this.timer = setInterval(this.fetchReservations, 60000)
},
methods: {
  async fetchReservations() {
    const res = await api.getReservations()
    this.$store.commit('SET_RESERVATIONS', res.data)
  }
},
beforeDestroy() {
  clearInterval(this.timer)
}

以上实现方案可根据具体业务需求进行调整,包括添加更多字段验证、预约规则限制、可视化日历展示等功能模块。

标签: 功能vue
分享给朋友:

相关文章

vue datepicker 实现

vue datepicker 实现

实现 Vue Datepicker 的基本方法 在 Vue 项目中实现日期选择功能,可以使用第三方库如 vue-datepicker 或 v-calendar。以下是两种常见实现方式: 安装 vue…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue实现项目

vue实现项目

Vue 项目实现指南 环境准备 确保已安装 Node.js(建议版本 14+)和 npm/yarn。通过以下命令检查版本: node -v npm -v 创建 Vue 项目 使用 Vue CLI 快…

vue实现销售程序

vue实现销售程序

Vue实现销售程序的基本步骤 搭建Vue项目基础结构 使用Vue CLI或Vite初始化项目,安装必要依赖(如Vue Router、Vuex/Pinia、Element UI/Ant Design V…

vue实现文章滚动

vue实现文章滚动

Vue 实现文章滚动效果 使用 CSS 实现基础滚动 通过 CSS 的 overflow 和 height 属性控制滚动区域,适用于静态内容滚动。在 Vue 模板中定义固定高度的容器,内容超出后自动滚…