当前位置:首页 > VUE

vue实现销假功能

2026-03-09 17:24:54VUE

实现销假功能的基本思路

销假功能通常涉及前端表单提交、数据验证、与后端API交互等环节。以下基于Vue 3的Composition API实现方案:

表单组件结构

<template>
  <form @submit.prevent="handleSubmit">
    <div>
      <label>请假类型</label>
      <select v-model="formData.leaveType">
        <option value="annual">年假</option>
        <option value="sick">病假</option>
      </select>
    </div>

    <div>
      <label>销假原因</label>
      <textarea v-model="formData.reason"></textarea>
    </div>

    <button type="submit">提交销假</button>
  </form>
</template>

数据与逻辑处理

import { reactive } from 'vue'
import axios from 'axios'

export default {
  setup() {
    const formData = reactive({
      leaveType: '',
      reason: '',
      attachments: []
    })

    const handleSubmit = async () => {
      try {
        const response = await axios.post('/api/leave/cancel', formData)
        console.log('销假成功', response.data)
      } catch (error) {
        console.error('销假失败', error)
      }
    }

    return { formData, handleSubmit }
  }
}

表单验证增强

可引入VeeValidate进行验证:

vue实现销假功能

import { useForm, useField } from 'vee-validate'
import * as yup from 'yup'

export default {
  setup() {
    const schema = yup.object({
      leaveType: yup.string().required('必须选择请假类型'),
      reason: yup.string().min(10, '销假原因至少10个字符')
    })

    const { handleSubmit } = useForm({ validationSchema: schema })

    const { value: leaveType } = useField('leaveType')
    const { value: reason } = useField('reason')

    const onSubmit = handleSubmit(async (values) => {
      await axios.post('/api/leave/cancel', values)
    })

    return { leaveType, reason, onSubmit }
  }
}

文件上传处理

添加附件上传功能:

vue实现销假功能

<template>
  <input type="file" @change="handleFileUpload" multiple>
</template>

<script>
const handleFileUpload = (event) => {
  formData.attachments = Array.from(event.target.files)
}
</script>

状态管理方案

对于复杂应用可使用Pinia管理状态:

// stores/leave.js
import { defineStore } from 'pinia'

export const useLeaveStore = defineStore('leave', {
  actions: {
    async cancelLeave(payload) {
      return await axios.post('/api/leave/cancel', payload)
    }
  }
})

注意事项

  1. 敏感操作应添加二次确认
  2. 提交按钮需添加防重复点击逻辑
  3. 错误处理应展示用户友好提示
  4. 生产环境应使用HTTPS加密通信
  5. 文件上传需考虑大小限制和类型限制

后端接口建议

前端需与后端约定以下接口规范:

  • 请求方法:POST
  • 路径:/api/leave/cancel
  • 请求体:{ leaveType, reason, attachments }
  • 成功响应:{ code: 200, data: {...} }
  • 错误响应:{ code: 400, message: "错误描述" }

标签: 功能vue
分享给朋友:

相关文章

vue computed 实现

vue computed 实现

computed 的基本用法 在 Vue 中,computed 用于声明计算属性,这些属性基于响应式依赖进行缓存。只有当依赖发生变化时,计算属性才会重新计算。 new Vue({ data: {…

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…

vue列表实现

vue列表实现

Vue 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…

vue实现picker

vue实现picker

Vue 实现 Picker 组件的方法 在 Vue 中实现 Picker 组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 实现 通过 Vue 的模板和样式绑定,…

vue 实现报价

vue 实现报价

Vue 实现报价功能 在 Vue 中实现报价功能通常涉及前端表单交互、数据计算和与后端 API 的通信。以下是实现报价功能的几种常见方法: 表单设计与数据绑定 使用 Vue 的 v-model 指…