<template>
							 | 
						|
									<view class="page">
							 | 
						|
										<navbar title="文章详情" @leftClick="$utils.navigateBack" leftClick/>
							 | 
						|
										
							 | 
						|
										<view class="content">
							 | 
						|
											<!-- 加载状态 -->
							 | 
						|
											<view class="loading-container" v-if="loading">
							 | 
						|
												<text class="loading-text">加载中...</text>
							 | 
						|
											</view>
							 | 
						|
											
							 | 
						|
											<!-- 文章详情 -->
							 | 
						|
											<view class="article-detail" v-if="!loading && articleDetail">
							 | 
						|
												<!-- 创建时间 -->
							 | 
						|
												<view class="article-meta">
							 | 
						|
													<text class="create-time">{{ formatTime(articleDetail.createTime) }}</text>
							 | 
						|
												</view>
							 | 
						|
												
							 | 
						|
											<!-- 富文本内容 -->
							 | 
						|
											<view class="article-content">
							 | 
						|
												<uv-parse
							 | 
						|
													:content="articleDetail.content"
							 | 
						|
													:preview-img="true"
							 | 
						|
													:scroll-table="true"
							 | 
						|
													:tag-style="parseTagStyle"
							 | 
						|
												/>
							 | 
						|
											</view>
							 | 
						|
										</view>
							 | 
						|
											
							 | 
						|
											<!-- 错误状态 -->
							 | 
						|
											<view class="error-container" v-if="!loading && !articleDetail">
							 | 
						|
												<text class="error-text">文章不存在或已被删除</text>
							 | 
						|
											</view>
							 | 
						|
										</view>
							 | 
						|
								
							 | 
						|
										<commentList @getData="getData" :list="list" :params="params" />
							 | 
						|
									</view>
							 | 
						|
								</template>
							 | 
						|
								
							 | 
						|
								<script>
							 | 
						|
									import mixinsList from '@/mixins/list.js'
							 | 
						|
									import commentList from '../components/list/comment/commentList.vue'
							 | 
						|
									export default {
							 | 
						|
										components: {
							 | 
						|
											commentList,
							 | 
						|
										},
							 | 
						|
								        mixins: [mixinsList],
							 | 
						|
										data() {
							 | 
						|
											return {
							 | 
						|
												mixinsListApi : 'getCommentPage',
							 | 
						|
												articleId: '',
							 | 
						|
												articleDetail: null,
							 | 
						|
												loading: false,
							 | 
						|
								                params : {
							 | 
						|
													type : '8',
							 | 
						|
													orderId : '',
							 | 
						|
													name : '',
							 | 
						|
								                }
							 | 
						|
												,
							 | 
						|
												// uv-parse 标签默认样式,确保图片不超过容器宽度
							 | 
						|
												parseTagStyle: {
							 | 
						|
													img: 'max-width:100%;height:auto;display:block;',
							 | 
						|
													video: 'max-width:100%;height:auto;display:block;',
							 | 
						|
													table: 'width:100%;display:block;'
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										onLoad(options) {
							 | 
						|
											if (options.id) {
							 | 
						|
												this.articleId = options.id;
							 | 
						|
												this.loadArticleDetail();
							 | 
						|
								
							 | 
						|
								                this.queryParams.type = this.params.type
							 | 
						|
								                this.queryParams.orderId = options.id
							 | 
						|
								                
							 | 
						|
								                this.params.orderId = options.id
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										onShareAppMessage(res) {
							 | 
						|
											return {
							 | 
						|
												title: this.articleDetail ? this.articleDetail.title || '文章详情' : '文章详情',
							 | 
						|
								                imageUrl: this.articleDetail ? this.articleDetail.image : '',
							 | 
						|
												path: '/pages_order/article/index?id=' + this.articleId
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										methods: {
							 | 
						|
											// 加载文章详情
							 | 
						|
											loadArticleDetail() {
							 | 
						|
												if (!this.articleId) return;
							 | 
						|
												
							 | 
						|
												this.loading = true;
							 | 
						|
												
							 | 
						|
												const params = {
							 | 
						|
													id: this.articleId
							 | 
						|
												};
							 | 
						|
												
							 | 
						|
												this.$api('articleDetail', params, (res) => {
							 | 
						|
													this.loading = false;
							 | 
						|
													
							 | 
						|
													if (res.code === 200 && res.result) {
							 | 
						|
														this.params.name = res.result.title
							 | 
						|
														this.articleDetail = res.result;
							 | 
						|
													} else {
							 | 
						|
														uni.showToast({
							 | 
						|
															title: res.message || '加载失败',
							 | 
						|
															icon: 'none'
							 | 
						|
														});
							 | 
						|
													}
							 | 
						|
												});
							 | 
						|
											},
							 | 
						|
											
							 | 
						|
											// 格式化时间
							 | 
						|
											formatTime(time) {
							 | 
						|
												if (!time) return '';
							 | 
						|
												
							 | 
						|
												const date = new Date(time);
							 | 
						|
												const year = date.getFullYear();
							 | 
						|
												const month = String(date.getMonth() + 1).padStart(2, '0');
							 | 
						|
												const day = String(date.getDate()).padStart(2, '0');
							 | 
						|
												const hours = String(date.getHours()).padStart(2, '0');
							 | 
						|
												const minutes = String(date.getMinutes()).padStart(2, '0');
							 | 
						|
												
							 | 
						|
												return `${year}-${month}-${day} ${hours}:${minutes}`;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style scoped lang="scss">
							 | 
						|
								.page {
							 | 
						|
									background-color: #f5f5f5;
							 | 
						|
									min-height: 100vh;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.content {
							 | 
						|
									padding: 20rpx;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.loading-container {
							 | 
						|
									display: flex;
							 | 
						|
									justify-content: center;
							 | 
						|
									align-items: center;
							 | 
						|
									padding: 200rpx 0;
							 | 
						|
									
							 | 
						|
									.loading-text {
							 | 
						|
										font-size: 28rpx;
							 | 
						|
										color: #999;
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.error-container {
							 | 
						|
									display: flex;
							 | 
						|
									justify-content: center;
							 | 
						|
									align-items: center;
							 | 
						|
									padding: 200rpx 0;
							 | 
						|
									
							 | 
						|
									.error-text {
							 | 
						|
										font-size: 28rpx;
							 | 
						|
										color: #999;
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.article-detail {
							 | 
						|
									background-color: #fff;
							 | 
						|
									border-radius: 16rpx;
							 | 
						|
									padding: 30rpx;
							 | 
						|
									margin-bottom: 20rpx;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.article-meta {
							 | 
						|
									padding-bottom: 20rpx;
							 | 
						|
									border-bottom: 1px solid #f0f0f0;
							 | 
						|
									margin-bottom: 30rpx;
							 | 
						|
									
							 | 
						|
									.create-time {
							 | 
						|
										font-size: 24rpx;
							 | 
						|
										color: #999;
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.article-content {
							 | 
						|
									line-height: 1.6;
							 | 
						|
									
							 | 
						|
									// 富文本内容样式
							 | 
						|
									:deep(.uv-parse) {
							 | 
						|
										font-size: 30rpx;
							 | 
						|
										color: #333;
							 | 
						|
								
							 | 
						|
										// 图片样式由 uv-parse 的 tag-style 控制
							 | 
						|
										
							 | 
						|
										// 段落样式
							 | 
						|
										p {
							 | 
						|
											margin: 20rpx 0;
							 | 
						|
											line-height: 1.8;
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										// 标题样式
							 | 
						|
										h1, h2, h3, h4, h5, h6 {
							 | 
						|
											margin: 30rpx 0 20rpx 0;
							 | 
						|
											font-weight: bold;
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										h1 { font-size: 36rpx; }
							 | 
						|
										h2 { font-size: 34rpx; }
							 | 
						|
										h3 { font-size: 32rpx; }
							 | 
						|
										
							 | 
						|
										// 列表样式
							 | 
						|
										ul, ol {
							 | 
						|
											padding-left: 40rpx;
							 | 
						|
											margin: 20rpx 0;
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										li {
							 | 
						|
											margin: 10rpx 0;
							 | 
						|
											line-height: 1.6;
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										// 引用样式
							 | 
						|
										blockquote {
							 | 
						|
											border-left: 4rpx solid #ddd;
							 | 
						|
											padding-left: 20rpx;
							 | 
						|
											margin: 20rpx 0;
							 | 
						|
											color: #666;
							 | 
						|
											font-style: italic;
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										// 代码样式
							 | 
						|
										code {
							 | 
						|
											background-color: #f5f5f5;
							 | 
						|
											padding: 4rpx 8rpx;
							 | 
						|
											border-radius: 4rpx;
							 | 
						|
											font-family: monospace;
							 | 
						|
											font-size: 26rpx;
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										pre {
							 | 
						|
											background-color: #f5f5f5;
							 | 
						|
											padding: 20rpx;
							 | 
						|
											border-radius: 8rpx;
							 | 
						|
											overflow-x: auto;
							 | 
						|
											margin: 20rpx 0;
							 | 
						|
											
							 | 
						|
											code {
							 | 
						|
												background: none;
							 | 
						|
												padding: 0;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								</style>
							 |