From 61a7412fc1344ba3fd29e4bc1052cc05b3c0502e Mon Sep 17 00:00:00 2001 From: rjl <98n9@163.com> Date: Tue, 10 Feb 2026 08:45:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E9=87=8D=E6=9E=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E7=AB=9E=E8=B5=9B=E6=B5=81=E7=A8=8B=EF=BC=8C?= =?UTF-8?q?=E9=9B=86=E6=88=90=E5=90=8E=E7=AB=AFAPI=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BA=A4=E4=BA=92=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 `activityinfo` store 管理活动信息,支持持久化 - 重构 `competition` store,分离数据层与流程控制,新增音效管理 - 新增游戏API模块 (`game.ts`),实现抽题、题目详情、提交结果等接口 - 用户端页面全面对接后端数据:首页轮播展示活动列表,组别/队伍页动态加载,封面页显示题目卡片 - 抽题页改为竹签翻转动画,游戏页集成题目详情与倒计时 - 优化布局组件,支持点击返回首页,统一路由参数传递 - 更新类型定义,支持富文本题目渲染 - 添加 `activityinfo` 拼写检查词条 --- .vscode/settings.json | 5 +- .../src/assets/imgs/user/cover-bg-active.svg | 70 +----- .../custom/user/CompetitionLayout.vue | 14 +- apps/admin/src/service/api/competition.ts | 2 +- apps/admin/src/service/api/game.ts | 50 +++++ .../src/store/modules/activityinfo/index.ts | 47 ++++ apps/admin/src/store/modules/competition.ts | 129 ----------- .../src/store/modules/competition/index.ts | 132 +++++++++++ apps/admin/src/typings/api/Competition.d.ts | 20 ++ apps/admin/src/typings/app.d.ts | 2 +- apps/admin/src/typings/components.d.ts | 2 + apps/admin/src/views/user/analysis/index.vue | 13 +- apps/admin/src/views/user/cover/index.vue | 92 ++++++-- apps/admin/src/views/user/draw/index.vue | 209 ++++++++++++++++-- apps/admin/src/views/user/game/index.vue | 145 +++++++++--- apps/admin/src/views/user/groups/index.vue | 51 +++-- apps/admin/src/views/user/home/index.vue | 163 ++++++++++---- .../src/views/user/modules/CoverComp.vue | 81 ------- .../admin/src/views/user/modules/GameComp.vue | 148 ------------- .../src/views/user/modules/IntroComp.vue | 26 --- .../views/user/modules/QuestionRenderer.vue | 131 +++++++---- apps/admin/src/views/user/rules/index.vue | 25 ++- apps/admin/src/views/user/teams/index.vue | 48 +++- 23 files changed, 962 insertions(+), 643 deletions(-) create mode 100644 apps/admin/src/service/api/game.ts create mode 100644 apps/admin/src/store/modules/activityinfo/index.ts delete mode 100644 apps/admin/src/store/modules/competition.ts create mode 100644 apps/admin/src/store/modules/competition/index.ts delete mode 100644 apps/admin/src/views/user/modules/CoverComp.vue delete mode 100644 apps/admin/src/views/user/modules/GameComp.vue delete mode 100644 apps/admin/src/views/user/modules/IntroComp.vue diff --git a/.vscode/settings.json b/.vscode/settings.json index a274665..8a63266 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -36,5 +36,8 @@ "./apps/user", "./packages/eslint-config" ], - "totvsLanguageServer.welcomePage": false // ` + "totvsLanguageServer.welcomePage": false, + "cSpell.words": [ + "activityinfo" + ] // ` } diff --git a/apps/admin/src/assets/imgs/user/cover-bg-active.svg b/apps/admin/src/assets/imgs/user/cover-bg-active.svg index 6cac4bb..4567f0c 100644 --- a/apps/admin/src/assets/imgs/user/cover-bg-active.svg +++ b/apps/admin/src/assets/imgs/user/cover-bg-active.svg @@ -1,69 +1 @@ - + \ No newline at end of file diff --git a/apps/admin/src/components/custom/user/CompetitionLayout.vue b/apps/admin/src/components/custom/user/CompetitionLayout.vue index 1f2df3d..3f4d1c5 100644 --- a/apps/admin/src/components/custom/user/CompetitionLayout.vue +++ b/apps/admin/src/components/custom/user/CompetitionLayout.vue @@ -2,6 +2,7 @@ import VScaleScreen from 'v-scale-screen' import { onMounted, ref } from 'vue' import _defaultBg from '@/assets/imgs/user/home-bg.svg' +import { useRouterPush } from '@/hooks/common/router' interface Props { /** 是否显示返回按钮 */ @@ -44,6 +45,8 @@ const emit = defineEmits<{ (e: 'next'): void }>() +const { routerPushByKey } = useRouterPush() + // const router = useRouter() const innerBgUrl = ref(_defaultBg) @@ -66,8 +69,6 @@ const showContent = ref(false) function handleBack() { emit('back') - // 如果没有监听 back 事件,默认行为可以是路由返回 - // if (!emit('back')) router.back() // 需要判断是否有监听器比较麻烦,这里建议由父组件控制或提供默认行为 } function handleNext() { @@ -76,6 +77,11 @@ function handleNext() { emit('next') } +/** 点击返回首页 */ +function handleBackHome() { + routerPushByKey('user_home') +} + onMounted(() => { fetchSystemConfig() setTimeout(() => { @@ -93,7 +99,7 @@ onMounted(() => {