Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop-uniapp

This commit is contained in:
paulGao
2022-06-08 16:09:52 +08:00
17 changed files with 770 additions and 967 deletions

View File

@@ -7,7 +7,7 @@
<!-- 分享 -->
<shares
v-if="shareFlage && goodsDetail.id"
v-if="enableShare && goodsDetail.id"
:skuId="this.routerVal.id"
:goodsId="this.routerVal.goodsId"
:link="
@@ -19,7 +19,7 @@
:thumbnail="goodsDetail.thumbnail"
:goodsName="goodsDetail.goodsName"
type="goods"
@close="shareFlage = false"
@close="enableShare = false"
/>
<popups
v-model="popupsSwitch"
@@ -116,7 +116,7 @@
<view class="card-box top-radius-0" id="main2">
<!-- 活动不显示价钱 -->
<view v-if="!promotionFlag" class="desc-bold -goods-msg">
<view v-if="isSeckill || isGroup" class="desc-bold -goods-msg">
<view class="-goods-flex">
<view class="desc-bold">
{{ goodsDetail.goodsName || "" }}
@@ -150,9 +150,14 @@
</span>
<span v-else>
<span>¥</span
><span class="price">{{ formatPrice(goodsDetail.price)[0] }}</span
>.{{ formatPrice(goodsDetail.price)[1] }}
<span v-if="wholesaleList.length">
<span>¥</span><span class="price">{{ formatPrice(wholesaleList[wholesaleList.length-1].price)[0] }}</span>.{{ formatPrice(wholesaleList[wholesaleList.length-1].price)[1] }}
~
<span>¥</span><span class="price">{{ formatPrice(wholesaleList[0].price)[0] }}</span>.{{ formatPrice(wholesaleList[0].price)[1] }}
</span>
<span v-else>
<span>¥</span><span class="price">{{ formatPrice(goodsDetail.price)[0] }}</span>.{{ formatPrice(goodsDetail.price)[1] }}
</span>
</span>
</view>
<view class="-goods-price" v-else>
@@ -347,7 +352,7 @@
:isGroup="isGroup"
:id="productId"
v-if="goodsDetail.id"
:pointDetail="pointDetail"
:pointDetail="pointDetail"
:wholesaleList="wholesaleList"
@handleClickSku="selectSku"
:buyMask="buyMask"
@@ -405,7 +410,6 @@ export default {
return {
setup,
promotionShow: false, //弹窗开关
promotionFlag: true, //活动开关
// #ifdef H5
navbarListX: 110, //导航栏列表栏x轴
navbarListY: 80, //导航栏列表栏y轴
@@ -442,9 +446,10 @@ export default {
},
],
popupsSwitch: false, //导航栏列表栏开关
shareFlage: false,
enableShare: false,
selectedGoods: "", //选择的商品规格昵称
isGroup: false, // 是否是拼团活动
isSeckill:false, // 是否秒杀活动
pointDetail: "", // 是否是积分商品
assemble: "", //拼团的sku
navbarOnlyBack: {
@@ -480,7 +485,6 @@ export default {
id: "4",
},
],
oldtabScrollTop: 0,
tabScrollTop: null,
scrollArr: [],
scrollId: "1",
@@ -523,12 +527,12 @@ export default {
startTimer: false, //未开启 是false
routerVal: "",
IMLink: "", // IM地址
IMLink: "", // IM地址
wholesaleList:[]
};
},
computed: {
computed: {
// udesk IM
IM() {
return this.IMLink + this.storeDetail.merchantEuid;
@@ -542,10 +546,7 @@ export default {
this.$refs.popupGoods.buyType = "PINTUAN";
clearInterval(timer);
}, 100);
this.promotionFlag = false;
} else {
this.promotionFlag = true;
this.$refs.popupGoods.buyType = "";
}
},
@@ -679,6 +680,10 @@ export default {
if (item.indexOf("POINTS_GOODS") == 0) {
this.pointDetail = this.PromotionList[item];
}
// 秒杀
if (item.indexOf("SECKILL") == 0) {
this.isSeckill = true
}
});
// 轮播图
this.imgList = this.goodsDetail.goodsGalleryList;
@@ -711,21 +716,21 @@ export default {
},
linkMsgDetail() {
// lili 基础客服
uni.navigateTo({
url: `/pages/tabbar/home/web-view?IM=${this.storeDetail.storeId}`,
});
// udesk 代码
// if (this.storeDetail.merchantEuid) {
// uni.navigateTo({
// url: `/pages/tabbar/home/web-view?src=${this.IM}`,
// });
// }
// lili 基础客服
uni.navigateTo({
url: `/pages/tabbar/home/web-view?IM=${this.storeDetail.storeId}`,
});
// udesk 代码
// if (this.storeDetail.merchantEuid) {
// uni.navigateTo({
// url: `/pages/tabbar/home/web-view?src=${this.IM}`,
// });
// }
// 客服 云智服代码
// 客服 云智服代码
// // #ifdef MP-WEIXIN
// const params = {
// storeName: this.storeDetail.storeName,
@@ -1069,7 +1074,7 @@ export default {
* 点击分享
*/
async shareChange() {
this.shareFlage = true;
this.enableShare = true;
},
},
};

View File

@@ -1,169 +1,20 @@
<template>
<view class="recommend-box" >
<h4 class="goods-recommend-title">宝贝推荐</h4>
<view class="like-goods-list">
<view class="like-goods-list">
<view
class="like-goods-item"
@click="clickGoods(item)"
v-for="(item, index) in res"
:key="index"
>
<u-image
:fade="true"
duration="450"
:lazy-load="true"
:src="item.content.thumbnail"
width="330rpx"
height="330rpx"
class="like-goods-uimage"
>
<u-loading slot="loading"></u-loading>
</u-image>
<view style="background-color: #ffffff; width: 100%">
<view class="name">{{ item.content.goodsName }}</view>
<view class="price-sales">
<div class="item-price" v-if="item.content.price != undefined">
<span>{{ formatPrice(item.content.price)[0] }}</span>
.{{formatPrice(item.content.price)[1]}}
<!-- <text v-if="item.point != undefined">+{{ item.point }}积分</text> -->
</div>
</view>
</view>
</view>
</view>
</view>
</view>
<goodsList :res='res' v-if="res" :storeName="false" />
</view>
</template>
<script>
import goodsList from '@/components/m-goods-list/list.vue'
export default {
props: ["res"],
components:{goodsList},
methods: {
// 点击店铺推荐
clickGoods(val) {
uni.navigateTo({
url: `/pages/product/goods?id=${val.content.id}&goodsId=${val.content.goodsId}`
});
},
// 格式化金钱 1999 --> [1999,00]
formatPrice(val) {
if (typeof val == "undefined") {
return val;
}
return val.toFixed(2).split(".");
}
}
};
</script>
<style lang="scss" scoped>
@import "../mp-goods.scss";
@import "../product.scss";
.goods_recomm {
padding: 12px 0 20rpx 20rpx;
color: #000;
font-size: 30rpx;
font-weight: 400;
margin-bottom: 28rpx;
}
.like-goods-uimage {
/deep/ .u-image {
height: 350rpx !important;
}
width: 100%;
}
.recommend-box {
background-color: #ffffff;
width: 100%;
padding-bottom: 120rpx;
.title {
width: 120rpx;
height: 42rpx;
font-size: 30rpx;
font-weight: 700;
text-align: left;
color: #333333;
margin-left: 20rpx;
}
}
.like-goods-list {
display: flex;
width: 100%;
flex-wrap: wrap;
}
.like-goods-item {
padding: 0 !important;
width: 48%;
margin: 0 1% 10rpx 1%;
background: #f7f7f7;
border-radius: 12rpx;
overflow: hidden;
/deep/ .u-image {
width: 100%;
}
}
.like-goods-list {
// background-color: #f8f8f8;
width: 100%;
margin-bottom: 100rpx;
.name {
padding: 14rpx 8rpx 0 8rpx;
color: #333;
font-size: 24rpx;
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
background: #f7f7f7;
height: 80rpx;
}
.price-sales {
padding: 8rpx;
background: #f7f7f7;
display: flex;
justify-content: space-between;
align-items: center;
.item-price {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 26rpx;
text-align: left;
color: $price-color;
line-height: 23px;
font-weight: bold;
> span {
font-size: 32rpx;
}
}
.sales {
line-height: 23px;
font-size: 22rpx;
text-align: left;
letter-spacing: 0;
color: #cccccc;
// padding-right: 10rpx;
}
}
}
</style>

View File

@@ -60,18 +60,7 @@
<!-- 商品 -->
<div class="contant" v-if="current == 0">
<view v-if="!goodsList.length" class="empty">暂无商品信息</view>
<view v-else class="item" v-for="(item,index) in goodsList" :key="index" @click="navigateToGoodsDetail(item)">
<u-image width="100%" height="330rpx" mode="aspectFit" :src="item.content.thumbnail">
<u-loading slot="loading"></u-loading>
</u-image>
<div class="name wes-2">{{ item.content.goodsName }}</div>
<div class="price">
<div>{{ item.content.price | unitPrice }}</div>
</div>
<view class="buyCount">
<div>已售 {{ item.content.buyCount || "0" }}</div>
</view>
</view>
<goodsTemplate :res="goodsList" :storeName="false" />
</div>
<!-- 全部分类 -->
<div class="category" v-if="current == 1">
@@ -94,7 +83,8 @@
</template>
<script>
import { getStoreBaseInfo, getStoreCategory } from "@/api/store.js";
import { getStoreBaseInfo, getStoreCategory } from "@/api/store.js";
import goodsTemplate from '@/components/m-goods-list/list'
import {
receiveCoupons,
deleteStoreCollection,
@@ -128,7 +118,8 @@ export default {
current(val) {
val == 0 ? ()=>{ this.goodsList = []; this.getGoodsData()} : this.getCategoryData();
},
},
},
components:{goodsTemplate},
/**
* 加载
@@ -188,30 +179,34 @@ export default {
* 联系客服
*/
linkKefuDetail() {
// 客服
// #ifdef MP-WEIXIN
// // 客服
// // #ifdef MP-WEIXIN
const params = {
// originalPrice: this.goodsDetail.original || this.goodsDetail.price,
uuid: storage.getUuid(),
token: storage.getAccessToken(),
sign: this.storeInfo.yzfSign,
mpSign: this.storeInfo.yzfMpSign,
};
uni.navigateTo({
url:
"/pages/product/customerservice/index?params=" +
encodeURIComponent(JSON.stringify(params)),
});
// #endif
// #ifndef MP-WEIXIN
const sign = this.storeInfo.yzfSign;
uni.navigateTo({
url:
"/pages/tabbar/home/web-view?src=https://yzf.qq.com/xv/web/static/chat/index.html?sign=" +
sign,
});
// #endif
// const params = {
// // originalPrice: this.goodsDetail.original || this.goodsDetail.price,
// uuid: storage.getUuid(),
// token: storage.getAccessToken(),
// sign: this.storeInfo.yzfSign,
// mpSign: this.storeInfo.yzfMpSign,
// };
// uni.navigateTo({
// url:
// "/pages/product/customerservice/index?params=" +
// encodeURIComponent(JSON.stringify(params)),
// });
// // #endif
// // #ifndef MP-WEIXIN
// const sign = this.storeInfo.yzfSign;
// uni.navigateTo({
// url:
// "/pages/tabbar/home/web-view?src=https://yzf.qq.com/xv/web/static/chat/index.html?sign=" +
// sign,
// });
// // #endif
uni.navigateTo({
url: `/pages/tabbar/home/web-view?IM=${this.storeId}`,
});
},
/** 获取店铺分类 */
@@ -277,15 +272,6 @@ export default {
}
},
/**
* 跳转到商品详情
*/
navigateToGoodsDetail(val) {
uni.navigateTo({
url: `/pages/product/goods?id=${val.content.id}&goodsId=${val.content.goodsId}`,
});
},
/**
* 是否收藏
*/
@@ -404,42 +390,6 @@ export default {
justify-content: center;
margin-top: 40rpx;
}
.item {
overflow: hidden;
background: #fff;
width: 49%;
height: 484rpx;
font-size: 26rpx;
display: flex;
flex-direction: column;
border: 1px solid #f8f8f8;
margin-bottom: 20rpx;
.name {
text-align: left !important;
color: #333;
padding: 0 20rpx;
margin-top: 20rpx;
height: 80rpx;
overflow: hidden;
}
.price {
font-weight: 500;
color: $main-color;
font-size: 30rpx;
padding: 0 20rpx;
margin-top: 20rpx;
white-space: nowrap;
}
.buyCount {
display: flex;
padding: 0 20rpx;
font-size: 24upx;
justify-content: space-between;
color: #999;
}
}
}
.discount {
height: 154rpx;

View File

@@ -1,127 +1,77 @@
<template>
<div>
<u-navbar :title="title"></u-navbar>
<!-- 商品 -->
<div class="contant">
<view v-if="!goodsList.length" class="empty">暂无商品信息</view>
<view v-else class="item" v-for="(item,index) in goodsList" :key="index" @click="navigateToGoodsDetail(item)">
<u-image width="100%" mode="aspectFit" height="324rpx" :src="item.content.thumbnail">
<u-loading slot="loading"></u-loading>
</u-image>
<div class="name">{{ item.content.goodsName }}</div>
<div class="price">
<div>{{ item.content.price | unitPrice }}</div>
</div>
<view class="buyCount">
<div>已售 {{ item.content.buyCount || "0" }}</div>
</view>
</view>
</div>
</div>
</template>
<script>
import { getGoodsList } from "@/api/goods.js";
export default {
data() {
return {
title: "",
routerVal: "",
goodsList: [],
params: {
pageNumber: 1,
pageSize: 10,
keyword: "",
storeCatId: "",
storeId: "",
},
};
},
onLoad(options) {
this.routerVal = options;
this.params.storeId = options.storeId;
this.params.storeCatId = options.id;
this.title = options.title;
},
onShow() {
this.goodsList =[]
this.params.pageNumber = 1;
this.getGoodsData();
},
onReachBottom(){
this.params.pageNumber ++;
this.getGoodsData();
},
methods: {
/**
* 跳转到商品详情
*/
navigateToGoodsDetail(val) {
uni.navigateTo({
url: `/pages/product/goods?id=${val.content.id}&goodsId=${val.content.goodsId}`,
});
},
async getGoodsData() {
// #TODO
let goodsList = await getGoodsList(this.params);
if (goodsList.data.success) {
this.goodsList.push(...goodsList.data.result.content);
}
},
},
};
</script>
<style lang="scss" scoped>
.contant {
margin-top: 20rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
> .empty {
width: 100%;
display: flex;
justify-content: center;
margin-top: 40rpx;
}
.item {
overflow: hidden;
background: #fff;
width: 49%;
height: 484rpx;
font-size: 26rpx;
display: flex;
flex-direction: column;
border: 1px solid #f8f8f8;
margin-bottom: 20rpx;
.name {
text-align: left !important;
color: #333;
padding: 0 20rpx;
margin-top: 20rpx;
line-height: 1.4em;
max-height: 2.8em; //height是line-height的整数倍防止文字显示不全
overflow: hidden;
}
.price {
font-weight: 500;
color: $main-color;
font-size: 30rpx;
padding: 0 20rpx;
margin-top: 20rpx;
white-space: nowrap;
}
.buyCount {
display: flex;
padding: 0 20rpx;
font-size: 24upx;
justify-content: space-between;
color: #999;
}
}
}
</style>
<template>
<div>
<u-navbar :title="title"></u-navbar>
<!-- 商品 -->
<div class="contant">
<view v-if="!goodsList.length" class="empty">暂无商品信息</view>
<goodsTemplate :res='goodsList' :storeName='false' />
</div>
</div>
</template>
<script>
import {
getGoodsList
} from "@/api/goods.js";
import goodsTemplate from '@/components/m-goods-list/list'
export default {
data() {
return {
title: "",
routerVal: "",
goodsList: [],
params: {
pageNumber: 1,
pageSize: 10,
keyword: "",
storeCatId: "",
storeId: "",
},
};
},
components: {
goodsTemplate
},
onLoad(options) {
this.routerVal = options;
this.params.storeId = options.storeId;
this.params.storeCatId = options.id;
this.title = options.title;
},
onShow() {
this.goodsList = []
this.params.pageNumber = 1;
this.getGoodsData();
},
onReachBottom() {
this.params.pageNumber++;
this.getGoodsData();
},
methods: {
async getGoodsData() {
// #TODO
let goodsList = await getGoodsList(this.params);
if (goodsList.data.success) {
this.goodsList.push(...goodsList.data.result.content);
}
},
},
};
</script>
<style lang="scss" scoped>
.contant {
margin-top: 20rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
>.empty {
width: 100%;
display: flex;
justify-content: center;
margin-top: 40rpx;
}
}
</style>