finai/frontend/src/composables/useDocuments.js

72 lines
2.2 KiB
JavaScript

import { ref } from 'vue'
import { useAppStore } from '@/stores/app'
import { request, apiUrl, authHeaders } from '@/api/client'
const documents = ref([])
const loading = ref(false)
const error = ref('')
export function useDocuments() {
const store = useAppStore()
async function loadDocuments({ cateBizId = '' } = {}) {
if (!store.token) {
documents.value = []
return
}
loading.value = true
error.value = ''
try {
const params = new URLSearchParams({ page: '1', page_size: '100' })
if (cateBizId) params.set('cate_biz_id', cateBizId)
const result = await request(`/api/documents/adp?${params.toString()}`)
documents.value = result.list || []
} catch (err) {
error.value = err.message
documents.value = []
} finally {
loading.value = false
}
}
async function uploadDocument({ file, tags, secrecyLevel, ownerDept = '财务部' }) {
if (!file) throw new Error('请先选择或拖拽一个文件')
const formData = new FormData()
formData.append('file', file)
formData.append('tags', (tags || []).join(','))
formData.append('secrecy_level', secrecyLevel)
formData.append('owner_dept', ownerDept)
const response = await fetch(apiUrl('/api/documents/upload'), {
method: 'POST',
headers: authHeaders(),
body: formData,
})
if (!response.ok) {
throw new Error(await response.text())
}
return response.json().catch(() => null)
}
async function uploadToAdp({ file }) {
if (!file) throw new Error('请先选择或拖拽一个文件')
const formData = new FormData()
formData.append('file', file)
const response = await fetch(apiUrl('/api/documents/adp/upload'), {
method: 'POST',
headers: authHeaders(),
body: formData,
})
if (!response.ok) {
throw new Error(await response.text())
}
return response.json().catch(() => null)
}
async function deleteAdpDocument(docBizId) {
if (!docBizId) throw new Error('缺少 DocBizId')
return request(`/api/documents/adp/${encodeURIComponent(docBizId)}`, { method: 'DELETE' })
}
return { documents, loading, error, loadDocuments, uploadDocument, uploadToAdp, deleteAdpDocument }
}