|
|
@ -0,0 +1,182 @@ |
|
|
|
|
|
<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> |