From 4dabb710c557345ed5e3c391ebd8e77eb818deb3 Mon Sep 17 00:00:00 2001 From: YunaiV <zhijiantianya@gmail.com> Date: Sat, 15 Apr 2023 16:03:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20OA=20=E8=AF=B7=E5=81=87?= =?UTF-8?q?=EF=BC=8Ccreate=20=E5=92=8C=20detail=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E8=B7=AF=E7=94=B1=EF=BC=8C=E5=8F=AF=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=E5=B7=A5=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/modules/remaining.ts | 14 +++- src/views/bpm/oa/leave/create.vue | 113 ++++++++++++------------------ src/views/bpm/oa/leave/detail.vue | 34 +++++---- src/views/bpm/oa/leave/index.vue | 20 +++--- 4 files changed, 88 insertions(+), 93 deletions(-) diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index 8886e388..d3b18d9c 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -313,7 +313,19 @@ const remainingRouter: AppRouteRecordRaw[] = [ hidden: true, canTo: true, title: '发起 OA 请假', - activeMenu: 'bpm/oa/leave/create' + activeMenu: '/bpm/oa/leave' + } + }, + { + path: '/bpm/oa/leave/detail', + component: () => import('@/views/bpm/oa/leave/detail.vue'), + name: 'OALeaveDetail', + meta: { + noCache: true, + hidden: true, + canTo: true, + title: '查看 OA 请假', + activeMenu: '/bpm/oa/leave' } } ] diff --git a/src/views/bpm/oa/leave/create.vue b/src/views/bpm/oa/leave/create.vue index 321ec609..13c49419 100644 --- a/src/views/bpm/oa/leave/create.vue +++ b/src/views/bpm/oa/leave/create.vue @@ -1,56 +1,55 @@ <template> - <Dialog title="发起 OA 请假流程" v-model="dialogVisible"> - <el-form - ref="formRef" - :model="formData" - :rules="formRules" - label-width="80px" - v-loading="formLoading" - > - <el-form-item label="请假类型" prop="type"> - <el-select v-model="formData.type" placeholder="请选择请假类型" clearable> - <el-option - v-for="dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="开始时间" prop="startTime"> - <el-date-picker - clearable - v-model="formData.startTime" - type="datetime" - value-format="x" - placeholder="请选择开始时间" + <el-form + ref="formRef" + :model="formData" + :rules="formRules" + label-width="80px" + v-loading="formLoading" + > + <el-form-item label="请假类型" prop="type"> + <el-select v-model="formData.type" placeholder="请选择请假类型" clearable> + <el-option + v-for="dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)" + :key="dict.value" + :label="dict.label" + :value="dict.value" /> - </el-form-item> - <el-form-item label="结束时间" prop="endTime"> - <el-date-picker - clearable - v-model="formData.endTime" - type="datetime" - value-format="x" - placeholder="请选择结束时间" - /> - </el-form-item> - <el-form-item label="原因" prop="reason"> - <el-input v-model="formData.reason" type="textarea" placeholder="请输请假原因" /> - </el-form-item> - </el-form> - <template #footer> + </el-select> + </el-form-item> + <el-form-item label="开始时间" prop="startTime"> + <el-date-picker + clearable + v-model="formData.startTime" + type="datetime" + value-format="x" + placeholder="请选择开始时间" + /> + </el-form-item> + <el-form-item label="结束时间" prop="endTime"> + <el-date-picker + clearable + v-model="formData.endTime" + type="datetime" + value-format="x" + placeholder="请选择结束时间" + /> + </el-form-item> + <el-form-item label="原因" prop="reason"> + <el-input v-model="formData.reason" type="textarea" placeholder="请输请假原因" /> + </el-form-item> + <el-form-item> <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> - <el-button @click="dialogVisible = false">取 消</el-button> - </template> - </Dialog> + </el-form-item> + </el-form> </template> <script setup lang="ts"> import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import * as LeaveApi from '@/api/bpm/leave' +import { useTagsViewStore } from '@/store/modules/tagsView' const message = useMessage() // 消息弹窗 +const { delView } = useTagsViewStore() // 视图操作 +const { currentRoute } = useRouter() // 路由 -const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formData = ref({ type: undefined, @@ -66,15 +65,7 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref -/** 打开弹窗 */ -const open = async () => { - dialogVisible.value = true - resetForm() -} -defineExpose({ open }) // 提供 open 方法,用于打开弹窗 - /** 提交表单 */ -const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 const submitForm = async () => { // 校验表单 if (!formRef) return @@ -85,23 +76,11 @@ const submitForm = async () => { try { const data = formData.value as unknown as LeaveApi.LeaveVO await LeaveApi.createLeave(data) - message.success('新增成功') - dialogVisible.value = false - // 发送操作成功的事件 - emit('success') + message.success('发起成功') + // 关闭当前 Tab + delView(unref(currentRoute)) } finally { formLoading.value = false } } - -/** 重置表单 */ -const resetForm = () => { - formData.value = { - type: undefined, - reason: undefined, - startTime: undefined, - endTime: undefined - } - formRef.value?.resetFields() -} </script> diff --git a/src/views/bpm/oa/leave/detail.vue b/src/views/bpm/oa/leave/detail.vue index 838be149..2efc37fb 100644 --- a/src/views/bpm/oa/leave/detail.vue +++ b/src/views/bpm/oa/leave/detail.vue @@ -1,40 +1,48 @@ <template> - <Dialog title="详情" v-model="dialogVisible" :scroll="true" :max-height="200"> + <ContentWrap> <el-descriptions border :column="1"> <el-descriptions-item label="请假类型"> <dict-tag :type="DICT_TYPE.BPM_OA_LEAVE_TYPE" :value="detailData.type" /> </el-descriptions-item> <el-descriptions-item label="开始时间"> - {{ formatDate(detailData.startTime) }} + {{ formatDate(detailData.startTime, 'YYYY-MM-DD') }} </el-descriptions-item> <el-descriptions-item label="结束时间"> - {{ formatDate(detailData.endTime) }} + {{ formatDate(detailData.endTime, 'YYYY-MM-DD') }} </el-descriptions-item> <el-descriptions-item label="原因"> {{ detailData.reason }} </el-descriptions-item> </el-descriptions> - </Dialog> + </ContentWrap> </template> -<script setup lang="ts"> +<script setup lang="ts" name="OALeaveCreate"> import { DICT_TYPE } from '@/utils/dict' import { formatDate } from '@/utils/formatTime' +import { propTypes } from '@/utils/propTypes' import * as LeaveApi from '@/api/bpm/leave' +const { query } = useRoute() // 查询参数 -const dialogVisible = ref(false) // 弹窗的是否展示 +const props = defineProps({ + id: propTypes.number.def(undefined) +}) const detailLoading = ref(false) // 表单的加载中 -const detailData = ref() // 详情数据 +const detailData = ref({}) // 详情数据 +const queryId = query.id as unknown as number // 从 URL 传递过来的 id 编号 -/** 打开弹窗 */ -const open = async (data: LeaveApi.LeaveVO) => { - dialogVisible.value = true - // 设置数据 +/** 获得数据 */ +const getInfo = async () => { detailLoading.value = true try { - detailData.value = data + detailData.value = await LeaveApi.getLeave(queryId || props.id) } finally { detailLoading.value = false } } -defineExpose({ open }) // 提供 open 方法,用于打开弹窗 +defineExpose({ open: getInfo }) // 提供 open 方法,用于打开弹窗 + +/** 初始化 **/ +onMounted(() => { + getInfo() +}) </script> diff --git a/src/views/bpm/oa/leave/index.vue b/src/views/bpm/oa/leave/index.vue index ebf10d72..901b6038 100644 --- a/src/views/bpm/oa/leave/index.vue +++ b/src/views/bpm/oa/leave/index.vue @@ -137,19 +137,12 @@ @pagination="getList" /> </ContentWrap> - - <!-- 表单弹窗:详情 --> - <LeaveDetail ref="detailRef" /> - <!-- 表单弹窗:添加 --> - <LeaveForm ref="formRef" @success="getList" /> </template> <script setup lang="ts" name="BpmOALeave"> import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { dateFormatter } from '@/utils/formatTime' import * as LeaveApi from '@/api/bpm/leave' import * as ProcessInstanceApi from '@/api/bpm/processInstance' -import LeaveDetail from './detail.vue' -import LeaveForm from './create.vue' const message = useMessage() // 消息弹窗 const router = useRouter() // 路由 const { t } = useI18n() // 国际化 @@ -192,15 +185,18 @@ const resetQuery = () => { } /** 添加操作 */ -const formRef = ref() const handleCreate = () => { - formRef.value.open() + router.push({ name: 'OALeaveCreate' }) } /** 详情操作 */ -const detailRef = ref() -const handleDetail = (data: LeaveApi.LeaveVO) => { - detailRef.value.open(data) +const handleDetail = (row: LeaveApi.LeaveVO) => { + router.push({ + name: 'OALeaveDetail', + query: { + id: row.id + } + }) } /** 取消请假操作 */