当前位置:首页 > VUE

vue实现在线预定

2026-02-24 21:08:02VUE

Vue实现在线预定功能

在线预定功能通常涉及前端界面交互、数据提交和后端处理。以下是一个基于Vue的实现方案:

创建预定表单组件

使用Vue的单文件组件创建预定表单:

<template>
  <div class="booking-form">
    <h3>在线预定</h3>
    <form @submit.prevent="submitBooking">
      <div class="form-group">
        <label for="name">姓名</label>
        <input type="text" id="name" v-model="formData.name" required>
      </div>

      <div class="form-group">
        <label for="email">邮箱</label>
        <input type="email" id="email" v-model="formData.email" required>
      </div>

      <div class="form-group">
        <label for="date">预定日期</label>
        <input type="date" id="date" v-model="formData.date" required>
      </div>

      <div class="form-group">
        <label for="time">时间</label>
        <select id="time" v-model="formData.time" required>
          <option value="09:00">09:00</option>
          <option value="10:00">10:00</option>
          <option value="11:00">11:00</option>
        </select>
      </div>

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

<script>
export default {
  data() {
    return {
      formData: {
        name: '',
        email: '',
        date: '',
        time: ''
      }
    }
  },
  methods: {
    async submitBooking() {
      try {
        const response = await axios.post('/api/bookings', this.formData)
        alert('预定成功!')
        this.resetForm()
      } catch (error) {
        console.error('预定失败:', error)
        alert('预定失败,请重试')
      }
    },
    resetForm() {
      this.formData = {
        name: '',
        email: '',
        date: '',
        time: ''
      }
    }
  }
}
</script>

<style scoped>
.booking-form {
  max-width: 500px;
  margin: 0 auto;
  padding: 20px;
}
.form-group {
  margin-bottom: 15px;
}
label {
  display: block;
  margin-bottom: 5px;
}
input, select {
  width: 100%;
  padding: 8px;
  box-sizing: border-box;
}
button {
  background-color: #42b983;
  color: white;
  padding: 10px 15px;
  border: none;
  cursor: pointer;
}
</style>

集成日期时间选择器

对于更专业的日期时间选择,可以集成第三方库如vue-datepicker:

npm install vue-datepicker --save

然后在组件中使用:

<template>
  <date-picker v-model="formData.date" :config="dateConfig"></date-picker>
</template>

<script>
import DatePicker from 'vue-datepicker'

export default {
  components: {
    DatePicker
  },
  data() {
    return {
      dateConfig: {
        format: 'YYYY-MM-DD',
        useCurrent: false
      }
    }
  }
}
</script>

处理API请求

使用axios处理与后端的通信:

import axios from 'axios'

// 全局配置
axios.defaults.baseURL = 'https://your-api-domain.com'
axios.interceptors.request.use(config => {
  config.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token')
  return config
})

添加表单验证

使用vuelidate进行表单验证:

npm install vuelidate --save

在main.js中注册:

import Vuelidate from 'vuelidate'
Vue.use(Vuelidate)

在组件中使用:

<script>
import { required, email } from 'vuelidate/lib/validators'

export default {
  validations: {
    formData: {
      name: { required },
      email: { required, email },
      date: { required },
      time: { required }
    }
  },
  methods: {
    submitBooking() {
      this.$v.$touch()
      if (this.$v.$invalid) return
      // 提交逻辑
    }
  }
}
</script>

显示预定状态

添加预定状态显示和加载指示器:

<template>
  <div v-if="loading" class="loading">处理中...</div>
  <div v-if="success" class="success">预定成功!</div>
  <div v-if="error" class="error">预定失败: {{ error }}</div>
</template>

<script>
export default {
  data() {
    return {
      loading: false,
      success: false,
      error: null
    }
  },
  methods: {
    async submitBooking() {
      this.loading = true
      this.success = false
      this.error = null

      try {
        await axios.post('/api/bookings', this.formData)
        this.success = true
        this.resetForm()
      } catch (err) {
        this.error = err.response?.data?.message || '未知错误'
      } finally {
        this.loading = false
      }
    }
  }
}
</script>

响应式设计优化

使用CSS媒体查询确保在不同设备上正常显示:

vue实现在线预定

@media (max-width: 768px) {
  .booking-form {
    padding: 10px;
  }
  input, select {
    padding: 10px;
  }
}

以上实现涵盖了在线预定系统的主要功能点,包括表单创建、数据验证、API交互和状态显示。根据具体需求,可以进一步扩展功能如多步骤预定流程、实时可用性检查等。

标签: 在线vue
分享给朋友:

相关文章

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

黑马vue实现

黑马vue实现

以下是关于使用 Vue.js 实现黑马相关功能或项目的关键方法和实践指南: 环境配置与项目初始化 安装最新版 Vue CLI 或使用 Vite 创建项目: npm create vue@lates…

vue实现子表格

vue实现子表格

Vue 实现子表格的方法 在 Vue 中实现子表格可以通过多种方式完成,以下是几种常见的方法: 使用嵌套组件 创建一个父表格组件和一个子表格组件,通过 props 将数据传递给子表格组件。父表格的每…

vue实现word在线

vue实现word在线

Vue 实现 Word 在线编辑与预览 方案一:使用 docx.js 与前端解析 安装依赖库 docx 和 file-saver,用于生成和下载 Word 文件: npm install docx…