Showing
17 changed files
with
189 additions
and
34 deletions
@@ -15,12 +15,16 @@ export default { | @@ -15,12 +15,16 @@ export default { | ||
15 | user: { | 15 | user: { |
16 | type: String, | 16 | type: String, |
17 | default: '' | 17 | default: '' |
18 | - } | 18 | + }, |
19 | + share: Boolean | ||
19 | }, | 20 | }, |
20 | methods: { | 21 | methods: { |
21 | ...mapActions(['postComment']), | 22 | ...mapActions(['postComment']), |
22 | ...articleMapActions(['fetchArticleUpdate']), | 23 | ...articleMapActions(['fetchArticleUpdate']), |
23 | async openComentInput() { | 24 | async openComentInput() { |
25 | + if (this.share) { | ||
26 | + return this.$links.toDownloadApp(); | ||
27 | + } | ||
24 | const user = await this.$sdk.getUser(); | 28 | const user = await this.$sdk.getUser(); |
25 | 29 | ||
26 | if (user && user.uid) { | 30 | if (user && user.uid) { |
@@ -26,7 +26,8 @@ export default { | @@ -26,7 +26,8 @@ export default { | ||
26 | props: { | 26 | props: { |
27 | single: Boolean, | 27 | single: Boolean, |
28 | lazy: Boolean, | 28 | lazy: Boolean, |
29 | - product: Object | 29 | + product: Object, |
30 | + share: Boolean | ||
30 | }, | 31 | }, |
31 | data() { | 32 | data() { |
32 | return { | 33 | return { |
@@ -50,6 +51,9 @@ export default { | @@ -50,6 +51,9 @@ export default { | ||
50 | methods: { | 51 | methods: { |
51 | ...mapActions(['postProductFav']), | 52 | ...mapActions(['postProductFav']), |
52 | async onFav() { | 53 | async onFav() { |
54 | + if (this.share) { | ||
55 | + return this.$links.toDownloadApp(); | ||
56 | + } | ||
53 | if (this.posting) { | 57 | if (this.posting) { |
54 | return; | 58 | return; |
55 | } | 59 | } |
@@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
2 | <div class="product-group"> | 2 | <div class="product-group"> |
3 | <ProductGroupItem | 3 | <ProductGroupItem |
4 | v-for="(product, inx) in data" | 4 | v-for="(product, inx) in data" |
5 | + :share="share" | ||
5 | :single="single" | 6 | :single="single" |
6 | :product="product" | 7 | :product="product" |
7 | :lazy="lazy" | 8 | :lazy="lazy" |
@@ -25,7 +26,8 @@ export default { | @@ -25,7 +26,8 @@ export default { | ||
25 | lazy: { | 26 | lazy: { |
26 | type: Boolean, | 27 | type: Boolean, |
27 | default: true | 28 | default: true |
28 | - } | 29 | + }, |
30 | + share: Boolean | ||
29 | }, | 31 | }, |
30 | computed: { | 32 | computed: { |
31 | single() { | 33 | single() { |
1 | <template> | 1 | <template> |
2 | - <WidgetIconBtn type="msg" :text="num" :option="selfOption"></WidgetIconBtn> | 2 | + <WidgetIconBtn type="msg" :share="share" :text="num" :option="selfOption"></WidgetIconBtn> |
3 | </template> | 3 | </template> |
4 | 4 | ||
5 | <script> | 5 | <script> |
@@ -7,7 +7,8 @@ export default { | @@ -7,7 +7,8 @@ export default { | ||
7 | name: 'WidgetComment', | 7 | name: 'WidgetComment', |
8 | props: { | 8 | props: { |
9 | num: [String, Number], | 9 | num: [String, Number], |
10 | - option: Object | 10 | + option: Object, |
11 | + share: Boolean | ||
11 | }, | 12 | }, |
12 | computed: { | 13 | computed: { |
13 | selfOption() { | 14 | selfOption() { |
1 | <template> | 1 | <template> |
2 | - <WidgetIconBtn type="fav" :text="num" :article-id="articleId" :comment-id="commentId" :option="option"></WidgetIconBtn> | 2 | + <WidgetIconBtn type="fav" :share="share" :text="num" :article-id="articleId" :comment-id="commentId" :option="option"></WidgetIconBtn> |
3 | </template> | 3 | </template> |
4 | 4 | ||
5 | <script> | 5 | <script> |
@@ -9,7 +9,8 @@ export default { | @@ -9,7 +9,8 @@ export default { | ||
9 | num: [String, Number], | 9 | num: [String, Number], |
10 | articleId: Number, | 10 | articleId: Number, |
11 | commentId: Number, | 11 | commentId: Number, |
12 | - option: Object | 12 | + option: Object, |
13 | + share: Boolean | ||
13 | } | 14 | } |
14 | }; | 15 | }; |
15 | </script> | 16 | </script> |
@@ -16,7 +16,8 @@ export default { | @@ -16,7 +16,8 @@ export default { | ||
16 | authorType: { | 16 | authorType: { |
17 | type: [Number, String], | 17 | type: [Number, String], |
18 | default: 1 | 18 | default: 1 |
19 | - } | 19 | + }, |
20 | + share: Boolean | ||
20 | }, | 21 | }, |
21 | data() { | 22 | data() { |
22 | return { | 23 | return { |
@@ -43,6 +44,9 @@ export default { | @@ -43,6 +44,9 @@ export default { | ||
43 | methods: { | 44 | methods: { |
44 | ...mapActions(['followUser']), | 45 | ...mapActions(['followUser']), |
45 | async onFollow() { | 46 | async onFollow() { |
47 | + if (this.share) { | ||
48 | + return this.$links.toDownloadApp(); | ||
49 | + } | ||
46 | if (this.loading) { | 50 | if (this.loading) { |
47 | return; | 51 | return; |
48 | } | 52 | } |
@@ -65,7 +65,8 @@ export default { | @@ -65,7 +65,8 @@ export default { | ||
65 | default() { | 65 | default() { |
66 | return defaultOption; | 66 | return defaultOption; |
67 | } | 67 | } |
68 | - } | 68 | + }, |
69 | + share: Boolean | ||
69 | }, | 70 | }, |
70 | data() { | 71 | data() { |
71 | return { | 72 | return { |
@@ -189,6 +190,9 @@ export default { | @@ -189,6 +190,9 @@ export default { | ||
189 | } | 190 | } |
190 | }, | 191 | }, |
191 | onClick(evt) { | 192 | onClick(evt) { |
193 | + if (this.share) { | ||
194 | + return this.$links.toDownloadApp(); | ||
195 | + } | ||
192 | if (this.syncing) { | 196 | if (this.syncing) { |
193 | return; | 197 | return; |
194 | } | 198 | } |
1 | <template> | 1 | <template> |
2 | - <WidgetIconBtn type="star" :text="num" :article-id="articleId" :comment-id="commentId" :option="option"></WidgetIconBtn> | 2 | + <WidgetIconBtn type="star" :share="share" :text="num" :article-id="articleId" :comment-id="commentId" :option="option"></WidgetIconBtn> |
3 | </template> | 3 | </template> |
4 | 4 | ||
5 | <script> | 5 | <script> |
@@ -9,7 +9,8 @@ export default { | @@ -9,7 +9,8 @@ export default { | ||
9 | num: [String, Number], | 9 | num: [String, Number], |
10 | articleId: Number, | 10 | articleId: Number, |
11 | commentId: Number, | 11 | commentId: Number, |
12 | - option: Object | 12 | + option: Object, |
13 | + share: Boolean | ||
13 | } | 14 | } |
14 | }; | 15 | }; |
15 | </script> | 16 | </script> |
@@ -10,6 +10,7 @@ import {get} from 'lodash'; | @@ -10,6 +10,7 @@ import {get} from 'lodash'; | ||
10 | import Lazy from 'vue-lazyload'; | 10 | import Lazy from 'vue-lazyload'; |
11 | import yoho from 'common/yoho'; | 11 | import yoho from 'common/yoho'; |
12 | import sdk from 'common/sdk'; | 12 | import sdk from 'common/sdk'; |
13 | +import links from 'utils/links'; | ||
13 | import InitClient from 'utils/init-client'; | 14 | import InitClient from 'utils/init-client'; |
14 | import 'statics/scss/common.scss'; | 15 | import 'statics/scss/common.scss'; |
15 | import 'statics/scss/grass-prompt.scss'; | 16 | import 'statics/scss/grass-prompt.scss'; |
@@ -30,6 +31,7 @@ window._router = get(store, 'state.yoho.context.route'); | @@ -30,6 +31,7 @@ window._router = get(store, 'state.yoho.context.route'); | ||
30 | 31 | ||
31 | Vue.prop('yoho', yoho); | 32 | Vue.prop('yoho', yoho); |
32 | Vue.prop('sdk', sdk); | 33 | Vue.prop('sdk', sdk); |
34 | +Vue.prop('links', links); | ||
33 | Vue.prop('auth', function() { | 35 | Vue.prop('auth', function() { |
34 | if (!get(this.$store, '$context.isLogin')) { | 36 | if (!get(this.$store, '$context.isLogin')) { |
35 | this.$sdk && this.$sdk.goLogin && this.$sdk.goLogin(); | 37 | this.$sdk && this.$sdk.goLogin && this.$sdk.goLogin(); |
apps/pages/article/article-share.vue
0 → 100644
1 | +<template> | ||
2 | + <Article | ||
3 | + ref="article" | ||
4 | + type="article" | ||
5 | + share | ||
6 | + :on-fetch="onFetch"> | ||
7 | + </Article> | ||
8 | +</template> | ||
9 | + | ||
10 | +<script> | ||
11 | +import {get} from 'lodash'; | ||
12 | +import Article from './components/article/article'; | ||
13 | +import ArticleItem from './components/article/article-item'; | ||
14 | +import {createNamespacedHelpers} from 'vuex'; | ||
15 | +const {mapActions} = createNamespacedHelpers('article'); | ||
16 | + | ||
17 | +export default { | ||
18 | + name: 'ArticleSharePage', | ||
19 | + data() { | ||
20 | + return { | ||
21 | + page: 1, | ||
22 | + id: 0, | ||
23 | + }; | ||
24 | + }, | ||
25 | + created() { | ||
26 | + this.id = +this.$route.params.id; | ||
27 | + }, | ||
28 | + activated() { | ||
29 | + if (+this.$route.params.id !== this.id) { | ||
30 | + this.id = +this.$route.params.id; | ||
31 | + this.init(); | ||
32 | + } | ||
33 | + }, | ||
34 | + methods: { | ||
35 | + ...mapActions(['fetchArticleList']), | ||
36 | + init() { | ||
37 | + this.page = 1; | ||
38 | + this.$refs.article.init(); | ||
39 | + }, | ||
40 | + async onFetch() { | ||
41 | + const articleId = parseInt(this.id, 10); | ||
42 | + | ||
43 | + if (!articleId) { | ||
44 | + return; | ||
45 | + } | ||
46 | + const result = await this.fetchArticleList({ | ||
47 | + articleId, | ||
48 | + page: this.page, | ||
49 | + authorUid: this.authorUid, | ||
50 | + authorType: this.authorType, | ||
51 | + type: this.type | ||
52 | + }); | ||
53 | + | ||
54 | + if (result.code === 200) { | ||
55 | + if (get(result, 'data.detailList', []).length) { | ||
56 | + this.page++; | ||
57 | + return Promise.resolve(result.data.detailList); | ||
58 | + } | ||
59 | + return Promise.resolve(false); | ||
60 | + } else { | ||
61 | + this.$createToast && this.$createToast({ | ||
62 | + txt: result.message || '服务器开小差了', | ||
63 | + type: 'warn', | ||
64 | + time: 1000 | ||
65 | + }).show(); | ||
66 | + } | ||
67 | + } | ||
68 | + }, | ||
69 | + components: { | ||
70 | + Article, | ||
71 | + ArticleItem | ||
72 | + } | ||
73 | +}; | ||
74 | +</script> | ||
75 | + | ||
76 | +<style lang="scss" scoped> | ||
77 | +.article-page { | ||
78 | + background-color: #f0f0f0; | ||
79 | +} | ||
80 | +</style> |
1 | <template> | 1 | <template> |
2 | <div class="article-item-comment"> | 2 | <div class="article-item-comment"> |
3 | <CommentPlaceholder | 3 | <CommentPlaceholder |
4 | + :share="share" | ||
4 | tag="p" | 5 | tag="p" |
5 | class="comment-item" | 6 | class="comment-item" |
6 | v-for="(comment, inx) in data.comments" | 7 | v-for="(comment, inx) in data.comments" |
@@ -14,6 +15,7 @@ | @@ -14,6 +15,7 @@ | ||
14 | </CommentPlaceholder> | 15 | </CommentPlaceholder> |
15 | <div class="comment"> | 16 | <div class="comment"> |
16 | <CommentPlaceholder | 17 | <CommentPlaceholder |
18 | + :share="share" | ||
17 | class="comment-input hover-opacity" | 19 | class="comment-input hover-opacity" |
18 | :dest-id="data.articleId" | 20 | :dest-id="data.articleId" |
19 | :add-type="0" | 21 | :add-type="0" |
@@ -42,7 +44,8 @@ export default { | @@ -42,7 +44,8 @@ export default { | ||
42 | return {}; | 44 | return {}; |
43 | } | 45 | } |
44 | }, | 46 | }, |
45 | - type: String | 47 | + type: String, |
48 | + share: Boolean | ||
46 | }, | 49 | }, |
47 | computed: { | 50 | computed: { |
48 | ...mapState(['articleStates']), | 51 | ...mapState(['articleStates']), |
@@ -53,6 +56,9 @@ export default { | @@ -53,6 +56,9 @@ export default { | ||
53 | methods: { | 56 | methods: { |
54 | ...mapMutations(['ASYNC_ARTICLE_COMMENT']), | 57 | ...mapMutations(['ASYNC_ARTICLE_COMMENT']), |
55 | onShowComment() { | 58 | onShowComment() { |
59 | + if (this.share) { | ||
60 | + return this.$links.toDownloadApp(); | ||
61 | + } | ||
56 | if (this.articleState.commentCount) { | 62 | if (this.articleState.commentCount) { |
57 | this.$emit('on-show-comment'); | 63 | this.$emit('on-show-comment'); |
58 | } | 64 | } |
1 | <template> | 1 | <template> |
2 | <div class="article-item-header"> | 2 | <div class="article-item-header"> |
3 | - <router-link class="avatar" :to="`/grass/author/${data.authorType}/${data.authorUid}`"> | ||
4 | - <WidgetAvatar :lazy="lazy" class="widget-avatar" :src="data.authorHeadIco" :width="70" :height="70"></WidgetAvatar> | 3 | + <div class="avatar" @click="toUserPage"> |
4 | + <WidgetAvatar :share="share" :lazy="lazy" class="widget-avatar" :src="data.authorHeadIco" :width="70" :height="70"></WidgetAvatar> | ||
5 | <span class="user-name">{{data.authorName}}</span> | 5 | <span class="user-name">{{data.authorName}}</span> |
6 | - </router-link> | 6 | + </div> |
7 | <div class="opts"> | 7 | <div class="opts"> |
8 | - <WidgetFollow :author-uid="data.authorUid" :authorType="data.authorType" :follow="data.hasAttention === 'Y'" @on-follow="onFollow"></WidgetFollow> | 8 | + <WidgetFollow :share="share" :author-uid="data.authorUid" :authorType="data.authorType" :follow="data.hasAttention === 'Y'" @on-follow="onFollow"></WidgetFollow> |
9 | <i class="iconfont icon-more1" @click="onMore"></i> | 9 | <i class="iconfont icon-more1" @click="onMore"></i> |
10 | </div> | 10 | </div> |
11 | </div> | 11 | </div> |
@@ -28,7 +28,8 @@ export default { | @@ -28,7 +28,8 @@ export default { | ||
28 | type: Boolean, | 28 | type: Boolean, |
29 | default: true | 29 | default: true |
30 | }, | 30 | }, |
31 | - type: String | 31 | + type: String, |
32 | + share: Boolean | ||
32 | }, | 33 | }, |
33 | methods: { | 34 | methods: { |
34 | ...mapMutations(['CHANGE_AUTHOR_FOLLOW']), | 35 | ...mapMutations(['CHANGE_AUTHOR_FOLLOW']), |
@@ -46,6 +47,18 @@ export default { | @@ -46,6 +47,18 @@ export default { | ||
46 | } | 47 | } |
47 | }).show(); | 48 | }).show(); |
48 | }, | 49 | }, |
50 | + toUserPage() { | ||
51 | + if (this.share) { | ||
52 | + return this.$links.toDownloadApp(); | ||
53 | + } | ||
54 | + this.$router.push({ | ||
55 | + name: 'author', | ||
56 | + params: { | ||
57 | + type: this.data.authorType, | ||
58 | + id: this.data.authorUid | ||
59 | + } | ||
60 | + }); | ||
61 | + }, | ||
49 | onFollow(follow) { | 62 | onFollow(follow) { |
50 | this.CHANGE_AUTHOR_FOLLOW({authorUid: this.data.authorUid, follow, type: this.type}); | 63 | this.CHANGE_AUTHOR_FOLLOW({authorUid: this.data.authorUid, follow, type: this.type}); |
51 | this.$emit('on-follow', follow); | 64 | this.$emit('on-follow', follow); |
@@ -8,6 +8,7 @@ | @@ -8,6 +8,7 @@ | ||
8 | </div> | 8 | </div> |
9 | <div class="topics"> | 9 | <div class="topics"> |
10 | <WidgetTopic | 10 | <WidgetTopic |
11 | + :share="share" | ||
11 | :topic="label.labelName" | 12 | :topic="label.labelName" |
12 | @click.native="onTopic(label)" | 13 | @click.native="onTopic(label)" |
13 | v-for="label in data.labelList" | 14 | v-for="label in data.labelList" |
@@ -16,12 +17,12 @@ | @@ -16,12 +17,12 @@ | ||
16 | </div> | 17 | </div> |
17 | <div class="widgets"> | 18 | <div class="widgets"> |
18 | <div class="share"> | 19 | <div class="share"> |
19 | - <WidgetShare @click.native="onShare"></WidgetShare> | 20 | + <WidgetShare :share="share" @click.native="onShare"></WidgetShare> |
20 | </div> | 21 | </div> |
21 | <div class="opts"> | 22 | <div class="opts"> |
22 | - <WidgetFav :num="articleState.praiseCount" :article-id="data.articleId" :option="praiseOption"></WidgetFav> | ||
23 | - <WidgetLike :num="articleState.favoriteCount" :article-id="data.articleId" :option="favoriteOption"></WidgetLike> | ||
24 | - <WidgetComment :num="articleState.commentCount" @click.native="onShowComment"></WidgetComment> | 23 | + <WidgetFav :share="share" :num="articleState.praiseCount" :article-id="data.articleId" :option="praiseOption"></WidgetFav> |
24 | + <WidgetLike :share="share" :num="articleState.favoriteCount" :article-id="data.articleId" :option="favoriteOption"></WidgetLike> | ||
25 | + <WidgetComment :share="share" :num="articleState.commentCount" @click.native="onShowComment"></WidgetComment> | ||
25 | </div> | 26 | </div> |
26 | </div> | 27 | </div> |
27 | </div> | 28 | </div> |
@@ -40,7 +41,8 @@ export default { | @@ -40,7 +41,8 @@ export default { | ||
40 | return {}; | 41 | return {}; |
41 | } | 42 | } |
42 | }, | 43 | }, |
43 | - type: String | 44 | + type: String, |
45 | + share: Boolean | ||
44 | }, | 46 | }, |
45 | data() { | 47 | data() { |
46 | return { | 48 | return { |
@@ -122,6 +124,9 @@ export default { | @@ -122,6 +124,9 @@ export default { | ||
122 | methods: { | 124 | methods: { |
123 | ...mapMutations(['CHANGE_ARTICLE_LIST_INTRO_HEIGHT', 'CHANGE_ARTICLE_LIST_INTRO']), | 125 | ...mapMutations(['CHANGE_ARTICLE_LIST_INTRO_HEIGHT', 'CHANGE_ARTICLE_LIST_INTRO']), |
124 | onTopic({labelId, labelName}) { | 126 | onTopic({labelId, labelName}) { |
127 | + if (this.share) { | ||
128 | + return this.$links.toDownloadApp(); | ||
129 | + } | ||
125 | this.$router.push({ | 130 | this.$router.push({ |
126 | name: 'topic', | 131 | name: 'topic', |
127 | params: { | 132 | params: { |
@@ -132,9 +137,9 @@ export default { | @@ -132,9 +137,9 @@ export default { | ||
132 | }, | 137 | }, |
133 | onShare() { | 138 | onShare() { |
134 | this.$yoho.share({ | 139 | this.$yoho.share({ |
135 | - title: '逛资讯', | ||
136 | - imgUrl: this.data.imageUrl, | ||
137 | - link: `http://yoho-community-web.test3.ingress.dev.yohocorp.com/article/${this.data.articleId}?isShare=1`, | 140 | + title: '逛', |
141 | + imgUrl: this.data.shareImage, | ||
142 | + link: `http://yoho-community-web.test3.ingress.dev.yohocorp.com/grass/article/share/${this.data.articleId}`, | ||
138 | desc: this.data.intro, | 143 | desc: this.data.intro, |
139 | hideType: ['7', '8', '9'] | 144 | hideType: ['7', '8', '9'] |
140 | }); | 145 | }); |
1 | <template> | 1 | <template> |
2 | <div class="article-item"> | 2 | <div class="article-item"> |
3 | - <ArticleItemHeader :type="type" :data="headerData" :lazy="lazy" @on-follow="onFollow"></ArticleItemHeader> | ||
4 | - <ArticleItemSlide :type="type" :data="slideData" :slide-index="data.blockIndex" :lazy="lazy"></ArticleItemSlide> | ||
5 | - <ProductGroup v-if="productListData.length" :data="productListData" :lazy="lazy"></ProductGroup> | ||
6 | - <ArticleItemIntro :type="type" :data="introData" @on-expand="onExpand" @on-expanding="onExpanding" @on-show-guang="onShowGuang" @on-show-comment="onShowComment"></ArticleItemIntro> | ||
7 | - <ArticleItemComment :type="type" :data="commentData" @on-show-comment="onShowComment" @on-resize="onResize"></ArticleItemComment> | 3 | + <ArticleItemHeader :type="type" :share="share" :data="headerData" :lazy="lazy" @on-follow="onFollow"></ArticleItemHeader> |
4 | + <ArticleItemSlide :type="type" :share="share" :data="slideData" :slide-index="data.blockIndex" :lazy="lazy"></ArticleItemSlide> | ||
5 | + <ProductGroup v-if="productListData.length" :share="share" :data="productListData" :lazy="lazy"></ProductGroup> | ||
6 | + <ArticleItemIntro :type="type" :share="share" :data="introData" @on-expand="onExpand" @on-expanding="onExpanding" @on-show-guang="onShowGuang" @on-show-comment="onShowComment"></ArticleItemIntro> | ||
7 | + <ArticleItemComment :type="type" :share="share" :data="commentData" @on-show-comment="onShowComment" @on-resize="onResize"></ArticleItemComment> | ||
8 | <div class="line"></div> | 8 | <div class="line"></div> |
9 | </div> | 9 | </div> |
10 | </template> | 10 | </template> |
@@ -26,6 +26,7 @@ export default { | @@ -26,6 +26,7 @@ export default { | ||
26 | return {}; | 26 | return {}; |
27 | } | 27 | } |
28 | }, | 28 | }, |
29 | + share: Boolean, | ||
29 | type: String | 30 | type: String |
30 | }, | 31 | }, |
31 | computed: { | 32 | computed: { |
@@ -60,7 +61,7 @@ export default { | @@ -60,7 +61,7 @@ export default { | ||
60 | praiseCount: this.data.praiseCount, | 61 | praiseCount: this.data.praiseCount, |
61 | favoriteCount: this.data.favoriteCount, | 62 | favoriteCount: this.data.favoriteCount, |
62 | articleId: this.data.articleId, | 63 | articleId: this.data.articleId, |
63 | - imageUrl: get(first(this.slideData.blockList), 'contentData', '').replace('{mode}', 2).replace('{width}', 200).replace('{height}', 200) | 64 | + shareImage: get(first(this.slideData.blockList), 'contentData', '').replace('{mode}', 2).replace('{width}', 200).replace('{height}', 200) |
64 | }; | 65 | }; |
65 | }, | 66 | }, |
66 | commentData() { | 67 | commentData() { |
@@ -3,13 +3,13 @@ | @@ -3,13 +3,13 @@ | ||
3 | <Layout class="article"> | 3 | <Layout class="article"> |
4 | <LayoutHeader theme="white" slot='header' :title="title" :opacity="currentAuthor.opacity"> | 4 | <LayoutHeader theme="white" slot='header' :title="title" :opacity="currentAuthor.opacity"> |
5 | <template v-if="showHeader"> | 5 | <template v-if="showHeader"> |
6 | - <router-link class="avatar-wrapper" :to="`/grass/author/${currentAuthor.authorType}/${currentAuthor.authorUid}`"> | 6 | + <div class="avatar-wrapper" @click="toUserPage"> |
7 | <WidgetAvatar class="widget-avatar" :src="currentAuthor.authorHeadIco" :width="70" :height="70"></WidgetAvatar> | 7 | <WidgetAvatar class="widget-avatar" :src="currentAuthor.authorHeadIco" :width="70" :height="70"></WidgetAvatar> |
8 | <span class="user-name">{{currentAuthor.authorName}}</span> | 8 | <span class="user-name">{{currentAuthor.authorName}}</span> |
9 | - </router-link> | 9 | + </div> |
10 | </template> | 10 | </template> |
11 | <template v-if="showHeader" v-slot:opts> | 11 | <template v-if="showHeader" v-slot:opts> |
12 | - <WidgetFollow class="widget-follow" :author-uid="currentAuthor.authorUid" :follow="currentAuthor.hasAttention === 'Y'" @on-follow="follow => onFollow(currentAuthor, follow)"></WidgetFollow> | 12 | + <WidgetFollow :share="share" class="widget-follow" :author-uid="currentAuthor.authorUid" :follow="currentAuthor.hasAttention === 'Y'" @on-follow="follow => onFollow(currentAuthor, follow)"></WidgetFollow> |
13 | </template> | 13 | </template> |
14 | </LayoutHeader> | 14 | </LayoutHeader> |
15 | <LayoutRecycleList :size="30" ref="scroll" @scroll="onScroll" :offset="2000" :on-fetch="onFetch"> | 15 | <LayoutRecycleList :size="30" ref="scroll" @scroll="onScroll" :offset="2000" :on-fetch="onFetch"> |
@@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||
19 | :type="type" | 19 | :type="type" |
20 | :data="data" | 20 | :data="data" |
21 | :data-id="data.articleId" | 21 | :data-id="data.articleId" |
22 | + :share="share" | ||
22 | @on-follow="follow => onFollow(data, follow)" | 23 | @on-follow="follow => onFollow(data, follow)" |
23 | @on-resize="onResize" | 24 | @on-resize="onResize" |
24 | @on-show-guang="onShowGuang" | 25 | @on-show-guang="onShowGuang" |
@@ -48,6 +49,7 @@ export default { | @@ -48,6 +49,7 @@ export default { | ||
48 | type: String, | 49 | type: String, |
49 | default: '逛' | 50 | default: '逛' |
50 | }, | 51 | }, |
52 | + share: Boolean, | ||
51 | type: String, | 53 | type: String, |
52 | onFetch: Function | 54 | onFetch: Function |
53 | }, | 55 | }, |
@@ -82,6 +84,18 @@ export default { | @@ -82,6 +84,18 @@ export default { | ||
82 | }, | 84 | }, |
83 | methods: { | 85 | methods: { |
84 | ...mapMutations(['CHANGE_ARTICLE_LIST_PRELAZY', 'ASYNC_ARTICLE_COMMENT']), | 86 | ...mapMutations(['CHANGE_ARTICLE_LIST_PRELAZY', 'ASYNC_ARTICLE_COMMENT']), |
87 | + toUserPage() { | ||
88 | + if (this.share) { | ||
89 | + return this.$links.toDownloadApp(); | ||
90 | + } | ||
91 | + this.$router.push({ | ||
92 | + name: 'author', | ||
93 | + params: { | ||
94 | + type: this.currentAuthor.authorType, | ||
95 | + id: this.currentAuthor.authorUid | ||
96 | + } | ||
97 | + }); | ||
98 | + }, | ||
85 | onShowComment({articleId, index}) { | 99 | onShowComment({articleId, index}) { |
86 | this.articleId = articleId; | 100 | this.articleId = articleId; |
87 | this.articleIndex = index; | 101 | this.articleIndex = index; |
@@ -7,6 +7,14 @@ export default [{ | @@ -7,6 +7,14 @@ export default [{ | ||
7 | keepAlive: true | 7 | keepAlive: true |
8 | } | 8 | } |
9 | }, { | 9 | }, { |
10 | + path: '/article/share/:id', | ||
11 | + name: 'article.share', | ||
12 | + alias: '/article/share/:id', | ||
13 | + component: () => import(/* webpackChunkName: "article" */ './article-share'), | ||
14 | + meta: { | ||
15 | + keepAlive: true | ||
16 | + } | ||
17 | +}, { | ||
10 | path: '/article/:id/user/:type/:authorType/:authorUid', | 18 | path: '/article/:id/user/:type/:authorType/:authorUid', |
11 | name: 'article.user', | 19 | name: 'article.user', |
12 | alias: '/article/:id/user/:type/:authorType/:authorUid', | 20 | alias: '/article/:id/user/:type/:authorType/:authorUid', |
-
Please register or login to post a comment