提交
This commit is contained in:
1 parent
0e1b750457
commit
8c49021d38
93 files changed
+22731
-12107
No files matched your search
@@ -129,6 +129,12 @@
|
||||
listTripKits,
|
||||
TRIP_MANUAL_PREFIX
|
||||
} from '@/utils/oa-trip-kit-runtime'
|
||||
import {
|
||||
buildFlowPreviewRequestKey,
|
||||
collectConditionFields,
|
||||
shouldShowFlowPreviewSpinner,
|
||||
shouldSkipFlowPreviewRequest
|
||||
} from '@/utils/oa-flow-preview-refresh'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
|
||||
defineOptions({ name: 'OaStartFormDialog' })
|
||||
@@ -162,6 +168,12 @@
|
||||
const flowPendingMessage = ref('必填信息填写后,流程将自动显示')
|
||||
const previewLoading = ref(false)
|
||||
let previewTimer: ReturnType<typeof setTimeout> | null = null
|
||||
/** 流程条件字段:仅这些 formData 变化才重拉预览 */
|
||||
let flowConditionFields: string[] = []
|
||||
let lastFlowPreviewRequestKey: string | null = null
|
||||
let inFlightFlowPreviewKey: string | null = null
|
||||
let hasCompletedFlowPreview = false
|
||||
let flowPreviewReqSeq = 0
|
||||
/** 避免时长自动回写再次触发手改判定 */
|
||||
let leaveKitSyncing = false
|
||||
let leaveKitPrevSnapshot: Record<string, unknown> = {}
|
||||
@@ -242,23 +254,56 @@
|
||||
}
|
||||
|
||||
async function loadFlowPreview(appId: string) {
|
||||
previewLoading.value = true
|
||||
if (!appId) return
|
||||
const requestKey = buildFlowPreviewRequestKey({
|
||||
formData: formData.value,
|
||||
initiatorSelectByNode: initiatorSelectByNode.value,
|
||||
conditionFields: flowConditionFields
|
||||
})
|
||||
if (
|
||||
shouldSkipFlowPreviewRequest(lastFlowPreviewRequestKey, requestKey, {
|
||||
inFlightKey: inFlightFlowPreviewKey
|
||||
})
|
||||
) {
|
||||
return
|
||||
}
|
||||
const seq = ++flowPreviewReqSeq
|
||||
inFlightFlowPreviewKey = requestKey
|
||||
const showSpinner = shouldShowFlowPreviewSpinner({
|
||||
hasCompletedPreview: hasCompletedFlowPreview
|
||||
})
|
||||
if (showSpinner) previewLoading.value = true
|
||||
try {
|
||||
const preview = await fetchOaFlowPreview(appId, {
|
||||
formData: { ...formData.value },
|
||||
initiatorSelectByNode: { ...initiatorSelectByNode.value }
|
||||
})
|
||||
if (seq !== flowPreviewReqSeq) return
|
||||
lastFlowPreviewRequestKey = requestKey
|
||||
flowResolved.value = preview?.resolved !== false
|
||||
flowPendingMessage.value = preview?.message || '必填信息填写后,流程将自动显示'
|
||||
flowSteps.value = flowResolved.value ? preview?.steps || [] : []
|
||||
} catch {
|
||||
if (seq !== flowPreviewReqSeq) return
|
||||
flowSteps.value = []
|
||||
flowResolved.value = true
|
||||
} finally {
|
||||
previewLoading.value = false
|
||||
if (seq === flowPreviewReqSeq) {
|
||||
inFlightFlowPreviewKey = null
|
||||
hasCompletedFlowPreview = true
|
||||
previewLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function resetFlowPreviewState(flowRoot: unknown) {
|
||||
flowConditionFields = collectConditionFields(flowRoot)
|
||||
lastFlowPreviewRequestKey = null
|
||||
inFlightFlowPreviewKey = null
|
||||
hasCompletedFlowPreview = false
|
||||
flowPreviewReqSeq += 1
|
||||
}
|
||||
|
||||
function scheduleFlowPreview() {
|
||||
if (!dlgVisible.value || !picked.value?.id) return
|
||||
if (previewTimer) clearTimeout(previewTimer)
|
||||
@@ -335,6 +380,7 @@
|
||||
void syncOvertimeKitDurations()
|
||||
const flow = detail?.flowTreeJson || {}
|
||||
const root = flow.root || flow
|
||||
resetFlowPreviewState(root)
|
||||
needInitiatorSelect.value = flowNeedsInitiatorSelect(root)
|
||||
if (needInitiatorSelect.value && !userOptions.value.length) {
|
||||
await loadUsers()
|
||||
|
||||
Reference in new issue
Block a user