From 1cf6d9fb8cf2f10e302509f033d8d55b4e60712c Mon Sep 17 00:00:00 2001
From: inleft <inleft@qq.com>
Date: Sun, 14 Aug 2022 01:45:42 +0800
Subject: [PATCH] 优化友链布局,月台窗口自适应,处理hls取消后仍然缓存问题

---
 src/components/mini/box-friend.vue         |   27 +++--
 src/components/mini/box15-videoPlayBox.vue |   92 +++++++++++++++---
 src/components/mini/box10-add.vue          |    7 
 src/components/mini/box13-reply.vue        |    4 
 src/components/group/MyVideo.vue           |   31 +++++
 src/components/mini/box14-video.vue        |   20 +--
 src/components/mini/box-17-linkAdd.vue     |   11 +-
 src/components/mini/box16-videoDetail.vue  |   53 ++++++++--
 src/components/mini/tagInfo.vue            |    4 
 9 files changed, 184 insertions(+), 65 deletions(-)

diff --git a/src/components/group/MyVideo.vue b/src/components/group/MyVideo.vue
index 17fc80c..c04e931 100644
--- a/src/components/group/MyVideo.vue
+++ b/src/components/group/MyVideo.vue
@@ -1,10 +1,11 @@
 <template>
 	<div class="myModal">
-		<a-modal v-model="visible" title="视频盒子" :footer="null" :mask="false" :maskClosable="true"
-			:bodyStyle="{'overflow':'overlay','maxHeight': '750px'}" :afterClose="afterClose">
-			<videoDetail ref="videoDetail"></videoDetail>
+		<a-modal v-model="visible" title="视频盒子" :width="myWidth" :footer="null" :mask="false" :maskClosable="true"
+			:bodyStyle="{'overflow':'overlay','height': '750px'}" :afterClose="afterClose" >
+			<videoDetail ref="videoDetail" :showFade="showFade"></videoDetail>
 		</a-modal>
 	</div>
+
 </template>
 
 <script>
@@ -13,6 +14,14 @@
 	export default {
 		components: {
 			videoDetail,
+		},
+		mounted() {
+			this.juseWidth(document.body.clientWidth)
+			window.onresize = () => {
+				return (() => {
+					this.juseWidth(document.body.clientWidth)
+				})();
+			};
 		},
 		watch: {
 			// '$route'(to, from) {
@@ -36,9 +45,22 @@
 			return {
 				visible: false,
 				articleId: "",
+				myWidth: 410,
+				showFade: true,
 			}
 		},
 		methods: {
+			juseWidth(screenWidth) {
+				this.showFade = true;
+				if (screenWidth > 1000) {
+					this.myWidth = 1000
+				} else if (screenWidth > 767) {
+					this.myWidth = 600
+				} else {
+					this.myWidth = 410
+					this.showFade = false;
+				}
+			},
 			showModal(param) {
 				this.visible = true;
 				this.$nextTick(function() {
@@ -56,4 +78,7 @@
 </script>
 <style scoped>
 
+
+
+
 </style>
diff --git a/src/components/mini/box-17-linkAdd.vue b/src/components/mini/box-17-linkAdd.vue
index b263c30..1284041 100644
--- a/src/components/mini/box-17-linkAdd.vue
+++ b/src/components/mini/box-17-linkAdd.vue
@@ -19,6 +19,7 @@
 					</a-select-option>
 				</a-select>
 			</a-form-model-item>
+			
 
 			<a-form-model-item label="avatar" prop="avatar">
 				<a-input v-model="form.avatar" placeholder="链接图片地址" />
@@ -53,7 +54,7 @@
 					url: '',
 					avatar: '',
 					remark: '',
-					linkType: '',
+					linkType: undefined,
 					topValue: 50,
 					isNewWindowOpen: 1
 				},
@@ -90,8 +91,8 @@
 						},
 						{
 							trigger: 'blur',
-							pattern: /^((https|http)?:\/\/)[^\s]+/,
-							message: '仅支持 https | http'
+							pattern: /^((https|http)?:\/\/)+/,
+							message: '仅支持 https:// | http://'
 						}
 					],
 					linkType: [{
@@ -103,8 +104,8 @@
 						required: false,
 					}, {
 						trigger: 'blur',
-						pattern: /^((https|http)?:\/\/)[^\s]+/,
-						message: '仅支持 https | http'
+						pattern: /^((https|http)?:\/\/)+/,
+						message: '仅支持 https:// | http://'
 					}],
 
 				}
diff --git a/src/components/mini/box-friend.vue b/src/components/mini/box-friend.vue
index 49e55ce..c2328c1 100644
--- a/src/components/mini/box-friend.vue
+++ b/src/components/mini/box-friend.vue
@@ -191,24 +191,31 @@
 	@media screen and (min-width: 1600px) {
 		.link-box a {
 			margin: 0 0.9375rem 3.75rem;
-			width: -webkit-calc(100% / 5 - 1.875rem);
-			width: calc(100% / 5 - 1.875rem);
+			width: -webkit-calc(100% / 5 - 4rem);
+			width: calc(100% / 5 - 4rem);
 		}
 	}
 
-	@media screen and (max-width: 1599px) and (min-width: 768px) {
+	@media screen and (max-width: 1599px) and (min-width: 1439px) {
 		.link-box a {
 			margin: 0 0.9375rem 3.75rem;
-			width: -webkit-calc(100% / 4 - 1.875rem);
-			width: calc(100% / 4 - 1.875rem);
+			width: -webkit-calc(100% / 3 - 8rem);
+			width: calc(100% / 3 - 8rem);
+		}
+	}
+	@media screen and (max-width: 1438px) and (min-width: 791px) {
+		.link-box a {
+			margin: 0 0.9375rem 3.75rem;
+			width: -webkit-calc(100% / 4 - 2.3rem);
+			width: calc(100% / 4 - 2.3rem);
 		}
 	}
 
-	@media screen and (max-width: 767px) and (min-width: 501px) {
+	@media screen and (max-width: 790px) and (min-width: 501px) {
 		.link-box a {
 			margin: 0 0.9375rem 3.75rem;
-			width: -webkit-calc(100% / 3 - 1.875rem);
-			width: calc(100% / 3 - 1.875rem);
+			width: -webkit-calc(100% / 3 - 2.3rem);
+			width: calc(100% / 3 - 2.3rem);
 		}
 	}
 
@@ -216,8 +223,8 @@
 	@media screen and (max-width: 500px) and (min-width: 319px) {
 		.link-box a {
 			margin: 0 0.75rem 1.5rem;
-			width: -webkit-calc(50% - 1.5rem);
-			width: calc(50% - 1.5rem);
+			width: -webkit-calc(100% / 3 - 1.5rem);
+			width: calc(100% / 3 - 1.5rem);
 		}
 
 		.blog-main {
diff --git a/src/components/mini/box10-add.vue b/src/components/mini/box10-add.vue
index 8800027..4c2b300 100644
--- a/src/components/mini/box10-add.vue
+++ b/src/components/mini/box10-add.vue
@@ -24,7 +24,7 @@
 			<a-form-model-item label="日志文件" v-show="!form.online">
 				<a-upload ref="blogFileUpload" :customRequest="customRequest" name="file" :showUploadList="true"
 					@change="handleChange" :default-file-list="form.blogFileList" :beforeUpload="beforeUpload"
-					:data="{'fileType':fileTypeMarkDown}" accept=".md,.html,.htm,.txt">
+					:data="{'fileType':myConstant.fileTypeMarkDown}" accept=".md,.html,.htm,.txt">
 					<a-button>
 						<a-icon type="upload" />限 markdown/html
 					</a-button>
@@ -102,7 +102,7 @@
 
 				<a-form-model-item label="封面">
 					<a-upload :customRequest="customRequest" name="file" :showUploadList="true" list-type="picture"
-						:data="{'fileType':fileTypeCover}" @change="handleChangeCoverFile"
+						:data="{'fileType':myConstant.fileTypeCover}" @change="handleChangeCoverFile"
 						:default-file-list="form.coverFileList" :beforeUpload="beforeUploadCover"
 						accept=".jpg,.png,.jpeg">
 						<!-- :disabled="form.coverFileList.length>=1" -->
@@ -213,8 +213,7 @@
 			};
 
 			return {
-				fileTypeMarkDown: myConstant.fileTypeMarkDown,
-				fileTypeCover: myConstant.fileTypeCover,
+				myConstant: myConstant,
 				blogArticleType: [],
 				tags: [],
 				inputVisible: false,
diff --git a/src/components/mini/box13-reply.vue b/src/components/mini/box13-reply.vue
index 6fa0307..95634b1 100644
--- a/src/components/mini/box13-reply.vue
+++ b/src/components/mini/box13-reply.vue
@@ -232,8 +232,8 @@
 					}],
 					"homePage": [{
 						trigger: 'blur',
-						pattern: /^((https|http)?:\/\/)[^\s]+/,
-						message: '仅支持 https | http'
+						pattern: /^((https|http)?:\/\/)+/,
+						message: '仅支持 https:// | http://'
 					}, {
 						trigger: 'blur',
 						max: 50,
diff --git a/src/components/mini/box14-video.vue b/src/components/mini/box14-video.vue
index 2ef594c..328edae 100644
--- a/src/components/mini/box14-video.vue
+++ b/src/components/mini/box14-video.vue
@@ -271,27 +271,25 @@
 		overflow: hidden;
 	}
 
-	@media screen and (max-width:1024px) {
+	@media screen and (min-width:768px) {
+		.gridClass {
+			grid-template-columns: repeat(2, 1fr);
+		}
+	}
+	
+	@media screen and (max-width:767px) {
 		.gridClass {
 			grid-row-gap: 2rem;
 			grid-column-gap: 0rem;
 			grid-template-columns: repeat(1, 1fr);
-
+	
 			.entry-preview {
 				display: block;
 			}
-
+	
 			.thumbnail_box {
 				min-width: 100%;
 			}
-		}
-
-
-	}
-
-	@media screen and (min-width:1025px) {
-		.gridClass {
-			grid-template-columns: repeat(2, 1fr);
 		}
 	}
 </style>
diff --git a/src/components/mini/box15-videoPlayBox.vue b/src/components/mini/box15-videoPlayBox.vue
index 0a6b19b..34690fd 100644
--- a/src/components/mini/box15-videoPlayBox.vue
+++ b/src/components/mini/box15-videoPlayBox.vue
@@ -3,13 +3,18 @@
 		<div>
 			正在播放: <span> {{playingVideoData.title}} </span>
 		</div>
-		<div class="myVideo">
+		<div class="myVideo fade">
 			<div id="videoPlay" ref="myVdeoPlay"></div>
 		</div>
 		<div style="border-radius: 0 0 4px 4px;">
 			<div style="padding: 10px 0px;">
 				音量 :
 				<a-slider v-model="volumeInit" :default-value="0.1" :step="0.1" :max="1" @change="changeVolume" />
+			</div>
+			<div style="padding: 10px 0px;">
+				播放进度 : {{Math.floor(currentTime/60)}}:{{Math.floor(currentTime%60)}} /
+				{{Math.floor(duration/60)}}:{{Math.floor(duration%60)}}
+				<a-slider v-model="currentTime" :max="duration" @afterChange="changeTime" />
 			</div>
 			<a-collapse activeKey="playHistory">
 				<a-collapse-panel key="playHistory" header="播放记录">
@@ -18,7 +23,9 @@
 							<a-tooltip placement="bottomRight" title="播放/暂停">
 								<div @click="togglePlay" class="playItem">
 									{{item.title}}
-									<a-icon type="youtube" class="playIcon" />
+									<span v-if="!isPlaying " class="myTip">(已暂停)</span>
+									<a-icon type="youtube" class="playIcon "
+										v-bind:class="{ activeElement: isPlaying }" />
 								</div>
 							</a-tooltip>
 						</div>
@@ -52,6 +59,8 @@
 				volumeInit: 0.1,
 				isPlaying: false,
 				swichLock: false,
+				currentTime: 0,
+				duration: 0,
 				playingVideoData: {
 					img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg",
 					url: "",
@@ -59,7 +68,7 @@
 					title: "",
 					id: ""
 				},
-
+				hls: null,
 			}
 		},
 		mounted() {
@@ -74,13 +83,23 @@
 
 			this.dp.on('pause', function() {
 				_this.$message.info("停止播放")
-				this.isPlaying = false;
+				_this.isPlaying = false;
 			});
 
 			this.dp.on('play', function() {
 				_this.$message.info("开始播放..")
-				this.isPlaying = true;
+				_this.isPlaying = true;
+				_this.duration = _this.dp.video.duration;
+				_this.currentTime = _this.dp.video.currentTime;
 			});
+			this.dp.on('timeupdate', function() {
+				//_this.$message.info("进度..")
+				_this.currentTime = _this.dp.video.currentTime;
+			});
+			this.dp.on('volumechange', function() {
+				_this.volumeInit = _this.dp.video.volume;
+			});
+
 		},
 		methods: {
 			togglePlay() {
@@ -89,6 +108,9 @@
 			},
 			changeVolume(value) {
 				this.dp.volume(value, true, false);
+			},
+			changeTime(time) {
+				this.dp.seek(time)
 			},
 			//切换视频源
 			swichPlay(videoId) {
@@ -106,11 +128,12 @@
 				this.$message.info("切换视频源..", 1)
 				this.swichLock = !this.swichLock;
 
+
 				this.startPlay(tempData)
 
 				setTimeout(() => {
 					this.swichLock = !this.swichLock;
-				}, 5000);
+				}, 2000);
 
 				//通知父组件更换评论信息
 				this.$emit("swichPlay", tempData)
@@ -130,18 +153,29 @@
 			},
 			//加载播放
 			startPlay(videoData) {
+				//重要!!防止hls类型视频在切换后不停在后台缓存
+				if (this.hls != null) {
+					this.hls.destroy();
+				}
 
 				this.adjustOrder(videoData)
 
 				this.playingVideoData = videoData
 
 				this.isPlaying = false;
-				this.dp.switchVideo(this.playingVideoData, null)
 
+				//重要!!防止hls类型视频在切换后不停在后台缓存
+				if (videoData.type == "customHls") {
+					this.hls = new Hls();
+				}
 
+				setTimeout(() => {
+					this.dp.switchVideo(this.playingVideoData)
+				}, 500);
 			},
 			//播放器初始化
 			init() {
+				var _this = this;
 				this.dp = new DPlayer({
 					element: document.getElementById("videoPlay"),
 					//logo: "https://qczh-1252727916.cos.ap-nanjing.myqcloud.com/pic/273658f508d04d488414fd2b84c9f923.png", // 在视频左上角上打一个logo
@@ -152,7 +186,7 @@
 					lang: "zh-cn", // 语言,'en', 'zh-cn', 'zh-tw'
 					// screenshot: true, // 是否允许截图(按钮),点击可以自动将截图下载到本地
 					preload: "metadata", // 自动预加载 'none', 'metadata', 'auto'
-					volume: this.volumeInit, // 初始化音量
+					volume: _this.volumeInit, // 初始化音量
 					playbackSpeed: [2, 1, 0.5], //可选的播放速度,可自定义
 					contextmenu: [
 						//右键菜单
@@ -172,15 +206,17 @@
 						// },
 					],
 					video: {
-						pic: this.defalutImg, // 视频封面
+						pic: _this.defalutImg, // 视频封面
 						// url: videoInfo.url,
 						//url: "http://t.inleft.com/share/mp3/EOPMusic%282%29.mp3",
 						type: "normal",
 						customType: {
 							customHls: function(video, player) {
-								const hls = new Hls()
-								hls.loadSource(video.src)
-								hls.attachMedia(video)
+								//const hls = new Hls()
+								if (_this.hls != null) {
+									_this.hls.loadSource(video.src)
+									_this.hls.attachMedia(video)
+								}
 							}
 						}
 					}
@@ -205,7 +241,7 @@
 		padding: 10px;
 		border-radius: 5px;
 		margin: 10px;
-		transition: all .5s;
+		transition: all .3s;
 		position: relative;
 	}
 
@@ -214,7 +250,8 @@
 	}
 
 	.playItem:active {
-		transform: scale(0.75) translate3d(0, 0, 0);
+		// transform: scale(0.75) translate3d(0, 0, 0);
+		box-shadow: 8px 8px 18px rgba(0, 0, 0, 0.1), -8px -8px 18px #ffffff;
 	}
 
 
@@ -227,7 +264,7 @@
 
 	.myVideo {
 		position: relative;
-		width: 300px;
+		width: 315px;
 		height: 180px;
 		background-color: #565656;
 		border-radius: 10px;
@@ -240,5 +277,28 @@
 		border-radius: 5px;
 	}
 
-	
+	.activeElement {
+		-webkit-animation: free_download 1s linear alternate infinite;
+		animation: free_download 1s linear alternate infinite;
+	}
+
+	@-webkit-keyframes free_download {
+		0% {
+			-webkit-transform: scale(1);
+		}
+
+		100% {
+			-webkit-transform: scale(1.2);
+		}
+	}
+
+	@keyframes free_download {
+		0% {
+			transform: scale(1);
+		}
+
+		100% {
+			transform: scale(1.2);
+		}
+	}
 </style>
diff --git a/src/components/mini/box16-videoDetail.vue b/src/components/mini/box16-videoDetail.vue
index d093711..9c9f19e 100644
--- a/src/components/mini/box16-videoDetail.vue
+++ b/src/components/mini/box16-videoDetail.vue
@@ -1,13 +1,16 @@
 <template>
-	<div>
-		<div class="boxMain ">
+	<div class="boxMain">
+		<div class=" playBox" v-bind:class="{ fadeInLeft: this.$attrs.showFade,fade: !this.$attrs.showFade }">
 			<videoPlayBox ref="videoPlayBox" @swichPlay="swichPlay"></videoPlayBox>
 		</div>
-		<div style="padding: 20px 20px 5px;margin-bottom: 20px;" class="myShadow fadeInLeft">
-			<pre>{{introduce}}</pre>
-		</div>
-		<div class="articleComment fadeInRight">
-			<comment ref="myComment" :articleId="articleId" :isAllowedComment="isAllowedComment" :foldReply="true" />
+		<div v-bind:class="{ fadeInRight: this.$attrs.showFade,fade: !this.$attrs.showFade }">
+			<div class="introduce myShadow" v-if="introduce!=''">
+				<pre style="white-space: pre-line;">{{introduce}}</pre>
+			</div>
+			<div class="articleComment ">
+				<comment ref="myComment" :articleId="articleId" :isAllowedComment="isAllowedComment"
+					:foldReply="true" />
+			</div>
 		</div>
 	</div>
 
@@ -40,9 +43,11 @@
 				if (newValue == undefined || newValue == null || newValue == "") {
 					this.errorMsg = "日志id参数缺失";
 				} else {
-					this.$nextTick(function() {
-						this.$refs.myComment.updateCommentList(this.articleId);
-					})
+					if (this.newValue != this.oldValue) {
+						this.$nextTick(function() {
+							this.$refs.myComment.updateCommentList(this.articleId);
+						})
+					}
 				}
 			},
 		},
@@ -54,6 +59,7 @@
 				introduce: "",
 				secret: "",
 				myLock: false,
+				showFade: true,
 				videoData: {
 					img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg",
 					url: "",
@@ -67,6 +73,7 @@
 		methods: {
 			swichPlay(videoData) {
 				this.introduce = videoData.introduce;
+				this.articleId = videoData.id
 				this.$refs.myComment.updateCommentList(videoData.id);
 			},
 			showVideo(item) {
@@ -85,7 +92,7 @@
 			loadData() {
 
 				if (this.$refs.videoPlayBox.isPlaying) {
-					this.$message.info("上个视频正在播放中")
+					this.$message.info("视频源已切换..", 6)
 				}
 
 				if (this.myLock) {
@@ -157,9 +164,17 @@
 
 	.boxMain {
 		user-select: none;
+		grid-template-columns: repeat(2, 1fr);
+		display: grid;
+		clear: both;
+		gap: 2rem;
+		max-height: 100%;
+	}
+
+	.playBox {
 		display: flex;
 		justify-content: center;
-		padding: 5px 20px;
+		padding: 20px 0px;
 	}
 
 	.myShadow {
@@ -167,4 +182,18 @@
 		box-shadow: 8px 8px 18px rgba(0, 0, 0, 0.1),
 			-8px -8px 18px #ffffff;
 	}
+
+	.introduce {
+		padding: 20px 20px 5px;
+		margin-bottom: 20px;
+	}
+
+	@media screen and (max-width: 1023px) {
+		.boxMain {
+			grid-template-columns: repeat(1, 1fr);
+			gap: 0rem;
+		}
+
+	}
+
 </style>
diff --git a/src/components/mini/tagInfo.vue b/src/components/mini/tagInfo.vue
index 87ed56a..cfe2479 100644
--- a/src/components/mini/tagInfo.vue
+++ b/src/components/mini/tagInfo.vue
@@ -1,5 +1,6 @@
 <template>
-	<!-- 异步加载组件  消息总线独立 状态管理  常量抽取 模块重构 jtx使用  css优化-->
+	<!-- 异步加载组件  消息总线独立 状态管理  常量抽取 模块重构 jsx使用  css优化-->
+	<!-- 好用的黑色 #292a2d -->
 	<div class="swichTag ">
 		<a-page-header title="关于我的一些..小故事" style="padding: 10px 0px 20px 0px;" @back="() => this.$router.go(-1)" />
 		<a-timeline pending="...">
@@ -44,7 +45,6 @@
 				</ul>
 			</a-timeline-item>
  -->
-
 			<!-- 
   它叫 faye's theme 出自高瞰/的独立游戏(寻找天堂)
   

--
Gitblit v1.9.1