|
1 | 1 | <template>
|
2 |
| - <ContentWrap> |
3 |
| - <!-- 对话框(添加 / 修改) --> |
4 |
| - <Form :schema="allSchemas.formSchema" :rules="rules" ref="formRef" /> |
5 |
| - <!-- 按钮:保存 --> |
6 |
| - <XButton |
7 |
| - type="primary" |
8 |
| - :title="t('action.save')" |
9 |
| - :loading="actionLoading" |
10 |
| - @click="submitForm" |
11 |
| - /> |
12 |
| - </ContentWrap> |
| 2 | + <Dialog title="发起OA请假流程" v-model="modelVisible"> |
| 3 | + <el-form |
| 4 | + ref="formRef" |
| 5 | + :model="formData" |
| 6 | + :rules="formRules" |
| 7 | + label-width="80px" |
| 8 | + v-loading="formLoading" |
| 9 | + > |
| 10 | + <el-form-item label="请假类型" prop="type"> |
| 11 | + <el-select v-model="formData.type" placeholder="请选择请假类型" clearable> |
| 12 | + <el-option |
| 13 | + v-for="dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)" |
| 14 | + :key="dict.value" |
| 15 | + :label="dict.label" |
| 16 | + :value="dict.value" |
| 17 | + /> |
| 18 | + </el-select> |
| 19 | + </el-form-item> |
| 20 | + <el-form-item label="开始时间" prop="startTime"> |
| 21 | + <el-date-picker |
| 22 | + clearable |
| 23 | + v-model="formData.startTime" |
| 24 | + type="datetime" |
| 25 | + value-format="x" |
| 26 | + placeholder="请选择开始时间" |
| 27 | + /> |
| 28 | + </el-form-item> |
| 29 | + <el-form-item label="结束时间" prop="endTime"> |
| 30 | + <el-date-picker |
| 31 | + clearable |
| 32 | + v-model="formData.endTime" |
| 33 | + type="datetime" |
| 34 | + value-format="x" |
| 35 | + placeholder="请选择结束时间" |
| 36 | + /> |
| 37 | + </el-form-item> |
| 38 | + <el-form-item label="原因" prop="reason"> |
| 39 | + <el-input v-model="formData.reason" type="textarea" placeholder="请输请假原因" /> |
| 40 | + </el-form-item> |
| 41 | + </el-form> |
| 42 | + <template #footer> |
| 43 | + <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
| 44 | + <el-button @click="modelVisible = false">取 消</el-button> |
| 45 | + </template> |
| 46 | + </Dialog> |
13 | 47 | </template>
|
14 | 48 | <script setup lang="ts">
|
15 |
| -import { FormExpose } from '@/components/Form' |
16 |
| -// import XEUtils from 'xe-utils' |
17 |
| -
|
18 |
| -// 业务相关的 import |
| 49 | +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
19 | 50 | import * as LeaveApi from '@/api/bpm/leave'
|
20 |
| -import { rules, allSchemas } from './leave.data' |
21 |
| -
|
22 |
| -const { t } = useI18n() // 国际化 |
23 | 51 | const message = useMessage() // 消息弹窗
|
24 |
| -const { push } = useRouter() // 路由 |
25 | 52 |
|
26 |
| -// 表单参数 |
27 |
| -const actionLoading = ref(false) // 按钮 Loading |
28 |
| -const formRef = ref<FormExpose>() // 表单 Ref |
| 53 | +const modelVisible = ref(false) // 弹窗的是否展示 |
| 54 | +const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
| 55 | +const formData = ref({ |
| 56 | + type: undefined, |
| 57 | + reason: undefined, |
| 58 | + startTime: undefined, |
| 59 | + endTime: undefined |
| 60 | +}) |
| 61 | +const formRules = reactive({ |
| 62 | + type: [{ required: true, message: '请假类型不能为空', trigger: 'blur' }], |
| 63 | + reason: [{ required: true, message: '请假原因不能为空', trigger: 'change' }], |
| 64 | + startTime: [{ required: true, message: '请假开始时间不能为空', trigger: 'change' }], |
| 65 | + endTime: [{ required: true, message: '请假结束时间不能为空', trigger: 'change' }] |
| 66 | +}) |
| 67 | +const formRef = ref() // 表单 Ref |
| 68 | +
|
| 69 | +/** 打开弹窗 */ |
| 70 | +const open = async () => { |
| 71 | + modelVisible.value = true |
| 72 | + resetForm() |
| 73 | +} |
| 74 | +
|
| 75 | +/** 重置表单 */ |
| 76 | +const resetForm = () => { |
| 77 | + formData.value = { |
| 78 | + type: undefined, |
| 79 | + reason: undefined, |
| 80 | + startTime: undefined, |
| 81 | + endTime: undefined |
| 82 | + } |
| 83 | + formRef.value?.resetFields() |
| 84 | +} |
| 85 | +defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
29 | 86 |
|
30 |
| -// 提交按钮 |
| 87 | +/** 提交表单 */ |
| 88 | +const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
31 | 89 | const submitForm = async () => {
|
32 |
| - const elForm = unref(formRef)?.getElFormRef() |
33 |
| - if (!elForm) return |
34 |
| - elForm.validate(async (valid) => { |
35 |
| - if (!valid) { |
36 |
| - return |
37 |
| - } |
38 |
| - try { |
39 |
| - // 设置提交中 |
40 |
| - actionLoading.value = true |
41 |
| - const data = unref(formRef)?.formModel as LeaveApi.LeaveVO |
42 |
| - // data.startTime = XEUtils.toDateString(data.startTime, 'yyyy-MM-dd HH:mm:ss') |
43 |
| - // data.endTime = XEUtils.toDateString(data.endTime, 'yyyy-MM-dd HH:mm:ss') |
44 |
| - data.startTime = Date.parse(new Date(data.startTime).toString()).toString() |
45 |
| - data.endTime = Date.parse(new Date(data.endTime).toString()).toString() |
46 |
| - // 添加的提交 |
47 |
| - await LeaveApi.createLeave(data) |
48 |
| - message.success(t('common.createSuccess')) |
49 |
| - // 关闭窗口 |
50 |
| - push('/bpm/oa/leave') |
51 |
| - } finally { |
52 |
| - actionLoading.value = false |
53 |
| - } |
54 |
| - }) |
| 90 | + // 校验表单 |
| 91 | + if (!formRef) return |
| 92 | + const valid = await formRef.value.validate() |
| 93 | + if (!valid) return |
| 94 | + // 提交请求 |
| 95 | + formLoading.value = true |
| 96 | + try { |
| 97 | + const data = formData.value as unknown as LeaveApi.LeaveVO |
| 98 | + await LeaveApi.createLeaveApi(data) |
| 99 | + message.success('新增成功') |
| 100 | + modelVisible.value = false |
| 101 | + // 发送操作成功的事件 |
| 102 | + emit('success') |
| 103 | + } finally { |
| 104 | + formLoading.value = false |
| 105 | + } |
55 | 106 | }
|
56 | 107 | </script>
|
0 commit comments