|
219 | 219 |
|
220 | 220 | <!-- 提示词结果展示 --> |
221 | 221 | <div v-if="promptResult" class="prompt-result"> |
| 222 | + <!-- 调试信息 --> |
| 223 | + <div style="display: none;">{{ console.log('模板中promptResult值:', promptResult) }}</div> |
222 | 224 | <div class="prompt-result-container"> |
223 | 225 | <div class="prompt-result-header"> |
224 | 226 | <h3 class="result-title">生成的提示词</h3> |
225 | | - <button @click="copyPrompt" class="copy-btn" :class="{ copied: copySuccess }"> |
226 | | - <span class="btn-icon">{{ copySuccess ? '✅' : '📋' }}</span> |
227 | | - <span class="btn-text">{{ copySuccess ? '已复制' : '复制' }}</span> |
228 | | - </button> |
| 227 | + <div class="header-actions"> |
| 228 | + <button @click="copyPrompt" class="copy-btn" :class="{ copied: copySuccess }"> |
| 229 | + <span class="btn-icon">{{ copySuccess ? '✅' : '📋' }}</span> |
| 230 | + <span class="btn-text">{{ copySuccess ? '已复制' : '复制' }}</span> |
| 231 | + </button> |
| 232 | + <button @click="closePromptResult" class="close-btn" title="关闭"> |
| 233 | + <span class="btn-icon">✕</span> |
| 234 | + </button> |
| 235 | + </div> |
229 | 236 | </div> |
230 | 237 |
|
231 | 238 | <div class="prompt-content"> |
@@ -394,6 +401,12 @@ watch(() => props.currentQuestion, (newQuestion, oldQuestion) => { |
394 | 401 | } |
395 | 402 | }, { deep: true }) |
396 | 403 |
|
| 404 | +// 监听promptResult变化 |
| 405 | +watch(() => promptResult.value, (newValue, oldValue) => { |
| 406 | + console.log('promptResult变化:', { oldValue, newValue }) |
| 407 | + console.log('promptResult是否为真值:', !!newValue) |
| 408 | +}, { immediate: true }) |
| 409 | +
|
397 | 410 | // 方法 |
398 | 411 | const resetAnswers = () => { |
399 | 412 | answers.input = '' |
@@ -632,9 +645,24 @@ const copyPrompt = async () => { |
632 | 645 | } |
633 | 646 | } |
634 | 647 |
|
| 648 | +// 关闭提示词结果 |
| 649 | +const closePromptResult = () => { |
| 650 | + promptResult.value = '' |
| 651 | + copySuccess.value = false |
| 652 | +} |
| 653 | +
|
635 | 654 | // 暴露设置提示词结果的方法 |
636 | 655 | const setPromptResult = (result: string) => { |
| 656 | + console.log('子组件setPromptResult被调用,参数:', result) |
| 657 | + console.log('设置前promptResult.value:', promptResult.value) |
637 | 658 | promptResult.value = result |
| 659 | + console.log('设置后promptResult.value:', promptResult.value) |
| 660 | + |
| 661 | + // 使用nextTick确保DOM更新 |
| 662 | + nextTick(() => { |
| 663 | + console.log('nextTick后promptResult.value:', promptResult.value) |
| 664 | + console.log('DOM中是否存在.prompt-result元素:', !!document.querySelector('.prompt-result')) |
| 665 | + }) |
638 | 666 | } |
639 | 667 |
|
640 | 668 | // 暴露方法给父组件 |
@@ -1810,6 +1838,41 @@ defineExpose({ |
1810 | 1838 | gap: 16px; |
1811 | 1839 | } |
1812 | 1840 |
|
| 1841 | +.header-actions { |
| 1842 | + display: flex; |
| 1843 | + align-items: center; |
| 1844 | + gap: 12px; |
| 1845 | +} |
| 1846 | +
|
| 1847 | +.close-btn { |
| 1848 | + display: flex; |
| 1849 | + align-items: center; |
| 1850 | + justify-content: center; |
| 1851 | + width: 40px; |
| 1852 | + height: 40px; |
| 1853 | + background: rgba(15, 15, 15, 0.8); |
| 1854 | + border: 1px solid rgba(212, 175, 55, 0.2); |
| 1855 | + border-radius: 50%; |
| 1856 | + color: #e8e8e8; |
| 1857 | + font-size: 16px; |
| 1858 | + font-weight: 600; |
| 1859 | + cursor: pointer; |
| 1860 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); |
| 1861 | + backdrop-filter: blur(10px); |
| 1862 | +} |
| 1863 | +
|
| 1864 | +.close-btn:hover { |
| 1865 | + border-color: rgba(239, 68, 68, 0.4); |
| 1866 | + background: rgba(239, 68, 68, 0.1); |
| 1867 | + color: #ef4444; |
| 1868 | + transform: scale(1.05); |
| 1869 | +} |
| 1870 | +
|
| 1871 | +.close-btn .btn-icon { |
| 1872 | + font-size: 18px; |
| 1873 | + line-height: 1; |
| 1874 | +} |
| 1875 | +
|
1813 | 1876 | .result-title { |
1814 | 1877 | margin: 0; |
1815 | 1878 | font-size: 24px; |
|
0 commit comments