<template>
|
|
<view class="flex view report-score__view">
|
|
<view class="flex flex-column left" :class="[scoreAlign == 'left' ? 'align-left' : '']">
|
|
<template v-if="score">
|
|
<view class="flex">
|
|
<text class="score-value">{{ score }}</text><text class="score-full">/100分</text>
|
|
</view>
|
|
<view class="flex">
|
|
<view class="flex change" v-if="change > 0 || change < 0">
|
|
<text>{{ change }}</text>
|
|
<image :class="['change-icon', change > 0 ? 'is-up' : '']" src="@/pages_order/static/report/arrow-down.png" mode="widthFix"></image>
|
|
</view>
|
|
<!-- todo: check key -->
|
|
<view class="tag" v-if="data.tag">
|
|
{{ data.tag }}
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<template v-else>
|
|
<view class="flex">
|
|
<text class="score-value is-empty">--</text><text class="score-full">/100分</text>
|
|
</view>
|
|
</template>
|
|
</view>
|
|
<view class="divider"></view>
|
|
<view class="flex flex-column right">
|
|
<view><view class="highlight">{{ userInfo.name }}</view>的</view>
|
|
<view>专属检测方案</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapState } from 'vuex'
|
|
|
|
export default {
|
|
props: {
|
|
reports: {
|
|
type: Array,
|
|
default() {
|
|
return []
|
|
}
|
|
},
|
|
scoreAlign: {
|
|
type: String,
|
|
default: 'center'
|
|
}
|
|
},
|
|
computed : {
|
|
...mapState(['userInfo']),
|
|
score() {
|
|
const [currentReport] = this.reports || []
|
|
|
|
if (!currentReport?.score) {
|
|
return null
|
|
}
|
|
|
|
return parseInt(currentReport.score)
|
|
},
|
|
change() {
|
|
const [currentReport, lastReport] = this.reports || []
|
|
|
|
if (lastReport) {
|
|
return parseInt(currentReport.score - lastReport.score)
|
|
}
|
|
|
|
return 0
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.view {
|
|
|
|
.left {
|
|
flex: 1;
|
|
|
|
&.align-left {
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.score {
|
|
&-value {
|
|
font-family: PingFang SC;
|
|
line-height: 1.4;
|
|
font-weight: 600;
|
|
font-size: 40rpx;
|
|
color: $uni-color;
|
|
|
|
&.is-empty {
|
|
color: #989898;
|
|
}
|
|
}
|
|
|
|
&-full {
|
|
margin-left: 8rpx;
|
|
font-size: 26rpx;
|
|
font-weight: 400;
|
|
line-height: 1.4;
|
|
font-family: PingFang SC;
|
|
color: transparent;
|
|
background-image: linear-gradient(to right, #4B348F, #845CFA);
|
|
background-clip: text;
|
|
display: inline-block;
|
|
}
|
|
|
|
}
|
|
|
|
.change {
|
|
font-family: PingFang SC;
|
|
font-weight: 400;
|
|
font-size: 24rpx;
|
|
line-height: 1.4;
|
|
color: #F79205;
|
|
|
|
&-icon {
|
|
width: 24rpx;
|
|
height: auto;
|
|
|
|
&.is-up {
|
|
transform: rotate(180deg);
|
|
}
|
|
}
|
|
}
|
|
|
|
.tag {
|
|
margin-left: 16rpx;
|
|
padding: 6rpx 16rpx;
|
|
font-family: PingFang SC;
|
|
font-weight: 400;
|
|
font-size: 20rpx;
|
|
line-height: 1.4;
|
|
color: #FFFFFF;
|
|
background-image: linear-gradient(135deg, #4B348F, #845CFA);
|
|
border-top-left-radius: 24rpx;
|
|
border-bottom-right-radius: 24rpx;
|
|
}
|
|
}
|
|
|
|
.right {
|
|
flex: 1;
|
|
text-align: center;
|
|
font-size: 26rpx;
|
|
font-weight: 400;
|
|
line-height: 1.4;
|
|
font-family: PingFang SC;
|
|
color: transparent;
|
|
background-image: linear-gradient(to right, #4B348F, #845CFA);
|
|
background-clip: text;
|
|
display: inline-block;
|
|
|
|
.highlight {
|
|
display: inline-block;
|
|
margin-right: 10rpx;
|
|
border-bottom: 2rpx solid #4B348F;
|
|
}
|
|
}
|
|
|
|
.divider {
|
|
width: 2rpx;
|
|
height: 32rpx;
|
|
background: #B5B8CE;
|
|
}
|
|
}
|
|
</style>
|