From 10572998aa54d61c45df3e334eb01e44a15df729 Mon Sep 17 00:00:00 2001 From: inleft <inleft@qq.com> Date: Wed, 10 Aug 2022 18:35:59 +0800 Subject: [PATCH] 常量提取,优化视频模块布局 --- src/components/mini/box15-videoPlayBox.vue | 188 ++++++++ src/api/fileManage.js | 11 src/components/group/articleListOld.vue | 0 src/components/mini/box10-add.vue | 49 +- src/components/mini/box14-video.vue | 505 +++++++++++---------- src/components/mini/box14-video3.vue | 248 ++++++++++ /dev/null | 263 ----------- src/components/mini/mdDetail.vue | 16 src/components/group/MyVideo.vue | 17 src/components/mini/box-new-article.vue | 44 + src/config/myConstant.js | 10 src/components/group/articleListScorll.vue | 6 src/components/layouts/baseLayout.vue | 6 13 files changed, 813 insertions(+), 550 deletions(-) diff --git a/src/api/fileManage.js b/src/api/fileManage.js index 0875988..76f2693 100644 --- a/src/api/fileManage.js +++ b/src/api/fileManage.js @@ -16,6 +16,17 @@ } /** + * 自定义文件上传 + */ +export function myFileInfoUpload (parameter) { + return axios({ + url: '/outside/sysFileInfo/upload', + method: 'post', + data: parameter + }) +} + +/** * 下载文件 * * @author yubaoshan diff --git a/src/components/group/MyVideo.vue b/src/components/group/MyVideo.vue index 2e69c63..723d6a0 100644 --- a/src/components/group/MyVideo.vue +++ b/src/components/group/MyVideo.vue @@ -1,9 +1,9 @@ <template> <div class="myModal"> - <a-modal v-model="visible" title="" :footer="null" :mask="false" :maskClosable="false" :placement="placement" + <a-modal v-model="visible" title="" :footer="null" :mask="false" :maskClosable="true" :bodyStyle="{'overflow':'overlay','maxHeight': '550px'}"> - <div>11</div> - + <div>{{this.placement}}</div> + <videoPlayBox></videoPlayBox> </a-modal> </div> @@ -13,17 +13,21 @@ import { history } from '../../api/blogArticleComment.js' - + import videoPlayBox from "../mini/box15-videoPlayBox.vue" export default { + components: { + videoPlayBox + }, data() { return { visible: false, - placement: "bottom" + placement: "fbottom" } }, beforeMount() {}, methods: { - showModal() { + showModal(param) { + this.placement = param.id this.visible = true; }, handleCancel(e) { @@ -34,7 +38,6 @@ } </script> <style scoped> - a { color: black; } diff --git a/src/components/group/articleList.vue b/src/components/group/articleListOld.vue similarity index 100% rename from src/components/group/articleList.vue rename to src/components/group/articleListOld.vue diff --git a/src/components/group/articleListScorll.vue b/src/components/group/articleListScorll.vue index d7d4aa5..0191c81 100644 --- a/src/components/group/articleListScorll.vue +++ b/src/components/group/articleListScorll.vue @@ -70,6 +70,12 @@ typeId: function(newValue, oldValue) { this.busy = true; this.$message.info('loading', 0.3); + + //有条件不刷新 + if (newValue == undefined && oldValue != "") { + return + } + this.onChange(1); }, }, diff --git a/src/components/group/tempBoxActicle.v b/src/components/group/tempBoxActicle.v deleted file mode 100644 index d7b481d..0000000 --- a/src/components/group/tempBoxActicle.v +++ /dev/null @@ -1,342 +0,0 @@ -<template> - <div> - <div class="recent-posts" id="recent-posts"> - <div class="recent-post-item"> - <div class="post_cover left_radius"> - <a href="#" title="使用KeyStore生成证书"> - <div class="block left_radius"></div> - <img class="post_bg" src="https://unpkg.zhimg.com/ahzo@1.0.3/blogpic/1.jpg" - onerror="this.onerror=null,this.src="/img/404.jpg"" alt="使用KeyStore生成证书"> - </a> - </div> - <div class="recent-post-info"> - <a class="article-title" href="#" title="使用KeyStore生成证书">使用KeyStore生成证书</a> - <div class="article-meta-wrap"> - <span class="post-meta-date"> - <i class="far fa-calendar-alt"></i> - <span class="article-meta-label"></span> - <time datetime="2022-01-13T06:25:00.000Z" title=" 2022-01-13 14:25:00">2022-01-13</time> - </span> - <span class="article-meta"> - <span class="article-meta__separator">|</span> - <i class="fas fa-inbox"></i><a class="article-meta__categories" href="#">随手记</a> - </span> - </div> - <div class="content"> - 前言Keytool是一个Java数据证书的管理工具 , 在keystore里,包含两种数据: 密钥实体(Key entity):即密钥(secret... - key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries):即证书(包含公钥) keytool常用命令: genkey - 在用户主目录中创建一个默认文件”.keystore” alias 产生别名 keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中) keyalg - 指定密钥的算法 (如 - RSA DSA(如果不指定默认采用DSA)) validity 指定创建的证书有效期多少天 keysize 指定密钥长度 storepass - 指定密钥库的密码(获取keystore信息所需的密码) - keypass 指定别名条目的密码(私钥的密码) dname 指定证书拥有者信息 例如: - “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码” list 显示密钥库中的证书信息 keytool - ... - </div> - </div> - </div> - </div> - </div> -</template> - -<script> - export default { - } -</script> - -<style lang="less"> - @card-bg: #f5f8fa; - @card-box-shadow: 8px 8px 18px rgba(0, 0, 0, 0.1), -8px -8px 18px rgba(255, 255, 255, 1); - @ahzoo-proportion: 1; - @cursorURL: "https://blog.ahzoo.cn/blogpic/normal.cur"; - @global-font-size: 14px; - @font-color: #666; - @title-clolr: dimgray; - @card-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0.2), 0 0 0 rgba(255, 255, 255, 0.8), inset 9px 9px 15px rgba(0, 0, 0, 0.1), inset -9px -9px 15px rgba(255, 255, 255, 1); - - #recent-posts>.recent-post-item { - display: -webkit-box; - display: -moz-box; - display: -webkit-flex; - display: -ms-flexbox; - display: box; - display: flex; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -o-box-orient: horizontal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: center; - -moz-box-align: center; - -o-box-align: center; - -ms-flex-align: center; - -webkit-align-items: center; - align-items: center; - border-radius: 12px 8px 8px 12px; - background: var(--card-bg); - -webkit-box-shadow: var(--card-box-shadow); - box-shadow: var(--card-box-shadow); - -webkit-transition: all .3s; - -moz-transition: all .3s; - -o-transition: all .3s; - -ms-transition: all .3s; - transition: all .3s; - - background: @card-bg; - -webkit-box-shadow: @card-box-shadow; - box-shadow: @card-box-shadow; - - } - - .recent-post-item a { - // color: #99a9bf; - text-decoration: none; - word-wrap: break-word; - -webkit-transition: all .2s; - -moz-transition: all .2s; - -o-transition: all .2s; - -ms-transition: all .2s; - transition: all .2s; - overflow-wrap: break-word; - background-color: transparent; - } - - .recent-post-item { - padding-left: calc(1.2rem * @ahzoo-proportion) !important; - padding-right: calc(1.2rem * @ahzoo-proportion) !important; - // font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; - line-height: 2; - - img { - max-width: 100%; - -webkit-transition: all .2s; - -moz-transition: all .2s; - -o-transition: all .2s; - -ms-transition: all .2s; - transition: all .2s; - border-style: none; - } - } - - .recent-post-item * { - cursor: url(@cursorURL), auto !important; - font-size: @global-font-size; - color: var(--font-color); - } - - * { - tap-highlight-color: transparent; - -webkit-tap-highlight-color: transparent; - box-sizing: border-box; - } - - #recent-posts>.recent-post-item .post_cover { - width: 33%; - position: sticky; - - opacity: .8; - padding: calc(1.2rem * @ahzoo-proportion) calc(0.2rem * @ahzoo-proportion); - overflow: hidden; - height: 100%; - -webkit-mask-image: -webkit-radial-gradient(#fff, #000); - } - - #recent-posts>.recent-post-item .left_radius { - border-radius: 8px 0 0 8px; - } - - .block.left_radius { - background: linear-gradient(to right, transparent, @card-bg 98%); - position: absolute; - width: 100%; - height: calc(100% - 2.2rem * @ahzoo-proportion); - z-index: 2; - top: calc(1.1rem * @ahzoo-proportion); - } - - #recent-posts>.recent-post-item .post_cover img.post_bg { - border-radius: 15px; - width: 100%; - height: 100%; - -webkit-transition: all .6s; - -moz-transition: all .6s; - -o-transition: all .6s; - -ms-transition: all .6s; - transition: all .6s; - object-fit: cover; - } - - #recent-posts>.recent-post-item>.recent-post-info { - width: 77%; - padding: 0px calc(1.2rem * @ahzoo-proportion); - display: flex; - flex-direction: column; - overflow: hidden; - - a { - text-decoration: none; - -webkit-transition: all .2s; - -moz-transition: all .2s; - -o-transition: all .2s; - -ms-transition: all .2s; - transition: all .2s; - overflow-wrap: break-word; - } - } - - #recent-posts>.recent-post-item>.recent-post-info>.article-title { - order: 1; - font-weight: 600; - color: @title-clolr; - font-size: 1.6em; - margin-bottom: 0.3rem; - line-height: 1.4; - -webkit-transition: all .2s ease-in-out; - -moz-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - -ms-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; - - display: -webkit-box; - overflow: hidden; - -webkit-box-orient: vertical; - /* autoprefixer: off */ - -webkit-line-clamp: 2; - /* autoprefixer: on */ - } - - - - #recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap { - order: 3; - color: #858585; - font-size: 90%; - - .article-meta-label { - padding-right: 0.2rem; - } - } - - #recent-posts>.recent-post-item>.recent-post-info>.content { - opacity: 0; - line-height: .8; - transition: all .25s; - color: #999; - margin-bottom: 19px; - text-overflow: ellipsis; - order: 2; - margin: 0; - - display: -webkit-box; - overflow: hidden; - -webkit-box-orient: vertical; - /* autoprefixer: off */ - -webkit-line-clamp: 3; - /* autoprefixer: on */ - - } - - #recent-posts>.recent-post-item>.recent-post-info>.article-title:hover { - color: #448aff; - } - - - - //div本体阴影 - #recent-posts>.recent-post-item:hover { - -webkit-box-shadow: @card-hover-box-shadow; - box-shadow: @card-hover-box-shadow; - } - - // 图片缩放 - #recent-posts>.recent-post-item:hover img.post_bg { - -webkit-transform: scale(.9); - -moz-transform: scale(.9); - -o-transform: scale(.9); - -ms-transform: scale(.9); - transform: scale(.9); - -webkit-box-shadow: @card-hover-box-shadow; - box-shadow: @card-hover-box-shadow; - } - - //内容缩放 内容显示 - #recent-posts>.recent-post-item:hover .recent-post-info .content { - opacity: 1; - line-height: 1.8; - transition: all .25s; - } - - #recent-posts>.recent-post-item .post_cover img.post_bg:hover { - transform: scale(.9); - } - - #recent-posts>.recent-post-item .post_cover img.post_bg:hover { - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -o-transform: scale(1.1); - -ms-transform: scale(1.1); - transform: scale(1.1); - } - - @media screen and (max-width:768px) { - #recent-posts .recent-post-item .recent-post-info .article-title { - font-size: 1.32em !important; - margin-bottom: 0 !important; - } - } - - @media screen and (min-width: 769px) { - #recent-posts>.recent-post-item>.recent-post-info>.content { - opacity: 0; - line-height: .8; - transition: all .25s; - color: #999; - margin-bottom: 10px; - display: -webkit-container; - -webkit-line-clamp: 3; - text-overflow: ellipsis; - overflow: hidden; - } - } - - @media screen and (max-width: 768px) { - #recent-posts>.recent-post-item>.recent-post-info { - width: 69%; - font-size: 12px !important; - margin: .7rem 0; - } - } - - @media screen and (max-width: 768px) { - #recent-posts>.recent-post-item>.recent-post-info>.content { - opacity: 1; - line-height: 1.7; - color: #999; - display: -webkit-container; - -webkit-line-clamp: 3; - text-overflow: ellipsis; - overflow: hidden; - } - } - - @media screen and (min-width: 769px) { - #recent-posts>.recent-post-item { - height: 15em; - } - } - - @media screen and (max-width: 768px) { - #recent-posts .recent-post-item { - height: 12em !important; - padding: 0; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - } - } - - @media only screen and (max-width: 768px) { - @ahzoo-proportion: 0.65; - @global-font-size: 12px; - } -</style> diff --git a/src/components/group/tempFormCheck.vue b/src/components/group/tempFormCheck.vue deleted file mode 100644 index 47c5ffa..0000000 --- a/src/components/group/tempFormCheck.vue +++ /dev/null @@ -1,120 +0,0 @@ -<template> - <a-form-model ref="ruleForm" :model="ruleForm" :rules="rules" v-bind="layout"> - <a-form-model-item has-feedback label="Password" prop="pass"> - <a-input v-model="ruleForm.pass" type="password" autocomplete="off" /> - </a-form-model-item> - <a-form-model-item has-feedback label="Confirm" prop="checkPass"> - <a-input v-model="ruleForm.checkPass" type="password" autocomplete="off" /> - </a-form-model-item> - <a-form-model-item has-feedback label="Age" prop="age"> - <a-input v-model.number="ruleForm.age" /> - </a-form-model-item> - <a-form-model-item :wrapper-col="{ span: 14, offset: 4 }"> - <a-button type="primary" @click="submitForm('ruleForm')"> - Submit - </a-button> - <a-button style="margin-left: 10px" @click="resetForm('ruleForm')"> - Reset - </a-button> - </a-form-model-item> - </a-form-model> -</template> -<script> - export default { - data() { - let checkPending; - let checkAge = (rule, value, callback) => { - clearTimeout(checkPending); - if (!value) { - return callback(new Error('Please input the age')); - } - checkPending = setTimeout(() => { - if (!Number.isInteger(value)) { - callback(new Error('Please input digits')); - } else { - if (value < 18) { - callback(new Error('Age must be greater than 18')); - } else { - callback(); - } - } - }, 1000); - }; - let validatePass = (rule, value, callback) => { - if (value === '') { - callback(new Error('Please input the password')); - } else { - if (this.ruleForm.checkPass !== '') { - this.$refs.ruleForm.validateField('checkPass'); - } - callback(); - } - }; - let validatePass2 = (rule, value, callback) => { - if (value === '') { - callback(new Error('Please input the password again')); - } else if (value !== this.ruleForm.pass) { - callback(new Error("Two inputs don't match!")); - } else { - callback(); - } - }; - - let validateContent = (rule, value, callback) => { - console.log(1111); - if (1 == 1) { - this.$refs.ruleForm.validateField('checkPass'); - } - callback(); - }; - return { - ruleForm: { - pass: '', - checkPass: '', - age: '', - }, - rules: { - pass: [{ - validator: validatePass, - trigger: 'change' - }], - checkPass: [{ - validator: validatePass2, - trigger: 'change' - }], - age: [{ - validator: checkAge, - trigger: 'change' - }], - common: [{ - validator: validateContent, - trigger: 'change' - }], - }, - layout: { - labelCol: { - span: 4 - }, - wrapperCol: { - span: 14 - }, - }, - }; - }, - methods: { - submitForm(formName) { - this.$refs[formName].validate(valid => { - if (valid) { - alert('submit!'); - } else { - console.log('error submit!!'); - return false; - } - }); - }, - resetForm(formName) { - this.$refs[formName].resetFields(); - }, - }, - }; -</script> diff --git a/src/components/group/tempFriendBox.vue b/src/components/group/tempFriendBox.vue deleted file mode 100644 index 77b5928..0000000 --- a/src/components/group/tempFriendBox.vue +++ /dev/null @@ -1,175 +0,0 @@ -<template> - <div style="display: flex;" class="link-box"> - <!-- <a href="#" target="_blank" class="no-underline"> --> - <a href="#" class="no-underline"> - <div class="thumb"> - <img width="200" height="200" src="https://cdn.jsdelivr.net/gh/Musenxi/CDN/长野.jpg" alt="长野 の BLOG"> - </div> - <div class="content"> - <p class="title"> - 长野 の BLOG - </p> - </div> - </a> - <a href="#" class="no-underline"> - <div class="thumb"> - <img width="200" height="200" src="https://cdn.jsdelivr.net/gh/Musenxi/CDN/长野.jpg" alt="长野 の BLOG"> - </div> - <div class="content"> - <p class="title"> - 长野 の BLOG - </p> - </div> - </a> - <a href="#" class="no-underline"> - <div class="thumb"> - <img width="200" height="200" src="https://cdn.jsdelivr.net/gh/Musenxi/CDN/长野.jpg" alt="长野 の BLOG"> - </div> - <div class="content"> - <p class="title"> - 长野 の BLOG - </p> - </div> - </a> - - </div> -</template> - -<script> -</script> - -</script> - -<style lang="less"> - .myFriend { - a { - padding: 10px; - } - } - - .link-box a { - width: 33.75rem; - background: #fff; - float: left; - margin: 0 0 4.375rem; - color: #2E2E2E; - text-decoration: none; - border-bottom: none; - border-radius: .25rem; - overflow: hidden; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - // -moz-box-shadow: 0 0.0625rem 0.0625rem rgba(0, 0, 0, 0.1); - -webkit-box-shadow: 0 3px.0625rem 0.0625rem #0000001a; - -moz-box-shadow: 0 3px 0.0625rem #0000001a; - box-shadow: 0 3px 0.0625rem #0000001a; - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - -webkit-transition: .3s; - -moz-transition: .3s; - -ms-transition: .3s; - -o-transition: .3s; - transition: .3s; - } - - .link-box a:hover:after { - left: 0; - width: 100%; - -webkit-transition: width 350ms; - -moz-transition: width 350ms; - -ms-transition: width 350ms; - -o-transition: width 350ms; - transition: width 350ms; - } - - .link-box a .thumb { - font-size: 0; - overflow: hidden; - background-color: #fff; - margin: 0; - border-top-left-radius: .25rem; - border-top-right-radius: .25rem; - } - - .link-box a .thumb img { - width: 100%; - height: auto; - position: relative; - margin: 0; - padding: 0; - -webkit-transition: .4s; - -moz-transition: .4s; - -ms-transition: .4s; - -o-transition: .4s; - transition: .4s; - } - - .link-box a .content { - text-align: center; - background-color: #fff; - } - - .link-box a .content .title { - text-align: center; - padding: 1rem .25rem; - font-weight: 500; - color: #333; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - margin: 0; - } - - .link-box a:hover, - .link-box a:active { - -webkit-box-shadow: 0 1.375rem 2.6875rem rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1.375rem 2.6875rem rgba(0, 0, 0, 0.15); - box-shadow: 0 1.375rem 2.6875rem rgba(0, 0, 0, 0.15); - -webkit-transform: translateY(-0.25rem); - -moz-transform: translateY(-0.25rem); - -ms-transform: translateY(-0.25rem); - -o-transform: translateY(-0.25rem); - transform: translateY(-0.25rem); - -moz-transform: none; - } - - @media screen and (min-width: 1600px) { - .link-box a { - margin: 0 0.9375rem 3.75rem; - width: -webkit-calc(200% / 5 - 1.875rem); - width: calc(200% / 5 - 1.875rem); - } - } - - @media screen and (max-width: 1599px) and (min-width: 768px) { - .link-box a { - margin: 0 0.9375rem 3.75rem; - width: -webkit-calc(150% / 4 - 1.875rem); - width: calc(150% / 4 - 1.875rem); - } - } - - - - @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); - } - } - - @media screen and (max-width: 767px) 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); - } - } -</style> diff --git a/src/components/group/tempScroll.vue b/src/components/group/tempScroll.vue deleted file mode 100644 index c1c1962..0000000 --- a/src/components/group/tempScroll.vue +++ /dev/null @@ -1,121 +0,0 @@ -<template> - <div v-infinite-scroll="handleInfiniteOnLoad" class="demo-infinite-container" :infinite-scroll-disabled="busy" - :infinite-scroll-distance="10"> - <a-list :data-source="data"> - - <a-list-item slot="renderItem" slot-scope="item, index"> - <a-list-item-meta :description="item.email"> - <a slot="title" :href="item.href">{{ item.name.last }}</a> - <a-avatar slot="avatar" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /> - </a-list-item-meta> - <div>Content</div> - </a-list-item> - - <div v-if="loading && !busy" class="demo-loading-container"> - <a-spin /> - </div> - </a-list> - </div> -</template> -<script> - import infiniteScroll from 'vue-infinite-scroll'; - - var tempData = [{ - "gender": "female", - "name": { - "title": "Miss", - "first": "Alexis", - "last": "Novak" - }, - "email": "alexis.novak@example.com", - "nat": "CA" - }, { - "gender": "female", - "name": { - "title": "Mrs", - "first": "Rajaa", - "last": "Seegers" - }, - "email": "rajaa.seegers@example.com", - "nat": "NL" - }, { - "gender": "male", - "name": { - "title": "Mr", - "first": "Elias", - "last": "Pelto" - }, - "email": "elias.pelto@example.com", - "nat": "FI" - }, { - "gender": "male", - "name": { - "title": "Mr", - "first": "Mille", - "last": "Christensen" - }, - "email": "mille.christensen@example.com", - "nat": "DK" - }, { - "gender": "male", - "name": { - "title": "Mr", - "first": "Gerardo", - "last": "Marquez" - }, - "email": "gerardo.marquez@example.com", - "nat": "ES" - }]; - - export default { - directives: { - infiniteScroll - }, - data() { - return { - data: [], - loading: false, - busy: false, - }; - }, - beforeMount() { - this.data = tempData; - }, - methods: { - - handleInfiniteOnLoad() { - const data = this.data; - this.loading = true; - if (data.length > 10) { - this.$message.warning('Infinite List loaded all'); - console.log(1); - this.busy = true; - this.loading = false; - return; - } - - setTimeout(function() { - this.loading = false; - }, 2000); - this.data = data.concat(tempData); - - }, - }, - }; -</script> -<style> - .demo-infinite-container { - border: 1px solid #e8e8e8; - border-radius: 4px; - overflow: auto; - padding: 8px 24px; - height: 300px; - } - - .demo-loading-container { - position: absolute; - bottom: 40px; - width: 100%; - text-align: center; - } -</style> diff --git a/src/components/layouts/baseLayout.vue b/src/components/layouts/baseLayout.vue index 0f8f339..0d14dee 100644 --- a/src/components/layouts/baseLayout.vue +++ b/src/components/layouts/baseLayout.vue @@ -12,7 +12,7 @@ <a-layout-footer> <AplayerBox /> <tagFooter /> - <MyVideo ref="MyVideo" /> + <MyVideo ref="MyVideo" /> </a-layout-footer> <a-back-top> @@ -40,8 +40,8 @@ } }, methods: { - showMyVideo() { - this.$refs.MyVideo.showModal(); + showMyVideo(param) { + this.$refs.MyVideo.showModal(param); }, // 下载文件 down: function() { diff --git a/src/components/mini/box-new-article.vue b/src/components/mini/box-new-article.vue index ee2ea16..7e442d8 100644 --- a/src/components/mini/box-new-article.vue +++ b/src/components/mini/box-new-article.vue @@ -4,8 +4,12 @@ <div class="miniTag" v-if="isTop==1">置顶</div> <div class="post_cover left_radius" v-if="index%2==0"> - <a :href="jumpURL" target="_blank" class="no-underline" v-if="articleFileType==5" - @click="showMsg(articleFileType,jumpURL)"> + <router-link :to="{path:'/platform'}" :title="title" v-if="articleFileType==myConstant.fileTypeVideo"> + <div class="block left_radius"></div> + <img class="post_bg" :src="coverFileURL" :onerror="img404" :alt="title"> + </router-link> + <a :href="jumpURL" target="_blank" class="no-underline" + v-else-if="articleFileType==myConstant.fileTypeShort" @click="showMsg(articleFileType,jumpURL)"> <div class="block left_radius"></div> <img class="post_bg" :src="coverFileURL" :onerror="img404" :alt="title"> </a> @@ -16,27 +20,22 @@ </div> <div class="post_cover right_radius" v-else> - <a :href="jumpURL" target="_blank" class="no-underline" v-if="articleFileType==5" - @click="showMsg(articleFileType,jumpURL)"> + <router-link :to="{path:'/platform'}" :title="title" v-if="articleFileType==myConstant.fileTypeVideo"> + <div class="block left_radius"></div> + <img class="post_bg" :src="coverFileURL" :onerror="img404" :alt="title"> + </router-link> + <a :href="jumpURL" target="_blank" class="no-underline" + v-else-if="articleFileType==myConstant.fileTypeShort" @click="showMsg(articleFileType,jumpURL)"> <div class="block left_radius"></div> <img class="post_bg" :src="coverFileURL" :onerror="img404" :alt="title"> </a> <router-link :to="{path:'/mdDetail',query:{id:id}}" :title="title" v-else> <div class="block right_radius"></div> <img class="post_bg" :src="coverFileURL" :onerror="img404" :alt="title"> - <!-- <img class="post_bg" src="https://unpkg.zhimg.com/ahzo@1.0.3/blogpic/1.jpg" onerror="this.onerror=null,this.src="/img/404.jpg"" :alt="title"> --> </router-link> </div> <div class="recent-post-info"> - - <!-- <a :href="jumpURL" target="_blank" class="article-title" v-if="articleFileType==5" - @click="showMsg(articleFileType,jumpURL)"> - <a-icon type="lock" style="color:rgba(0,0,0,.25)" v-if="authStatus==3" /> - <a-icon type="stop" style="color:rgba(0,0,0,.25)" v-if="authStatus==2" /> - {{title}} - <a-badge :count="1" dot v-if="isAnyUpdate==1" title="最近有更新"></a-badge> - </a> --> <router-link :to="{path:'/mdDetail',query:{id:id,articleFileType:articleFileType}}" class="article-title"> @@ -58,7 +57,7 @@ <a-icon type="book" /> <router-link :to="{path:'/articleList',query:{typeId:articleTypeId}}" class="article-meta__categories"> {{articleTypeName}}</router-link> - <span v-if="articleFileType==5"> + <span v-if="articleFileType==myConstant.fileTypeShort"> <span v-if="jumpURL !=null && jumpURL!=''"> <span class="article-meta__separator" style="margin: 0px 3px ;">|</span> <span class="post-meta-date"> @@ -73,6 +72,17 @@ <a-icon type="thunderbolt" />碎碎念 </span> </span> + </span> + + <span v-if="articleFileType==myConstant.fileTypeVideo"> + <span v-if="jumpURL !=null && jumpURL!=''"> + <span class="article-meta__separator" style="margin: 0px 3px ;">|</span> + <span class="post-meta-date"> + <a-icon type="video-camera" /> + <a :href="jumpURL" target="_blank" class="no-underline"> 视频 </a> + </span> + </span> + </span> <!-- <a class="article-meta__categories" href="#"> {{tag}}</a> --> </span> @@ -90,10 +100,13 @@ NotificationOutlined } from '@ant-design/icons-vue'; + import myConstant from "../../config/myConstant.js" + + export default { methods: { showMsg(articleFileType, jumpURL) { - if (articleFileType == 5 && (jumpURL == null || jumpURL == "")) { + if (articleFileType == myConstant.fileTypeShort && (jumpURL == null || jumpURL == "")) { this.$message.info('这只是一句碎碎念,没有更多内容啦', 3); return } @@ -148,6 +161,7 @@ }, data() { return { + myConstant: myConstant, img404: "this.onerror='';this.src=\"http://t.inleft.com/share/media_photo/1.jpg\"", } } diff --git a/src/components/mini/box10-add.vue b/src/components/mini/box10-add.vue index 5a8b1f0..705e398 100644 --- a/src/components/mini/box10-add.vue +++ b/src/components/mini/box10-add.vue @@ -21,17 +21,11 @@ </span> </a-form-model-item> - <a-form-model-item label="日志文件" v-show="!form.online"> - <!-- <a-upload action="https://www.mocky.io/v2/5cc8019d300000980a055e76" - :default-file-list="form.blogFileList"> - <a-button> - <a-icon type="upload" /> 限 markdown/html - </a-button> - </a-upload> --> <a-upload :customRequest="customRequest" name="file" :showUploadList="true" @change="handleChange" - :default-file-list="form.blogFileList" :beforeUpload="beforeUpload"> + :default-file-list="form.blogFileList" :beforeUpload="beforeUpload" + :data="{'fileType':fileTypeMarkDown}"> <a-button> <a-icon type="upload" />限 markdown/html @@ -69,13 +63,16 @@ <a-form-model-item label=" 日志类型"> <a-select v-model="form.blogType" mode="default" placeholder="" :getPopupContainer="getCalendarContainer()"> - <a-select-option value="1"> + <a-select-option value="1"> markdown </a-select-option> - <a-select-option value="2"> + <a-select-option value="2"> html </a-select-option> - <a-select-option value="5"> + <a-select-option value="3"> + video + </a-select-option> + <a-select-option value="5"> fast(闪念) </a-select-option> </a-select> @@ -106,16 +103,9 @@ <a-form-model-item label="封面"> - <!-- <a-upload action="https://www.mocky.io/v2/5cc8019d300000980a055e76" list-type="picture" - :default-file-list="form.coverFileList" class="upload-list-inline"> - <a-button> - <a-icon type="upload" /> jpg/png/jpeg.. - </a-button> - </a-upload> --> - <a-upload :customRequest="customRequest" name="file" :showUploadList="true" list-type="picture" - @change="handleChangeCoverFile" - :default-file-list="form.coverFileList"> + @change="handleChangeCoverFile" :default-file-list="form.coverFileList" + :beforeUpload="beforeUploadCover" :data="{'fileType':fileTypeCover}"> <a-button> <a-icon type="upload" />jpg/png/jpeg.. </a-button> @@ -188,13 +178,15 @@ <script> import moment from "moment"; import { - sysFileInfoUpload + sysFileInfoUpload, + myFileInfoUpload } from '../../api/fileManage.js'; import { queryBlogArticleType } from '../../api/blogArticleType.js' + import myConstant from "../../config/myConstant.js" export default { beforeMount() { @@ -222,6 +214,8 @@ }; return { + fileTypeMarkDown: myConstant.fileTypeMarkDown, + fileTypeCover: myConstant.fileTypeCover, blogArticleType: [], tags: [], inputVisible: false, @@ -244,7 +238,7 @@ publishDate: "", lock: false, top: false, - sliderValue:50, + sliderValue: 50, auth: 1, password: "", fileId: null, @@ -295,6 +289,13 @@ }; }, methods: { + + beforeUploadCover(file, fileList) { + if (this.form.coverFileList.length > 1) { + this.$message.error('这里最多上传一个文件'); + return false; + } + }, beforeUpload(file, fileList) { return new Promise((resolve, reject) => { if (this.form.fileId != null) { @@ -345,7 +346,9 @@ customRequest(option) { const formData = new FormData() formData.append('file', option.file) - sysFileInfoUpload(formData).then((res) => { + formData.append('fileType', option.data.fileType) + formData.append('authCode', this.form.secret) + myFileInfoUpload(formData).then((res) => { if (res.success) { this.$message.success('上传成功') diff --git a/src/components/mini/box14-video.vue b/src/components/mini/box14-video.vue index 91aced2..9e794c3 100644 --- a/src/components/mini/box14-video.vue +++ b/src/components/mini/box14-video.vue @@ -1,248 +1,291 @@ -<style lang="less" scoped> - .videoBoxList { - display: flex; - // justify-content: space-evenly; - flex-wrap: wrap; - // align-content:flex-start; - min-height: 700px; - align-items: stretch; - } - - .myVideo { - position: relative; - // width: 220px; - // height: 140px; - width: 300px; - height: 180px; - background-color: #565656; - border-radius: 10px; - margin: 10px; - display: flex; - - .face { - z-index: 1; - } - - img { - max-width: 100%; - } - } - - - .myVideo:hover { - .mark { - background-color: #000; - display: initial; - } - - .player-video-state { - // display: initial; - } - } - - - - - .dplayer { - width: 500px; - } - - .mark { - opacity: 0.45; - width: 100%; - height: 100%; - position: absolute; - display: none; - } - - .player-video-state { - // position: absolute; - left: 43%; - top: 35%; - width: 50px; - height: 50px; - display: none; - } -</style> - <template> <div> - <div class="videoBoxList"> - <div class="myVideo" v-for=" (temp,index) in ['test1','test2','test3','test4','test5']"> - <div :id="temp" :ref="temp" class="dplayer"></div> - <!-- <div class="mark" ></div> --> - <!-- <img src="qq.png"> --> - <!-- 视频 --> - <div class="player-video-state"> - <span class="bp-svgicon"> - <svg viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <path id="pid-1-svgo-a" d="M0 0h80v80H0z"></path> - <path - d="M52.546 8.014a3.998 3.998 0 014.222 3.077c.104.446.093.808.039 1.138a2.74 2.74 0 01-.312.881c-.073.132-.16.254-.246.376l-.257.366-.521.73c-.7.969-1.415 1.926-2.154 2.866l-.015.02a240.945 240.945 0 015.986.341l1.643.123.822.066.41.034.206.018.103.008.115.012c1.266.116 2.516.45 3.677.975a11.663 11.663 0 013.166 2.114c.931.87 1.719 1.895 2.321 3.022a11.595 11.595 0 011.224 3.613c.03.157.046.316.068.474l.015.119.013.112.022.206.085.822.159 1.646c.1 1.098.19 2.198.27 3.298.315 4.4.463 8.829.36 13.255a166.489 166.489 0 01-.843 13.213c-.012.127-.034.297-.053.454a7.589 7.589 0 01-.072.475l-.04.237-.05.236a11.762 11.762 0 01-.74 2.287 11.755 11.755 0 01-5.118 5.57 11.705 11.705 0 01-3.623 1.263c-.158.024-.316.052-.475.072l-.477.053-.821.071-1.644.134c-1.096.086-2.192.16-3.288.23a260.08 260.08 0 01-6.578.325c-8.772.324-17.546.22-26.313-.302a242.458 242.458 0 01-3.287-.22l-1.643-.129-.822-.069-.41-.035-.206-.018c-.068-.006-.133-.01-.218-.02a11.566 11.566 0 01-3.7-.992 11.732 11.732 0 01-5.497-5.178 11.73 11.73 0 01-1.215-3.627c-.024-.158-.051-.316-.067-.475l-.026-.238-.013-.119-.01-.103-.07-.823-.132-1.648a190.637 190.637 0 01-.22-3.298c-.256-4.399-.358-8.817-.258-13.233.099-4.412.372-8.811.788-13.197a11.65 11.65 0 013.039-6.835 11.585 11.585 0 016.572-3.563c.157-.023.312-.051.47-.07l.47-.05.82-.07 1.643-.13a228.493 228.493 0 016.647-.405l-.041-.05a88.145 88.145 0 01-2.154-2.867l-.52-.73-.258-.366c-.086-.122-.173-.244-.246-.376a2.74 2.74 0 01-.312-.881 2.808 2.808 0 01.04-1.138 3.998 3.998 0 014.22-3.077 2.8 2.8 0 011.093.313c.294.155.538.347.742.568.102.11.19.23.28.35l.27.359.532.72a88.059 88.059 0 012.06 2.936 73.036 73.036 0 011.929 3.03c.187.313.373.628.556.945 2.724-.047 5.447-.056 8.17-.038.748.006 1.496.015 2.244.026.18-.313.364-.624.549-.934a73.281 73.281 0 011.93-3.03 88.737 88.737 0 012.059-2.935l.533-.72.268-.359c.09-.12.179-.24.281-.35a2.8 2.8 0 011.834-.881zM30.13 34.631a4 4 0 00-.418 1.42 91.157 91.157 0 00-.446 9.128c0 2.828.121 5.656.364 8.483l.11 1.212a4 4 0 005.858 3.143c2.82-1.498 5.55-3.033 8.193-4.606a177.41 177.41 0 005.896-3.666l1.434-.942a4 4 0 00.047-6.632 137.703 137.703 0 00-7.377-4.708 146.88 146.88 0 00-6.879-3.849l-1.4-.725a4 4 0 00-5.382 1.742z" - id="pid-1-svgo-d"></path> - <filter x="-15.4%" y="-16.3%" width="130.9%" height="132.5%" - filterUnits="objectBoundingBox" id="pid-1-svgo-c"> - <feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> - <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"> - </feGaussianBlur> - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0" - in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> - <feOffset in="SourceAlpha" result="shadowOffsetOuter2"></feOffset> - <feGaussianBlur stdDeviation="3.5" in="shadowOffsetOuter2" - result="shadowBlurOuter2"> - </feGaussianBlur> - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0" - in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix> - <feMerge> - <feMergeNode in="shadowMatrixOuter1"></feMergeNode> - <feMergeNode in="shadowMatrixOuter2"></feMergeNode> - </feMerge> - </filter> - </defs> - <g fill="none" fill-rule="evenodd" opacity=".8"> - <mask id="pid-1-svgo-b" fill="#fff"> - <use xlink:href="#pid-1-svgo-a"></use> - </mask> - <g mask="url(#pid-1-svgo-b)"> - <use fill="#000" filter="url(#pid-1-svgo-c)" xlink:href="#pid-1-svgo-d"></use> - <use fill="#FFF" xlink:href="#pid-1-svgo-d"></use> - </g> - </g> - </svg> - </span> - </div> - </div> + <div class="mySecretSamll" v-if="data==null|| data.length==0"> + <p> + <a-icon type="delete" /> 空空如也.. + </p> </div> + <div class="gridClass"> + <div class="entry-preview" v-for="item in data"> + <div class="thumbnail_box" @click="showMyVideo(item.id)"> + <div class="thumbnail"> + <img :src="item.coverFileURL" alt="" loading="lazy" :onerror="img404"> + </div> + </div> + <div class="entry-post"> + <div class="entry-header"> + <h5 class="entry-title"> + <a href="#" rel="bookmark">{{item.title}}</a> + </h5> + <div class="post_content"> + {{item.introduce}} + </div> + </div> + <div class="entry-meta"> + <div class="post-categories"> + <span class="tag vcard"> + <a-icon type="book" /> + <a href="#" rel="category tag"> {{item.articleTypeName}}</a> + </span> + <!-- <span class="tag-list"> + <a href="#" rel="tag">影评</a> + <a href="#" rel="tag">电影</a> + <a href="#" rel="tag">蜘蛛侠</a> + </span> --> + </div> + <div class="post-on"> + <span class="entry-date"> + <a-icon type="calendar" /> + <a href="#" rel="bookmark"> + {{item.publishDate}} + </a> + </span> + </div> + </div> + </div> + + </div> + + </div> + <a-row type="flex" justify="center"> + <div> + <a-pagination @change="onChange" :showQuickJumper="true" :size="page.size" v-model="page.current" + :defaultPageSize="page.defaultPageSize" :pageSize="page.pageSize" :total="page.total" /> + </div> + </a-row> </div> </template> - <script> - import Hls from 'hls.js' - import DPlayer from 'dplayer' + import { + queryBlogArticleList + } from '../../api/blogArticle.js' + import myConstant from "../../config/myConstant.js" + export default { data() { return { - dp: null, - video: {}, - video1: {}, - video2: {}, - } - }, - methods: { - myPlay() { - this.$message.info("start play..") - }, - loadVideo(videoInfo, index) { - this.dp = new DPlayer({ - element: document.getElementById(index), - //logo: "https://qczh-1252727916.cos.ap-nanjing.myqcloud.com/pic/273658f508d04d488414fd2b84c9f923.png", // 在视频左上角上打一个logo - // hotkey: true, // 是否支持热键,调节音量,播放,暂停等 - mutex: false, // 防止同时播放多个用户,在该用户开始播放时暂停其他用户 - theme: "#b7daff", // 风格颜色,例如播放条,音量条的颜色 - loop: false, // 是否自动循环 - lang: "zh-cn", // 语言,'en', 'zh-cn', 'zh-tw' - // screenshot: true, // 是否允许截图(按钮),点击可以自动将截图下载到本地 - preload: "auto", // 自动预加载 - volume: 0.1, // 初始化音量 - playbackSpeed: [2, 1, 0.5], //可选的播放速度,可自定义 - contextmenu: [ - // 自定义上下文菜单 - // 右键菜单 - { - text: "b站", - link: "https://www.bilibili.com" - }, - { - text: "选项二", - click: player => { - console.log(player); - } - } - ], - highlight: [ - //进度条上的自定义时间标记 - // 进度条时间点高亮 - { - text: "10M", - time: 60 - }, - { - text: "20M", - time: 120 - } - ], - video: { - pic: videoInfo.img, // 视频封面 - url: videoInfo.url, - type: videoInfo.type, - customType: { - customHls: function(video, player) { - const hls = new Hls() - hls.loadSource(video.src) - hls.attachMedia(video) - } - } - } - }) + page: { + size: "small", + total: 1, + pageSize: 6, + current: 1, + defaultPageSize: 6 + }, + data: [], + img404: "this.onerror='';this.src=\"http://t.inleft.com/share/media_photo/idea_beijing.jpg\"", } }, mounted() { - this.video1 = { - img: "http://t.inleft.com/share/media_photo/faye_video.png", - url: "http://t.inleft.com/share/myVideo/faye/faye.m3u8", - type: "customHls" + this.onChange(this.page.current); + }, + methods: { + onChange(current) { + this.page.current = current; + queryBlogArticleList({ + pageNo: current, + pageSize: this.page.pageSize, + fileType: myConstant.fileTypeVideo + }).then((res) => { + this.page.total = Number(res.data.total) + this.page.pageSize = Number(res.data.size); + this.data = res.data.records; + return res + }) + }, + showMyVideo(param) { + this.$emit('showMyVideo', { + id: param + }) } - this.video2 = { - img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", - url: "http://t.inleft.com/share/myVideo/canon/canon.m3u8", - type: "customHls" - } - this.video3 = { - img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", - url: "http://t.inleft.com/share/mp3/EOPMusic%283%29.mp3", - type: "normal" - } - this.video4 = { - img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", - url: "http://t.inleft.com/share/mp3/EOPMusic%284%29.mp3", - type: "normal" - } - this.video5 = { - img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", - url: "http://t.inleft.com/share/mp3/EOPMusic%282%29.mp3", - type: "normal" - } - - // getVideo: ajax request for getting videoInfo - /* getVideo().then(res => { - this.video = res.data.video - this.laodVideo(this.video) - }) */ - this.video = { - //封面 - //img: "https://cn.bing.com/th?id=OHR.MeotoIwa_ZH-CN3126370410_1920x1080.jpg&rf=LaDigue_1920x1080.jpg", - img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", - // video: "https://vod3.bdzybf3.com/20210509/ZMHA3RpS/1000kb/hls/index.m3u8", - // video: "http://t.inleft.com/share/ckplayer/ckplayer-master/sample/test/video_tieba.m3u8", - // video: videoUrl, - // video: "http://t.inleft.com/share/mp3/inleft-test-20211103-rainbow.mp3", - } - this.loadVideo(this.video1, "test1") - this.loadVideo(this.video2, "test2") - this.loadVideo(this.video3, "test3") - this.loadVideo(this.video4, "test4") - this.loadVideo(this.video5, "test5") - - // 以下为隐藏一些作者的信息和视频播放源 如不需要可删除 - // document.querySelector(".dplayer-menu").remove(); //隐藏右键菜单 - document.querySelector(".dplayer-mask").remove(); - document.querySelector(".dplayer-info-panel-item-url").remove(); //隐藏播放源 - let length = document.querySelectorAll(".dplayer-menu-item").length; - document.querySelectorAll(".dplayer-menu-item")[length - 2].remove(); // 去掉作者信息 - document.querySelectorAll(".dplayer-menu-item")[length - 1].remove(); // 去掉作者信息 } } </script> +<style lang="less"> + @--border-radius: 16px; + @--s-background: 16px; + @--animation-mo: margin 1s cubic-bezier(0.62, 0.21, 0.25, 1) 1 backwards, opacity .75s cubic-bezier(0.62, 0.21, 0.25, 1) 1 backwards; + + @font-face { + font-family: "iconfont"; + /* Project id 2762112 */ + src: url('http://t.inleft.com/share/z%E5%AD%97%E4%BD%93%E5%BA%93/iconfont.woff2') format('woff2'); + } + + .gridClass { + grid-template-columns: repeat(4, 1fr); + display: grid; + clear: both; + gap: 2rem; + padding-bottom: 20px; + // background-color: #666; + + a { + color: #555; + } + + .item1 { + grid-column-start: 1; + grid-column-end: 3; + } + + .entry-preview { + border-radius: @--border-radius; + background: @--s-background, white; + animation: @--animation-mo; + transition: all .5s; + box-shadow: 0 5px 30px 0 rgba(0, 0, 0, .05); + // background-color: red; + + display: flex; + } + + .thumbnail_box { + width: 50%; + min-width: 50%; + left: 0; + + .thumbnail { + position: relative; + width: 100%; + height: 100%; + border-radius: @--border-radius; + overflow: hidden; + background: rgba(0, 0, 0, .05); + + img { + width: 100%; + height: 100%; + object-fit: cover; + transform: scale(1.1); + transition: all 0.5s cubic-bezier(0.25, 0.1, 0.25, 1); + border-radius: @--border-radius; + } + } + } + + header { + display: block; + } + + .entry-title, + .post_content { + margin: 0 0 .5rem 0; + } + + h5 { + font-size: 1.05rem; + } + + .entry-meta, + .post_content { + opacity: .6; + } + + .post_content { + + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + /* autoprefixer: off */ + -webkit-line-clamp: 4; + /* autoprefixer: on */ + } + + .entry-preview .entry-meta { + display: flex; + justify-content: space-between; + font-size: .5rem; + padding: .5rem 0 0 0; + flex-wrap: wrap; + } + + .vcard { + margin: 0 1em 0 0; + } + + .entry-post { + padding: 1rem; + transition: all .5s; + display: flex; + flex-direction: column; + justify-content: space-between; + // height: 100%; + // padding: calc(70% + 1rem) 1rem 1rem 1rem; + + } + + .tag-list a { + margin: 0 .5em 0 0; + font-size: 14px; + } + } + + .thumbnail_box:hover .thumbnail img { + transform: scale(1) translate3d(0, 0, 0); + filter: blur(10px) brightness(.8); + } + + .thumbnail_box:hover .thumbnail:after { + width: 100%; + height: 100%; + opacity: 1; + } + + .thumbnail:before { + content: "\ec2a"; + opacity: .1; + font-size: 3rem; + } + + .thumbnail:after { + width: 70%; + border: 1px solid rgba(255, 255, 255, .75); + opacity: 0; + height: 70%; + transition: all .5s; + z-index: 2; + color: white; + border-radius: @--border-radius; + content: "\e627"; + font-size: 1rem; + text-shadow: 0 1px 5px rgb(0 0 0 / 30%); + } + + .thumbnail:before, + .thumbnail:after { + display: flex; + justify-content: center; + align-items: center; + font-family: 'iconfont'; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + overflow: hidden; + } + + @media screen and (max-width:1024px) { + .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/box14-video2.vue b/src/components/mini/box14-video2.vue deleted file mode 100644 index 6a87937..0000000 --- a/src/components/mini/box14-video2.vue +++ /dev/null @@ -1,263 +0,0 @@ -<template> - <div class="gridClass"> - <div class="entry-preview"> - <div class="thumbnail_box" @click="showMyVideo()"> - <div class="thumbnail"> - <img src="http://t.inleft.com/share/media_photo/faye_video.png" alt="" loading="lazy"> - </div> - </div> - <div class="entry-post"> - <div class="entry-header"> - <h5 class="entry-title"> - <a href="https://www.thyuu.com/word/note/49306" rel="bookmark">翻奏·Faye's Theme</a> - </h5> - <div class="post_content"> - 出自高瞰/的独立游戏(寻找天堂) - <br> - 时间:2020.02某个不眠的深夜 - <br> - 音源/录像: es110的内置录音/mi 9的普通摄像 - <br> - 剪辑:pr(其实就贴了一张图,一镜到底) - </div> - </div> - <div class="entry-meta"> - <div class="post-categories"> - <span class="tag vcard"> - <a href="https://www.thyuu.com/category/word/note" rel="category tag">随心杂记</a> - </span> - <span class="tag-list"> - <a href="https://www.thyuu.com/tag/%e5%bd%b1%e8%af%84" rel="tag">影评</a> - <a href="https://www.thyuu.com/tag/%e7%94%b5%e5%bd%b1" rel="tag">电影</a> - <a href="https://www.thyuu.com/tag/%e8%9c%98%e8%9b%9b%e4%be%a0" rel="tag">蜘蛛侠</a> - </span> - </div> - <div class="post-on"> - <span class="entry-date"> - <a href="https://www.thyuu.com/word/note/49306" title="22:13" rel="bookmark"> - <time datetime="2022-03-22T22:13:02+08:00">5月前</time> - </a> - </span> - </div> - </div> - </div> - - </div> - - <div class="entry-preview"> - <div class="thumbnail_box"> - <div class="thumbnail "> - <img src="http://t.inleft.com/share/media_photo/background.jpg" alt="" loading="lazy"> - </div> - </div> - </div> - <div class="entry-preview "> - <div class="thumbnail_box "> - <div class="thumbnail "> - <img src="http://t.inleft.com/share/media_photo/cat.png" alt="" loading="lazy"> - </div> - </div> - </div> - <div class="entry-preview "> - <div class="thumbnail_box"> - <div class="thumbnail "> - <img src="http://t.inleft.com/share/media_photo/faye_video.png" alt="" loading="lazy"> - </div> - </div> - </div> - <div class="entry-preview "> - <div class="thumbnail_box"> - <div class="thumbnail "> - <img src="http://t.inleft.com/share/media_photo/faye_video.png" alt="" loading="lazy"> - </div> - </div> - </div> - - </div> -</template> -<script> - export default { - methods: { - showMyVideo() { - console.log(22); - this.$emit('showMyVideo') - } - } - } -</script> -<style lang="less"> - @--border-radius: 16px; - @--s-background: 16px; - @--animation-mo: margin 1s cubic-bezier(0.62, 0.21, 0.25, 1) 1 backwards, opacity .75s cubic-bezier(0.62, 0.21, 0.25, 1) 1 backwards; - - @font-face { - font-family: "iconfont"; - /* Project id 2762112 */ - src: url('http://t.inleft.com/share/z%E5%AD%97%E4%BD%93%E5%BA%93/iconfont.woff2') format('woff2'); - } - - .gridClass { - grid-template-columns: repeat(4, 1fr); - display: grid; - clear: both; - gap: 2rem; - // background-color: #666; - - a { - color: #555; - } - - .item1 { - grid-column-start: 1; - grid-column-end: 3; - } - - .entry-preview { - border-radius: @--border-radius; - background: @--s-background, white; - animation: @--animation-mo; - transition: all .5s; - box-shadow: 0 5px 30px 0 rgba(0, 0, 0, .05); - // background-color: red; - - display: flex; - } - - .thumbnail_box { - width: 50%; - min-width: 50%; - left: 0; - - .thumbnail { - position: relative; - width: 100%; - height: 100%; - border-radius: @--border-radius; - overflow: hidden; - background: rgba(0, 0, 0, .05); - - img { - width: 100%; - height: 100%; - object-fit: cover; - transform: scale(1.1); - transition: all 0.5s cubic-bezier(0.25, 0.1, 0.25, 1); - border-radius: @--border-radius; - } - } - } - - header { - display: block; - } - - .entry-title, - .post_content { - margin: 0 0 .5rem 0; - } - - h5 { - font-size: 1.05rem; - } - - .entry-meta, - .post_content { - opacity: .6; - } - - .entry-preview .entry-meta { - display: flex; - justify-content: space-between; - font-size: .5rem; - padding: .5rem 0 0 0; - flex-wrap: wrap; - } - - .vcard { - margin: 0 1em 0 0; - } - - .entry-post { - padding: 1rem; - transition: all .5s; - // height: 100%; - // padding: calc(70% + 1rem) 1rem 1rem 1rem; - // display: flex; - // flex-direction: column; - // justify-content: space-between; - } - - .tag-list a { - margin: 0 .5em 0 0; - font-size: 14px; - } - } - - .thumbnail_box:hover .thumbnail img { - transform: scale(1) translate3d(0, 0, 0); - filter: blur(10px) brightness(.8); - } - - .thumbnail_box:hover .thumbnail:after { - width: 100%; - height: 100%; - opacity: 1; - } - - .thumbnail:before { - content: "\ec2a"; - opacity: .1; - font-size: 3rem; - } - - .thumbnail:after { - width: 70%; - border: 1px solid rgba(255, 255, 255, .75); - opacity: 0; - height: 70%; - transition: all .5s; - z-index: 2; - color: white; - border-radius: @--border-radius; - content: "\e627"; - font-size: 1rem; - text-shadow: 0 1px 5px rgb(0 0 0 / 30%); - } - - .thumbnail:before, - .thumbnail:after { - display: flex; - justify-content: center; - align-items: center; - font-family: 'iconfont'; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - overflow: hidden; - } - - @media screen and (max-width:1024px) { - .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/box14-video3.vue b/src/components/mini/box14-video3.vue new file mode 100644 index 0000000..91aced2 --- /dev/null +++ b/src/components/mini/box14-video3.vue @@ -0,0 +1,248 @@ +<style lang="less" scoped> + .videoBoxList { + display: flex; + // justify-content: space-evenly; + flex-wrap: wrap; + // align-content:flex-start; + min-height: 700px; + align-items: stretch; + } + + .myVideo { + position: relative; + // width: 220px; + // height: 140px; + width: 300px; + height: 180px; + background-color: #565656; + border-radius: 10px; + margin: 10px; + display: flex; + + .face { + z-index: 1; + } + + img { + max-width: 100%; + } + } + + + .myVideo:hover { + .mark { + background-color: #000; + display: initial; + } + + .player-video-state { + // display: initial; + } + } + + + + + .dplayer { + width: 500px; + } + + .mark { + opacity: 0.45; + width: 100%; + height: 100%; + position: absolute; + display: none; + } + + .player-video-state { + // position: absolute; + left: 43%; + top: 35%; + width: 50px; + height: 50px; + display: none; + } +</style> + +<template> + <div> + <div class="videoBoxList"> + <div class="myVideo" v-for=" (temp,index) in ['test1','test2','test3','test4','test5']"> + <div :id="temp" :ref="temp" class="dplayer"></div> + <!-- <div class="mark" ></div> --> + <!-- <img src="qq.png"> --> + <!-- 视频 --> + <div class="player-video-state"> + <span class="bp-svgicon"> + <svg viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <path id="pid-1-svgo-a" d="M0 0h80v80H0z"></path> + <path + d="M52.546 8.014a3.998 3.998 0 014.222 3.077c.104.446.093.808.039 1.138a2.74 2.74 0 01-.312.881c-.073.132-.16.254-.246.376l-.257.366-.521.73c-.7.969-1.415 1.926-2.154 2.866l-.015.02a240.945 240.945 0 015.986.341l1.643.123.822.066.41.034.206.018.103.008.115.012c1.266.116 2.516.45 3.677.975a11.663 11.663 0 013.166 2.114c.931.87 1.719 1.895 2.321 3.022a11.595 11.595 0 011.224 3.613c.03.157.046.316.068.474l.015.119.013.112.022.206.085.822.159 1.646c.1 1.098.19 2.198.27 3.298.315 4.4.463 8.829.36 13.255a166.489 166.489 0 01-.843 13.213c-.012.127-.034.297-.053.454a7.589 7.589 0 01-.072.475l-.04.237-.05.236a11.762 11.762 0 01-.74 2.287 11.755 11.755 0 01-5.118 5.57 11.705 11.705 0 01-3.623 1.263c-.158.024-.316.052-.475.072l-.477.053-.821.071-1.644.134c-1.096.086-2.192.16-3.288.23a260.08 260.08 0 01-6.578.325c-8.772.324-17.546.22-26.313-.302a242.458 242.458 0 01-3.287-.22l-1.643-.129-.822-.069-.41-.035-.206-.018c-.068-.006-.133-.01-.218-.02a11.566 11.566 0 01-3.7-.992 11.732 11.732 0 01-5.497-5.178 11.73 11.73 0 01-1.215-3.627c-.024-.158-.051-.316-.067-.475l-.026-.238-.013-.119-.01-.103-.07-.823-.132-1.648a190.637 190.637 0 01-.22-3.298c-.256-4.399-.358-8.817-.258-13.233.099-4.412.372-8.811.788-13.197a11.65 11.65 0 013.039-6.835 11.585 11.585 0 016.572-3.563c.157-.023.312-.051.47-.07l.47-.05.82-.07 1.643-.13a228.493 228.493 0 016.647-.405l-.041-.05a88.145 88.145 0 01-2.154-2.867l-.52-.73-.258-.366c-.086-.122-.173-.244-.246-.376a2.74 2.74 0 01-.312-.881 2.808 2.808 0 01.04-1.138 3.998 3.998 0 014.22-3.077 2.8 2.8 0 011.093.313c.294.155.538.347.742.568.102.11.19.23.28.35l.27.359.532.72a88.059 88.059 0 012.06 2.936 73.036 73.036 0 011.929 3.03c.187.313.373.628.556.945 2.724-.047 5.447-.056 8.17-.038.748.006 1.496.015 2.244.026.18-.313.364-.624.549-.934a73.281 73.281 0 011.93-3.03 88.737 88.737 0 012.059-2.935l.533-.72.268-.359c.09-.12.179-.24.281-.35a2.8 2.8 0 011.834-.881zM30.13 34.631a4 4 0 00-.418 1.42 91.157 91.157 0 00-.446 9.128c0 2.828.121 5.656.364 8.483l.11 1.212a4 4 0 005.858 3.143c2.82-1.498 5.55-3.033 8.193-4.606a177.41 177.41 0 005.896-3.666l1.434-.942a4 4 0 00.047-6.632 137.703 137.703 0 00-7.377-4.708 146.88 146.88 0 00-6.879-3.849l-1.4-.725a4 4 0 00-5.382 1.742z" + id="pid-1-svgo-d"></path> + <filter x="-15.4%" y="-16.3%" width="130.9%" height="132.5%" + filterUnits="objectBoundingBox" id="pid-1-svgo-c"> + <feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> + <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"> + </feGaussianBlur> + <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0" + in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> + <feOffset in="SourceAlpha" result="shadowOffsetOuter2"></feOffset> + <feGaussianBlur stdDeviation="3.5" in="shadowOffsetOuter2" + result="shadowBlurOuter2"> + </feGaussianBlur> + <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0" + in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix> + <feMerge> + <feMergeNode in="shadowMatrixOuter1"></feMergeNode> + <feMergeNode in="shadowMatrixOuter2"></feMergeNode> + </feMerge> + </filter> + </defs> + <g fill="none" fill-rule="evenodd" opacity=".8"> + <mask id="pid-1-svgo-b" fill="#fff"> + <use xlink:href="#pid-1-svgo-a"></use> + </mask> + <g mask="url(#pid-1-svgo-b)"> + <use fill="#000" filter="url(#pid-1-svgo-c)" xlink:href="#pid-1-svgo-d"></use> + <use fill="#FFF" xlink:href="#pid-1-svgo-d"></use> + </g> + </g> + </svg> + </span> + </div> + </div> + </div> + </div> +</template> + +<script> + import Hls from 'hls.js' + import DPlayer from 'dplayer' + + export default { + data() { + return { + dp: null, + video: {}, + video1: {}, + video2: {}, + } + }, + methods: { + myPlay() { + this.$message.info("start play..") + }, + loadVideo(videoInfo, index) { + this.dp = new DPlayer({ + element: document.getElementById(index), + //logo: "https://qczh-1252727916.cos.ap-nanjing.myqcloud.com/pic/273658f508d04d488414fd2b84c9f923.png", // 在视频左上角上打一个logo + // hotkey: true, // 是否支持热键,调节音量,播放,暂停等 + mutex: false, // 防止同时播放多个用户,在该用户开始播放时暂停其他用户 + theme: "#b7daff", // 风格颜色,例如播放条,音量条的颜色 + loop: false, // 是否自动循环 + lang: "zh-cn", // 语言,'en', 'zh-cn', 'zh-tw' + // screenshot: true, // 是否允许截图(按钮),点击可以自动将截图下载到本地 + preload: "auto", // 自动预加载 + volume: 0.1, // 初始化音量 + playbackSpeed: [2, 1, 0.5], //可选的播放速度,可自定义 + contextmenu: [ + // 自定义上下文菜单 + // 右键菜单 + { + text: "b站", + link: "https://www.bilibili.com" + }, + { + text: "选项二", + click: player => { + console.log(player); + } + } + ], + highlight: [ + //进度条上的自定义时间标记 + // 进度条时间点高亮 + { + text: "10M", + time: 60 + }, + { + text: "20M", + time: 120 + } + ], + video: { + pic: videoInfo.img, // 视频封面 + url: videoInfo.url, + type: videoInfo.type, + customType: { + customHls: function(video, player) { + const hls = new Hls() + hls.loadSource(video.src) + hls.attachMedia(video) + } + } + } + }) + } + }, + mounted() { + this.video1 = { + img: "http://t.inleft.com/share/media_photo/faye_video.png", + url: "http://t.inleft.com/share/myVideo/faye/faye.m3u8", + type: "customHls" + } + this.video2 = { + img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", + url: "http://t.inleft.com/share/myVideo/canon/canon.m3u8", + type: "customHls" + } + this.video3 = { + img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", + url: "http://t.inleft.com/share/mp3/EOPMusic%283%29.mp3", + type: "normal" + } + this.video4 = { + img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", + url: "http://t.inleft.com/share/mp3/EOPMusic%284%29.mp3", + type: "normal" + } + this.video5 = { + img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", + url: "http://t.inleft.com/share/mp3/EOPMusic%282%29.mp3", + type: "normal" + } + + // getVideo: ajax request for getting videoInfo + /* getVideo().then(res => { + this.video = res.data.video + this.laodVideo(this.video) + }) */ + this.video = { + //封面 + //img: "https://cn.bing.com/th?id=OHR.MeotoIwa_ZH-CN3126370410_1920x1080.jpg&rf=LaDigue_1920x1080.jpg", + img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", + // video: "https://vod3.bdzybf3.com/20210509/ZMHA3RpS/1000kb/hls/index.m3u8", + // video: "http://t.inleft.com/share/ckplayer/ckplayer-master/sample/test/video_tieba.m3u8", + // video: videoUrl, + // video: "http://t.inleft.com/share/mp3/inleft-test-20211103-rainbow.mp3", + } + this.loadVideo(this.video1, "test1") + this.loadVideo(this.video2, "test2") + this.loadVideo(this.video3, "test3") + this.loadVideo(this.video4, "test4") + this.loadVideo(this.video5, "test5") + + // 以下为隐藏一些作者的信息和视频播放源 如不需要可删除 + // document.querySelector(".dplayer-menu").remove(); //隐藏右键菜单 + document.querySelector(".dplayer-mask").remove(); + document.querySelector(".dplayer-info-panel-item-url").remove(); //隐藏播放源 + let length = document.querySelectorAll(".dplayer-menu-item").length; + document.querySelectorAll(".dplayer-menu-item")[length - 2].remove(); // 去掉作者信息 + document.querySelectorAll(".dplayer-menu-item")[length - 1].remove(); // 去掉作者信息 + } + } +</script> diff --git a/src/components/mini/box15-videoPlayBox.vue b/src/components/mini/box15-videoPlayBox.vue new file mode 100644 index 0000000..b009a2b --- /dev/null +++ b/src/components/mini/box15-videoPlayBox.vue @@ -0,0 +1,188 @@ +<template> + <div> + <div class="myVideo"> + <div id="videoPlay" ref="test1" class="dplayer"></div> + <!-- <div class="mark" ></div> --> + <!-- 视频 --> + <div class="player-video-state"> + <span class="bp-svgicon"> + <svg viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <path id="pid-1-svgo-a" d="M0 0h80v80H0z"></path> + <path + d="M52.546 8.014a3.998 3.998 0 014.222 3.077c.104.446.093.808.039 1.138a2.74 2.74 0 01-.312.881c-.073.132-.16.254-.246.376l-.257.366-.521.73c-.7.969-1.415 1.926-2.154 2.866l-.015.02a240.945 240.945 0 015.986.341l1.643.123.822.066.41.034.206.018.103.008.115.012c1.266.116 2.516.45 3.677.975a11.663 11.663 0 013.166 2.114c.931.87 1.719 1.895 2.321 3.022a11.595 11.595 0 011.224 3.613c.03.157.046.316.068.474l.015.119.013.112.022.206.085.822.159 1.646c.1 1.098.19 2.198.27 3.298.315 4.4.463 8.829.36 13.255a166.489 166.489 0 01-.843 13.213c-.012.127-.034.297-.053.454a7.589 7.589 0 01-.072.475l-.04.237-.05.236a11.762 11.762 0 01-.74 2.287 11.755 11.755 0 01-5.118 5.57 11.705 11.705 0 01-3.623 1.263c-.158.024-.316.052-.475.072l-.477.053-.821.071-1.644.134c-1.096.086-2.192.16-3.288.23a260.08 260.08 0 01-6.578.325c-8.772.324-17.546.22-26.313-.302a242.458 242.458 0 01-3.287-.22l-1.643-.129-.822-.069-.41-.035-.206-.018c-.068-.006-.133-.01-.218-.02a11.566 11.566 0 01-3.7-.992 11.732 11.732 0 01-5.497-5.178 11.73 11.73 0 01-1.215-3.627c-.024-.158-.051-.316-.067-.475l-.026-.238-.013-.119-.01-.103-.07-.823-.132-1.648a190.637 190.637 0 01-.22-3.298c-.256-4.399-.358-8.817-.258-13.233.099-4.412.372-8.811.788-13.197a11.65 11.65 0 013.039-6.835 11.585 11.585 0 016.572-3.563c.157-.023.312-.051.47-.07l.47-.05.82-.07 1.643-.13a228.493 228.493 0 016.647-.405l-.041-.05a88.145 88.145 0 01-2.154-2.867l-.52-.73-.258-.366c-.086-.122-.173-.244-.246-.376a2.74 2.74 0 01-.312-.881 2.808 2.808 0 01.04-1.138 3.998 3.998 0 014.22-3.077 2.8 2.8 0 011.093.313c.294.155.538.347.742.568.102.11.19.23.28.35l.27.359.532.72a88.059 88.059 0 012.06 2.936 73.036 73.036 0 011.929 3.03c.187.313.373.628.556.945 2.724-.047 5.447-.056 8.17-.038.748.006 1.496.015 2.244.026.18-.313.364-.624.549-.934a73.281 73.281 0 011.93-3.03 88.737 88.737 0 012.059-2.935l.533-.72.268-.359c.09-.12.179-.24.281-.35a2.8 2.8 0 011.834-.881zM30.13 34.631a4 4 0 00-.418 1.42 91.157 91.157 0 00-.446 9.128c0 2.828.121 5.656.364 8.483l.11 1.212a4 4 0 005.858 3.143c2.82-1.498 5.55-3.033 8.193-4.606a177.41 177.41 0 005.896-3.666l1.434-.942a4 4 0 00.047-6.632 137.703 137.703 0 00-7.377-4.708 146.88 146.88 0 00-6.879-3.849l-1.4-.725a4 4 0 00-5.382 1.742z" + id="pid-1-svgo-d"></path> + <filter x="-15.4%" y="-16.3%" width="130.9%" height="132.5%" filterUnits="objectBoundingBox" + id="pid-1-svgo-c"> + <feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> + <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"> + </feGaussianBlur> + <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0" in="shadowBlurOuter1" + result="shadowMatrixOuter1"></feColorMatrix> + <feOffset in="SourceAlpha" result="shadowOffsetOuter2"></feOffset> + <feGaussianBlur stdDeviation="3.5" in="shadowOffsetOuter2" result="shadowBlurOuter2"> + </feGaussianBlur> + <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0" in="shadowBlurOuter2" + result="shadowMatrixOuter2"></feColorMatrix> + <feMerge> + <feMergeNode in="shadowMatrixOuter1"></feMergeNode> + <feMergeNode in="shadowMatrixOuter2"></feMergeNode> + </feMerge> + </filter> + </defs> + <g fill="none" fill-rule="evenodd" opacity=".8"> + <mask id="pid-1-svgo-b" fill="#fff"> + <use xlink:href="#pid-1-svgo-a"></use> + </mask> + <g mask="url(#pid-1-svgo-b)"> + <use fill="#000" filter="url(#pid-1-svgo-c)" xlink:href="#pid-1-svgo-d"></use> + <use fill="#FFF" xlink:href="#pid-1-svgo-d"></use> + </g> + </g> + </svg> + </span> + </div> + </div> + </div> +</template> + +<script> + import Hls from 'hls.js' + import DPlayer from 'dplayer' + + export default { + data() { + return { + dp: null, + video: {}, + } + }, + methods: { + myPlay() { + this.$message.info("start play..") + }, + loadVideo(videoInfo) { + this.dp = new DPlayer({ + element: document.getElementById("videoPlay"), + //logo: "https://qczh-1252727916.cos.ap-nanjing.myqcloud.com/pic/273658f508d04d488414fd2b84c9f923.png", // 在视频左上角上打一个logo + // hotkey: true, // 是否支持热键,调节音量,播放,暂停等 + mutex: false, // 防止同时播放多个用户,在该用户开始播放时暂停其他用户 + theme: "#b7daff", // 风格颜色,例如播放条,音量条的颜色 + loop: false, // 是否自动循环 + lang: "zh-cn", // 语言,'en', 'zh-cn', 'zh-tw' + // screenshot: true, // 是否允许截图(按钮),点击可以自动将截图下载到本地 + preload: "auto", // 自动预加载 + volume: 0.1, // 初始化音量 + playbackSpeed: [2, 1, 0.5], //可选的播放速度,可自定义 + contextmenu: [ + // 自定义上下文菜单 + //右键菜单 + { + text: "b站", + link: "https://www.bilibili.com" + }, + // { + // text: "选项二", + // click: player => { + // console.log(player); + // } + // } + ], + highlight: [ + //进度条上的自定义时间标记 + // 进度条时间点高亮 + { + text: "10M", + time: 60 + }, + { + text: "20M", + time: 120 + } + ], + video: { + pic: videoInfo.img, // 视频封面 + url: videoInfo.url, + type: videoInfo.type, + customType: { + customHls: function(video, player) { + const hls = new Hls() + hls.loadSource(video.src) + hls.attachMedia(video) + } + } + } + }) + } + }, + mounted() { + + this.video = { + img: "http://t.inleft.com/share/media_photo/idea_beijing.jpg", + url: "http://t.inleft.com/share/mp3/EOPMusic%282%29.mp3", + type: "normal" + } + + this.loadVideo(this.video) + + // 以下为隐藏一些作者的信息和视频播放源 如不需要可删除 + // document.querySelector(".dplayer-menu").remove(); //隐藏右键菜单 + document.querySelector(".dplayer-mask").remove(); + document.querySelector(".dplayer-info-panel-item-url").remove(); //隐藏播放源 + let length = document.querySelectorAll(".dplayer-menu-item").length; + document.querySelectorAll(".dplayer-menu-item")[length - 1].remove(); // 去掉作者信息 + document.querySelectorAll(".dplayer-menu-item")[length - 2].remove(); // 去掉作者信息 + } + } +</script> +<style lang="less" scoped> + .myVideo { + position: relative; + // width: 220px; + // height: 140px; + width: 300px; + height: 180px; + background-color: #565656; + border-radius: 10px; + margin: 10px; + display: flex; + + + } + + + .myVideo:hover { + .mark { + background-color: #000; + display: initial; + } + + .player-video-state { + // display: initial; + } + } + + + .dplayer { + width: 500px; + } + + .mark { + opacity: 0.45; + width: 100%; + height: 100%; + position: absolute; + background-color: #000; + display: none; + } + + .player-video-state { + position: absolute; + left: 43%; + top: 35%; + width: 50px; + height: 50px; + display: none; + } +</style> diff --git a/src/components/mini/mdDetail.vue b/src/components/mini/mdDetail.vue index 17c00c3..2513e82 100644 --- a/src/components/mini/mdDetail.vue +++ b/src/components/mini/mdDetail.vue @@ -7,8 +7,8 @@ </div> <div v-if="showMsg && !myLock"> - <div class="mySecretSamll" v-if="articleFileType==5"> - + <div class="mySecretSamll" v-if="articleFileType==myConstant.fileTypeShort"> + <p>碎碎念只有那么一点了,但是下面依旧可以碎碎念</p> </div> <div class="mySecret" v-else> <h1>怎样才能让你看到我呢</h1> @@ -34,9 +34,7 @@ <vue-markdown :source="source"></vue-markdown> </div> </div> - <div class="articleInfoMiniData"> - - + <div class="articleInfoMiniData" > <div class="smallOption" @click="articleOptionHandle('dislike')"> <a-icon type="dislike" style="margin-top: 2px;" /> </div> @@ -76,7 +74,8 @@ import comment from "../mini/box12-comment.vue" import axios from 'axios' - + import myConstant from "../../config/myConstant.js" + export default { components: { VueMarkdown, @@ -84,10 +83,11 @@ }, data() { return { + myConstant:myConstant, articelMeta: "", isAllowedComment: 1, articleId: "", - articleFileType: 1, + articleFileType: myConstant.fileTypeMarkDown, source: "", showMsg: false, myLock: false, @@ -131,7 +131,7 @@ this.showMsg = true; this.errorMsg = "加载中.."; - if (this.articleFileType == 5) { + if (this.articleFileType == myConstant.fileTypeShort) { this.errorMsg = "没有更多啦.."; return } diff --git a/src/config/myConstant.js b/src/config/myConstant.js new file mode 100644 index 0000000..fe586e0 --- /dev/null +++ b/src/config/myConstant.js @@ -0,0 +1,10 @@ +//常量 +const myConstant = { + fileTypeMarkDown: 1, + fileTypeHtml: 2, + fileTypeVideo: 3, + fileTypeMp3: 4, + fileTypeShort: 5, + fileTypeCover: 9, +} +export default myConstant; -- Gitblit v1.9.1