diff --git a/lingtropy-client/src/renderer/screens/TextRewritingTool.vue b/lingtropy-client/src/renderer/screens/TextRewritingTool.vue index f1fab79..5dda8ae 100644 --- a/lingtropy-client/src/renderer/screens/TextRewritingTool.vue +++ b/lingtropy-client/src/renderer/screens/TextRewritingTool.vue @@ -134,6 +134,14 @@
{{ selectedModel }} {{ rewrittenText.length }} 个结果 +
@@ -147,11 +155,19 @@
-
+
@@ -215,6 +231,13 @@ 紧凑视图
+
+ + +
@@ -249,6 +272,14 @@
+ + +
+
+
+
+
+
@@ -293,9 +324,15 @@ const settings = reactive({ darkMode: false, compactMode: false, temperature: 70, // 0.7 - maxLength: '2000' + maxLength: '2000', + layoutMode: 'list' }) +// 切换布局模式 +const toggleLayout = () => { + settings.layoutMode = settings.layoutMode === 'list' ? 'grid' : 'list' +} + // 监听点击事件,关闭模型列表 const handleClickOutside = (event) => { if (modelDropdown.value && !modelDropdown.value.contains(event.target)) { @@ -460,12 +497,80 @@ const showToast = (message) => { overflow: hidden; } +/* 背景装饰 */ +.background-decoration { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: none; + z-index: -1; + overflow: hidden; +} + +.bg-circle { + position: absolute; + border-radius: 50%; + opacity: 0.5; + filter: blur(60px); +} + +.bg-circle-1 { + width: 400px; + height: 400px; + background: linear-gradient(45deg, rgba(46, 204, 113, 0.3), rgba(52, 152, 219, 0.3)); + top: -100px; + left: -100px; + animation: float 15s ease-in-out infinite alternate; +} + +.bg-circle-2 { + width: 600px; + height: 600px; + background: linear-gradient(45deg, rgba(155, 89, 182, 0.2), rgba(41, 128, 185, 0.2)); + bottom: -200px; + right: -200px; + animation: float 20s ease-in-out infinite alternate-reverse; +} + +.bg-circle-3 { + width: 300px; + height: 300px; + background: linear-gradient(45deg, rgba(241, 196, 15, 0.2), rgba(231, 76, 60, 0.2)); + top: 40%; + left: 60%; + animation: float 18s ease-in-out infinite alternate; +} + +.bg-dots { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: radial-gradient(rgba(0, 0, 0, 0.1) 1px, transparent 1px); + background-size: 30px 30px; + opacity: 0.3; +} + +@keyframes float { + 0% { + transform: translate(0, 0); + } + 100% { + transform: translate(50px, 50px); + } +} + .text-rewriter-layout { display: flex; gap: 24px; width: 100%; max-width: 1800px; height: calc(100vh - 40px); + position: relative; + z-index: 1; } /* 左侧输入区域 */ @@ -481,6 +586,8 @@ const showToast = (message) => { flex-direction: column; overflow-y: auto; transition: all 0.3s ease; + backdrop-filter: blur(10px); + background-color: rgba(255, 255, 255, 0.95); } /* 右侧结果区域 */ @@ -494,6 +601,8 @@ const showToast = (message) => { flex-direction: column; overflow: hidden; transition: all 0.3s ease; + backdrop-filter: blur(10px); + background-color: rgba(255, 255, 255, 0.95); } .result-header-bar { @@ -508,6 +617,7 @@ const showToast = (message) => { .result-stats { display: flex; gap: 12px; + align-items: center; } .model-badge, .count-badge { @@ -918,6 +1028,19 @@ const showToast = (message) => { padding: 4px; } +.results-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 20px; + padding: 4px; +} + +.grid-item { + height: 100%; + display: flex; + flex-direction: column; +} + .result-block { background-color: white; border-radius: 12px; @@ -1350,6 +1473,25 @@ const showToast = (message) => { transform: translateX(-50%) translateY(0); } +/* 布局切换按钮 */ +.layout-toggle-button { + background-color: #f0f0f0; + border: none; + border-radius: 50%; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.2s ease; +} + +.layout-toggle-button:hover { + background-color: #e0e0e0; + transform: scale(1.1); +} + /* 响应式设计 */ @media (max-width: 1200px) { .text-rewriter-layout { @@ -1401,6 +1543,10 @@ const showToast = (message) => { top: 0; right: 0; } + + .results-grid { + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + } } @media (max-width: 480px) { @@ -1422,6 +1568,10 @@ const showToast = (message) => { width: 100%; justify-content: space-between; } + + .results-grid { + grid-template-columns: 1fr; + } }