Files
X-Financial/web/src/composables/workbenchAiMode/useWorkbenchAiComposerFiles.js
2026-06-22 11:58:53 +08:00

56 lines
1.4 KiB
JavaScript

import {
buildFileIdentity,
MAX_ATTACHMENTS,
mergeFilesWithLimit
} from '../../views/scripts/travelReimbursementAttachmentModel.js'
export function useWorkbenchAiComposerFiles({
fileInputRef,
focusAiModeInput,
isInputLocked,
selectedFiles,
toast
}) {
function triggerAiModeFileUpload() {
if (isInputLocked()) {
toast('请等待费用测算完成后再继续操作。')
return
}
fileInputRef.value?.click()
}
function handleAiModeFilesChange(event) {
const fileMergeResult = mergeFilesWithLimit(selectedFiles.value, Array.from(event.target.files || []), MAX_ATTACHMENTS)
selectedFiles.value = fileMergeResult.files
if (fileMergeResult.overflowCount > 0) {
toast(`一次最多上传 ${MAX_ATTACHMENTS} 份附件,已保留前 ${MAX_ATTACHMENTS} 份。`)
}
if (fileInputRef.value) {
fileInputRef.value.value = ''
}
focusAiModeInput()
}
function removeAiModeFile(fileKey) {
selectedFiles.value = selectedFiles.value.filter((file) => buildFileIdentity(file) !== fileKey)
if (!selectedFiles.value.length && fileInputRef.value) {
fileInputRef.value.value = ''
}
focusAiModeInput()
}
function clearAiModeFiles() {
selectedFiles.value = []
if (fileInputRef.value) {
fileInputRef.value.value = ''
}
}
return {
clearAiModeFiles,
handleAiModeFilesChange,
removeAiModeFile,
triggerAiModeFileUpload
}
}