|
|
@@ -0,0 +1,209 @@
|
|
|
+<template>
|
|
|
+<ErrorPage404 v-if="!isExist"></ErrorPage404>
|
|
|
+<div v-else :class="mobile ? 'mobileMain' : 'mobileWeb'" :style="{marginTop: mainMarginTop}">
|
|
|
+ <div class="dynamic-info-wrapper-mobile">
|
|
|
+ <div class="dynamic-info-main">
|
|
|
+ <div class="dynamic-info-user">
|
|
|
+ <div class="dynamic-info-user-avatar">
|
|
|
+ <img :src="dynamicDetail.user_info.icon_url" />
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-info-user-info">
|
|
|
+ <div class="dynamic-info-user-nickname">{{dynamicDetail.title}} <span class="dynamic-info-user-level">F{{dynamicDetail.user_info.freework_level}}</span></div>
|
|
|
+ <div class="dynamic-info-user-title">
|
|
|
+ <span>{{dynamicDetail.title}}</span>
|
|
|
+ <span>{{dynamicDetail.user_info.tag[1] ? "· "+dynamicDetail.user_info.tag[1].name : ''}}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-info-user-menu"></div>
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-info-content">
|
|
|
+ {{dynamicDetail.title}}
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-info-type-area">
|
|
|
+ <div class="dynamic-info-type">
|
|
|
+ # {{dynamicDetail.type_text}}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-info-img-list">
|
|
|
+ <div class="dynamic-info-img-item" v-for="item in dynamicDetail.img" :key="item.img">
|
|
|
+ <img :src="item.img" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="dynamic-info-resources-link">
|
|
|
+ <div class="dynamic-info-resources-img">
|
|
|
+ <img src="https://iph.href.lu/100x100?fg=666666&bg=cccccc" />
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-info-resources-title">仿微信Flutter开发源码</div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="dynamic-info-like">
|
|
|
+ <div class="dynamic-info-like-item dynamic-info-like-count">
|
|
|
+ {{dynamicDetail.z_num}}
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-info-like-item dynamic-info-comment-count">
|
|
|
+ {{dynamicDetail.c_num}}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="dynamic-comment-main">
|
|
|
+ <div class="dynamic-comment-title">评论</div>
|
|
|
+
|
|
|
+ <ul class="dynamic-comment-list">
|
|
|
+ <li class="dynamic-comment-item">
|
|
|
+ <div class="dynamic-comment-avatar">
|
|
|
+ <img src="https://iph.href.lu/100x100?fg=666666&bg=cccccc" />
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-comment-info">
|
|
|
+ <div class="dynamic-comment-item-top">
|
|
|
+ <div class="dynamic-comment-nickname">Keimi</div>
|
|
|
+ <div class="dynamic-comment-time">2020-03-12</div>
|
|
|
+ <div class="dynamic-comment-more"></div>
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-comment-content">
|
|
|
+ 我还在很愉快 期待下次合作
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ <li class="dynamic-comment-item">
|
|
|
+ <div class="dynamic-comment-avatar">
|
|
|
+ <img src="https://iph.href.lu/100x100?fg=666666&bg=cccccc" />
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-comment-info">
|
|
|
+ <div class="dynamic-comment-item-top">
|
|
|
+ <div class="dynamic-comment-nickname">Keimi</div>
|
|
|
+ <div class="dynamic-comment-time">2020-03-12</div>
|
|
|
+ <div class="dynamic-comment-more"></div>
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-comment-content">
|
|
|
+ 我还在很愉快 期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ <li class="dynamic-comment-item">
|
|
|
+ <div class="dynamic-comment-avatar">
|
|
|
+ <img src="https://iph.href.lu/100x100?fg=666666&bg=cccccc" />
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-comment-info">
|
|
|
+ <div class="dynamic-comment-item-top">
|
|
|
+ <div class="dynamic-comment-nickname">Keimi</div>
|
|
|
+ <div class="dynamic-comment-time">2020-03-12</div>
|
|
|
+ <div class="dynamic-comment-more"></div>
|
|
|
+ </div>
|
|
|
+ <div class="dynamic-comment-content">
|
|
|
+ 我还在很愉快 期待下次合作
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import {
|
|
|
+ mapState
|
|
|
+} from "vuex"
|
|
|
+import DynamicInfoData from "@/components/dynamic/DynamicInfo.js"
|
|
|
+import qs from "qs"
|
|
|
+import ErrorPage404 from "@/components/error_page/404.vue"
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'SeoDynamicDetail',
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ baseUrl: '',
|
|
|
+ isWeixinApp: true,
|
|
|
+ isExist: true,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ components: {
|
|
|
+ ErrorPage404
|
|
|
+ },
|
|
|
+ head() {
|
|
|
+ const {
|
|
|
+ title = "",
|
|
|
+ keyword = "",
|
|
|
+ description = "",
|
|
|
+ h1 = "",
|
|
|
+ canonical = "",
|
|
|
+ metaLocation
|
|
|
+ } = this.head || {}
|
|
|
+ let obj = {
|
|
|
+ title: title,
|
|
|
+ meta: [{
|
|
|
+ name: "keywords",
|
|
|
+ content: keyword
|
|
|
+ }, {
|
|
|
+ name: "description",
|
|
|
+ content: description
|
|
|
+ }, {
|
|
|
+ name: "h1",
|
|
|
+ content: h1
|
|
|
+ }, {
|
|
|
+ name: "viewport",
|
|
|
+ content: "width=device-width, initial-scale=1.0, viewport-fit=cover"
|
|
|
+ }],
|
|
|
+ link: [{
|
|
|
+ rel: "canonical",
|
|
|
+ href: canonical
|
|
|
+ }]
|
|
|
+ }
|
|
|
+ if (metaLocation) {
|
|
|
+ obj.meta.push({
|
|
|
+ name: "location",
|
|
|
+ content: metaLocation
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return obj
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapState(["deviceType"]),
|
|
|
+ showWxHeader() {
|
|
|
+ return !this.deviceType.app && !this.isWeixinApp &&
|
|
|
+ (this.deviceType.android || this.deviceType.ios)
|
|
|
+ },
|
|
|
+ mainMarginTop() {
|
|
|
+ if (this.mobile && this.showWxHeader) {
|
|
|
+ return '0 !important'
|
|
|
+ } else if (this.mobile) {
|
|
|
+ return '0px !important'
|
|
|
+ } else {
|
|
|
+ return '20px !important'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async asyncData({
|
|
|
+ ...params
|
|
|
+ }) {
|
|
|
+ let dynamicInfoData = new DynamicInfoData(params)
|
|
|
+ let ans = await dynamicInfoData.dealData()
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...ans
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ const self = this
|
|
|
+ this.isWeixinApp = navigator.userAgent.indexOf("miniProgram") > -1
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import "@/assets/css/dynamic/info.scss";
|
|
|
+</style>
|
|
|
+<style lang="scss">
|
|
|
+strong {
|
|
|
+ font-weight: bold !important;
|
|
|
+}
|
|
|
+
|
|
|
+em {
|
|
|
+ font-style: italic !important;
|
|
|
+}
|
|
|
+</style>
|