uniapp/pages_tool/store_notes/note_detail.vue

495 lines
14 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<page-meta :page-style="themeColor"></page-meta>
<view class="goods-detail">
<view class="goods-item" v-if="noteType == 'goods_item'">
<image class="item-img" :src="$util.img(goodsItemInfo.goods_image)" @error="imageError()" mode="aspectFit"></image>
<text class="item-title" v-if="goodsItemInfo.is_show_release_time == 1">{{ goodsItemInfo.note_title }}</text>
<view class="item-lightspot" v-if="goodsItemInfo.goods_highlights.length">
<text v-for="(item, index) in goodsItemInfo.goods_highlights" :key="index" class="color-base-bg">{{ item }}</text>
</view>
<text class="item-time" v-if="goodsItemInfo.is_show_release_time == 1">{{ $util.timeStampTurnTime(goodsItemInfo.create_time, 'time') }}</text>
<view class="item-content"><rich-text :nodes="goodsItemInfo.note_content"></rich-text></view>
<view class="rest-info">
<text v-if="goodsItemInfo.is_show_read_num == 1">
阅读
<text>{{ goodsItemInfo.initial_read_num + goodsItemInfo.read_num }}</text>
</text>
<text v-if="goodsItemInfo.is_show_dianzan_num == 1" @click="giveLike">
<text class="iconfont icon-likefill color-base-text" v-if="giveLikeIdent"></text>
<text class="iconfont icon-gz" v-if="!giveLikeIdent"></text>
<text>{{ goodsItemInfo.initial_dianzan_num + goodsItemInfo.dianzan_num }}</text>
</text>
</view>
<view class="item-action">
<view class="action-left">
<text @click="giveLike" v-if="!giveLikeIdent" class="iconfont icon-dianzan"></text>
<text @click="giveLike" v-if="giveLikeIdent" class="iconfont icon-dianzan1 active color-base-text"></text>
<!-- #ifdef MP -->
<button type="primary" open-type="share" class="iconfont icon-share"></button>
<!-- #endif -->
</view>
<button class="color-base-bg action-right" @click="redirectToGoods(goodsItemInfo)" v-if="goodsItemInfo.goods_list.length">购买</button>
</view>
</view>
<!-- 掌柜说 -->
<view class="shop-said" v-else-if="noteType == 'shop_said'">
<text class="said-title">{{ shopSaidInfo.note_title }}</text>
<text class="said-time" v-if="shopSaidInfo.is_show_release_time == 1">{{ $util.timeStampTurnTime(shopSaidInfo.create_time, 'time') }}</text>
<view class="said-content"><rich-text :nodes="shopSaidInfo.note_content"></rich-text></view>
<view class="said-goods">
<view
class="commodity-item"
v-if="shopSaidInfo.goods_list"
v-for="(goodsItme, goodsIndex) in shopSaidInfo.goods_list"
:key="goodsIndex"
@click="redirectToGoods(goodsItme.goods_id, 'shop_said')"
>
<image class="commodity-img" :src="$util.img(goodsItme.goods_image.split(',')[0])" mode="aspectFit"></image>
<view class="commodity-content">
<text class="commodity-name">{{ goodsItme.goods_name }}</text>
<text class="commodity-price color-base-text">{{ goodsItme.price }}</text>
</view>
</view>
</view>
<view class="rest-info">
<text v-if="shopSaidInfo.is_show_read_num == 1">
阅读
<text>{{ shopSaidInfo.initial_read_num + shopSaidInfo.read_num }}</text>
</text>
<text v-if="shopSaidInfo.is_show_dianzan_num == 1" @click="giveLike">
<text class="iconfont icon-likefill color-base-text" v-if="giveLikeIdent"></text>
<text class="iconfont icon-gz" v-if="!giveLikeIdent"></text>
<text>{{ shopSaidInfo.initial_dianzan_num + shopSaidInfo.dianzan_num }}</text>
</text>
</view>
<view class="said-action">
<text @click="giveLike" v-if="!giveLikeIdent" class="iconfont icon-dianzan"></text>
<text @click="giveLike" v-if="giveLikeIdent" class="iconfont icon-dianzan1 color-base-text active"></text>
<!-- #ifdef MP -->
<button type="primary" open-type="share" class="iconfont icon-share"></button>
<!-- #endif -->
</view>
</view>
<loading-cover ref="loadingCover"></loading-cover>
<ns-login ref="login"></ns-login>
</view>
</template>
<script>
import htmlParser from '@/common/js/html-parser';
export default {
components: {},
data() {
return {
noteId: '',
noteType: '',
goodsItemInfo: {},
shopSaidInfo: {},
giveLikeIdent: false,
giveLikeFlag: false,
//分享建立上下级所需id
memberId: 0,
//分享时详情所用图片
shareImg: ''
};
},
onLoad(options) {
setTimeout( () => {
if (this.addonIsExist && !this.addonIsExist.notes) {
this.$util.showToast({
title: '商家未开启店铺笔记',
mask: true,
duration: 2000
});
setTimeout(() => {
this.$util.redirectTo('/pages/index/index');
}, 2000);
return;
}
}, 1000);
this.$util.getMemberId().then(resolve => {
this.memberId = resolve;
});
//小程序分享接收source_member
if (options.source_member) {
uni.setStorageSync('source_member', options.source_member);
}
// 小程序扫码进入接收source_member
if (options.scene) {
var sceneParams = decodeURIComponent(options.scene);
sceneParams = sceneParams.split('&');
if (sceneParams.length) {
sceneParams.forEach(item => {
if (item.indexOf('sku_id') != -1) this.skuId = item.split('-')[1];
if (item.indexOf('m') != -1) uni.setStorageSync('source_member', item.split('-')[1]);
if (item.indexOf('is_test') != -1) uni.setStorageSync('is_test', 1);
});
}
}
if (options.note_id) {
this.noteId = options.note_id;
this.getNoteDetail();
} else {
this.$util.redirectTo('/pages_tool/store_notes/note_list', {}, 'redirectTo');
}
},
onShow() {
//记录分享关系
if (uni.getStorageSync('token') && uni.getStorageSync('source_member')) {
this.$util.onSourceMember(uni.getStorageSync('source_member'));
}
if (uni.getStorageSync('token')) {
this.isDianzan();
}
},
onShareAppMessage() {
var title = this.noteType == 'goods_item' ? this.goodsItemInfo.note_title : this.shopSaidInfo.note_title;
var imageUrl = this.noteType == 'goods_item' ? this.goodsItemInfo.cover_img : this.shopSaidInfo.cover_img;
imageUrl = this.$util.img(imageUrl.split(',')[0]);
var route = this.$util.getCurrentShareRoute(this.memberId);
var path = route.path;
return {
title: title,
path: path,
imageUrl: imageUrl
};
},
// 分享到微信朋友圈
// #ifdef MP-WEIXIN
onShareTimeline() {
var title = this.noteType == 'goods_item' ? this.goodsItemInfo.note_title : this.shopSaidInfo.note_title;
var route = this.$util.getCurrentShareRoute(this.memberId);
var imageUrl = this.noteType == 'goods_item' ? this.goodsItemInfo.cover_img : this.shopSaidInfo.cover_img;
imageUrl = this.$util.img(imageUrl.split(',')[0]);
var query = route.query;
return {
title: title,
query: query,
imageUrl: imageUrl
};
},
// #endif
methods: {
/* 获取笔记详情 */
getNoteDetail() {
this.$api.sendRequest({
url: '/notes/api/notes/detail',
data: {
note_id: this.noteId
},
success: res => {
if (res.code == 0) {
this.noteType = res.data.note_type;
if (this.noteType == 'goods_item') {
this.goodsItemInfo = res.data;
if (this.goodsItemInfo.note_content) this.goodsItemInfo.note_content = htmlParser(this.goodsItemInfo.note_content);
//获取分享图片
if (this.goodsItemInfo.goods_image) {
this.shareImg = this.$util.img(this.goodsItemInfo.goods_image);
} else {
this.shareImg = this.$util.getDefaultImage().goods;
}
if (this.goodsItemInfo.goods_list.length) {
this.goodsItemInfo.goods_image = this.goodsItemInfo.goods_list[0].goods_image.split(',')[0];
} else {
this.goodsItemInfo.goods_image = this.$util.getDefaultImage().goods;
}
if (this.goodsItemInfo.goods_highlights) this.goodsItemInfo.goods_highlights = this.goodsItemInfo.goods_highlights.split(',');
} else {
this.shopSaidInfo = res.data;
if (this.shopSaidInfo.note_content) this.shopSaidInfo.note_content = htmlParser(this.shopSaidInfo.note_content);
}
} else {
this.$util.showToast({
title: res.message
});
}
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
});
},
/* 点赞 */
giveLike() {
if (!uni.getStorageSync('token')) {
this.$refs.login.open('/pages/index/index');
return;
}
if (this.giveLikeFlag) return false;
this.giveLikeFlag = true;
var url = this.giveLikeIdent ? '/notes/api/record/delete' : '/notes/api/record/add';
this.$api.sendRequest({
url: url,
data: {
note_id: this.noteId
},
success: res => {
this.giveLikeFlag = false;
if (res.code == 0 && res.data > 0) {
if (this.noteType != 'goods_item')
this.shopSaidInfo.dianzan_num = this.giveLikeIdent ? this.shopSaidInfo.dianzan_num - 1 : this.shopSaidInfo.dianzan_num + 1;
else {
this.goodsItemInfo.dianzan_num = this.giveLikeIdent ? this.goodsItemInfo.dianzan_num - 1 : this.goodsItemInfo.dianzan_num + 1;
}
this.giveLikeIdent = !this.giveLikeIdent;
} else {
this.$util.showToast({
title: res.message
});
}
}
});
},
/* 检测是否点赞 */
isDianzan() {
this.$api.sendRequest({
url: '/notes/api/record/isDianzan',
data: {
note_id: this.noteId
},
success: res => {
if (res.code == 0) {
this.giveLikeIdent = res.data == 1 ? true : false;
} else {
this.$util.showToast({
title: res.message
});
}
}
});
},
/* 页面跳转 */
redirectToGoods(data, type = '') {
var id = type ? data : data.goods_list[0].goods_id;
this.$util.redirectTo('/pages/goods/detail', { goods_id: id });
},
imageError() {
if (this.goodsItemInfo.goods_image) this.goodsItemInfo.goods_image = this.$util.getDefaultImage().goods;
this.$forceUpdate();
}
}
};
</script>
<style lang="scss">
page {
background-color: #fff;
}
.goods-detail {
padding: 30rpx 24rpx 180rpx;
.said-content,
.item-content {
padding: 4rpx;
rich-text {
word-wrap: break-word;
}
}
.goods-item {
.item-img {
width: 100%;
height: 400rpx;
border-radius: 10rpx;
}
.item-title {
display: block;
margin: 40rpx 0 44rpx;
font-size: $font-size-toolbar;
line-height: 1;
}
.item-lightspot text {
& ~ text {
margin-left: 10rpx;
}
font-size: $font-size-tag;
padding: 6rpx 10rpx;
line-height: 1;
border-radius: 4rpx;
color: #ffffff;
}
.item-time {
display: block;
margin: 44rpx 0 40rpx;
font-size: $font-size-tag;
color: #b6b6b6;
}
.rest-info {
text {
text {
margin-left: 8rpx;
}
}
text.iconfont {
font-size: 26rpx;
}
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 40rpx;
color: #6b6b6b;
font-size: $font-size-tag;
}
.item-action {
.action-left {
display: flex;
text {
&.active {
margin: 0;
background-color: rgb(255, 255, 255) !important;
border: 2rpx solid #dddddd;
}
display: flex;
justify-content: center;
align-items: center;
width: 70rpx;
height: 70rpx;
background-color: rgba(0, 0, 0, 0.4) !important;
border-radius: 50%;
border: 2rpx solid rgba(0, 0, 0, 0);
}
button {
display: flex;
justify-content: center;
align-items: center;
margin: 0;
margin-left: 16rpx;
padding: 0;
width: 70rpx;
height: 70rpx;
background-color: rgba(0, 0, 0, 0.4) !important;
border-radius: 50%;
}
.iconfont {
color: #fff;
font-size: $font-size-toolbar;
}
}
.action-right {
margin: 0;
width: 180rpx;
height: 70rpx;
color: #fff;
}
position: fixed;
bottom: 0;
width: calc(100% - 24px);
display: flex;
margin: 80rpx 0;
justify-content: space-between;
}
}
.shop-said {
.said-title {
display: block;
margin: 40rpx 0 44rpx;
font-size: $font-size-toolbar;
line-height: 1;
}
.said-time {
display: block;
margin: 44rpx 0 40rpx;
font-size: $font-size-tag;
color: #b6b6b6;
}
.rest-info {
text {
text {
margin-left: 8rpx;
}
}
text.iconfont {
font-size: 26rpx;
}
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 40rpx;
color: #6b6b6b;
font-size: $font-size-tag;
}
.said-action {
position: fixed;
bottom: 0;
width: calc(100% - 24px);
display: flex;
justify-content: center;
margin: 80rpx 0;
text {
&.active {
margin: 0;
background-color: rgb(255, 255, 255) !important;
border: 2rpx solid #dddddd;
}
display: flex;
justify-content: center;
align-items: center;
width: 70rpx;
height: 70rpx;
background-color: rgba(0, 0, 0, 0.4) !important;
border-radius: 50%;
}
button {
display: flex;
justify-content: center;
align-items: center;
margin: 0;
margin-left: 16rpx;
padding: 0;
width: 70rpx;
height: 70rpx;
background-color: rgba(0, 0, 0, 0.4) !important;
border-radius: 50%;
}
.iconfont {
color: #fff;
font-size: $font-size-toolbar;
}
}
.said-goods {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-top: 40rpx;
.commodity-item {
display: flex;
flex-direction: column;
margin-bottom: 22rpx;
width: 338rpx;
border: 2rpx solid #f1f1f1;
image {
width: 338rpx;
height: 338rpx;
}
.commodity-content {
padding: 20rpx;
.commodity-name {
overflow: hidden;
display: block;
font-size: $font-size-tag;
text-overflow: ellipsis;
white-space: nowrap;
color: #383838;
}
.commodity-price {
display: block;
font-size: $font-size-tag;
}
}
}
}
}
}
</style>