2026-01-23 18:16:03 +08:00
|
|
|
|
<script setup lang="ts">
|
2026-02-11 17:27:08 +08:00
|
|
|
|
import { computed, watch } from 'vue'
|
|
|
|
|
|
import { QuestionCategoryEnum } from '@/enum/business'
|
|
|
|
|
|
import { useCompetitionStore } from '@/store/modules/competition'
|
2026-01-23 18:16:03 +08:00
|
|
|
|
|
2026-02-11 17:27:08 +08:00
|
|
|
|
const store = useCompetitionStore()
|
|
|
|
|
|
const currentQuestionMainInfo = computed(() => store.currentQuestionMainInfo)
|
|
|
|
|
|
const currentQuestionDetail = computed(() => store.currentQuestionDetail)
|
2026-03-18 16:58:13 +08:00
|
|
|
|
|
2026-02-11 17:27:08 +08:00
|
|
|
|
// 题目
|
|
|
|
|
|
const title = computed(() => currentQuestionMainInfo.value?.QuestionList?.QuestionContent)
|
|
|
|
|
|
// 题目内容
|
|
|
|
|
|
const content = computed(() => currentQuestionDetail.value.Name)
|
2026-03-18 16:58:13 +08:00
|
|
|
|
// 图片
|
|
|
|
|
|
const ImageUrl = computed(() => currentQuestionDetail.value.ImageUrl)
|
2026-02-11 17:27:08 +08:00
|
|
|
|
// 模版类型
|
|
|
|
|
|
const template = computed(() => currentQuestionMainInfo.value?.Activity_Question?.UIType)
|
|
|
|
|
|
|
2026-03-18 16:58:13 +08:00
|
|
|
|
// 汉字听写1:按 # 分割内容
|
|
|
|
|
|
const dictationParts = computed(() => {
|
|
|
|
|
|
if (content.value) {
|
|
|
|
|
|
return content.value.split('#').filter(Boolean)
|
2026-02-11 17:27:08 +08:00
|
|
|
|
}
|
2026-03-18 16:58:13 +08:00
|
|
|
|
return []
|
|
|
|
|
|
})
|
2026-02-11 17:27:08 +08:00
|
|
|
|
|
2026-03-18 16:58:13 +08:00
|
|
|
|
// 联想对对碰:上方词组
|
|
|
|
|
|
const associationWords = computed(() => {
|
|
|
|
|
|
const name = currentQuestionDetail.value?.Name || ''
|
|
|
|
|
|
return name.split(/[,,、]/).filter(Boolean)
|
2026-02-11 17:27:08 +08:00
|
|
|
|
})
|
|
|
|
|
|
|
2026-03-18 16:58:13 +08:00
|
|
|
|
// 联想对对碰:答案按逗号分行,只保留汉字
|
|
|
|
|
|
const answerLines = computed(() => {
|
|
|
|
|
|
const answer = currentQuestionDetail.value?.Answer || ''
|
|
|
|
|
|
return answer.split(/[,,]/)
|
|
|
|
|
|
.map(line => line.split('').filter(char => /[\u4E00-\u9FA5]/.test(char)))
|
|
|
|
|
|
.filter(line => line.length > 0)
|
2026-01-23 18:16:03 +08:00
|
|
|
|
})
|
2026-02-11 17:27:08 +08:00
|
|
|
|
|
2026-03-18 16:58:13 +08:00
|
|
|
|
// 联想对对碰:关键词索引和文字
|
|
|
|
|
|
const keywordInfo = computed(() => ({
|
|
|
|
|
|
index: currentQuestionDetail.value?.KeyWordsIndex ?? -1,
|
|
|
|
|
|
word: currentQuestionDetail.value?.KeyWord || '',
|
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
|
|
// 计算全局字符索引(用于匹配 KeyWordsIndex)
|
|
|
|
|
|
function getGlobalCharIndex(lineIndex: number, charIndex: number) {
|
|
|
|
|
|
let globalIndex = 0
|
|
|
|
|
|
for (let i = 0; i < lineIndex; i++) {
|
|
|
|
|
|
globalIndex += answerLines.value[i].length
|
|
|
|
|
|
}
|
|
|
|
|
|
return globalIndex + charIndex
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-11 17:27:08 +08:00
|
|
|
|
watch(
|
|
|
|
|
|
() => [currentQuestionMainInfo, currentQuestionDetail],
|
|
|
|
|
|
() => {
|
|
|
|
|
|
// eslint-disable-next-line no-console
|
|
|
|
|
|
console.log('Current currentQuestionMainInfo:', currentQuestionMainInfo.value)
|
|
|
|
|
|
// eslint-disable-next-line no-console
|
2026-03-18 16:58:13 +08:00
|
|
|
|
console.log('Current currentQuestionDetail:', currentQuestionDetail.value)
|
2026-02-11 17:27:08 +08:00
|
|
|
|
},
|
|
|
|
|
|
{ deep: true, immediate: true },
|
|
|
|
|
|
)
|
2026-01-23 18:16:03 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<template>
|
2026-02-13 08:34:09 +08:00
|
|
|
|
<div class="w-full flex p-6">
|
2026-03-03 18:10:44 +08:00
|
|
|
|
<!-- <p>template:{{ template }}</p> -->
|
|
|
|
|
|
<!-- 模板A: 汉字听写1-提示 (拼音+提示) -->
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div v-if="template === QuestionCategoryEnum.ChineseCharacterDictation1" class="text-center">
|
2026-02-11 17:27:08 +08:00
|
|
|
|
<div class="mb-6 inline-block text-5xl font-bold leading-none">
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div class="flex items-center justify-center gap-4">
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-for="(part, index) in dictationParts" :key="`part-${index}`"
|
|
|
|
|
|
class="text-4xl"
|
|
|
|
|
|
:class="index === 0 ? 'short-content-bg' : 'content-with-bg'"
|
|
|
|
|
|
>
|
|
|
|
|
|
{{ part }}
|
|
|
|
|
|
</div>
|
2026-02-11 17:27:08 +08:00
|
|
|
|
</div>
|
2026-03-18 16:58:13 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板D: 汉字听写 2 词语听写 -->
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-else-if="template === QuestionCategoryEnum.ChineseCharacterDictation2 || template === QuestionCategoryEnum.WordDictation"
|
|
|
|
|
|
class="flex flex-col items-center"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="mb-1 text-3xl text-gray-800 font-bold leading-relaxed">
|
|
|
|
|
|
<div class="rich-content content-with-bg ml-3 mt-4 flex text-6xl !px-16 !py-10 !tracking-[0.1em]">
|
2026-03-03 18:10:44 +08:00
|
|
|
|
{{ content }}
|
|
|
|
|
|
</div>
|
2026-01-23 18:16:03 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板C: 汉字加一加 (提示+部件) -->
|
2026-02-11 17:27:08 +08:00
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.CharacterRadicalAddition" class="text-center">
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div class="mb-6 inline-block text-5xl font-bold leading-none">
|
|
|
|
|
|
<div class="rich-content ml-3 mt-4 flex gap-1 text-5xl tracking-[0.1em]">
|
|
|
|
|
|
请写出含有“ <span class="text-color-red !text-6xl">{{ content }}</span>”的汉字,书写时间为60秒。
|
|
|
|
|
|
</div>
|
2026-01-23 18:16:03 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<!-- 模板D: 成语写一写1 (拼音+提示) -->
|
|
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.IdiomWriting1" class="flex flex-col items-center">
|
|
|
|
|
|
<div class="mb-1 text-gray-800 font-bold leading-relaxed">
|
|
|
|
|
|
<div class="rich-content ml-3 mt-4 flex gap-1 text-4xl">
|
|
|
|
|
|
{{ content }}
|
|
|
|
|
|
</div>
|
2026-01-23 18:16:03 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板E: 成语-文字要求 -->
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.IdiomWriting2" class="text-center">
|
2026-01-23 18:16:03 +08:00
|
|
|
|
<div class="mb-8 text-4xl text-gray-800 font-bold">
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<NImage :src="ImageUrl" preview-disabled width="300" object-fit="contain" />
|
2026-01-23 18:16:03 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-02-05 18:00:11 +08:00
|
|
|
|
<!-- 模板G: 诗词理解-选择题 (通用选择题模板) -->
|
2026-02-11 17:27:08 +08:00
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.PoetryComprehension" class="w-full flex flex-col items-center">
|
|
|
|
|
|
<div class="mb-1 text-3xl text-gray-800 font-bold leading-relaxed">
|
|
|
|
|
|
<div class="rich-content" v-html="content" />
|
2026-02-05 18:00:11 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-03-16 17:59:49 +08:00
|
|
|
|
<!-- 模板ChangeWords: 换字组成语 -->
|
|
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.ChangeWords" class="w-full flex flex-col items-center">
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div class="content-with-bg mb-1 mt-10 p-6 text-6xl text-gray-800 font-bold !px-16 !py-8">
|
|
|
|
|
|
{{ content }}
|
2026-03-16 17:59:49 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板: 场景猜诗句 -->
|
|
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.SceneBasedPoemGuessing" class="w-full flex flex-col items-center">
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div class="mb-1 p-16 text-3xl text-gray-800 font-bold leading-relaxed line-height-20">
|
2026-03-16 17:59:49 +08:00
|
|
|
|
<div class="rich-content" v-html="content" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板: 联想对对碰 -->
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div
|
|
|
|
|
|
v-else-if="template === QuestionCategoryEnum.AssociationMatching"
|
|
|
|
|
|
class="w-full flex flex-col items-center gap-8"
|
|
|
|
|
|
>
|
|
|
|
|
|
<!-- 上方:词组 -->
|
|
|
|
|
|
<div class="flex flex-wrap justify-center gap-4">
|
|
|
|
|
|
<div v-for="(word, index) in associationWords" :key="`word-${index}`" class="association-word text-bold">
|
|
|
|
|
|
{{ word }}
|
|
|
|
|
|
</div>
|
2026-03-16 17:59:49 +08:00
|
|
|
|
</div>
|
2026-03-18 16:58:13 +08:00
|
|
|
|
|
|
|
|
|
|
<!-- 下方:答案字符(按逗号分行) -->
|
|
|
|
|
|
<div class="flex flex-col items-center gap-3">
|
|
|
|
|
|
<div v-for="(line, lineIndex) in answerLines" :key="`line-${lineIndex}`" class="flex gap-4">
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-for="(char, charIndex) in line" :key="`char-${lineIndex}-${charIndex}`"
|
|
|
|
|
|
class="association-char text-5xl"
|
|
|
|
|
|
>
|
|
|
|
|
|
<span v-if="getGlobalCharIndex(lineIndex, charIndex) === keywordInfo.index">
|
|
|
|
|
|
{{ keywordInfo.word }}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-03-16 17:59:49 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板: 字词飞花令 -->
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div
|
|
|
|
|
|
v-else-if="template === QuestionCategoryEnum.CharacterWordFlowerDrinkingGame"
|
|
|
|
|
|
class="w-full flex flex-col items-center"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="options-container text-5xl">
|
2026-03-17 15:28:11 +08:00
|
|
|
|
请回答带有“{{ content }}”的诗词。
|
2026-03-16 17:59:49 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板: 诗词常识 -->
|
|
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.PoetryCommonKnowledge" class="w-full flex flex-col items-center">
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div class="mb-1 p-16 text-3xl text-gray-800 font-bold leading-relaxed line-height-20">
|
2026-03-16 17:59:49 +08:00
|
|
|
|
<div class="rich-content" v-html="content" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 模板: 逆向接诗句 -->
|
|
|
|
|
|
<div v-else-if="template === QuestionCategoryEnum.ReversePoemMatching" class="w-full flex flex-col items-center">
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div class="mb-1 mt-20 text-5xl text-gray-800 font-bold leading-relaxed">
|
2026-03-16 17:59:49 +08:00
|
|
|
|
<div class="rich-content" v-html="content" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-01-23 18:16:03 +08:00
|
|
|
|
<div v-else class="text-red-500">
|
2026-03-16 17:59:49 +08:00
|
|
|
|
<div class="mb-6 inline-block text-5xl font-bold leading-none">
|
|
|
|
|
|
<div class="ptions-container1 mb-2 text-center text-2xl">
|
|
|
|
|
|
{{ title }}
|
|
|
|
|
|
</div>
|
2026-03-18 16:58:13 +08:00
|
|
|
|
<div class="rich-content ml-3 mt-4 flex gap-1">
|
2026-03-16 17:59:49 +08:00
|
|
|
|
{{ content }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-01-23 18:16:03 +08:00
|
|
|
|
未知的题目模板: {{ template }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
2026-02-05 18:00:11 +08:00
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.options-container {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
gap: 2rem;
|
|
|
|
|
|
margin-bottom: 3rem;
|
|
|
|
|
|
|
|
|
|
|
|
.option-card {
|
2026-02-06 17:45:44 +08:00
|
|
|
|
// width: 320px;
|
|
|
|
|
|
// height: 260px;
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.option-card {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
border: 2px solid transparent;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
border-radius: 0.75rem;
|
|
|
|
|
|
/* rounded-xl */
|
|
|
|
|
|
padding: 1rem;
|
|
|
|
|
|
/* p-4 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
transition: all 0.3s;
|
|
|
|
|
|
|
|
|
|
|
|
&:hover {
|
2026-02-10 08:45:26 +08:00
|
|
|
|
border-color: #f87171;
|
|
|
|
|
|
/* border-red-400 */
|
|
|
|
|
|
background-color: #fef2f2;
|
|
|
|
|
|
/* bg-red-50 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
box-shadow:
|
|
|
|
|
|
0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
2026-02-10 08:45:26 +08:00
|
|
|
|
0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
/* shadow-lg */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
&.is-mixed {
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
&.is-text {
|
|
|
|
|
|
flex-direction: row;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
gap: 1rem;
|
|
|
|
|
|
/* gap-4 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.option-image-wrapper {
|
2026-02-06 17:45:44 +08:00
|
|
|
|
margin-bottom: 0.8rem;
|
|
|
|
|
|
height: 6rem;
|
2026-02-05 18:00:11 +08:00
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
overflow: hidden;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
border-radius: 0.5rem;
|
|
|
|
|
|
/* rounded-lg */
|
|
|
|
|
|
padding: 0.5rem;
|
|
|
|
|
|
/* p-2 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.option-image {
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
object-fit: contain;
|
|
|
|
|
|
transition: transform 0.3s;
|
|
|
|
|
|
|
|
|
|
|
|
.group:hover & {
|
|
|
|
|
|
transform: scale(1.05);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tianzige-wrapper {
|
|
|
|
|
|
position: relative;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
margin-bottom: 0.75rem;
|
|
|
|
|
|
/* mb-3 */
|
|
|
|
|
|
height: 8rem;
|
|
|
|
|
|
/* h-32 */
|
|
|
|
|
|
width: 8rem;
|
|
|
|
|
|
/* w-32 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
user-select: none;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
border: 2px solid #ef4444;
|
|
|
|
|
|
/* border-red-500 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
background-color: white;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tianzige-bg {
|
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
inset: 0;
|
|
|
|
|
|
z-index: 0;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
|
|
|
|
.line-horizontal {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
top: 50%;
|
|
|
|
|
|
height: 1px;
|
|
|
|
|
|
width: 100%;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
border-top: 1px dashed #f87171;
|
|
|
|
|
|
/* border-red-400 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
opacity: 0.6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.line-vertical {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
width: 1px;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
border-left: 1px dashed #f87171;
|
|
|
|
|
|
/* border-red-400 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
opacity: 0.6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.line-diagonal {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
inset: 0;
|
|
|
|
|
|
opacity: 0.6;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tianzige-text {
|
2026-02-10 08:45:26 +08:00
|
|
|
|
font-family: 'KaiTi', 'STKaiti', serif;
|
|
|
|
|
|
/* font-kaaiti */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
z-index: 10;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
font-size: 3.75rem;
|
|
|
|
|
|
/* text-6xl */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
font-weight: 700;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
color: #1f2937;
|
|
|
|
|
|
/* text-gray-800 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.option-content {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
gap: 0.75rem;
|
|
|
|
|
|
/* gap-3 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.option-label {
|
2026-02-10 08:45:26 +08:00
|
|
|
|
height: 2rem;
|
|
|
|
|
|
/* h-8 */
|
|
|
|
|
|
width: 2rem;
|
|
|
|
|
|
/* w-8 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
border-radius: 9999px;
|
|
|
|
|
|
/* rounded-full */
|
|
|
|
|
|
background-color: #fee2e2;
|
|
|
|
|
|
/* bg-red-100 */
|
|
|
|
|
|
color: #dc2626;
|
|
|
|
|
|
/* text-red-600 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
|
|
|
|
|
|
.group:hover & {
|
2026-02-10 08:45:26 +08:00
|
|
|
|
background-color: #ef4444;
|
|
|
|
|
|
/* bg-red-500 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
color: white;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.option-text {
|
2026-02-10 08:45:26 +08:00
|
|
|
|
font-size: 1.25rem;
|
|
|
|
|
|
/* text-xl */
|
|
|
|
|
|
color: #374151;
|
|
|
|
|
|
/* text-gray-700 */
|
2026-02-05 18:00:11 +08:00
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
|
|
|
|
|
|
.group:hover & {
|
2026-02-10 08:45:26 +08:00
|
|
|
|
color: #b91c1c;
|
|
|
|
|
|
/* text-red-700 */
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.homophone {
|
|
|
|
|
|
:deep(img) {
|
|
|
|
|
|
height: 230px !important;
|
|
|
|
|
|
width: auto !important;
|
|
|
|
|
|
object-fit: contain;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.rich-content {
|
|
|
|
|
|
:deep(img) {
|
2026-03-02 09:53:34 +08:00
|
|
|
|
max-width: 200px;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
height: auto;
|
|
|
|
|
|
object-fit: contain;
|
2026-02-13 08:34:09 +08:00
|
|
|
|
margin: 0 auto;
|
2026-02-10 08:45:26 +08:00
|
|
|
|
vertical-align: middle;
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
2026-03-18 16:58:13 +08:00
|
|
|
|
|
|
|
|
|
|
:deep(p),
|
|
|
|
|
|
:deep(span),
|
|
|
|
|
|
:deep(div) {
|
|
|
|
|
|
font-size: 2rem; /* text-5xl */
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content-with-bg {
|
|
|
|
|
|
background: url('@/assets/imgs/user/content-bg.png') no-repeat center;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
border-radius: 12px;
|
|
|
|
|
|
padding: 20px 30px;
|
|
|
|
|
|
letter-spacing: 0.4em;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.short-content-bg {
|
|
|
|
|
|
background: url('@/assets/imgs/user/short-content-bg.png') no-repeat center;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
border-radius: 12px;
|
|
|
|
|
|
padding: 20px 30px;
|
|
|
|
|
|
letter-spacing: 0.1em;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.association-word {
|
|
|
|
|
|
background: url('@/assets/imgs/user/dui-kuang.png') no-repeat center;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
min-width: 160px;
|
|
|
|
|
|
height: 70px;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-size: 32px;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
color: white;
|
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.association-char {
|
|
|
|
|
|
background: url('@/assets/imgs/user/dui-text-bg.png') no-repeat center;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
width: 100px;
|
|
|
|
|
|
height: 100px;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
color: white;
|
2026-02-05 18:00:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
</style>
|