This commit is contained in:
2023-10-16 15:11:26 +08:00
parent 224e1dc7dc
commit 0159f37fb5
6 changed files with 477 additions and 460 deletions

View File

@ -1,20 +0,0 @@
import request from "../../request.js"
//咨询预约时间
export function informationConfirmation(patientId) {
return request({
url: `/nurseApp/healthConsultation/informationConfirmation?patientId=${patientId}`,
method: 'GET'
})
}
//提交
export function addHealthConsultationOrder(data) {
return request({
url: `/nurseApp/healthConsultation/addHealthConsultationOrder`,
method: 'POST',
data
})
}

View File

@ -4,7 +4,10 @@ import request from "../../request.js"
export function selectDepartment(pageNum,pageSize) {
return request({
url: `/nurseApp/healthConsultation/selectDepartment?pageNum=${pageNum}&pageSize=${pageSize}`,
method: 'GET'
method: 'GET',
header: {
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
},
})
}
@ -12,6 +15,9 @@ export function selectDepartment(pageNum,pageSize) {
export function selectHospitalPerson(pageNum,pageSize,departmentId) {
return request({
url: `/nurseApp/healthConsultation/selectHospitalPerson?pageNum=${pageNum}&pageSize=${pageSize}&departmentId=${departmentId}`,
method: 'GET'
method: 'GET',
header: {
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
},
})
}
}

View File

@ -5,7 +5,7 @@
我的
</view> -->
<image src="../../static/pages/userbanner.png" mode="" class="userbanner"></image>
<image src="/static/myinformation.png" mode="" class="headsculpture" @tap='updatainfo'
<image src="/static/headsculpture.png" mode="" class="headsculpture" @tap='updatainfo'
v-if="!appPersonallist.headPictureUrl">
</image>
<image :src="baseurl+appPersonallist.headPictureUrl" mode="" class="headsculpture" @tap='updatainfo' v-else>
@ -14,7 +14,10 @@
<span class="name" v-if="appPersonallist.patientName">
{{appPersonallist.patientName}}
</span>
<view class="signing">
<span class="name" v-else>
请先登录!
</span>
<view class="signing" v-if="appPersonallist.patientName">
未签约
</view>
</view>
@ -148,21 +151,21 @@
</view>
</view>
<u-toast ref="uToast" />
<view class="mask" v-show="showhome" @click='maskhome'>
<view class="masktext" @tap.stop=''>
<view class="maskcontent">
<template v-for="item in familyList">
<view :class="item.identity === userInfo.identity ? 'p1' : 'p2'" @tap="changeFamilyInfo(item)">
<text>{{item.residentName}}</text>
<text>{{item.identity.substring(0,4)}}************{{item.identity.substring(16,18)}}</text>
</view>
</template>
</view>
<view class="add" @tap="addFamilyItem">
添加家庭成员
</view>
</view>
<view class="mask" v-show="showhome" @click.stop='showhome = false'>
<view class="masktext" @click.stop=''>
<view class="maskcontent">
<template v-for="item in familyList">
<view :class="item.identity === userInfo.identity ? 'p1' : 'p2'" @click.stop="changeFamilyInfo(item)">
<text>{{item.residentName}}</text>
<text>{{item.identity.substring(0,4)}}************{{item.identity.substring(16,18)}}</text>
</view>
</template>
</view>
<view class="add" @click.stop="addFamilyItem">
添加家庭成员
</view>
</view>
</view>
</view>
</template>
@ -188,7 +191,7 @@
appPersonallist: null, //
timer: null,
list: {},
showhome: false,//
showhome: false, //
};
},
@ -389,30 +392,30 @@
//
addFamilyItem() {
uni.navigateTo({
url:'/pagesB/AddMembers/AddMembers'
url: '/pagesB/AddMembers/AddMembers'
})
// if (!this.userInfo) {
// uni.showModal({
// title: "",
// content: "",
// confirmText: '',
// cancelText: '',
// success(res) {
// if (res.confirm) {
// uni.redirectTo({
// url: "/pages/login/login?mode="
// })
// } else {
// wx.exitMiniProgram()
// }
// },
// })
// } else {
// this.getSetting()
// uni.navigateTo({
// url: '/pages/login/login'
// });
// }
// if (!this.userInfo) {
// uni.showModal({
// title: "",
// content: "",
// confirmText: '',
// cancelText: '',
// success(res) {
// if (res.confirm) {
// uni.redirectTo({
// url: "/pages/login/login?mode="
// })
// } else {
// wx.exitMiniProgram()
// }
// },
// })
// } else {
// this.getSetting()
// uni.navigateTo({
// url: '/pages/login/login'
// });
// }
},
//
...mapActions(["integralopenPopup"]),

View File

@ -0,0 +1,178 @@
.app {
padding-top: 10rpx;
width: 100%;
.btns {
width: 100%;
display: flex;
font-size: 31rpx;
justify-content: space-around;
text-align: center;
font-weight: 500;
margin-top: 80rpx;
padding-bottom: 50rpx;
.btnleft {
width: 290rpx;
height: 62rpx;
background: #FFFFFF;
border: 1px solid #26A888;
border-radius: 5rpx;
color: #26A888;
line-height: 62rpx
}
.btnright {
width: 289rpx;
height: 62rpx;
background: #26A888;
border-radius: 5rpx;
color: #FFFFFF;
line-height: 62rpx;
}
}
.item {
width: 96%;
margin: 20rpx auto;
background-color: #fff;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 5rpx;
padding-bottom: 50rpx;
.select {
width: 90%;
height: 80rpx;
background: #F6F6F6;
margin: 12rpx auto;
border-radius: 5rpx;
display: flex;
position: relative;
text {
padding: 0 60rpx 0 20rpx;
line-height: 80rpx;
font-size: 22rpx;
font-weight: 400;
height: 80rpx;
color: #8E8E8E;
// text-overflow: -o-ellipsis-lastline;
// overflow: hidden;
// text-overflow: ellipsis;
// display: -webkit-box;
// -webkit-line-clamp: 1;
// line-clamp: 1;
// -webkit-box-orient: vertical;
// white-space:normal;
// word-break:break-all;
}
image {
width: 9rpx;
height: 17rpx;
position: absolute;
right: 40rpx;
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
}
.textarea {
font-size: 18rpx;
font-weight: 400;
color: #8E8E8E;
line-height: 42rpx;
padding: 30rpx 0 0 40rpx;
}
.text {
font-size: 30rpx;
font-weight: 400;
color: #333333;
padding: 30rpx 0 0 40rpx;
}
::v-deep .u-upload {
padding: 30rpx 30rpx 0 30rpx;
}
.input {
width: 90%;
height: 80rpx;
border-radius: 5rpx;
background: #f6f6f6;
margin: 20rpx 0 0 40rpx;
position: relative;
padding-left: 10rpx;
image {
width: 10rpx;
height: 20rpx;
position: absolute;
top: 50%;
right: 5%;
transform: translateY(-50%);
}
.uni-textarea-placeholder {
padding-left: 12rpx;
font-size: 22rpx;
font-weight: 400;
color: #8E8E8E !important;
}
.phsy {
padding-left: 12rpx;
font-size: 22rpx;
font-weight: 400;
color: #8E8E8E !important;
}
.inputtext {
padding-left: 12rpx;
color: black;
font-size: 26rpx;
width: 90%;
height: 80rpx;
line-height: 80rpx;
}
.uinput {
color: black;
font-size: 26rpx;
width: 90%;
height: 80rpx;
line-height: 80rpx;
}
.noimageuinput {
width: 98% !important;
}
}
}
.title {
width: 100%;
padding: 10rpx 0 10rpx 35rpx;
.left {
vertical-align: middle;
display: inline-block;
width: 10rpx;
height: 30rpx;
background: #26A888;
border-radius: 1rpx;
}
.right {
vertical-align: middle;
display: inline-block;
font-size: 30rpx;
font-weight: 500;
color: #26A888;
line-height: 30rpx;
margin-left: 20rpx;
}
}
}

View File

@ -1,401 +1,251 @@
<template>
<view class="app">
<view class="user">
<view class="item">
<span>姓名</span>
<span class='addition' v-if="userlist.patientName">{{userlist.patientName}}</span>
<view class="title">
<view class="left">
</view>
<view class="item">
<span>电话</span>
<span class='addition' v-if="userlist.phone">{{userlist.phone}}</span>
<view class="right">
第一步填写个人信息
</view>
<view class="item" style="border: 0;">
<span>时间</span>
<span class='addition'>请选择</span>
</view>
<view class="item">
<view class="text">
现住址所在区
</view>
<view class="worditem">
<view class="today" @tap='taptoday(item,index)'
:style="todayindex==index?'background: #E6F8F3;border: 1px solid #26A888;color: #26A888;':''"
v-for="(item,index) in userlist.appointmentTimeList" :key="index">
<span class="todaytime">
{{item.week}}
</span>
<span class="time">{{item.healthConsultationDate}}</span>
<view class="input" @tap='showPicker'>
<view class="inputtext"
:style="address=='请选择所属地区'?'font-size:22rpx;font-weight: 400;color: #8E8E8E !important;':''">
{{address}}
</view>
<image src="../../static/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">
选择医生
</view>
<view class="select" @tap='gochoosedoctor'>
<text v-if="formdata.doctorName" style="font-size: 26rpx;color: #303133;">{{formdata.doctorName}}</text>
<text v-else>请选择医生</text>
<image src="../../static/huijiantou.png" mode=""></image>
</view>
</view>
<view class="title">
<view class="left">
</view>
<view class="right">
第二步填写问诊信息
</view>
</view>
<view class="item">
<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>
<view class="title">
<view class="left">
</view>
<view class="right">
第三步上传附件文件
</view>
</view>
<view class="item">
<view class="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="">
最多支持9个文件
</view>
<view class="">
单个文件大小不允许超过10MB
</view>
<view class="">
只支持上传照片图片视频文件后缀类型为JPG.PNG.MP4
</view>
</view>
</view>
<view class="pointout">
<span class="">
温馨提示
</span>
<view class="">
1下单后24h内我们会与您确认具体时间点您也可以进入首页-在线客服联系客服
<view class="btns">
<view class="btnleft">
返回
</view>
<view class="">
2请提前准备好健康资料以备专家参考
</view>
<view class="">
3请提前下载腾讯会议APP
<view class="btnright" @tap='updata'>
保存
</view>
</view>
<view class="remarks">
<span>咨询内容</span>
<u-input v-model="updata.healthConsultationContent" type="textarea" :clearable='false' />
<view class="">
<m-city style='z-index: 10076;' :provinceData="list" headTitle="请选择所属地区" ref="cityPicker"
@funcValue="getpickerParentValue" pickerSize="4">
</m-city>
</view>
<view class="bottomitem">
<span>{{updata.totalPrice}}</span>
<view class="submit" @tap='buyshow=true'>确认</view>
</view>
<!-- 弹框 -->
<u-popup v-model="buyshow" mode="bottom" length="45%" border-radius="30" :closeable='true'>
<view class="payment">
请选择支付方式
</view>
<view class="chat">
<image src="/static/pagesB/chat.png" mode=""></image>
<span>微信支付</span>
</view>
<view class="submits" @tap='buy'>
确认支付{{updata.totalPrice}}
</view>
</u-popup>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
informationConfirmation,
addHealthConsultationOrder
} from '@/api/pagesB/Informationconfirmation/index.js'
getSubordinateRegions,
} from '@/api/pagesB/modifyAddress/modifyAddress.js';
import gkcity from "../../components/m-city/m-city.vue";
import baseurl from '@/api/baseurl.js'
import {
appletGoodsOrderPay
} from '@/api/pagesB/confirmOrder/index.js'
consultationInfo
} from '@/api/pagesB/createnewconsultation/createnewconsultation.js'
export default {
components: {
"m-city": gkcity
},
data() {
return {
timer: null,
openid: null,
buyshow: false,
price: 0,
userlist: {},
todayindex: 0,
updata: {
"orderChannel": "WECHAT_APPLET",
"patientId": null,
"phone": null,
"receiver": null,
"healthAppointDate": null,
"totalPrice": null,
"hospitalPersonId": null,
"healthConsultationContent": '',
"hospitalPersonName": null,
},
}
//
uoloadaction: '',
list: [],
addresslength: null,
imglistlength: null,
address: '请选择所属地区', //
formdata: {
address: '请选择所属地区', //
patientId: 1,
patientName: '李广君',
cardNo: '370882199909092123',
phone: '17615455437',
address: '',
doctorId: 1,
doctorName: '李医生',
consultationType: 'IMAGE_TEXT_CONSULTATION',
problemDescription: '',
situationDescription: '',
problemStatement: '',
medicalRecord: '',
fileUrls: []
}
};
},
onLoad(options) {
this.uoloadaction = baseurl + '/nurseApplet/consultationInfo/uploadConsultationFile'
},
onShow() {
this.areaInfo();
let that = this
uni.$on('doctordata', function(data) {
let item = JSON.parse(data.data)
that.formdata.doctorName = item.realname
that.formdata.doctorId = item.userNo
uni.$off('doctordata')
})
},
methods: {
taptoday(item, index) {
this.todayindex = index
this.updata.healthAppointDate = item.date
updata() {
if (this.imglistlength > 0) {
this.$refs.uUpload.upload()
} else {
this.info();
}
},
buy() {
var that = this
addHealthConsultationOrder(this.updata).then(res => {
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();
},
info() {
consultationInfo(this.formdata).then(res => {
if (res.code == 200) {
res.data.payType = "WECHAT_PAY"
res.data.paymentPrice = res.data.totalPrice
res.data.openid = this.openid
let id = res.data.id
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) {
that.$refs.uToast.show({
title: '支付成功',
type: 'success',
duration: 1500,
})
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.redirectTo({
url: `/pagesB/CommodityOrder/CommodityOrder`
// url: `/pagesB/orderDetails/orderDetails?goodsOrderId=${id}`
})
}, 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=${id}`
})
}, 1500)
}
});
} else {
that.$refs.uToast.show({
title: response.msg,
type: 'error',
duration: 2000
})
}
})
} else {
that.$refs.uToast.show({
title: res.msg,
type: 'error',
duration: 2000
this.$refs.uToast.show({
title: '新建图文问诊成功',
type: 'success',
duration: '1500',
back: 1
})
}
})
},
},
onShow() {
var that = this
const value = uni.getStorageSync('patientId');
const value2 = uni.getStorageSync('openid');
if (value2) {
that.openid = value2
}
if (value) {
that.updata.patientId = value
informationConfirmation(value).then(res => {
that.userlist = res.data
that.updata.phone = res.data.phone
that.updata.receiver = res.data.patientName
that.updata.healthAppointDate = res.data.appointmentTimeList[0].date
//
showPicker() {
this.$refs.cityPicker.show();
},
//
areaInfo() {
getSubordinateRegions().then(res => {
this.list = res.data;
})
}
},
onLoad(options) {
var that = this
this.updata.hospitalPersonName = options.personName
this.updata.totalPrice = Number(options.price)
this.updata.hospitalPersonId = Number(options.hospitalPersonId)
},
//
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 = '请选择所属地区'
}
},
gochoosedoctor() {
uni.navigateTo({
url: '/pagesC/choosedoctor/choosedoctor'
})
},
}
}
</script>
<style lang="scss">
.app {
font-size: 34rpx;
padding-top: 10rpx;
height: 100%;
-webkit-overflow-scrolling: touch;
.determine {
height: 70rpx;
line-height: 70rpx;
font-size: 32rpx;
width: 50%;
color: #F4F5F7;
background: #26A888;
position: absolute;
bottom: 0;
left: 0;
}
.user {
background: #FFFFFF;
width: 94%;
height: 600rpx;
margin: 10rpx auto;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
line-height: 93rpx;
.addressitem {
width: 97%;
border-bottom: 1rpx solid #D8D4D4;
margin-left: 3%;
// height: 100%;
.leftaddress {
width: 15%;
height: 100%;
display: flex;
display: inline-block;
}
.addition {
color: #666666;
display: inline-block;
line-height: 50rpx;
font-size: 28rpx;
}
}
.item {
width: 97%;
border-bottom: 1rpx solid #D8D4D4;
margin-left: 3%;
span:nth-child(1) {
font-weight: 600;
}
.addition {
color: #666666;
line-height: 30rpx;
font-size: 32rpx;
}
}
.worditem {
display: flex;
width: 100%;
justify-content: flex-start;
flex-wrap: wrap;
.today {
width: 20%;
margin: 0 2.5% 0 2.5%;
margin-top: 20rpx;
height: 90rpx;
text-align: center;
font-size: 26rpx;
border: 1px solid #DADADA;
border-radius: 5rpx;
.time {
font-size: 26rpx;
display: block;
line-height: 40rpx;
}
.todaytime {
padding-top: 5rpx;
font-size: 26rpx;
display: block;
line-height: 40rpx;
}
}
}
}
.pointout {
color: #666666;
width: 94%;
font-size: 28rpx;
margin: 20rpx auto;
span {
color: black;
font-size: 34rpx;
font-weight: 600;
display: block;
margin-bottom: 10rpx;
}
view {
padding-left: 30rpx;
}
view:nth-child(1) {
padding-top: 10rpx;
}
}
.remarks {
width: 94%;
margin: 10rpx auto;
font-size: 34rpx;
height: 440rpx;
background: #FFFFFF;
border-radius: 20rpx;
padding: 30rpx 0 0 30rpx;
span {
font-weight: 600;
}
}
.bottomitem {
width: 100%;
height: 120rpx;
background: #FFFFFF;
bottom: 0;
position: fixed;
span {
font-size: 48rpx;
line-height: 120rpx;
color: #F44B2F;
margin: 0 0 0 30rpx;
}
.submit {
width: 186rpx;
height: 70rpx;
background: #26A888;
color: #FFFFFF;
border-radius: 30rpx;
line-height: 70rpx;
text-align: center;
font-size: 32rpx;
float: right;
margin: 25rpx 30rpx 0 0;
}
}
//
.payment {
width: 100%;
height: 130rpx;
font-size: 42rpx;
color: #000000;
line-height: 130rpx;
text-align: center;
border-bottom: 1rpx solid #D8D4D4;
}
.chat {
position: relative;
height: 200rpx;
span {
position: absolute;
top: 50rpx;
left: 180rpx;
line-height: 70rpx;
font-size: 42rpx;
color: #000000;
}
image {
position: absolute;
top: 50rpx;
left: 70rpx;
width: 80rpx;
height: 70rpx;
}
}
.submits {
background: #26A888;
width: 501rpx;
height: 71rpx;
line-height: 71rpx;
border-radius: 36rpx;
font-size: 34rpx;
color: #FFFFFF;
text-align: center;
position: fixed;
bottom: 50rpx;
left: 50%;
transform: translateX(-50%);
}
}
@import './confirmation.scss';
</style>

View File

@ -221,35 +221,35 @@
},
//
goappointment(item) {
let that = this
const value = uni.getStorageSync('openid');
const value2 = uni.getStorageSync('patientId');
if (value && value2) {
AppIdentification(value2).then(res => {
if (res.code == 200) {
if (res.data.loginFlag) {
that.usershow = false
uni.navigateTo({
url: `/pagesB/confirmation/confirmation?price=${item.consultingFee}&hospitalPersonId=${item.id}&&personName=${item.personName}`
})
} else {
that.usershow = true
}
} else if (res.code == 9999) {} else {
that.$refs.uToast.show({
title: res.msg,
type: 'error',
url: '/pages/login/login'
})
}
})
} else {
that.$refs.uToast.show({
title: '未登录,请先登录',
type: 'error',
url: '/pages/login/login'
})
}
// let that = this
// const value = uni.getStorageSync('openid');
// const value2 = uni.getStorageSync('patientId');
// if (value && value2) {
// AppIdentification(value2).then(res => {
// if (res.code == 200) {
// if (res.data.loginFlag) {
// that.usershow = false
uni.navigateTo({
url: `/pagesB/confirmation/confirmation?price=${item.consultingFee}&hospitalPersonId=${item.id}&&personName=${item.personName}`
})
// } else {
// that.usershow = true
// }
// } else if (res.code == 9999) {} else {
// that.$refs.uToast.show({
// title: res.msg,
// type: 'error',
// url: '/pages/login/login'
// })
// }
// })
// } else {
// that.$refs.uToast.show({
// title: ',',
// type: 'error',
// url: '/pages/login/login'
// })
// }
},
//
goinformation() {
@ -299,4 +299,4 @@
<style lang="scss">
@import "./medicine.scss";
</style>
</style>