Skip to content

Commit 4dabb71

Browse files
committed
优化 OA 请假,create 和 detail 使用独立路由,可接入工作流
1 parent de5b121 commit 4dabb71

File tree

4 files changed

+88
-93
lines changed

4 files changed

+88
-93
lines changed

src/router/modules/remaining.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,19 @@ const remainingRouter: AppRouteRecordRaw[] = [
313313
hidden: true,
314314
canTo: true,
315315
title: '发起 OA 请假',
316-
activeMenu: 'bpm/oa/leave/create'
316+
activeMenu: '/bpm/oa/leave'
317+
}
318+
},
319+
{
320+
path: '/bpm/oa/leave/detail',
321+
component: () => import('@/views/bpm/oa/leave/detail.vue'),
322+
name: 'OALeaveDetail',
323+
meta: {
324+
noCache: true,
325+
hidden: true,
326+
canTo: true,
327+
title: '查看 OA 请假',
328+
activeMenu: '/bpm/oa/leave'
317329
}
318330
}
319331
]

src/views/bpm/oa/leave/create.vue

Lines changed: 46 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,55 @@
11
<template>
2-
<Dialog title="发起 OA 请假流程" v-model="dialogVisible">
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="请选择开始时间"
2+
<el-form
3+
ref="formRef"
4+
:model="formData"
5+
:rules="formRules"
6+
label-width="80px"
7+
v-loading="formLoading"
8+
>
9+
<el-form-item label="请假类型" prop="type">
10+
<el-select v-model="formData.type" placeholder="请选择请假类型" clearable>
11+
<el-option
12+
v-for="dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)"
13+
:key="dict.value"
14+
:label="dict.label"
15+
:value="dict.value"
2716
/>
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>
17+
</el-select>
18+
</el-form-item>
19+
<el-form-item label="开始时间" prop="startTime">
20+
<el-date-picker
21+
clearable
22+
v-model="formData.startTime"
23+
type="datetime"
24+
value-format="x"
25+
placeholder="请选择开始时间"
26+
/>
27+
</el-form-item>
28+
<el-form-item label="结束时间" prop="endTime">
29+
<el-date-picker
30+
clearable
31+
v-model="formData.endTime"
32+
type="datetime"
33+
value-format="x"
34+
placeholder="请选择结束时间"
35+
/>
36+
</el-form-item>
37+
<el-form-item label="原因" prop="reason">
38+
<el-input v-model="formData.reason" type="textarea" placeholder="请输请假原因" />
39+
</el-form-item>
40+
<el-form-item>
4341
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
44-
<el-button @click="dialogVisible = false">取 消</el-button>
45-
</template>
46-
</Dialog>
42+
</el-form-item>
43+
</el-form>
4744
</template>
4845
<script setup lang="ts">
4946
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
5047
import * as LeaveApi from '@/api/bpm/leave'
48+
import { useTagsViewStore } from '@/store/modules/tagsView'
5149
const message = useMessage() // 消息弹窗
50+
const { delView } = useTagsViewStore() // 视图操作
51+
const { currentRoute } = useRouter() // 路由
5252
53-
const dialogVisible = ref(false) // 弹窗的是否展示
5453
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
5554
const formData = ref({
5655
type: undefined,
@@ -66,15 +65,7 @@ const formRules = reactive({
6665
})
6766
const formRef = ref() // 表单 Ref
6867
69-
/** 打开弹窗 */
70-
const open = async () => {
71-
dialogVisible.value = true
72-
resetForm()
73-
}
74-
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
75-
7668
/** 提交表单 */
77-
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
7869
const submitForm = async () => {
7970
// 校验表单
8071
if (!formRef) return
@@ -85,23 +76,11 @@ const submitForm = async () => {
8576
try {
8677
const data = formData.value as unknown as LeaveApi.LeaveVO
8778
await LeaveApi.createLeave(data)
88-
message.success('新增成功')
89-
dialogVisible.value = false
90-
// 发送操作成功的事件
91-
emit('success')
79+
message.success('发起成功')
80+
// 关闭当前 Tab
81+
delView(unref(currentRoute))
9282
} finally {
9383
formLoading.value = false
9484
}
9585
}
96-
97-
/** 重置表单 */
98-
const resetForm = () => {
99-
formData.value = {
100-
type: undefined,
101-
reason: undefined,
102-
startTime: undefined,
103-
endTime: undefined
104-
}
105-
formRef.value?.resetFields()
106-
}
10786
</script>

src/views/bpm/oa/leave/detail.vue

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,48 @@
11
<template>
2-
<Dialog title="详情" v-model="dialogVisible" :scroll="true" :max-height="200">
2+
<ContentWrap>
33
<el-descriptions border :column="1">
44
<el-descriptions-item label="请假类型">
55
<dict-tag :type="DICT_TYPE.BPM_OA_LEAVE_TYPE" :value="detailData.type" />
66
</el-descriptions-item>
77
<el-descriptions-item label="开始时间">
8-
{{ formatDate(detailData.startTime) }}
8+
{{ formatDate(detailData.startTime, 'YYYY-MM-DD') }}
99
</el-descriptions-item>
1010
<el-descriptions-item label="结束时间">
11-
{{ formatDate(detailData.endTime) }}
11+
{{ formatDate(detailData.endTime, 'YYYY-MM-DD') }}
1212
</el-descriptions-item>
1313
<el-descriptions-item label="原因">
1414
{{ detailData.reason }}
1515
</el-descriptions-item>
1616
</el-descriptions>
17-
</Dialog>
17+
</ContentWrap>
1818
</template>
19-
<script setup lang="ts">
19+
<script setup lang="ts" name="OALeaveCreate">
2020
import { DICT_TYPE } from '@/utils/dict'
2121
import { formatDate } from '@/utils/formatTime'
22+
import { propTypes } from '@/utils/propTypes'
2223
import * as LeaveApi from '@/api/bpm/leave'
24+
const { query } = useRoute() // 查询参数
2325
24-
const dialogVisible = ref(false) // 弹窗的是否展示
26+
const props = defineProps({
27+
id: propTypes.number.def(undefined)
28+
})
2529
const detailLoading = ref(false) // 表单的加载中
26-
const detailData = ref() // 详情数据
30+
const detailData = ref({}) // 详情数据
31+
const queryId = query.id as unknown as number // 从 URL 传递过来的 id 编号
2732
28-
/** 打开弹窗 */
29-
const open = async (data: LeaveApi.LeaveVO) => {
30-
dialogVisible.value = true
31-
// 设置数据
33+
/** 获得数据 */
34+
const getInfo = async () => {
3235
detailLoading.value = true
3336
try {
34-
detailData.value = data
37+
detailData.value = await LeaveApi.getLeave(queryId || props.id)
3538
} finally {
3639
detailLoading.value = false
3740
}
3841
}
39-
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
42+
defineExpose({ open: getInfo }) // 提供 open 方法,用于打开弹窗
43+
44+
/** 初始化 **/
45+
onMounted(() => {
46+
getInfo()
47+
})
4048
</script>

src/views/bpm/oa/leave/index.vue

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,12 @@
137137
@pagination="getList"
138138
/>
139139
</ContentWrap>
140-
141-
<!-- 表单弹窗:详情 -->
142-
<LeaveDetail ref="detailRef" />
143-
<!-- 表单弹窗:添加 -->
144-
<LeaveForm ref="formRef" @success="getList" />
145140
</template>
146141
<script setup lang="ts" name="BpmOALeave">
147142
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
148143
import { dateFormatter } from '@/utils/formatTime'
149144
import * as LeaveApi from '@/api/bpm/leave'
150145
import * as ProcessInstanceApi from '@/api/bpm/processInstance'
151-
import LeaveDetail from './detail.vue'
152-
import LeaveForm from './create.vue'
153146
const message = useMessage() // 消息弹窗
154147
const router = useRouter() // 路由
155148
const { t } = useI18n() // 国际化
@@ -192,15 +185,18 @@ const resetQuery = () => {
192185
}
193186
194187
/** 添加操作 */
195-
const formRef = ref()
196188
const handleCreate = () => {
197-
formRef.value.open()
189+
router.push({ name: 'OALeaveCreate' })
198190
}
199191
200192
/** 详情操作 */
201-
const detailRef = ref()
202-
const handleDetail = (data: LeaveApi.LeaveVO) => {
203-
detailRef.value.open(data)
193+
const handleDetail = (row: LeaveApi.LeaveVO) => {
194+
router.push({
195+
name: 'OALeaveDetail',
196+
query: {
197+
id: row.id
198+
}
199+
})
204200
}
205201
206202
/** 取消请假操作 */

0 commit comments

Comments
 (0)