|
|
@@ -1,271 +1,226 @@
|
|
|
-<ion-header [translucent]="true">
|
|
|
- <ion-toolbar>
|
|
|
- <ion-buttons slot="start">
|
|
|
- <ion-button (click)="goBack()">
|
|
|
- <ion-icon name="chevron-back-outline"></ion-icon>
|
|
|
- </ion-button>
|
|
|
- </ion-buttons>
|
|
|
- <!-- 进度显示 -->
|
|
|
- <ion-buttons slot="end">
|
|
|
- <ion-button fill="clear" size="small">
|
|
|
- <span class="progress-text">{{ getProgressText() }}</span>
|
|
|
- </ion-button>
|
|
|
- </ion-buttons>
|
|
|
- </ion-toolbar>
|
|
|
-</ion-header>
|
|
|
+<ion-content [fullscreen]="true" class="word-story-content" #ionContent>
|
|
|
+ <div class="ocean-bg"></div>
|
|
|
|
|
|
-<ion-content [fullscreen]="true" class="ion-padding" #ionContent>
|
|
|
- <!-- 显示加载状态 -->
|
|
|
- <div class="loading-container" *ngIf="isLoading">
|
|
|
- <ion-spinner name="crescent"></ion-spinner>
|
|
|
- <p>加载单词中...</p>
|
|
|
+ <div class="floating-creatures">
|
|
|
+ <div class="creature fish-1">
|
|
|
+ <img src="assets/icon/鲨鱼.svg" alt="" class="fish-svg" />
|
|
|
+ </div>
|
|
|
+ <div class="creature fish-2">
|
|
|
+ <img src="assets/icon/鲨鱼.svg" alt="" class="fish-svg" />
|
|
|
+ </div>
|
|
|
+ <div class="creature seaweed-1">
|
|
|
+ <img src="assets/icon/线状海草2.svg" alt="" class="seaweed-svg" />
|
|
|
+ </div>
|
|
|
+ <div class="creature seaweed-2">
|
|
|
+ <img src="assets/icon/线状海草2.svg" alt="" class="seaweed-svg" />
|
|
|
+ </div>
|
|
|
+ <div class="creature jellyfish">
|
|
|
+ <img src="assets/icon/水母.svg" alt="" class="jellyfish-svg" />
|
|
|
+ </div>
|
|
|
+ <div class="creature bubble-1"></div>
|
|
|
+ <div class="creature bubble-2"></div>
|
|
|
+ <div class="creature bubble-3"></div>
|
|
|
+ <div class="creature starfish">
|
|
|
+ <svg viewBox="0 0 100 100" width="30" height="30">
|
|
|
+ <path d="M50,10 L60,35 L85,35 L65,50 L75,80 L50,65 L25,80 L35,50 L15,35 L40,35 Z" fill="#FFB74D" opacity="0.7" />
|
|
|
+ </svg>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
- <!-- 显示单词内容 -->
|
|
|
- <div class="word-container" *ngIf="currentWord && !isLoading && !showGroupCompleted">
|
|
|
- <!-- 英语单词 - 根据学习次数动态显示 -->
|
|
|
- <div class="word-header">
|
|
|
- <!-- 根据studyCount显示不同内容 -->
|
|
|
- <ng-container [ngSwitch]="currentWord.studyCount">
|
|
|
- <!-- 模式0和模式2:显示完整单词 -->
|
|
|
- <h1 *ngSwitchCase="0" class="word-text">{{ currentWord.word }}</h1>
|
|
|
- <h1 *ngSwitchCase="2" class="word-text">{{ currentWord.word }}</h1>
|
|
|
-
|
|
|
- <!-- 模式1:隐藏单词,显示空白 -->
|
|
|
- <div *ngSwitchCase="1" class="hidden-word-container">
|
|
|
- <!-- 不显示问号,而是显示空白 -->
|
|
|
- <div *ngIf="!isAnswered" class="blank-word"></div>
|
|
|
- <h1 *ngIf="isAnswered" class="word-text">{{ currentWord.word }}</h1>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 默认情况 -->
|
|
|
- <h1 *ngSwitchDefault class="word-text">{{ currentWord.word }}</h1>
|
|
|
- </ng-container>
|
|
|
-
|
|
|
- <!-- 按照图片布局:圆形按钮在前,音标在后 -->
|
|
|
- <div class="phonetic-section">
|
|
|
- <!-- 使用自定义发音按钮组件 -->
|
|
|
- <app-pronunciation-button
|
|
|
- [word]="currentWord.word"
|
|
|
- [isAmericanPronunciation]="isAmericanPronunciation"
|
|
|
- [autoPlay]="getAutoPlay()"
|
|
|
- (pronunciationToggled)="onPronunciationToggled($event)">
|
|
|
- </app-pronunciation-button>
|
|
|
-
|
|
|
- <!-- 音标显示 -->
|
|
|
- <!-- 模式0和2:显示音标 -->
|
|
|
- <div *ngIf="currentWord.studyCount !== 1" class="phonetic-text">
|
|
|
- {{ isAmericanPronunciation ? currentWord.phonetic : currentWord.phoneticUk || currentWord.phonetic }}
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 模式1:总是显示音标,即使单词隐藏 -->
|
|
|
- <div *ngIf="currentWord.studyCount === 1" class="phonetic-text">
|
|
|
- {{ isAmericanPronunciation ? currentWord.phonetic : currentWord.phoneticUk || currentWord.phonetic }}
|
|
|
- </div>
|
|
|
+ <div class="word-story-container recite-story-inner">
|
|
|
+ <div class="nav-header">
|
|
|
+ <div class="back-btn" (click)="goBack()">
|
|
|
+ <ion-icon name="chevron-back-outline"></ion-icon>
|
|
|
+ </div>
|
|
|
+ <h1 class="page-title">
|
|
|
+ <span class="page-title-brand">
|
|
|
+ <img src="assets/icon/鲨鱼头部.svg" alt="" class="title-icon" />
|
|
|
+ <span class="page-title-text">背单词</span>
|
|
|
+ </span>
|
|
|
+ </h1>
|
|
|
+ <div class="nav-header-end">
|
|
|
+ <div class="recite-progress" *ngIf="getProgressText()">{{ getProgressText() }}</div>
|
|
|
+ <div class="placeholder" *ngIf="!getProgressText()"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <!-- 根据状态显示不同内容 -->
|
|
|
- <ng-container *ngIf="!showWordDetail; else detailSection">
|
|
|
- <!-- 正常背单词模式:显示提示词和选项 -->
|
|
|
- <div class="recite-mode">
|
|
|
- <!-- 提示文字 - 根据studyCount动态显示 -->
|
|
|
- <div class="hint-text">{{ getHintText() }}</div>
|
|
|
+ <!-- 显示加载状态 -->
|
|
|
+ <div class="loading-container" *ngIf="isLoading">
|
|
|
+ <ion-spinner name="crescent" color="primary"></ion-spinner>
|
|
|
+ <p>加载单词中...</p>
|
|
|
+ </div>
|
|
|
|
|
|
- <!-- 选项区域 - 模式2不显示选项 -->
|
|
|
- <div class="options-container" *ngIf="currentWord.studyCount < 2 ">
|
|
|
- <ion-button
|
|
|
- *ngFor="let option of wordOptions; let i = index"
|
|
|
- expand="block"
|
|
|
- fill="outline"
|
|
|
- [color]="getOptionColor(option)"
|
|
|
-
|
|
|
- (click)="selectOption(option)"
|
|
|
- (click)="playOptionSound(option)"
|
|
|
- [class.answered]="isAnswered || isCorrectAnswerShown"
|
|
|
- [class.correct]="option.isCorrect && (isAnswered || isCorrectAnswerShown)"
|
|
|
- [class.wrong]="selectedOption === option && !option.isCorrect && (isAnswered || isCorrectAnswerShown)"
|
|
|
- class="option-button">
|
|
|
- <div class="option-content">
|
|
|
- <!-- 未回答时的显示 -->
|
|
|
- <div *ngIf="!(isAnswered || isCorrectAnswerShown)" class="option-normal">
|
|
|
- <div class="option-type">{{ getOptionType(option) }}</div>
|
|
|
- <div class="option-text">{{ getOptionDisplayText(option) }}</div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 已回答时的显示 -->
|
|
|
- <div *ngIf="isAnswered || isCorrectAnswerShown" class="option-answered">
|
|
|
- <!-- 正确答案的显示 -->
|
|
|
- <div *ngIf="option.isCorrect" class="option-correct">
|
|
|
- <div class="english-word">{{ getOptionEnglish(option) }}</div>
|
|
|
- <div class="definition-line">
|
|
|
- <span class="option-type">{{ getOptionType(option) }}</span>
|
|
|
- <span class="option-text">{{ getOptionDisplayText(option) }}</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 错误答案的显示(如果是用户选择的错误答案) -->
|
|
|
- <div *ngIf="selectedOption === option && !option.isCorrect" class="option-wrong">
|
|
|
- <div class="english-word">{{ getOptionEnglish(option) }}</div>
|
|
|
- <div class="definition-line">
|
|
|
- <span class="option-type">{{ getOptionType(option) }}</span>
|
|
|
- <span class="option-text">{{ getOptionDisplayText(option) }}</span>
|
|
|
- </div>
|
|
|
+ <!-- 显示单词内容 -->
|
|
|
+ <div
|
|
|
+ class="word-container shell-card"
|
|
|
+ [class.word-container--word-detail]="showWordDetail"
|
|
|
+ [class.word-container--options]="!showWordDetail && currentWord.studyCount !== 2"
|
|
|
+ [class.word-container--recognize]="!showWordDetail && currentWord.studyCount === 2"
|
|
|
+ *ngIf="currentWord && !isLoading && !showGroupCompleted">
|
|
|
+ <!-- 英语单词 - 根据学习次数动态显示 -->
|
|
|
+ <div class="word-header">
|
|
|
+ <!-- 根据studyCount显示不同内容 -->
|
|
|
+ <ng-container [ngSwitch]="currentWord.studyCount">
|
|
|
+ <!-- 模式0和模式2:显示完整单词 -->
|
|
|
+ <h1 *ngSwitchCase="0" class="word-text">{{ currentWord.word }}</h1>
|
|
|
+ <h1 *ngSwitchCase="2" class="word-text">{{ currentWord.word }}</h1>
|
|
|
+
|
|
|
+ <!-- 模式1:隐藏单词,显示空白 -->
|
|
|
+ <div *ngSwitchCase="1" class="hidden-word-container">
|
|
|
+ <div *ngIf="!isAnswered" class="blank-word"></div>
|
|
|
+ <h1 *ngIf="isAnswered" class="word-text">{{ currentWord.word }}</h1>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 默认情况 -->
|
|
|
+ <h1 *ngSwitchDefault class="word-text">{{ currentWord.word }}</h1>
|
|
|
+ </ng-container>
|
|
|
+
|
|
|
+ <!-- 按照图片布局:圆形按钮在前,音标在后 -->
|
|
|
+ <div class="phonetic-section">
|
|
|
+ <app-pronunciation-button
|
|
|
+ [word]="currentWord.word"
|
|
|
+ [isAmericanPronunciation]="isAmericanPronunciation"
|
|
|
+ [autoPlay]="getAutoPlay()"
|
|
|
+ (pronunciationToggled)="onPronunciationToggled($event)">
|
|
|
+ </app-pronunciation-button>
|
|
|
+
|
|
|
+ <div *ngIf="currentWord.studyCount !== 1" class="phonetic-text">
|
|
|
+ {{ isAmericanPronunciation ? currentWord.phonetic : currentWord.phoneticUk || currentWord.phonetic }}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div *ngIf="currentWord.studyCount === 1" class="phonetic-text">
|
|
|
+ {{ isAmericanPronunciation ? currentWord.phonetic : currentWord.phoneticUk || currentWord.phonetic }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 根据状态显示不同内容 -->
|
|
|
+ <ng-container *ngIf="!showWordDetail; else detailSection">
|
|
|
+ <div class="recite-mode">
|
|
|
+ <div class="hint-text">{{ getHintText() }}</div>
|
|
|
+
|
|
|
+ <div class="options-container" *ngIf="currentWord.studyCount < 2">
|
|
|
+ <ion-button
|
|
|
+ *ngFor="let option of wordOptions; let i = index"
|
|
|
+ expand="block"
|
|
|
+ fill="outline"
|
|
|
+ (click)="selectOption(option)"
|
|
|
+ (click)="playOptionSound(option)"
|
|
|
+ [class.answered]="isAnswered || isCorrectAnswerShown"
|
|
|
+ [class.correct]="option.isCorrect && (isAnswered || isCorrectAnswerShown)"
|
|
|
+ [class.wrong]="selectedOption === option && !option.isCorrect && (isAnswered || isCorrectAnswerShown)"
|
|
|
+ class="option-button">
|
|
|
+ <div class="option-content">
|
|
|
+ <div *ngIf="!(isAnswered || isCorrectAnswerShown)" class="option-normal">
|
|
|
+ <div class="option-type">{{ getOptionType(option) }}</div>
|
|
|
+ <div class="option-text">{{ getOptionDisplayText(option) }}</div>
|
|
|
</div>
|
|
|
-
|
|
|
- <!-- 其他错误选项(未被选择的错误选项) -->
|
|
|
- <div *ngIf="!option.isCorrect && selectedOption !== option" class="option-other-wrong">
|
|
|
- <div class="english-word">{{ getOptionEnglish(option) }}</div>
|
|
|
- <div class="definition-line">
|
|
|
- <span class="option-type">{{ getOptionType(option) }}</span>
|
|
|
- <span class="option-text">{{ getOptionDisplayText(option) }}</span>
|
|
|
- </div>
|
|
|
+
|
|
|
+ <!-- 与未选完全相同的 class 与两行结构:上单词、下「词性 · 释义」,单行省略,高度不变 -->
|
|
|
+ <div *ngIf="isAnswered || isCorrectAnswerShown" class="option-normal">
|
|
|
+ <div class="option-type">{{ getOptionEnglish(option) }}</div>
|
|
|
+ <div class="option-text">{{ getOptionType(option) }} · {{ getOptionDisplayText(option) }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </ion-button>
|
|
|
+ </ion-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </ng-container>
|
|
|
+ </ng-container>
|
|
|
|
|
|
- <!-- 单词详情模式模板 -->
|
|
|
- <ng-template #detailSection>
|
|
|
- <div class="detail-mode">
|
|
|
- <!-- 单词详情组件 -->
|
|
|
-<!-- 单词详情组件 -->
|
|
|
-<app-word-detail
|
|
|
- [word]="currentWord">
|
|
|
-</app-word-detail>
|
|
|
- </div>
|
|
|
- </ng-template>
|
|
|
+ <ng-template #detailSection>
|
|
|
+ <div class="detail-mode">
|
|
|
+ <app-word-detail [word]="currentWord"></app-word-detail>
|
|
|
+ </div>
|
|
|
+ </ng-template>
|
|
|
|
|
|
- <!-- 统一的按钮区域 -->
|
|
|
-<div class="button-container">
|
|
|
- <!-- 模式0和模式1的按钮 -->
|
|
|
- <ng-container *ngIf="currentWord.studyCount == 0 || currentWord.studyCount == 1 ">
|
|
|
- <!-- 看答案按钮(未回答时显示) -->
|
|
|
- <ion-button
|
|
|
- *ngIf="!isAnswered || (isCorrect && !showWordDetail)"
|
|
|
- expand="block"
|
|
|
- fill="clear"
|
|
|
- color="medium"
|
|
|
- (click)="showAnswer()"
|
|
|
- class="action-button">
|
|
|
- 看答案
|
|
|
- </ion-button>
|
|
|
+ <div class="button-container">
|
|
|
+ <ng-container *ngIf="currentWord.studyCount == 0 || currentWord.studyCount == 1">
|
|
|
+ <ion-button
|
|
|
+ *ngIf="!isAnswered || (isCorrect && !showWordDetail)"
|
|
|
+ expand="block"
|
|
|
+ fill="clear"
|
|
|
+ (click)="showAnswer()"
|
|
|
+ class="action-button action-button--text-ocean">
|
|
|
+ 看答案
|
|
|
+ </ion-button>
|
|
|
|
|
|
-
|
|
|
- <!-- 继续按钮(回答错误或点击看答案后显示) -->
|
|
|
- <ion-button
|
|
|
- *ngIf="showContinueButton && !showWordDetail"
|
|
|
- expand="block"
|
|
|
- fill="clear"
|
|
|
- color="medium"
|
|
|
- (click)="continueToNext()"
|
|
|
- class="action-button">
|
|
|
- 继续
|
|
|
- </ion-button>
|
|
|
+ <ion-button
|
|
|
+ *ngIf="showContinueButton && !showWordDetail"
|
|
|
+ expand="block"
|
|
|
+ fill="clear"
|
|
|
+ (click)="continueToNext()"
|
|
|
+ class="action-button action-button--text-ocean">
|
|
|
+ 继续
|
|
|
+ </ion-button>
|
|
|
|
|
|
- <!-- 下一个单词按钮(显示单词详情后显示) -->
|
|
|
- <ion-button
|
|
|
- *ngIf="showWordDetail"
|
|
|
- expand="block"
|
|
|
- fill="clear"
|
|
|
- color="medium"
|
|
|
- (click)="goToNextStudy()"
|
|
|
- class="action-button">
|
|
|
- 下一个
|
|
|
- </ion-button>
|
|
|
- </ng-container>
|
|
|
-
|
|
|
-<!-- 模式2的按钮(认识/不认识) -->
|
|
|
-<ng-container *ngIf="currentWord.studyCount === 2">
|
|
|
- <div class="recognition-buttons" *ngIf="!isAnswered">
|
|
|
- <ion-button
|
|
|
- expand="block"
|
|
|
- fill="clear"
|
|
|
- (click)="recognizeWord(true)"
|
|
|
- class="action-button know-button">
|
|
|
- 认识
|
|
|
- </ion-button>
|
|
|
-
|
|
|
- <ion-button
|
|
|
- expand="block"
|
|
|
- fill="clear"
|
|
|
- (click)="recognizeWord(false)"
|
|
|
- class="action-button dont-know-button">
|
|
|
- 不认识
|
|
|
- </ion-button>
|
|
|
- </div>
|
|
|
- <!-- 下一个单词按钮(显示单词详情后显示) -->
|
|
|
- <ion-button
|
|
|
- *ngIf="showWordDetail"
|
|
|
- expand="block"
|
|
|
- fill="clear"
|
|
|
- color="medium"
|
|
|
- (click)="goToNextStudy()"
|
|
|
- class="action-button">
|
|
|
- 下一个
|
|
|
- </ion-button>
|
|
|
-</ng-container>
|
|
|
-</div>
|
|
|
- </div>
|
|
|
+ <ion-button
|
|
|
+ *ngIf="showWordDetail"
|
|
|
+ expand="block"
|
|
|
+ fill="clear"
|
|
|
+ (click)="goToNextStudy()"
|
|
|
+ class="action-button action-button--text-ocean">
|
|
|
+ 下一个
|
|
|
+ </ion-button>
|
|
|
+ </ng-container>
|
|
|
|
|
|
- <!-- 单词组完成页面 -->
|
|
|
- <div class="group-completed-container" *ngIf="showGroupCompleted && !isLoading">
|
|
|
- <div class="completion-card">
|
|
|
-<div class="completion-icon">
|
|
|
- <ion-icon name="trophy" style="color: #FFD700;"></ion-icon>
|
|
|
-</div>
|
|
|
- <h2 class="completion-title">太棒了!</h2>
|
|
|
- <p class="completion-subtitle">本组单词已完成学习</p>
|
|
|
-
|
|
|
- <div class="completion-stats">
|
|
|
- <div class="stat-item">
|
|
|
- <div class="stat-value">{{ completedWordsCount }}</div>
|
|
|
- <div class="stat-label">学习单词</div>
|
|
|
- </div>
|
|
|
- <div class="stat-item">
|
|
|
- <div class="stat-value">{{ studyTime }}</div>
|
|
|
- <div class="stat-label">学习时间</div>
|
|
|
- </div>
|
|
|
- <div class="stat-item">
|
|
|
- <div class="stat-value">{{ masteryRate }}%</div>
|
|
|
- <div class="stat-label">掌握率</div>
|
|
|
- </div>
|
|
|
+ <ng-container *ngIf="currentWord.studyCount === 2">
|
|
|
+ <div class="recognition-buttons" *ngIf="!isAnswered">
|
|
|
+ <ion-button expand="block" fill="solid" (click)="recognizeWord(true)" class="action-button know-button ocean-know">
|
|
|
+ 认识
|
|
|
+ </ion-button>
|
|
|
+
|
|
|
+ <ion-button expand="block" fill="solid" (click)="recognizeWord(false)" class="action-button dont-know-button ocean-dont-know">
|
|
|
+ 不认识
|
|
|
+ </ion-button>
|
|
|
+ </div>
|
|
|
+ <ion-button
|
|
|
+ *ngIf="showWordDetail"
|
|
|
+ expand="block"
|
|
|
+ fill="clear"
|
|
|
+ (click)="goToNextStudy()"
|
|
|
+ class="action-button action-button--text-ocean">
|
|
|
+ 下一个
|
|
|
+ </ion-button>
|
|
|
+ </ng-container>
|
|
|
</div>
|
|
|
-
|
|
|
- <div class="completion-actions">
|
|
|
- <ion-button
|
|
|
- expand="block"
|
|
|
- fill="solid"
|
|
|
- class="rest-button"
|
|
|
- (click)="goToHome()">
|
|
|
- 休息一下
|
|
|
-</ion-button>
|
|
|
+ </div>
|
|
|
|
|
|
-<ion-button
|
|
|
- expand="block"
|
|
|
- fill="solid"
|
|
|
- class="hot-button"
|
|
|
- (click)="continuePractice()">
|
|
|
- 趁热打铁
|
|
|
-</ion-button>
|
|
|
+ <!-- 单词组完成页面 -->
|
|
|
+ <div class="group-completed-container" *ngIf="showGroupCompleted && !isLoading">
|
|
|
+ <div class="completion-card shell-card">
|
|
|
+ <div class="completion-icon">
|
|
|
+ <ion-icon name="trophy" class="trophy-icon"></ion-icon>
|
|
|
+ </div>
|
|
|
+ <h2 class="completion-title">太棒了!</h2>
|
|
|
+ <p class="completion-subtitle">本组单词已完成学习</p>
|
|
|
+
|
|
|
+ <div class="completion-stats">
|
|
|
+ <div class="stat-item">
|
|
|
+ <div class="stat-value">{{ completedWordsCount }}</div>
|
|
|
+ <div class="stat-label">学习单词</div>
|
|
|
+ </div>
|
|
|
+ <div class="stat-item">
|
|
|
+ <div class="stat-value">{{ studyTime }}</div>
|
|
|
+ <div class="stat-label">学习时间</div>
|
|
|
+ </div>
|
|
|
+ <div class="stat-item">
|
|
|
+ <div class="stat-value">{{ masteryRate }}%</div>
|
|
|
+ <div class="stat-label">掌握率</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
|
|
|
-<ion-button
|
|
|
- expand="block"
|
|
|
- fill="solid"
|
|
|
- class="next-group-button"
|
|
|
- (click)="startNextGroup()">
|
|
|
- 再学一组
|
|
|
-</ion-button>
|
|
|
+ <div class="completion-actions">
|
|
|
+ <ion-button expand="block" fill="solid" class="rest-button" (click)="goToHome()">休息一下</ion-button>
|
|
|
+ <ion-button expand="block" fill="solid" class="hot-button" (click)="continuePractice()">趁热打铁</ion-button>
|
|
|
+ <ion-button expand="block" fill="solid" class="next-group-button" (click)="startNextGroup()">再学一组</ion-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
|
- <!-- 如果没有单词数据 -->
|
|
|
- <div class="no-data-container" *ngIf="!currentWord && !isLoading && !showGroupCompleted">
|
|
|
- <p>没有找到单词数据</p>
|
|
|
- <p>请检查 assets/words.txt 文件是否存在且格式正确</p>
|
|
|
+ <!-- 如果没有单词数据 -->
|
|
|
+ <div class="no-data-container shell-card" *ngIf="!currentWord && !isLoading && !showGroupCompleted">
|
|
|
+ <p>没有找到单词数据</p>
|
|
|
+ <p class="no-data-hint">请检查 assets/words_cet6.txt 文件是否存在且格式正确</p>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
-</ion-content>
|
|
|
+</ion-content>
|