普兆健康管家前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

371 lines
8.6 KiB

<template>
<view class="page__view">
<navbar title="营养方案" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#FFFFFF" />
<view class="main">
<reportCard>
<view class="section header">
<view>营养师基于你生活习惯和营养目标推荐</view>
<view class="highlight">量身定制的营养方案</view>
</view>
<view class="section" v-for="(step, index) in list" :key="step.key">
<view class="flex section-header">
<view class="section-header-index">
<text>{{ index + 1 }}</text>
<image class="section-header-index-icon" :src="step.url" mode="widthFix"></image>
</view>
<view class="section-header-title">
<view class="section-header-title-name">{{ step.name }}</view>
<view class="section-header-title-desc">{{ step.desc }}</view>
</view>
</view>
<view class="section-content">
<view class="card" v-for="(item, idx) in step.children" :key="item.key" >
<productCard :data="item" @select="onSelect(index, idx, $event)" ></productCard>
</view>
</view>
</view>
<view class="section tips">
*以上是根据你的营养目标以及饮食、运动、作息状况给出的针对性健康建议,可以辅助你达成营养目标,同时养成良好的生活习惯。
</view>
</reportCard>
</view>
<view class="flex bottom">
<view class="left">
<button class="btn btn-comment">
<view>查看评价</view>
<view class="flex"><text class="highlight">{{ `${comment} 条` }}</text><uv-icon name="arrow-right" color="#C6C6C6" size="28rpx"></uv-icon></view>
</button>
</view>
<view class="flex right">
<button
class="flex btn btn-cart"
:disabled="!selectedCount"
:class="[selectedCount ? '' : 'is-disabled']"
@click="onAddCart"
>
<text>加入购物车</text>
</button>
<button
class="flex btn btn-settle"
:class="[selectedCount ? '' : 'is-disabled']"
:disabled="!selectedCount"
@click="onBuy"
>
<text>结算</text>
<text v-if="selectedCount">{{ `(${selectedCount}种)` }}</text>
</button>
</view>
</view>
</view>
</template>
<script>
import reportCard from '@/pages_order/components/reportCard.vue';
import productCard from './productCard.vue';
export default {
components: {
reportCard,
productCard,
},
data() {
return {
list: [],
comment: 0,
}
},
computed: {
selectedCount() {
let count = 0
this.list.forEach(step => {
step.children.forEach(item => {
item.selected && count++
})
})
return count
},
},
onLoad() {
const detectionList = [
{
id: '0011',
url: '/pages_order/static/report/detection-eyes.png',
name: '眼科检查',
desc: '早期发现眼部疾病',
originalPrice: 168,
price: 68.00,
unit: '次',
count: 1,
selected: false,
},
]
const baseList = [
{
id: '0021',
url: '/pages_order/static/index/medicine-1.png',
name: '全株印度人参',
desc: '安享睡眠情绪舒展',
originalPrice: 688,
price: 1664,
unit: '月',
count: 1,
selected: false,
customized: true,
},
{
id: '0022',
url: '/pages_order/static/index/medicine-2.png',
name: '御氧虾青素',
desc: '安享睡眠情绪舒展',
originalPrice: 688,
price: 1664,
unit: '月',
count: 1,
selected: false,
customized: true,
},
{
id: '0023',
url: '/pages_order/static/index/medicine-3.png',
name: '全株印度人参',
desc: '安享睡眠情绪舒展',
originalPrice: 688,
price: 1664,
unit: '月',
count: 1,
selected: false,
customized: true,
},
{
id: '0024',
url: '/pages_order/static/index/medicine-4.png',
name: '全株印度人参',
desc: '安享睡眠情绪舒展',
originalPrice: 688,
price: 1664,
unit: '月',
count: 1,
selected: false,
customized: true,
},
]
this.list = [
{
id: '001',
name: '检测方案',
desc: '刚开始健康检测?专家推荐先做这几项',
url: '/pages_order/static/report/report-nutrition-1.png',
children: detectionList
},
{
id: '002',
name: '基础方案',
desc: `刚开始吃维生素?营养师建议从这${baseList.length}颗开始`,
url: '/pages_order/static/report/report-nutrition-2.png',
children: baseList
},
]
this.comment = 23898
},
methods: {
onSelect(stepIdx, childIdx, selected) {
this.list[stepIdx].children[childIdx].selected = selected
},
getSelectedList() {
return this.list.reduce((arr, step) => {
const selectedArr = step.children.filter(product => product.selected)
return arr.concat(selectedArr)
}, [])
},
onAddCart() {
const selectedList = this.getSelectedList()
this.$store.commit('addCart', selectedList)
},
onBuy() {
const selectedList = this.getSelectedList()
this.$store.commit('createOrder', selectedList)
},
},
}
</script>
<style scoped lang="scss">
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
position: relative;
/deep/ .nav-bar__view {
position: fixed;
top: 0;
left: 0;
}
}
.main {
padding: calc(var(--status-bar-height) + 152rpx) 32rpx 272rpx 32rpx;
}
.section {
& + & {
margin-top: 48rpx;
padding-top: 12rpx;
border-top: 2rpx dashed #989898;
}
&-header {
justify-content: flex-start;
&-index {
position: relative;
font-family: HarmonyOS Sans;
font-weight: 700;
font-size: 96rpx;
line-height: 1.4;
color: #D9D9D9;
&-icon {
position: absolute;
left: 34rpx;
top: 70rpx;
width: 40rpx;
height: 40rpx;
}
}
&-title {
margin-left: 32rpx;
font-family: PingFang SC;
line-height: 1.4;
color: #252545;
&-name {
font-weight: 600;
font-size: 40rpx;
}
&-desc {
font-weight: 400;
font-size: 26rpx;
}
}
}
&-content {
padding-top: 18rpx;
}
}
.section.header {
font-family: PingFang SC;
font-weight: 400;
font-size: 36rpx;
line-height: 1.2;
color: #252545CC;
.highlight {
font-size: 48rpx;
line-height: 1.4;
font-weight: 600;
font-family: PingFang SC;
color: transparent;
background-image: linear-gradient(to right, #4B348F, #845CFA);
background-clip: text;
display: inline-block;
}
}
.tips {
font-family: PingFang SC;
font-weight: 400;
font-size: 18rpx;
line-height: 1.4;
color: #989898;
}
.card {
& + & {
margin-top: 32rpx;
}
}
.bottom {
width: 100%;
position: fixed;
left: 0;
bottom: 0;
padding: 24rpx 40rpx 92rpx 40rpx;
box-sizing: border-box;
background: #FFFFFF;
column-gap: 16rpx;
.left {
}
.right {
flex: 1;
column-gap: 32rpx;
}
.btn {
&-comment {
display: inline-block;
width: auto;
text-align: left;
font-family: PingFang SC;
font-weight: 400;
font-size: 24rpx;
line-height: 1.4;
color: #626262;
.highlight {
margin-right: 4rpx;
font-family: 600;
font-size: 30rpx;
color: #252545;
}
}
&-cart {
flex: 1;
padding: 14rpx 0;
font-family: PingFang SC;
font-size: 36rpx;
font-weight: 500;
line-height: 1;
color: #252545;
border: 2rpx solid #252545;
border-radius: 41rpx;
}
&-settle {
flex: 1;
padding: 16rpx 0;
font-family: PingFang SC;
font-size: 36rpx;
font-weight: 500;
line-height: 1;
color: #FFFFFF;
background-image: linear-gradient(to right, #4B348F, #845CFA);
border-radius: 41rpx;
}
&.is-disabled {
opacity: 0.5;
}
}
}
</style>