382 lines
9.5 KiB
Vue
382 lines
9.5 KiB
Vue
<template>
|
||
<view>
|
||
<view class="main">
|
||
<view class="tab-cont">
|
||
<view v-if="featuredList.length" class="follow_count">
|
||
<block v-for="(item, index) in featuredList" :key="index">
|
||
<view class="list_count">
|
||
<view v-if="item.author" class="title">
|
||
<view class="author">
|
||
<image class="picture" :src="item.author.avatar || '/static/images/f.png'"></image>
|
||
<text class="name">{{item.author.nickname}}</text>
|
||
</view>
|
||
<view @click="followAuthor(item)">
|
||
<view v-if="!item.relevance_id" class="follow focus">
|
||
<text class="iconfont icon-jiahao2"></text>关注
|
||
</view>
|
||
<view v-else class="follow focused">已关注</view>
|
||
</view>
|
||
</view>
|
||
<view class="product">
|
||
<productConSwiper :imgUrls="item.image"></productConSwiper>
|
||
</view>
|
||
<view class="pro_describle">
|
||
<view class="mentioned" v-if="item.relevance.length>0" @click="openMore(item)">
|
||
<text class="title">查看TA提到的宝贝({{item.relevance.length}})</text>
|
||
<view class="product_more">
|
||
<view class="item">
|
||
<image v-for="(itemn, indexn) in item.relevance" :key="indexn" :src="(itemn.spu&&itemn.spu.image)||itemn.image" class="more_image"></image>
|
||
</view>
|
||
<text class="iconfont icon-gengduo3"></text>
|
||
</view>
|
||
</view>
|
||
<view class="product_info">
|
||
<text class="text">
|
||
{{item.content}}
|
||
</text>
|
||
<text class="unfold_btn">展开</text>
|
||
</view>
|
||
<navigator v-if="item.topic" hover-class="none" class="product_cate" :url="'/pages/plantGrass/plant_search_list/index?id='+item.topic.topic_id">
|
||
<view>
|
||
<text class="icon">#</text><text class="text">{{item.topic.topic_name}}</text>
|
||
</view>
|
||
</navigator>
|
||
<view class="foot_bar">
|
||
<view class="item iconfont icon-fenxiang2"></view>
|
||
<view class="item">
|
||
<view class="item_count" @click.stop="likeToggle(item)">
|
||
<text class="iconfont" :class="item.relevance_id ? 'icon-shoucang1' : 'icon-dianzan'"></text>
|
||
<text>{{item.count_start > 0 ? item.count_start : '点赞'}}</text>
|
||
</view>
|
||
|
||
<view class="item_count" @click="openCommon(item,index)">
|
||
<text class="iconfont icon-pinglun"></text>
|
||
<text>{{item.count_reply ? item.count_reply : '评论'}}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<!-- 他提到的宝贝弹窗 -->
|
||
<uni-popup ref="mentioned" type="bottom">
|
||
<mentioned @close="close" :list="moreList"></mentioned>
|
||
</uni-popup>
|
||
<!-- 评论弹窗 -->
|
||
<comment ref="comment" :isShow="showComment" @close="close" @successFul="commentSucces"></comment>
|
||
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize>
|
||
</view>
|
||
|
||
</template>
|
||
|
||
<script>
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
import WaterfallsFlow from '@/components/plantWaterfallsFlow/WaterfallsFlow.vue'
|
||
import mentioned from '@/components/mentioned.vue';
|
||
import comment from '@/components/comment.vue';
|
||
import {graphicLstApi, graphicStartApi, followAuthorApi} from '@/api/community.js';
|
||
import { getUserInfo } from '@/api/user.js';
|
||
import { mapGetters } from "vuex";
|
||
import authorize from '@/components/Authorize';
|
||
import productConSwiper from '@/components/productConSwiper';
|
||
const app = getApp();
|
||
export default {
|
||
components: {
|
||
authorize,
|
||
WaterfallsFlow,
|
||
productConSwiper,
|
||
mentioned,
|
||
comment
|
||
},
|
||
data() {
|
||
return {
|
||
featuredList: [], // 商铺商品
|
||
moreList: [],
|
||
commList: [], //评论列表
|
||
loading: false,
|
||
loaded: false,
|
||
loadTitle: '加载更多',
|
||
isShowAuth: false, //是否隐藏授权
|
||
isAuto: false, //没有授权的不会自动授权
|
||
where: {
|
||
topic_id: '',
|
||
page: 1,
|
||
limit: 30
|
||
},
|
||
showComment: false,
|
||
}
|
||
},
|
||
created() {
|
||
|
||
},
|
||
computed: {
|
||
...mapGetters(['isLogin']),
|
||
},
|
||
watch: {
|
||
|
||
},
|
||
onLoad: function(options) {
|
||
this.where.topic_id = options.id
|
||
this.getList();
|
||
},
|
||
onShow() {
|
||
|
||
},
|
||
mounted: function() {
|
||
},
|
||
methods: {
|
||
// 授权回调
|
||
onLoadFun() {
|
||
this.isShowAuth = false
|
||
},
|
||
// 授权关闭
|
||
authColse: function(e) {
|
||
this.isShowAuth = e
|
||
},
|
||
// 打开授权
|
||
authOpen: function() {
|
||
let that = this;
|
||
if (that.isLogin === false) {
|
||
this.isAuto = true;
|
||
this.isShowAuth = true;
|
||
}
|
||
},
|
||
// 获取关注商品
|
||
getList: function() {
|
||
let that = this;
|
||
if (that.loaded || that.loading) return;
|
||
that.loading = true;
|
||
that.loadTitle = '';
|
||
graphicLstApi(that.where).then(res => {
|
||
that.loading = false;
|
||
let list = res.data.list;
|
||
let featuredList = that.$util.SplitArray(list, that.featuredList);
|
||
that.loaded = list.length < that.where.limit;
|
||
that.loadTitle = loaded ? '已全部加载' : '加载更多';
|
||
that.$set(that, 'featuredList', featuredList);
|
||
that.$set(that.where, 'page', that.where.page + 1);
|
||
}).catch(err => {
|
||
that.loading = false;
|
||
uni.showToast({
|
||
title: err,
|
||
icon: 'none'
|
||
})
|
||
});
|
||
},
|
||
likeToggle(item){
|
||
let status = item.relevance_id ? 0 : 1
|
||
graphicStartApi(item.community_id,{status: status}).then(res => {
|
||
if(item.relevance_id){
|
||
item.count_start--;
|
||
item.count_start = item.count_start == 0 ? 0 : item.count_start
|
||
item.relevance_id = false
|
||
}else{
|
||
item.count_start++;
|
||
item.relevance_id = true
|
||
}
|
||
});
|
||
},
|
||
// 关注作者
|
||
followAuthor: function(item) {
|
||
let status = item.relevance_id ? 0 : 1
|
||
followAuthorApi(item.uid,{status: status}).then(res => {
|
||
if (res.status === 200) {
|
||
item.relevance_id = item.relevance_id ? false : true
|
||
}
|
||
this.$util.Tips({
|
||
title: res.message
|
||
});
|
||
});
|
||
},
|
||
/*查看提到的宝贝*/
|
||
openMore(item){
|
||
this.$refs.mentioned.open();
|
||
this.moreList = item.relevance;
|
||
},
|
||
openCommon(item,index){
|
||
this.showComment = true
|
||
this.$refs.comment.getData(item,index);
|
||
},
|
||
commentSucces(index){
|
||
this.featuredList[index]['count_reply']++
|
||
},
|
||
close(){
|
||
this.$refs.mentioned.close();
|
||
this.showComment = false;
|
||
}
|
||
},
|
||
onReachBottom() {
|
||
this.getList();
|
||
},
|
||
onPullDownRefresh(){
|
||
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.main{
|
||
background: #ffffff;
|
||
min-height: 100vh;
|
||
}
|
||
.tab-cont{
|
||
background: #fff;
|
||
border-radius: 16rpx 16rpx 0 0;
|
||
}
|
||
.follow_count{
|
||
padding: 20rpx;
|
||
.list_count{
|
||
margin-bottom: 70rpx;
|
||
}
|
||
.title{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
}
|
||
.author{
|
||
display: flex;
|
||
align-items: center;
|
||
.picture, uni-image{
|
||
width: 78rpx;
|
||
height: 78rpx;
|
||
border-radius: 100%;
|
||
}
|
||
.name{
|
||
margin-left: 20rpx;
|
||
color: #333333;
|
||
font-size: 32rpx;
|
||
font-weight: bold;
|
||
}
|
||
}
|
||
.follow{
|
||
margin-right: 10rpx;
|
||
width: 112rpx;
|
||
text-align: center;
|
||
line-height: 42rpx;
|
||
font-size: 22rpx;
|
||
border-radius: 33rpx;
|
||
&.focus{
|
||
color: #E93323;
|
||
border: 1px solid #E93323;
|
||
.iconfont{
|
||
font-size: 15rpx;
|
||
margin-right: 5rpx;
|
||
}
|
||
}
|
||
&.focused{
|
||
background: #EEEEEE;
|
||
border: 1px solid #EEEEEE;
|
||
color: #999999;
|
||
}
|
||
}
|
||
.product{
|
||
margin-top: 20rpx;
|
||
border-radius: 16rpx;
|
||
}
|
||
}
|
||
.pro_describle{
|
||
.mentioned{
|
||
padding: 20rpx 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
border-bottom: 1px solid #F5F5F5;
|
||
.title{
|
||
color: #666666;
|
||
font-size: 26rpx;
|
||
}
|
||
}
|
||
.product_more{
|
||
max-width: 360rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
.more_image{
|
||
width: 58rpx;
|
||
height: 58rpx;
|
||
border-radius: 5rpx;
|
||
border: 1px solid #BBBBBB;
|
||
margin-right: 12rpx;
|
||
}
|
||
.iconfont{
|
||
color: #CCCCCC;
|
||
margin-left: 10rpx;
|
||
}
|
||
}
|
||
.product_info{
|
||
line-height: 45rpx;
|
||
margin: 20rpx 0;
|
||
.text{
|
||
font-size: 28rpx;
|
||
color: #282828;
|
||
}
|
||
.unfold_btn{
|
||
margin-left: 30rpx;
|
||
font-size: 30rpx;
|
||
color: #282828;
|
||
font-weight: bold;
|
||
}
|
||
}
|
||
.product_cate{
|
||
margin: 20rpx 0;
|
||
display: inline-block;
|
||
>view{
|
||
display: flex;
|
||
align-items: center;
|
||
background: #FFF3F2;
|
||
border-radius: 30rpx;
|
||
padding: 0 25rpx;
|
||
line-height: 56rpx;
|
||
height: 56rpx;
|
||
color: #E93323;
|
||
.text{
|
||
font-size: 28rpx;
|
||
}
|
||
.icon{
|
||
font-size: 35rpx;
|
||
font-weight: bold;
|
||
margin-right: 10rpx;
|
||
}
|
||
}
|
||
}
|
||
.foot_bar{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
.item{
|
||
display: flex;
|
||
align-items: center;
|
||
color: #282828;
|
||
&.icon-fenxiang2{
|
||
font-size: 46rpx;
|
||
}
|
||
}
|
||
.item_count{
|
||
font-size: 26rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
&:first-child{
|
||
margin-right: 30rpx;
|
||
}
|
||
.iconfont{
|
||
font-size: 40rpx;
|
||
margin-right: 5rpx;
|
||
}
|
||
.icon-shoucang1{
|
||
color: #E93323;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|