当前位置:首页 > 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实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

实现vue框架

实现vue框架

Vue框架的基本实现 Vue是一个渐进式JavaScript框架,用于构建用户界面。以下是实现Vue框架的基本步骤: 安装Vue 通过CDN引入Vue是最简单的方式: <script src…

vue 实现跳转

vue 实现跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式实现,具体选择取决于项目需求和技术栈(如是否使用 Vue Router)。 使用 Vue Router 进行编程式导航…

vue 实现 confirm

vue 实现 confirm

实现确认对话框的方法 在Vue中实现确认对话框可以通过多种方式完成,包括使用内置组件、第三方库或自定义组件。 使用浏览器原生confirm 最简单的实现方式是直接调用浏览器原生的confirm方法。…