|
|
- <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">
- <template v-if="orderSuccess">
- <image class="icon" src="@/pages_order/static/checkup/icon-success.png" mode="widthFix"></image>
- </template>
- <template v-else>
- <image class="icon" src="@/pages_order/static/checkup/icon-error.png" mode="widthFix"></image>
- </template>
- <view>{{ statusDesc }}</view>
- </view>
-
- <!-- 自采 -->
- <template v-if="detail.type == 1">
- <view class="card">
- <view class="card-header">自采检测预约信息</view>
- <view class="flex row">
- <view class="row-label">姓名</view>
- <view class="row-content">{{ detail.userName }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">寄送地址</view>
- <view class="row-content">{{ detail.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.type == 2">
- <view class="card">
- <view class="card-header">上门检测预约信息</view>
- <view class="flex row">
- <view class="row-label">姓名</view>
- <view class="row-content">{{ detail.userName }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">体检地址</view>
- <view class="row-content">{{ detail.addressDesc }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">时间</view>
- <view class="row-content highlight">{{ detail.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.type == 3">
- <view class="card">
- <view class="card-header">到店检测预约信息</view>
- <view class="flex row">
- <view class="row-label">姓名</view>
- <view class="row-content">{{ detail.userName }}</view>
- </view>
- <view class="flex row">
- <view class="row-label">时间</view>
- <view class="row-content highlight">{{ detail.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">{{ detail.hospitalDesc }}</view>
- </view>
- </view>
- </template>
-
- </view>
-
- <view class="flex bottom">
- <!-- 自采 -->
- <template v-if="detail.status == 1">
- <button class="btn btn-plain" open-type="contact">客服</button>
- <button class="btn" @click="openTrackingNoPopup">已回寄</button>
- </template>
- <!-- 上门, 到店, 预约失败 -->
- <template v-else-if="[2, 3, 6].includes(detail.status)">
- <button class="btn btn-plain" @click="onCancel">取消</button>
- <button class="btn" @click="onEdit">修改</button>
- </template>
- <!-- 已完成 -->
- <template v-else-if="detail.status == 4">
- <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: [
- { id: '001', label: '湖南省长沙市湘雅第一医院' },
- { id: '002', label: '湖南省长沙市湘雅第二医院' },
- { id: '003', label: '湖南省长沙市湘雅第三医院' },
- { id: '004', label: '湖南省长沙市湘雅第四医院' },
- ]
- }
- },
- onLoad(arg) {
- this.id = arg.id
-
- this.getData()
- },
- computed: {
- orderSuccess() {
- // todo: check status
- return this.detail?.status < 5
- },
- statusDesc() {
- const status = this.detail?.status
-
- if (status < 4) {
- return '预约成功'
- }
-
- if (status == 4) {
- return '已完成'
- }
-
- if (status == 6) {
- return '预约失败'
- }
-
- return ''
- },
- },
- methods: {
- getData() {
- // todo: fetch by id
-
- let detail = {
- id: '003',
- url: '',
- title: '孕产妇体检套餐',
- userName: '周小艺',
- phone: '15558661691',
- amount: 688,
- area: ['海南省', '海口市', '秀英区'],
- address: '秀英街道5单元183室',
- hospital: '001',
- createTime: '2025-04-28 08:14',
- appointmentDate: '2025-04-28',
- appointmentTime: ['08:00', '09:00'],
- type: 2,
- status: 4,
- }
-
- detail.addressDesc = this.getAddressDesc(detail)
- detail.timeDesc = this.getTimeDesc(detail)
- detail.hospitalDesc = this.getHospitalDesc(detail)
-
- this.detail = detail
-
- if ([2, 3].includes(this.detail.status)) {
- this.$refs.checkupServicePopup.open()
- }
- },
- getAddressDesc(data) {
- if (!data) {
- return ''
- }
- console.log('detail', data)
- const { area, address } = data
- console.log('area', area, 'address', address)
-
- return `${(area || []).join('')}${address}`
- },
- getTimeDesc(data) {
- if (!data) {
- return ''
- }
- const { appointmentDate, appointmentTime } = data
-
- return `${appointmentDate} ${(appointmentTime || []).join('~')}`
- },
- getHospitalDesc(data) {
- const { hospital } = data
-
- return this.hospitalOptions.find(item => item.id == hospital)?.label
- },
- openTrackingNoPopup() {
- this.$refs.checkupTrackingNoPopup.open(this.id)
- },
- onEdit() {
- this.$utils.navigateTo(`/pages_order/checkup/checkupBook/apply?id=${this.detail.id}&type=${this.detail.type}`)
- },
- onCancel() {
- // todo: fetch
-
- uni.showToast({
- title: '取消成功',
- });
-
- setTimeout(() => {
- this.$utils.navigateBack()
- }, 800)
- },
- 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 {
- flex: 1;
-
- &-plain {
- padding: 14rpx 0;
- color: #252545;
- background: transparent;
- border: 2rpx solid #252545;
- }
- }
- }
- </style>
|