371 lines
12 KiB
JavaScript
371 lines
12 KiB
JavaScript
// 商品详情业务
|
||
import htmlParser from '@/common/js/html-parser';
|
||
|
||
export default {
|
||
data() {
|
||
return {
|
||
skuId: 0,
|
||
goodsId: 0,
|
||
// 商品详情
|
||
goodsSkuDetail: {
|
||
goods_id: 0,
|
||
goods_service: []
|
||
},
|
||
preview: 0, //是否开启预览,0:不开启,1:开启
|
||
//评价
|
||
contactData: {
|
||
title: '',
|
||
path: '',
|
||
img: ''
|
||
},
|
||
|
||
shareQuery: '', // 分享参数
|
||
shareUrl: '', // 分享链接
|
||
|
||
source_member: 0, //分享人的id
|
||
chatRoomParams: {}, // 联系客服参数
|
||
isIphoneX: false, //判断手机是否是iphoneX以上
|
||
whetherCollection: 0,
|
||
posterParams: {}, //海报所需参数
|
||
shareImg: '',
|
||
navbarData: {
|
||
title: '',
|
||
topNavColor: "#ffffff",
|
||
topNavBg: false,
|
||
navBarSwitch: true, // 导航栏是否显示
|
||
textNavColor: "#333333",
|
||
moreLink: {
|
||
name: ""
|
||
},
|
||
navStyle: 1,
|
||
bgUrl: '',
|
||
textImgPosLink: 'left'
|
||
},
|
||
}
|
||
},
|
||
onLoad(data) {
|
||
//刷新多语言
|
||
this.$langConfig.refresh();
|
||
// #ifdef MP-ALIPAY
|
||
let options = my.getLaunchOptionsSync();
|
||
options.query && Object.assign(data, options.query);
|
||
// #endif
|
||
|
||
this.preview = data.preview || 0;
|
||
this.isIphoneX = this.$util.uniappIsIPhoneX();
|
||
|
||
if (data.source_member) {
|
||
uni.setStorageSync('source_member', data.source_member);
|
||
this.source_member = data.source_member;
|
||
}
|
||
//记录分享关系
|
||
if (this.storeToken && uni.getStorageSync('source_member')) {
|
||
this.$util.onSourceMember(uni.getStorageSync('source_member'));
|
||
}
|
||
|
||
// 小程序扫码进入
|
||
if (data.scene) {
|
||
var sceneParams = decodeURIComponent(data.scene);
|
||
sceneParams = sceneParams.split('&');
|
||
if (sceneParams.length) {
|
||
sceneParams.forEach(item => {
|
||
if (item.indexOf('m') != -1) uni.setStorageSync('source_member', item.split('-')[1]);
|
||
if (item.indexOf('is_test') != -1) uni.setStorageSync('is_test', 1);
|
||
});
|
||
}
|
||
}
|
||
},
|
||
onShow() {
|
||
},
|
||
methods: {
|
||
// 处理商品详情数据
|
||
handleGoodsSkuData() {
|
||
// this.navbarData.title = this.goodsSkuDetail.goods_name.length > 9 ? this.goodsSkuDetail.goods_name.substr(0, 9) + "..." : this.goodsSkuDetail.goods_name;
|
||
//设置标题
|
||
// this.$langConfig.title(this.navbarData.title);
|
||
if (this.goodsSkuDetail.config) {
|
||
this.navbarData.navBarSwitch = this.goodsSkuDetail.config.nav_bar_switch;
|
||
}
|
||
|
||
this.whetherCollection = this.goodsSkuDetail.is_collect; // 用户关注商品状态
|
||
|
||
this.modifyGoodsInfo();
|
||
|
||
// 初始化商品详情视图数据
|
||
if (this.$refs.goodsDetailView) this.$refs.goodsDetailView.init({
|
||
sku_id: this.skuId,
|
||
goods_id: this.goodsSkuDetail.goods_id,
|
||
preview: this.preview,
|
||
source_member: this.source_member,
|
||
posterParams: this.posterParams,
|
||
posterApi: this.posterApi,
|
||
shareUrl: this.shareUrl,
|
||
goodsRoute: this.goodsRoute,
|
||
isVirtual: this.goodsSkuDetail.is_virtual,
|
||
deliveryType: this.goodsSkuDetail.express_type,
|
||
whetherCollection: this.goodsSkuDetail.is_collect,
|
||
evaluateConfig: this.goodsSkuDetail.evaluate_config,
|
||
evaluateList: this.goodsSkuDetail.evaluate_list,
|
||
evaluateCount: this.goodsSkuDetail.evaluate_count
|
||
});
|
||
|
||
//媒体
|
||
if (this.goodsSkuDetail.video_url) this.switchMedia = "video";
|
||
|
||
if (!Array.isArray(this.goodsSkuDetail.sku_images)) {
|
||
if (this.goodsSkuDetail.sku_images) this.goodsSkuDetail.sku_images = this.goodsSkuDetail.sku_images.split(",");
|
||
else this.goodsSkuDetail.sku_images = [];
|
||
}
|
||
|
||
// 多规格时合并主图
|
||
if (this.goodsSkuDetail.goods_spec_format && this.goodsSkuDetail.goods_image) {
|
||
|
||
if (!Array.isArray(this.goodsSkuDetail.goods_image)) this.goodsSkuDetail.goods_image = this.goodsSkuDetail.goods_image.split(",");
|
||
|
||
this.goodsSkuDetail.sku_images = this.goodsSkuDetail.goods_image.concat(this.goodsSkuDetail.sku_images);
|
||
}
|
||
|
||
let maxHeight = '';
|
||
let systemInfo = uni.getSystemInfoSync();
|
||
this.goodsSkuDetail.goods_image_list.forEach((item, index) => {
|
||
if (typeof item.pic_spec == "string")
|
||
item.pic_spec = item.pic_spec.split('*');
|
||
|
||
let ratio = item.pic_spec[0] / systemInfo.windowWidth;
|
||
item.pic_spec[0] = item.pic_spec[0] / ratio;
|
||
item.pic_spec[1] = item.pic_spec[1] / ratio;
|
||
|
||
if (!maxHeight || maxHeight > item.pic_spec[1]) {
|
||
maxHeight = item.pic_spec[1];
|
||
}
|
||
});
|
||
this.goodsSkuDetail.swiperHeight = maxHeight + 'px';
|
||
|
||
this.goodsSkuDetail.unit = this.goodsSkuDetail.unit || "件";
|
||
|
||
// 当前商品SKU规格
|
||
if (this.goodsSkuDetail.sku_spec_format) this.goodsSkuDetail.sku_spec_format = JSON.parse(this.goodsSkuDetail.sku_spec_format);
|
||
|
||
// 商品属性
|
||
if (this.goodsSkuDetail.goods_attr_format) {
|
||
let goods_attr_format = JSON.parse(this.goodsSkuDetail.goods_attr_format);
|
||
this.goodsSkuDetail.goods_attr_format = this.$util.unique(goods_attr_format, "attr_id");
|
||
for (var i = 0; i < this.goodsSkuDetail.goods_attr_format.length; i++) {
|
||
for (var j = 0; j < goods_attr_format.length; j++) {
|
||
if (this.goodsSkuDetail.goods_attr_format[i].attr_id == goods_attr_format[j].attr_id && this.goodsSkuDetail.goods_attr_format[i].attr_value_id != goods_attr_format[j].attr_value_id) {
|
||
this.goodsSkuDetail.goods_attr_format[i].attr_value_name += "、" + goods_attr_format[j].attr_value_name;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 商品SKU格式
|
||
if (this.goodsSkuDetail.goods_spec_format) this.goodsSkuDetail.goods_spec_format = JSON.parse(this.goodsSkuDetail.goods_spec_format);
|
||
|
||
// 商品详情
|
||
if (this.goodsSkuDetail.goods_content) this.goodsSkuDetail.goods_content = (this.goodsSkuDetail.goods_content);
|
||
console.log(this.goodsSkuDetail.goods_content)
|
||
// if (this.goodsSkuDetail.goods_content) this.goodsSkuDetail.goods_content = htmlParser(this.goodsSkuDetail.goods_content);
|
||
|
||
//商品服务
|
||
if (this.goodsSkuDetail.goods_service) {
|
||
for (let i in this.goodsSkuDetail.goods_service) {
|
||
this.goodsSkuDetail.goods_service[i]['icon'] = this.goodsSkuDetail.goods_service[i]['icon'] ? JSON.parse(this.goodsSkuDetail.goods_service[i]['icon']) : '';
|
||
}
|
||
}
|
||
|
||
this.contactData = {
|
||
title: this.goodsSkuDetail.sku_name,
|
||
path: this.shareUrl,
|
||
img: this.$util.img(this.goodsSkuDetail.sku_image, {
|
||
size: 'big'
|
||
})
|
||
};
|
||
if (this.$refs.goodsPromotion) this.$refs.goodsPromotion.refresh(this.goodsSkuDetail.goods_promotion);
|
||
|
||
if (this.goodsRoute != '/pages/goods/detail') this.setPublicShare();
|
||
|
||
// this.getBarrageData();
|
||
if (this.addonIsExist.form) {
|
||
this.getGoodsForm();
|
||
}
|
||
},
|
||
/**
|
||
* 刷新商品详情数据
|
||
* @param {Object} data
|
||
*/
|
||
refreshGoodsSkuDetail(data) {
|
||
this.goodsSkuDetail = Object.assign({}, this.goodsSkuDetail, data);
|
||
if (this.$refs.goodsPromotion) this.$refs.goodsPromotion.refresh(this.goodsSkuDetail.goods_promotion);
|
||
if (this.$refs.goodsDetailView) {
|
||
|
||
// 初始化商品详情视图数据
|
||
this.goodsSkuDetail.unit = this.goodsSkuDetail.unit || "件";
|
||
|
||
// 解决轮播图数量不一致时,切换到第一个
|
||
if (this.swiperCurrent > this.goodsSkuDetail.sku_images.length) {
|
||
this.swiperAutoplay = true;
|
||
this.swiperCurrent = 1;
|
||
setTimeout(() => {
|
||
this.swiperAutoplay = false;
|
||
}, 40);
|
||
}
|
||
|
||
}
|
||
this.navbarData.title = this.goodsSkuDetail.goods_name.length > 9 ? this.goodsSkuDetail.goods_name.substr(0, 9) + "..." : this.goodsSkuDetail.goods_name;
|
||
this.$langConfig.title(this.navbarData.title);
|
||
|
||
if (this.goodsSkuDetail.membercard) {
|
||
this.membercard = this.goodsSkuDetail.membercard;
|
||
}
|
||
},
|
||
goodsDetailViewInit() {
|
||
// 初始化商品详情视图数据
|
||
if (this.$refs.goodsDetailView) this.$refs.goodsDetailView.init({
|
||
sku_id: this.skuId,
|
||
goods_id: this.goodsSkuDetail.goods_id,
|
||
preview: this.preview,
|
||
source_member: this.source_member,
|
||
posterParams: this.posterParams,
|
||
posterApi: this.posterApi,
|
||
shareUrl: this.shareUrl,
|
||
goodsRoute: this.goodsRoute,
|
||
isVirtual: this.goodsSkuDetail.is_virtual,
|
||
deliveryType: this.goodsSkuDetail.express_type,
|
||
whetherCollection: this.goodsSkuDetail.is_collect,
|
||
evaluateConfig: this.goodsSkuDetail.evaluate_config,
|
||
evaluateList: this.goodsSkuDetail.evaluate_list,
|
||
evaluateCount: this.goodsSkuDetail.evaluate_count
|
||
});
|
||
},
|
||
goHome() {
|
||
if (this.preview) return; // 开启预览,禁止任何操作和跳转
|
||
this.$util.redirectTo('/pages/index/index');
|
||
},
|
||
goCart() {
|
||
if (this.preview) return; // 开启预览,禁止任何操作和跳转
|
||
this.$util.redirectTo('/pages/goods/cart');
|
||
},
|
||
//-------------------------------------关注-------------------------------------
|
||
//更新商品信息
|
||
modifyGoodsInfo() {
|
||
if (this.preview) return; // 开启预览,禁止任何操作和跳转
|
||
//更新商品点击量
|
||
this.$api.sendRequest({
|
||
url: "/api/goods/modifyclicks",
|
||
data: {
|
||
sku_id: this.skuId
|
||
},
|
||
success: res => {
|
||
}
|
||
});
|
||
|
||
//添加足迹
|
||
this.$api.sendRequest({
|
||
url: "/api/goodsbrowse/add",
|
||
data: {
|
||
goods_id: this.goodsSkuDetail.goods_id,
|
||
sku_id: this.skuId
|
||
},
|
||
success: res => {
|
||
}
|
||
});
|
||
},
|
||
//-------------------------------------关注-------------------------------------
|
||
async editCollection() {
|
||
if (this.$refs.goodsDetailView) {
|
||
this.whetherCollection = await this.$refs.goodsDetailView.collection();
|
||
}
|
||
},
|
||
openSharePopup() {
|
||
if (this.$refs.goodsDetailView) {
|
||
this.$refs.goodsDetailView.openSharePopup();
|
||
}
|
||
},
|
||
//弹幕
|
||
getBarrageData() {
|
||
this.$api.sendRequest({
|
||
url: '/api/goods/goodsbarrage',
|
||
data: {
|
||
goods_id: this.goodsSkuDetail.goods_id
|
||
},
|
||
success: res => {
|
||
if (res.code == 0 && res.data) {
|
||
let barrageData = [];
|
||
for (let i in res.data.list) {
|
||
if (res.data.list[i]['title']) {
|
||
let title = res.data.list[i]['title'].substr(0, 1) + '*' + res.data.list[i]['title'].substr(res.data.list[i]['title'].length - 1, 1)
|
||
barrageData.push({
|
||
img: res.data.list[i]['img'] ? res.data.list[i]['img'] : this.$util.getDefaultImage().head,
|
||
title: title + '已下单'
|
||
});
|
||
}
|
||
}
|
||
this.goodsSkuDetail.barrageData = barrageData;
|
||
}
|
||
}
|
||
});
|
||
},
|
||
/**
|
||
* 设置公众号分享
|
||
*/
|
||
setPublicShare() {
|
||
let shareUrl = this.$config.h5Domain + this.shareUrl;
|
||
if (this.memberInfo && this.memberInfo.member_id) shareUrl += '&source_member=' + this.memberInfo.member_id;
|
||
|
||
this.$util.setPublicShare({
|
||
title: this.goodsSkuDetail.goods_name,
|
||
desc: '',
|
||
link: shareUrl,
|
||
imgUrl: typeof this.goodsSkuDetail.goods_image == 'object' ? this.goodsSkuDetail.goods_image[0] : this.goodsSkuDetail.goods_image.split(',')[0]
|
||
})
|
||
},
|
||
/**
|
||
* 获取商品表单
|
||
*/
|
||
getGoodsForm() {
|
||
this.$api.sendRequest({
|
||
url: "/form/api/form/goodsform",
|
||
data: {
|
||
goods_id: this.goodsSkuDetail.goods_id
|
||
},
|
||
success: res => {
|
||
if (res.code == 0 && res.data) this.$set(this.goodsSkuDetail, 'goods_form', res.data);
|
||
}
|
||
});
|
||
}
|
||
},
|
||
/**
|
||
* 自定义分享内容
|
||
* @param {Object} res
|
||
*/
|
||
onShareAppMessage(res) {
|
||
var path = this.shareUrl;
|
||
if (this.memberInfo && this.memberInfo.member_id) path += '&source_member=' + this.memberInfo.member_id;
|
||
return {
|
||
title: this.goodsSkuDetail.sku_name,
|
||
imageUrl: this.shareImg ? this.$util.img(this.shareImg) : this.$util.img(this.goodsSkuDetail.sku_image, {
|
||
size: 'big'
|
||
}),
|
||
path: path,
|
||
success: res => {
|
||
},
|
||
fail: res => {
|
||
}
|
||
};
|
||
},
|
||
// 分享到微信朋友圈
|
||
// #ifdef MP-WEIXIN
|
||
onShareTimeline() {
|
||
let query = this.shareQuery;
|
||
if (this.memberInfo && this.memberInfo.member_id) query += '&source_member=' + this.memberInfo.member_id;
|
||
return {
|
||
title: this.goodsSkuDetail.sku_name,
|
||
query: query,
|
||
imageUrl: this.$util.img(this.goodsSkuDetail.sku_image, {
|
||
size: 'big'
|
||
})
|
||
};
|
||
}
|
||
// #endif
|
||
} |