添加佛前供灯
This commit is contained in:
@@ -0,0 +1,528 @@
|
||||
<template>
|
||||
<div class="goods-detail" v-if="data" :style="{paddingBottom: paddingBottom + 'px'}">
|
||||
<swiper class="swiper-container" :options="swiperOption">
|
||||
<swiper-slide v-for="(cover, index) in data.details.covers" :key="index">
|
||||
<div style="height: 100vw;" class="picture">
|
||||
<img :src="cover" alt="">
|
||||
</div>
|
||||
</swiper-slide>
|
||||
</swiper>
|
||||
<div class="monk-profile">
|
||||
<h1 class="position">{{data.details.title}}</h1>
|
||||
<div class="bar">
|
||||
<span class="status">进行中</span>
|
||||
<span>已有{{data.details.sales || 0}}人参与</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="temple-info">
|
||||
<img class="temple-img" :src="data.temple.picture" alt="">
|
||||
<div class="temple-name">
|
||||
<h4 class="name">{{data.temple.unit_name}}</h4>
|
||||
<p class="visitor">已有 <span>{{data.temple.visit}}</span> 人到访过</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<div class="panel">
|
||||
<div class="panel-head">
|
||||
<span class="title">详情</span>
|
||||
</div>
|
||||
<div v-html="data.content" class="goods-content"></div>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<div class="support">
|
||||
<div class="support-head">
|
||||
<span class="label">感恩功德</span>
|
||||
<ul class="external">
|
||||
<li :class="[listType === lType.id && 'active']" v-for="lType in listTypes" :key="lType.id" @click="getPayRecords(lType)">{{lType.name}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<user-merit v-for="pay in payList" :key="pay.id" :data="pay"></user-merit>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<fixed-bottom ref="fixedBottom">
|
||||
<button class="merit-button" @click="showSpec = true">点击供灯</button>
|
||||
</fixed-bottom>
|
||||
|
||||
<van-popup v-model="showSpec" position="bottom" closeable :style="{ height: 'auto' }" safe-area-inset-bottom :close-on-click-overlay="false" :close-on-popstate="true">
|
||||
<div class="caret-spec" >
|
||||
<div class="head">
|
||||
<span>参与流程: </span>
|
||||
<ul class="step-inline">
|
||||
<li :class="[ current === 0 && 'current']">选择类型</li>
|
||||
<li :class="[ current === 1 && 'current']">填写信息</li>
|
||||
<li :class="[ current === 2 && 'current']">参与成功</li>
|
||||
</ul>
|
||||
</div>
|
||||
<transition>
|
||||
<div class="light-container">
|
||||
<div class="light-wrapper">
|
||||
<h1>选择祈福类型</h1>
|
||||
<div class="light-group">
|
||||
<van-swipe :loop="false">
|
||||
<van-swipe-item v-for="(item, index) in lights" :key="index">
|
||||
<van-grid :border="false" class="home-grid-nav" column-num="5">
|
||||
<van-grid-item icon="photo-o" :text="nav.name" v-for="(nav, _index) in item" :key="_index" @click="onSelectLight(nav)">
|
||||
<div class="light" :class="[currentLight.id === nav.id && 'current-light']">
|
||||
<img :src="nav.picture" class="light-icon" />
|
||||
<span class="light-name">{{nav.name}}</span>
|
||||
</div>
|
||||
</van-grid-item>
|
||||
</van-grid>
|
||||
</van-swipe-item>
|
||||
</van-swipe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="light-size">
|
||||
<span>灯型</span>
|
||||
<van-radio-group v-model="currentLightSize" direction="horizontal">
|
||||
<van-radio :name="size.id" v-for="size in currentLight.children" :key="size.id" shape="square">{{size.name}}</van-radio>
|
||||
</van-radio-group>
|
||||
</div>
|
||||
<div class="light-count">
|
||||
<span>数量</span>
|
||||
<van-stepper v-model="buy_quantity" :min="1" input-width="40px" button-size="30px" />
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
<div class="next-group">
|
||||
<span class="total">合计:<em>¥{{lightSize.price || 0}}</em></span>
|
||||
<button class="next" @click="onNextStep">下一步</button>
|
||||
</div>
|
||||
</div>
|
||||
</van-popup>
|
||||
|
||||
<!-- 随喜金额-->
|
||||
<random-money v-if="showAnyAmount" :value.sync="showAnyAmount" @change="onReceiveAnyAmount"></random-money>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import 'swiper/css/swiper.css'
|
||||
import { swiper, swiperSlide } from 'vue-awesome-swiper'
|
||||
import { getGoodsLightDetail, getOrderCompare } from '@/api';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
swiper,
|
||||
swiperSlide,
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
result: [],
|
||||
showAnyAmount: false,
|
||||
paddingBottom: 0,
|
||||
fixedBottomHeight: 0,
|
||||
query: this.$route.query,
|
||||
showSpec: false,
|
||||
checked: false,
|
||||
current: 0,
|
||||
data: null,
|
||||
value: '',
|
||||
spec_id: '',
|
||||
step: 0,
|
||||
quantity: 1,
|
||||
dreamInfo: null,
|
||||
anyPrice: 0, // 随喜金额
|
||||
swiperOption: {
|
||||
autoplay: 8000,
|
||||
initialSlide: 1,
|
||||
loop: false,
|
||||
pagination: '.swiper-pagination',
|
||||
onSlideChangeEnd: swiper => {
|
||||
console.log('onSlideChangeEnd', swiper.realIndex)
|
||||
}
|
||||
},
|
||||
listType: 1,
|
||||
listTypes: [
|
||||
{ id: 1, name: '实时', },
|
||||
{ id: 2, name: '月榜', },
|
||||
{ id: 3, name: '总榜', },
|
||||
],
|
||||
payList: [],
|
||||
currentLight: null,
|
||||
currentLightPrice: 0,
|
||||
currentLightSize: '',
|
||||
buy_quantity: 1, // 购买数量
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
lightSize(){
|
||||
const { currentLight, currentLightSize } = this;
|
||||
if(!this.currentLightSize) return 0;
|
||||
return currentLight.children.find(item => item.id === currentLightSize);
|
||||
},
|
||||
lights(){
|
||||
const data = this.data;
|
||||
if(!data) return [];
|
||||
const { goods } = data;
|
||||
const len = Math.ceil(goods.length / 15);
|
||||
const lights = [];
|
||||
for(let i = 0; i < len; i++){
|
||||
lights.push(goods.slice(0 * i, 0 * i + 15))
|
||||
}
|
||||
return lights;
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
this.getGoodsLightDetail('common');
|
||||
},
|
||||
methods: {
|
||||
// 选择供灯种类
|
||||
onSelectLight(light){
|
||||
this.currentLight = light;
|
||||
this.currentLightSize = ''
|
||||
},
|
||||
// 接收随喜金额
|
||||
onReceiveAnyAmount(anyObj){
|
||||
this.anyPrice = anyObj.money;
|
||||
this.onToFillMeritName();
|
||||
},
|
||||
// dreamInfo: 心愿信息
|
||||
onDreamInfoChange(dreamInfo){
|
||||
this.dreamInfo = dreamInfo;
|
||||
},
|
||||
|
||||
onNextStep(){
|
||||
if(!this.currentLightSize){
|
||||
this.$toast.fail('请选择灯型')
|
||||
return;
|
||||
}
|
||||
this.current += 1;
|
||||
if(this.current > 0){
|
||||
this.onToFillMeritName();
|
||||
}
|
||||
},
|
||||
onToFillMeritName(){
|
||||
this.$router.push({
|
||||
name: 'fill-name',
|
||||
query: {
|
||||
...this.query,
|
||||
goods_id: this.currentLight.id,
|
||||
spec_id: this.lightSize.id,
|
||||
friendly_time: this.number,
|
||||
quantity: this.quantity,
|
||||
title: this.data.details.title,
|
||||
subTitle: this.currentLight.name + ':'+this.lightSize.name,
|
||||
amount: this.lightSize.price,
|
||||
from: 'goods_light', // 标识为通用商品
|
||||
}
|
||||
})
|
||||
},
|
||||
async getGoodsLightDetail(type){
|
||||
const { goods_id, temple_id } = this.$route.query;
|
||||
const response = await getGoodsLightDetail(type, goods_id, temple_id);
|
||||
this.data = response;
|
||||
this.currentLight = response.goods[0];
|
||||
await this.getPayRecords({ id: 1});
|
||||
this.$nextTick(() => {
|
||||
this.paddingBottom = this.$refs.fixedBottom.getOffsetHeight()
|
||||
})
|
||||
this.wechatReady({
|
||||
...this.data.shareConfig,
|
||||
link: location.href
|
||||
})
|
||||
},
|
||||
// 获取感恩功德
|
||||
async getPayRecords(lType){
|
||||
this.listType = lType.id;
|
||||
const res = await getOrderCompare(this.query.temple_id, this.listType, this.query.goods_id, 3 );
|
||||
console.log('pay record', res)
|
||||
this.payList = res.list;
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
$lightWidth: 1.3rem;
|
||||
.goods-detail{
|
||||
.goods-content{
|
||||
padding-left: .3rem;
|
||||
padding-right: .3rem;
|
||||
* {
|
||||
max-width: 100%;
|
||||
font-size: .35rem;
|
||||
}
|
||||
}
|
||||
.light-container{
|
||||
padding-left: .4rem;
|
||||
padding-right: .4rem;
|
||||
max-height: 10rem;
|
||||
overflow: auto;
|
||||
.light-wrapper{
|
||||
border-top: 1px solid #ddd;
|
||||
h1{
|
||||
font-size: .4rem;
|
||||
margin-top: .4rem;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
.light-group{
|
||||
.light{
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
.current-light{
|
||||
border: 1px solid $primary-color;
|
||||
border-radius: 4px;
|
||||
span{
|
||||
color: $primary-color;
|
||||
}
|
||||
}
|
||||
img.light-icon{
|
||||
width: $lightWidth;
|
||||
height: $lightWidth;
|
||||
vertical-align: top;
|
||||
}
|
||||
span{
|
||||
font-size: .4rem;
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding-top: .3rem;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
.van-swipe__indicators {
|
||||
bottom: 0rem;
|
||||
.van-swipe__indicator {
|
||||
width: 20px;
|
||||
height: 2px;
|
||||
border-radius: 10px;
|
||||
background: #bbb;
|
||||
}
|
||||
.van-swipe__indicator--active {
|
||||
background: $primary-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
.light-size,
|
||||
.light-count{
|
||||
font-size: .4rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: .6rem;
|
||||
align-items: center;
|
||||
margin-bottom: .65rem;
|
||||
span{
|
||||
color: black;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
.light-size{
|
||||
margin-top: 1.1rem;
|
||||
.van-radio__label{
|
||||
margin-left: 4px;
|
||||
font-size: .35rem;
|
||||
}
|
||||
.van-radio__icon .van-icon{
|
||||
width: .5rem;
|
||||
height: .5rem;
|
||||
line-height: .5rem;
|
||||
}
|
||||
}
|
||||
.light-count{
|
||||
align-items: center;
|
||||
margin-bottom: .2rem;
|
||||
}
|
||||
}
|
||||
.support{
|
||||
margin-bottom: .5rem;
|
||||
.support-head{
|
||||
padding: 0 .4rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 1.07rem;
|
||||
line-height: 1.07rem;
|
||||
.label{
|
||||
font-size: .4rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
.external{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
li{
|
||||
margin-left: .3rem;
|
||||
font-size: .35rem;
|
||||
color: #666;
|
||||
}
|
||||
li.active{
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.swiper-container{
|
||||
background: #f5f5f5;
|
||||
.picture, img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.monk-profile{
|
||||
padding: .4rem;
|
||||
.position{
|
||||
font-size: .5rem;
|
||||
padding-top: .2rem;
|
||||
color: #19282E;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.introduction{
|
||||
font-size: .37rem;
|
||||
margin-top: .4rem;
|
||||
line-height: 1.3;
|
||||
text-align: justify;
|
||||
color: #666;
|
||||
}
|
||||
.bar{
|
||||
margin-top: .27rem;
|
||||
}
|
||||
.status{
|
||||
padding: .2rem .3rem;
|
||||
background: orange;
|
||||
color: white;
|
||||
display: inline-block;
|
||||
border-radius: .04rem;
|
||||
margin-right: .3rem;
|
||||
font-size: .3rem;
|
||||
}
|
||||
span{
|
||||
color: #666;
|
||||
font-size: .28rem;
|
||||
}
|
||||
}
|
||||
.temple-info{
|
||||
border-top: 1px solid #ddd;
|
||||
padding: .3rem .4rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.temple-img{
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
border-radius: 1rem;
|
||||
margin-right: .3rem;
|
||||
}
|
||||
.temple-name{
|
||||
flex: 1;
|
||||
.name{
|
||||
font-size: .35rem;
|
||||
color: #333;
|
||||
}
|
||||
.visitor{
|
||||
color: #666;
|
||||
font-size: .3rem;
|
||||
margin-top: .2rem;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-button-group{
|
||||
text-align: center;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
z-index: 10;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: white;
|
||||
border-top: .01rem solid #ddd;
|
||||
padding: .3rem;
|
||||
|
||||
}
|
||||
.merit-button{
|
||||
display: block;
|
||||
background: $primary-color;
|
||||
color: white;
|
||||
height: 1.2rem;
|
||||
font-size: .37rem;
|
||||
min-width: 60%;
|
||||
padding: 0 .53rem;
|
||||
margin-top: .3rem;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border: .01rem solid $primary-color;
|
||||
border-radius: .13rem;
|
||||
margin-bottom: .3rem;
|
||||
}
|
||||
.caret-spec{
|
||||
.head{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: .4rem;
|
||||
padding: .4rem;
|
||||
align-items: center;
|
||||
margin-top: .13rem;
|
||||
.iconfont{
|
||||
font-size: .7rem;
|
||||
}
|
||||
.step-inline{
|
||||
display: inline-block;
|
||||
flex: 1;
|
||||
font-size: .35rem;
|
||||
li{
|
||||
display: inline-block;
|
||||
& ~ li:before{
|
||||
content: '-';
|
||||
padding: 0 .1rem;
|
||||
}
|
||||
|
||||
}
|
||||
li.current{
|
||||
color: $primary-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.auto-donate-time{
|
||||
padding: .4rem ;
|
||||
margin-top: .4rem;
|
||||
margin-bottom: 1rem;
|
||||
.donate{
|
||||
.label{
|
||||
font-size: .4rem;
|
||||
}
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.time-cycle{
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
.unit{
|
||||
font-size: .3rem;
|
||||
color: #666;
|
||||
padding-left: .2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
.next-group{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: .2rem .4rem ;
|
||||
background: white;
|
||||
align-items: center;
|
||||
border-top: 1px solid #ededed;
|
||||
.total{
|
||||
font-size: .4rem;
|
||||
em{
|
||||
color: $primary-color;
|
||||
font-size: .4rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.next{
|
||||
font-size: .4rem;
|
||||
padding: .3rem 1rem;
|
||||
background: $primary-color;
|
||||
border: 1px solid $primary-color;
|
||||
color: white;
|
||||
border-radius: .1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user