|
|
- <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>
|