当前位置:首页 > VUE

vue实现销假功能

2026-02-18 04:34:38VUE

实现销假功能的基本思路

销假功能通常涉及前端表单提交、数据验证、与后端API交互等环节。以下以Vue 3 + Element Plus为例,展示核心实现方法。

表单组件设计

<template>
  <el-form :model="leaveForm" :rules="rules" ref="formRef">
    <el-form-item label="请假类型" prop="leaveType">
      <el-select v-model="leaveForm.leaveType">
        <el-option label="年假" value="annual"></el-option>
        <el-option label="病假" value="sick"></el-option>
      </el-select>
    </el-form-item>

    <el-form-item label="销假时间" prop="cancelTime">
      <el-date-picker 
        v-model="leaveForm.cancelTime" 
        type="datetime"
        placeholder="选择销假时间">
      </el-date-picker>
    </el-form-item>

    <el-form-item>
      <el-button type="primary" @click="submitForm">提交销假</el-button>
    </el-form-item>
  </el-form>
</template>

数据与验证规则

<script setup>
import { ref } from 'vue'

const formRef = ref(null)
const leaveForm = ref({
  leaveId: '',  // 请假记录ID
  leaveType: '',
  cancelTime: ''
})

const rules = {
  leaveType: [
    { required: true, message: '请选择请假类型', trigger: 'change' }
  ],
  cancelTime: [
    { required: true, message: '请选择销假时间', trigger: 'change' }
  ]
}
</script>

提交逻辑实现

const submitForm = async () => {
  try {
    await formRef.value.validate()

    const response = await axios.post('/api/leave/cancel', {
      leaveId: leaveForm.value.leaveId,
      cancelTime: leaveForm.value.cancelTime
    })

    ElMessage.success('销假成功')
    emit('success')  // 触发成功事件
  } catch (error) {
    ElMessage.error(error.response?.data?.message || '销假失败')
  }
}

状态管理建议

对于需要全局管理的销假状态,可以使用Pinia:

vue实现销假功能

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

export const useLeaveStore = defineStore('leave', {
  state: () => ({
    cancelledLeaves: []
  }),
  actions: {
    async cancelLeave(leaveId) {
      const res = await cancelLeaveApi(leaveId)
      this.cancelledLeaves.push(res.data)
      return res
    }
  }
})

注意事项

  • 确保销假时间晚于请假开始时间
  • 处理重复提交问题(可通过按钮loading状态)
  • 考虑添加销假原因文本输入字段
  • 移动端适配可能需要调整日期选择器样式

后端API应验证请假记录是否存在、是否已销假等业务规则,返回相应的状态码和提示信息。

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

相关文章

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null }…