|
|
- <template>
- <view class="card" @click="jumpToProductDetail">
- <view class="flex top">
- <view class="title">{{ data.title }}</view>
- <view :class="['flex', 'status', `status-${flag}`]">{{ flagDesc }}</view>
- </view>
- <view class="flex main">
- <image class="img" :src="coverImg" mode="scaleToFill"></image>
- <view class="info">
- <view class="flex row">
- <view class="row-label">客户姓名:</view>
- <view class="row-content">{{ data.name }}</view>
- </view>
- <template v-if="data.status == 0">
- <view class="flex row">
- <view class="row-label">下单时间:</view>
- <view class="row-content">{{ data.createTime }}</view>
- </view>
- </template>
- <template v-else>
- <view class="flex row">
- <view class="row-label">检测类型:</view>
- <view class="row-content">{{ subscribeTypeDesc }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">预约时间:</view>
- <view class="row-content">{{ timeDesc }}</view>
- </view>
- </template>
- <view class="flex row">
- <view class="row-label">联系电话:</view>
- <view class="row-content">{{ data.phone }}</view>
- </view>
- </view>
- </view>
- <view class="flex bottom">
- <view class="flex price">
- <text class="price-label">总价格:</text>
- <text class="price-unit">¥</text><text class="price-value">{{ data.price }}</text>
- </view>
- <view class="flex btns">
- <!-- 待预约 -->
- <template v-if="data.status == '0'">
- <button class="btn" @click.stop="onBook">检测预约</button>
- </template>
- <!-- 待检测 -->
- <template v-else-if="data.status == '1'">
- <!-- 自采 -->
- <template v-if="data.subscribeType == '0'">
- <button class="btn" @click.stop="onSendBackOnline">线上回寄试剂盒</button>
- </template>
- </template>
- </view>
- </view>
- </view>
- </template>
-
- <script>
- // 状态 0待预约 1待检测 2已完成 3已取消
- const STATUS_AND_DESC_MAPPING = {
- 0: '待预约',
- 1: '待检测',
- 2: '已完成',
- 3: '已取消',
- // todo: check 预约失败
-
- // 0: '待预约',
- // 1: '自采',
- // 2: '上门',
- // 3: '到店',
- // 4: '已完成',
- // 5: '已取消',
- // 6: '预约失败',
- }
-
- const FLAG_AND_DESC_MAPPING = {
- 0: '待预约',
- 1: '自采',
- 2: '上门',
- 3: '到店',
- 4: '已完成',
- 5: '已取消',
- 6: '预约失败',
- }
-
- // 可选预约类型 0自采,1上门,2到店,3已取消
- const SUBSCRIBE_TYPE_AND_DESC_MAPPING = {
- 0: '自采',
- 1: '上门',
- 2: '到店',
- 3: '已取消',
- }
-
- export default {
- props: {
- data: {
- type: Object,
- default() {
- return {}
- }
- }
- },
- computed: {
- coverImg() {
- const { orderProduct } = this.data || {}
- const { image } = orderProduct || {}
-
- return image?.split?.(',')?.[0]
- },
- subscribeTypeDesc() {
- const { subscribeType } = this.data
-
- return SUBSCRIBE_TYPE_AND_DESC_MAPPING[subscribeType]
- },
- flag() {
- const { status, subscribeType } = this.data
-
- // 0: '待预约',
- // 1: '自采',
- // 2: '上门',
- // 3: '到店',
- // 4: '已完成',
- // 5: '已取消',
- // todo: check 预约失败
- // 6: '预约失败',
-
- // status 状态 0待预约 1待检测 2已完成 3已取消
- if (status == '0') { // 待预约
- return 0 // 待预约
- }
- if (status == '1') { // 待检测
- // subscribeType 可选预约类型 0自采,1上门,2到店,3已取消
- if (subscribeType == '0') {
- return 1 // 自采
- } else if (subscribeType == '1') {
- return 2 // 上门
- } else if (subscribeType == '2') {
- return 3 // 到店
- }
- return
- }
- if (status == '2') { // 已完成
- return 4 // 已完成
- }
- if (status == '3') { // 已取消
- return 5 // 已取消
- }
- },
- flagDesc() {
- return FLAG_AND_DESC_MAPPING[this.flag]
- },
- timeDesc() {
- const { subscribeDate, subscribeTime } = this.data || {}
-
- if (!subscribeTime) {
- return '--'
- }
-
- const timeRange = JSON.parse(subscribeTime).join('~')
-
- return `${subscribeDate} ${timeRange}`
- },
- },
- methods: {
- onBook() {
- this.$utils.navigateTo(`/pages_order/checkup/checkupBook/apply?id=${this.data.id}&type=${this.data.type}`)
- },
- onSendBackOnline() {
- this.$emit('sendBack')
- },
- jumpToProductDetail() {
- console.log(this.data.id, 'jumpToProductDetail')
- // this.$utils.navigateTo(`/pages_order/checkup/checkupBook/detail?id=${this.data.id}`)
-
- // todo: check
- if (this.data.status == '0') { // 0-待预约
- // this.$utils.navigateTo(`/pages_order/order/orderDetail/index?id=${this.data.id}`)
- } else {
- this.$utils.navigateTo(`/pages_order/checkup/checkupBook/detail?id=${this.data.id}`)
- }
- },
- },
- }
- </script>
-
- <style scoped lang="scss">
- .card {
- width: 100%;
- padding: 32rpx;
- box-sizing: border-box;
- background: #FAFAFF;
- border: 2rpx solid #FFFFFF;
- border-radius: 32rpx;
- }
-
- .top {
- justify-content: space-between;
-
- .title {
- font-family: PingFang SC;
- font-weight: 500;
- font-size: 36rpx;
- line-height: 1.4;
- color: #252545;
- }
-
- .status {
- display: inline-flex;
- min-width: 120rpx;
- padding: 6rpx 0;
- box-sizing: border-box;
- font-family: PingFang SC;
- font-weight: 400;
- font-size: 24rpx;
- line-height: 1.4;
- color: #252545;
- background: #F3F3F3;
- border-radius: 12rpx;
-
- &-0 {
- color: #7D27E0;
- background: #F5EEFD;
- }
-
- &-1 {
- color: #2799E0;
- background: #EEF7FD;
- }
-
- &-2 {
- color: #E53C29;
- background: #FDE7E5;
- }
-
- &-3 {
- color: #10A934;
- background: #E2FDE9;
- }
- }
- }
-
- .main {
- margin: 24rpx 0;
- column-gap: 24rpx;
-
- .img {
- flex: none;
- width: 120rpx;
- height: 120rpx;
- }
-
- .info {
- flex: 1;
- padding: 24rpx;
- background: #FFFFFF;
- border-radius: 32rpx;
- }
-
- .row {
- align-items: flex-start;
- justify-content: flex-start;
- column-gap: 4rpx;
-
- font-family: PingFang SC;
- font-weight: 400;
- font-size: 28rpx;
- line-height: 1.4;
-
- &-label {
- flex: none;
- color: #8B8B8B;
- }
-
- &-content {
- color: #393939;
- }
- }
-
- .row + .row {
- margin-top: 16rpx;
- }
- }
-
- .bottom {
- justify-content: space-between;
-
- .price {
- column-gap: 8rpx;
- font-family: PingFang SC;
- font-weight: 500;
- line-height: 1.4;
-
- &-label {
- font-weight: 400;
- font-size: 26rpx;
- color: #8B8B8B;
- }
-
- &-unit {
- font-size: 24rpx;
- color: #7451DE;
- }
-
- &-value {
- font-size: 32rpx;
- color: #7451DE;
- }
- }
-
- .btns {
- flex: 1;
- justify-content: flex-end;
- column-gap: 16rpx;
- }
-
- .btn {
- padding: 10rpx 22rpx;
- font-family: PingFang SC;
- font-weight: 400;
- font-size: 28rpx;
- line-height: 1.4;
- color: #393939;
- border: 2rpx solid #252545;
- border-radius: 32rpx;
- }
- }
- </style>
|