72 lines
2.2 KiB
JavaScript
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 }
|
|
}
|