feat(web): update travel request and reimbursement views

This commit is contained in:
caoxiaozhu
2026-05-14 07:10:46 +00:00
parent 476d5fdf93
commit 4a72b977ba
4 changed files with 109 additions and 147 deletions

View File

@@ -1976,10 +1976,8 @@ export default {
const reviewCancelDialogOpen = ref(false)
const reviewEditDialogOpen = ref(false)
const deleteSessionDialogOpen = ref(false)
const leaveKnowledgeDialogOpen = ref(false)
const reviewActionBusy = ref(false)
const deleteSessionBusy = ref(false)
const leaveKnowledgeBusy = ref(false)
const reviewEditFields = ref([])
const reviewActionMessageId = ref('')
const reviewInlineForm = ref(createEmptyInlineReviewState())
@@ -2035,6 +2033,7 @@ export default {
}
return labels[currentInsight.value.intent] ?? 'AI 处理中'
})
let knowledgeSessionResetPromise = Promise.resolve()
const canDeleteCurrentSession = computed(
() => Boolean(conversationId.value) || messages.value.some((item) => item.role === 'user')
)
@@ -2190,6 +2189,27 @@ export default {
return buildEmptySessionState(targetSessionType)
}
function resetKnowledgeSessionSnapshot() {
const emptyKnowledgeState = buildEmptySessionState(SESSION_TYPE_KNOWLEDGE)
sessionSnapshots.value[SESSION_TYPE_KNOWLEDGE] = emptyKnowledgeState
if (activeSessionType.value === SESSION_TYPE_KNOWLEDGE) {
applySessionState(emptyKnowledgeState)
}
}
function clearKnowledgeSessionOnEntry() {
resetKnowledgeSessionSnapshot()
knowledgeSessionResetPromise = clearUserConversations(resolveCurrentUserId(), SESSION_TYPE_KNOWLEDGE)
.catch((error) => {
console.warn('Failed to clear knowledge session on entry:', error)
})
.finally(() => {
resetKnowledgeSessionSnapshot()
})
return knowledgeSessionResetPromise
}
async function switchSessionType(targetSessionType) {
const normalizedTarget = String(targetSessionType || '').trim() || SESSION_TYPE_EXPENSE
if (normalizedTarget === activeSessionType.value || sessionSwitchBusy.value) {
@@ -2257,6 +2277,7 @@ export default {
)
onMounted(() => {
void clearKnowledgeSessionOnEntry()
currentInsight.value = currentInsight.value || buildWelcomeInsight(props.entrySource, linkedRequest.value, activeSessionType.value)
if (props.initialPrompt?.trim() || props.initialFiles.length) {
const initialMerge = mergeFilesWithLimit([], Array.from(props.initialFiles), MAX_ATTACHMENTS)
@@ -2585,15 +2606,6 @@ export default {
}
function requestCloseWorkbench() {
if (submitting.value || reviewActionBusy.value || deleteSessionBusy.value || leaveKnowledgeBusy.value || sessionSwitchBusy.value) {
return
}
if (isKnowledgeSession.value) {
leaveKnowledgeDialogOpen.value = true
return
}
emit('close')
}
@@ -2663,31 +2675,6 @@ export default {
}
}
function closeLeaveKnowledgeDialog() {
if (leaveKnowledgeBusy.value) {
return
}
leaveKnowledgeDialogOpen.value = false
}
async function confirmLeaveKnowledgeSession() {
if (leaveKnowledgeBusy.value || sessionSwitchBusy.value) {
return
}
leaveKnowledgeBusy.value = true
try {
await clearUserConversations(resolveCurrentUserId(), SESSION_TYPE_KNOWLEDGE)
sessionSnapshots.value[SESSION_TYPE_KNOWLEDGE] = buildEmptySessionState(SESSION_TYPE_KNOWLEDGE)
leaveKnowledgeDialogOpen.value = false
emit('close')
} catch (error) {
toast(error?.message || '清理知识问答会话失败,请稍后重试。')
} finally {
leaveKnowledgeBusy.value = false
}
}
async function saveInlineReviewChanges() {
if (!activeReviewPayload.value || !reviewHasUnsavedChanges.value || reviewActionBusy.value) return
@@ -3092,10 +3079,8 @@ export default {
reviewCancelDialogOpen,
reviewEditDialogOpen,
deleteSessionDialogOpen,
leaveKnowledgeDialogOpen,
reviewActionBusy,
deleteSessionBusy,
leaveKnowledgeBusy,
reviewEditFields,
documentPreviewDialog,
shortcuts,
@@ -3144,8 +3129,6 @@ export default {
openDeleteSessionDialog,
closeDeleteSessionDialog,
confirmDeleteCurrentSession,
closeLeaveKnowledgeDialog,
confirmLeaveKnowledgeSession,
openInlineReviewEditor,
closeInlineReviewEditor,
commitInlineReviewEditor,