import { fileGroupAdd, fileGroupDelete, fileGroupUpdate, fileCateLists, fileDelete, fileList, fileMove, fileRename } from '/@/api/admin/file'; import { usePaging } from './usePaging'; import { ElMessage, ElTree, type CheckboxValueType } from 'element-plus'; import { shallowRef, type Ref } from 'vue'; import { useMessageBox } from '/@/hooks/message'; // 左侧分组的钩子函数 export function useCate(type: number) { const treeRef = shallowRef>(); // 分组列表 const cateLists = ref([]); // 选中的分组id const cateId = ref(''); // 获取分组列表 const getCateLists = async () => { const { data } = await fileCateLists({ type, }); const item: any[] = [ { name: '全部', id: '', }, { name: '未分组', id: -1, }, ]; cateLists.value = data; cateLists.value?.unshift(...item); setTimeout(() => { treeRef.value?.setCurrentKey(cateId.value); }, 0); }; // 添加分组 const handleAddCate = async (value: string) => { await fileGroupAdd({ type, name: value, pid: -1, }); getCateLists(); }; // 编辑分组 const handleEditCate = async (value: string, id: number) => { await fileGroupUpdate({ id, name: value, }); getCateLists(); }; // 删除分组 const handleDeleteCate = async (id: number) => { try { await useMessageBox().confirm('确定要删除?'); } catch (error) { return; } await fileGroupDelete({ id }); cateId.value = ''; getCateLists(); }; //选中分类 const handleCatSelect = (item: any) => { cateId.value = item.id; }; return { treeRef, cateId, cateLists, handleAddCate, handleEditCate, handleDeleteCate, getCateLists, handleCatSelect, }; } // 处理文件的钩子函数 export function useFile(cateId: Ref, type: Ref, limit: Ref, size: number) { const tableRef = shallowRef(); const listShowType = ref('normal'); const moveId = ref(-1); const select = ref([]); const isCheckAll = ref(false); const isIndeterminate = ref(false); const fileParams = reactive({ original: '', type: type, groupId: cateId, }); const { pager, getLists, resetPage } = usePaging({ fetchFun: fileList, params: fileParams, firstLoading: true, size, }); const getFileList = () => { getLists(); }; const refresh = () => { resetPage(); }; const isSelect = (id: number) => { return !!select.value.find((item: any) => item.id == id); }; const batchFileDelete = async (id?: number[]) => { try { await useMessageBox().confirm('确认删除后本地将同步删除,如文件已被使用,请谨慎操作!'); } catch { return; } const ids = id ? id : select.value.map((item: any) => item.id); await fileDelete({ ids }); getFileList(); clearSelect(); }; const batchFileMove = async () => { const ids = select.value.map((item: any) => item.id); await fileMove({ ids, groupId: moveId.value }); moveId.value = -1; getFileList(); clearSelect(); }; const selectFile = (item: any) => { const index = select.value.findIndex((items: any) => items.id == item.id); if (index != -1) { select.value.splice(index, 1); return; } if (select.value.length == limit.value) { if (limit.value == 1) { select.value = []; select.value.push(item); return; } ElMessage.warning('已达到选择上限'); return; } select.value.push(item); }; const clearSelect = () => { select.value = []; }; const cancelSelete = (id: number) => { select.value = select.value.filter((item: any) => item.id != id); }; const selectAll = (value: CheckboxValueType) => { isIndeterminate.value = false; tableRef.value?.toggleAllSelection(); if (value) { select.value = [...pager.lists]; return; } clearSelect(); }; const handleFileRename = async (value: string, id: number) => { await fileRename({ id, original: value, }); getFileList(); }; return { listShowType, tableRef, moveId, pager, fileParams, select, isCheckAll, isIndeterminate, getFileList, refresh, batchFileDelete, batchFileMove, selectFile, isSelect, clearSelect, cancelSelete, selectAll, handleFileRename, }; }