xinelu-applet-ui/pagesB/ServiceDetails/ServiceDetails.vue
2023-09-26 17:12:59 +08:00

378 lines
12 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" v-if="list">
<view class="time" style="" v-if="list.orderStatus=='WAIT_PAY'">
剩余付款时间:
<u-count-down style='' :timestamp="timestamp">
</u-count-down>
</view>
<view class="OrderStatus" v-if="list.orderStatus=='REFUNDED'||list.orderStatus=='CANCEL'">
订单已关闭
</view>
<view class="content">
<view class="name">
服务商家
</view>
<view class="details">
<view class="detailslist">
<image :src="baseurl+list.stationPictureUrl" mode=""></image>
<view class="model">
<view class="top">
<view v-if="list.nurseStationName">{{list.nurseStationName}}</view>
</view>
<view class="bottom">
<view v-if="list.address">{{list.address}}</view>
</view>
<view class="callme" @tap="gophone()" v-if='list.stationPhone'>
<u-icon class='icon' name="phone-fill" color="#ffffff" size="30"></u-icon>
<view class="text">联系我们</view>
</view>
</view>
</view>
</view>
</view>
<view class="content">
<view class="name">
服务项目
</view>
<view class="drug">·{{list.nurseItemName}} </view>
</view>
<view class="content">服务信息
<view class="" v-if="list.orderType=='COMPANION_IN_HOSPITAL'">
<view class="contacts" v-if="list.caregiverName">·姓名:{{list.caregiverName}}</view>
<view class="contacts" v-if="list.caregiverPhone">·电话:{{list.caregiverPhone}}</view>
<view class="contacts" v-if="list.hospitalName">·医院:{{list.hospitalName}}</view>
<view class="contacts" v-if="list.departmentName">·科室:{{list.departmentName}}</view>
<view class="contacts" v-if="list.hospitalBedNumber">·病床号:{{list.hospitalBedNumber}}</view>
<view class="contacts" v-if="list.companionStartDate&&list.companionEndDate">
·时间:{{list.companionStartDate}} - {{list.companionEndDate}}</view>
<view class="contacts" v-if="list.createTime">·下单时间:{{list.createTime}}</view>
<view class="contacts" v-if="list.orderNo">·订单编号:{{list.orderNo}}</view>
</view>
<view class="" v-else>
<view class="contacts" v-if="list.patientName">·姓名:{{list.patientName}}</view>
<view class="contacts" v-if="list.patientPhone">·电话:{{list.patientPhone}}</view>
<view class="contacts" v-if="list.serviceAddress">·地址:{{list.serviceAddress}}</view>
<view class="contacts" v-if="list.serviceDate">·预约时间:{{list.serviceDate}} {{list.serviceStartTime}}
</view>
<view class="contacts" v-if="list.createTime">·下单时间:{{list.createTime}}</view>
<view class="contacts" v-if="list.orderNo">·订单编号:{{list.orderNo}}</view>
</view>
</view>
<view class="Package">套餐信息:
<span v-if="list.orderType!='COMPANION_IN_HOSPITAL'">¥{{list.nurseItemPrice}}</span>
<span v-else>¥{{list.nurseItemPrice}} ✖ {{list.companionDays}}</span>
<view class="detail">
·{{list.nurseItemName}}
</view>
</view>
<view class="Consumablespackage" v-if='list.itemConsumableList.length>0'>耗材包详情:
<span v-if="list.consumableTotalPrice">¥{{list.consumableTotalPrice}}</span>
<span v-else>¥0</span>
<view class="detail" v-for='(item,index) in list.itemConsumableList' :key="index">
·{{item.orderConsumableName}}
<span
style='font-size: 30rpx;'>{{item.orderConsumableCount}}{{item.consumableUnit}}/{{item.orderConsumablePrice}}</span>
</view>
</view>
<view class="remarks" v-if="list.orderType!='COMPANION_IN_HOSPITAL'">
<view>备注</view>
<input v-model='list.remark' :disabled="list.orderStatus=='WAIT_PAY'?false :true">
</view>
<view class="evaluate">
<view class="price">
{{list.totalPrice}}
</view>
<view class="cancelorder" @tap="cancelorderment()"
v-if="list.orderStatus=='PAY'||list.orderStatus=='WAIT_DISPATCH'||list.orderStatus=='NOT_FINISH'">取消订单
</view>
<view class="cancelorder" style="background: #60c5f1;" @tap='rateshowtrue'
v-if="list.orderStatus=='COMPLETE'">立即评价
</view>
<view class="cancelorder" @tap='buy' style="background-color: #26A888;"
v-if="list.orderStatus=='WAIT_PAY'">
去支付
</view>
<view class="cancelorder" style="background: #26A888;" v-if="list.orderStatus=='EVALUATED'"
@tap='lookrate(list)'>查看评价</view>
</view>
<u-popup v-model="rateshow" mode="bottom" length="50%" border-radius="20" :closeable='true' class='masks'>
<view class="title">
综合评价
</view>
<view class="mask">
<u-rate :count="5" v-model="rateval" :size='70' active-color='#F4EA2A'></u-rate>
</view>
<view class="rateitem">
{{rateval==5?'非常满意':''}}
{{rateval==4?'满意':''}}
{{rateval==3?'一般':''}}
{{rateval==2?'差':''}}
{{rateval==1?'非常差':''}}
</view>
<view class="btn" @tap='taprate'>
确认
</view>
<!-- <view class="mask">
<view class="rateitem" @tap="taprate('SATISFIED')">
满意
</view>
<view class="rateitem" @tap="taprate('COMMONLY')">
一般
</view>
<view class="rateitem" @tap="taprate('DISSATISFIED')">
不满意
</view>
</view> -->
</u-popup>
<u-popup v-model="lookrateshow" mode="bottom" length="60%" border-radius="20" :closeable='true' class='masks'>
<image :src="baseurl+rateimgtitle.img" mode=""></image>
<view class="ratetitle">
{{rateimgtitle.title}}
</view>
<view class="mask" style="top: 450rpx;">
<u-rate :count="5" v-model="rateval" :size='70' active-color='#F4EA2A' disabled></u-rate>
</view>
<view class="rateitem" style="top: 580rpx;">
{{rateval==5?'非常满意':''}}
{{rateval==4?'满意':''}}
{{rateval==3?'一般':''}}
{{rateval==2?'差':''}}
{{rateval==1?'非常差':''}}
</view>
</u-popup>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
appletAppointmentOrderPay
} from '@/api/pagesB/appointmenttime/appointmenttime.js'
import baseurl from '@/api/baseurl.js'
import {
getAppointmentDetailsInfo,
addAppointmentEvaluate,
handCloseOrder
} from '@/api/pagesB/ServiceDetails/ServiceDetails.js'
import {
lookrate
} from '@/api/pagesB/lookrate/index.js'
export default {
data() {
return {
rateshow: false, //评价
rateval: 0, //评价星数
evaluateSatisfaction: null, //非常差/差/一般/满意/非常满意
baseurl: '',
patientId: '', //id
openid: '', //id
list: null,
orderNo: '',
timer: null,
timestamp: 0,
timecount: 0,
lookrateshow: false, //查看评价
ratelist: null,
rateimgtitle: {
img: null,
title: null,
},
Timers: null,
}
},
onUnload() {
clearInterval(this.Timers); //清除该函数
},
onShow() {
this.getlist()
},
onLoad(options) {
this.baseurl = baseurl
this.orderNo = options.orderNo
var that = this
const value = uni.getStorageSync('patientId');
const value2 = uni.getStorageSync('openid');
if (value && value2) {
that.patientId = value
that.openid = value2
}
},
watch: { //监听
timecount() {
if (this.timecount <= 0) {
clearInterval(this.Timers); //清除该函数
handCloseOrder().then(res => {
this.list.orderStatus = 'CANCEL'
})
}
},
rateval() {
if (this.rateval == 5) {
this.evaluateSatisfaction = 'VERYSATISFIED'
} else if (this.rateval == 4) {
this.evaluateSatisfaction = 'SATISFIED'
} else if (this.rateval == 3) {
this.evaluateSatisfaction = 'COMMONLY'
} else if (this.rateval == 2) {
this.evaluateSatisfaction = 'DISSATISFIED'
} else if (this.rateval == 1) {
this.evaluateSatisfaction = 'VERYDISSATISFIED'
}
},
},
methods: {
//去评价
rateshowtrue() {
this.rateval = 0
this.evaluateSatisfaction = null
this.rateshow = true
},
//查看评价
lookrate(item) {
this.rateval = 0
this.evaluateSatisfaction = null
this.rateimgtitle.img = item.itemPictureUrl
this.rateimgtitle.title = item.nurseItemName
lookrate(item.orderNo).then(res => {
this.ratelist = res.data
this.rateval = res.data.compositeScore
this.lookrateshow = true
})
},
//支付
buy() {
let obj = {
patientId: this.patientId,
openid: this.openid,
orderNo: this.list.orderNo,
orderChannel: "WECHAT_APPLET",
paymentPrice: this.list.totalPrice,
payType: "WECHAT_PAY",
buySource: "NURSE_STATION",
}
var that = this
appletAppointmentOrderPay(obj).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) {
uni.setStorageSync("Refresh", 'Refresh')
that.getlist()
that.$refs.uToast.show({
title: '支付成功',
type: 'success',
duration: 1500,
url: `/pagesB/paysuccess/paysuccess?delta=${2}`
})
},
fail: function(err) {
that.$refs.uToast.show({
title: '取消支付',
type: 'error',
duration: 1500,
})
}
});
} else {
this.$refs.uToast.show({
title: response.msg,
type: 'error',
duration: 2000
})
}
})
},
//评价
taprate() {
var obj = {
"patientId": this.patientId,
"openid": this.openid,
"orderNo": this.orderNo,
"evaluateChannel": "WE_CHAT_APPLET",
"evaluateSatisfaction": this.evaluateSatisfaction,
"compositeScore": this.rateval
}
addAppointmentEvaluate(obj).then(res => {
if (res.code == 200) {
this.getlist();
this.$refs.uToast.show({
title: '评价成功',
type: 'success',
duration: '1500'
})
this.rateshow = false
uni.setStorageSync("Refresh", 'Refresh')
if (this.timer) {
clearTimeout(this.timer)
}
this.timer = setTimeout(e => {
uni.navigateTo({
url: `/pagesB/ratesuccess/ratesuccess?delta=${1}`
})
}, 1500)
} else {
this.$refs.uToast.show({
title: '评价失败',
type: 'error',
duration: '1500'
})
}
})
},
//打电话
gophone() {
var that = this
uni.getSystemInfo({
success: function(res) {
if (res.platform == 'ios') {
uni.makePhoneCall({
phoneNumber: that.list.stationPhone //仅为示例
});
} else {
uni.showActionSheet({
itemList: ['呼叫', ],
success: function(res) {
if (res.tapIndex + 1 == 1) {
uni.makePhoneCall({
phoneNumber: that.list.stationPhone //仅为示例
});
}
},
fail: function(res) {}
});
}
}
});
},
// 信息
getlist() {
getAppointmentDetailsInfo(this.orderNo).then(res => {
this.list = res.data
var ordertimes = this.list.createTime.replaceAll(/\-/gi, "/")
var time = new Date(ordertimes).getTime() / 1000 + (60 * 60 * 2)
var times = new Date().getTime() / 1000
this.timestamp = time - times
if (this.timestamp >= 0) {
this.timecount = this.timestamp
this.Timers = setInterval(() => {
this.timecount--;
}, 1000)
}
})
},
cancelorderment() {
uni.navigateTo({
url: `/pagesB/cancelorder/cancelorder?nurseItemPrice=${this.list.totalPrice}&appointmentOrderId=${this.list.appointmentOrderId}`
})
},
}
}
</script>
<style lang="scss">
@import './ServiceDetails.scss';
</style>