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/library.ts' export const useLibraryStore = defineStore('library', { state: () => ({ selectedSubject: '', selectedModule: '', subjectTree: [] as ITreeNode[], fileList: [] as ILibraryFile[], currentFile: {} as ILibraryFile, fileDetailDialogVisible: false, fileDialogVisible: false, hasGenerateQuestion: false, fileApiType: 'ADD' as IHandleApi, subjectOptions: [] as IOptions[], moduleOptions: [] as IOptions[] }), actions: { async queryFileList() { this.fileList = [] this.fileList = await queryLibraryFileListApi() this.subjectTree = getSubjectTree(this.fileList) this.subjectOptions = getSubjectOptions(this.subjectTree) this.selectedSubject = this.subjectOptions[0].label this.moduleOptions = getModuleOptions(this.subjectTree, this.selectedSubject) this.selectedModule = this.moduleOptions[0].label }, async queryFileByList(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: '', questions: [] } } } })