|
|
- <template>
- <view class="page__view">
-
- <navbar title="我的预约" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#F3F2F7" />
-
- <template v-if="detail">
-
- <view class="main">
-
- <view class="flex flex-column status">
- <!-- status 状态 0待预约 1待检测 2已完成 3已取消 -->
- <template v-if="['1', '2'].includes(detail.status)">
- <image class="icon" src="@/pages_order/static/checkup/icon-success.png" mode="widthFix"></image>
- </template>
- <template v-else-if="detail.status == '3'">
- <image class="icon" src="@/pages_order/static/checkup/icon-error.png" mode="widthFix"></image>
- </template>
- <view>{{ statusDesc }}</view>
- </view>
-
- <!-- 自采 -->
- <template v-if="detail.subscribeType == '0'">
- <view class="card">
- <view class="card-header">自采检测预约信息</view>
- <view class="flex row">
- <view class="row-label">姓名</view>
- <view class="row-content">{{ detail.name }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">寄送地址</view>
- <view class="row-content">{{ addressDesc }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">电话</view>
- <view class="row-content">{{ detail.phone }}</view>
- </view>
- </view>
- </template>
- <!-- 上门 -->
- <template v-else-if="detail.subscribeType == '1'">
- <view class="card">
- <view class="card-header">上门检测预约信息</view>
- <view class="flex row">
- <view class="row-label">姓名</view>
- <view class="row-content">{{ detail.name }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">体检地址</view>
- <view class="row-content">{{ addressDesc }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">时间</view>
- <view class="row-content highlight">{{ timeDesc }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">电话</view>
- <view class="row-content">{{ detail.phone }}</view>
- </view>
- </view>
- </template>
- <!-- 到店 -->
- <template v-else-if="detail.subscribeType == '2'">
- <view class="card">
- <view class="card-header">到店检测预约信息</view>
- <view class="flex row">
- <view class="row-label">姓名</view>
- <view class="row-content">{{ detail.name }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">时间</view>
- <view class="row-content highlight">{{ timeDesc }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">电话</view>
- <view class="row-content">{{ detail.phone }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">医院</view>
- <view class="row-content">{{ hospitalDesc }}</view>
- </view>
- </view>
- </template>
-
- </view>
-
- <view class="flex bottom" v-if="['0', '1', '2'].includes(detail.status)">
- <!-- status 状态 0待预约 1待检测 2已完成 3已取消 -->
- <!-- 待预约 -->
- <template v-if="detail.status == '0'">
- <button class="btn" @click="onBook">检测预约</button>
- </template>
- <!-- 待检测 -->
- <template v-else-if="detail.status == '1'">
- <!-- 自采 -->
- <template v-if="detail.subscribeType == '0'">
- <!-- <button class="btn btn-plain" open-type="contact">客服</button> -->
- <button plain class="flex flex-column btn btn-service" open-type="contact">
- <image class="btn-service-icon" src="@/pages_order/static/order/icon-service.png" mode="widthFix"></image>
- <view>联系客服</view>
- </button>
- <button class="btn" @click="openTrackingNoPopup">已回寄</button>
- </template>
- <!-- 上门, 到店 -->
- <template v-else-if="['1', '2'].includes(detail.subscribeType)">
- <button class="btn btn-plain" @click="onCancel">取消</button>
- <button class="btn" @click="onEdit">修改</button>
- </template>
- </template>
- <!-- 已完成 -->
- <template v-else-if="detail.status == '2'">
- <button class="btn" @click="jumpToReportDetail">报告查看</button>
- </template>
- </view>
- </template>
-
- <checkupServicePopup ref="checkupServicePopup"></checkupServicePopup>
- <checkupTrackingNoPopup ref="checkupTrackingNoPopup" @submitted="getData"></checkupTrackingNoPopup>
- </view>
- </template>
-
- <script>
- import checkupServicePopup from '@/pages_order/checkup/checkupServicePopup.vue'
- import checkupTrackingNoPopup from '@/pages_order/checkup/checkupTrackingNoPopup.vue'
-
- export default {
- components: {
- checkupServicePopup,
- checkupTrackingNoPopup,
- },
- data() {
- return {
- id: null,
- detail: null,
- hospitalOptions: []
- }
- },
- async onLoad(arg) {
- const { id } = arg
- this.id = id
-
- await this.getData()
-
- if (this.detail?.subscribeType == '2') { // 到店
- this.fetchHospitalOptions()
- }
- },
- // 下拉刷新
- onPullDownRefresh() {
- this.getData()
- },
- computed: {
- statusDesc() {
- // status 状态 0待预约 1待检测 2已完成 3已取消
- const { status } = this.detail || {}
-
- if (status == '0') {
- return '待预约'
- }
-
- if (status == '1') {
- return '预约成功'
- }
-
- if (status == '2') {
- return '已完成'
- }
-
- if (status == '3') {
- return '已取消'
- }
-
- return ''
- },
- addressDesc() {
- const { sendAddress, sendAddressDetail } = this.detail || {}
-
- return [sendAddress, sendAddressDetail].filter(val => val).join('')
- },
- timeDesc() {
- const { subscribeDate, subscribeTime } = this.detail || {}
-
- if (!subscribeTime) {
- return '--'
- }
-
- const timeRange = JSON.parse(subscribeTime).join('~')
-
- return `${subscribeDate} ${timeRange}`
- },
- hospitalDesc() {
- const { hospitalId } = this.detail || {}
-
- if (!hospitalId) {
- return '--'
- }
-
- return this.hospitalOptions?.find?.(item => item.id == hospitalId)?.name || '--'
- },
- },
- methods: {
- async getData() {
- try {
- this.detail = await this.$fetch('getSubscribeDetail', { id: this.id })
-
- const { status, subscribeType } = this.detail
-
- // status: 1待检测 & subscribeType: 1上门,2到店
- if (status == '1' && ['1', '2'].includes(subscribeType)) {
- this.$refs.checkupServicePopup.open()
- }
- } catch (err) {
-
- }
-
- uni.stopPullDownRefresh()
-
- },
- async fetchHospitalOptions() {
- try {
- this.hospitalOptions = await this.$fetch('getSubscribeHospital', { productId: this.detail.productId })
- } catch (err) {
-
- }
- },
- openTrackingNoPopup() {
- this.$refs.checkupTrackingNoPopup.open(this.id)
- },
- onBook() {
- this.$utils.redirectTo(`/pages_order/checkup/checkupBook/apply?id=${this.detail.id}&type=${this.detail.type}`)
- },
- onEdit() {
- this.$utils.redirectTo(`/pages_order/checkup/checkupBook/apply?id=${this.detail.id}&type=${this.detail.type}`)
- },
- async onCancel() {
-
- try {
- await this.$fetch('cancelSubscribe', { id: this.detail.id })
-
- uni.showToast({
- title: '取消成功',
- });
-
- // setTimeout(() => {
- // this.$utils.navigateBack()
- // }, 800)
-
- this.getData()
- } catch (err) {
-
- }
- },
- jumpToReportDetail() {
- this.$utils.navigateTo(`/pages_order/checkup/checkupReport/index?id=${this.detail.id}`)
- },
- },
- }
- </script>
-
- <style scoped lang="scss">
- @import './style.scss';
-
- .status {
- margin-bottom: 40rpx;
- row-gap: 4rpx;
- width: 100%;
- padding: 24rpx 0;
- box-sizing: border-box;
- font-family: PingFang SC;
- font-weight: 400;
- font-size: 28rpx;
- line-height: 1.4;
- color: #252545;
- background: #FFFFFF;
- border-radius: 24rpx;
-
- .icon {
- width: 84rpx;
- height: auto;
- }
- }
-
- .row {
- &-content {
- text-align: right;
- font-size: 28rpx;
- color: #393939;
-
- &.highlight {
- font-weight: 500;
- color: #7451DE;
- }
- }
- }
-
- .bottom {
- // align-items: flex-start;
- column-gap: 32rpx;
-
- .btn {
- width: auto;
- flex: 1;
-
- &-plain {
- padding: 14rpx 0;
- color: #252545;
- background: transparent;
- border: 2rpx solid #252545;
- }
-
- &-service {
- flex: none;
- row-gap: 4rpx;
- font-family: PingFang SC;
- font-weight: 400;
- font-size: 22rpx;
- line-height: 1.1;
- color: #999999;
- background: transparent;
- border: none;
-
- &-icon {
- width: 52rpx;
- height: auto;
- }
- }
- }
- }
- </style>
|