feat: 重构报销单服务并完善前端提交与审核交互

重构 expense_claims 服务模块结构并优化差旅票据审核逻辑,
增强用户代理服务的票据类型识别,前端报销创建页面拆分为
附件模型和会话模型模块,重构提交编排器和草稿关联确认流
程,更新知识库索引,补充单元测试。
This commit is contained in:
caoxiaozhu
2026-05-22 08:58:59 +08:00
parent f6f787ff38
commit 5fe3b201d9
42 changed files with 13697 additions and 9496 deletions

View File

@@ -103,15 +103,15 @@ export function useTravelReimbursementReviewDrawer({
const isReviewFlowDrawer = computed(() => reviewDrawerMode.value === REVIEW_DRAWER_MODE_FLOW)
const reviewDrawerTitle = computed(() => (
isReviewDocumentDrawer.value
? '绁ㄦ嵁璇嗗埆缁撴灉'
? '票据识别结果'
: isReviewRiskDrawer.value
? '椋庨櫓鎻愮ず'
? '风险提示'
: isReviewFlowDrawer.value
? '璋冪敤娴佺▼'
: '鎶ラ攢璇嗗埆鏍稿'
? '执行流程'
: '报销识别核对'
))
const reviewDocumentDrawerLabel = computed(() => (
'鍗曟嵁璇嗗埆'
'单据识别'
))
const reviewDocumentDrawerIcon = computed(() => (
isReviewDocumentDrawer.value
@@ -119,7 +119,7 @@ export function useTravelReimbursementReviewDrawer({
: 'mdi mdi-file-document-multiple-outline'
))
const reviewRiskDrawerLabel = computed(() => (
'鏄剧ず椋庨櫓'
'显示风险'
))
const reviewRiskDrawerIcon = computed(() => (
isReviewRiskDrawer.value
@@ -127,7 +127,7 @@ export function useTravelReimbursementReviewDrawer({
: 'mdi mdi-shield-alert-outline'
))
const reviewFlowDrawerLabel = computed(() => (
'璋冪敤娴佺▼'
'执行流程'
))
const reviewFlowDrawerIcon = computed(() => (
isReviewFlowDrawer.value
@@ -253,7 +253,7 @@ export function useTravelReimbursementReviewDrawer({
) {
nextForm.reason_value = String(reviewInlineForm.value.reason_value || '').trim()
if (!nextForm.reason_value) {
setInlineReviewFieldError('scene', '璇烽€夋嫨鈥滃叾浠栧満鏅€濆悗锛岃琛ュ厖鍏蜂綋浜嬬敱')
setInlineReviewFieldError('scene', '请选择“其他场景”后,请补充具体事由')
reviewInlineForm.value = nextForm
return false
}
@@ -262,14 +262,14 @@ export function useTravelReimbursementReviewDrawer({
}
if (activeEditorKey === 'occurred_date' && nextForm.occurred_date && !isValidIsoDateString(nextForm.occurred_date)) {
setInlineReviewFieldError('occurred_date', `璇疯緭鍏ユ纭殑鏃堕棿鏍煎紡锛?{DATE_INPUT_FORMAT}`)
setInlineReviewFieldError('occurred_date', `请输入正确的时间格式:${DATE_INPUT_FORMAT}`)
return false
}
if (activeEditorKey === 'amount' && nextForm.amount) {
const normalizedAmount = normalizeAmountValue(nextForm.amount)
if (!normalizedAmount) {
setInlineReviewFieldError('amount', '璇疯緭鍏ユ纭殑鏁板瓧閲戦锛屼緥濡?200 鎴?200.50')
setInlineReviewFieldError('amount', '请输入正确的数字金额,例如 200 200.50')
return false
}
nextForm.amount = normalizedAmount