From 0284ff93129252683da82ed01f0e60f81839761c Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期一, 31 八月 2026 09:24:19 +0800
Subject: [PATCH] fix(strategy-rich-text): 修复纯文本富内容的换行展示问题

---
 management/src/pages/strategyManagement/addAndEdit.jsx |   31 +++++++++++++++++++++++++++++--
 miniprogram/pages/strategy/detail.vue                  |   16 ++++++++++++++--
 2 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/management/src/pages/strategyManagement/addAndEdit.jsx b/management/src/pages/strategyManagement/addAndEdit.jsx
index adecad1..8a6f7e8 100644
--- a/management/src/pages/strategyManagement/addAndEdit.jsx
+++ b/management/src/pages/strategyManagement/addAndEdit.jsx
@@ -33,6 +33,17 @@
   const id = searchParams.get('id');
   const mode = searchParams.get('mode') || 'add'; // add, edit, detail
   const isReadOnly = mode === 'detail';
+  // 兼容纯文本换行,避免预览和小程序详情里被浏览器当成普通空白折叠
+  const formatRichTextPreviewContent = (html) => {
+    const content = String(html || '');
+    if (!content) {
+      return '';
+    }
+    if (/<[^>]+>/.test(content)) {
+      return content;
+    }
+    return content.replace(/\r\n|\r|\n/g, '<br />');
+  };
 
   // 上传前验证 - 图片
   const beforeUploadImage = (file) => {
@@ -355,7 +366,7 @@
         sort: values.sortOrder || 45,
         detailImages: detailImagesStr, // 传字符串(逗号分隔)
         type: type,
-        content: strategyContent.content,
+        content: formatRichTextPreviewContent(strategyContent.content),
       };
 
       let success = false;
@@ -510,7 +521,23 @@
               readOnly={isReadOnly}
             />
           </Form.Item>
-
+          <Form.Item label="内容预览">
+            <div
+              style={{
+                width: '100%',
+                minHeight: '200px',
+                maxHeight: '320px',
+                overflowY: 'auto',
+                padding: '12px',
+                border: '1px solid #f0f0f0',
+                borderRadius: '6px',
+                background: '#fff',
+              }}
+              dangerouslySetInnerHTML={{
+                __html: formatRichTextPreviewContent(strategyContent.content),
+              }}
+            />
+          </Form.Item>
           {/* 保存按钮 */}
           {!isReadOnly && (
             <div style={{ marginTop: '24px' }}>
diff --git a/miniprogram/pages/strategy/detail.vue b/miniprogram/pages/strategy/detail.vue
index 9c67935..c923ca9 100644
--- a/miniprogram/pages/strategy/detail.vue
+++ b/miniprogram/pages/strategy/detail.vue
@@ -116,9 +116,21 @@
 			.filter(item => !!item)
 	}
 
-	// 处理富文本中的图片路径,并统一图片展示样式
+        // 兼容纯文本内容里的换行,避免 rich-text 折叠换行
+        const normalizeRichTextLineBreaks = (html: string) => {
+                const content = String(html || '')
+                if (!content) {
+                        return ''
+                }
+                if (/<[^>]+>/.test(content)) {
+                        return content
+                }
+                return content.replace(/\r\n|\r|\n/g, '<br />')
+        }
+
+        // 处理富文本中的图片路径,并统一图片展示样式
 	const formatRichText = (html: string) => {
-		return String(html || '')
+                return normalizeRichTextLineBreaks(html)
 			.replace(/src=(['"])(.*?)\1/gi, (_match, quote, src) => `src=${quote}${formatImageUrl(src)}${quote}`)
 			.replace(/<img/gi, '<img style="max-width:100%;height:auto;margin:0 auto;display:block"')
 	}

--
Gitblit v1.7.1