| <template> | |
|   <view class="richtext-container"> | |
|     <!-- 状态栏安全区域 --> | |
|     <uv-status-bar></uv-status-bar> | |
|      | |
| 
 | |
|      | |
|     <!-- 富文本内容区域 --> | |
|     <view class="content-wrapper"> | |
|       <view class="content-container"> | |
|         <!-- 使用 uv-parse 组件渲染富文本 --> | |
|         <uv-parse  | |
|           v-if="htmlContent" | |
|           :content="htmlContent" | |
|           :tag-style="tagStyle" | |
|           :show-with-animation="true" | |
|           :animation-duration="300" | |
|         ></uv-parse> | |
|          | |
|         <!-- 加载状态 --> | |
|         <view v-else class="loading-container"> | |
|           <uv-loading-icon mode="circle"></uv-loading-icon> | |
|           <text class="loading-text">内容加载中...</text> | |
|         </view> | |
|       </view> | |
|     </view> | |
|   </view> | |
| </template> | |
| 
 | |
| <script> | |
| export default { | |
|   data() { | |
|     return { | |
|       htmlContent: '', | |
|       // 富文本样式配置 | |
|       tagStyle: { | |
|         p: 'margin: 16rpx 0; line-height: 1.6; color: #333;', | |
|         img: 'max-width: 100%; height: auto; border-radius: 8rpx; margin: 16rpx 0;', | |
|         h1: 'font-size: 36rpx; font-weight: bold; margin: 24rpx 0 16rpx 0; color: #222;', | |
|         h2: 'font-size: 32rpx; font-weight: bold; margin: 20rpx 0 12rpx 0; color: #333;', | |
|         h3: 'font-size: 28rpx; font-weight: bold; margin: 16rpx 0 8rpx 0; color: #444;', | |
|         strong: 'font-weight: bold; color: #222;', | |
|         em: 'font-style: italic; color: #666;', | |
|         ul: 'margin: 16rpx 0; padding-left: 32rpx;', | |
|         ol: 'margin: 16rpx 0; padding-left: 32rpx;', | |
|         li: 'margin: 8rpx 0; line-height: 1.5;', | |
|         blockquote: 'margin: 16rpx 0; padding: 16rpx; background: #f5f5f5; border-left: 4rpx solid #ddd; border-radius: 4rpx;', | |
|         code: 'background: #f5f5f5; padding: 4rpx 8rpx; border-radius: 4rpx; font-family: monospace;', | |
|         pre: 'background: #f5f5f5; padding: 16rpx; border-radius: 8rpx; overflow-x: auto; margin: 16rpx 0;' | |
|       } | |
|     } | |
|   }, | |
|    | |
|   onLoad(options) { | |
|     // 获取传递的富文本内容 | |
|     if (options.content) { | |
|       this.htmlContent = decodeURIComponent(options.content) | |
|     } else { | |
|       uni.showToast({ | |
|         title: '内容加载失败', | |
|         icon: 'error' | |
|       }) | |
|       setTimeout(() => { | |
|         this.goBack() | |
|       }, 1500) | |
|     } | |
|   }, | |
|    | |
|   methods: { | |
|     // 返回上一页 | |
|     goBack() { | |
|       uni.navigateBack({ | |
|         delta: 1 | |
|       }) | |
|     } | |
|   } | |
| } | |
| </script> | |
| 
 | |
| <style lang="scss" scoped> | |
| .richtext-container { | |
|   min-height: 100vh; | |
|   background: #fff; | |
| } | |
| 
 | |
| .content-wrapper { | |
|   padding: 0 32rpx 40rpx; | |
| } | |
| 
 | |
| .content-container { | |
|   background: #fff; | |
|   border-radius: 16rpx; | |
|   overflow: hidden; | |
| } | |
| 
 | |
| .loading-container { | |
|   display: flex; | |
|   flex-direction: column; | |
|   align-items: center; | |
|   justify-content: center; | |
|   padding: 120rpx 0; | |
|    | |
|   .loading-text { | |
|     margin-top: 24rpx; | |
|     font-size: 28rpx; | |
|     color: #999; | |
|   } | |
| } | |
| 
 | |
| // 富文本内容样式优化 | |
| :deep(.uv-parse) { | |
|   font-size: 28rpx; | |
|   line-height: 1.6; | |
|   color: #333; | |
|    | |
|   // 图片样式 | |
|   img { | |
|     max-width: 100% !important; | |
|     height: auto !important; | |
|     border-radius: 8rpx; | |
|     margin: 16rpx 0; | |
|     box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); | |
|   } | |
|    | |
|   // 段落样式 | |
|   p { | |
|     margin: 16rpx 0; | |
|     text-align: justify; | |
|     word-break: break-word; | |
|   } | |
|    | |
|   // 标题样式 | |
|   h1, h2, h3, h4, h5, h6 { | |
|     margin: 24rpx 0 16rpx 0; | |
|     font-weight: bold; | |
|     line-height: 1.4; | |
|   } | |
|    | |
|   // 列表样式 | |
|   ul, ol { | |
|     margin: 16rpx 0; | |
|     padding-left: 32rpx; | |
|      | |
|     li { | |
|       margin: 8rpx 0; | |
|       line-height: 1.5; | |
|     } | |
|   } | |
|    | |
|   // 引用样式 | |
|   blockquote { | |
|     margin: 16rpx 0; | |
|     padding: 16rpx; | |
|     background: #f8f9fa; | |
|     border-left: 4rpx solid $primary-color; | |
|     border-radius: 4rpx; | |
|     font-style: italic; | |
|   } | |
|    | |
|   // 代码样式 | |
|   code { | |
|     background: #f1f3f4; | |
|     padding: 4rpx 8rpx; | |
|     border-radius: 4rpx; | |
|     font-family: 'Courier New', monospace; | |
|     font-size: 24rpx; | |
|   } | |
|    | |
|   pre { | |
|     background: #f1f3f4; | |
|     padding: 16rpx; | |
|     border-radius: 8rpx; | |
|     overflow-x: auto; | |
|     margin: 16rpx 0; | |
|      | |
|     code { | |
|       background: none; | |
|       padding: 0; | |
|     } | |
|   } | |
| } | |
| </style> |