Deploy / deploy (push) Successful in 49s
- 她从不主动开口,点一下才冒气泡;比赛里不弹。台词 326 句(shared/mascot/lines.ts), 口吻照「小鲸鱼」角色卡,学校里舍掉英文、粗口,「用户」改叫「同学」 - 按情况换话:题目页分没写、没交、例子没对上/对上、答错、编译错误、运行出错、超时、 错很多次、做对、一次就对、终于对了、以前做过;首页、题目列表、提交、专题、自学、排名等各有一组 - 按钮真的去办:运行例子、我错在哪(切到结果里出错的那一段)、举手、输题号、随便来一道、 下一道、选题…… - 老师也看得到:有学生举手时任何页面先说这件事;首页、课堂任务、统计、题目页各有一组 - 页面用 useMascotGuide 告诉她现在的情况(shared/mascot/guide.ts),以后按学生行为调整也接在这一层 - 修:连点时像卡住了(快点时按压过渡来不及显示,改成每下播一遍压扁回弹); 一打开从左上角飞到右下角;去掉单击的摆动 设计稿与台词表:https://claude.ai/artifact/Qz2zPCfq2zCrqmxyms1UGx Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
1.6 KiB
Vue
44 lines
1.6 KiB
Vue
<script setup lang="ts">
|
|
import { getSubmission } from 'oj/api'
|
|
import { useMascotGuide } from 'shared/mascot/guide'
|
|
import { useUserStore } from 'shared/store/user'
|
|
import type { Submission } from 'utils/types'
|
|
import SubmissionView from './components/SubmissionView.vue'
|
|
|
|
/** 单独打开的一条提交,主体在 SubmissionView(课堂任务「讲错误」的弹层也用它) */
|
|
const props = defineProps<{ submissionID: string }>()
|
|
|
|
const router = useRouter()
|
|
const userStore = useUserStore()
|
|
|
|
/**
|
|
* 看板娘:学生看自己的提交时带回这道题。SubmissionView 里的数据拿不出来(弹层也用它,不挂看板娘),
|
|
* 这里另取一份不带「这道题交的几次」的,只给学生取
|
|
*/
|
|
const mine = ref<Submission | null>(null)
|
|
watch(
|
|
() => [props.submissionID, userStore.isAuthed && !userStore.isTeacherOrAbove] as const,
|
|
async ([id, student]) => {
|
|
mine.value = null
|
|
if (!student) return
|
|
const res = await getSubmission(id).catch(() => null)
|
|
if (res && id === props.submissionID && res.userId === userStore.user?.id) mine.value = res
|
|
},
|
|
{ immediate: true },
|
|
)
|
|
|
|
useMascotGuide(() => {
|
|
const s = mine.value
|
|
if (!s || userStore.isTeacherOrAbove) return null
|
|
// 和页面上题目那个链接同一个去处:比赛里交的回比赛里的题
|
|
const to = s.contestId
|
|
? { name: 'contest problem', params: { contestID: String(s.contestId), problemID: s.problemDisplayId } }
|
|
: '/problem/' + s.problemDisplayId
|
|
return { situation: 'submission.detail', actions: [{ label: '回到这道题', run: () => router.push(to) }] }
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<SubmissionView :id="submissionID" />
|
|
</template>
|