当前位置:首页 > 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 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @wh…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const rout…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue 实现简单登陆

vue 实现简单登陆

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-contain…

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简单…

vue前端分页怎么实现

vue前端分页怎么实现

前端分页实现方法 在Vue中实现前端分页通常涉及数据分割和页面控制逻辑。以下是常见的实现方式: 使用计算属性分页 通过计算属性对数据进行切片处理: computed: { paginate…