From c6793e5475b607e83cbb55b7d0ddfb9b81bd7774 Mon Sep 17 00:00:00 2001
From: inleft <inleft@qq.com>
Date: Thu, 25 Aug 2022 04:09:06 +0800
Subject: [PATCH] 日志内容详情页多媒体适配 markdown 内图片增加viewer相应

---
 src/components/mini/box15-videoPlayBox.vue |   11 +
 src/components/mini/mdDetail.vue           |  203 ++++++++++++++++++++++++++++++++--------
 src/components/mini/box10-add.vue          |   12 +
 src/components/mini/box13-reply.vue        |    2 
 src/config/v-viewer-Config.js              |    4 
 src/components/group/platformGroup.vue     |    5 
 src/main.js                                |    4 
 src/components/mini/box-new-article.vue    |   16 +-
 src/config/screenConfig.js                 |    4 
 src/config/router.config.js                |    1 
 src/components/mini/box16-videoDetail.vue  |   16 ---
 src/components/mini/box18-photoShow.vue    |    2 
 12 files changed, 198 insertions(+), 82 deletions(-)

diff --git a/src/components/group/platformGroup.vue b/src/components/group/platformGroup.vue
index bf2bad1..2830b59 100644
--- a/src/components/group/platformGroup.vue
+++ b/src/components/group/platformGroup.vue
@@ -1,5 +1,5 @@
 <template>
-
+	
 	<a-tabs :defaultActiveKey="activeKey" @change="changeKey"
 		:tabBarStyle="{'display': 'flex','justify-content': 'center'}">
 		<a-tab-pane :key="keyType.type_1" tab="片刻">
@@ -44,8 +44,9 @@
 					var random = Math.floor(Math.random() * 10);
 					this.activeKey = random >= 8 ?
 						this.keyType.type_3 : (random <= 3 ? this.keyType.type_2 : this.keyType.type_1)
+						
+					this.$router.replace({query:{activeKey:this.activeKey}})
 				}
-				this.$router.replace({query:{activeKey:this.activeKey}})
 			},
 			changeKey(key) {
 				this.activeKey = key
diff --git a/src/components/mini/box-new-article.vue b/src/components/mini/box-new-article.vue
index af47074..a18bd7f 100644
--- a/src/components/mini/box-new-article.vue
+++ b/src/components/mini/box-new-article.vue
@@ -96,9 +96,9 @@
 		methods: {
 			routerJump(id, articleFileType, typeId) {
 				let routerName = "mdDetail";
-				if (articleFileType == this.fileType.fileTypeVideo_3) {
-					routerName = "videoDetail";
-				}
+				// if (articleFileType == this.fileType.fileTypeVideo_3) {
+				// 	routerName = "videoDetail";
+				// }
 
 				this.$router.push({
 					name: routerName,
@@ -107,11 +107,11 @@
 						articleFileType: articleFileType,
 						typeId: typeId
 					},
-					params: {
-						id: id,
-						articleFileType: articleFileType,
-						typeId: typeId
-					}
+					// params: {
+					// 	id: id,
+					// 	articleFileType: articleFileType,
+					// 	typeId: typeId
+					// }
 				})
 			},
 			routerToPlatform() {
diff --git a/src/components/mini/box10-add.vue b/src/components/mini/box10-add.vue
index 7c22647..23df05f 100644
--- a/src/components/mini/box10-add.vue
+++ b/src/components/mini/box10-add.vue
@@ -58,7 +58,7 @@
 					</span>
 				</a-form-model-item>
 
-				<a-form-model-item label=" 日志类型">
+				<a-form-model-item label=" 日志主类型">
 					<a-select v-model="form.blogType" mode="default" placeholder=""
 						:getPopupContainer="getCalendarContainer()">
 						<a-select-option value="1">
@@ -68,10 +68,16 @@
 							html
 						</a-select-option>
 						<a-select-option value="3">
-							video
+							视频
+						</a-select-option>
+						<a-select-option value="3">
+							音频
 						</a-select-option>
 						<a-select-option value="5">
-							fast(闪念)
+							图组
+						</a-select-option>
+						<a-select-option value="9">
+							taking
 						</a-select-option>
 					</a-select>
 				</a-form-model-item>
diff --git a/src/components/mini/box13-reply.vue b/src/components/mini/box13-reply.vue
index e993fa4..237e20d 100644
--- a/src/components/mini/box13-reply.vue
+++ b/src/components/mini/box13-reply.vue
@@ -31,7 +31,7 @@
 				<span v-html="parseContent(msgInfo.userComment).replace(/\n/g, '<br>')"></span>
 			</div>
 		</div>
-		<a-comment>
+		<a-comment  style="min-height: 320px;">
 			<div slot="content">
 				<MyOwO :content.sync="form.visitorContent" :replyHolder="replyHolder"></MyOwO>
 				<div>
diff --git a/src/components/mini/box15-videoPlayBox.vue b/src/components/mini/box15-videoPlayBox.vue
index 4ce96af..008d666 100644
--- a/src/components/mini/box15-videoPlayBox.vue
+++ b/src/components/mini/box15-videoPlayBox.vue
@@ -1,12 +1,12 @@
 <template>
 	<div>
-		<div>
+		<div v-if="!this.$attrs.showTar">
 			正在播放: <span> {{playingVideoData.title}} </span>
 		</div>
 		<div class="myVideo fade">
 			<div id="videoPlay" ref="myVdeoPlay"></div>
 		</div>
-		<div style="border-radius: 0 0 4px 4px;">
+		<div style="border-radius: 0 0 4px 4px;" v-if="!this.$attrs.showTar">
 
 			<div style="padding: 10px 0px;">
 				音量 :
@@ -163,7 +163,14 @@
 					this.$message.error("无效资源..")
 					return
 				}
+				
+				if (videoData.url != null && videoData.urlL != "" && videoData.url.endsWith("m3u8")) {
+					videoData.type = "customHls";
+				} else {
+					videoData.type = "normal";
+				}
 
+				
 				//重要!!防止hls类型视频在切换后不停在后台缓存
 				if (this.hls != null) {
 					this.hls.destroy();
diff --git a/src/components/mini/box16-videoDetail.vue b/src/components/mini/box16-videoDetail.vue
index c9acaac..c900020 100644
--- a/src/components/mini/box16-videoDetail.vue
+++ b/src/components/mini/box16-videoDetail.vue
@@ -163,13 +163,12 @@
 						this.myLock = !this.myLock;
 						return
 					}
-					console.log(3333);
+
 					if (res.data.videoUrlList == null || res.data.videoUrlList.length < 1) {
 						this.$notification.error({
 							message: '该日志还没有上传视频资源..',
 							placement: 'bottomRight'
 						});
-						return
 					}
 
 					this.isAllowedComment = res.data.isAllowedComment;
@@ -181,15 +180,6 @@
 					this.videoData.title = res.data.title;
 					this.videoData.introduce = res.data.introduce;
 					this.videoData.id = res.data.id;
-
-
-					if (res.data.articleFileURL != null &&
-						res.data.articleFileURL != "" &&
-						res.data.articleFileURL.endsWith("m3u8")) {
-						this.videoData.type = "customHls";
-					} else {
-						this.videoData.type = "normal";
-					}
 
 					this.myLock = !this.myLock;
 					if (this.lastArticleId != this.articleId) {
@@ -203,10 +193,6 @@
 	}
 </script>
 <style lang="less">
-	pre {
-		font-family: 'HYTangMeiRen';
-		src: url("http://t.inleft.com/share/z%E5%AD%97%E4%BD%93%E5%BA%93/hytmr55%E6%B1%89%E4%BB%AA%E5%94%90%E7%BE%8E%E4%BA%BA%E5%AD%97%E4%BD%93.woff") format("truetype");
-	}
 
 	.boxMain {
 		user-select: none;
diff --git a/src/components/mini/box18-photoShow.vue b/src/components/mini/box18-photoShow.vue
index 3439a8a..ca09f8e 100644
--- a/src/components/mini/box18-photoShow.vue
+++ b/src/components/mini/box18-photoShow.vue
@@ -11,7 +11,7 @@
 					<div class="entry-post">
 						<div class="entry-header">
 							<h5 class="entry-title">
-								<router-link :to="{name:'mdDetail',query:{id:item.id,typeId:item.articleTypeId}}" :title="item.title">
+								<router-link :to="{name:'mdDetail',query:{id:item.id}}" :title="item.title">
 									{{item.title}}
 								</router-link>
 							</h5>
diff --git a/src/components/mini/mdDetail.vue b/src/components/mini/mdDetail.vue
index 7c8734a..dd91201 100644
--- a/src/components/mini/mdDetail.vue
+++ b/src/components/mini/mdDetail.vue
@@ -6,13 +6,20 @@
 			</figure>
 		</div>
 
-		<div v-if="showMsg && !myLock">
-			<div class="mySecretSamll" v-if="articleFileType==fileType.fileTypeTalking_9">
-				<p>碎碎念只有那么一点了</p>
-				<p>但是下面依旧可以碎碎念</p>
-			</div>
+		<div class="mySecret" v-if="myLock">
+			<h1>越不正经的人越深情..</h1>
+			<h3>受庇护的文字..输入神秘代码以解除封印</h3>
 
-			<div class="mySecret" v-else>
+			<a-auto-complete v-model="secret" ref="mySearch" v-bind="search" @blur="pressEnter">
+				<a-input-password @pressEnter="pressEnter">
+					<a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" />
+				</a-input-password>
+			</a-auto-complete>
+			<span class="myTip">{{errorMsg}}</span>
+		</div>
+
+		<div v-else-if="showMsg">
+			<div class="mySecret">
 				<h1>怎样才能让你看到我呢</h1>
 				<h1>只要你要,只要我有...</h1>
 				<span class="myTip">{{errorMsg}}</span>
@@ -20,37 +27,62 @@
 		</div>
 
 		<div v-else>
-			<div class="mySecret" v-if="myLock">
-				<h1>越不正经的人越深情..</h1>
-				<h3>受庇护的文字..输入神秘代码以解除封印</h3>
+			<div v-if="articleFileType==fileType.fileTypeTalking_9">
+				<div class="markdown-body  articleTitle">
+					<h4>{{articelMeta.title}}</h4>
 
-				<a-auto-complete v-model="secret" ref="mySearch" v-bind="search" @blur="pressEnter">
-					<a-input-password @pressEnter="pressEnter">
-						<a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" />
-					</a-input-password>
-				</a-auto-complete>
-				<span class="myTip">{{errorMsg}}</span>
-			</div>
-
-			<div class="mySecret" v-else-if="articleFileType==fileType.fileTypeVideo_3
-				|| articleFileType==fileType.fileTypeVideo_3
-				|| articleFileType==fileType.fileTypeTalking_9">
-
-				<div class="mySecretSamll" v-if="introduce.length==0">
-					<p>碎碎念只有那么一点了22</p>
-					<p>但是下面依旧可以碎碎念</p>
+					<div class="introduceSamll" v-if="introduce.length==0">
+						<p>空荡荡的..我好像忘记写点什么了OωO</p>
+					</div>
+					<div class="introduce" v-else>
+						<pre style="white-space: pre-line;padding: 10px;max-width: 100%;">
+						{{introduce}}
+						</pre>
+					</div>
 				</div>
-				<pre style="white-space: pre-line;padding: 10px;max-width: 100%;">
-					{{introduce}}
-				</pre>
 			</div>
-			<div v-viewer.static class="markdown-body article-detail" v-else>
+
+			<div class="introduce"
+				v-else-if="articleFileType==fileType.fileTypeVideo_3 || articleFileType==fileType.fileTypeMp3_4">
+				<div class="markdown-body  articleTitle">
+					<h4>{{articelMeta.title}}</h4>
+				</div>
+				<div class="playBox">
+					<videoPlayBox ref="videoPlayBox" :showTar="true"></videoPlayBox>
+				</div>
+				<div class="introduce">
+					<pre style="white-space: pre-line;padding: 10px;max-width: 100%;">
+					{{introduce}}
+					</pre>
+				</div>
+			</div>
+
+			<div class="introduce" v-else-if="articleFileType==fileType.fileTypePictures_5">
+				<div class="markdown-body  articleTitle">
+					<h4>{{articelMeta.title}}</h4>
+				</div>
+				<div class="myPicture" @click="showPicture(articelMeta.pictureUrlList)">
+					<div>
+						<img :src="articelMeta.pictureUrlList[0]" :key="articelMeta.id" alt="" loading="lazy"
+							:onerror="img404">
+					</div>
+					<div style="text-align: center;">图组数量:{{articelMeta.pictureUrlList.length}}</div>
+				</div>
+				<div class="introduce">
+					<pre style="white-space: pre-line;padding: 10px;max-width: 100%;">
+					{{introduce}}
+					</pre>
+				</div>
+			</div>
+
+			<div v-viewer.static="options" class="markdown-body " v-else>
 				<div class="articleTitle">
 					<h4>{{articelMeta.title}}</h4>
 				</div>
 				<vue-markdown :source="source"></vue-markdown>
 			</div>
 		</div>
+
 		<!-- <div class="articleInfoMiniData">
 			<div>
 				<a-icon type="calendar" class="samllPadding" />
@@ -74,7 +106,12 @@
 				<a-icon type="folder-open" class="samllPadding" />
 		</div> -->
 
+		<div class="jumpURL" v-if="articelMeta.jumpURL">
+			外链:<a target="_blank" :href="articelMeta.jumpURL" :title="articelMeta.jumpURL">{{articelMeta.jumpURL}}</a>
+		</div>
+		
 		<div class="articleInfoMiniData">
+
 			<div class="myTitleDeal">
 				<a-icon type="left" />
 				<a-tooltip placement="bottomLeft" :title="'上一篇: '+articelMeta.previousRecord.title"
@@ -87,6 +124,7 @@
 				</a-tooltip>
 				<span v-else class="myTip">到顶啦..</span>
 			</div>
+
 			<div style="display: -webkit-box;">
 				<div class="myTitleDeal">
 					<a-tooltip placement="bottomLeft" :title="'下一篇: '+articelMeta.nextRecord.title"
@@ -117,27 +155,37 @@
 	import {
 		queryBlogArticleDetail
 	} from '../../api/blogArticle.js'
-	
+
 	import comment from "../mini/box12-comment.vue"
 
 	import axios from 'axios'
 	import myConstant from "../../config/myConstant.js"
+	import optionsConfig from "../../config/v-viewer-Config.js"
+	import videoPlayBox from "../mini/box15-videoPlayBox.vue"
+	import {
+		api as viewerApi
+	} from "v-viewer"
+
 
 	export default {
 		components: {
 			VueMarkdown,
-			comment
+			comment,
+			videoPlayBox
 		},
 		data() {
 			return {
-				fileType: myConstant.fileType,
-				articelMeta: '',
-				isAllowedComment: 1,
-				introduce: "",
 				articleId: "",
 				articleFileType: myConstant.fileType.fileTypeMarkDown_1,
 				typeId: null,
+
+				fileType: myConstant.fileType,
+				articelMeta: '',
+				isAllowedComment: 1,
+				coverURL: "",
+				introduce: "",
 				source: "",
+
 				showMsg: false,
 				myLock: false,
 				errorMsg: '',
@@ -149,22 +197,33 @@
 					value: '',
 					disabled: false
 				},
-				coverURL: ""
+				videoData: {
+					img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg",
+					url: "",
+					type: "normal",
+					title: "",
+					introduce: "",
+					id: ""
+				},
+				options: optionsConfig,
+				img404: myConstant.img404,
 			}
 		},
 		created() {
-			console.log(111);
-			console.log(this.$route.params);
 			this.articleId = this.$route.query.id;
 			this.articleFileType = this.$route.query.articleFileType;
 			this.typeId = this.$route.query.typeId;
+
+
 		},
 		watch: {
 			'$route'(to, from) {
 				if ("mdDetail" === to.name) {
-					this.articleId = this.$route.query.id;
-					this.articleFileType = this.$route.query.articleFileType;
-					this.typeId = this.$route.query.typeId;
+					if (this.articleId != this.$route.query.id) {
+						this.articleId = this.$route.query.id;
+						this.articleFileType = this.$route.query.articleFileType;
+						this.typeId = this.$route.query.typeId;
+					}
 				}
 			},
 			articleId: function(newValue, oldValue) {
@@ -181,9 +240,16 @@
 			articleOptionHandle(type) {
 				this.$message.info(type)
 			},
+			showPicture(param) {
+				viewerApi({
+					options: this.options,
+					images: param
+				})
+			},
 			queryDetail() {
 				this.showMsg = true;
 				this.errorMsg = "加载中..";
+				let _this = this;
 
 				queryBlogArticleDetail({
 					id: this.articleId,
@@ -191,7 +257,6 @@
 					typeId: this.typeId,
 					fileType: this.articleFileType
 				}).then((res) => {
-					this.showMsg = true;
 					this.myLock = false;
 					this.errorMsg = res.message;
 					this.source = "";
@@ -238,6 +303,30 @@
 									this.$message.error("获取文件好像失败了..", 3)
 								])
 						}
+					} else if (res.data.articleFileType == this.fileType.fileTypeVideo_3) {
+						if (res.data.videoUrlList == null || res.data.videoUrlList.length < 1) {
+							this.$notification.error({
+								message: '该日志还没有上传视频资源..',
+								placement: 'bottomRight'
+							});
+						} else {
+							this.videoData.url = res.data.videoUrlList[0];
+
+							this.videoData.img = res.data.coverFileURL;
+							this.videoData.title = res.data.title;
+							this.videoData.introduce = res.data.introduce;
+							this.videoData.id = res.data.id;
+							if (this.lastArticleId != this.articleId) {
+								console.log(111);
+								let tempParam = JSON.parse(JSON.stringify(this.videoData))
+
+								_this.$nextTick(function() {
+									_this.$refs.videoPlayBox.startPlay(tempParam)
+								})
+							}
+						}
+
+
 					}
 
 					//获取日志资源文件
@@ -276,6 +365,19 @@
 		text-align: center;
 		width: 100%;
 
+	}
+
+	.myPicture {
+		display: grid;
+		width: 50%;
+		padding: 20px 0px 0px 0px;
+
+		img {
+			display: block;
+			width: 100%;
+			transition: all 0.5s cubic-bezier(0.25, 0.1, 0.25, 1);
+			border-radius: 16px;
+		}
 	}
 
 	.headertop {
@@ -345,6 +447,16 @@
 		-o-transform: scale(1.55, 1.55);
 	}
 
+	.jumpURL {
+		box-shadow: 8px 8px 18px rgba(0, 0, 0, 0.1), -8px -8px 18px #ffffff;
+		padding: 10px 23px;
+		margin: 20px 0px;
+
+		a {
+			color: black;
+		}
+	}
+
 	.articleInfoMiniData {
 		user-select: none;
 		box-shadow: 8px 8px 18px rgba(0, 0, 0, 0.1), -8px -8px 18px #ffffff;
@@ -371,7 +483,11 @@
 	}
 
 	.mySecret {
-		height: 515px;
+		height: 315px;
+	}
+
+	.mySecret,
+	.introduce {
 		display: flex;
 		flex-direction: column;
 		justify-content: center;
@@ -379,7 +495,8 @@
 		align-items: center;
 	}
 
-	.mySecretSamll {
+	.mySecretSamll,
+	.introduceSamll {
 		padding: 30px 10px 10px;
 		height: 115px;
 		display: flex;
diff --git a/src/config/router.config.js b/src/config/router.config.js
index fdb71e3..98a4291 100644
--- a/src/config/router.config.js
+++ b/src/config/router.config.js
@@ -80,7 +80,6 @@
 				}]
 			},
 			{
-				name: "platform",
 				path: '/platform',
 				component: platform,
 				children: [
diff --git a/src/config/screenConfig.js b/src/config/screenConfig.js
index e89e446..4fbad03 100644
--- a/src/config/screenConfig.js
+++ b/src/config/screenConfig.js
@@ -75,8 +75,8 @@
 			offset: 4,
 		},
 		xxl: {
-			span: 17,
-			offset: 4,
+			span: 13,
+			offset: 6,
 		},
 	},
 	// 放大版布局
diff --git a/src/config/v-viewer-Config.js b/src/config/v-viewer-Config.js
index f47e341..a097612 100644
--- a/src/config/v-viewer-Config.js
+++ b/src/config/v-viewer-Config.js
@@ -4,7 +4,7 @@
 	'button': true, // 是否显示右上角关闭按钮
 	'navbar': true, // 是否显示缩略图底部导航栏
 	'title': false, // 是否显示当前图片标题,默认显示alt属性内容和尺寸
-	'toolbar': false, // 是否显示工具栏
+	'toolbar': true, // 是否显示工具栏
 	'tooltip': true, // 放大或缩小图片时,是否显示缩放百分比,默认true
 	'fullscreen': true, // 播放时是否全屏,默认true
 	'loading': true, // 加载图片时是否显示loading图标,默认true
@@ -12,7 +12,7 @@
 	'movable': true, // 是否可以拖得图片,默认true
 	'zoomable': true, // 是否可以缩放图片,默认true
 	'rotatable': true, // 是否可以旋转图片,默认true
-	'scalable': true, // 是否可以翻转图片,默认true
+	'scalable': false, // 是否可以翻转图片,默认true
 	'toggleOnDblclick': true, // 放大或缩小图片时,是否可以双击还原,默认true
 	'transition': true, // 使用 CSS3 过度,默认true
 	'keyboard': true, // 是否支持键盘,默认true
diff --git a/src/main.js b/src/main.js
index bdf259d..452adff 100644
--- a/src/main.js
+++ b/src/main.js
@@ -12,8 +12,8 @@
 
 import 'viewerjs/dist/viewer.css'
 import VueViewer from 'v-viewer'
- Vue.use(VueViewer)
- 
+Vue.use(VueViewer)
+
 
 import 'animate.css'
 // import wow from 'wowjs'

--
Gitblit v1.9.1