Files
study-agent-ui/src/stores/library.ts
2026-08-02 21:01:42 +08:00

88 lines
2.5 KiB
TypeScript

import { defineStore } from 'pinia'
import type { ILibraryFile } from '@/types/library.ts'
import {
addLibraryFileApi,
queryLibraryFileByIdApi,
queryLibraryFileListApi,
updateLibraryFileApi
} from '@/apis/library.ts'
import type { IHandleApi, IOptions, ITreeNode } from '@/types'
import { ElMessage } from 'element-plus'
import { getModuleOptions, getSubjectOptions, getSubjectTree } from '@/utils/libraryUtil.ts'
export const useLibraryStore = defineStore('library', {
state: () => ({
selectedSubject: '' as number | string,
selectedModule: '' as number | string,
subjectTree: [] as ITreeNode[],
fileList: [] as ILibraryFile[],
currentFile: {
id: 0,
subject: '',
module: '',
name: '',
size: 0,
uploadTime: '',
type: '',
content: '',
questions: []
} as ILibraryFile,
fileDetailDialogVisible: false,
fileDialogVisible: false,
fileContentDialogVisible: false,
fileTrainDialogVisible: false,
fileApiType: 'ADD' as IHandleApi,
subjectOptions: [] as IOptions[],
moduleOptions: [] as IOptions[],
activeStep: 1
}),
actions: {
async queryFileList() {
this.fileList = []
this.fileList = await queryLibraryFileListApi()
this.subjectTree = getSubjectTree(this.fileList)
this.subjectOptions = getSubjectOptions(this.subjectTree)
if (this.subjectOptions.length > 0) {
this.selectedSubject = this.subjectOptions[0].value
this.moduleOptions = getModuleOptions(this.subjectTree, this.selectedSubject)
this.selectedModule = this.moduleOptions[0].value
}
},
async queryFileById(id: number) {
this.currentFile = await queryLibraryFileByIdApi(id)
},
async handleFileApi(file: ILibraryFile) {
switch (this.fileApiType) {
case 'ADD':
await addLibraryFileApi(file)
ElMessage.success('新增资料成功')
break
case 'UPDATE':
await updateLibraryFileApi(file.id as number, file)
ElMessage.success('更新资料成功')
break
case 'DELETE':
ElMessage.success('删除资料成功')
break
default:
break
}
this.fileDialogVisible = false
await this.queryFileList()
},
getEmptyFile(): ILibraryFile {
return {
id: 0,
module: '',
name: '',
size: 0,
subject: '',
uploadTime: '',
type: '',
content: ''
}
}
}
})