当前位置:首页 > VUE

vue预约实现

2026-01-13 23:51:27VUE

Vue 预约功能实现

预约功能通常涉及时间选择、表单提交和状态管理。以下是基于 Vue 的实现方案:

基础结构搭建 安装必要依赖(如 vue-router 和日期选择库):

npm install vue-router vue-datepicker-next

时间选择组件 使用第三方日期时间选择器(如 vue-datepicker-next):

<template>
  <date-picker v-model="selectedDate" type="datetime" />
</template>

<script>
import DatePicker from 'vue-datepicker-next'
export default {
  components: { DatePicker },
  data() {
    return { selectedDate: null }
  }
}
</script>

表单验证 实现基础表单验证逻辑:

<template>
  <form @submit.prevent="handleSubmit">
    <input v-model="form.name" required placeholder="姓名">
    <span v-if="errors.name">{{ errors.name }}</span>

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

<script>
export default {
  data() {
    return {
      form: { name: '', date: null },
      errors: {}
    }
  },
  methods: {
    validateForm() {
      this.errors = {}
      if (!this.form.name) this.errors.name = '请输入姓名'
      return Object.keys(this.errors).length === 0
    },
    handleSubmit() {
      if (this.validateForm()) {
        // 提交逻辑
      }
    }
  }
}
</script>

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

// store.js
export default new Vuex.Store({
  state: {
    appointments: []
  },
  mutations: {
    ADD_APPOINTMENT(state, payload) {
      state.appointments.push(payload)
    }
  },
  actions: {
    createAppointment({ commit }, appointment) {
      commit('ADD_APPOINTMENT', appointment)
    }
  }
})

API 集成 封装 API 请求:

// api.js
export const createAppointment = (data) => {
  return axios.post('/api/appointments', data)
}

完整页面示例

<template>
  <div>
    <h3>新建预约</h3>
    <date-picker v-model="form.date" />

    <form @submit.prevent="submitAppointment">
      <input v-model="form.clientName" placeholder="客户名">
      <button type="submit">确认预约</button>
    </form>
  </div>
</template>

<script>
import { createAppointment } from '@/api'
import { mapActions } from 'vuex'

export default {
  data() {
    return {
      form: {
        date: new Date(),
        clientName: ''
      }
    }
  },
  methods: {
    ...mapActions(['createAppointment']),
    async submitAppointment() {
      try {
        await this.createAppointment(this.form)
        this.$router.push('/success')
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

关键注意事项

时间处理 使用 dayjs 或 moment 处理日期格式:

import dayjs from 'dayjs'
const formattedDate = dayjs(this.form.date).format('YYYY-MM-DD HH:mm')

防止重复提交 添加提交状态锁:

data() {
  return {
    isSubmitting: false
  }
},
methods: {
  async submitForm() {
    if (this.isSubmitting) return
    this.isSubmitting = true
    // 提交逻辑
    this.isSubmitting = false
  }
}

响应式布局 针对移动端优化样式:

.date-picker {
  width: 100%;
  max-width: 400px;
}

权限控制 添加路由守卫:

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isLoggedIn()) {
    next('/login')
  } else {
    next()
  }
})

vue预约实现

标签: vue
分享给朋友:

相关文章

vue登录逻辑的实现

vue登录逻辑的实现

Vue 登录逻辑实现 前端实现 创建登录组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template…

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue.js…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 29…