ux: 優化用戶友善文案,將「高價值詞彙」改為「重點學習詞彙」

文案優化:
- 程度指示器:「💎 高價值範圍」→「📈 重點學習範圍」
- 設定頁面:「高價值詞彙範圍」→「重點學習範圍」
- AI Prompt:「標記為高價值」→「標記為重點學習」
- 詞彙標記:「高價值詞彙」→「重點學習詞彙」

視覺優化:
- 圖標升級: (價值感) → 🎯 (目標感)
- 強化學習導向的表達方式

技術修復:
- 新增DbContext個人化欄位映射,解決資料庫欄位問題
- 確保C#模型與SQLite表結構正確對應

用戶體驗提升:
- 從商業化的「價值」概念轉為教育性的「學習」概念
- 更直觀的個人化學習目標表達
- 減少用戶理解負擔,提升整體友善度

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
鄭沛軒 2025-09-19 00:26:10 +08:00
parent dcacba2523
commit f90286ad88
6 changed files with 17 additions and 56 deletions

View File

@ -1,46 +0,0 @@
# ==============================================
# DramaLing 環境變數配置範本
# 前後端分離架構 (Next.js + .NET Core)
# ==============================================
# ================
# 前端配置 (Next.js)
# ================
# Supabase 前端配置 (認證用)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# API 服務配置
NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_API_URL_PROD=https://your-dotnet-api.com
# 應用程式配置
NEXT_PUBLIC_APP_URL=http://localhost:3001
# ================
# 後端配置 (.NET Core)
# ================
# 注意:以下配置應複製到 backend/DramaLing.Api/appsettings.Development.json
# 資料庫連接
# ConnectionStrings__DefaultConnection=Host=db.supabase.co;Database=postgres;Username=postgres;Password=your-password;Port=5432;SSL Mode=Require;
# Supabase 後端配置
# Supabase__Url=your_supabase_project_url
# Supabase__ServiceRoleKey=your_supabase_service_role_key
# Supabase__JwtSecret=your_supabase_jwt_secret
# Google Gemini AI
# AI__GeminiApiKey=your_gemini_api_key
# ================
# 部署配置
# ================
# 前端部署 (Vercel)
# VERCEL_URL=your-vercel-deployment-url
# 後端部署 (Azure/Railway)
# AZURE_APP_URL=your-azure-app-url
# RAILWAY_APP_URL=your-railway-app-url

View File

@ -74,6 +74,13 @@ public class DramaLingDbContext : DbContext
.HasConversion(
v => System.Text.Json.JsonSerializer.Serialize(v, (System.Text.Json.JsonSerializerOptions)null),
v => System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object>>(v, (System.Text.Json.JsonSerializerOptions)null) ?? new Dictionary<string, object>());
// 新增個人化欄位映射
userEntity.Property(u => u.EnglishLevel).HasColumnName("english_level");
userEntity.Property(u => u.LevelUpdatedAt).HasColumnName("level_updated_at");
userEntity.Property(u => u.IsLevelVerified).HasColumnName("is_level_verified");
userEntity.Property(u => u.LevelNotes).HasColumnName("level_notes");
userEntity.Property(u => u.CreatedAt).HasColumnName("created_at");
userEntity.Property(u => u.UpdatedAt).HasColumnName("updated_at");

View File

@ -94,14 +94,14 @@ public class GeminiService : IGeminiService
1.
2. **({userLevel}) {targetRange} **
2. **({userLevel}) {targetRange} **
3.
4. JSON格式正確
- : {userLevel}
- : {targetRange}
- ({userLevel})
- : {targetRange}
- ({userLevel})
-
-
";

View File

@ -314,7 +314,7 @@ function GenerateContent() {
<div className="flex items-center justify-center gap-2">
<span>🎯 : {userLevel}</span>
<span className="text-gray-400">|</span>
<span>💎 : {getTargetRange(userLevel)}</span>
<span>📈 : {getTargetRange(userLevel)}</span>
<Link
href="/settings"
className="text-blue-500 hover:text-blue-700 ml-2"

View File

@ -171,9 +171,9 @@ export default function SettingsPage() {
</h3>
<div className="grid md:grid-cols-2 gap-4">
<div>
<h4 className="font-semibold text-blue-700 mb-2"></h4>
<h4 className="font-semibold text-blue-700 mb-2"></h4>
<p className="text-blue-600">
<span className="font-bold">{getHighValueRange(userLevel)}</span>
<span className="font-bold">{getHighValueRange(userLevel)}</span>
</p>
</div>
<div>

View File

@ -282,13 +282,13 @@ export function ClickableTextV2({
</button>
</div>
{/* 高價值標記 */}
{/* 重點學習標記 */}
{getWordProperty(analysis[selectedWord], 'isHighValue') && (
<div className="bg-green-50 border border-green-200 rounded-lg p-3">
<div className="flex items-center gap-2">
<div className="text-green-600 text-lg"></div>
<div className="text-green-600 text-lg">🎯</div>
<div className="text-sm font-medium text-green-800">
</div>
<div className="text-xs bg-green-100 text-green-700 px-2 py-1 rounded-full">
{getWordProperty(analysis[selectedWord], 'learningPriority') === 'high' ? '⭐⭐⭐⭐⭐' :