xinelu-applet-ui/pagesB/confirmation/confirmation.vue
2024-06-25 18:25:50 +08:00

484 lines
15 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="app">
<view class="item">
<view class="text">
现住址所在区
</view>
<view class="input" @tap='showPicker'>
<view class="inputtext"
:style="address=='请选择所属地区'?'font-size:22rpx;font-weight: 400;color: #8E8E8E !important;':''">
{{address}}
</view>
<image :src="require('@/pagesC/images/huijiantou.png')" mode=""></image>
</view>
<view class="text">
患者姓名
</view>
<view class="input">
<input v-model="formdata.patientName" class="uinput noimageuinput" placeholder="请输入患者姓名" type="text"
placeholder-class="phsy" />
</view>
<view class="text">
患者身份证号
</view>
<view class="input">
<input v-model="formdata.cardNo" class="uinput noimageuinput" placeholder="请输入患者身份证号" type="text"
placeholder-class="phsy" />
</view>
<view class="text">
患者联系电话
</view>
<view class="input">
<input v-model="formdata.phone" class="uinput noimageuinput" placeholder="请输入患者联系电话" type="text"
placeholder-class="phsy" />
</view>
<view class="text">
预约时间
<text>请选择时间</text>
</view>
<tabs :list="appointmentTimeList" :current="timecurrent" @change="timechange" active-color="#26A888">
</tabs>
<view class="timeyear">
<view class="toptext">
<view :class="Soonerorlater=='morning'?'Soonerorlaterclass':'Soonerorlater'"
@tap="tapSoonerorlater('morning')">
上午
</view>
<view class="">
</view>
<view :class="Soonerorlater=='after'?'Soonerorlaterclass':'Soonerorlater'"
@tap="tapSoonerorlater('after')">
下午
</view>
</view>
<view class="bottomtext">
<view class="items" v-if="Soonerorlater=='morning'">
<view @tap='taptime(item,index)'
v-for="(item ,index) in appointmentTimeList[timecurrent].morningList"
:class="timeindex==index?'timeitemtap':'timeitem'"
:style="item.status?'':'background: #FFFFFF;color: #AAABB0;'">
<view class="itemstext">
{{item.scheduleTimeSlot}}
</view>
<view class="itemstexttwo">
{{item.status?'(可预约)':'(不可预约)'}}
</view>
</view>
</view>
<view class="items" v-if="Soonerorlater=='after'">
<view @tap='taptime(item,index)'
v-for="(item ,index) in appointmentTimeList[timecurrent].afternoonList"
:class="timeindex==index?'timeitemtap':'timeitem'"
:style="item.status?'':'background: #FFFFFF;color: #AAABB0;'">
<view class="itemstext">
{{item.scheduleTimeSlot}}
</view>
<view class="itemstexttwo">
{{item.status?'(可预约)':'(不可预约)'}}
</view>
</view>
</view>
</view>
</view>
<view class="text">
问题简述
</view>
<view class="input">
<input v-model="formdata.problemDescription" class="uinput noimageuinput" placeholder="不多于五个字"
type="text" placeholder-class="phsy" />
</view>
<view class="text">
患者个体情况说明
</view>
<view class="input" style="height: 200rpx;overflow-Y: scroll;">
<u-input v-model="formdata.situationDescription" class="uinput noimageuinput" placeholder=" "
type="textarea" :maxlength="100" />
</view>
<view class="text">
问题描述
</view>
<view class="input" style="height: 200rpx;overflow-Y: scroll;">
<u-input v-model="formdata.problemStatement" class="uinput noimageuinput" placeholder=" "
type="textarea" :maxlength="500" />
</view>
<view class="text">
既往疾病史
</view>
<view class="input" style="height: 200rpx;overflow-Y: scroll;">
<u-input v-model="formdata.medicalRecord" class="uinput noimageuinput" placeholder=" " type="textarea"
:maxlength="100" />
</view>
<view class="text">
上传检查单/患处照片
<text>最多8张</text>
</view>
<u-upload ref="uUpload" :max-count='9' :action="uoloadaction" :auto-upload="false" upload-text=' '
@on-choose-complete='onchoosecomplete' @on-success='onsuccess' @on-uploaded='onuploaded'></u-upload>
<view class="textarea">
<view class="title">
温馨提示:
</view>
<view class="">
1.下单后24h内我们会和您确认具体时间点
</view>
<view class="">
2.请提前准备好健康资料,以备专家参考
</view>
<view class="">
3.请提前下载“腾讯会议”APP
</view>
</view>
</view>
<view class="btns">
<view class="btnleft">
¥<text>{{formdata.price}}</text>
</view>
<view class="btnright" @tap='updata'>
保存
</view>
</view>
<view class="">
<m-city style='z-index: 10076;' :provinceData="list" headTitle="请选择所属地区" ref="cityPicker"
@funcValue="getpickerParentValue" pickerSize="4">
</m-city>
</view>
<!-- 弹框 -->
<u-popup v-model="buyshow" mode="bottom" length="45%" border-radius="30" :closeable='true'>
<view class="payment">
请选择支付方式
</view>
<view class="chat">
<image :src="require('@/pagesC/images/chat.png')" mode=""></image>
<span>微信支付</span>
</view>
<view class="submits" @tap='buy'>
确认支付¥{{formdata.price}}
</view>
</u-popup>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
getSubordinateRegions,
} from '@/api/pagesB/modifyAddress/modifyAddress.js';
import gkcity from "../../components/m-city/m-city.vue";
import baseurl from '@/api/baseurl.js'
import {
consultationInfo
} from '@/api/pagesB/createnewconsultation/createnewconsultation.js'
import {
getListByDoctor,
addHealthConsultationOrder,
appletGoodsOrderPay
} from '@/api/pagesB/confirmation/index.js'
import tabs from '../utabs/u-tabs.vue'
import {
pushMeg
} from '@/api/pagesB/ExpertlookOrder/index.js'
export default {
components: {
"m-city": gkcity,
tabs
},
data() {
return {
orderNo: '',
patientId: '',
buyshow: false,
uoloadaction: '', // 非真实地址
list: [],
addresslength: null,
imglistlength: null,
address: '请选择所属地区', //页面所属区域
Soonerorlater: 'morning',
timecurrent: 0, //时间下标
timeindex: 0,
appointmentTimeList: [],
timer: null,
formdata: {
address: null,
patientId: null,
patientName: null,
cardNo: null,
phone: null,
address: null,
doctorId: null,
doctorName: null,
schedulePlanDetailId: null,
consultationType: 'VIDEO_CONSULTATION',
problemDescription: null,
situationDescription: null,
problemStatement: null,
medicalRecord: null,
fileUrls: [],
appointmentDate: null,
appointmentStartTime: null,
appointmentEndTime: null,
orderChannel: "WECHAT_APPLET",
},
updatalist: {
consultationInfoId: '',
totalPrice: null,
receiver: null,
hospitalPersonId: null,
hospitalPersonName: '',
orderChannel: "WECHAT_APPLET",
patientId: null,
phone: null,
healthAppointDate: null,
appointmentStartTime: null,
appointmentEndTime: null,
// "healthConsultationContent": '',
},
id: '',
};
},
onLoad(options) {
let userinfo = uni.getStorageSync('userinfo');
this.formdata.patientId = userinfo.id
this.formdata.patientName = userinfo.patientName
this.formdata.cardNo = userinfo.cardNo
this.formdata.phone = userinfo.phone
this.formdata.doctorName = options.doctorName
this.formdata.doctorId = options.doctorId
this.formdata.price = options.price
this.uoloadaction = baseurl + '/nurseApplet/consultationInfo/uploadConsultationFile'
this.areaInfo();
this.getListByDoctorinfo();
},
onShow() {},
methods: {
//切换上下午
tapSoonerorlater(item) {
this.Soonerorlater = item
this.timeindex = 0
if (item == 'morning') {
this.formdata.appointmentStartTime = this.appointmentTimeList[this.timecurrent].morningList[0]
.starttime
if (this.appointmentTimeList[this.timecurrent].morningList[0].status == true) {
this.formdata.schedulePlanDetailId = this.appointmentTimeList[this.timecurrent].morningList[0]
.schedulePlanDetailId
} else {
this.formdata.schedulePlanDetailId = ''
}
} else if (item == 'after') {
this.formdata.appointmentEndTime = this.appointmentTimeList[this.timecurrent].morningList[0]
.endtime
if (this.appointmentTimeList[this.timecurrent].morningList[0].status == true) {
this.formdata.schedulePlanDetailId = this.appointmentTimeList[this.timecurrent].afternoonList[0]
.schedulePlanDetailId
} else {
this.formdata.schedulePlanDetailId = ''
}
}
},
//选择时间
taptime(item, index) {
this.formdata.appointmentStartTime = item.starttime
this.formdata.appointmentEndTime = item.endtime
this.formdata.schedulePlanDetailId = item.schedulePlanDetailId
this.timeindex = index
},
timechange(index) {
this.formdata.appointmentDate = this.appointmentTimeList[index].scheduleDate
if (this.timecurrent != index) {
this.timecurrent = index
this.timeindex = 0
this.formdata.appointmentStartTime = this.appointmentTimeList[this.timecurrent].morningList[0]
.starttime
this.formdata.appointmentEndTime = this.appointmentTimeList[this.timecurrent].morningList[0]
.endtime
if (this.appointmentTimeList[this.timecurrent].morningList[0].status == true) {
this.formdata.schedulePlanDetailId = this.appointmentTimeList[this.timecurrent].morningList[0]
.schedulePlanDetailId
} else {
this.formdata.schedulePlanDetailId = ''
}
}
},
updata() {
if (this.imglistlength > 0) {
this.$refs.uUpload.upload()
} else {
this.info();
}
},
onchoosecomplete(lists, name) {
this.imglistlength = lists.length
},
onsuccess(data, index, lists, name) {
if (data.code == 200) {
this.formdata.fileUrls.push(data.fileUrl)
}
},
onuploaded() {
this.info();
},
// 支付
buy() {
var that = this
that.updatalist.hospitalPersonId = that.formdata.doctorId
that.updatalist.hospitalPersonName = that.formdata.doctorName
that.updatalist.totalPrice = that.formdata.price
that.updatalist.receiver = that.formdata.patientName
that.updatalist.patientId = that.formdata.patientId
that.updatalist.phone = that.formdata.phone
that.updatalist.healthAppointDate = that.formdata.appointmentDate
that.updatalist.appointmentStartTime = that.formdata.appointmentStartTime
that.updatalist.appointmentEndTime = that.formdata.appointmentEndTime
addHealthConsultationOrder(that.updatalist).then(res => {
res.data.payType = "WECHAT_PAY"
res.data.paymentPrice = res.data.totalPrice
res.data.openid = uni.getStorageSync('openid');
that.id = res.data.id
that.orderNo = res.data.orderNo
that.patientId = res.data.patientId
appletGoodsOrderPay(res.data).then(response => {
if (response.code == 200) {
uni.requestPayment({
timeStamp: response.data.timeStamp,
nonceStr: response.data.nonceStr,
package: response.data.prepayId,
signType: response.data.signType,
paySign: response.data.paySign,
success: function(res) {
pushMeg({
orderId: that.orderNo,
patientId: that.patientId
}).then(respp => {
that.$refs.uToast.show({
title: '支付成功',
type: 'success',
duration: 1500,
})
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.redirectTo({
url: '/pagesB/ExpertlookOrder/ExpertlookOrder'
})
}, 1500)
})
},
fail: function(err) {
that.$refs.uToast.show({
title: '取消支付',
type: 'error',
duration: 1500,
})
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.redirectTo({
url: `/pagesB/orderDetails/orderDetails?goodsOrderId=${that.id}&delta=${2}`
})
}, 1500)
}
});
} else {
that.$refs.uToast.show({
title: response.msg,
type: 'error',
duration: 2000
})
}
})
})
},
// 保存
info() {
consultationInfo(this.formdata).then(res => {
if (res.code == 200) {
this.buyshow = true
this.updatalist.consultationInfoId = res.data.id
} else if (res.code == 500) {
this.$refs.uToast.show({
title: res.msg,
type: 'error',
duration: 1500,
})
}
})
},
getListByDoctorinfo() {
getListByDoctor(this.formdata.doctorId).then(res => {
res.data.forEach(e => {
e.dates = e.scheduleDate.slice(5, 10)
e.name = e.week
e.morningList.length > 0 ? e.morningList.forEach(el => {
el.starttime = el.scheduleTimeSlot.split('~')[0]
el.endtime = el.scheduleTimeSlot.split('~')[1]
}) : ''
e.afternoonList.length > 0 ? e.afternoonList.forEach(el => {
el.starttime = el.scheduleTimeSlot.split('~')[0]
el.endtime = el.scheduleTimeSlot.split('~')[1]
}) : ''
})
this.formdata.appointmentDate = res.data[0].scheduleDate
res.data[0]?.morningList[0]?.starttime ? this.formdata.appointmentStartTime = res.data[0]
.morningList[0].starttime : ''
res.data[0]?.morningList[0]?.endtime ? this.formdata.appointmentEndTime = res.data[0]
.morningList[0].endtime : ''
if (res.data[0]?.morningList[0]?.status == true) {
res.data[0]?.morningList[0]?.scheduleDetailId ? this.formdata.scheduleDetailId = res.data[
0]
.morningList[0].scheduleDetailId : ''
} else {
this.formdata.scheduleDetailId = ''
}
this.appointmentTimeList = res.data
console.log(this.appointmentTimeList, '0000')
})
},
// 显示三级地址联动
showPicker() {
this.$refs.cityPicker.show();
},
//区街道
areaInfo() {
getSubordinateRegions().then(res => {
this.list = res.data;
})
},
// 三级地址联动回调
getpickerParentValue(e) {
e = e.filter(ele => ele.localName != '暂不选择')
e = e.filter(ele => ele.localName != '暂无需选择')
this.addresslength = e
this.formdata.address = ''
this.address = ''
if (e && e.length >= 1) {
e.forEach(el => {
this.formdata.address = this.formdata.address + el.localName
this.address = this.address + el.localName
})
} else {
this.formdata.address = ''
this.address = '请选择所属地区'
}
},
}
}
</script>
<style lang="scss">
@import './confirmation.scss';
</style>