feat:作业模块对接

This commit is contained in:
yuk255 2025-10-14 22:03:55 +08:00
parent 5455490811
commit 412a796ecb
3 changed files with 1670 additions and 477 deletions

View File

@ -1,15 +1,58 @@
// 学员中心相关API接口
import { ApiRequest } from '../request'
import { ApiRequest } from "../request";
// 活动相关API
export class ActivityListApi {
static async getActivityList(): Promise<any> {
return ApiRequest.get('/aiol/aiolActivity/list')
return ApiRequest.get("/aiol/aiolActivity/list");
}
}
// 用户信息相关API
export class UserInfoApi {
static async editUserInfo(data: any): Promise<any> {
return ApiRequest.post("/aiol/aiolUser/edit_profile", data);
}
}
export class UserInfoApi {
static async editUserInfo(data: any): Promise<any> {
return ApiRequest.post('/aiol/aiolUser/edit_profile', data)
// 作业相关API
export class HomeworkApi {
static async getHomeworkList(params: { type: number }): Promise<any> {
try {
return await ApiRequest.get("/aiol/aiolHomework/myHomeworkList", params);
} catch (error) {
console.error("Error fetching homework list:", error);
throw error;
}
}
static async submitHomework(data: any): Promise<any> {
try {
return await ApiRequest.post("/aiol/aiolHomework/submit", data);
} catch (error) {
console.error("Error submitting homework:", error);
throw error;
}
}
}
// 考试相关API
export class ExamApi {
static async getExamList(params: { type: number }): Promise<any> {
try {
return await ApiRequest.get("/aiol/aiolExam/myExamList", params);
} catch (error) {
console.error("Error fetching exam list:", error);
throw error;
}
}
}
// 练习相关API
export class PracticeApi {
static async getExamList(params: { type: number }): Promise<any> {
try {
return await ApiRequest.get("/aiol/aiolExam//myPracticeList", params);
} catch (error) {
console.error("Error fetching practice list:", error);
throw error;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -134,269 +134,7 @@
<!-- 作业内容 -->
<div v-else-if="isHomeworkTab" class="homework-content">
<!-- 作业筛选标签 -->
<div v-if="!showDraftBoxView" class="text-wrapper_1 flex-row">
<span class="text_12" :class="{ active: activeHomeworkTab === 'all' }"
@click="handleHomeworkTabChange('all')">全部作业</span>
<span class="text_13" :class="{ active: activeHomeworkTab === 'pending' }"
@click="handleHomeworkTabChange('pending')">未完成</span>
<span class="text_14" :class="{ active: activeHomeworkTab === 'completed' }"
@click="handleHomeworkTabChange('completed')">已完成</span>
<span class="draftbox" @click="showDraftBox">
<img src="/images/auth/mti.png" alt="">
<span>草稿箱</span>
</span>
</div>
<!-- 分割线 -->
<div v-if="!showDraftBoxView" class="course-divider"></div>
<!-- 面包屑 -->
<!-- <div class="breadcrumb-wrapper flex-row">
<span class="text_15">全部作业</span>
<span class="text_15">></span>
<span class="text_15 homework">作业名称</span>
</div> -->
<!-- 作业详情视图 -->
<div v-if="showDetailView && detailAssignment">
<!-- <div class="detail-header">
<div class="breadcrumb-nav">
<span class="breadcrumb-item" @click="backToAssignmentList">全部作业</span>
<span class="breadcrumb-separator">></span>
<span class="breadcrumb-current">作业名称</span>
</div>
</div> -->
<div class="group_11">
<!-- 头部信息 -->
<div class="box_5">
<div class="image-text_2">
<div class="avatar-line"></div>
<img :src="detailAssignment.teacherAvatar" alt="教师头像" class="image_22" />
<div class="text-group_3">
<span class="text_30">{{ detailAssignment.teacherName }}</span>
<span class="text_31">{{ detailAssignment.assignTime }}</span>
</div>
</div>
<span class="text_32">
<img v-if="detailAssignment.status === '已提交'" src="/images/profile/55.png" alt="">
<span :style="{
color: detailAssignment.status === '未完成' || detailAssignment.status === '待提交' ? '#FF560C' : '#999999',
fontSize: '14px'
}">
{{ detailAssignment.status === '未完成' || detailAssignment.status === '待提交' ? '未完成' :
(detailAssignment.status === '已完成' ? '已完成' : '541人已完成') }}
</span>
</span>
</div>
<!-- 作业内容 -->
<div class="text-group_4">
<div class="course-divider"></div>
<span class="text_33">{{ detailAssignment.title }}</span>
<div class="description-container">
<span class="text_34 description-full-view">
{{ detailAssignment.description }}
</span>
</div>
</div>
<!-- 作业附件区域 -->
<div class="box_6">
<div class="attachment-images">
<img v-for="(_, index) in detailAssignment.attachments.slice(0, 5)" :key="index"
src="/images/traings/traing1.png" :class="['image_' + (24 + index)]" />
</div>
</div>
<div class="files-container">
<div class="file-items">
<img src="/images/auth/file.png" alt="" class="files-icon">
<span>文件名称.PDF</span>
<img src="/images/auth/download.png" alt="" class="files-icon">
</div>
<div class="file-items">
<img src="/images/auth/file.png" alt="" class="files-icon">
<span>文件名称.PDF</span>
<img src="/images/auth/download.png" alt="" class="files-icon">
</div>
</div>
<div class="course-name">这里是课程名称!!! <span>查看详情></span></div>
<!-- 作业按钮区域 -->
<div class="assignment-buttons">
<template v-if="detailAssignment.status === '未完成' || detailAssignment.status === '待提交'">
<div class="text-wrapper_8 submit-button" @click="showUploadFromDetail">
<span class="">上传作业</span>
</div>
</template>
</div>
</div>
</div>
<!-- 草稿箱视图 -->
<div v-if="showDraftBoxView && draftAssignment">
<div class="detail-header">
<div class="breadcrumb-nav">
<span class="breadcrumb-item" @click="backFromDraftBox">全部作业</span>
<span class="breadcrumb-separator">></span>
<span class="breadcrumb-current">草稿箱</span>
</div>
</div>
<div class="group_11">
<!-- 头部信息 -->
<div class="box_5">
<div class="image-text_2">
<div class="avatar-line"></div>
<img :src="draftAssignment.teacherAvatar" alt="教师头像" class="image_22" />
<div class="text-group_3">
<span class="text_30">{{ draftAssignment.teacherName }}</span>
<span class="text_31">{{ draftAssignment.assignTime }}</span>
</div>
</div>
<span class="text_32">
<img v-if="draftAssignment.status === '已提交'" src="/images/profile/55.png" alt="">
<span :style="{
color: draftAssignment.status === '未完成' || draftAssignment.status === '待提交' ? '#FF560C' : '#999999',
fontSize: '14px'
}">
{{ draftAssignment.status === '未完成' || draftAssignment.status === '待提交' ? '未完成' :
(draftAssignment.status === '已完成' ? '已完成' : '541人已完成') }}
</span>
</span>
</div>
<!-- 作业内容 -->
<div class="text-group_4">
<span class="text_33">{{ draftAssignment.title }}</span>
<div class="description-container">
<span class="text_34 description-full-view">
{{ draftAssignment.description }}
</span>
</div>
</div>
<!-- 作业附件区域 -->
<div class="box_6">
<div class="attachment-images">
<img v-for="(_, index) in draftAssignment.attachments.slice(0, 5)" :key="index"
src="/images/traings/traing1.png" :class="['image_' + (24 + index)]" />
</div>
</div>
<div class="files-container">
<div class="file-items">
<img src="/images/auth/file.png" alt="" class="files-icon">
<span>文件名称.PDF</span>
<img src="/images/auth/download.png" alt="" class="files-icon">
</div>
<div class="file-items">
<img src="/images/auth/file.png" alt="" class="files-icon">
<span>文件名称.PDF</span>
<img src="/images/auth/download.png" alt="" class="files-icon">
</div>
</div>
<div class="course-name">这里是课程名称!!! <span>查看详情></span></div>
<!-- 作业按钮区域 -->
<div class="assignment-buttons">
<div class="text-wrapper_8 submit-button" @click="showUploadModal(draftAssignment)">
<span class="text_36">上传作业</span>
</div>
<div class="text-wrapper_8 anew-button" @click="reEditDraft">
<span class="text_36">重新编辑</span>
</div>
</div>
</div>
</div>
<!-- 作业列表 -->
<div v-else-if="!showDetailView && !showDraftBoxView">
<div v-for="assignment in filteredAssignments" :key="assignment.id" class="group_11">
<!-- 作业头部信息 -->
<div class="box_5">
<div class="image-text_2">
<div class="avatar-line"></div>
<img src="/images/traings/traing1.png" class="image_22" />
<div class="text-group_3">
<span class="text_30">{{ assignment.teacherName }}</span>
<span class="text_31">{{ assignment.assignTime }}</span>
</div>
</div>
<span class="text_32">
<span :style="{
color: assignment.status === '未完成' || assignment.status === '待提交' ? '#FF560C' : '#999999',
fontSize: '14px'
}">
{{ assignment.status === '未完成' || assignment.status === '待提交' ? '未完成' : '已完成' }}
</span>
</span>
</div>
<!-- 作业内容 -->
<div class="text-group_4">
<!-- 分割线 -->
<div class="course-divider"></div>
<span class="text_33">{{ assignment.title }}</span>
<div class="description-container">
<span class="text_34 text-truncated">
{{ assignment.description }}
</span>
</div>
</div>
<!-- 作业附件区域 -->
<div class="box_6">
<!-- 附件图片列表 -->
<div class="attachment-images">
<img v-for="(_, index) in assignment.attachments.slice(0, 5)" :key="index"
src="/images/traings/traing1.png" :class="['image_' + (24 + index)]" />
</div>
<div class="attachment-images attachment-number-container">
<img src="/images/profile/55.png" alt="" class="attachment-number-icon">
<span class="attachment-number-text">541人已完成</span>
</div>
</div>
<!-- 作业按钮区域 -->
<div class="assignment-buttons">
<!-- 未完成状态显示两个按钮 -->
<template v-if="assignment.status === '未完成' || assignment.status === '待提交'">
<div class="text-wrapper_8 view-button" @click="showUploadModal(assignment)">
<span class="text_36 text-view">上传作业</span>
</div>
<!-- 查看详细 -->
<div class="text-wrapper_8 details-button" @click="viewAssignmentDetail(assignment)">
<span class="text_36">查看详情</span>
</div>
</template>
<!-- 已完成状态只显示一个按钮 -->
<template v-else>
<div class="text-wrapper_8 details-button" @click="viewAssignmentDetail(assignment)">
<span class="text_36">查看详情</span>
</div>
</template>
</div>
</div>
</div>
</div>
<HomeworkContent v-else-if="isHomeworkTab"></HomeworkContent>
<!-- 考试内容 -->
<div v-else-if="isExamTab" class="exam-content">
@ -849,58 +587,15 @@
</div>
</div>
</div>
<!-- 上传作业弹窗 -->
<div v-if="showModal" class="custom-modal-overlay" @click="closeUploadModal">
<div class="custom-modal" @click.stop>
<div v-if="currentAssignment" class="modal-content">
<n-form>
<div class="form-item">
<label class="form-label">标题名称 <span class="required">*</span></label>
<input v-model="uploadForm.title" type="text" class="form-input" placeholder="" />
</div>
<n-form-item label="编辑内容" required>
<QuillEditor v-model="uploadForm.content" placeholder="请输入内容" height="400px" />
</n-form-item>
<!-- <n-form-item label="上传文件" required>
<n-upload multiple directory-dnd :custom-request="customRequest" :default-upload="false">
<n-button>选择文件</n-button>
</n-upload>
<div class="file-list" v-if="uploadForm.files.length > 0">
<div v-for="(file, index) in uploadForm.files" :key="index" class="file-item">
<div class="file-icon">
<img src="/images/auth/file.png" alt="文件图标" />
</div>
<div class="file-info">
<div class="file-name">{{ file.name }}</div>
<div class="file-size">{{ (file.size / 1024).toFixed(2) }}KB</div>
</div>
<button class="file-delete" @click="removeFile(index)">🗑</button>
</div>
</div>
</n-form-item> -->
</n-form>
<div class="modal-footer">
<button type="primary" @click="submitAssignment" style="margin-left: 12px;">确认</button>
<button @click="closeUploadModal" class="cancel">取消</button>
</div>
</div>
</div>
</div>
<!-- 考试详情页面 -->
</template>
<script setup lang="ts">
import { ref, computed, onMounted, onActivated, reactive } from 'vue'
import { useMessage, NInput, NForm, NFormItem } from 'naive-ui'
import { useMessage, NInput } from 'naive-ui'
// import { useI18n } from 'vue-i18n'
import { useUserStore } from '@/stores/user'
import SafeAvatar from '@/components/common/SafeAvatar.vue'
import QuillEditor from '@/components/common/QuillEditor.vue'
import InstantMessage from '@/components/InstantMessage.vue'
import { useRouter, useRoute } from 'vue-router'
import { MessageApi, type BackendMessageItem } from '@/api'
@ -909,6 +604,7 @@ import CourseContent from '@/components/profile/CourseContent.vue'
import PracticeContent from '@/components/profile/PracticeContent.vue'
import ActivityContent from '@/components/profile/ActivityContent.vue'
import MaterialsContent from '@/components/profile/MaterialsContent.vue'
import HomeworkContent from '@/components/profile/HomeworkContent.vue'
// const { t, locale } = useI18n()
const router = useRouter()
@ -939,20 +635,20 @@ const route = useRoute()
// }
//
interface Assignment {
id: number
teacherName: string
teacherAvatar: string
assignTime: string
status: string
title: string
description: string
attachments: Array<{
icon: string
name: string
}>
mainImage: string
}
// interface Assignment {
// id: number
// teacherName: string
// teacherAvatar: string
// assignTime: string
// status: string
// title: string
// description: string
// attachments: Array<{
// icon: string
// name: string
// }>
// mainImage: string
// }
//
interface Exam {
@ -1087,7 +783,7 @@ const activeTab = ref<TabType>('courses')
// const activeCourseTab = ref('all')
//
const activeHomeworkTab = ref('all')
// const activeHomeworkTab = ref('all')
//
const activeExamTab = ref('all')
@ -1306,71 +1002,71 @@ const downloadFiles = reactive([
// ]
// UI
const mockAssignments: Assignment[] = [
{
id: 1,
teacherName: '张老师',
teacherAvatar: '/images/traings/traing1.png',
assignTime: '2024-01-15',
status: '待提交',
title: '教育心理学课程设计作业',
description: '请根据所学的教育心理学理论,设计一个完整的课程教学方案,包括教学目标、教学内容、教学方法、教学评价等方面。要求理论联系实际,体现现代教育理念。',
attachments: [
{ icon: '/images/traings/traing1.png', name: '作业要求.pdf' },
{ icon: '/images/traings/traing1.png', name: '参考资料.docx' },
{ icon: '/images/traings/traing1.png', name: '模板文件.pptx' },
{ icon: '/images/traings/traing1.png', name: '评分标准.pdf' },
{ icon: '/images/traings/traing1.png', name: '案例分析.xlsx' }
],
mainImage: '/images/traings/traing1.png'
},
{
id: 2,
teacherName: '李老师',
teacherAvatar: '/images/traings/traing1.png',
assignTime: '2024-01-20',
status: '已完成',
title: '现代教育技术应用实践报告',
description: '结合本学期所学的现代教育技术知识,选择一个具体的教学场景,设计并实施一个融合信息技术的教学活动,撰写实践报告。',
attachments: [
{ icon: '/images/traings/traing1.png', name: '实践指导.pdf' },
{ icon: '/images/traings/traing1.png', name: '报告模板.docx' },
{ icon: '/images/traings/traing1.png', name: '技术工具清单.xlsx' },
{ icon: '/images/traings/traing1.png', name: '评价量表.pdf' },
{ icon: '/images/traings/traing1.png', name: '优秀案例.pptx' }
],
mainImage: '/images/traings/traing1.png'
},
{
id: 3,
teacherName: '王老师',
teacherAvatar: '/images/traings/traing1.png',
assignTime: '2024-01-18',
status: '未完成',
title: '数字化教学资源开发',
description: '开发一套完整的数字化教学资源,包括课件制作、视频录制、在线测试设计等,要求体现现代教育技术的应用特点。',
attachments: [
{ icon: '/images/traings/traing1.png', name: '开发指南.pdf' },
{ icon: '/images/traings/traing1.png', name: '技术要求.docx' },
{ icon: '/images/traings/traing1.png', name: '示例资源.zip' }
],
mainImage: '/images/traings/traing1.png'
},
{
id: 4,
teacherName: '刘老师',
teacherAvatar: '/images/traings/traing1.png',
assignTime: '2024-01-10',
status: '已完成',
title: '在线教育平台使用报告',
description: '体验并分析主流在线教育平台的功能特点,撰写详细的使用报告和改进建议。',
attachments: [
{ icon: '/images/traings/traing1.png', name: '平台列表.pdf' },
{ icon: '/images/traings/traing1.png', name: '评价标准.docx' }
],
mainImage: '/images/traings/traing1.png'
}
]
// const mockAssignments: Assignment[] = [
// {
// id: 1,
// teacherName: '',
// teacherAvatar: '/images/traings/traing1.png',
// assignTime: '2024-01-15',
// status: '',
// title: '',
// description: '',
// attachments: [
// { icon: '/images/traings/traing1.png', name: '.pdf' },
// { icon: '/images/traings/traing1.png', name: '.docx' },
// { icon: '/images/traings/traing1.png', name: '.pptx' },
// { icon: '/images/traings/traing1.png', name: '.pdf' },
// { icon: '/images/traings/traing1.png', name: '.xlsx' }
// ],
// mainImage: '/images/traings/traing1.png'
// },
// {
// id: 2,
// teacherName: '',
// teacherAvatar: '/images/traings/traing1.png',
// assignTime: '2024-01-20',
// status: '',
// title: '',
// description: '',
// attachments: [
// { icon: '/images/traings/traing1.png', name: '.pdf' },
// { icon: '/images/traings/traing1.png', name: '.docx' },
// { icon: '/images/traings/traing1.png', name: '.xlsx' },
// { icon: '/images/traings/traing1.png', name: '.pdf' },
// { icon: '/images/traings/traing1.png', name: '.pptx' }
// ],
// mainImage: '/images/traings/traing1.png'
// },
// {
// id: 3,
// teacherName: '',
// teacherAvatar: '/images/traings/traing1.png',
// assignTime: '2024-01-18',
// status: '',
// title: '',
// description: '线',
// attachments: [
// { icon: '/images/traings/traing1.png', name: '.pdf' },
// { icon: '/images/traings/traing1.png', name: '.docx' },
// { icon: '/images/traings/traing1.png', name: '.zip' }
// ],
// mainImage: '/images/traings/traing1.png'
// },
// {
// id: 4,
// teacherName: '',
// teacherAvatar: '/images/traings/traing1.png',
// assignTime: '2024-01-10',
// status: '',
// title: '线使',
// description: '线使',
// attachments: [
// { icon: '/images/traings/traing1.png', name: '.pdf' },
// { icon: '/images/traings/traing1.png', name: '.docx' }
// ],
// mainImage: '/images/traings/traing1.png'
// }
// ]
//
const mockExams: Exam[] = [
@ -2025,14 +1721,14 @@ const mockFollows = [
// })
//
const filteredAssignments = computed(() => {
if (activeHomeworkTab.value === 'pending') {
return mockAssignments.filter(assignment => assignment.status === '待提交' || assignment.status === '未完成')
} else if (activeHomeworkTab.value === 'completed') {
return mockAssignments.filter(assignment => assignment.status === '已完成' || assignment.status === '已完成')
}
return mockAssignments
})
// const filteredAssignments = computed(() => {
// if (activeHomeworkTab.value === 'pending') {
// return mockAssignments.filter(assignment => assignment.status === '' || assignment.status === '')
// } else if (activeHomeworkTab.value === 'completed') {
// return mockAssignments.filter(assignment => assignment.status === '' || assignment.status === '')
// }
// return mockAssignments
// })
//
const filteredExams = computed(() => {
@ -2148,9 +1844,9 @@ const handleMenuSelect = (key: TabType) => {
// }
//
const handleHomeworkTabChange = (tab: string) => {
activeHomeworkTab.value = tab
}
// const handleHomeworkTabChange = (tab: string) => {
// activeHomeworkTab.value = tab
// }
//
const handleExamTabChange = (tab: string) => {
@ -3088,23 +2784,23 @@ const getTabTitle = (tab: TabType) => {
}
//
const showModal = ref(false)
const currentAssignment = ref<Assignment | null>(null)
const uploadForm = reactive({
title: '',
content: '',
files: [] as File[]
})
// const showModal = ref(false)
// const currentAssignment = ref<Assignment | null>(null)
// const uploadForm = reactive({
// title: '',
// content: '',
// files: [] as File[]
// })
//
const showDetailView = ref(false)
const detailAssignment = ref<Assignment | null>(null)
// const showDetailView = ref(false)
// const detailAssignment = ref<Assignment | null>(null)
// 稿
const showDraftBoxView = ref(false)
const draftAssignment = ref<Assignment | null>(null)
// const showDraftBoxView = ref(false)
// const draftAssignment = ref<Assignment | null>(null)
//
@ -3122,11 +2818,11 @@ const draftAssignment = ref<Assignment | null>(null)
// }
//
const viewAssignmentDetail = (assignment: Assignment) => {
detailAssignment.value = assignment
showDetailView.value = true
showDraftBoxView.value = false
}
// const viewAssignmentDetail = (assignment: Assignment) => {
// detailAssignment.value = assignment
// showDetailView.value = true
// showDraftBoxView.value = false
// }
//
// const backToAssignmentList = () => {
@ -3135,78 +2831,78 @@ const viewAssignmentDetail = (assignment: Assignment) => {
// }
//
const showUploadFromDetail = () => {
showUploadModal(detailAssignment.value!)
}
// const showUploadFromDetail = () => {
// showUploadModal(detailAssignment.value!)
// }
// 稿
const showDraftBox = () => {
// 稿
draftAssignment.value = {
id: 1,
title: '教育心理学课程设计作业',
description: '请根据所学的教育心理学理论,设计一个完整的课程教学方案,包括教学目标、教学内容、教学方法、教学评价等方面。要求理论联系实际,体现现代教育理念。',
teacherName: '张老师',
teacherAvatar: '/images/traings/traing1.png',
assignTime: '2024-01-15',
status: '草稿',
attachments: [
{ icon: '/images/auth/file.png', name: 'file1.pdf' },
{ icon: '/images/auth/file.png', name: 'file2.pdf' }
],
mainImage: '/images/traings/traing1.png'
}
showDraftBoxView.value = true
showDetailView.value = false
}
// const showDraftBox = () => {
// // 稿
// draftAssignment.value = {
// id: 1,
// title: '',
// description: '',
// teacherName: '',
// teacherAvatar: '/images/traings/traing1.png',
// assignTime: '2024-01-15',
// status: '稿',
// attachments: [
// { icon: '/images/auth/file.png', name: 'file1.pdf' },
// { icon: '/images/auth/file.png', name: 'file2.pdf' }
// ],
// mainImage: '/images/traings/traing1.png'
// }
// showDraftBoxView.value = true
// showDetailView.value = false
// }
// 稿
const backFromDraftBox = () => {
showDraftBoxView.value = false
draftAssignment.value = null
}
// const backFromDraftBox = () => {
// showDraftBoxView.value = false
// draftAssignment.value = null
// }
// 稿
const reEditDraft = () => {
showUploadModal(draftAssignment.value!)
}
// const reEditDraft = () => {
// showUploadModal(draftAssignment.value!)
// }
//
const showUploadModal = (assignment: Assignment) => {
currentAssignment.value = assignment
uploadForm.title = ''
uploadForm.content = ''
uploadForm.files = []
showModal.value = true
}
// const showUploadModal = (assignment: Assignment) => {
// currentAssignment.value = assignment
// uploadForm.title = ''
// uploadForm.content = ''
// uploadForm.files = []
// showModal.value = true
// }
//
const closeUploadModal = () => {
showModal.value = false
currentAssignment.value = null
}
// const closeUploadModal = () => {
// showModal.value = false
// currentAssignment.value = null
// }
//
const submitAssignment = () => {
if (!uploadForm.title.trim()) {
message.error('请输入标题')
return
}
// const submitAssignment = () => {
// if (!uploadForm.title.trim()) {
// message.error('')
// return
// }
if (!uploadForm.content.trim()) {
message.error('请输入内容')
return
}
// if (!uploadForm.content.trim()) {
// message.error('')
// return
// }
if (uploadForm.files.length === 0) {
message.error('请上传至少一个文件')
return
}
// if (uploadForm.files.length === 0) {
// message.error('')
// return
// }
//
message.success('作业提交成功')
closeUploadModal()
}
// //
// message.success('')
// closeUploadModal()
// }
const menuItems = ref<any[]>([])
const getMenu = async () => {