|
48 | 48 | </div> |
49 | 49 | </div> |
50 | 50 |
|
| 51 | + <!-- AI 解释区域 --> |
| 52 | + <div v-if="result || loadingAi || aiError" class="card result-card"> |
| 53 | + <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;"> |
| 54 | + <h3 style="margin-bottom: 0;">✨ AI 深度解析与例句</h3> |
| 55 | + <div style="display: flex; gap: 10px; align-items: center;"> |
| 56 | + <select v-model="selectedModel" class="model-select" v-if="availableModels.length > 0"> |
| 57 | + <option v-for="m in availableModels" :key="m" :value="m">{{ m }}</option> |
| 58 | + </select> |
| 59 | + <button v-if="(!loadingAi && result) || aiRawExplanation" @click="fetchAiExplanation" class="btn-secondary" :disabled="loadingAi"> |
| 60 | + {{ aiRawExplanation ? '重新生成' : '获取解析' }} |
| 61 | + </button> |
| 62 | + </div> |
| 63 | + </div> |
| 64 | + |
| 65 | + <div v-if="loadingAi && !aiRawExplanation" class="ai-loading"> |
| 66 | + <div class="spinner"></div> |
| 67 | + <p>Ollama 正在思考中,请稍候...</p> |
| 68 | + </div> |
| 69 | + |
| 70 | + <div v-else-if="aiError && !aiRawExplanation" class="error-message"> |
| 71 | + {{ aiError }} |
| 72 | + <button @click="fetchAiExplanation" style="margin-left: 10px; background: none; border: none; text-decoration: underline; color: inherit; cursor: pointer;">重试</button> |
| 73 | + </div> |
| 74 | + |
| 75 | + <div v-if="aiRawExplanation" class="ai-content markdown-body" v-html="aiExplanation"></div> |
| 76 | + </div> |
| 77 | + |
51 | 78 | <!-- 结果展示 --> |
52 | 79 | <div v-if="result" class="card result-card"> |
53 | 80 | <h3>活用结果</h3> |
|
97 | 124 | <span class="label">意向形</span> |
98 | 125 | <span class="value">{{ result.volitional }}</span> |
99 | 126 | </div> |
100 | | - </div> |
101 | | - </div> |
102 | | - |
103 | | - <!-- AI 解释区域 --> |
104 | | - <div v-if="result || loadingAi || aiError" class="card result-card"> |
105 | | - <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;"> |
106 | | - <h3 style="margin-bottom: 0;">✨ AI 深度解析与例句</h3> |
107 | | - <div style="display: flex; gap: 10px; align-items: center;"> |
108 | | - <select v-model="selectedModel" class="model-select" v-if="availableModels.length > 0"> |
109 | | - <option v-for="m in availableModels" :key="m" :value="m">{{ m }}</option> |
110 | | - </select> |
111 | | - <button v-if="(!loadingAi && result) || aiRawExplanation" @click="fetchAiExplanation" class="btn-secondary" :disabled="loadingAi"> |
112 | | - {{ aiRawExplanation ? '重新生成' : '获取解析' }} |
113 | | - </button> |
114 | | - </div> |
115 | | - </div> |
116 | | - |
117 | | - <div v-if="loadingAi && !aiRawExplanation" class="ai-loading"> |
118 | | - <div class="spinner"></div> |
119 | | - <p>Ollama 正在思考中,请稍候...</p> |
120 | | - </div> |
121 | | - |
122 | | - <div v-else-if="aiError && !aiRawExplanation" class="error-message"> |
123 | | - {{ aiError }} |
124 | | - <button @click="fetchAiExplanation" style="margin-left: 10px; background: none; border: none; text-decoration: underline; color: inherit; cursor: pointer;">重试</button> |
125 | | - </div> |
126 | | - |
127 | | - <div v-if="aiRawExplanation" class="ai-content markdown-body" v-html="aiExplanation"></div> |
128 | 127 | </div> |
129 | 128 | </section> |
130 | | - |
131 | | - <!-- 右侧:文档区 --> |
132 | 129 | <section class="doc-section"> |
133 | 130 | <div class="card"> |
134 | 131 | <h2>动词分类指南</h2> |
|
0 commit comments