Skip to content

Commit a186806

Browse files
committed
【代码优化】BPM:OA 请假界面
1 parent 6197c14 commit a186806

File tree

1 file changed

+37
-35
lines changed

1 file changed

+37
-35
lines changed

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

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<template>
2-
<ContentWrap :bodyStyle="{ padding: '10px 20px 0' }">
3-
<el-row :gutter="20">
4-
<el-col :span="16"
5-
><el-form
2+
<el-row :gutter="20">
3+
<el-col :span="16">
4+
<ContentWrap title="申请信息">
5+
<el-form
66
ref="formRef"
77
v-loading="formLoading"
88
:model="formData"
@@ -41,35 +41,39 @@
4141
<el-input v-model="formData.reason" placeholder="请输入请假原因" type="textarea" />
4242
</el-form-item>
4343
<el-form-item>
44-
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
44+
<el-button :disabled="formLoading" type="primary" @click="submitForm">
45+
确 定
46+
</el-button>
4547
</el-form-item>
46-
</el-form></el-col
47-
>
48-
<!-- 新增 ====== begin ======== -->
49-
<el-col :span="8"
50-
><!-- 流程时间线 -->
48+
</el-form>
49+
</ContentWrap>
50+
</el-col>
51+
52+
<!-- 审批相关:流程信息 -->
53+
<el-col :span="8">
54+
<ContentWrap title="审批流程" :bodyStyle="{ padding: '0 20px 0' }">
5155
<ProcessInstanceTimeline
5256
ref="timelineRef"
5357
:activity-nodes="activityNodes"
5458
:show-status-icon="false"
5559
@select-user-confirm="selectUserConfirm"
5660
/>
57-
</el-col>
58-
<!-- 新增 ====== end ======== -->
59-
</el-row>
60-
</ContentWrap>
61+
</ContentWrap>
62+
</el-col>
63+
</el-row>
6164
</template>
6265
<script lang="ts" setup>
6366
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
6467
import * as LeaveApi from '@/api/bpm/leave'
6568
import { useTagsViewStore } from '@/store/modules/tagsView'
69+
70+
// 审批相关:import
6671
import * as DefinitionApi from '@/api/bpm/definition'
67-
// 新增 ====== begin ========
68-
import ProcessInstanceTimeline from '../../processInstance/detail/ProcessInstanceTimeline.vue'
72+
import ProcessInstanceTimeline from '@/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue'
6973
import * as ProcessInstanceApi from '@/api/bpm/processInstance'
7074
import { CandidateStrategy, NodeId } from '@/components/SimpleProcessDesignerV2/src/consts'
7175
import { ApprovalNodeInfo } from '@/api/bpm/processInstance'
72-
// 新增 ====== end ========
76+
7377
defineOptions({ name: 'BpmOALeaveCreate' })
7478
7579
const message = useMessage() // 消息弹窗
@@ -91,22 +95,21 @@ const formRules = reactive({
9195
})
9296
const formRef = ref() // 表单 Ref
9397
94-
// 指定审批人
98+
// 审批相关:变量
9599
const processDefineKey = 'oa_leave' // 流程定义 Key
96100
const startUserSelectTasks = ref([]) // 发起人需要选择审批人的用户任务列表
97101
const startUserSelectAssignees = ref({}) // 发起人选择审批人的数据
98-
// 新增 ====== begin ========
99102
const tempStartUserSelectAssignees = ref({}) // 历史发起人选择审批人的数据,用于每次表单变更时,临时保存
100103
const activityNodes = ref<ProcessInstanceApi.ApprovalNodeInfo[]>([]) // 审批节点信息
101104
const processDefinitionId = ref('')
102-
// 新增 ====== end ========
105+
103106
/** 提交表单 */
104107
const submitForm = async () => {
105-
// 校验表单
108+
// 1.1 校验表单
106109
if (!formRef) return
107110
const valid = await formRef.value.validate()
108111
if (!valid) return
109-
// 校验指定审批人
112+
// 1.2 审批相关:校验指定审批人
110113
if (startUserSelectTasks.value?.length > 0) {
111114
for (const userTask of startUserSelectTasks.value) {
112115
if (
@@ -118,11 +121,11 @@ const submitForm = async () => {
118121
}
119122
}
120123
121-
// 提交请求
124+
// 2. 提交请求
122125
formLoading.value = true
123126
try {
124127
const data = { ...formData.value } as unknown as LeaveApi.LeaveVO
125-
// 设置指定审批人
128+
// 审批相关:设置指定审批人
126129
if (startUserSelectTasks.value?.length > 0) {
127130
data.startUserSelectAssignees = startUserSelectAssignees.value
128131
}
@@ -136,12 +139,12 @@ const submitForm = async () => {
136139
}
137140
}
138141
139-
// 新增 ====== begin ========
140-
/** 获取审批详情 */
142+
/** 审批相关:获取审批详情 */
141143
const getApprovalDetail = async () => {
142144
try {
143145
const data = await ProcessInstanceApi.getApprovalDetail({
144146
processDefinitionId: processDefinitionId.value,
147+
// TODO 小北:可以支持 processDefinitionKey 查询
145148
activityId: NodeId.START_USER_NODE_ID,
146149
processVariablesStr: JSON.stringify({ day: daysDifference() }) // 解决 GET 无法传递对象的问题,后端 String 再转 JSON
147150
})
@@ -174,21 +177,22 @@ const getApprovalDetail = async () => {
174177
}
175178
}
176179
177-
/** 选择发起人 */
180+
/** 审批相关:选择发起人 */
178181
const selectUserConfirm = (id: string, userList: any[]) => {
179182
startUserSelectAssignees.value[id] = userList?.map((item: any) => item.id)
180183
}
181184
182185
// 计算天数差
186+
// TODO @小北:可以搞到 formatTime 里面去,然后看看 dayjs 里面有没有现成的方法,或者辅助计算的方法。
183187
const daysDifference = () => {
184188
const oneDay = 24 * 60 * 60 * 1000 // 一天的毫秒数
185189
const diffTime = Math.abs(Number(formData.value.endTime) - Number(formData.value.startTime))
186190
return Math.floor(diffTime / oneDay)
187191
}
188-
// 新增 ====== end ========
189192
190193
/** 初始化 */
191194
onMounted(async () => {
195+
// TODO @小北:这里可以简化,统一通过 getApprovalDetail 处理么?
192196
const processDefinitionDetail = await DefinitionApi.getProcessDefinition(
193197
undefined,
194198
processDefineKey
@@ -200,13 +204,12 @@ onMounted(async () => {
200204
}
201205
processDefinitionId.value = processDefinitionDetail.id
202206
startUserSelectTasks.value = processDefinitionDetail.startUserSelectTasks
203-
// 新增 ====== begin ========
204-
// 加载最新的审批详情,主要用于节点预测
205-
getApprovalDetail()
206-
// 新增 ====== end ========
207+
208+
// 审批相关:加载最新的审批详情,主要用于节点预测
209+
await getApprovalDetail()
207210
})
208-
// 新增 ====== begin ========
209-
/** 预测流程节点会因为输入的参数值而产生新的预测结果值,所以需重新预测一次, formData.value可改成实际业务中的特定字段 */
211+
212+
/** 审批相关:预测流程节点会因为输入的参数值而产生新的预测结果值,所以需重新预测一次, formData.value可改成实际业务中的特定字段 */
210213
watch(
211214
formData.value,
212215
(newValue, oldValue) => {
@@ -224,6 +227,5 @@ watch(
224227
{
225228
immediate: true
226229
}
227-
// 新增 ====== end ========
228230
)
229231
</script>

0 commit comments

Comments
 (0)