Authored by yyq

article detail

@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <div class="product-info"> 7 <div class="product-info">
8 <p class="product-name">{{product.productName}}</p> 8 <p class="product-name">{{product.productName}}</p>
9 <div class="price"> 9 <div class="price">
10 - ¥{{product.salesPrice}} 10 + <span>¥{{product.salesPrice}}</span>
11 <div class="btn-right btn-buy hover-opacity"> 11 <div class="btn-right btn-buy hover-opacity">
12 <span class="iconfont icon-cart"></span>购买 12 <span class="iconfont icon-cart"></span>购买
13 </div> 13 </div>
@@ -18,9 +18,7 @@ @@ -18,9 +18,7 @@
18 </template> 18 </template>
19 19
20 <script> 20 <script>
21 -import {createNamespacedHelpers} from 'vuex';  
22 import YAS from 'utils/yas-constants'; 21 import YAS from 'utils/yas-constants';
23 -const {mapActions} = createNamespacedHelpers('product');  
24 22
25 export default { 23 export default {
26 name: 'ProductGroupItem', 24 name: 'ProductGroupItem',
@@ -58,57 +56,6 @@ export default { @@ -58,57 +56,6 @@ export default {
58 }, 56 },
59 }, 57 },
60 methods: { 58 methods: {
61 - ...mapActions(['postProductFav']),  
62 - async onFav() {  
63 - if (this.share) {  
64 - return this.$links.toDownloadApp();  
65 - }  
66 - if (this.posting) {  
67 - return;  
68 - }  
69 -  
70 - this.posting = true;  
71 - const favorite = !this.favorite;  
72 -  
73 - const result = await this.postProductFav({  
74 - productId: this.product.productId,  
75 - productSkn: this.product.productSkn,  
76 - favorite,  
77 - productType: this.product.productType  
78 - });  
79 -  
80 - this.posting = false;  
81 -  
82 - if (result.code === 200) {  
83 - if (favorite) {  
84 - this.prompt = this.$grassPrompt({  
85 - img: this.product.productImage,  
86 - title: '收藏成功',  
87 - desc: '可在 [我的-商品收藏] 页面查看',  
88 - onClick: () => {  
89 - this.$yoho.goPage('go.fav', {  
90 - favType: 0  
91 - });  
92 - }  
93 - }, 3000);  
94 - } else {  
95 - this.prompt && this.prompt.hide();  
96 - this.$createToast({  
97 - txt: '取消收藏成功',  
98 - type: 'success',  
99 - time: 1000  
100 - }).show();  
101 - }  
102 -  
103 - this.favorite = favorite;  
104 - } else {  
105 - this.$createToast({  
106 - txt: result.message || '服务器开小差了',  
107 - type: 'warn',  
108 - time: 1000  
109 - }).show();  
110 - }  
111 - },  
112 onClick(e) { 59 onClick(e) {
113 if (e.timeStamp - this._lastTime < 1200) { 60 if (e.timeStamp - this._lastTime < 1200) {
114 return; 61 return;
@@ -150,15 +97,13 @@ export default { @@ -150,15 +97,13 @@ export default {
150 97
151 <style lang="scss" scoped> 98 <style lang="scss" scoped>
152 .product-item { 99 .product-item {
153 - margin-top: 20px;  
154 margin-right: 20px; 100 margin-right: 20px;
155 margin-left: 30px; 101 margin-left: 30px;
156 height: 180px; 102 height: 180px;
157 width: 580px; 103 width: 580px;
158 background-color: #fff; 104 background-color: #fff;
159 - box-shadow: 0 5px 10px 0 rgba(107, 95, 95, 0.2); 105 + border: 1px solid #f0f0f0;
160 display: inline-block; 106 display: inline-block;
161 - padding: 10px 20px;  
162 white-space: initial; 107 white-space: initial;
163 108
164 &:last-child { 109 &:last-child {
@@ -172,14 +117,15 @@ export default { @@ -172,14 +117,15 @@ export default {
172 117
173 .product-content { 118 .product-content {
174 display: flex; 119 display: flex;
  120 + align-items: center;
175 width: 100%; 121 width: 100%;
176 height: 100%; 122 height: 100%;
  123 + overflow: hidden;
177 } 124 }
178 125
179 .product-image { 126 .product-image {
180 width: 136px; 127 width: 136px;
181 height: 180px; 128 height: 180px;
182 - margin-top: -30px;  
183 } 129 }
184 130
185 .product-info { 131 .product-info {
@@ -189,25 +135,31 @@ export default { @@ -189,25 +135,31 @@ export default {
189 .product-name { 135 .product-name {
190 font-size: 24px; 136 font-size: 24px;
191 color: #9b9b9b; 137 color: #9b9b9b;
192 - letter-spacing: -0.25PX;  
193 - height: 104px;  
194 - display: flex;  
195 - align-content: center; 138 + height: 68px;
  139 + padding-right: 10px;
  140 + margin-bottom: 30px;
  141 + text-overflow: ellipsis;
  142 + display: -webkit-box;
  143 + -webkit-line-clamp: 2;
  144 + line-clamp: 2;
  145 + -webkit-box-orient: vertical;
  146 + overflow: hidden;
  147 +
196 } 148 }
197 149
198 .price { 150 .price {
199 - font-size: 32px;  
200 - color: #d0021b;  
201 - letter-spacing: -0.34PX; 151 + font-size: 28px;
  152 + color: #222;
  153 + font-weight: 500;
  154 + display: flex;
  155 + justify-content: space-between;
  156 + align-items: center;
202 } 157 }
203 } 158 }
204 159
205 .btn-right { 160 .btn-right {
206 - float: right;  
207 - margin-right: -40px;  
208 width: 120px; 161 width: 120px;
209 height: 50px; 162 height: 50px;
210 - padding: 0;  
211 font-size: 24px; 163 font-size: 24px;
212 background-size: contain; 164 background-size: contain;
213 display: flex; 165 display: flex;
@@ -218,7 +170,7 @@ export default { @@ -218,7 +170,7 @@ export default {
218 } 170 }
219 171
220 .btn-buy { 172 .btn-buy {
221 - background-color: #ce0a24; 173 + background-color: #222;
222 174
223 .iconfont { 175 .iconfont {
224 font-size: 30px; 176 font-size: 30px;
@@ -54,9 +54,8 @@ export default { @@ -54,9 +54,8 @@ export default {
54 width: 100%; 54 width: 100%;
55 overflow-x: auto; 55 overflow-x: auto;
56 overflow-y: hidden; 56 overflow-y: hidden;
57 - height: 276px;  
58 - padding-top: 40px;  
59 - padding-bottom: 40px; 57 + height: 180px;
  58 + margin: 40px 0;
60 white-space: nowrap; 59 white-space: nowrap;
61 -webkit-overflow-scrolling: touch; 60 -webkit-overflow-scrolling: touch;
62 } 61 }
1 <template> 1 <template>
2 <AuthComponent class="btn-follow hover-opacity" :class="followClass" @click="onFollow"> 2 <AuthComponent class="btn-follow hover-opacity" :class="followClass" @click="onFollow">
3 - {{followText}} 3 + <span>{{followText}}</span>
4 </AuthComponent> 4 </AuthComponent>
5 </template> 5 </template>
6 6
@@ -91,22 +91,26 @@ export default { @@ -91,22 +91,26 @@ export default {
91 91
92 <style lang="scss" scoped> 92 <style lang="scss" scoped>
93 .btn-follow { 93 .btn-follow {
94 - width: 120px; 94 + min-width: 110px;
95 height: 50px; 95 height: 50px;
96 - padding: 0;  
97 - font-size: 26px;  
98 - border-radius: 3PX;  
99 - background-color: #222;  
100 - color: #fff; 96 + padding: 0 10px;
  97 + font-size: 24px;
  98 + color: #222;
  99 + border-radius: 25px;
  100 + border: solid 1px #222;
  101 + box-sizing: border-box;
101 display: flex; 102 display: flex;
102 align-items: center; 103 align-items: center;
103 justify-content: center; 104 justify-content: center;
104 text-align: center; 105 text-align: center;
105 106
106 &.follow { 107 &.follow {
107 - border: solid 1px #4a4a4a;  
108 - background-color: #fff;  
109 - color: #000; 108 + border-color: #b0b0b0;
  109 + color: #b0b0b0;
  110 + }
  111 +
  112 + > span {
  113 + line-height: 1;
110 } 114 }
111 } 115 }
112 </style> 116 </style>
1 <template> 1 <template>
2 <div v-if="topic" class="topic-wrap" @click="onClick"> 2 <div v-if="topic" class="topic-wrap" @click="onClick">
3 - <div class="topic-icon">  
4 - <span class="iconfont icon-tag"></span>  
5 - </div> 3 + <div class="topic-icon">#</div>
6 <span class="topic-text">{{topic}}</span> 4 <span class="topic-text">{{topic}}</span>
7 </div> 5 </div>
8 </template> 6 </template>
@@ -25,8 +23,8 @@ export default { @@ -25,8 +23,8 @@ export default {
25 .topic-wrap { 23 .topic-wrap {
26 display: inline-block; 24 display: inline-block;
27 vertical-align: middle; 25 vertical-align: middle;
28 - height: 44px;  
29 - line-height: 44px; 26 + height: 48px;
  27 + line-height: 48px;
30 background-color: #f0f0f0; 28 background-color: #f0f0f0;
31 border-radius: 22px; 29 border-radius: 22px;
32 box-sizing: border-box; 30 box-sizing: border-box;
@@ -37,13 +35,17 @@ export default { @@ -37,13 +35,17 @@ export default {
37 } 35 }
38 36
39 .topic-icon { 37 .topic-icon {
40 - width: 34px;  
41 - height: 34px;  
42 - line-height: 34px;  
43 - border-radius: 17px; 38 + width: 38px;
  39 + height: 38px;
  40 + line-height: 38px;
  41 + font-size: 28px;
  42 + border-radius: 19px;
44 margin: 5px; 43 margin: 5px;
45 text-align: center; 44 text-align: center;
46 - background-color: #d0d0d0; 45 + color: #fff;
  46 + background-color: #222;
  47 + transform: scale(0.8, 0.8);
  48 +
47 49
48 .iconfont { 50 .iconfont {
49 font-size: 24px; 51 font-size: 24px;
@@ -54,8 +56,10 @@ export default { @@ -54,8 +56,10 @@ export default {
54 } 56 }
55 57
56 .topic-text { 58 .topic-text {
57 - font-size: 22px;  
58 - color: #9B9B9B; 59 + font-size: 26px;
  60 + font-weight: 500;
  61 + color: #222;
  62 + margin-left: -4px;
59 margin-right: 16px; 63 margin-right: 16px;
60 max-width: 310px; 64 max-width: 310px;
61 overflow: hidden; 65 overflow: hidden;
1 <template> 1 <template>
2 <div class="article-item-comment"> 2 <div class="article-item-comment">
  3 + <div v-if="data.comments && data.comments.length" class="comment-list">
3 <CommentPlaceholder 4 <CommentPlaceholder
4 :share="share" 5 :share="share"
5 tag="p" 6 tag="p"
@@ -15,7 +16,12 @@ @@ -15,7 +16,12 @@
15 <span class="user-name">{{comment.userName}}:</span> 16 <span class="user-name">{{comment.userName}}:</span>
16 <span class="comment-content">{{getCommentContent(comment.content)}}</span> 17 <span class="comment-content">{{getCommentContent(comment.content)}}</span>
17 </CommentPlaceholder> 18 </CommentPlaceholder>
  19 + </div>
  20 + <div v-if="!invisible" class="total-comment">
  21 + <div class="total hover-opacity" @click="onShowComment">查看{{data.commentCount}}条评论</div>
  22 + </div>
18 <div class="comment"> 23 <div class="comment">
  24 + <WidgetAvatar :lazy="true" class="widget-avatar" :src="data.authorHeadIco" :width="70" :height="70"></WidgetAvatar>
19 <CommentPlaceholder 25 <CommentPlaceholder
20 :share="share" 26 :share="share"
21 class="comment-input hover-opacity" 27 class="comment-input hover-opacity"
@@ -27,9 +33,6 @@ @@ -27,9 +33,6 @@
27 @on-comment="onComment"> 33 @on-comment="onComment">
28 添加评论... 34 添加评论...
29 </CommentPlaceholder> 35 </CommentPlaceholder>
30 - </div>  
31 - <div class="total-comment">  
32 - <div class="total hover-opacity" :class="invisibleClass" @click="onShowComment">查看{{data.commentCount}}条评论</div>  
33 <div class="last-time">{{data.date}}</div> 36 <div class="last-time">{{data.date}}</div>
34 </div> 37 </div>
35 </div> 38 </div>
@@ -55,11 +58,9 @@ export default { @@ -55,11 +58,9 @@ export default {
55 articleId: [Number, String] 58 articleId: [Number, String]
56 }, 59 },
57 computed: { 60 computed: {
58 - invisibleClass() {  
59 - return {  
60 - invisible: this.thumb || (this.data.commentCount <= 2)  
61 - };  
62 - }, 61 + invisible() {
  62 + return this.thumb || (this.data.commentCount <= 2);
  63 + }
63 }, 64 },
64 methods: { 65 methods: {
65 ...mapMutations(['ASYNC_ARTICLE_COMMENT']), 66 ...mapMutations(['ASYNC_ARTICLE_COMMENT']),
@@ -91,12 +92,15 @@ export default { @@ -91,12 +92,15 @@ export default {
91 .article-item-comment { 92 .article-item-comment {
92 padding: 30px; 93 padding: 30px;
93 94
  95 + .comment-list {
  96 + margin-bottom: 26px;
  97 + }
  98 +
94 .comment-item { 99 .comment-item {
95 font-size: 24px; 100 font-size: 24px;
96 color: #4a4a4a; 101 color: #4a4a4a;
97 letter-spacing: 0.06PX; 102 letter-spacing: 0.06PX;
98 - line-height: 36px;  
99 - margin-bottom: 6px; 103 + line-height: 38px;
100 104
101 > * { 105 > * {
102 display: inline-block; 106 display: inline-block;
@@ -113,33 +117,34 @@ export default { @@ -113,33 +117,34 @@ export default {
113 } 117 }
114 118
115 .total-comment { 119 .total-comment {
116 - padding-top: 30px;  
117 - display: flex;  
118 font-size: 24px; 120 font-size: 24px;
119 color: #b0b0b0; 121 color: #b0b0b0;
120 letter-spacing: 0.06px; 122 letter-spacing: 0.06px;
121 -  
122 - .total {  
123 - width: 50%;  
124 - }  
125 -  
126 - .last-time {  
127 - width: 50%;  
128 - text-align: right;  
129 - } 123 + margin-bottom: 26px;
130 } 124 }
131 125
132 .comment { 126 .comment {
133 - padding-top: 20px; 127 + display: flex;
  128 + align-items: center;
  129 + margin-top: 10px;
  130 +
  131 + .widget-avatar {
  132 + width: 50px;
  133 + height: 50px;
  134 + }
134 135
135 .comment-input { 136 .comment-input {
136 - padding: 0 20px;  
137 - background: #f0f0f0;  
138 - height: 60px;  
139 - line-height: 60px; 137 + flex-grow: 1;
  138 + padding-left: 12px;
  139 + height: 50px;
  140 + line-height: 50px;
140 color: #b0b0b0; 141 color: #b0b0b0;
141 font-size: 24px; 142 font-size: 24px;
142 } 143 }
  144 +
  145 + .last-time {
  146 + color: #b0b0b0;
  147 + }
143 } 148 }
144 } 149 }
145 </style> 150 </style>
@@ -2,7 +2,12 @@ @@ -2,7 +2,12 @@
2 <div class="article-item-header"> 2 <div class="article-item-header">
3 <div class="avatar" @click="toUserPage"> 3 <div class="avatar" @click="toUserPage">
4 <WidgetAvatar :pos-id="posId" :share="share" :lazy="lazy" class="widget-avatar" :src="data.authorHeadIco" :width="70" :height="70"></WidgetAvatar> 4 <WidgetAvatar :pos-id="posId" :share="share" :lazy="lazy" class="widget-avatar" :src="data.authorHeadIco" :width="70" :height="70"></WidgetAvatar>
5 - <span class="user-name">{{data.authorName}}</span> 5 + <div class="user-info">
  6 + <p class="user-name">{{data.authorName}}</p>
  7 + <p v-if="data.authorRank" class="user-rank">
  8 + <span class="rank-name">{{data.authorRank}}</span>
  9 + </p>
  10 + </div>
6 </div> 11 </div>
7 <div class="opts"> 12 <div class="opts">
8 <WidgetFollow :class="invisibleClass" :share="share" :author-uid="data.authorUid" :authorType="data.authorType" :follow="data.hasAttention === 'Y'" @on-follow="onFollow" :pos-id="posId"></WidgetFollow> 13 <WidgetFollow :class="invisibleClass" :share="share" :author-uid="data.authorUid" :authorType="data.authorType" :follow="data.hasAttention === 'Y'" @on-follow="onFollow" :pos-id="posId"></WidgetFollow>
@@ -79,30 +84,50 @@ export default { @@ -79,30 +84,50 @@ export default {
79 <style lang="scss" scoped> 84 <style lang="scss" scoped>
80 .article-item-header { 85 .article-item-header {
81 display: flex; 86 display: flex;
  87 + justify-content: center;
  88 + height: 110px;
  89 + overflow: hidden;
  90 + background-color: #fff;
82 } 91 }
83 92
84 .avatar { 93 .avatar {
85 display: flex; 94 display: flex;
86 align-items: center; 95 align-items: center;
87 - padding: 16px 30px; 96 + padding-left: 30px;
88 width: 400px; 97 width: 400px;
89 - height: 100px;  
90 overflow: hidden; 98 overflow: hidden;
91 - background-color: #fff;  
92 99
93 - .user-name {  
94 - font-size: 24px;  
95 - line-height: 1.2;  
96 - margin-left: 20px; 100 + .widget-avatar {
  101 + width: 70px;
  102 + height: 70px;
  103 + display: block;
  104 + }
  105 +
  106 + .user-info {
97 max-width: 250px; 107 max-width: 250px;
  108 + margin-left: 20px;
  109 +
  110 + > * {
  111 + line-height: 1.5;
98 overflow: hidden; 112 overflow: hidden;
99 text-overflow: ellipsis; 113 text-overflow: ellipsis;
100 white-space: nowrap; 114 white-space: nowrap;
101 } 115 }
  116 + }
102 117
103 - .widget-avatar {  
104 - width: 70px;  
105 - height: 70px; 118 + .user-name {
  119 + font-size: 24px;
  120 + }
  121 +
  122 + .user-rank {
  123 + margin-top: 8px;
  124 + }
  125 +
  126 + .rank-name {
  127 + font-size: 20px;
  128 + transform: scale(0.9, 0.9);
  129 + color: #4a4a4a;
  130 + display: inline-block;
106 } 131 }
107 } 132 }
108 133
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <div ref="intro" v-if="intro" class="intro" :class="introClass" :style="introStyle" @click="onExpanding"> 3 <div ref="intro" v-if="intro" class="intro" :class="introClass" :style="introStyle" @click="onExpanding">
4 <p class="pre-wrap">{{intro}}</p> 4 <p class="pre-wrap">{{intro}}</p>
5 <div ref="introPool" class="intro-pool pre-wrap" v-if="!data.introHeight && isEllipsis">{{trimIntro}}</div> 5 <div ref="introPool" class="intro-pool pre-wrap" v-if="!data.introHeight && isEllipsis">{{trimIntro}}</div>
6 - <span ref="expand" class="expand" v-if="showExpandTxt">…展开</span> 6 + <span ref="expand" class="expand" v-if="showExpandTxt">…<b>继续阅读</b></span>
7 <div class="collapse" v-if="showCollapseTxt">收起</div> 7 <div class="collapse" v-if="showCollapseTxt">收起</div>
8 </div> 8 </div>
9 <div class="topics"> 9 <div class="topics">
@@ -246,7 +246,7 @@ export default { @@ -246,7 +246,7 @@ export default {
246 letter-spacing: 0.06PX; 246 letter-spacing: 0.06PX;
247 overflow: hidden; 247 overflow: hidden;
248 position: relative; 248 position: relative;
249 - line-height: 40px; 249 + line-height: 48px;
250 box-sizing: content-box; 250 box-sizing: content-box;
251 transition: height 250ms cubic-bezier(0.165, 0.84, 0.44, 1); 251 transition: height 250ms cubic-bezier(0.165, 0.84, 0.44, 1);
252 252
@@ -293,7 +293,6 @@ export default { @@ -293,7 +293,6 @@ export default {
293 font-size: 28px; 293 font-size: 28px;
294 color: #000; 294 color: #000;
295 line-height: 20px; 295 line-height: 20px;
296 - font-weight: bold;  
297 296
298 &.collapse { 297 &.collapse {
299 position: absolute; 298 position: absolute;
@@ -301,6 +300,10 @@ export default { @@ -301,6 +300,10 @@ export default {
301 bottom: 0; 300 bottom: 0;
302 height: 28px; 301 height: 28px;
303 } 302 }
  303 +
  304 + > b {
  305 + font-weight: 500;
  306 + }
304 } 307 }
305 } 308 }
306 309
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 </template> 15 </template>
16 </Slide> 16 </Slide>
17 <div class="pages" v-if="data.blockList.length > 1"> 17 <div class="pages" v-if="data.blockList.length > 1">
18 - {{slideIndex}}<span>/</span>{{data.blockList.length}} 18 + {{slideIndex}}/{{data.blockList.length}}
19 </div> 19 </div>
20 </div> 20 </div>
21 <div v-show="onAnimation" class="praise-lottie"> 21 <div v-show="onAnimation" class="praise-lottie">
@@ -199,16 +199,17 @@ export default { @@ -199,16 +199,17 @@ export default {
199 .pages { 199 .pages {
200 position: absolute; 200 position: absolute;
201 z-index: 1; 201 z-index: 1;
202 - top: 0;  
203 - right: 0;  
204 - width: 88px;  
205 - height: 54px; 202 + left: 30px;
  203 + bottom: 30px;
  204 + width: 80px;
  205 + height: 48px;
206 background: rgba($color: #000, $alpha: 0.5); 206 background: rgba($color: #000, $alpha: 0.5);
207 - border-radius: 0 0 0 30px;  
208 - padding-left: 6px; 207 + border-radius: 24px;
  208 + padding-left: 2px;
209 color: #fff; 209 color: #fff;
210 font-size: 24px; 210 font-size: 24px;
211 box-sizing: border-box; 211 box-sizing: border-box;
  212 + letter-spacing: 4px;
212 display: flex; 213 display: flex;
213 line-height: 24px; 214 line-height: 24px;
214 justify-content: center; 215 justify-content: center;