454 lines
11 KiB
Vue
454 lines
11 KiB
Vue
<template>
|
||
<view class="flex-col page">
|
||
<!-- <image
|
||
mode="aspectFit"
|
||
class="self-stretch image"
|
||
:src="goodObject.goodImg"
|
||
/> -->
|
||
<swiper class="swiper-box">
|
||
<swiper-item v-for="(item,index) in imgArr" :key="index" >
|
||
<image mode="aspectFit" class="self-stretch image" :src="item" @tap="previewImage(index)"></image>
|
||
</swiper-item>
|
||
</swiper>
|
||
<view class="flex-col self-stretch section_2">
|
||
<view class="self-start group">
|
||
<text class="font text_2">¥</text>
|
||
<text class="text">{{ goodObject.price }}</text>
|
||
<text class="discountsText">限时优惠{{ coupon }}元</text>
|
||
</view>
|
||
<view class="flex-row justify-between items-center self-stretch group_2">
|
||
<text class="text_4">{{ goodObject.name }}</text>
|
||
<view class="flex-row items-center group_3" v-if="goodObject.festivalName != null">
|
||
<image
|
||
class="image_2"
|
||
src="https://carbon2.obs.cn-north-4.myhuaweicloud.com:443/feiyi%2Ftest%2F0%2FGOsbijZE-denglong.png"
|
||
/>
|
||
<text class="font text_3 ml-5">{{ goodObject.festivalName }}限定</text>
|
||
</view>
|
||
</view>
|
||
<view class="self-stretch divider view"></view>
|
||
<view class="flex-col self-stretch group_4">
|
||
<text class="self-stretch font_2">
|
||
商品简介:{{ goodObject.introDetail }}
|
||
<br/>
|
||
</text>
|
||
</view>
|
||
<view class="self-stretch divider view_2"></view>
|
||
<view class="flex-row items-center self-stretch group_5">
|
||
<text class="font text_5">商品标签:</text>
|
||
<view class="flex-col justify-start items-center text-wrapper ml-8" v-for="(item,index) in labelList" :key="index">
|
||
<text class="font_3 text_6">#{{ item }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="flex-col self-stretch section_3">
|
||
<text class="self-start font_4 text_10">用户须知</text>
|
||
<text class="self-start font text_11">1.发货后不接受退货、不接受7天无理由退货</text>
|
||
<text class="self-start font text_12">2.商品购买后无法自主退款,需联系客服进行退款处理</text>
|
||
<text class="self-stretch font_2 text_13">
|
||
3.定制款商品购买后不接受退货退款,包售后需要录制开箱视频,并且开箱视频需要从拆包装开始
|
||
</text>
|
||
<text class="self-start font text_14">4.商品售罄后的款式也可以重新预定,需等待并联系客服</text>
|
||
<text class="self-start font text_15">5.定制商品的具体发货日期根据制作团队制作情况而定</text>
|
||
<text class="self-start font text_16">6.只售后邮寄破损</text>
|
||
</view>
|
||
<image
|
||
class="self-start image_3"
|
||
:src="goodObject.detailImg"
|
||
/>
|
||
<view class="flex-row items-center self-stretch section_4">
|
||
<button class="flex-col items-center" style="background-color: #ffffff;" open-type="contact" bindcontact="handleContact" session-from="sessionFrom">
|
||
<image
|
||
class="image_4"
|
||
src="https://carbon2.obs.cn-north-4.myhuaweicloud.com:443/feiyi%2Ftest%2F0%2FbTRAhIQz-kefu.png"
|
||
/>
|
||
<text class="text_19 mt-3">客服</text>
|
||
</button>
|
||
<view class="flex-row flex-1 ml-34">
|
||
<view class="flex-col justify-start items-center text-wrapper_4" @click="loadPop">
|
||
<text class="font_4 text_17">加入购物车</text>
|
||
</view>
|
||
<view class="flex-col justify-start items-center text-wrapper_5 ml-9" @click="jump_buy">
|
||
<text class="font_4 text_18">立即购买</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<uni-popup ref="popup" background-color="#fff">
|
||
<view>
|
||
<addProduct></addProduct>
|
||
</view>
|
||
</uni-popup>
|
||
</template>
|
||
|
||
<script setup >
|
||
import {nextTick, onMounted, onUnmounted, ref} from 'vue'
|
||
import { onLoad , onShow } from "@dcloudio/uni-app";
|
||
import { baseUrl } from '../../../api/request';
|
||
import emitter from '../../../utils/emitter'
|
||
import addProduct from '../../Shopping-cart/component/addProduct.vue';
|
||
import { dealResult } from '../../../common/globalFunction';
|
||
const popup = ref(null) //弹窗对象
|
||
const goodObject = ref({}) //商品对象
|
||
const idInfo = ref(0) //发送到下一页的商品id
|
||
const userInfo = ref({}) //用户信息
|
||
const labelList = ref([]) //标签
|
||
const imgArr = ref([]) //商品图片数组
|
||
const coupon = ref(0) //当前商品可用的优惠卷
|
||
const cookie = wx.getStorageSync('cookie')
|
||
//转换上一页面传来的商品
|
||
onLoad((options) => {
|
||
getProduct(JSON.parse(options.gid)) //页面加载的时候获取商品信息
|
||
})
|
||
onShow(()=>{
|
||
userInfo.value = wx.getStorageSync('userInfo') //获取用户信息
|
||
})
|
||
|
||
const closeHandler = () => {
|
||
close()
|
||
}
|
||
|
||
onMounted(()=>{
|
||
emitter.on('close', closeHandler)
|
||
getFonts()
|
||
})
|
||
|
||
onUnmounted(() => {
|
||
emitter.off('close', closeHandler)
|
||
})
|
||
|
||
const getProduct = async (gid) =>{ //根据商品获取商品信息
|
||
const res = await uni.request({
|
||
url: baseUrl + '/goods/getById',
|
||
method: 'POST',
|
||
data: { id: gid },
|
||
header: {
|
||
cookie
|
||
}
|
||
})
|
||
console.log('请求请求--->',res.data);
|
||
if(res.data.code === 1) {
|
||
goodObject.value = res.data.data
|
||
imgArr.value = res.data.data.goodImg.split(';') //将后端传来的图片字符串转为图片数组
|
||
// console.log(imgArr.value);
|
||
labelList.value = goodObject.value.label.split(';') //分割字符串,生成标签数组
|
||
labelList.value = labelList.value.filter((s)=>{ //使用filter将最后一个空值去掉
|
||
return s
|
||
})
|
||
idInfo.value = goodObject.value.id
|
||
}
|
||
}
|
||
const loadPop =()=>{
|
||
popup.value.open('bottom') //从底部弹出
|
||
emitter.emit('product',goodObject.value)
|
||
}
|
||
//关闭弹窗
|
||
const close =()=>{
|
||
nextTick(() => {
|
||
if (popup.value) {
|
||
popup.value.close()
|
||
}
|
||
})
|
||
}
|
||
//将商品对象发送到下一个页面
|
||
const jump_buy = async ()=> {
|
||
let res = await checkGeneralGood()
|
||
if (!dealResult(res)) return
|
||
uni.navigateTo({
|
||
url: '../../../pages/order/singleGoodOrder/singleGoodOrder?cartInfo=' + JSON.stringify(idInfo.value)
|
||
})
|
||
}
|
||
|
||
//获取字体
|
||
const getFonts =()=>{
|
||
uni.loadFontFace({
|
||
family: 'FangZhengFonts',
|
||
source: `url("https://carbon2.obs.cn-north-4.myhuaweicloud.com/fonts/FangZhengFonts.TTF")`,
|
||
success:(res) =>{
|
||
console.log('success',res);
|
||
},
|
||
fail:(err) => {
|
||
console.log('err',err);
|
||
}
|
||
})
|
||
}
|
||
//点击查看图片详情方法
|
||
const previewImage = (index) => {
|
||
console.log(index);
|
||
uni.previewImage({
|
||
current: index,
|
||
urls: imgArr.value
|
||
})
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const checkGeneralGood = async () => {
|
||
const res = await uni.request({
|
||
url: baseUrl + '/goods/checkGeneralGood',
|
||
method: 'POST',
|
||
header: {
|
||
cookie
|
||
},
|
||
data: {
|
||
id: idInfo.value
|
||
}
|
||
})
|
||
return res
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
button::after {
|
||
border: none;
|
||
}
|
||
.ml-5 {
|
||
margin-left: 9.38rpx;
|
||
}
|
||
.mt-3 {
|
||
margin-top: 5.63rpx;
|
||
}
|
||
.ml-9 {
|
||
margin-left: 16.88rpx;
|
||
}
|
||
.page {
|
||
background-image: url('https://carbon2.obs.cn-north-4.myhuaweicloud.com:443/feiyi%2Ftest%2F0%2FQfLHXSAU-feiyigongfangbeijin.png');
|
||
background-size: 100% 100%;
|
||
background-repeat: no-repeat;
|
||
height: 100%;
|
||
width: 100%;
|
||
overflow-y: auto;
|
||
overflow-x: hidden;
|
||
}
|
||
.image {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
.section_2 {
|
||
// margin-top: 20.63rpx;
|
||
padding-left: 18.75rpx;
|
||
padding-top: 19.2rpx;
|
||
background-color: #ffffff;
|
||
border-radius: 18.75rpx;
|
||
}
|
||
.group {
|
||
margin-left: 14.16rpx;
|
||
line-height: 30.06rpx;
|
||
}
|
||
.font {
|
||
font-size: 26.25rpx;
|
||
font-family: 'FangZhengFonts';
|
||
line-height: 25.84rpx;
|
||
color: #323232;
|
||
}
|
||
.text_2 {
|
||
color: #ff0000;
|
||
line-height: 16.91rpx;
|
||
}
|
||
.text {
|
||
color: #ff0000;
|
||
font-size: 45rpx;
|
||
font-family: 'FangZhengFonts';
|
||
line-height: 30.06rpx;
|
||
}
|
||
.group_2 {
|
||
margin-top: 19.11rpx;
|
||
}
|
||
.text_4 {
|
||
color: #323232;
|
||
font-size: 33.75rpx;
|
||
font-family: 'FangZhengFonts';
|
||
line-height: 32.7rpx;
|
||
}
|
||
.group_3 {
|
||
margin-right: 19.63rpx;
|
||
}
|
||
.image_2 {
|
||
width: 33.75rpx;
|
||
height: 33.75rpx;
|
||
}
|
||
.text_3 {
|
||
font-size: 28.13rpx;
|
||
line-height: 27.24rpx;
|
||
}
|
||
.divider {
|
||
background-color: #cdcdcd;
|
||
height: 1.88rpx;
|
||
}
|
||
.view {
|
||
margin-right: 41.27rpx;
|
||
margin-top: 18.28rpx;
|
||
}
|
||
.group_4 {
|
||
padding: 10.56rpx 0 32.04rpx;
|
||
}
|
||
.font_2 {
|
||
font-size: 26.25rpx;
|
||
font-family: 'FangZhengFonts';
|
||
line-height: 31.88rpx;
|
||
color: #323232;
|
||
}
|
||
.view_2 {
|
||
margin-right: 41.27rpx;
|
||
}
|
||
.group_5 {
|
||
padding: 16.88rpx 0 20.63rpx;
|
||
}
|
||
.text_5 {
|
||
color: #000000;
|
||
line-height: 24.62rpx;
|
||
}
|
||
.text-wrapper {
|
||
padding: 7.26rpx 10rpx 10.31rpx 10rpx;
|
||
background-color: #fbdedf;
|
||
border-radius: 9.38rpx;
|
||
// width: 90rpx;
|
||
height: 39.38rpx;
|
||
}
|
||
.font_3 {
|
||
font-size: 22.5rpx;
|
||
font-family: 'FangZhengFonts';
|
||
line-height: 21.71rpx;
|
||
color: #323232;
|
||
}
|
||
.text_6 {
|
||
line-height: 21.81rpx;
|
||
}
|
||
.text-wrapper_2 {
|
||
padding: 7.35rpx 0 10.31rpx;
|
||
background-color: #fbdedf;
|
||
border-radius: 9.38rpx;
|
||
height: 39.38rpx;
|
||
}
|
||
.text_7 {
|
||
margin-left: 11.78rpx;
|
||
margin-right: 8.83rpx;
|
||
}
|
||
.text-wrapper_1 {
|
||
padding: 9.22rpx 0 9.15rpx;
|
||
background-color: #fbdedf;
|
||
border-radius: 9.38rpx;
|
||
width: 105rpx;
|
||
height: 39.38rpx;
|
||
}
|
||
.text_8 {
|
||
line-height: 21rpx;
|
||
}
|
||
.text-wrapper_3 {
|
||
padding: 9.13rpx 0 8.27rpx;
|
||
background-color: #fbdedf;
|
||
border-radius: 9.38rpx;
|
||
width: 105rpx;
|
||
height: 39.38rpx;
|
||
}
|
||
.text_9 {
|
||
line-height: 21.98rpx;
|
||
}
|
||
.section_3 {
|
||
margin-top: 35.63rpx;
|
||
padding: 18.51rpx 11.72rpx 43.29rpx;
|
||
background-color: #ffffff;
|
||
border-radius: 18.75rpx;
|
||
}
|
||
.font_4 {
|
||
font-size: 30rpx;
|
||
font-family: 'FangZhengFonts';
|
||
color: #ffffff;
|
||
}
|
||
.text_10 {
|
||
color: #000000;
|
||
line-height: 28.01rpx;
|
||
text-decoration: underline;
|
||
}
|
||
.text_11 {
|
||
margin-left: 10.14rpx;
|
||
margin-top: 21.23rpx;
|
||
line-height: 25.74rpx;
|
||
}
|
||
.text_12 {
|
||
margin-left: 9.53rpx;
|
||
margin-top: 19.46rpx;
|
||
line-height: 25.54rpx;
|
||
}
|
||
.text_13 {
|
||
margin: 16.44rpx 15.69rpx 0 9.62rpx;
|
||
}
|
||
.text_14 {
|
||
margin-left: 9.41rpx;
|
||
margin-top: 21.36rpx;
|
||
}
|
||
.text_15 {
|
||
margin-left: 9.62rpx;
|
||
margin-top: 24.9rpx;
|
||
line-height: 25.63rpx;
|
||
}
|
||
.text_16 {
|
||
margin-left: 10.14rpx;
|
||
margin-top: 23.01rpx;
|
||
}
|
||
.image_3 {
|
||
margin: 20.88rpx 0 120rpx;
|
||
width: 100vw;
|
||
height: 100vw;
|
||
}
|
||
.section_4 {
|
||
position: fixed;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
margin-top: 31.88rpx;
|
||
padding: 13.13rpx 26.25rpx 16.88rpx;
|
||
background-color: #ffffff;
|
||
}
|
||
.image_4 {
|
||
width: 46.88rpx;
|
||
height: 46.88rpx;
|
||
}
|
||
.text_19 {
|
||
color: #9d2624;
|
||
font-size: 22.5rpx;
|
||
font-family: Open Sans;
|
||
line-height: 20.72rpx;
|
||
}
|
||
.text-wrapper_4 {
|
||
padding: 20.38rpx 0 22.63rpx;
|
||
flex: 1 1 283.13rpx;
|
||
background-color: #e79ea1;
|
||
border-radius: 93.75rpx;
|
||
height: 71.25rpx;
|
||
}
|
||
.text_17 {
|
||
line-height: 28.24rpx;
|
||
}
|
||
.text-wrapper_5 {
|
||
padding: 20.51rpx 0 22.97rpx;
|
||
flex: 1 1 283.13rpx;
|
||
background-color: #c35c5d;
|
||
border-radius: 93.75rpx;
|
||
height: 71.25rpx;
|
||
}
|
||
.text_18 {
|
||
line-height: 27.77rpx;
|
||
}
|
||
.swiper-box {
|
||
width: 100%;
|
||
height: calc(150vw * 9 / 16);
|
||
}
|
||
.discountsText {
|
||
color: #ff0000;
|
||
font-size: 25rpx;
|
||
font-family: 'FangZhengFonts';
|
||
line-height: 30.06rpx;
|
||
margin-left: 20rpx
|
||
}
|
||
@import url(../../../common/css/global.css);
|
||
</style> |