当前位置:首页 > 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;
}

权限控制 添加路由守卫:

vue预约实现

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

标签: vue
分享给朋友:

相关文章

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过计…

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sele…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue实现布局

vue实现布局

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

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue实现换页

vue实现换页

Vue实现页面切换的方法 在Vue中实现页面切换通常可以通过Vue Router来完成。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的实现方式:…