| | |
| | | <template> |
| | | <div class="article-meta "> |
| | | <a-button @click="back" style="position: absolute;"> |
| | | <a-icon type="left" /> |
| | | </a-button> |
| | | <!-- <a-divider orientation="left"> |
| | | 文章详情 |
| | | </a-divider> --> |
| | | <div class="markdown-body article-detail"> |
| | | <vue-markdown :source="source"></vue-markdown> |
| | | <div class="article-meta"> |
| | | <div> |
| | | <a-button @click="back" style="position: absolute;"> |
| | | <a-icon type="left" /> |
| | | </a-button> |
| | | </div> |
| | | |
| | | <div class="mySecretSamll" v-if="showMsg && !myLock"> |
| | | <div v-if="articleFileType==5"> |
| | | |
| | | </div> |
| | | <div class="mySecret" v-else> |
| | | <h1>怎样才能让你看到我呢</h1> |
| | | <h1>只要你要,只要我有...</h1> |
| | | </div> |
| | | <span class="myTip">{{errorMsg}}</span> |
| | | </div> |
| | | |
| | | <div v-else> |
| | | <div class="mySecret" v-if="myLock"> |
| | | <h1>越不正经的人越深情..</h1> |
| | | <h3>受庇护的文字..输入神秘代码以解除封印</h3> |
| | | |
| | | <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="markdown-body article-detail" v-else> |
| | | <vue-markdown :source="source"></vue-markdown> |
| | | </div> |
| | | </div> |
| | | <div class="articleInfoMiniData"> |
| | | |
| | | |
| | | <div class="smallOption" @click="articleOptionHandle('dislike')"> |
| | | <a-icon type="dislike" style="margin-top: 2px;" /> |
| | | </div> |
| | | <div> |
| | | <a-icon type="read" class="samllPadding" /> |
| | | <span>{{articelMeta.readCount==null?'--':articelMeta.readCount}}</span> |
| | | </div> |
| | | <div class="smallOption" @click="articleOptionHandle('like')"> |
| | | <a-icon type="like" class="samllPadding" /> |
| | | <span>{{articelMeta.likeCount==null?'0':articelMeta.likeCount}}</span> |
| | | </div> |
| | | <div> |
| | | <!-- <a-icon type="folder-open" class="samllPadding" /> --> |
| | | <a-icon type="book" class="samllPadding" /> |
| | | <span>{{articelMeta.articleTypeName==null?'--':articelMeta.articleTypeName}}</span> |
| | | </div> |
| | | <div> |
| | | <a-icon type="calendar" class="samllPadding" /> |
| | | <span>{{articelMeta.publishDate==null?'--':articelMeta.publishDate}}</span> |
| | | </div> |
| | | </div> |
| | | <div class="articleComment"> |
| | | <comment ref="myComment" :articleId="articleId" :isAllowedComment="isAllowedComment" /> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import VueMarkdown from 'vue-markdown' |
| | | import esPath from '../../assets/es.md' |
| | | import md5 from 'js-md5'; |
| | | |
| | | import { |
| | | queryBlogArticleDetail |
| | | } from '../../api/blogArticle.js' |
| | | import comment from "../mini/box12-comment.vue" |
| | | |
| | | import axios from 'axios' |
| | | |
| | | export default { |
| | | // props: ['id'], //接收动态路由的值 |
| | | components: { |
| | | VueMarkdown |
| | | VueMarkdown, |
| | | comment |
| | | }, |
| | | data() { |
| | | return { |
| | | source: esPath, |
| | | articelMeta: "", |
| | | isAllowedComment: 1, |
| | | articleId: "", |
| | | articleFileType: 1, |
| | | source: "", |
| | | showMsg: false, |
| | | myLock: false, |
| | | errorMsg: '', |
| | | secret: '', |
| | | search: { |
| | | placeholder: "", |
| | | autoFocus: false, |
| | | backfill: true, |
| | | value: '', |
| | | disabled: false |
| | | }, |
| | | } |
| | | }, |
| | | created() { |
| | | this.articleId = this.$route.query.id; |
| | | this.articleFileType = this.$route.query.articleFileType; |
| | | }, |
| | | watch: { |
| | | '$route'(to, from) { |
| | | if ("mdDetail" === to.name) { |
| | | this.articleId = this.$route.query.id; |
| | | this.articleFileType = this.$route.query.articleFileType; |
| | | } |
| | | }, |
| | | articleId: function(newValue, oldValue) { |
| | | if (newValue == undefined || newValue == null || newValue == "") { |
| | | this.showMsg = true; |
| | | this.errorMsg = "日志id参数缺失"; |
| | | } else { |
| | | this.queryDetail(); |
| | | this.$refs.myComment.updateCommentList(this.articleId); |
| | | } |
| | | }, |
| | | }, |
| | | methods: { |
| | | articleOptionHandle(type) { |
| | | this.$message.info(type) |
| | | }, |
| | | queryDetail() { |
| | | this.showMsg = true; |
| | | this.errorMsg = "加载中.."; |
| | | |
| | | if (this.articleFileType == 5) { |
| | | this.errorMsg = "没有更多啦.."; |
| | | return |
| | | } |
| | | |
| | | queryBlogArticleDetail({ |
| | | id: this.articleId, |
| | | authWord: this.secret == "" ? null : md5(this.secret) |
| | | }).then((res) => { |
| | | this.showMsg = true; |
| | | this.myLock = false; |
| | | this.errorMsg = res.message; |
| | | this.source = ""; |
| | | if (res.code != 200) { |
| | | |
| | | if (res.code == 1019001) { |
| | | //日志需要授权 |
| | | this.errorMsg = ""; |
| | | this.myLock = true; |
| | | } else if (res.code == 1019002) { |
| | | //授权码错误 |
| | | this.errorMsg = "口令错误..神秘力量依然阻止了你的前进"; |
| | | this.myLock = true; |
| | | } else { |
| | | this.$notification.error({ |
| | | message: '好像哪里不对劲..', |
| | | description: res.message, |
| | | placement: 'bottomRight' |
| | | }); |
| | | } |
| | | return |
| | | } |
| | | // this.test = res.data.isAllowedComment == 1 ? true : false; |
| | | |
| | | this.isAllowedComment = res.data.isAllowedComment; |
| | | this.articelMeta = res.data; |
| | | this.$axios |
| | | .get(res.data.articleFileURL) |
| | | .then((res) => { |
| | | this.source = res.data; |
| | | }) |
| | | |
| | | //获取日志资源文件 |
| | | this.showMsg = false; |
| | | this.errorMsg = ""; |
| | | }) |
| | | }, |
| | | pressEnter() { |
| | | if (this.secret == "") { |
| | | return |
| | | } |
| | | this.search.disabled = true |
| | | this.source = ""; |
| | | this.$message |
| | | .loading('卍解..', 1) |
| | | .then(() => { |
| | | this.queryDetail(); |
| | | this.search.disabled = false; |
| | | }) |
| | | |
| | | }, |
| | | back: function() { |
| | | this.$router.go(-1); |
| | | |
| | | } |
| | | }, |
| | | mounted() { |
| | | // console.log(this.$route.params) |
| | | // console.log(this.$route.params.id) |
| | | // console.log(this.$route.query.id) |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style lang="less"> |
| | | @import '../../assets/md.less'; |
| | | |
| | | .markdown-body { |
| | | padding: 10px 20px 10px 20px; |
| | | |
| | | .smallOption { |
| | | transition-function: ease-out; |
| | | transition-duration: 200ms; |
| | | -webkit-transition-function: ease-out; |
| | | -webkit-transition-duration: 200ms; |
| | | -moztransition-function: ease-out; |
| | | -moztransition-duration: 200ms; |
| | | -o-transition-function: ease-out; |
| | | -o-transition-duration: 200ms; |
| | | } |
| | | |
| | | .smallOption:hover { |
| | | transform: scale(1.55, 1.55); |
| | | -webkit-transform: scale(1.55, 1.55); |
| | | -moz-transform: scale(1.55, 1.55); |
| | | -o-transform: scale(1.55, 1.55); |
| | | } |
| | | |
| | | .articleInfoMiniData { |
| | | user-select: none; |
| | | box-shadow: 8px 8px 18px rgba(0, 0, 0, 0.1), -8px -8px 18px #ffffff; |
| | | padding: 10px 50px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .mySecret { |
| | | height: 715px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | padding-left: auto; |
| | | align-items: center; |
| | | } |
| | | |
| | | .mySecretSamll { |
| | | height: 115px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | padding-left: auto; |
| | | align-items: center; |
| | | } |
| | | |
| | | |
| | | .markdown-body, |
| | | .articleComment { |
| | | min-height: 750px; |
| | | padding: 35px 20px 10px 20px; |
| | | box-shadow: 8px 8px 18px rgba(0, 0, 0, 0.1), |
| | | -8px -8px 18px #ffffff; |
| | | } |