diff --git a/frontend/vben/mock/page/filelist.ts b/frontend/vben/mock/page/filelist.ts index 24973b9..4138675 100644 --- a/frontend/vben/mock/page/filelist.ts +++ b/frontend/vben/mock/page/filelist.ts @@ -1,4 +1,3 @@ -import { randomInt } from 'crypto' import { MockMethod } from 'vite-plugin-mock' import { resultError, resultSuccess, getRequestToken, requestParams } from '../_util' @@ -16,7 +15,7 @@ function createFileList() { questions: 10, author: '课程组长', datetime: '2020-11-26 17:39', - percent: randomInt(0, 100) + 1, + percent: 0, }) } return lst diff --git a/frontend/vben/src/views/page/filelist/data.tsx b/frontend/vben/src/views/page/filelist/data.tsx index 250a232..71b2fcb 100644 --- a/frontend/vben/src/views/page/filelist/data.tsx +++ b/frontend/vben/src/views/page/filelist/data.tsx @@ -4,7 +4,7 @@ import { getFileListModel } from '/@/api/page/model/fileListModel' const random = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1) + min) -function refreshFilePercent(arr: any[], i: number) { +export function refreshFilePercent(arr: any[], i: number) { return async () => { const p = await getFilePercent(arr[i].id) arr[i].percent = p.percent @@ -47,6 +47,7 @@ async function refreshFileList() { author: lst[i].author, percent: lst[i].percent, hassettimeout: false, + delloading: false, }) __totalSize += lst[i].size __totalQuestions += lst[i].questions diff --git a/frontend/vben/src/views/page/filelist/index.vue b/frontend/vben/src/views/page/filelist/index.vue index 3df8860..bd38f3e 100644 --- a/frontend/vben/src/views/page/filelist/index.vue +++ b/frontend/vben/src/views/page/filelist/index.vue @@ -55,7 +55,8 @@ color="error" v-if="hasPermission([RoleEnum.SUPER])" :disabled="item.percent > 0 && item.percent < 100" - @click="deleteFileBy(item.id)" + :loading="item.delloading" + @click="deleteFile(item)" > 删除 @@ -102,16 +103,27 @@ import { uploadApi } from '/@/api/sys/upload' import { useI18n } from '/@/hooks/web/useI18n' import { delFile } from '/@/api/page' - import { DelFile } from '/@/api/page/model/fileListModel' const { t } = useI18n() const { createMessage } = useMessage() - function deleteFileBy(id: number) { - delFile(id).then((value: DelFile) => { - createMessage.info(value.msg) - deleteFileByID(id) - }) + async function deleteFile(item: any) { + try { + item.delloading = true + const msg = await delFile(item.id) + if (msg) { + createMessage.success(msg.msg) + setTimeout(() => { + deleteFileByID(item.id) + }, 1000) + } + } catch (error) { + createMessage.error((error as unknown as Error).message) + } finally { + setTimeout(() => { + item.delloading = false + }, 500) + } } export default defineComponent({ @@ -139,7 +151,7 @@ hasPermission, prefixCls: 'list-basic', getListOfPage, - deleteFileBy, + deleteFile, cardList, pagination, }