|
|
@@ -8,7 +8,13 @@
|
|
|
<div class="my-work" >
|
|
|
<div class="my-work-slider">
|
|
|
<el-button class="back" color="#4A90C4" style="color: #FFFFFF;" @click="handleBack" :disabled="isExamMode">返回</el-button>
|
|
|
- <AIChatter :dialogueId="dataForm.dialogueId" :messages="dataForm.messages" :is-teacher="false" />
|
|
|
+ <AIChatter
|
|
|
+ :dialogue-id="dataForm.dialogueId"
|
|
|
+ :messages="dataForm.messages"
|
|
|
+ :is-teacher="false"
|
|
|
+ :assignment-id="assignmentId"
|
|
|
+ :user-id="store.user.id"
|
|
|
+ />
|
|
|
<Dictionaries />
|
|
|
</div>
|
|
|
<div
|
|
|
@@ -251,29 +257,35 @@
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- async function fetchData(){
|
|
|
- await apis.getAIDialogues(assignmentId, store.user.id)
|
|
|
- .then((_res:any) => {
|
|
|
- const data = _res.data.data
|
|
|
- Object.assign(dataForm, {
|
|
|
- dialogueId: data == null ? '': data?.dialogueId,
|
|
|
- messages: data == null ? []: data?.messages.content,
|
|
|
- engagement: dataForm.engagement
|
|
|
- })
|
|
|
-
|
|
|
- })
|
|
|
+ async function fetchData() {
|
|
|
+ // 与串行相比,总耗时任取 max 而非 sum,减轻超时概率
|
|
|
+ const [aiResult, enResult] = await Promise.allSettled([
|
|
|
+ apis.getAIDialogues(assignmentId, store.user.id),
|
|
|
+ apis.getEngagement(store.user.id, assignmentId)
|
|
|
+ ])
|
|
|
+
|
|
|
+ if (aiResult.status === 'fulfilled') {
|
|
|
+ const data = (aiResult.value as { data: { data: any } })?.data?.data
|
|
|
+ Object.assign(dataForm, {
|
|
|
+ dialogueId: data == null ? '' : data?.dialogueId,
|
|
|
+ messages: data == null ? [] : data?.messages?.content,
|
|
|
+ engagement: dataForm.engagement
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ console.log('getAIDialogues 失败', aiResult.reason)
|
|
|
+ }
|
|
|
|
|
|
- await apis.getEngagement(store.user.id, assignmentId)
|
|
|
- .then((_res:any) => {
|
|
|
- console.log(_res)
|
|
|
- Object.assign(dataForm, {
|
|
|
- dialogueId: dataForm.dialogueId,
|
|
|
- messages: dataForm.messages,
|
|
|
- engagement: _res.data.data
|
|
|
- })
|
|
|
- }).catch((_err:any) => {
|
|
|
- console.log("错误", _err)
|
|
|
- })
|
|
|
+ if (enResult.status === 'fulfilled') {
|
|
|
+ const _res = (enResult as PromiseFulfilledResult<{ data: { data: engagementVO } }>).value
|
|
|
+ console.log(_res)
|
|
|
+ Object.assign(dataForm, {
|
|
|
+ dialogueId: dataForm.dialogueId,
|
|
|
+ messages: dataForm.messages,
|
|
|
+ engagement: _res.data.data
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ console.log('getEngagement 错误', (enResult as PromiseRejectedResult).reason)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
emitter.on('exam-submitted', () => {
|
|
|
@@ -282,8 +294,12 @@
|
|
|
})
|
|
|
|
|
|
onMounted(async () => {
|
|
|
- await fetchAssignmentData();
|
|
|
- await Promise.all([fetchData(), fetchExamTime()]);
|
|
|
+ // 首屏三路与 fetchData 内两路均并行,避免墙钟时间累加
|
|
|
+ await Promise.all([
|
|
|
+ fetchAssignmentData(),
|
|
|
+ fetchData(),
|
|
|
+ fetchExamTime()
|
|
|
+ ])
|
|
|
|
|
|
if (isExamMode.value && dataForm.engagement.submitted) {
|
|
|
ElMessage.warning('您已完成交卷,无法再次编辑');
|