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

219 lines
5.8 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script setup>
import { ref} from "vue"
// typecategory-分类 list内容列表
const props = defineProps(['info','type','list','title','buy_type']);
import goodsInfo from "@/components/goodsInfo.vue"
import goodsSpecs from "@/components/goodsSpecs.vue"
// import goodsCartPay from "@/components/goodsCartPay.vue"
import api from "@/api/index"
// 变量
const detail_info = ref(null)
const show_state = ref(false)
// const isShow = ref(false)
// 函数
function toDetail(item) { // 商品详情
let url = ''
// if(props.buy_type == 'group') { // 团购
// url = '/pages/goods/goodsDetail?info='+encodeURIComponent(JSON.stringify(item))+"&buy_type="+props.buy_type
// }
// else if(props.buy_type == 'limited'){ // 限时秒杀
// }
// else{ // 开学季尊享活动
// url = '/pages/goods/goodsDetail?info='+encodeURIComponent(JSON.stringify(item))+"&buy_type="+props.buy_type
// }
url = '/pages/goods/goodsDetail?id='+item.id+'&info='+encodeURIComponent(JSON.stringify(item))+"&buy_type="+props.buy_type
uni.navigateTo({
url
})
}
function toPlate() { //前往板块区域,比如限时秒杀
let url = ''
// if(props.buy_type == 'group') { // 团购
// url = "/pages/goods/goodsPlate?info="+JSON.stringify(props.info)
// }
// else{
// return
// }
url = "/pages/goods/goodsPlate?info="+encodeURIComponent(JSON.stringify(props.info))+"&buy_type="+props.buy_type
uni.navigateTo({
url
})
}
function addToCart(item) { // 加入购物车
getGoodsDetail(item.id)
return
// uni.showToast({
// title: '已加入购物车!',
// icon:'success',
// duration: 2000,
// // mask:true
// });
}
async function getGoodsDetail(id) {// 获取商品详情 为了打开规格选项
const res = await api.getGoodsDetail({
id
})
if(res.code === 1) {
detail_info.value = res.data
detail_info.value = res.data
// 解析轮播图
if(detail_info.value.goods_images) {
detail_info.value.goods_images = detail_info.value.goods_images.split(",")
detail_info.value.goods_images = detail_info.value.goods_images.map((item,i) => {
let o = {
image:item,
skip_url:'',
skip_url_type:2
}
return item = o
})
}
// 详情
// console.log(detail_info.value)
show_state.value = !show_state.value
}
}
function afterChoose(params) { // 确定加入购物车
if(params.state === 1) {
// current_info.value.id
// getCartList() // 获取最新购物车
uni.showToast({
title: '已加入购物车!',
icon:'success',
duration: 2000,
// mask:true
});
// isShow.value = true
}
}
// function closedFunc() {
// isShow.value = false
// }
</script>
<template>
<view class="goods-card-box">
<!-- 展示分类 -->
<view class="category-box" v-if="type === 'category'">
<view class="gcb-title" style="justify-content: center;">
{{title}}
</view>
<view class="gcb-list">
<view class="gcb-list-card" v-for="(item,i) in list">
<!-- <img style="width:100%;border:1px solid #f1f1f1;border-radius: 5px;" :src="item.cover" alt=""> -->
<image style="width: 100%;border-radius: 5px;" :style="{ height: item.goods_image?'':'100rpx'}" :src="item.goods_image" mode="widthFix"></image>
<view class="g-show-name text-ellipsis-1">{{item.goods_name}}</view>
</view>
</view>
</view>
<!-- 商品分组 方式1-->
<view class="goods-box" v-if="type === 'goods'">
<view class="gcb-title" @tap="toPlate">
<view class="title-wrap">
{{title}}
</view>
<uni-icons class="toCss" type="right" color="white" size="16"></uni-icons>
</view>
<view class="gcb-list">
<view class="gcb-list-card" v-for="(item,i) in list">
<goodsInfo @tap="toDetail(item)" type=1 :info="item" >
<template v-if="buy_type=='activity'" #btn>
<view class="g-cart" @tap.stop="addToCart(item)">
<image src="@/static/cart.png" mode="widthFix" ></image>
</view>
</template>
</goodsInfo>
</view>
</view>
</view>
<goodsSpecs :goods_info="detail_info" @choosedOk="afterChoose" :show_state="show_state"></goodsSpecs>
<!-- <goodsCartPay :isShow="isShow" @closedState="closedFunc"></goodsCartPay> -->
</view>
</template>
<style lang="scss">
.gcb-title{
display: flex;
align-items: center;
}
.toCss{
position: absolute;
right: 10px;
// position: absolute; right: 10px; top: 30%;
}
.title-wrap{
position: relative;
top: 0;
left: 0;
width: 100%;
}
.g-cart{
image{
width: 40rpx;
height: 40rpx;
}
}
.g-buy-box{
display: flex;
justify-content: space-between;
align-items: center;
.g-price-box{
color: #FD5B4E;
display: flex;
align-items: end;
.g-price{
font-size: 18px;
margin-right: 10rpx;
font-weight: 600;
}
.g-price-o{
color: gray;
font-size: 28rpx;
text-decoration: line-through;
}
}
}
.g-desc{
color: gray;
font-size: 28rpx;
margin: 10px 0;
}
.g-show-name{
margin-top: 20rpx;
font-weight: bolder;
}
.gcb-title{
position: relative;
background: linear-gradient(0deg, #82c8ea, #abdef4);
color: white;
padding: 16rpx 0;
font-size: 36rpx;
font-weight: 600;
text-align: center;
}
.gcb-list{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 0 20rpx;
.gcb-list-card{
// padding: 20rpx;
width: 48%;
margin: 20rpx 0;
}
}
.goods-card-box{
background: white;
border: 1px solid #82c8ea;
border-radius: 10px;
overflow: hidden;
margin-bottom: 40rpx;
border-top: unset;
.category-box{
text-align: center;
}
}
</style>