|
|
@@ -64,8 +64,8 @@
|
|
|
<script lang="ts" setup>
|
|
|
import useApis from "@/apis";
|
|
|
import {useRoute} from "vue-router";
|
|
|
-import {onMounted, reactive, computed} from "vue";
|
|
|
-import type {IAssignment} from "@/types/vo";
|
|
|
+import {onMounted, reactive, computed, ref} from "vue";
|
|
|
+import type {IAssignment, engagementVO} from "@/types/vo";
|
|
|
import './homeworkDetail.scss'
|
|
|
import {useStore} from "@/store";
|
|
|
import router from "@/router";
|
|
|
@@ -92,14 +92,32 @@ let data = reactive<IAssignment>({
|
|
|
type:""
|
|
|
})
|
|
|
|
|
|
+// 学生作业参与状态
|
|
|
+const engagementStatus = ref<engagementVO | null>(null)
|
|
|
+
|
|
|
// 计算属性:判断作业是否应该禁用
|
|
|
const isAssignmentDisabled = computed(() => {
|
|
|
const now = new Date()
|
|
|
const startTime = new Date(data.startTime)
|
|
|
const endTime = new Date(data.endTime)
|
|
|
|
|
|
- // 如果当前时间小于开始时间,或者大于结束时间,则禁用
|
|
|
- return now < startTime || now > endTime
|
|
|
+ // 如果当前时间小于开始时间,则禁用
|
|
|
+ if (now < startTime) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果当前时间大于结束时间
|
|
|
+ if (now > endTime) {
|
|
|
+ // 超过截止日期时,只有未完成状态的学生可以点击
|
|
|
+ if (engagementStatus.value) {
|
|
|
+ return engagementStatus.value.status !== 'NOT_SUBMITTED'
|
|
|
+ }
|
|
|
+ // 如果没有参与状态信息,允许点击(首次参与)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ // 在作业时间范围内,不禁用
|
|
|
+ return false
|
|
|
})
|
|
|
|
|
|
// 计算属性:按钮提示文本
|
|
|
@@ -111,6 +129,16 @@ const getButtonTooltip = computed(() => {
|
|
|
if (now < startTime) {
|
|
|
return `作业尚未开始,开始时间:${startTime.toLocaleString()}`
|
|
|
} else if (now > endTime) {
|
|
|
+ if (engagementStatus.value) {
|
|
|
+ const status = engagementStatus.value.status
|
|
|
+ if (status === 'NOT_SUBMITTED') {
|
|
|
+ return '作业已截止,但您可以继续完成作业'
|
|
|
+ } else if (status === 'SUBMITTED') {
|
|
|
+ return '作业已截止且已提交,无法再次编辑'
|
|
|
+ } else if (status === 'CORRECTED') {
|
|
|
+ return '作业已截止且已批改,无法再次编辑'
|
|
|
+ }
|
|
|
+ }
|
|
|
return `作业已截止,截止时间:${endTime.toLocaleString()}`
|
|
|
} else {
|
|
|
return '点击开始作业'
|
|
|
@@ -121,9 +149,13 @@ function handleStart(){
|
|
|
getEngagement()
|
|
|
console.log(data.type)
|
|
|
if(data.type == 'writing' || data.type == '写作'){
|
|
|
- router.push(`/home/assignment/${assignmentId}/edit`)
|
|
|
+ router.push(`/home/assignment/${assignmentId}/edit`).then(() => {
|
|
|
+ window.location.reload()
|
|
|
+ })
|
|
|
} else if(data.type == 'speaking' || data.type == 'AI口语'){
|
|
|
- router.push(`/home/assignment/${assignmentId}/aispeaking`)
|
|
|
+ router.push(`/home/assignment/${assignmentId}/aispeaking`).then(() => {
|
|
|
+ window.location.reload()
|
|
|
+ })
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -136,6 +168,21 @@ function downloadFile(url:string, fileName:string) {
|
|
|
}
|
|
|
|
|
|
|
|
|
+// 获取学生作业参与状态(仅查询,不自动加入)
|
|
|
+async function fetchEngagementStatus() {
|
|
|
+ try {
|
|
|
+ const response = await apis.getEngagement(store.user.id, assignmentId)
|
|
|
+ if (response.data.code === 200 && response.data.data) {
|
|
|
+ engagementStatus.value = response.data.data
|
|
|
+ } else {
|
|
|
+ engagementStatus.value = null
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.log('获取作业参与状态失败:', error)
|
|
|
+ engagementStatus.value = null
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
async function getEngagement(){
|
|
|
apis.getEngagement(store.user.id, assignmentId)
|
|
|
.then((_res:any) => {
|
|
|
@@ -147,6 +194,8 @@ async function getEngagement(){
|
|
|
message: '参加作业成功',
|
|
|
type: 'success',
|
|
|
})
|
|
|
+ // 加入作业后重新获取状态
|
|
|
+ fetchEngagementStatus()
|
|
|
})
|
|
|
.catch((_err:any) => {
|
|
|
console.log("参加做业的错误",_err)
|
|
|
@@ -178,6 +227,7 @@ const handleBack = () => {
|
|
|
|
|
|
onMounted(() => {
|
|
|
fetchData()
|
|
|
+ fetchEngagementStatus()
|
|
|
})
|
|
|
</script>
|
|
|
|