478 lines
15 KiB
Vue
478 lines
15 KiB
Vue
<template>
|
|
<div class="everyday-donation" v-if="data">
|
|
<div class="topbar" ref="topbar">
|
|
<van-nav-bar left-arrow v-if="$route.meta.showNavBar" :title="$route.meta.title" @click-left="$router.back()" :style="{backgroundColor: $route.meta.navBarBackgroundColor}" />
|
|
</div>
|
|
<swiper class="swiper-container" :options="swiperOption">
|
|
<swiper-slide>
|
|
<div style="height: 100vw;" class="picture">
|
|
<img src="https://img1.baidu.com/it/u=3715184423,1831753068&fm=26&fmt=auto" alt="">
|
|
</div>
|
|
</swiper-slide>
|
|
<swiper-slide>
|
|
<div style="height: 100vw;" class="picture">
|
|
<img src="https://img1.baidu.com/it/u=3715184423,1831753068&fm=26&fmt=auto" alt="">
|
|
</div>
|
|
</swiper-slide>
|
|
</swiper>
|
|
<div class="monk-profile">
|
|
<h1 class="position">{{data.name}}</h1>
|
|
<div class="bar">
|
|
<span class="status">进行中</span>
|
|
<span>已有{{data.sales || 0}}人参与</span>
|
|
</div>
|
|
</div>
|
|
<div class="divider"></div>
|
|
<div class="panel">
|
|
<div class="panel-head">
|
|
<span class="title">进展动态</span>
|
|
</div>
|
|
<div class="panel-body">
|
|
<buddha-process></buddha-process>
|
|
<div class="process-more">
|
|
<span>查看更多进展状态</span>
|
|
<i class="iconfont icon-arrow-right"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="support">
|
|
<div class="support-head">
|
|
<span class="label">感恩功德</span>
|
|
<ul class="external">
|
|
<li class="active">实时</li>
|
|
<li>月榜</li>
|
|
<li>总榜</li>
|
|
</ul>
|
|
</div>
|
|
<div>
|
|
<user-merit></user-merit>
|
|
<user-merit></user-merit>
|
|
<user-merit></user-merit>
|
|
<user-merit></user-merit>
|
|
</div>
|
|
</div>
|
|
<div class="merit-button-group border-top">
|
|
<button class="merit-button" @click="showSpec = true">去行善</button>
|
|
</div>
|
|
|
|
<van-popup v-model="showSpec" position="bottom" closeable :style="{ height: 'auto' }" :close-on-click-overlay="false" :close-on-popstate="true">
|
|
<!-- 显示日行一善的商品规格 -->
|
|
<div class="caret" v-if="query.goods_type === '-1'">
|
|
<div class="head">
|
|
<span>选择行善金额</span>
|
|
</div>
|
|
<ul class="spec">
|
|
<li class="random">
|
|
<span class="border-circle">随喜</span>
|
|
</li>
|
|
<li v-for="(spec, index) in data.spec" :key="index">
|
|
<span class="border-circle" :class="[Number(spec.money) === priceUnit && 'active']" @click="onPriceUnit(spec)">{{spec.money}}元</span>
|
|
</li>
|
|
</ul>
|
|
<div class="auto-donate">
|
|
<p class="label">自动行善</p>
|
|
<div class="donate">
|
|
<span>每天早上六点寺院联盟帮你自动行善一次</span>
|
|
<van-checkbox v-model="is_auto" shape="square" checked-color="#cf9e3b"></van-checkbox>
|
|
</div>
|
|
</div>
|
|
<div class="auto-donate-time" v-if="is_auto">
|
|
<div class="donate">
|
|
<span class="label">行善时间</span>
|
|
<span class="time-cycle">
|
|
<van-stepper v-model="number" step="1" />
|
|
<span class="unit">个月</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="next-group">
|
|
<span class="total">合计:¥{{priceTotal}}</span>
|
|
<button class="next" @click="onToPay">下一步</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 显示添砖加瓦的商品规格 -->
|
|
<div class="caret" v-if="query.goods_type === '-2'">
|
|
<div class="head">
|
|
<span>选择行善金额</span>
|
|
</div>
|
|
<ul class="spec brick-spec">
|
|
<li class="random">
|
|
<span class="border-circle" :class="[is_assign && 'active']" @click="onCustomeBrike">自定义砖数认捐</span>
|
|
<van-stepper v-model="buy_quantity" step="1" />
|
|
</li>
|
|
<li v-for="(spec, index) in data.spec" :key="index">
|
|
<span
|
|
class="border-circle"
|
|
:class="[Number(spec.money) === priceUnit && 'active']"
|
|
@click="onPriceUnit(spec)"
|
|
>认捐{{spec.donate_number}}块砖 {{spec.money}}元</span>
|
|
</li>
|
|
</ul>
|
|
<div class="auto-donate">
|
|
<p class="label">每日填砖</p>
|
|
<div class="donate">
|
|
<span>每天早上六点寺院联盟帮你自动填砖一次</span>
|
|
<van-checkbox v-model="is_auto" shape="square" checked-color="#cf9e3b"></van-checkbox>
|
|
</div>
|
|
</div>
|
|
<div class="auto-donate-time" v-if="is_auto">
|
|
<div class="donate">
|
|
<span class="label">行善时间</span>
|
|
<span class="time-cycle">
|
|
<van-stepper v-model="number" step="1" />
|
|
<span class="unit">个月</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="next-group">
|
|
<span class="total">合计:¥{{priceTotal}}</span>
|
|
<button class="next" @click="onToPay">下一步</button>
|
|
</div>
|
|
</div>
|
|
|
|
</van-popup>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import 'swiper/css/swiper.css'
|
|
import { swiper, swiperSlide } from 'vue-awesome-swiper'
|
|
import { getGoodsDetail } from '@/api'
|
|
|
|
export default {
|
|
components: {
|
|
swiper, swiperSlide
|
|
},
|
|
data(){
|
|
const { query } = this.$route;
|
|
let title = '详情';
|
|
if(query.goods_type === '-1'){
|
|
title = '日行一善';
|
|
}
|
|
if(query.goods_type === '-2'){
|
|
title = '添砖加瓦'
|
|
}
|
|
document.title = title;
|
|
return {
|
|
documentTitle: title,
|
|
query,
|
|
data: null,
|
|
value: 1,
|
|
is_auto: false, // 是否自动行善
|
|
showSpec: true,
|
|
priceUnit: 0,
|
|
priceUnitId: '',
|
|
number: 1,
|
|
is_assign: false, // 是否为自动认捐砖块数
|
|
buy_quantity: 1, // 自定义认捐砖块数
|
|
banners: [ '/1.jpg', '/2.jpg', '/3.jpg' ],
|
|
swiperOption: {
|
|
autoplay: 8000,
|
|
initialSlide: 1,
|
|
loop: true,
|
|
pagination: '.swiper-pagination',
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
priceTotal(){
|
|
if(this.is_auto){
|
|
return (parseInt(this.priceUnit * 100, 10) * this.number * 30) / 100
|
|
}
|
|
return (parseInt(this.priceUnit * 100, 10) * this.number) / 100;
|
|
}
|
|
},
|
|
mounted(){
|
|
if(this.query.goods_type === '-1'){
|
|
return this.getGoodsDetail('friendly');
|
|
}
|
|
if(this.query.goods_type === '-2'){
|
|
return this.getGoodsDetail('tile');
|
|
}
|
|
|
|
},
|
|
methods: {
|
|
// 获取商品详情
|
|
/*
|
|
type = friendly: 获取日行一善商品
|
|
type = tile: 获取添砖加瓦商品
|
|
type = common: 获取普通商品
|
|
*/
|
|
async getGoodsDetail(type){
|
|
const { goods_id, temple_id } = this.$route.query;
|
|
const response = await getGoodsDetail(type, goods_id, temple_id);
|
|
if(this.query.goods_type === '-2'){
|
|
response.spec = response.spec.map(v => ({ ...v, money: this.amountAbs(v.donate_number, Number(response.price))}))
|
|
}
|
|
this.data = response;
|
|
},
|
|
// 设置行善单价
|
|
onPriceUnit({id, money}){
|
|
this.priceUnit = Number(money);
|
|
this.priceUnitId = id;
|
|
if(this.query.goods_type === '-2'){
|
|
this.is_assign = false;
|
|
}
|
|
},
|
|
onToPay(){
|
|
if(this.query.goods_type === '-1'){
|
|
this.$router.push({
|
|
name: 'pay',
|
|
query: {
|
|
...this.$route.query,
|
|
is_auto: this.is_auto ? 1 : 0,
|
|
spec_id: this.priceUnitId,
|
|
friendly_time: this.number,
|
|
title: this.title,
|
|
subTitle: this.data.name,
|
|
amount: this.priceTotal,
|
|
is_customized: 0,
|
|
from: 'friendly_day', // 标识为日行一善
|
|
}
|
|
})
|
|
}
|
|
if(this.query.goods_type === '-2'){
|
|
this.$router.push({
|
|
name: 'pay',
|
|
query: {
|
|
...this.$route.query,
|
|
is_auto: this.is_auto ? 1 : 0,
|
|
is_assign: this.is_assign ? 1 : 0,
|
|
spec_id: this.priceUnitId,
|
|
friendly_time: this.number,
|
|
title: this.title,
|
|
subTitle: this.data.name,
|
|
amount: this.priceTotal,
|
|
is_customized: 0,
|
|
buy_quantity: this.buy_quantity,
|
|
from: 'brike', // 标识为填砖加瓦
|
|
}
|
|
})
|
|
}
|
|
},
|
|
amountAbs(number, price){
|
|
return (parseInt(number * 100, 10) * price) / 100
|
|
},
|
|
// 自定义砖数
|
|
onCustomeBrike(){
|
|
this.priceUnit = Number(this.data.price);
|
|
this.is_assign = true;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.swiper-container{
|
|
background: #f5f5f5;
|
|
.picture, img{
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
}
|
|
.caret{
|
|
padding-bottom: 2.2rem;
|
|
.head{
|
|
display: flex;
|
|
justify-content: space-between;
|
|
font-size: .4rem;
|
|
padding: .4rem;
|
|
align-items: center;
|
|
margin-top: .13rem;
|
|
.iconfont{
|
|
font-size: .7rem;
|
|
}
|
|
}
|
|
.spec{
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr 1fr 1fr;
|
|
grid-template-rows: 1fr 1fr;
|
|
grid-gap: .3rem;
|
|
padding: .4rem;
|
|
.random{
|
|
grid-column-start: 1;
|
|
grid-column-end: 5;
|
|
text-align: left;
|
|
span{
|
|
font-size: .35rem;
|
|
border-radius: .11rem;
|
|
width: auto;
|
|
display: inline-block;
|
|
padding: .3rem .7rem;
|
|
&:active{
|
|
background: #f5f5f5;
|
|
}
|
|
}
|
|
}
|
|
li{
|
|
text-align: center;
|
|
span{
|
|
font-size: .35rem;
|
|
width: 100%;
|
|
display: inline-block;
|
|
vertical-align: top;
|
|
padding: .3rem 0;
|
|
line-height: 1.2;
|
|
user-select: none;
|
|
color: #666;
|
|
&:active{
|
|
background: #f5f5f5;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.brick-spec{
|
|
grid-template-columns: 1fr 1fr;
|
|
grid-template-rows: 1fr 1fr 1fr;
|
|
grid-gap: .3rem;
|
|
.random{
|
|
grid-column-start: 1;
|
|
grid-column-end: 3;
|
|
text-align: left;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
span.active{
|
|
color: $primary-color;
|
|
}
|
|
}
|
|
.auto-donate{
|
|
padding: 0 .4rem;
|
|
margin-top: .6rem;
|
|
.label{
|
|
font-size: .4rem;
|
|
}
|
|
.donate{
|
|
display: flex;
|
|
margin-top: .3rem;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
span{
|
|
font-size: .35rem;
|
|
}
|
|
}
|
|
}
|
|
.auto-donate-time{
|
|
padding: .4rem ;
|
|
margin-top: .4rem;
|
|
.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: .4rem ;
|
|
position: absolute;
|
|
background: white;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
align-items: center;
|
|
border-top: 1px solid #ededed;
|
|
.total{
|
|
font-size: .4rem;
|
|
}
|
|
.next{
|
|
font-size: .4rem;
|
|
padding: .3rem 1rem;
|
|
background: $primary-color;
|
|
border: 1px solid $primary-color;
|
|
color: white;
|
|
border-radius: .1rem;
|
|
}
|
|
}
|
|
}
|
|
.support{
|
|
.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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.everyday-donation{
|
|
.monk-profile{
|
|
padding: .4rem;
|
|
margin-bottom: .2rem;
|
|
.position{
|
|
font-size: .5rem;
|
|
padding-top: .2rem;
|
|
text-align: justify;
|
|
line-height: 1.3;
|
|
color: #19282E;
|
|
}
|
|
.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;
|
|
}
|
|
}
|
|
.merit-button-group{
|
|
text-align: center;
|
|
position: fixed;
|
|
bottom: 0;
|
|
z-index: 10;
|
|
left: 0;
|
|
right: 0;
|
|
background: white;
|
|
padding: .4rem 0;
|
|
.merit-button{
|
|
display: inline-block;
|
|
background: $primary-color;
|
|
color: white;
|
|
height: 1.2rem;
|
|
font-size: .37rem;
|
|
width: 60%;
|
|
padding: 0 .53rem;
|
|
border: .01rem solid $primary-color;
|
|
border-radius: 1.33rem
|
|
}
|
|
}
|
|
}
|
|
</style> |