当前位置:首页 > 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实现压缩上传文件

vue实现压缩上传文件

压缩上传文件的实现方法 在Vue中实现文件压缩和上传功能,可以通过以下步骤完成。该方法结合了前端文件压缩库和HTTP请求,确保文件在上传前被有效压缩。 安装必要的依赖 需要使用compressorj…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取v…

vue  select实现

vue select实现

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

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue实现删除

vue实现删除

Vue 实现删除功能的方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,并为每个项绑定唯一标识符(如 id)。例如: <ul&g…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…