You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

382 lines
9.5 KiB

9 months ago
<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>