feat(web): 票据夹资产缓存接入与 AI 工作台附件流程完善

- ReceiptFolderView 删除票据后提示已关联附件副本保留,接入 useToast;fetchReceiptFolderAsset 加 no-store 避免预览缓存
- PersonalWorkbenchAiMode 附件区/对话气泡适配资产缓存,personal-workbench-ai-mode.css 调整布局
- usePersonalWorkbenchAiMode/useWorkbenchAiApplicationPreviewFlow/useWorkbenchAiAttachmentAssociationFlow/useWorkbenchAiStewardFlow 完善附件草稿选择与关联流程
- travelRequestDetailSmartEntryRecognition 智能识别增强,AppShellRouteView/PersonalWorkbenchView/useApplicationPreviewEditor/useTravelReimbursementSubmitComposer 等配套适配
- 新增 expense-attachment-draft-selection、receipt-folder-asset-cache、travel-request-detail-smart-entry-recognition 测试,更新 attachment-association-confirmation、expense-application-fast-preview、workbench-ai-mode-switch 测试
This commit is contained in:
caoxiaozhu
2026-06-23 09:42:13 +08:00
parent 84a8998e59
commit e725b7f19c
22 changed files with 850 additions and 70 deletions

View File

@@ -542,6 +542,48 @@
letter-spacing: 0;
}
.workbench-ai-file-card__ocr {
max-width: 100%;
display: inline-flex;
align-items: center;
gap: 4px;
color: #2563eb;
font-size: 12px;
font-weight: 800;
line-height: 1.2;
}
.workbench-ai-file-card__ocr i {
flex: 0 0 auto;
font-size: 14px;
line-height: 1;
}
.workbench-ai-file-card__ocr span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.workbench-ai-file-card__ocr.is-recognizing i {
animation: workbenchAiOcrSpin 840ms linear infinite;
}
.workbench-ai-file-card__ocr.is-recognized {
color: #047857;
}
.workbench-ai-file-card__ocr.is-failed {
color: #dc2626;
}
@keyframes workbenchAiOcrSpin {
to {
transform: rotate(360deg);
}
}
.workbench-ai-file-card__remove {
width: 30px;
height: 30px;
@@ -2035,7 +2077,7 @@
}
.application-preview-input {
width: 100%;
width: min(100%, 420px);
min-width: 0;
min-height: 34px;
padding: 0 10px;
@@ -2049,7 +2091,34 @@
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.11);
}
.application-preview-date-input {
width: min(100%, 188px);
color-scheme: light;
}
.application-preview-input--time,
.application-preview-input--time_return {
width: min(100%, 188px);
}
.application-preview-input--location {
width: min(100%, 220px);
}
.application-preview-input--reason {
width: min(100%, 680px);
}
.application-preview-input--days {
width: min(100%, 150px);
}
.application-preview-input--transportMode {
width: min(100%, 240px);
}
.application-preview-select {
width: min(100%, 240px);
cursor: pointer;
}