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.

925 lines
24 KiB

<template>
<view class="page">
<image class="bkg" mode="aspectFill" src="~@/package_sub/static/AddOrder/bkg.png"></image>
<view class="container">
<view class="step">
<view class="step-item"
v-for="(i, index) in stepList"
:class="{ 'is-active': currentStep === index }"
:key="index">
<view class="step-item__dot">
<u-icon v-show="currentStep === index" name="checkbox-mark" color="#fff" size="16"></u-icon>
</view>
<view class="step-item__text">{{ i.name }}</view>
</view>
</view>
<view v-if="currentStep === 0">
<view class="switch-service">
<view class="switch-service__icon">
<u-icon name="integral" size="30"></u-icon>
</view>
<view class="switch-service__name">
专享半天陪诊
</view>
<view class="switch-service__btn" @click="isShowService = true">
<image src="~@/static/switch.png" mode="aspectFit"></image>
<text>更换服务</text>
</view>
</view>
<u-form :model="form" ref="uForm" :label-width="178" :label-style="{ 'font-weight': '500','font-size': '24rpx' }">
<view class="form-card form-card-1">
<u-form-item label="就诊城市">
<u-input type="select" placeholder="请选择就诊城市" v-model="form.name" :select-open="isShowCity" @click="isShowCity = true"/>
</u-form-item>
<u-form-item label="就诊医院">
<u-input v-model="form.name" placeholder="请输入就诊医院" />
</u-form-item>
<u-form-item label="就诊时间">
<u-input type="select" v-model="form.name" :select-open="isShowTime" @click="isShowTime = true"/>
</u-form-item>
<u-form-item label="就诊人">
<u-input v-model="form.name" />
</u-form-item>
<u-form-item label="是否可以自理">
<u-radio-group v-model="form.name" slot="right" active-color="#c20d12">
<u-radio :name="1">是</u-radio>
<u-radio :name="0">否</u-radio>
</u-radio-group>
</u-form-item>
<u-form-item label="预约人">
<u-input v-model="form.name" placeholder="请填写预约人" />
</u-form-item>
<u-form-item label="预约人电话">
<u-input v-model="form.name" placeholder="请填写预约人电话" />
</u-form-item>
<u-form-item label="选择陪诊师性别" :border-bottom="false">
<u-radio-group v-model="form.name" slot="right" active-color="#c20d12">
<u-radio name="男">男</u-radio>
<u-radio name="女">女</u-radio>
<u-radio name="任意">任意</u-radio>
</u-radio-group>
</u-form-item>
</view>
<view class="form-card form-card-2">
<view class="title">
<view class="title__left">
<text>上传资料</text>
<text>(就诊卡、病例等)</text>
</view>
<view class="title__right">
点击查看示例
</view>
</view>
<u-upload :action="action" :file-list="fileList" ></u-upload>
</view>
<view class="form-card form-card-3">
<view class="title">
其他服务需求
</view>
<u-form-item :label-width="0" :border-bottom="false">
<u-input border
:custom-style="{ 'letter-spacing': '2rpx' }"
border-color="#dad9d9"
placeholder="请简单描述您要就诊的科室及就诊内容(内容加密保护)"
v-model="form.name"
type="textarea"></u-input>
</u-form-item>
</view>
</u-form>
</view>
<view v-if="currentStep === 3">
<view class="switch-service">
<view class="switch-service__icon">
<u-icon name="integral" size="30"></u-icon>
</view>
<view class="switch-service__name">
<view>医康养 就医省心</view>
<view style="font-size: 24rpx;color: #999999;">期待下次为您服务</view>
</view>
<view class="switch-service__btn" style="font-size: 24rpx;color: #999999;">
订单已完成
</view>
</view>
<view class="desc-card">
<view class="desc-card__title">
预约信息
</view>
<view class="desc-card__content">
<view class="desc-card__content--title">
就诊城市
</view>
<view class="desc-card__content--value">
苏州
</view>
<br>
<view class="desc-card__content--title">
就诊医院
</view>
<view class="desc-card__content--value">
苏打附属
</view>
<br>
<view class="desc-card__content--title">
就诊时间
</view>
<view class="desc-card__content--value">
2024-11-22
</view>
<br>
<view class="desc-card__content--title">
预约人
</view>
<view class="desc-card__content--value">
xxx
</view>
<br>
<view class="desc-card__content--title">
预约人电话
</view>
<view class="desc-card__content--value">
18888888888
</view>
<br>
<view class="desc-card__content--title">
陪诊师性别
</view>
<view class="desc-card__content--value">
都可以
</view>
<br>
<view class="desc-card__content--title">
服务需求
</view>
<view class="desc-card__content--value">
</view>
</view>
</view>
<view class="desc-card">
<view class="desc-card__title">
就诊人信息
</view>
<view class="desc-card__content">
<view class="desc-card__content--title">
姓名
</view>
<view class="desc-card__content--value">
aa
</view>
<br>
<view class="desc-card__content--title">
性别
</view>
<view class="desc-card__content--value">
</view>
<br>
<view class="desc-card__content--title">
年龄
</view>
<view class="desc-card__content--value">
55岁
</view>
<br>
<view class="desc-card__content--title">
手机号
</view>
<view class="desc-card__content--value">
15555555555
</view>
<br>
<view class="desc-card__content--title">
行动能力
</view>
<view class="desc-card__content--value">
无障碍
</view>
</view>
</view>
<view class="desc-card">
<view class="desc-card__title">
订单信息
</view>
<view class="desc-card__content">
<view class="desc-card__content--title">
服务内容
</view>
<view class="desc-card__content--value">
专享半天陪诊
</view>
<br>
<view class="desc-card__content--title">
服务标价
</view>
<view class="desc-card__content--value">
¥ 288
</view>
<br>
<view class="desc-card__content--title">
订单金额
</view>
<view class="desc-card__content--value">
¥ 288
</view>
<br>
<view class="desc-card__content--title">
订单编号
</view>
<view class="desc-card__content--value">
PZ2024111855448048
</view>
<br>
<view class="desc-card__content--title">
下单日期
</view>
<view class="desc-card__content--value">
2024-11-18 17:48:47
</view>
</view>
</view>
</view>
</view>
<view class="bottom-bar">
<view class="price">
<text>实付:</text>
<text>¥ 600.00</text>
</view>
<u-button shape="circle" ripple :custom-style="payBtnStyle" @click="pay">立即支付</u-button>
</view>
<u-popup v-model="isShowService" mode="bottom" safe-area-inset-bottom closeable :border-radius="10" :height="800">
<view class="service-list">
<view class="service-list-item" v-for="i in 10" :key="i">
<view class="service-list-item__icon">
<u-icon name="integral" size="30"></u-icon>
</view>
<view class="service-list-item__name">
专享半天陪诊
</view>
<view class="service-list-item__price">
¥600
</view>
</view>
</view>
</u-popup>
<u-select v-model="isShowCity" :list="cities"></u-select>
<u-picker v-model="isShowTime" mode="time"></u-picker>
<u-popup v-model="isShowPayPopup"
class="pay-popup"
mode="bottom"
closeable
:z-index="10073"
:close-icon-size="40"
close-icon="close-circle"
:border-radius="20"
:height="800">
<view class="pay-popup-container">
<view class="service">
<view class="service__icon">
<u-icon name="integral" size="40"></u-icon>
</view>
<view class="service__text">
<view class="service__text--price">¥600.00</view>
<view class="service__text--name">专享半天陪诊</view>
</view>
</view>
<view class="row">
<view class="row__title">
平台保障
</view>
<view class="row__content d-flex ai-center cards">
<view class="cards__icon d-flex jc-center ai-center">
<u-icon name="integral" size="30"></u-icon>
</view>
<view style="padding-left: 18rpx;" class="flex-1">
<view class="d-flex ai-center">
<view style="font-size: 28rpx;">半天陪诊·3次卡</view>
<view class="d-flex ai-center" style="margin-left: auto;">
<text style="font-size: 24rpx;padding-right: 22rpx;font-weight: bold;">¥ 600</text>
<u-checkbox :value="false" shape="circle" active-color="#c20d12" />
</view>
</view>
<view class="d-flex ai-center">
<view style="color: #999;font-size: 24rpx;">本次预约可直接抵扣1次</view>
<view style="font-size: 16rpx;color: #999;font-weight: 500;margin-left: auto;">低至¥246/次</view>
</view>
</view>
</view>
</view>
<view class="row">
<view class="row__title">
平台保障
</view>
<view class="row__content d-flex jc-center">
<view class="row__content--first">险</view>
<view class="row__content--name">陪诊服务险</view>
<view class="d-flex ai-center" style="margin-left: auto;">
<text style="font-size: 24rpx;padding-right: 22rpx;font-weight: bold;">¥ 600</text>
<u-checkbox :value="false" shape="circle" active-color="#c20d12" />
</view>
</view>
</view>
<view class="row">
<view class="row__title">
本单优惠
</view>
<view class="row__content d-flex jc-center">
<view class="row__content--first" style="background: #c31014;">券</view>
<view class="row__content--name" style="color: #999;">请选择优惠券</view>
<view style="margin-left: auto;">
<u-icon name="arrow-down" :size="24"></u-icon>
</view>
</view>
</view>
<view class="row use-card">
新人优惠券 20 服务满1元可用
</view>
<view class="row">
<view class="row__content d-flex jc-center">
<view class="row__content--first" style="background: #c31014;"></view>
<view class="row__content--name">无忧赠险保障</view>
<view style="margin-left: auto;color: #c31014;">
-25
</view>
</view>
</view>
<view class="is-auth">
<u-checkbox v-model="isAuth" shape="circle" active-color="#c20d12">
<text style="padding-left: 10rpx;">我已认真阅读预约相关</text>
<text style="color: #c20d12;" @click.stop.prevent>《服务条款同意书》</text>
</u-checkbox>
</view>
</view>
</u-popup>
<u-top-tips :z-index="10080" ref="uTips"></u-top-tips>
</view>
</template>
<script>
export default {
data() {
return {
payBtnStyle: {
'background-image': 'linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%)',
'font-weight': '500',
'font-size': '28rpx',
'color': '#fff',
'width': '288rpx',
'margin-right': '25rpx'
},
// service
isShowService: false,
services: [
{
value: '1',
label: '江'
},
{
value: '2',
label: '湖'
}
],
//
// step
currentStep: 0,
stepList: [
{
name: '填写预约'
},
{
name: '在线支付'
},
{
name: '专人陪诊'
},
{
name: '服务完成'
}
],
//
// form
isShowCity: false,
cities: [
{
value: '1',
label: '江'
},
{
value: '2',
label: '湖'
}
],
isShowTime: false,
form: {
name: ''
},
rules: {},
fileList: [],
action: '',
isAuth: false,
//
// pay popup
isShowPayPopup: false,
};
},
methods: {
pay () {
if (!this.isShowPayPopup) {
this.isShowPayPopup = true
return
}
if (!this.isAuth && this.currentStep === 0) {
this.$refs.uTips.show({
title: '请认真阅读《服务条款同意书》',
type: 'warning',
duration: '2000'
})
return
}
this.isShowPayPopup = false
this.currentStep = 3
}
},
onReady() {
this.$refs.uForm.setRules(this.rules);
}
}
</script>
<style lang="scss">
.d-flex {
display: flex;
}
.jc-center {
justify-content: center;
}
.ai-center {
align-items: center;
}
.flex-1 {
flex: 1;
}
.pay-popup > .u-drawer {
bottom: calc(constant(safe-area-inset-bottom) + 80rpx + 28rpx + 27rpx) !important;
bottom: calc(env(safe-area-inset-bottom) + 80rpx + 28rpx + 27rpx) !important;
}
.pay-popup > .u-drawer .u-drawer-bottom {
overflow: initial !important;
background: #f4efee;
&::before {
font: normal normal normal 14px / 1 uicon-iconfont;
content: '\e65f 陪诊有保障,就医更安心';
font-size: 24rpx;
line-height: 70rpx;
color: #ffffff;
font-weight: 500;
box-sizing: border-box;
background: linear-gradient(90deg, #c10d12 0%, #c10d12 4%, #e16265 99%, #e16265 100%);
position: absolute;
width: 100%;
height: 100rpx;
padding-left: 70rpx;
border-radius: 20rpx 20rpx 0 0;
top: -70rpx;
left: 0;
}
}
.pay-popup > .u-drawer .u-mask {
bottom: calc(constant(safe-area-inset-bottom) + 80rpx + 28rpx) !important;
bottom: calc(env(safe-area-inset-bottom) + 80rpx + 28rpx) !important;
}
.pay-popup > .u-drawer .u-drawer__scroll-view {
position: relative;
background: #f4efee;
}
.pay-popup {
&-container {
padding-bottom: 20rpx;
.service {
border-radius: 10rpx;
padding: 28rpx 39rpx;
margin: 32rpx 25rpx 0;
display: flex;
align-items: center;
&__icon {
display: flex;
justify-content: center;
align-items: center;
background: #f1e7d9;
padding: 20rpx;
width: 124rpx;
height: 122rpx;
}
&__text {
padding-left: 12rpx;
font-weight: 500;
&--price {
font-size: 40rpx;
color: #c20d12;
font-weight: 500;
}
&--name {
font-size: 24rpx;
color: #333333;
font-weight: 500;
}
}
}
.row {
margin: 30rpx 46rpx 0;
&__title {
padding-left: 22rpx;
font-size: 28rpx;
line-height: 40rpx;
color: #000000;
font-weight: 500;
}
&__content {
margin-top: 26rpx;
padding: 22rpx;
background: #fff;
border-radius: 5rpx;
&--first {
width: 51rpx;
height: 47rpx;
border-radius: 15rpx;
line-height: 47rpx;
text-align: center;
font-size: 30rpx;
color: #fff;
background-color: #e1a664;
}
&--name {
font-size: 28rpx;
line-height: 47rpx;
color: #000000;
font-weight: 500;
padding-left: 16rpx;
}
}
.u-checkbox__label {
margin: 0;
}
}
.cards {
&__icon {
width: 90rpx;
height: 83rpx;
background: #f3e7d8;
border-radius: 10rpx;
}
}
.use-card {
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 570rpx;
margin: 30rpx auto 0;
height: 66rpx;
line-height: 66rpx;
font-size: 28rpx;
color: #e1a664;
font-weight: 500;
background: #f1e7d9;
}
.is-auth {
padding-left: 56rpx;
margin-top: 22rpx;
}
}
}
</style>
<style lang="scss" scoped>
.page {
position: relative;
.bkg {
width: 100vw;
z-index: 0;
height: 550rpx;
position: absolute;
top: 0;
left: 0;
}
.container {
z-index: 1;
position: relative;
padding-bottom: calc(27rpx * 2 + 80rpx + 20rpx);
padding-bottom: calc(constant(safe-area-inset-bottom) + 27rpx * 2 + 80rpx + 20rpx);
padding-bottom: calc(env(safe-area-inset-bottom) + 27rpx * 2 + 80rpx + 20rpx);
.step {
display: flex;
justify-content: space-evenly;
padding: 64rpx 37rpx 0;
position: relative;
&::before {
content: '';
height: 12rpx;
background: #fff;
border-radius: 6rpx;
position: absolute;
left: 37rpx;
right: 37rpx;
top: calc(26rpx / 2 + 64rpx - 6rpx);
}
&-item {
&__dot {
width: 30rpx;
height: 30rpx;
border-radius: 100%;
filter: drop-shadow(0 0 10rpx rgba(211,32,2,0.3));
background-color: #9b9c9c;
border: 2rpx solid #ffffff;
margin: auto;
display: flex;
align-items: center;
justify-content: center;
}
&__text {
font-size: 24rpx;
color: #333333;
font-weight: 500;
margin-top: 30rpx;
}
}
.is-active {
.step-item__dot {
filter: drop-shadow(4.384px 8.988px 10px rgba(211,32,2,0.57));
background-image: linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%);
transform: scale(2, 2);
}
.step-item__text {
color: #c20d12;
}
}
}
.switch-service {
border-radius: 10rpx;
background-color: #ffffff;
margin: 60rpx 25rpx 0;
padding: 28rpx 39rpx;
display: flex;
align-items: center;
&__icon {
display: flex;
justify-content: center;
align-items: center;
background: #f9f5e9;
padding: 20rpx;
}
&__name {
padding-left: 14rpx;
font-size: 28rpx;
color: #333333;
font-weight: 500;
}
&__btn {
display: flex;
align-items: center;
margin-left: auto;
& > image {
width: 31rpx;
height: 27rpx;
}
& > text {
font-size: 24rpx;
color: #999999;
padding-left: 20rpx;
}
}
}
.form-card {
border-radius: 10rpx;
background-color: #ffffff;
padding: 36rpx 38rpx;
margin: 0 25rpx;
&-1 {
margin-top: 44rpx;
}
&-2 {
margin-top: 24rpx;
.title {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 24rpx;
margin-bottom: 26rpx;
&__left text:nth-child(1) {
color: #333;
}
&__left text:nth-child(2) {
color: #999;
}
&__right {
color: #c20d12;
}
}
::v-deep .u-add-wrap {
background: #fff;
border: 2rpx dashed #999999;
}
}
&-3 {
margin-top: 20rpx;
.title {
font-size: 24rpx;
color: #333333;
margin-bottom: 22rpx;
}
}
}
.is-auth {
padding-left: 56rpx;
margin-top: 22rpx;
}
::v-deep .form-card-1 .u-input__input {
text-align: right;
}
.desc-card {
border-bottom: 2rpx solid #efefef;
padding: 48rpx 70rpx 46rpx;
&__title {
font-size: 28rpx;
color: #000000;
font-weight: bold;
position: relative;
padding-left: 24rpx;
&::before {
content: '';
background: linear-gradient(0deg, #c10d12 0%, #c10d12 6%, #e26165 100%);
border-radius: 4rpx;
width: 6rpx;
position: absolute;
top: 0;
left: 0;
bottom: 0;
}
}
&__content {
line-height: 65rpx;
margin-top: 34rpx;
&--title {
display: inline-block;
width: 240rpx;
padding-right: 64rpx;
font-size: 24rpx;
color: #999999;
font-weight: 500;
}
&--value {
display: inline-block;
font-size: 24rpx;
color: #333333;
font-weight: 500;
}
}
}
}
}
.bottom-bar {
background: #fff;
position: fixed;
padding-top: 27rpx;
padding-bottom: 27rpx;
padding-bottom: calc(constant(safe-area-inset-bottom) + 27rpx);
padding-bottom: calc(env(safe-area-inset-bottom) + 27rpx);
width: 100vw;
left: 0;
bottom: 0;
z-index: 10074;
display: flex;
align-items: center;
justify-content: space-between;
filter: drop-shadow(0 2rpx 6rpx #00000020);
.price {
margin-left: 50rpx;
color: #c20d12;
& > text:nth-child(1) {
font-size: 24rpx;
}
& > text:nth-child(2) {
color: #c20d12;
font-weight: 500;
font-size: 40rpx;
}
}
}
.service-list {
padding-top: 80rpx;
&-item {
border: 2rpx solid #e6e6eb;
border-radius: 10rpx;
background-color: #ffffff;
margin: 0 25rpx;
padding: 28rpx 39rpx;
display: flex;
align-items: center;
&__icon {
display: flex;
justify-content: center;
align-items: center;
background: #f9f5e9;
padding: 20rpx;
}
&__name {
padding-left: 14rpx;
font-size: 28rpx;
color: #333333;
font-weight: 500;
}
&__price {
color: #c20d12;
font-weight: 500;
margin-left: auto;
}
}
&-item + &-item {
margin-top: 20rpx;
}
}
</style>