Browse Source

2.2.0 开发stash

dev
kola-web 1 week ago
parent
commit
5e89a8dda5
  1. 15
      project.private.config.json
  2. 3
      src/app.json
  3. 3
      src/app.ts
  4. 46
      src/components/popup/index.scss
  5. 17
      src/components/popup/index.wxml
  6. 116
      src/components/toast/index.scss
  7. 32
      src/components/toast/index.wxml
  8. BIN
      src/images/icon64.png
  9. BIN
      src/images/icon65.png
  10. 611
      src/pages/d_patientDetail/index.scss
  11. 110
      src/pages/d_patientDetail/index.ts
  12. 187
      src/pages/d_patientDetail/index.wxml
  13. 23
      src/pages/d_patientHormones/index.scss
  14. 5
      src/pages/d_patientHormones/index.ts
  15. 3
      src/pages/d_patientHormones/index.wxml
  16. 8
      src/pages/d_qolDetail/index.json
  17. 250
      src/pages/d_qolDetail/index.scss
  18. 237
      src/pages/d_qolDetail/index.ts
  19. 178
      src/pages/d_qolDetail/index.wxml
  20. 50
      src/patient/pages/certReslove/index.ts
  21. 26
      src/patient/pages/doctor/index.scss
  22. 4
      src/patient/pages/doctor/index.wxml
  23. 213
      src/patient/pages/enterInfo/index.scss
  24. 107
      src/patient/pages/enterInfo/index.ts
  25. 105
      src/patient/pages/enterInfo/index.wxml
  26. 81
      src/patient/pages/hospital/index.scss
  27. 7
      src/patient/pages/hospital/index.ts
  28. 11
      src/patient/pages/hospital/index.wxml
  29. 282
      src/patient/pages/index/index.scss
  30. 203
      src/patient/pages/index/index.ts
  31. 166
      src/patient/pages/index/index.wxml
  32. 42
      src/patient/pages/live/index.wxml
  33. 3
      src/patient/pages/liveDetail/index.json
  34. 113
      src/patient/pages/liveDetail/index.ts
  35. 12
      src/patient/pages/liveDetail/index.wxml
  36. 75
      src/patient/pages/liveDetailVideo/index.ts
  37. 2
      src/patient/pages/liveDetailVideo/index.wxml
  38. 73
      src/patient/pages/medical/index.ts
  39. 28
      src/patient/pages/medical/index.wxml
  40. 13
      src/patient/pages/medicalDetail/index.scss
  41. 56
      src/patient/pages/medicalDetail/index.ts
  42. 37
      src/patient/pages/medicalDetail/index.wxml
  43. 3
      src/patient/pages/my/index.json
  44. 72
      src/patient/pages/my/index.ts
  45. 8
      src/patient/pages/my/index.wxml
  46. 15
      src/patient/pages/qolReport/index.ts
  47. 1
      src/patient/pages/qolReport/index.wxml
  48. 12
      src/patient/pages/qolResult/index.wxml
  49. 11
      src/utils/request.ts

15
project.private.config.json

@ -23,16 +23,23 @@
"miniprogram": { "miniprogram": {
"list": [ "list": [
{ {
"name": "patient/pages/liveDetail/index", "name": "医生-患者量表",
"pathName": "patient/pages/liveDetail/index", "pathName": "pages/d_qolDetail/index",
"query": "id=35", "query": "id=178",
"scene": null, "scene": null,
"launchMode": "default" "launchMode": "default"
}, },
{ {
"name": "医生-患者详情",
"pathName": "pages/d_patientDetail/index",
"query": "id=178",
"launchMode": "default",
"scene": null
},
{
"name": "医保-详情", "name": "医保-详情",
"pathName": "patient/pages/medicalDetail/index", "pathName": "patient/pages/medicalDetail/index",
"query": "", "query": "id=3",
"launchMode": "default", "launchMode": "default",
"scene": null "scene": null
}, },

3
src/app.json

@ -15,7 +15,8 @@
"pages/d_userInfo/index", "pages/d_userInfo/index",
"pages/d_invite/index", "pages/d_invite/index",
"pages/d_patient/index", "pages/d_patient/index",
"pages/d_patientHormones/index" "pages/d_patientHormones/index",
"pages/d_qolDetail/index"
], ],
"subPackages": [ "subPackages": [
{ {

3
src/app.ts

@ -14,6 +14,7 @@ dayjs.extend(relativeTime)
App<IAppOption>({ App<IAppOption>({
globalData: { globalData: {
version: '2.0', // 在数据请求里面发送给后端的版本号[X-MP-Version]
// 测试号 wx2b0bb13edf717c1d // 测试号 wx2b0bb13edf717c1d
// dev // dev
// appid:wxf9ce8010f1ad24aa // appid:wxf9ce8010f1ad24aa
@ -111,7 +112,7 @@ App<IAppOption>({
Page = page as WechatMiniprogram.Page.Constructor Page = page as WechatMiniprogram.Page.Constructor
Component = component as WechatMiniprogram.Component.Constructor Component = component as WechatMiniprogram.Component.Constructor
wx.ajax = licia.curry(request)({ gUrl: this.globalData.url }) wx.ajax = licia.curry(request)({ gUrl: this.globalData.url, version: this.globalData.version })
this.startLogin() this.startLogin()

46
src/components/popup/index.scss

@ -155,19 +155,19 @@
} }
.contaienr { .contaienr {
margin-top: -80rpx; margin-top: -80rpx;
padding: 96rpx 0 0; padding: 122rpx 0 0;
width: 540rpx; width: 540rpx;
border-radius: 24rpx; border-radius: 24rpx;
box-sizing: border-box; box-sizing: border-box;
background: linear-gradient(353deg, #ffffff 0%, #f5eeff 100%); background: linear-gradient(353deg, #ffffff 0%, #f5eeff 100%);
box-shadow: inset 0rpx -1rpx 0rpx 0rpx #e5e6eb; box-shadow: inset 0rpx -1rpx 0rpx 0rpx #e5e6eb;
.content { .content {
font-size: 28rpx; font-size: 36rpx;
color: #adacb2; color: #adacb2;
text-align: center; text-align: center;
} }
.footer { .footer {
margin-top: 40rpx; margin-top: 66rpx;
border-top: 1px solid #e5e6eb; border-top: 1px solid #e5e6eb;
display: flex; display: flex;
.sure, .sure,
@ -439,6 +439,46 @@
} }
} }
.popup14 {
.badge {
position: relative;
z-index: 1;
display: block;
width: 198rpx;
height: 198rpx;
margin: 0 auto -110rpx;
text-align: center;
}
.popup-container {
width: 670rpx;
box-sizing: border-box;
padding: 130rpx 58rpx 56rpx;
border-radius: 32rpx;
background: linear-gradient(180deg, #f1e6ff 0%, #ffffff 29.75%, #ffffff 100%);
.title {
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
}
.content {
margin-top: 28rpx;
font-size: 36rpx;
color: #69686e;
line-height: 48rpx;
}
.btn {
margin-top: 56rpx;
height: 88rpx;
line-height: 88rpx;
text-align: center;
font-size: 36rpx;
color: #ffffff;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx;
}
}
}
.close { .close {
margin: 48rpx auto 0; margin: 48rpx auto 0;
display: block; display: block;

17
src/components/popup/index.wxml

@ -106,13 +106,16 @@
</view> </view>
</view> </view>
<view class="popup12" wx:if="{{type==='popup12'}}"> <view class="popup12" wx:if="{{type==='popup12'}}">
<view class="popup-container" style="background: url('/images/bg29.png') no-repeat top center/100%"> <view
class="popup-container"
style="background: url('{{imageUrl}}bg29.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="container"> <view class="container">
<view class="c-header"> <view class="c-header">
<image class="avatar" src="/images/bg1.png"></image> <image class="avatar" src="{{params.imgs}}"></image>
<view class="name">客服小张</view> <view class="name">客服小张</view>
</view> </view>
<image class="code" src="/images/bg1.png"></image> <image class="code" mode="aspectFill" src="{{params.consultImg}}" show-menu-by-longpress></image>
<view class="tip"> <view class="tip">
长按识别二维码 长按识别二维码
<view></view> <view></view>
@ -192,6 +195,14 @@
<view class="btn" bind:tap="handleOk">了解更多详情</view> <view class="btn" bind:tap="handleOk">了解更多详情</view>
</view> </view>
</view> </view>
<view class="popup14" wx:if="{{type==='popup14'}}">
<image class="badge" src="{{imageUrl}}icon131.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">访问直播活动页需切换至患者端</view>
<view class="content">请问是否继续</view>
<view class="btn" bind:tap="handleOk">继续</view>
</view>
</view>
<image <image
wx:if="{{params.close}}" wx:if="{{params.close}}"

116
src/components/toast/index.scss

@ -4,6 +4,14 @@
justify-content: center; justify-content: center;
} }
.popup-close {
margin: 40rpx auto;
display: block;
font-size: 80rpx;
color: #fff;
text-align: center;
}
.popup { .popup {
position: relative; position: relative;
z-index: 9999999999; z-index: 9999999999;
@ -2620,7 +2628,7 @@
width: 364rpx; width: 364rpx;
height: 84rpx; height: 84rpx;
font-size: 36rpx; font-size: 36rpx;
color: #FFFFFF; color: #ffffff;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -2631,3 +2639,109 @@
} }
} }
} }
.popup-medical-guide {
.popup-container {
.container {
padding: 424rpx 0 0;
width: 750rpx;
height: 800rpx;
box-sizing: border-box;
.tip {
font-size: 40rpx;
color: #b982ff;
text-align: center;
}
.btn {
margin: 42rpx auto 0;
width: 526rpx;
height: 88rpx;
font-size: 40rpx;
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx;
}
}
}
}
.popup-question-toast {
.popup-container {
padding: 48rpx 0 68rpx;
background: linear-gradient(180deg, #f1e6ff 0%, #ffffff 12.03%, #ffffff 100%);
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid #ffffff;
width: 670rpx;
box-sizing: border-box;
.title {
font-size: 44rpx;
color: #b982ff;
line-height: 48rpx;
text-align: center;
}
.scroll {
margin-top: 32rpx;
padding: 0 50rpx;
font-size: 36rpx;
color: #211d2e;
line-height: 60rpx;
height: 716rpx;
overflow-y: auto;
}
}
}
.popup-enter-info {
.badge {
position: relative;
z-index: 1;
display: block;
width: 200rpx;
height: 224rpx;
margin: 0 auto -140rpx;
text-align: center;
}
.popup-container {
width: 670rpx;
position: relative;
box-sizing: border-box;
padding: 148rpx 24rpx 56rpx;
border-radius: 32rpx;
background: linear-gradient(180deg, #f1e6ff 0%, #ffffff 29.75%, #ffffff 100%);
text-align: center;
.p-close {
position: absolute;
right: 22rpx;
top: 22rpx;
font-size: 38rpx;
color: #adacb2;
}
.title {
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
}
.content {
margin-top: 28rpx;
font-size: 32rpx;
color: #adacb2;
line-height: 48rpx;
.high {
color: #b982ff;
}
}
.btn {
margin-top: 32rpx;
height: 88rpx;
line-height: 88rpx;
text-align: center;
font-size: 36rpx;
color: #ffffff;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx;
}
}
}

32
src/components/toast/index.wxml

@ -790,4 +790,36 @@
</view> </view>
</view> </view>
</view> </view>
<view class="popup-medical-guide" wx:if="{{type == 'medical-guide'}}">
<view class="popup-container">
<view class="container" style="background: url('{{imageUrl}}bg43.png?t={{Timestamp}}') no-repeat top center/100%">
<view class="tip">医保政策轻松查询</view>
<view class="btn" bind:tap="handleOk">立即查询</view>
</view>
</view>
</view>
<view class="popup-question-toast" wx:if="{{type == 'question-toast'}}">
<view class="popup-container">
<view class="title">生活质量自评</view>
<view class="scroll">{{params.content}}</view>
</view>
</view>
<view class="popup-enter-info" wx:if="{{type==='guideEnterInfo'}}">
<image class="badge" src="{{imageUrl}}icon131.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">访问直播活动页需切换至患者端</view>
<view class="content">请问是否继续</view>
<view class="btn" bind:tap="handleOk">继续</view>
</view>
</view>
<view class="popup-enter-info" wx:if="{{type==='guideEnterInfoJump'}}">
<image class="badge" src="{{imageUrl}}icon131.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">访问直播活动页需切换至患者端</view>
<view class="content">请问是否继续</view>
<view class="btn" bind:tap="handleOk">继续</view>
</view>
</view>
<van-icon wx:if="{{params.close}}" class="popup-close" bind:tap="handleCancel" name="close" />
</van-popup> </van-popup>

BIN
src/images/icon64.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon65.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

611
src/pages/d_patientDetail/index.scss

@ -7,397 +7,374 @@ page {
min-height: 100vh; min-height: 100vh;
padding-bottom: 220rpx; padding-bottom: 220rpx;
.banner { .banner {
margin: 40rpx 30rpx 0;
padding: 0 20rpx;
background: linear-gradient(53deg, #ffffff 0%, rgba(255, 255, 255, 0.46) 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
position: relative; position: relative;
.watermark { margin: 0 30rpx;
padding: 32rpx;
background: linear-gradient(180deg, #f3e9ff 0%, #ffffff 27.75%, #ffffff 100%);
border: 2rpx solid #ffffff;
border-radius: 86rpx 24rpx 24rpx 24rpx;
&::before {
position: absolute; position: absolute;
top: 80rpx; top: 24rpx;
z-index: 2; right: 24rpx;
font-size: 36rpx; content: '';
line-height: 58rpx; width: 32rpx;
color: rgba(0, 0, 0, 0.05); height: 32rpx;
transform: rotate(-12deg); border-radius: 50%;
text-align: center; background: #eadef9;
.p {
white-space: wrap;
}
} }
.banner-container { .user {
position: relative; display: flex;
z-index: 3; gap: 24rpx;
padding: 120rpx 0 38rpx;
.avatar { .avatar {
position: absolute; position: relative;
left: 50%; width: 124rpx;
top: 0; height: 124rpx;
transform: translate(-50%, -50%); .a-img {
.avatar-img { width: 100%;
width: 174rpx; height: 100%;
height: 174rpx;
border-radius: 50%; border-radius: 50%;
} }
.icon { .icon {
position: absolute; position: absolute;
bottom: 10rpx; bottom: 0;
right: 10rpx; right: 0;
width: 40rpx; width: 32rpx;
height: 40rpx; height: 32rpx;
} }
} }
.w-header { .wrap {
text-align: center; flex: 1;
padding-top: 14rpx;
.name { .name {
font-size: 48rpx; font-size: 40rpx;
color: rgba(33, 29, 46, 1); color: #211d2e;
font-weight: bold; font-weight: bold;
}
.content {
margin-top: 12rpx;
line-height: 36rpx;
.age { .age {
margin-left: 10rpx; margin-right: 16rpx;
display: inline; padding-right: 16rpx;
color: rgba(173, 172, 178, 1); display: inline-block;
font-weight: normal;
font-size: 28rpx; font-size: 28rpx;
} color: #211d2e;
border-right: 1px solid rgba(173, 172, 178, 0.35);
} }
.tel { .tel {
margin-top: 28rpx; margin-right: 20rpx;
display: inline-block;
font-size: 28rpx; font-size: 28rpx;
color: rgba(33, 29, 46, 1); color: #211d2e;
display: flex; }
align-items: center;
justify-content: center;
.tel-icon { .tel-icon {
margin-left: 10rpx; width: 36rpx;
width: 40rpx; height: 36rpx;
height: 40rpx;
} }
} }
.date { .reg-date {
margin-top: 28rpx; margin-top: 20rpx;
font-size: 28rpx; font-size: 28rpx;
color: rgba(105, 104, 110, 1); color: #211d2e;
}
.send {
margin-left: 32rpx;
width: 92rpx;
height: 32rpx;
font-size: 22rpx;
color: rgba(103, 186, 202, 1);
text-align: center;
border: 1px solid #67baca;
border-radius: 58rpx 58rpx 58rpx 58rpx;
}
} }
.user { .options {
.wrap { margin-top: 24rpx;
padding-left: 20rpx;
.w-tags {
margin-top: 28rpx;
display: flex; display: flex;
flex-wrap: wrap;
align-items: center; align-items: center;
gap: 12rpx; gap: 18rpx;
.label { .o-item {
width: 164rpx; text-align: center;
height: 40rpx; flex: 1;
} padding: 2rpx 0;
.tag { font-size: 32rpx;
padding: 6rpx 16rpx; color: #b982ff;
font-size: 24rpx; line-height: 48rpx;
line-height: 28rpx;
color: rgba(103, 113, 114, 1);
background-color: rgba(242, 244, 245, 1);
border-radius: 8rpx;
}
}
}
}
.adl {
margin-top: 32rpx;
background: #ffffff; background: #ffffff;
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04); border-radius: 48rpx 48rpx 48rpx 48rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx; border: 2rpx solid rgba(185, 130, 255, 0.23);
border: 2rpx solid #f8f9f9;
.a-header {
display: flex;
align-items: flex-start;
flex-direction: column;
.content {
position: relative;
.sub-content1 {
position: relative;
z-index: 1;
border-radius: 24rpx 0 24rpx 0;
padding: 14rpx 28rpx;
font-size: 28rpx;
color: rgba(98, 190, 208, 1);
background-color: rgba(242, 248, 249, 1);
}
.sub-content2 {
position: absolute;
right: 20rpx;
top: 0;
transform: translateX(100%);
border-radius: 0 0 24rpx 0;
padding: 14rpx 28rpx 14rpx 40rpx;
font-size: 28rpx;
color: #e59a29;
background-color: #fff5df;
} }
} }
.box {
width: 40rpx;
height: 40rpx;
background-color: rgba(242, 248, 249, 1);
} }
} }
.a-content { .b-container {
position: relative; padding: 0 32rpx;
z-index: 1; margin-top: 48rpx;
margin-top: -40rpx; background: #f6f8f9;
padding: 32rpx 30rpx;
background-color: #fff;
border-radius: 24rpx; border-radius: 24rpx;
.row { .row {
padding: 32rpx;
display: flex; display: flex;
align-items: center; font-size: 32rpx;
gap: 20rpx; color: #211d2e;
&:first-of-type { border-bottom: 1px solid rgba(173, 172, 178, 0.1);
margin-bottom: 24rpx; &:last-of-type {
border: none;
} }
.label { .label {
flex-shrink: 0; flex-shrink: 0;
font-size: 28rpx; width: 340rpx;
color: rgba(154, 161, 162, 1);
width: 6em;
} }
.num { .c-item:not(:last-of-type)::after {
min-width: 3em; display: inline;
font-size: 28rpx; content: '';
color: rgba(40, 48, 49, 1);
} }
.tag {
display: flex;
align-items: center;
background-color: rgba(232, 245, 248, 1);
border-radius: 12rpx;
.t-label {
padding: 8rpx 12rpx;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
background-color: rgba(103, 186, 202, 1);
border-radius: 12rpx;
display: flex;
align-items: center;
gap: 8rpx;
flex-shrink: 0;
.icon {
width: 24rpx;
height: 24rpx;
} }
} }
.t-content { }
padding: 0 16rpx 0 8rpx; .edc-card {
display: flex; margin: 24rpx 30rpx 0;
align-items: center; padding: 30rpx 32rpx;
font-size: 28rpx;
color: rgba(103, 186, 202, 1);
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4rpx; gap: 24rpx;
flex-shrink: 0; background-color: #fff;
border-radius: 24rpx;
.icon { .icon {
width: 24rpx; width: 48rpx;
height: 28rpx; height: 48rpx;
}
}
&.tag-warn {
background-color: rgba(227, 220, 64, 0.1);
.t-label {
background-color: rgba(225, 217, 45, 1);
}
.t-content {
color: rgba(225, 217, 45, 1);
}
}
&.tag-error {
background-color: rgba(248, 234, 234, 1);
.t-label {
background-color: rgba(215, 108, 108, 1);
} }
.t-content { .content {
color: rgba(215, 108, 108, 1); font-size: 32rpx;
color: rgba(33, 29, 46, 1);
font-weight: bold;
} }
} }
.kkd {
margin: 48rpx 30rpx 0;
.k-title {
display: flex;
align-items: center;
gap: 12rpx;
font-size: 36rpx;
color: #211d2e;
font-weight: bold;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
background: #b982ff;
border-radius: 2rpx;
}
.sub {
align-self: flex-end;
font-size: 32rpx;
color: #adacb2;
font-weight: normal;
} }
} }
.d-row { .k-container {
margin-top: 22rpx; margin-top: 24rpx;
display: flex; display: flex;
gap: 20rpx; gap: 30rpx;
.label { .k-qol {
flex-shrink: 0; flex: 1;
width: 6em; padding: 32rpx 24rpx 24rpx;
font-size: 28rpx; background: linear-gradient(
color: rgba(154, 161, 162, 1); 180deg,
rgba(239, 226, 255, 0.52) 0%,
rgba(255, 255, 255, 0.96) 26.03%,
#ffffff 100%
);
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid #ffffff;
.title {
font-size: 32rpx;
color: #211d2e;
line-height: 40rpx;
font-weight: bold;
.k-question {
width: 24rpx;
height: 24rpx;
}
} }
.content { .content {
min-width: 3em; margin-top: 18rpx;
display: flex;
align-self: baseline;
justify-content: space-between;
.num {
white-space: nowrap;
font-size: 64rpx;
color: #ffa300;
font-weight: bold;
.sub {
margin-left: -10rpx;
font-size: 28rpx; font-size: 28rpx;
color: rgba(40, 48, 49, 1); color: #69686e;
font-weight: normal;
} }
} }
.icon {
width: 92rpx;
height: 92rpx;
} }
} }
.info-card { .row {
position: relative; margin-top: 24rpx;
margin-top: 16rpx; padding: 16rpx 24rpx;
padding: 32rpx 30rpx; background-color: #f6f8f9;
border-radius: 24rpx; border-radius: 16rpx;
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04); .col {
border: 2rpx solid #f8f9f9;
background-color: #fff;
display: grid;
gap: 32rpx 22rpx;
grid-template-columns: repeat(auto-fit, minmax(40%, 1fr));
.ic-item {
display: flex; display: flex;
align-items: center;
gap: 10rpx;
line-height: 48rpx;
.label { .label {
font-size: 28rpx; font-size: 28rpx;
color: #9aa1a2; color: #211d2e;
white-space: nowrap;
}
.content {
font-size: 28rpx;
color: #283031;
white-space: nowrap;
}
} }
.edit { .num {
position: absolute;
bottom: 0;
right: 0;
padding: 6rpx 18rpx;
display: flex;
align-items: center;
font-size: 28rpx; font-size: 28rpx;
color: #fff; color: #1ec580;
border-radius: 32rpx 0 24rpx 0;
background-color: #67baca;
.icon {
width: 32rpx;
height: 32rpx;
} }
} }
} }
.b-footer { .k-footer {
margin: 32rpx auto 0; margin-top: 34rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: space-between;
.send { .date {
margin: 0 42rpx;
width: 200rpx;
height: 60rpx;
font-size: 32rpx; font-size: 32rpx;
color: rgba(98, 190, 208, 1); color: #69686e;
display: flex;
align-items: center;
justify-content: center;
background: #ffffff;
border-radius: 64rpx 64rpx 64rpx 64rpx;
border: 2rpx solid #62bed0;
} }
.remark { .add {
width: 200rpx; flex-shrink: 0;
height: 60rpx; width: 76rpx;
font-size: 32rpx; height: 76rpx;
color: rgba(98, 190, 208, 1);
display: flex;
align-items: center;
justify-content: center;
background: #ffffff;
border-radius: 64rpx 64rpx 64rpx 64rpx;
border: 2rpx solid #62bed0;
} }
} }
.none {
margin: 80rpx -32rpx 0;
width: 318rpx;
height: 170rpx;
display: block;
} }
} }
.info-card { .k-hormones {
margin: 24rpx 30rpx 0; position: relative;
padding: 0 32rpx; flex: 1;
background: linear-gradient(53deg, #ffffff 0%, rgba(255, 255, 255, 0.87) 100%); padding: 32rpx 24rpx 24rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx; background: linear-gradient(
180deg,
rgba(239, 226, 255, 0.52) 0%,
rgba(255, 255, 255, 0.96) 26.03%,
#ffffff 100%
);
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid #ffffff; border: 2rpx solid #ffffff;
.row { .title {
padding: 32rpx; position: relative;
display: flex; z-index: 1;
align-items: center;
border-bottom: 1px solid rgba(173, 172, 178, 0.1);
&:last-of-type {
border: none;
}
.label {
width: 11em;
font-size: 32rpx; font-size: 32rpx;
color: rgba(173, 172, 178, 1); color: #211d2e;
line-height: 40rpx;
font-weight: bold;
} }
.content { .content {
font-size: 32rpx; margin-top: 18rpx;
color: rgba(33, 29, 46, 1); display: flex;
white-space: pre-line; align-self: baseline;
justify-content: space-between;
.num {
white-space: nowrap;
font-size: 64rpx;
color: #b982ff;
font-weight: bold;
.sub {
font-size: 28rpx;
color: #69686e;
font-weight: normal;
} }
} }
} }
.edc-card { .row {
margin: 24rpx 30rpx 0; margin-top: 24rpx;
padding: 30rpx 32rpx; padding: 16rpx 24rpx;
display: flex; background-color: #f6f8f9;
align-items: center; border-radius: 16rpx;
gap: 24rpx; line-height: 48rpx;
background-color: #fff; .col1 {
border-radius: 24rpx; font-size: 28rpx;
.icon { color: #211d2e;
width: 48rpx;
height: 48rpx;
} }
.content { .col2 {
font-size: 32rpx; font-size: 28rpx;
color: rgba(33, 29, 46, 1); color: #b982ff;
font-weight: bold;
} }
} }
.footer { .k-footer {
margin: 60rpx 30rpx 0; margin-top: 34rpx;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 26rpx; justify-content: space-between;
.btn { .date {
flex: 1;
height: 88rpx;
background: #ffffff;
font-size: 32rpx; font-size: 32rpx;
color: rgba(185, 130, 255, 1); color: #69686e;
display: flex; }
align-items: center; .add {
justify-content: center; flex-shrink: 0;
border-radius: 48rpx 48rpx 48rpx 48rpx; width: 76rpx;
border: 2rpx solid #b982ff; height: 76rpx;
}
}
.none {
margin: 80rpx -32rpx 0;
width: 318rpx;
height: 170rpx;
display: block;
}
}
} }
} }
.chart-list { .chart-list {
padding: 48rpx 40rpx 0; padding: 48rpx 30rpx 0;
.chart-title { .chart-title {
margin-bottom: 32rpx;
font-size: 36rpx; font-size: 36rpx;
color: #211d2e; color: #211d2e;
font-weight: bold; font-weight: bold;
display: flex;
align-items: center;
&::before {
content: '';
margin-right: 12rpx;
width: 8rpx;
height: 36rpx;
background: #b982ff;
border-radius: 2rpx 2rpx 2rpx 2rpx;
} }
.chart-filter { }
.chart-card {
margin-bottom: 24rpx;
padding: 32rpx;
background-color: #fff;
border-radius: 24rpx;
&.chart-card-legend {
.chart {
padding-top: 40rpx;
}
}
.chart-card-title {
margin-bottom: 24rpx; margin-bottom: 24rpx;
margin-left: -32rpx;
font-size: 36rpx;
color: #211d2e;
font-weight: bold;
display: flex;
align-items: center;
&::before {
content: '';
margin-right: 12rpx;
width: 8rpx;
height: 36rpx;
background: rgba(185, 130, 255, 0.45);
border-radius: 2rpx 2rpx 2rpx 2rpx;
}
}
.chart-filter {
margin-bottom: 48rpx;
position: relative; position: relative;
z-index: 3; z-index: 3;
margin-top: 32rpx; margin-top: 32rpx;
@ -412,7 +389,7 @@ page {
justify-content: center; justify-content: center;
font-size: 32rpx; font-size: 32rpx;
color: #69686e; color: #69686e;
background-color: #ffffff; background-color: #f6f8f9;
border-radius: 34rpx; border-radius: 34rpx;
.icon { .icon {
width: 24rpx; width: 24rpx;
@ -426,23 +403,13 @@ page {
font-size: 32rpx; font-size: 32rpx;
color: #69686e; color: #69686e;
border-radius: 34rpx; border-radius: 34rpx;
background-color: #ffffff; background-color: #f6f8f9;
.icon { .icon {
width: 24rpx; width: 24rpx;
height: 24rpx; height: 24rpx;
} }
} }
} }
.chart-card {
margin-bottom: 24rpx;
padding: 32rpx;
background-color: #fff;
border-radius: 24rpx;
&.chart-card-legend {
.chart {
padding-top: 40rpx;
}
}
.title { .title {
font-size: 32rpx; font-size: 32rpx;
color: #211d2e; color: #211d2e;
@ -487,15 +454,31 @@ page {
padding: 20rpx 40rpx calc(env(safe-area-inset-bottom) + 20rpx); padding: 20rpx 40rpx calc(env(safe-area-inset-bottom) + 20rpx);
box-sizing: border-box; box-sizing: border-box;
background-color: #fff; background-color: #fff;
.pf-btn { display: flex;
align-items: center;
gap: 26rpx;
.btn1 {
flex: 1;
font-size: 32rpx;
color: #b982ff;
border: 1px solid #b982ff;
height: 88rpx; height: 88rpx;
box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
border-radius: 48rpx 48rpx 48rpx 48rpx;
}
.btn2 {
flex: 1;
height: 88rpx;
font-size: 32rpx; font-size: 32rpx;
color: #ffffff; color: #fff;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%); display: flex;
border-radius: 100rpx 100rpx 100rpx 100rpx; align-items: center;
justify-content: center;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 48rpx 48rpx 48rpx 48rpx;
} }
} }

110
src/pages/d_patientDetail/index.ts

@ -9,6 +9,8 @@ Page({
doctor: {}, doctor: {},
hospital: {}, hospital: {},
qolDetail: {},
hormoneDetail: {},
id: '', id: '',
remark: '', remark: '',
@ -17,7 +19,6 @@ Page({
lazyLoad: true, lazyLoad: true,
}, },
fields: { fields: {
1: 'day',
2: 'month', 2: 'month',
3: 'year', 3: 'year',
}, },
@ -26,10 +27,6 @@ Page({
EndDate: '', EndDate: '',
typeRange: [ typeRange: [
{ {
id: '1',
value: '按天',
},
{
id: '2', id: '2',
value: '按月', value: '按月',
}, },
@ -38,8 +35,15 @@ Page({
value: '按年', value: '按年',
}, },
], ],
type: '3', type: '2',
typeName: '按年', typeName: '按月',
// 激素图表的独立日期范围选择器
hormoneStartDate: '',
hormoneEndDate: '',
hormoneType: '2',
hormoneTypeName: '按月',
userInfo: {}, userInfo: {},
popupRemarkShow: false, popupRemarkShow: false,
@ -183,11 +187,17 @@ Page({
this.setData({ this.setData({
id: option.id, id: option.id,
}) })
if (option.anchor) {
this.handleAnchor(option.anchor)
}
app.waitLogin({ type: [2] }).then(async (_res) => { app.waitLogin({ type: [2] }).then(async (_res) => {
app.mpBehavior({ doctor: true, PageName: 'PG_DoctorPatientDetail' }) app.mpBehavior({ doctor: true, PageName: 'PG_DoctorPatientDetail' })
this.getDoctorDetail() this.getDoctorDetail()
this.handleTypeChange() this.handleTypeChange()
this.handleHormoneTypeChange()
this.getQolDetail()
this.getHormoneDetail()
await this.getDetail() await this.getDetail()
app.getUserInfo(2).then((userInfo) => { app.getUserInfo(2).then((userInfo) => {
this.setData({ this.setData({
@ -196,6 +206,46 @@ Page({
}) })
}) })
}, },
handleAnchor(anchor) {
if (anchor == 'qol') {
wx.pageScrollTo({ scrollTop: 700 })
}
if (anchor == 'hormone') {
wx.pageScrollTo({ scrollTop: 1550 })
}
},
getQolDetail() {
wx.ajax({
method: 'GET',
url: '?r=xd/doctor/qol/get-last-record',
data: {
patientId: this.data.id,
},
}).then((res) => {
this.setData({
qolDetail: {
...res,
CreateTime: dayjs(res.CreateTime).format('YYYY-MM-DD'),
},
})
})
},
getHormoneDetail() {
wx.ajax({
method: 'GET',
url: '?r=xd/doctor/hormone-dosage/get-last-record',
data: {
patientId: this.data.id,
},
}).then((res) => {
this.setData({
hormoneDetail: {
...res,
createTime: dayjs(res.createTime).format('YYYY-MM-DD'),
},
})
})
},
getDoctorDetail() { getDoctorDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
@ -236,6 +286,8 @@ Page({
}, },
handleChange() { handleChange() {
this.getGraph() this.getGraph()
},
handleHormoneChange() {
this.getHormoneData() this.getHormoneData()
}, },
handleTypeChange(e = '') { handleTypeChange(e = '') {
@ -248,11 +300,7 @@ Page({
const typeName = typeRange[index].value const typeName = typeRange[index].value
let EndDate = '' let EndDate = ''
let StartDate = '' let StartDate = ''
if (type === '1') { if (type === '2') {
EndDate = dayjs().format('YYYY-MM-DD')
StartDate = dayjs().subtract(6, 'd').format('YYYY-MM-DD')
}
else if (type === '2') {
EndDate = dayjs().format('YYYY-MM') EndDate = dayjs().format('YYYY-MM')
StartDate = dayjs().subtract(1, 'M').format('YYYY-MM') StartDate = dayjs().subtract(1, 'M').format('YYYY-MM')
} }
@ -267,6 +315,31 @@ Page({
StartDate, StartDate,
}) })
this.getGraph() this.getGraph()
},
handleHormoneTypeChange(e = '') {
let index = 0
if (e) {
index = (e as any).detail.value
}
const { typeRange } = this.data
const hormoneType = typeRange[index].id
const hormoneTypeName = typeRange[index].value
let hormoneEndDate = ''
let hormoneStartDate = ''
if (hormoneType === '2') {
hormoneEndDate = dayjs().format('YYYY-MM')
hormoneStartDate = dayjs().subtract(1, 'M').format('YYYY-MM')
}
else if (hormoneType === '3') {
hormoneEndDate = dayjs().format('YYYY')
hormoneStartDate = dayjs().subtract(1, 'y').format('YYYY')
}
this.setData({
hormoneType,
hormoneTypeName,
hormoneEndDate,
hormoneStartDate,
})
this.getHormoneData() this.getHormoneData()
}, },
getGraph() { getGraph() {
@ -306,14 +379,14 @@ Page({
}) })
}, },
getHormoneData() { getHormoneData() {
const { type, StartDate, EndDate } = this.data const { hormoneType, hormoneStartDate, hormoneEndDate } = this.data
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=xd/doctor/hormone-dosage/graph', url: '?r=xd/doctor/hormone-dosage/graph',
data: { data: {
DateType: type, DateType: hormoneType,
StartDate, StartDate: hormoneStartDate,
EndDate, EndDate: hormoneEndDate,
PatientId: this.data.id, PatientId: this.data.id,
count: 0, count: 0,
}, },
@ -806,4 +879,9 @@ Page({
url: `/pages/d_patientHormones/index?id=${this.data.detail.PatientId}&name=${this.data.detail.Name}`, url: `/pages/d_patientHormones/index?id=${this.data.detail.PatientId}&name=${this.data.detail.Name}`,
}) })
}, },
hadnleQolDetail() {
wx.navigateTo({
url: `/pages/d_qolDetail/index?id=${this.data.detail.PatientId}`,
})
},
}) })

187
src/pages/d_patientDetail/index.wxml

@ -4,51 +4,59 @@
<view <view
class="page" class="page"
style="background: url('{{imageUrl}}bg10.png?t={{Timestamp}}') no-repeat top center/100% 610rpx;padding-top:{{pageTop+70}}px;" style="background: url('{{imageUrl}}bg10.png?t={{Timestamp}}') no-repeat top center/100% 610rpx;padding-top:{{pageTop+20}}px;"
> >
<view class="banner"> <view class="banner">
<view class="watermark"> <view class="user">
<view class="p">本页面内容涉及患者个人信息</view>
<view class="p">仅用于{{hospital.Name}}{{doctor.Name}}医生进行患者随访管理</view>
<view class="p">不可用于其他用途</view>
</view>
<view class="banner-container">
<view class="avatar"> <view class="avatar">
<image class="avatar-img" src="{{detail.UserImg}}"></image> <image class="a-img" src="{{detail.UserImg}}"></image>
<image wx:if="{{detail.Gender==='1'}}" class="icon" src="{{imageUrl}}icon64.png?t={{Timestamp}}"></image> <image wx:if="{{detail.Gender==='1'}}" class="icon" src="{{imageUrl}}icon64.png?t={{Timestamp}}"></image>
<image wx:if="{{detail.Gender==='2'}}" class="icon" src="{{imageUrl}}icon65.png?t={{Timestamp}}"></image> <image wx:if="{{detail.Gender==='2'}}" class="icon" src="{{imageUrl}}icon65.png?t={{Timestamp}}"></image>
</view> </view>
<view class="w-header"> <view class="wrap">
<view class="name"> <view class="name">{{showTel ? detail.Name : detail.hideName}}</view>
{{showTel ? detail.Name : detail.hideName}} <view class="content">
<view class="age">{{detail.AgeRangeName}}</view> <view class="age">{{detail.AgeRangeName}}</view>
</view> <view class="tel" bind:tap="handleToggleTel">{{showTel ? detail.Telephone : '***********'}}</view>
<view class="tel" bind:tap="handleToggleTel"> <image
{{showTel ? detail.Telephone : '***********'}} bind:tap="handleToggleTel"
<image wx:if="{{showTel}}" class="tel-icon" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image> wx:if="{{showTel}}"
<image wx:else class="tel-icon" src="{{imageUrl}}icon62.png?t={{Timestamp}}"></image> class="tel-icon"
</view> src="{{imageUrl}}icon63.png?t={{Timestamp}}"
<view class="date">注册时间:{{detail.BecomePatientTime}}</view> ></image>
</view> <image
</view> bind:tap="handleToggleTel"
</view> wx:else
class="tel-icon"
<view class="info-card"> src="{{imageUrl}}icon62.png?t={{Timestamp}}"
></image>
</view>
<view class="reg-date">注册时间:{{detail.BecomePatientTime}}</view>
<view class="options">
<view class="o-item" bind:tap="handleRemark">备注</view>
<view class="o-item" bind:tap="handleSend">发消息</view>
</view>
</view>
</view>
<view class="b-container">
<view class="row"> <view class="row">
<view class="label">Graves病病史</view> <view class="label">Graves病病史</view>
<view class="content">{{detail.IsGravesName}}</view> <view class="col">{{detail.IsGravesName}}</view>
</view> </view>
<view class="row"> <view class="row">
<view class="label"> <view class="label">TED相关眼部手术史</view>
TED(甲状腺眼突) <view class="col">{{detail.HasTedSurgeryName}}</view>
<view></view> </view>
及其相关眼部手术史 <view class="row" wx:if="{{detail.tituyoList.length}}">
<view class="label">替妥尤单抗使用情况</view>
<view class="col">
<text class="c-item" wx:for="{{detail.tituyoList}}" wx:key="index">{{item.tituyoName}}</text>
</view> </view>
<view class="content">{{detail.HasTedSurgeryName}}</view>
</view> </view>
<view class="row" wx:if="{{detail.DoctorRemark}}"> <view class="row" wx:if="{{detail.DoctorRemark}}">
<view class="label">备注</view> <view class="label">备注</view>
<view class="content">{{detail.DoctorRemark}}</view> <view class="col">{{detail.DoctorRemark}}</view>
</view>
</view> </view>
</view> </view>
<view class="edc-card" bind:tap="handleEDC" wx:if="{{userInfo.IsEDC==='1'}}"> <view class="edc-card" bind:tap="handleEDC" wx:if="{{userInfo.IsEDC==='1'}}">
@ -56,12 +64,75 @@
<image wx:else class="icon" src="{{imageUrl}}icon66.png?t={{Timestamp}}"></image> <image wx:else class="icon" src="{{imageUrl}}icon66.png?t={{Timestamp}}"></image>
<view class="content">标识为EDC患者</view> <view class="content">标识为EDC患者</view>
</view> </view>
<view class="footer"> <view class="kkd">
<view class="btn" bind:tap="handleSend">发消息</view> <view class="k-title">
<view class="btn" bind:tap="handleRemark">备注</view> 患者健康图表
<view class="sub">最近数值</view>
</view>
<view class="k-container">
<view class="k-qol" bind:tap="hadnleQolDetail">
<view class="title">生活质量自评</view>
<block wx:if="{{qolDetail.TotalScore}}">
<view class="content">
<view class="num">
{{qolDetail.TotalScore}}
<text class="sub">分</text>
</view>
<image
wx:if="{{qolDetail.TotalScore>=80}}"
class="icon"
src="{{imageUrl}}icon123.png?t={{Timestamp}}"
></image>
<image
wx:elif="{{qolDetail.TotalScore>=40}}"
class="icon"
src="{{imageUrl}}icon121.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}icon122.png?t={{Timestamp}}"></image>
</view>
<view class="row">
<view class="col">
<view class="label">视觉功能</view>
<view class="num">{{qolDetail.VisionScore}}分</view>
</view>
<view class="col">
<view class="label">外观影响</view>
<view class="num">{{qolDetail.AppearanceScore}}分</view>
</view>
</view>
<view class="k-footer">
<view class="date">{{qolDetail.CreateTime}}</view>
</view>
</block>
<image class="none" wx:else src="{{imageUrl}}bg44.png?t={{Timestamp}}"></image>
</view>
<view class="k-hormones" bind:tap="handleHormones">
<view class="title">激素记录</view>
<block wx:if="{{hormoneDetail.dosage}}">
<view class="content">
<view class="num">
{{hormoneDetail.dosage}}
<text class="sub">mg/周</text>
</view>
</view>
<view class="row">
<view class="col1">最近一周用药方式</view>
<view class="col2" wx:if="{{hormoneDetail.medicationMethod==1}}">口服</view>
<view class="col2" wx:elif="{{hormoneDetail.medicationMethod==2}}">冲击治疗</view>
<view class="col2" wx:elif="{{hormoneDetail.medicationMethod==3}}">局部注射</view>
</view>
<view class="k-footer">
<view class="date">{{hormoneDetail.createTime}}</view>
</view>
</block>
<image class="none" wx:else src="{{imageUrl}}bg45.png?t={{Timestamp}}"></image>
</view>
</view>
</view> </view>
<view class="chart-list"> <view class="chart-list">
<view class="chart-title">GO-QOL生活质量评估报告</view> <view class="chart-title">指标趋势</view>
<view class="chart-card">
<view class="chart-card-title">生活质量评分</view>
<view class="chart-filter"> <view class="chart-filter">
<picker class="type" mode="selector" range="{{typeRange}}" range-key="value" bind:change="handleTypeChange"> <picker class="type" mode="selector" range="{{typeRange}}" range-key="value" bind:change="handleTypeChange">
{{typeName}} {{typeName}}
@ -92,26 +163,57 @@
<image class="icon" src="{{imageUrl}}za-images/doctor/triangle-down.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}za-images/doctor/triangle-down.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="chart-card">
<view class="title">GO-QOL整体记录曲线</view> <view class="title">GO-QOL整体记录曲线</view>
<view class="chart"> <view class="chart">
<ec-canvas id="chart1" ec="{{ ec }}"></ec-canvas> <ec-canvas id="chart1" ec="{{ ec }}"></ec-canvas>
</view> </view>
</view>
<view class="chart-card">
<view class="title">GO-QOL视觉功能影响记录曲线</view> <view class="title">GO-QOL视觉功能影响记录曲线</view>
<view class="chart"> <view class="chart">
<ec-canvas id="chart2" ec="{{ ec }}"></ec-canvas> <ec-canvas id="chart2" ec="{{ ec }}"></ec-canvas>
</view> </view>
</view>
<view class="chart-card">
<view class="title">GO-QOL外观影响记录曲线</view> <view class="title">GO-QOL外观影响记录曲线</view>
<view class="chart"> <view class="chart">
<ec-canvas id="chart3" ec="{{ ec }}"></ec-canvas> <ec-canvas id="chart3" ec="{{ ec }}"></ec-canvas>
</view> </view>
</view> </view>
<view class="chart-card chart-card-legend" wx:if="{{list4Show || list5Show || list6Show}}"> <view class="chart-card chart-card-legend" wx:if="{{list4Show || list5Show || list6Show}}">
<view class="title">我的激素周用量记录曲线</view> <view class="chart-card-title">激素周用量记录曲线</view>
<view class="chart-filter">
<picker
class="type"
mode="selector"
range="{{typeRange}}"
range-key="value"
bind:change="handleHormoneTypeChange"
>
{{hormoneTypeName}}
<image class="icon" src="{{imageUrl}}za-images/doctor/triangle-down.png?t={{Timestamp}}"></image>
</picker>
<view class="range">
<picker
mode="date"
end="{{hormoneEndDate}}"
fields="{{fields[hormoneType]}}"
mode="date"
model:value="{{hormoneStartDate}}"
bindchange="handleHormoneChange"
>
{{hormoneStartDate}}
</picker>
~
<picker
mode="date"
start="{{hormoneStartDate}}"
fields="{{fields[hormoneType]}}"
mode="date"
model:value="{{hormoneEndDate}}"
bindchange="handleHormoneChange"
>
{{hormoneEndDate}}
</picker>
<image class="icon" src="{{imageUrl}}za-images/doctor/triangle-down.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="chart" wx:if="{{list4Show}}"> <view class="chart" wx:if="{{list4Show}}">
<view class="legend"> <view class="legend">
<view class="dot dot4"></view> <view class="dot dot4"></view>
@ -136,8 +238,9 @@
</view> </view>
</view> </view>
</view> </view>
<view class="page-footer" wx:if="{{detail.Name}}"> <view class="page-footer">
<view class="pf-btn" bind:tap="handleHormones">查看激素用药详情</view> <view class="btn1" bind:tap="handleRemark">备注</view>
<view class="btn2" bind:tap="handleSend">发消息</view>
</view> </view>
<van-popup <van-popup

23
src/pages/d_patientHormones/index.scss

@ -2,6 +2,7 @@ page {
background-color: #f6f8f9; background-color: #f6f8f9;
} }
.page { .page {
padding-bottom: 220rpx;
.list { .list {
margin: 28rpx 40rpx 0; margin: 28rpx 40rpx 0;
.list-title { .list-title {
@ -57,7 +58,7 @@ page {
.r-card-hormones { .r-card-hormones {
margin-top: 16rpx; margin-top: 16rpx;
padding: 26rpx 32rpx; padding: 26rpx 32rpx;
background: linear-gradient( 11deg, #FFFFFF 0%, #FFFFFF 49%, #F6EFFF 100%); background: linear-gradient(11deg, #ffffff 0%, #ffffff 49%, #f6efff 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx; border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff; border: 2rpx solid #ffffff;
.rch-row { .rch-row {
@ -103,4 +104,24 @@ page {
} }
} }
} }
.page-footer {
position: fixed;
bottom: 0;
left: 0;
z-index: 10;
width: 100%;
padding: 20rpx 40rpx calc(env(safe-area-inset-bottom) + 20rpx);
box-sizing: border-box;
background-color: #fff;
.pf-btn {
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #ffffff;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
}
} }

5
src/pages/d_patientHormones/index.ts

@ -46,6 +46,11 @@ Page({
this.getList(page + 1) this.getList(page + 1)
} }
}, },
handleBackScroll() {
wx.redirectTo({
url: `/pages/d_patientDetail/index?id=${this.data.id}&anchor=hormone`,
})
},
}) })
export {} export {}

3
src/pages/d_patientHormones/index.wxml

@ -49,4 +49,7 @@
<pagination pagination="{{pagination}}"></pagination> <pagination pagination="{{pagination}}"></pagination>
</view> </view>
</view> </view>
<view class="page-footer">
<view class="pf-btn" bind:tap="handleBackScroll">查看生活质量评分趋势</view>
</view>
</view> </view>

8
src/pages/d_qolDetail/index.json

@ -0,0 +1,8 @@
{
"navigationBarTitleText": "生活质量评测详情",
"navigationStyle": "default",
"usingComponents": {
"van-tab": "@vant/weapp/tab/index",
"van-tabs": "@vant/weapp/tabs/index"
}
}

250
src/pages/d_qolDetail/index.scss

@ -0,0 +1,250 @@
page {
background-color: #f6f8f9;
}
.page1 {
padding: 16rpx 30rpx 240rpx;
.tabs {
padding: 12rpx;
background-color: #fff;
border-radius: 58rpx;
display: flex;
align-items: center;
justify-content: space-between;
.tab-item {
flex: 1;
font-size: 28rpx;
color: #211d2e;
border-radius: 98rpx;
line-height: 64rpx;
text-align: center;
&.active {
color: #fff;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
}
}
}
.container {
padding: 32rpx 0 0;
.title {
font-size: 32rpx;
color: #211d2e;
}
.table {
margin: 24rpx 0 0;
border-radius: 12rpx;
overflow: hidden;
.thead {
display: grid;
grid-template-columns: auto 240rpx 240rpx;
background-color: #f7f0ff;
text-align: center;
border-radius: 12rpx 12rpx 0 0;
.item {
padding: 20rpx;
border-right: 1px solid #eee4ff;
font-size: 28rpx;
color: #b982ff;
line-height: 36rpx;
&:last-of-type {
border: none;
}
}
}
.tbody {
.tr {
display: grid;
grid-template-columns: auto 240rpx 240rpx;
background-color: #ffffff;
text-align: center;
border-radius: 12rpx 12rpx 0 0;
border-bottom: 1px solid #eee4ff;
&:last-of-type {
border: none;
}
.td {
padding: 20rpx;
border-right: 1px solid #eee4ff;
font-size: 28rpx;
color: #211d2e;
line-height: 36rpx;
&:last-of-type {
border: none;
}
}
}
}
}
.table-none {
display: block;
margin: 30rpx auto;
width: 80%;
}
}
}
.page2 {
padding: 16rpx 30rpx 240rpx;
.title {
font-size: 32rpx;
color: #000;
margin-bottom: 24rpx;
}
.scroll {
position: relative;
overflow-x: auto;
display: flex;
flex-wrap: nowrap;
border-radius: 12rpx;
.table1 {
flex-shrink: 0;
position: sticky;
left: 0;
top: 0;
.thead {
display: grid;
grid-template-columns: 70rpx 220rpx;
text-align: center;
height: 160rpx;
.taside {
display: flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
color: #b982ff;
writing-mode: vertical-lr;
background-color: #f7f0ff;
border-right: 1px solid #eee4ff;
}
.tcontainer {
background-color: #f7f0ff;
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx;
border-right: 1px solid transparent;
font-size: 28rpx;
color: #b982ff;
line-height: 36rpx;
}
}
.tbody {
display: grid;
grid-template-columns: 70rpx 220rpx;
.taside {
display: flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
color: #211d2e;
writing-mode: vertical-lr;
background-color: #fff;
border-right: 1px solid #eee4ff;
}
.tcontainer {
.tr {
background-color: #ffffff;
text-align: center;
border-bottom: 1px solid #eee4ff;
&:last-of-type {
border: none;
}
.td {
height: 100rpx;
box-sizing: border-box;
padding: 22rpx;
border-right: 1px solid #eee4ff;
font-size: 30rpx;
color: #211d2e;
line-height: 40rpx;
display: flex;
align-items: center;
text-align: left;
&:last-of-type {
border: none;
}
}
.mtd {
height: 300rpx;
overflow: hidden;
}
}
}
}
}
.table2 {
flex-shrink: 0;
.thead {
background-color: #f7f0ff;
text-align: center;
border-radius: 12rpx 12rpx 0 0;
height: 160rpx;
.col {
text-align: center;
width: 200rpx;
padding: 22rpx;
font-size: 30rpx;
color: #b982ff;
border-left: 1px solid #eee4ff;
}
.row {
border-top: 1px solid #eee4ff;
display: flex;
}
.col-sctck {
position: sticky;
left: 290rpx;
width: 400rpx;
}
}
.tbody {
.tr {
height: 100rpx;
display: flex;
background-color: #ffffff;
text-align: center;
border-bottom: 1px solid #eee4ff;
&:last-of-type {
border: none;
}
.td {
padding: 22rpx;
width: 200rpx;
border-left: 1px solid #eee4ff;
font-size: 30rpx;
color: #211d2e;
line-height: 40rpx;
display: flex;
align-items: center;
text-align: left;
}
}
.mtr {
overflow: hidden;
height: 300rpx;
}
}
}
}
}
.page-footer {
position: fixed;
bottom: 0;
left: 0;
z-index: 10;
width: 100%;
padding: 20rpx 40rpx calc(env(safe-area-inset-bottom) + 20rpx);
box-sizing: border-box;
background-color: #fff;
.pf-btn {
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #ffffff;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
}

237
src/pages/d_qolDetail/index.ts

@ -0,0 +1,237 @@
const app = getApp<IAppOption>()
Page({
data: {
active: 0,
tab: 0,
id: '',
list1: [],
list2: [],
qolList: [
{
title: '1. 骑自行车或电动车',
answer: '',
answerList: {
4: '没学过',
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '2. 开车',
answer: '',
answerList: {
4: '没学过',
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '3. 室内走动',
answer: '',
answerList: {
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '4. 室外走动',
answer: '',
answerList: {
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '5. 看书看报',
answer: '',
answerList: {
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '6. 看电视',
answer: '',
answerList: {
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '7. 兴趣爱好及平时娱乐',
answer: '',
answerList: {
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '8. 过去的1周内,您是否觉得甲状腺相关眼病会阻碍您去做您想做的事',
answer: '',
answerList: {
3: '无影响',
2: '有点影响',
1: '严重影响',
},
},
{
title: '9. 您是否感觉到甲状腺相关眼病改变您的外表?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
{
title: '10. 您是否感觉到甲状腺相关眼病使您受到了别人的注视?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
{
title: '11. 您是否感觉到别人因为甲状腺相关眼病对您不友善?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
{
title: '12. 您是否感觉到甲状腺相关眼病影响您的自信心?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
{
title: '13. 您是否感觉到甲状腺相关眼病影响您结交新朋友?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
{
title: '14. 您是否感觉到甲状腺相关眼病使您收到了社会孤立?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
{
title: '15. 您是否感觉到甲状腺相关眼病使您拍照的次数减少了?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
{
title: '16. 您是否会试图掩饰甲状腺相关眼病给您带来的外貌变化?',
answer: '',
answerList: {
3: '不,没有',
2: '是的,有点',
1: '是的,严重',
},
},
],
},
onLoad(options) {
this.setData({
id: options.id,
})
app.waitLogin({ type: [2] }).then(() => {
this.getDetail()
this.getList()
})
},
getDetail() {
wx.ajax({
method: 'GET',
url: '?r=zd/doctor/patient/info',
data: { patientId: this.data.id },
}).then((res) => {
this.setData({
detail: {
...res,
},
})
})
},
onChange(e) {
this.setData({
active: e.detail.index,
})
this.getList()
},
getList() {
if (this.data.active == 0) {
this.getList1()
}
if (this.data.active == 1) {
this.getList2()
}
},
handleTab(e) {
const { index } = e.currentTarget.dataset
this.setData({
tab: index,
})
},
getList1() {
wx.ajax({
method: 'GET',
url: '?r=xd/doctor/qol/list',
data: {
patientId: this.data.id,
type: 1,
},
}).then((res) => {
this.setData({
list1: res,
})
})
},
getList2() {
wx.ajax({
method: 'GET',
url: '?r=xd/doctor/qol/list',
data: {
patientId: this.data.id,
type: 2,
},
}).then((res) => {
this.setData({
list2: res,
})
})
},
handleBackScroll() {
wx.redirectTo({
url: `/pages/d_patientDetail/index?id=${this.data.id}&anchor=qol`,
})
},
})
export {}

178
src/pages/d_qolDetail/index.wxml

@ -0,0 +1,178 @@
<van-tabs
active="{{ active }}"
color="#B982FF"
title-active-color="#B982FF"
title-inactive-color="#211D2E"
bind:change="onChange"
>
<van-tab title="按总分">
<view class="page1">
<view class="tabs">
<view class="tab-item {{tab==0&&'active'}}" bind:tap="handleTab" data-index="0">总分</view>
<view class="tab-item {{tab==1&&'active'}}" bind:tap="handleTab" data-index="1">视觉功能</view>
<view class="tab-item {{tab==2&&'active'}}" bind:tap="handleTab" data-index="2">外观影响</view>
</view>
<view class="container">
<view class="c-title">{{detail.Name}}的GO-QOL生活质量评测详情</view>
<view class="table" wx:if="{{list1.length}}">
<view class="thead">
<view class="item">日期</view>
<view class="item">得分</view>
<view class="item">与上次变化</view>
</view>
<view class="tbody">
<view class="tr" wx:for="{{list1}}" wx:key="index">
<view class="td">{{item.CreateDate}}</view>
<block wx:if="{{tab==0}}">
<view class="td">{{item.TotalScore}}</view>
<view class="td">{{item.changeTotalScore}}</view>
</block>
<block wx:elif="{{tab==1}}">
<view class="td">{{item.AppearanceScore}}</view>
<view class="td">{{item.changeAppearanceScore}}</view>
</block>
<block wx:elif="{{tab==2}}">
<view class="td">{{item.AppearanceScore}}</view>
<view class="td">{{item.changeAppearanceScore}}</view>
</block>
</view>
</view>
</view>
<image wx:else class="table-none" src="{{imageUrl}}none.png?t={{Timestamp}}"></image>
</view>
</view>
</van-tab>
<van-tab title="按答题选项">
<view class="page2">
<view class="title">xxx的GO-QOL生活质量评测详情</view>
<view class="scroll">
<view class="table1">
<view class="thead">
<view class="taside">类型</view>
<view class="tcontainer">问题</view>
</view>
<view class="tbody">
<view class="taside">视 觉</view>
<view class="tcontainer">
<view class="tr">
<view class="td">1.骑自行车或电动车</view>
</view>
<view class="tr">
<view class="td">2.开车</view>
</view>
<view class="tr">
<view class="td">3.室内走动</view>
</view>
<view class="tr">
<view class="td">4.室外走动</view>
</view>
<view class="tr">
<view class="td">5.看书看报</view>
</view>
<view class="tr">
<view class="td">6.看电视</view>
</view>
<view class="tr">
<view class="td">7.兴趣爱好及平时娱乐</view>
</view>
<view class="tr">
<view class="td mtd">8. 过去的1周内,您是否觉得甲状腺相关眼病会阻碍您去做您想做的事</view>
</view>
</view>
</view>
<view class="tbody">
<view class="taside" style="border-top: 1px solid #eee4ff">外 观</view>
<view class="tcontainer">
<view class="tr" style="border-top: 1px solid #eee4ff">
<view class="td mtd">9. 您是否感觉到甲状腺相关眼病改变您的外表?</view>
</view>
<view class="tr">
<view class="td mtd">10. 您是否感觉到甲状腺相关眼病使您受到了别人的注视?</view>
</view>
<view class="tr">
<view class="td mtd">11. 您是否感觉到别人因为甲状腺相关眼病对您不友善?</view>
</view>
<view class="tr">
<view class="td mtd">12. 您是否感觉到甲状腺相关眼病影响您的自信心?</view>
</view>
<view class="tr">
<view class="td mtd">13. 您是否感觉到甲状腺相关眼病影响您结交新朋友?</view>
</view>
<view class="tr">
<view class="td mtd">14. 您是否感觉到甲状腺相关眼病使您收到了社会孤立?</view>
</view>
<view class="tr">
<view class="td mtd">15. 您是否感觉到甲状腺相关眼病使您拍照的次数减少了?</view>
</view>
<view class="tr">
<view class="td mtd">16. 您是否会试图掩饰甲状腺相关眼病给您带来的外貌变化?</view>
</view>
</view>
</view>
</view>
<view class="table2">
<view class="thead">
<view class="col col-sctck">答案</view>
<view class="row">
<view class="col" wx:for="{{list2}}" wx:key="index">{{item.CreateDate}}</view>
</view>
</view>
<view class="tbody">
<view class="tr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[0].answerList[item.Question1]}}</view>
</view>
<view class="tr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[1].answerList[item.Question2]}}</view>
</view>
<view class="tr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[2].answerList[item.Question3]}}</view>
</view>
<view class="tr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[3].answerList[item.Question4]}}</view>
</view>
<view class="tr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[4].answerList[item.Question5]}}</view>
</view>
<view class="tr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[5].answerList[item.Question6]}}</view>
</view>
<view class="tr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[6].answerList[item.Question7]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[7].answerList[item.Question8]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[8].answerList[item.Question9]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[9].answerList[item.Question10]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[10].answerList[item.Question11]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[11].answerList[item.Question12]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[12].answerList[item.Question13]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[13].answerList[item.Question14]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[14].answerList[item.Question15]}}</view>
</view>
<view class="tr mtr">
<view class="td" wx:for="{{list2}}" wx:key="index">{{qolList[15].answerList[item.Question16]}}</view>
</view>
</view>
</view>
</view>
</view>
</van-tab>
</van-tabs>
<view class="page-footer">
<view class="pf-btn" bind:tap="handleBackScroll">查看生活质量评分趋势</view>
</view>

50
src/patient/pages/certReslove/index.ts

@ -1,45 +1,51 @@
const app = getApp<IAppOption>(); const app = getApp<IAppOption>()
let timer = null as null | number; let timer = null as null | number
Page({ Page({
data: { data: {
message: "3秒后自动进入", message: '3秒后自动进入',
drug: false, drug: false,
jump: 0,
}, },
onLoad(options) { onLoad(options) {
this.setData({ this.setData({
drug: Boolean(options.drug), drug: Boolean(options.drug),
}); jump: options.jump,
})
}, },
onReady() { onReady() {
setTimeout(() => { setTimeout(() => {
let time = 3; let time = 3
timer = setInterval(() => { timer = setInterval(() => {
time--; time--
this.setData({ this.setData({
message: time + "秒后自动进入", message: `${time}秒后自动进入`,
}); })
if (time === 0) { if (time === 0) {
clearInterval(timer as number); clearInterval(timer as number)
timer = null; timer = null
this.handleSubmit(); this.handleSubmit()
} }
}, 1000); }, 1000)
}, 1000); }, 1000)
}, },
handleSubmit() { handleSubmit() {
if (this.data.message != "0秒后自动进入") return; if (this.data.message != '0秒后自动进入')
return
if (app.globalData.backPage) { if (app.globalData.backPage) {
wx.reLaunch({ wx.reLaunch({
url: app.globalData.backPage, url: app.globalData.backPage,
}); })
app.globalData.backPage = null; app.globalData.backPage = null
return; return
} }
const backPage = app.globalData.backPage; let backPage = app.globalData.backPage
app.globalData.backPage = ""; if (backPage) {
backPage = backPage.includes('?') ? `${backPage}&jump=${this.data.jump}` : `${backPage}?jump=${this.data.jump}`
}
app.globalData.backPage = ''
wx.reLaunch({ wx.reLaunch({
url: backPage || "/patient/pages/index/index", url: backPage || `/patient/pages/index/index?jump=${this.data.jump}`,
}); })
}, },
}); })

26
src/patient/pages/doctor/index.scss

@ -140,8 +140,8 @@ page {
font-size: 22rpx; font-size: 22rpx;
line-height: 1; line-height: 1;
color: #ffffff; color: #ffffff;
background: #ffa300; background: linear-gradient(90deg, #ffd650 0%, #f8a61a 100%);
border-radius: 8rpx; border-radius: 6rpx;
} }
} }
.content { .content {
@ -168,16 +168,32 @@ page {
} }
} }
.tag { .tag {
margin-top: 16rpx;
margin-right: 22rpx; margin-right: 22rpx;
display: inline-block; display: inline-block;
padding: 4rpx 16rpx 4rpx 16rpx; padding: 4rpx 16rpx 4rpx 16rpx;
line-height: 1; line-height: 1;
font-size: 22rpx; font-size: 24rpx;
color: #b982ff; color: #b982ff;
border-radius: 8rpx; border-radius: 6rpx;
border: 1rpx solid #b982ff; border: 1rpx solid #b982ff;
} }
.medical {
margin-right: 22rpx;
vertical-align: bottom;
padding: 4rpx 8rpx;
line-height: 1;
font-size: 24rpx;
color: #ffffff;
border-radius: 6rpx;
display: inline-flex;
align-items: center;
gap: 2rpx;
background: linear-gradient(210deg, #1ec580 0%, #4feaaa 100%);
.m-icon {
width: 28rpx;
height: 28rpx;
}
}
.drug { .drug {
vertical-align: middle; vertical-align: middle;
padding-right: 8rpx; padding-right: 8rpx;

4
src/patient/pages/doctor/index.wxml

@ -85,6 +85,10 @@
></image> ></image>
</view> </view>
<view class="tag" wx:if="{{item.DoctorNum>0}}">{{item.DoctorNum}}名医生</view> <view class="tag" wx:if="{{item.DoctorNum>0}}">{{item.DoctorNum}}名医生</view>
<view class="medical" wx:if="{{item.isReimbursement==1}}">
<image class="m-icon" src="{{imageUrl}}icon132.png?t={{Timestamp}}"></image>
医保
</view>
<view class="drug" wx:if="{{item.IsHaveDrug==1}}"> <view class="drug" wx:if="{{item.IsHaveDrug==1}}">
<image class="drug-icon" src="{{imageUrl}}za-images//nrdl/drug.png"></image> <image class="drug-icon" src="{{imageUrl}}za-images//nrdl/drug.png"></image>
院内有药 院内有药

213
src/patient/pages/enterInfo/index.scss

@ -1,8 +1,10 @@
page {
background-color: #f6f8f9;
}
.page { .page {
min-height: 100vh; min-height: 100vh;
position: relative; position: relative;
box-sizing: border-box; box-sizing: border-box;
background-color: rgba(255, 255, 255, 1);
.bg { .bg {
width: 100%; width: 100%;
height: 512rpx; height: 512rpx;
@ -15,8 +17,29 @@
left: 0; left: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.container {
margin: 0 30rpx;
padding: 32rpx 32rpx 0;
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #ffffff 8.04%, #ffffff 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(70, 67, 81, 0.04);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.step {
display: flex;
align-items: center;
gap: 6rpx;
.s-item {
flex: 1;
height: 16rpx;
border-radius: 84rpx;
background-color: #fff;
&.active {
background-color: #b982ff;
}
}
}
.content { .content {
padding: 40rpx 40rpx 0; padding: 40rpx 0 0;
box-sizing: border-box; box-sizing: border-box;
border-radius: 24rpx; border-radius: 24rpx;
.switch { .switch {
@ -27,9 +50,9 @@
gap: 86rpx; gap: 86rpx;
.item { .item {
.icon-wrap { .icon-wrap {
background: rgba(255, 255, 255, 1); background: #f6f8f9;
border-radius: 24rpx 24rpx 24rpx 24rpx; border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 1px solid rgba(255, 255, 255, 1); border: 1px solid transparent;
text-align: center; text-align: center;
.icon { .icon {
display: block; display: block;
@ -41,12 +64,13 @@
.name { .name {
margin-top: 24rpx; margin-top: 24rpx;
font-size: 32rpx; font-size: 32rpx;
color: rgba(173, 172, 178, 1); color: #211d2e;
text-align: center; text-align: center;
} }
&.active { &.active {
.icon-wrap { .icon-wrap {
border-color: rgba(185, 130, 255, 1); border-color: rgba(185, 130, 255, 1);
background-color: transparent;
} }
.name { .name {
color: rgba(185, 130, 255, 1); color: rgba(185, 130, 255, 1);
@ -72,6 +96,12 @@
font-weight: normal; font-weight: normal;
line-height: 52rpx; line-height: 52rpx;
} }
&.required::before {
content: '*';
font-size: 32rpx;
color: #ef3939;
vertical-align: top;
}
} }
.row { .row {
margin-bottom: 40rpx; margin-bottom: 40rpx;
@ -128,7 +158,7 @@
align-items: center; align-items: center;
&::after { &::after {
flex-shrink: 0; flex-shrink: 0;
margin-right: 60rpx; margin-right: 20rpx;
content: ''; content: '';
width: 12rpx; width: 12rpx;
height: 12rpx; height: 12rpx;
@ -138,9 +168,8 @@
} }
.item { .item {
flex: 1; flex: 1;
padding: 12rpx 62rpx; padding: 10rpx 62rpx;
opacity: 1; opacity: 1;
border: 2rpx solid rgba(246, 248, 249, 1);
font-size: 32rpx; font-size: 32rpx;
color: rgba(173, 172, 178, 1); color: rgba(173, 172, 178, 1);
display: flex; display: flex;
@ -155,13 +184,10 @@
&.active { &.active {
color: rgba(185, 130, 255, 1); color: rgba(185, 130, 255, 1);
background: #faf6ff; background: #faf6ff;
border-color: rgba(185, 130, 255, 1);
} }
} }
.age-item { .age-item {
margin-bottom: 24rpx; height: 84rpx;
width: 208rpx;
height: 88rpx;
white-space: nowrap; white-space: nowrap;
font-size: 32rpx; font-size: 32rpx;
color: #999999; color: #999999;
@ -170,22 +196,85 @@
justify-content: center; justify-content: center;
border-radius: 16rpx; border-radius: 16rpx;
box-sizing: border-box; box-sizing: border-box;
border: 2rpx solid rgba(246, 248, 249, 1);
background-color: rgba(246, 248, 249, 1); background-color: rgba(246, 248, 249, 1);
&.active { &.active {
color: rgba(185, 130, 255, 1); color: rgba(185, 130, 255, 1);
border-color: rgba(185, 130, 255, 1);
background-color: #faf6ff; background-color: #faf6ff;
} }
} }
} }
.row-sub {
margin-top: 8rpx;
font-size: 28rpx;
color: #adacb2;
}
.tip {
margin-top: -24rpx;
margin-left: 32rpx;
font-size: 28rpx;
line-height: 40rpx;
color: rgba(185, 130, 255, 1);
}
}
}
}
.footer {
padding: 32rpx 40rpx 40rpx;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
box-sizing: border-box;
background-color: #fff;
box-shadow: 0 -10rpx 10rpx rgba(204, 204, 204, 0.1);
.next {
flex: 1;
text-align: center;
height: 88rpx;
line-height: 88rpx;
text-align: center;
border-radius: 100rpx;
font-size: 34rpx;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
color: #fff;
}
.cancel {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(173, 172, 178, 1);
text-align: center;
}
}
}
.popup-upload {
padding: 68rpx 36rpx 48rpx;
width: 670rpx;
box-sizing: border-box;
border-radius: 24rpx;
background: linear-gradient(180deg, #f1e6ff 0%, #ffffff 29.75%, #ffffff 100%);
.title {
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
text-align: center;
}
.content {
margin-top: 16rpx;
font-size: 32rpx;
color: #211d2e;
.high {
color: #b982ff;
}
}
.upload { .upload {
margin-top: 24rpx; width: 606rpx;
width: 208rpx; height: 300rpx;
.upload-container { .upload-container {
margin-top: 28rpx;
position: relative; position: relative;
width: 208rpx; width: 606rpx;
height: 208rpx; height: 300rpx;
border-radius: 16rpx; border-radius: 16rpx;
background: #f6f8f9; background: #f6f8f9;
overflow: hidden; overflow: hidden;
@ -209,8 +298,8 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
.d-icon { .d-icon {
width: 26rpx; font-size: 28rpx;
height: 26rpx; color: #fff;
} }
} }
.img { .img {
@ -224,78 +313,42 @@
width: 112rpx; width: 112rpx;
height: 80rpx; height: 80rpx;
} }
.name { .tip {
margin-top: 28rpx; margin-top: 10rpx;
font-size: 28rpx; font-size: 28rpx;
color: #adacb2; color: #adacb2;
text-align: center;
}
}
} }
.row-sub { .name {
margin-top: 8rpx; margin-top: 28rpx;
font-size: 28rpx; font-size: 28rpx;
color: #adacb2; color: #adacb2;
}
.tip {
margin-top: -24rpx;
margin-left: 46rpx;
font-size: 28rpx;
line-height: 40rpx;
color: rgba(185, 130, 255, 1);
}
}
}
.footer {
padding: 32rpx 40rpx 40rpx;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
box-sizing: border-box;
background-color: #fff;
box-shadow: 0 -10rpx 10rpx rgba(204, 204, 204, 0.1);
.next {
flex: 1;
text-align: center;
height: 88rpx;
line-height: 88rpx;
text-align: center;
border-radius: 100rpx;
font-size: 34rpx;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
color: #fff;
}
.cancel {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(173, 172, 178, 1);
text-align: center; text-align: center;
} }
} }
} }
.btn1 {
.popup { margin-top: 32rpx;
.popup-title { width: 606rpx;
height: 88rpx;
display: flex; display: flex;
justify-content: space-between; align-items: center;
padding: 20rpx 40rpx; justify-content: center;
font-size: 32rpx; font-size: 32rpx;
.clsoe { color: #ffffff;
color: #7f7f7f; line-height: 48rpx;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
} }
.sure { .btn2 {
color: #22c065; padding: 32rpx 0 0;
} font-size: 32rpx;
} color: #b982ff;
.popup-picker { text-align: center;
.picker-col {
padding: 10rpx 30rpx;
font-size: 28rpx;
line-height: 40rpx;
box-sizing: border-box;
display: flex;
align-items: center;
} }
} }
.popup-upload-close {
margin: 48rpx auto 0;
display: block;
width: 64rpx;
height: 64rpx;
} }

107
src/patient/pages/enterInfo/index.ts

@ -4,6 +4,8 @@ const app = getApp<IAppOption>()
Page({ Page({
data: { data: {
step: 0,
relationType: '1', relationType: '1',
name: '', name: '',
gender: '', gender: '',
@ -16,6 +18,9 @@ Page({
isKnowTituyo: '', isKnowTituyo: '',
isUseTituyo: '', isUseTituyo: '',
prescriptionImg: '', prescriptionImg: '',
diseaseStage: '',
diseasePeriod: '',
tituyo: {},
diagnoseTypeShow: false, diagnoseTypeShow: false,
DiagnoseType: app.globalData.DiagnoseType, DiagnoseType: app.globalData.DiagnoseType,
@ -29,14 +34,15 @@ Page({
proces: '0', proces: '0',
dict: {}, dict: {},
bolList: {
1: '是', show: false,
2: '否',
},
popupShow: false, popupShow: false,
popupType: 'popup7', // popupType: 'popup7',
popupType: 'popup15',
popupParams: {} as any, popupParams: {} as any,
jump: 0,
}, },
onLoad(options) { onLoad(options) {
this.setData({ this.setData({
@ -52,6 +58,10 @@ Page({
name: zdUserInfo.PatientName, name: zdUserInfo.PatientName,
gender: zdUserInfo.Gender, gender: zdUserInfo.Gender,
ageRange: zdUserInfo.AgeRange, ageRange: zdUserInfo.AgeRange,
IsGraves: zdUserInfo.IsGraves,
diseaseStage: zdUserInfo.DiseaseStage,
diseasePeriod: zdUserInfo.DiseaseStage,
HasTedSurgery: zdUserInfo.HasTedSurgery,
}) })
}) })
}) })
@ -91,6 +101,18 @@ Page({
IsGraves: id, IsGraves: id,
}) })
}, },
handleSelectDiseaseStage(e: WechatMiniprogram.CustomEvent) {
const { id } = e.currentTarget.dataset
this.setData({
diseaseStage: id,
})
},
handleSelectDiseasePeriod(e: WechatMiniprogram.CustomEvent) {
const { id } = e.currentTarget.dataset
this.setData({
diseasePeriod: id,
})
},
handleSelectHasTedSurgery(e: WechatMiniprogram.CustomEvent) { handleSelectHasTedSurgery(e: WechatMiniprogram.CustomEvent) {
const { id } = e.currentTarget.dataset const { id } = e.currentTarget.dataset
this.setData({ this.setData({
@ -99,8 +121,15 @@ Page({
}, },
handleSelectKnowTituyo(e) { handleSelectKnowTituyo(e) {
const { id } = e.currentTarget.dataset const { id } = e.currentTarget.dataset
const { tituyo } = this.data
let show = false
tituyo[id] = !tituyo[id]
if (id == 4 && tituyo[id]) {
show = true
}
this.setData({ this.setData({
isKnowTituyo: id, tituyo,
show,
}) })
}, },
handleSelectUseTituyo(e) { handleSelectUseTituyo(e) {
@ -112,35 +141,60 @@ Page({
scrollTop: 10000, scrollTop: 10000,
}) })
}, },
handleNext() {
const { name, gender, ageRange, relationType } = this.data
if (!name || !gender || !ageRange || !relationType) {
wx.showToast({ title: '完善个人信息,可获得【医生】更多关注', icon: 'none' })
return
}
this.setData({
step: 1,
})
},
handlePopupSubmit() {
const { prescriptionImg } = this.data
if (!prescriptionImg) {
wx.showToast({
icon: 'none',
title: '请上传您的处方证明',
})
return
}
this.setData({
show: false,
})
this.handleSubmit()
},
handlePopupJump() {
this.setData({
show: false,
jump: 1,
})
this.handleSubmit()
},
handleSubmit() { handleSubmit() {
app.mpBehavior({ PageName: 'BTN_PatientInfoComfirm' }) app.mpBehavior({ PageName: 'BTN_PatientInfoComfirm' })
if (this.data.submiting) if (this.data.submiting)
return return
const { const {
name, name,
gender, gender,
ageRange, ageRange,
relationType, relationType,
diseaseStage,
diseasePeriod,
IsGraves, IsGraves,
HasTedSurgery, HasTedSurgery,
isKnowTituyo, tituyo,
isUseTituyo,
prescriptionImg, prescriptionImg,
jump,
} = this.data } = this.data
const { registrationSource, registChannel, regBusinessId, WorkerId, IsAliQiWei } = app.globalData const { registrationSource, registChannel, regBusinessId, WorkerId, IsAliQiWei } = app.globalData
const { doctorId, inviteChan, proMethodId } = app.globalData.scene const { doctorId, inviteChan, proMethodId } = app.globalData.scene
let toast = '' if (!name || !gender || !ageRange || !relationType || !diseaseStage || !diseasePeriod) {
// if (!diagnosisTime) toast = "确诊时间不能为空"; wx.showToast({ title: '完善个人信息,可获得【医生】更多关注', icon: 'none' })
// if (!birth) toast = "出生日期不能为空";
if (!gender)
toast = '请选择性别'
if (!ageRange)
toast = '请选择年龄范围'
if (!name)
toast = '姓名不能为空'
if (toast) {
wx.showToast({ title: toast, icon: 'none' })
return return
} }
@ -167,9 +221,11 @@ Page({
regBusinessId, regBusinessId,
IsGraves, IsGraves,
HasTedSurgery, HasTedSurgery,
isKnowTituyo, diseaseStage,
isUseTituyo, diseasePeriod,
prescriptionImg, prescriptionImg,
tituyo: Object.keys(tituyo),
WorkerId, WorkerId,
inviteDoctorId: doctorId, inviteDoctorId: doctorId,
inviteChannel: inviteChan, inviteChannel: inviteChan,
@ -180,7 +236,7 @@ Page({
.then((_res) => { .then((_res) => {
app.updateLoginInfo(() => { app.updateLoginInfo(() => {
wx.reLaunch({ wx.reLaunch({
url: navUrl, url: navUrl.includes('?') ? `${navUrl}&jump=${jump}` : `${navUrl}?jump=${jump}`,
}) })
this.setData({ this.setData({
submiting: false, submiting: false,
@ -248,6 +304,11 @@ Page({
popupType: '', popupType: '',
}) })
}, },
handlePopupClose() {
this.setData({
show: false,
})
},
handlePreview() { handlePreview() {
wx.previewImage({ wx.previewImage({
urls: [this.data.prescriptionImg], urls: [this.data.prescriptionImg],

105
src/patient/pages/enterInfo/index.wxml

@ -1,22 +1,28 @@
<view class="page"> <view class="page">
<navbar fixed title="注册信息" custom-style="background:{{background}}"></navbar> <navbar fixed title="注册" custom-style="background:{{background}}"></navbar>
<image class="bg" src="{{imageUrl}}bg10.png?t={{Timestamp}}"></image> <image class="bg" src="{{imageUrl}}bg10.png?t={{Timestamp}}"></image>
<view class="page-container" style="padding-top:{{pageTop+24}}px;"> <view class="page-container" style="padding-top:{{pageTop+24}}px;">
<view class="content"> <view class="container">
<view class="step">
<view class="s-item active"></view>
<view class="s-item {{step==1 && 'active'}}"></view>
</view>
<view class="content" wx:if="{{step==0}}">
<view class="switch"> <view class="switch">
<view class="item {{relationType==1 && 'active'}}" bind:tap="handleRelationType" data-id="1"> <view class="item {{relationType==1 && 'active'}}" bind:tap="handleRelationType" data-id="1">
<view class="icon-wrap"> <view class="icon-wrap">
<image class="icon" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image>
</view> </view>
<view class="name">患者本人</view> <view class="name">我是本人</view>
</view> </view>
<view class="item {{relationType==2 && 'active'}}" bind:tap="handleRelationType" data-id="2"> <view class="item {{relationType==2 && 'active'}}" bind:tap="handleRelationType" data-id="2">
<view class="icon-wrap"> <view class="icon-wrap">
<image class="icon" src="{{imageUrl}}icon29.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}icon29.png?t={{Timestamp}}"></image>
</view> </view>
<view class="name">患者亲友</view> <view class="name">我是亲友</view>
</view> </view>
</view> </view>
<view class="row-title required">患者姓名</view>
<view class="row"> <view class="row">
<input <input
model:value="{{name}}" model:value="{{name}}"
@ -28,7 +34,7 @@
/> />
</view> </view>
<view class="tip">请您输入真实姓名,便于医生识别随访</view> <view class="tip">请您输入真实姓名,便于医生识别随访</view>
<view class="row-title">患者性别</view> <view class="row-title required">患者性别</view>
<view class="row"> <view class="row">
<view class="item {{gender==2 && 'active'}}" bind:tap="handleGender" data-id="2"> <view class="item {{gender==2 && 'active'}}" bind:tap="handleGender" data-id="2">
<image class="icon" src="{{imageUrl}}{{gender==2 ? 'icon57' : 'icon55'}}.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}{{gender==2 ? 'icon57' : 'icon55'}}.png?t={{Timestamp}}"></image>
@ -39,7 +45,7 @@
</view> </view>
</view> </view>
<view class="row-title">患者年龄范围</view> <view class="row-title required">患者年龄范围</view>
<view class="row row-age"> <view class="row row-age">
<view <view
class="age-item {{ageRange==index && 'active'}}" class="age-item {{ageRange==index && 'active'}}"
@ -51,62 +57,67 @@
{{item}} {{item}}
</view> </view>
</view> </view>
<view class="row-title">
是否有Graves病病史
<text class="sub">(非必填)</text>
</view> </view>
<view class="content" wx:elif="{{step==1}}">
<view class="row-title required">您的甲状腺眼病分级</view>
<view class="row row-age"> <view class="row row-age">
<view <view
class="age-item {{IsGraves==index && 'active'}}" class="age-item {{diseaseStage==index && 'active'}}"
data-id="{{index}}" data-id="{{index}}"
wx:for="{{dict.IsGraves}}" wx:for="{{dict.StageText}}"
wx:key="index" wx:key="index"
bind:tap="handleSelectIsGraves" bind:tap="handleSelectDiseaseStage"
> >
{{item}} {{item}}
</view> </view>
</view> </view>
<view class="row-title"> <view class="row-title required">您的甲状腺眼病分期</view>
是否有TED(甲状腺眼突)及其相关眼部手术史
<text class="sub">(非必填)</text>
</view>
<view class="row row-age"> <view class="row row-age">
<view <view
class="age-item {{HasTedSurgery==index && 'active'}}" class="age-item {{diseasePeriod==index && 'active'}}"
data-id="{{index}}" data-id="{{index}}"
wx:for="{{dict.HasTedSurgery}}" wx:for="{{dict.PeriodText}}"
wx:key="index" wx:key="index"
bind:tap="handleSelectHasTedSurgery" bind:tap="handleSelectDiseasePeriod"
> >
{{item}} {{item}}
</view> </view>
</view> </view>
<view class="row-title"> <view class="row-title">是否有Graves病病史</view>
是否了解替妥尤单抗N01 <view class="row row-age">
<text class="sub">(非必填)</text> <view
class="age-item {{IsGraves==index && 'active'}}"
data-id="{{index}}"
wx:for="{{dict.IsGraves}}"
wx:key="index"
bind:tap="handleSelectIsGraves"
>
{{item}}
</view>
</view> </view>
<view class="row-title">是否有TED(甲状腺眼突) 及其相关眼部手术史</view>
<view class="row row-age"> <view class="row row-age">
<view <view
class="age-item {{isKnowTituyo==index && 'active'}}" class="age-item {{HasTedSurgery==index && 'active'}}"
data-id="{{index}}" data-id="{{index}}"
wx:for="{{bolList}}" wx:for="{{dict.HasTedSurgery}}"
wx:key="index" wx:key="index"
bind:tap="handleSelectKnowTituyo" bind:tap="handleSelectHasTedSurgery"
> >
{{item}} {{item}}
</view> </view>
</view> </view>
<view class="row-title"> <view class="row-title">
是否有使用替妥尤单抗N01 如何看待新药替妥尤单抗
<text class="sub">(非必填)</text> <text class="sub">(多选)</text>
</view> </view>
<view class="row row-age"> <view class="row row-age">
<view <view
class="age-item {{isUseTituyo==index && 'active'}}" class="age-item {{tituyo[index] && 'active'}}"
data-id="{{index}}" data-id="{{index}}"
wx:for="{{bolList}}" wx:for="{{dict.tituyoMap}}"
wx:key="index" wx:key="index"
bind:tap="handleSelectUseTituyo" bind:tap="handleSelectKnowTituyo"
> >
{{item}} {{item}}
</view> </view>
@ -116,28 +127,44 @@
请上传您的处方证明 请上传您的处方证明
<view class="rt-content">处方证明审核通过后,即可享受平台全部服务</view> <view class="rt-content">处方证明审核通过后,即可享受平台全部服务</view>
</view> </view>
<view class="row-sub">您可以上传您的诊断处方、住院小结等</view>
</block>
</view>
</view>
</view>
<view class="footer">
<view wx:if="{{step==0}}" bind:tap="handleNext" class="next">下一步</view>
<view wx:elif="{{step==1}}" bind:tap="handleSubmit" class="next">完成注册</view>
</view>
</view>
<van-popup show="{{ show }}" round custom-style="background:transparent">
<view class="popup-upload">
<view class="title">请上传您的处方证明</view>
<view class="content">
完善个人信息,可获得
<text class="high">【医生】</text>
更多关注
</view>
<uploadFile class="upload" accept="image" bind:file="handleSetData"> <uploadFile class="upload" accept="image" bind:file="handleSetData">
<view class="upload-container"> <view class="upload-container">
<view class="upload-img" wx:if="{{prescriptionImg}}"> <view class="upload-img" wx:if="{{prescriptionImg}}">
<view class="del" catchtap="handleDelData"> <view class="del" catchtap="handleDelData">
<image class="d-icon" src="{{imageUrl}}icon77.png?t={{Timestamp}}"></image> <van-icon class="d-icon" name="delete-o" />
</view> </view>
<image class="img" src="{{prescriptionImg}}" mode="aspectFill" catch:tap="handlePreview"></image> <image class="img" src="{{prescriptionImg}}" mode="aspectFill" catch:tap="handlePreview"></image>
</view> </view>
<block wx:else> <block wx:else>
<van-icon name="plus" style="font-size: 80rpx; color: rgba(173, 172, 178, 0.5)" /> <van-icon name="plus" style="font-size: 80rpx; color: rgba(173, 172, 178, 0.5)" />
<view class="tip">您可以上传您的诊断处方、住院小结等</view>
</block> </block>
</view> </view>
</uploadFile> </uploadFile>
<view class="row-sub">您可以上传您的诊断处方、住院小结等</view> <view class="btn1" bind:tap="handlePopupSubmit">完成注册</view>
</block> <view class="btn2" bind:tap="handlePopupJump">跳过,并完成注册</view>
</view>
</view>
<view class="footer">
<view bind:tap="handleSubmit" class="next">立即进入</view>
<view bind:tap="handleVisitors" class="cancel">随便看看</view>
</view>
</view> </view>
<image class="popup-upload-close" src="{{imageUrl}}icon11.png?t={{Timestamp}}" bind:tap="handlePopupClose"></image>
</van-popup>
<popup <popup
show="{{popupShow}}" show="{{popupShow}}"

81
src/patient/pages/hospital/index.scss

@ -1,9 +1,13 @@
page {
background-color: #f6f8f9;
}
.scroll-view { .scroll-view {
height: 100vh; height: 100vh;
} }
.page { .page {
background-color: #fafafa; background-color: #f6f8f9;
min-height: 70vh; min-height: 70vh;
padding-bottom: 240rpx;
.banner { .banner {
padding: 44rpx 30rpx 0; padding: 44rpx 30rpx 0;
display: flex; display: flex;
@ -23,8 +27,6 @@
margin-left: 24rpx; margin-left: 24rpx;
flex: 1; flex: 1;
.title { .title {
display: flex;
align-items: center;
.name { .name {
font-size: 36rpx; font-size: 36rpx;
color: #211d2e; color: #211d2e;
@ -32,14 +34,31 @@
font-weight: bold; font-weight: bold;
} }
.tag { .tag {
flex-shrink: 0; display: inline-block;
margin-left: 12rpx; margin-right: 12rpx;
padding: 6rpx 12rpx; padding: 6rpx 12rpx;
font-size: 22rpx; font-size: 24rpx;
line-height: 1; line-height: 1;
color: #ffffff; color: #ffffff;
background: #ffa300; background: linear-gradient(90deg, #ffd650 0%, #f8a61a 100%);
border-radius: 8rpx; border-radius: 6rpx;
}
.medical {
margin-right: 12rpx;
vertical-align: bottom;
padding: 4rpx 8rpx;
line-height: 1;
font-size: 24rpx;
color: #ffffff;
border-radius: 6rpx;
display: inline-flex;
align-items: center;
gap: 2rpx;
background: linear-gradient(210deg, #1ec580 0%, #4feaaa 100%);
.m-icon {
width: 28rpx;
height: 28rpx;
}
} }
} }
.content { .content {
@ -49,7 +68,10 @@
margin-bottom: 16rpx; margin-bottom: 16rpx;
font-size: 32rpx; font-size: 32rpx;
color: #211d2e; color: #211d2e;
display: flex;
align-items: flex-start;
.icon { .icon {
flex-shrink: 0;
margin-right: 10rpx; margin-right: 10rpx;
width: 36rpx; width: 36rpx;
height: 36rpx; height: 36rpx;
@ -124,15 +146,20 @@
box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(0, 0, 0, 0.05); box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(0, 0, 0, 0.05);
border: 1rpx solid #ebecee; border: 1rpx solid #ebecee;
border-radius: 24rpx; border-radius: 24rpx;
.m-title { .m-header {
position: relative; padding: 38rpx 32rpx 0;
height: 88rpx; gap: 16rpx;
.m-title-img { display: flex;
position: absolute; align-items: center;
top: -20rpx; font-size: 36rpx;
left: 0; color: #211d2e;
width: 100%; font-weight: bold;
height: 108rpx; &::before {
content: '';
width: 8rpx;
height: 36rpx;
background: #b982ff;
border-radius: 2rpx 2rpx 2rpx 2rpx;
} }
} }
} }
@ -226,4 +253,24 @@
} }
} }
} }
.page-footer {
position: fixed;
bottom: 0;
left: 0;
z-index: 10;
width: 100%;
padding: 20rpx 40rpx calc(env(safe-area-inset-bottom) + 20rpx);
box-sizing: border-box;
background-color: #fff;
.pf-btn {
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #ffffff;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
}
} }

7
src/patient/pages/hospital/index.ts

@ -20,7 +20,7 @@ Page({
}, },
}, },
onLoad(options) { onLoad(options) {
app.zdWaitLogin().then((_res) => { app.waitLogin({ type: [0, 1] }).then(() => {
this.setData({ this.setData({
id: options.id, id: options.id,
}) })
@ -193,6 +193,11 @@ Page({
url, url,
}) })
}, },
handleMedical() {
wx.navigateTo({
url: `/patient/pages/medicalDetail/index?id=${this.data.detail.hospitalPolicyId}`,
})
},
handleBack() { handleBack() {
wx.navigateBack() wx.navigateBack()
}, },

11
src/patient/pages/hospital/index.wxml

@ -11,6 +11,10 @@
<view class="tag" wx:if="{{detail.HospitalClassificationName ||detail.HospitalLevelName}}"> <view class="tag" wx:if="{{detail.HospitalClassificationName ||detail.HospitalLevelName}}">
{{detail.HospitalClassificationName}}{{detail.HospitalLevelName}} {{detail.HospitalClassificationName}}{{detail.HospitalLevelName}}
</view> </view>
<view class="medical" wx:if="{{detail.isReimbursement==1}}">
<image class="m-icon" src="{{imageUrl}}icon132.png?t={{Timestamp}}"></image>
医保
</view>
</view> </view>
<view class="content"> <view class="content">
<view class="inner"> <view class="inner">
@ -38,9 +42,7 @@
</view> </view>
<view class="module" wx:if="{{detail.doctors && detail.doctors.length}}"> <view class="module" wx:if="{{detail.doctors && detail.doctors.length}}">
<view class="module-container"> <view class="module-container">
<view class="m-title"> <view class="m-header">就诊医生</view>
<image class="m-title-img" src="{{imageUrl}}title10.png?t={{Timestamp}}"></image>
</view>
<view <view
class="new-card" class="new-card"
wx:for="{{detail.doctors}}" wx:for="{{detail.doctors}}"
@ -72,6 +74,9 @@
<pagination wx:if="{{!detail.doctors.length}}" pagination="{{pagination}}"></pagination> <pagination wx:if="{{!detail.doctors.length}}" pagination="{{pagination}}"></pagination>
</view> </view>
</view> </view>
<view class="page-footer" wx:if="{{detail.hospitalPolicyId}}">
<view class="pf-btn" bind:tap="handleMedical">查看医保信息</view>
</view>
</view> </view>
</scroll-view> </scroll-view>

282
src/patient/pages/index/index.scss

@ -17,112 +17,266 @@ page {
.doctor { .doctor {
margin: $page-margin $page-margin 0; margin: $page-margin $page-margin 0;
padding: 32rpx; padding: 32rpx;
border-radius: 24rpx;
background: linear-gradient(195deg, #ffe3fc 0%, #ecddff 100%);
.container {
display: flex; display: flex;
align-items: center;
justify-content: space-between; justify-content: space-between;
border-radius: 21rpx; gap: 24rpx;
.avatar { .avatar {
width: 104rpx; position: relative;
height: 104rpx; flex-shrink: 0;
width: 108rpx;
height: 108rpx;
.a-img { .a-img {
display: block;
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 50%; border-radius: 50%;
border: 3rpx solid #fff; }
box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(52, 44, 46, 0.17); .a-icon {
position: absolute;
top: 0;
right: 0;
width: 28rpx;
height: 28rpx;
} }
} }
.wrap { .wrap {
padding: 6rpx 16rpx 0;
flex: 1; flex: 1;
.name-wrap { .w-header {
display: flex; display: flex;
align-items: baseline;
.name { .name {
position: relative; margin-right: 8rpx;
font-size: 36rpx; font-size: 36rpx;
color: rgba(51, 51, 51, 1); color: #211d2e;
font-weight: bold; font-weight: bold;
display: flex; max-width: 6em;
align-items: center;
line-height: 40rpx;
.n-content {
max-width: 8em;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.bubble { .label {
margin-left: 8rpx; width: 172rpx;
padding: 0 14rpx; height: 36rpx;
height: 30rpx;
line-height: 30rpx;
box-sizing: border-box;
text-align: center;
font-size: 22rpx;
color: rgba(255, 255, 255, 1);
background: #ee951b;
border-radius: 32rpx;
position: relative;
&::after {
position: absolute;
left: 14rpx;
bottom: -8rpx;
content: '';
width: 0;
height: 0;
border-style: solid;
border-width: 13rpx 13rpx 0 0;
border-color: #ee951b transparent transparent transparent;
}
}
} }
} }
.content { .w-content {
margin-top: 16rpx; margin-top: 18rpx;
font-size: 32rpx; font-size: 28rpx;
line-height: 38rpx;
color: #211d2e; color: #211d2e;
.icon { line-height: 32rpx;
vertical-align: -4rpx;
display: inline-block;
width: 36rpx;
height: 36rpx;
}
} }
.hostipal { .hostipal {
margin-top: 16rpx; margin-top: 16rpx;
font-size: 28rpx; font-size: 28rpx;
color: #999999; color: #adacb2;
line-height: 36rpx; line-height: 36rpx;
overflow: hidden; overflow: hidden;
.h-content { .h-content {
margin-right: 16rpx; margin-right: 16rpx;
display: inline; display: inline-block;
max-width: 10em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.tag { .tag {
display: inline-block; display: inline-block;
padding: 6rpx 12rpx 4rpx; padding: 6rpx 12rpx 4rpx;
font-size: 22rpx; font-size: 24rpx;
line-height: 1; line-height: 1;
color: #ffffff; color: #f8a61b;
background: linear-gradient(90deg, #ffd650 0%, #f8a61a 100%); background: #fff4d2;
line-height: 24rpx; line-height: 24rpx;
border-radius: 8rpx 8rpx 8rpx 8rpx; border-radius: 8rpx 8rpx 8rpx 8rpx;
} }
} }
} }
.more {
width: 48rpx;
height: 48rpx;
} }
.btn { }
margin-top: 32rpx; .kkd1 {
height: 64rpx; margin: $page-margin;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 30rpx;
.k-qol {
padding: 48rpx 32rpx 22rpx;
background: linear-gradient(
180deg,
rgba(239, 226, 255, 0.52) 0%,
rgba(255, 255, 255, 0.96) 26.03%,
#ffffff 100%
);
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid #ffffff;
.title {
font-size: 36rpx;
color: #211d2e;
line-height: 48rpx;
display: flex;
align-items: flex-start;
gap: 8rpx;
font-weight: bold;
.k-question {
width: 24rpx;
height: 24rpx;
}
}
.none {
margin: 30rpx -32rpx -100rpx;
width: 318rpx;
height: 170rpx;
display: block;
}
.content {
margin-top: 12rpx;
display: flex;
align-self: baseline;
justify-content: space-between;
.num {
white-space: nowrap;
font-size: 62rpx;
color: #ffa300;
font-weight: bold;
.sub {
font-size: 28rpx; font-size: 28rpx;
color: #ffffff; color: #69686e;
text-align: center; font-weight: normal;
line-height: 64rpx; }
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%); }
border-radius: 64rpx 64rpx 64rpx 64rpx; .icon {
width: 96rpx;
height: 96rpx;
}
}
.k-footer {
margin-top: 34rpx;
display: flex;
align-items: center;
justify-content: space-between;
.date {
font-size: 32rpx;
color: #69686e;
}
.no-tip {
font-size: 28rpx;
color: rgba(76, 66, 107, 0.51);
}
.add {
flex-shrink: 0;
width: 76rpx;
height: 76rpx;
}
}
}
.k-hormones {
position: relative;
padding: 48rpx 32rpx 22rpx;
background: linear-gradient(
180deg,
rgba(239, 226, 255, 0.52) 0%,
rgba(255, 255, 255, 0.96) 26.03%,
#ffffff 100%
);
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid #ffffff;
.status {
position: absolute;
top: 10rpx;
right: 10rpx;
width: 104rpx;
height: 104rpx;
}
.title {
position: relative;
z-index: 1;
font-size: 36rpx;
color: #211d2e;
line-height: 48rpx;
display: flex;
align-items: flex-start;
gap: 8rpx;
font-weight: bold;
.k-question {
width: 24rpx;
height: 24rpx;
}
}
.none {
margin: 30rpx -32rpx -100rpx;
width: 318rpx;
height: 170rpx;
display: block;
}
.content {
margin-top: 12rpx;
display: flex;
align-self: baseline;
justify-content: space-between;
.num {
white-space: nowrap;
font-size: 62rpx;
color: #b982ff;
font-weight: bold;
.sub {
font-size: 28rpx;
color: #69686e;
font-weight: normal;
letter-spacing: normal;
}
}
}
.k-footer {
margin-top: 34rpx;
display: flex;
align-items: center;
justify-content: space-between;
.date {
font-size: 32rpx;
color: #69686e;
}
.no-tip {
font-size: 28rpx;
color: rgba(76, 66, 107, 0.51);
}
.add {
flex-shrink: 0;
width: 76rpx;
height: 76rpx;
}
}
}
}
.kkd2 {
margin: $page-margin;
display: flex;
align-items: center;
gap: 30rpx;
.k-item {
flex: 1;
background: linear-gradient(0, #ffffff 0%, #f8f3ff 100%);
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid #ffffff;
.wrap {
padding: 28rpx 0 40rpx 26rpx;
.title {
font-size: 36rpx;
color: #b982ff;
font-weight: bold;
}
.content {
margin-top: 8rpx;
font-size: 28rpx;
color: rgba(76, 66, 107, 0.51);
}
}
.icon {
width: 122rpx;
height: 134rpx;
}
} }
} }
.qol { .qol {

203
src/patient/pages/index/index.ts

@ -7,6 +7,10 @@ Page({
data: { data: {
today: dayjs().format('YYYY年MM月DD日 dddd'), today: dayjs().format('YYYY年MM月DD日 dddd'),
qolShow: false,
hormoneShow: false,
medicalInsuranceShow: false,
hospitalMapShow: false,
configList: [], configList: [],
infoList: [] as any, infoList: [] as any,
zdUserInfo: {} as any, zdUserInfo: {} as any,
@ -14,7 +18,7 @@ Page({
regGuide: true, regGuide: true,
isLogin: 1, isLogin: 1,
qolDetail: {}, qolDetail: {} as any,
hormoneDetail: { recordId: '' }, hormoneDetail: { recordId: '' },
adlList: [], adlList: [],
@ -33,6 +37,10 @@ Page({
// toastType:"dedicatedDoctor", // toastType:"dedicatedDoctor",
// toastType: 'public-toast', // toastType: 'public-toast',
// toastType: 'drug-guide', // toastType: 'drug-guide',
// toastType: 'medical-guide',
// toastType: 'question-toast',
// toastType: 'guideEnterInfo',
// toastType: 'guideEnterInfoJump',
toastShow: false, toastShow: false,
toastType: '', toastType: '',
@ -60,6 +68,13 @@ Page({
}) })
}) })
if (options.jump == '1') {
this.setData({
toastShow: true,
toastType: 'guideEnterInfoJump',
})
}
this.setData({ this.setData({
sliderTop: systemInfo.screenHeight - 160, sliderTop: systemInfo.screenHeight - 160,
options, options,
@ -97,6 +112,8 @@ Page({
}) })
}, },
async getPopup() { async getPopup() {
if (this.data.toastShow)
return
const data1 = await wx.ajax({ const data1 = await wx.ajax({
method: 'GET', method: 'GET',
url: '?r=zd/popup/info', url: '?r=zd/popup/info',
@ -110,6 +127,7 @@ Page({
toastType: 'dedicatedDoctor', toastType: 'dedicatedDoctor',
toastParams: {}, toastParams: {},
}) })
return
} }
const data2 = await wx.ajax({ const data2 = await wx.ajax({
@ -125,6 +143,37 @@ Page({
toastType: 'drug-guide', toastType: 'drug-guide',
toastParams: {}, toastParams: {},
}) })
return
}
const data3 = await wx.ajax({
method: 'GET',
url: '?r=zd/popup/get-popup',
data: {
type: 3,
},
})
if (data3.showAlert) {
this.setData({
toastShow: data3.showAlert,
toastType: 'medical-guide',
toastParams: {},
})
}
const data4 = await wx.ajax({
method: 'GET',
url: '?r=zd/popup/get-need-popup',
data: {
type: 1,
},
})
if (data4.showAlert) {
this.setData({
toastShow: data4.showAlert,
toastType: 'guideEnterInfo',
toastParams: {},
})
} }
}, },
getUnreadCount() { getUnreadCount() {
@ -150,43 +199,72 @@ Page({
}) })
}, },
getConfig(zdUserInfo: any) { getConfig(zdUserInfo: any) {
let UserType = zdUserInfo.UserType // 处理用户类型
if (UserType <= 2) { const UserType = zdUserInfo.UserType <= 2 ? 1 : Math.min(zdUserInfo.UserType, 3)
UserType = 1
}
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: `?r=zd/mini-conf/get-config`, url: `?r=zd/mini-conf/get-config`,
data: { userType: UserType > 3 ? 3 : UserType }, data: { userType: UserType },
}).then((res) => { }).then((res) => {
res = res.map((item: any) => { // 过滤子列表
if (item.code == 'spread1' || item.code == 'spread2' || item.code == 'serviceConf') { const processedRes = res.map((item: any) => {
item.subList = item.subList.filter((subItem) => { if (['spread1', 'spread2', 'serviceConf'].includes(item.code)) {
return subItem.showStatus == 1 item.subList = item.subList?.filter((subItem: any) => subItem.showStatus == 1) || []
})
} }
return item return item
}) })
this.setData({
configList: res, // 初始化显示状态
}) const statusMap = {
res.forEach((item) => { qolShow: false,
if (item.code == 'article') { hormoneShow: false,
this.getInfoList(item.configId) medicalInsuranceShow: false,
hospitalMapShow: false,
} }
if (item.code == 'adl') {
this.getQol() // 处理配置项
processedRes.forEach((item: any) => {
const { code, showStatus, configId, showNum } = item
// 设置显示状态
if (code === 'medicalInsurance' && showStatus == 1) {
statusMap.medicalInsuranceShow = true
} }
if (item.code == 'hormone') { if (code === 'hospitalMap' && showStatus == 1) {
this.getHormone() statusMap.hospitalMapShow = true
} }
if (item.code == 'activity2') { if (code === 'adl' && showStatus == 1) {
this.getActivity(item.configId, item.showNum, 'liveList') statusMap.qolShow = true
} }
if (item.code == 'activity1') { if (code === 'hormone' && showStatus == 1) {
this.getActivity(item.configId, item.showNum, 'liveDownList') statusMap.hormoneShow = true
}
// 调用对应方法
switch (code) {
case 'article':
this.getInfoList(configId)
break
case 'adl':
this.getQol()
break
case 'hormone':
this.getHormone()
break
case 'activity2':
this.getActivity(configId, showNum, 'liveList')
break
case 'activity1':
this.getActivity(configId, showNum, 'liveDownList')
break
} }
}) })
this.setData({
configList: processedRes,
...statusMap,
})
}) })
}, },
setPopupInfo() { setPopupInfo() {
@ -222,7 +300,8 @@ Page({
this.setData({ this.setData({
qolDetail: { qolDetail: {
...res.newRecord, ...res.newRecord,
CreateDate: dayjs(res.newRecord.CreateTime).format('YYYY-MM-DD'), isTodayRecord: res.isTodayRecord,
CreateDate: dayjs(res.newRecord.CreateTime).format('MM-DD'),
}, },
}) })
}) })
@ -236,7 +315,7 @@ Page({
this.setData({ this.setData({
hormoneDetail: { hormoneDetail: {
...res, ...res,
createTime: dayjs(res.createTime).format('YYYY-MM-DD'), createTime: dayjs(res.createTime).format('MM-DD'),
}, },
}) })
}) })
@ -299,6 +378,21 @@ Page({
}, },
}) })
}, },
handleAddQol() {
const { qolDetail } = this.data
const url = qolDetail.Id ? `/patient/pages/qolAdd/index?id=${qolDetail.Id}` : `/patient/pages/qol/index`
wx.navigateTo({
url,
success() {
if (qolDetail.isTodayRecord) {
wx.showToast({
icon: 'none',
title: '每日仅录入1次,您可修改选项',
})
}
},
})
},
handleReg() { handleReg() {
app.zdPermissionVerification(3, 0, '') app.zdPermissionVerification(3, 0, '')
}, },
@ -342,6 +436,36 @@ Page({
}) })
this.handleToastCancel(null, false) this.handleToastCancel(null, false)
} }
else if (toastType === 'medical-guide') {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/add-record',
data: { type: 3 },
}).then(() => {
wx.navigateTo({
url: '/patient/pages/medical/index',
})
})
this.handleToastCancel(null, false)
}
else if (toastType === 'guideEnterInfo') {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/close-need-popup',
data: { type: 1 },
}).then(() => {
wx.navigateTo({
url: '/patient/pages/personalInformation/index',
})
this.handleToastCancel(null, false)
})
}
else if (toastType === 'guideEnterInfoJump') {
wx.navigateTo({
url: '/patient/pages/personalInformation/index',
})
this.handleToastCancel(null, false)
}
}, },
handleToastCancel(_e = null, sure = true) { handleToastCancel(_e = null, sure = true) {
const { toastType } = this.data const { toastType } = this.data
@ -370,6 +494,20 @@ Page({
data: { type: 1 }, data: { type: 1 },
}) })
} }
else if (toastType === 'medical-guide' && sure) {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/add-record',
data: { type: 3 },
})
}
else if (toastType === 'guideEnterInfo' && sure) {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/close-need-popup',
data: { type: 1 },
})
}
this.setData({ this.setData({
toastShow: false, toastShow: false,
@ -433,4 +571,15 @@ Page({
} }
}) })
}, },
handleQuestionToast(e) {
const { type } = e.currentTarget.dataset
this.setData({
toastShow: true,
toastType: 'question-toast',
toastParams: {
content: { 1: '???', 2: '???' }[type],
close: true,
},
})
},
}) })

166
src/patient/pages/index/index.wxml

@ -7,27 +7,22 @@
> >
<view class="page-container"> <view class="page-container">
<view <view
class="doctor"
wx:if="{{zdUserInfo.ExclusiveDoctorId}}" wx:if="{{zdUserInfo.ExclusiveDoctorId}}"
class="doctor"
style="background: url('{{imageUrl}}bg42.png?t={{Timestamp}}') no-repeat top center/100%"
bind:tap="routerTo" bind:tap="routerTo"
data-code="doctor"
style="background:#fff url({{imageUrl}}bg11.png?t={{Timestamp}}) no-repeat top center/100% 256rpx"
data-url="/patient/pages/interactivePatient/index" data-url="/patient/pages/interactivePatient/index"
> >
<view class="container">
<view class="avatar"> <view class="avatar">
<image class="a-img" mode="aspectFill" src="{{zdUserInfo.ExclusiveDoctorImg}}" alt=""></image> <image class="a-img" mode="aspectFill" src="{{zdUserInfo.ExclusiveDoctorImg}}" alt=""></image>
<image wx:if="{{unreadCount}}" class="a-icon" src="{{imageUrl}}icon119.png?t={{Timestamp}}"></image>
</view> </view>
<view class="wrap"> <view class="wrap">
<view class="name-wrap"> <view class="w-header">
<view class="name"> <view class="name">{{zdUserInfo.ExclusiveDoctorName}}</view>
<view class="n-content">{{zdUserInfo.ExclusiveDoctorName}}</view> <image class="label" src="{{imageUrl}}icon117.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="content" wx:if="{{unreadCount}}">
医生给您留言了,记得查看!
<image class="icon" src="{{imageUrl}}/icon31.png?t={{Timestamp}}"></image>
</view> </view>
<view class="w-content" wx:if="{{unreadCount}}">医生给您留言了,记得查看!</view>
<view class="hostipal" wx:else> <view class="hostipal" wx:else>
<view class="h-content">{{zdUserInfo.ExclusiveDoctorHospitalName}}</view> <view class="h-content">{{zdUserInfo.ExclusiveDoctorHospitalName}}</view>
<view <view
@ -38,8 +33,106 @@
</view> </view>
</view> </view>
</view> </view>
<image class="more" src="{{imageUrl}}icon118.png?t={{Timestamp}}"></image>
</view>
<view class="kkd1" wx:if="{{qolShow && hormoneShow}}">
<view class="k-qol" bind:tap="routerTo" data-url="/patient/pages/qolReport/index">
<view class="title" catch:tap="handleQuestionToast" data-type="1">
生活质量自评
<image class="k-question" src="{{imageUrl}}icon120.png?t={{Timestamp}}"></image>
</view>
<view class="content" wx:if="{{qolDetail.TotalScore}}">
<view class="num">
{{qolDetail.TotalScore}}
<text class="sub">分</text>
</view>
<image
wx:if="{{qolDetail.TotalScore>=80}}"
class="icon"
src="{{imageUrl}}icon123.png?t={{Timestamp}}"
></image>
<image
wx:elif="{{qolDetail.TotalScore>=40}}"
class="icon"
src="{{imageUrl}}icon121.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}icon122.png?t={{Timestamp}}"></image>
</view>
<image class="none" wx:else src="{{imageUrl}}bg44.png?t={{Timestamp}}"></image>
<view class="k-footer">
<view class="date" wx:if="{{qolDetail.TotalScore}}">
<block wx:if="{{qolDetail.CreateTime}}">最近:{{qolDetail.CreateDate}}</block>
</view>
<view class="no-tip" wx:else>记录主观感受</view>
<image class="add" catch:tap="handleAddQol" src="{{imageUrl}}icon127.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="k-hormones" bind:tap="routerTo" data-url="/patient/pages/qolReport/index?scrollId=proit-hormone">
<image
class="status"
wx:if="{{hormoneDetail.medicationMethod==1}}"
src="{{imageUrl}}icon124.png?t={{Timestamp}}"
></image>
<image
class="status"
wx:elif="{{hormoneDetail.medicationMethod==2}}"
src="{{imageUrl}}icon125.png?t={{Timestamp}}"
></image>
<image
class="status"
wx:elif="{{hormoneDetail.medicationMethod==3}}"
src="{{imageUrl}}icon126.png?t={{Timestamp}}"
></image>
<view class="title" catch:tap="handleQuestionToast" data-type="2">
激素记录
<image class="k-question" src="{{imageUrl}}icon120.png?t={{Timestamp}}"></image>
</view>
<view class="content" wx:if="{{hormoneDetail.dosage}}">
<view class="num">
{{hormoneDetail.dosage}}
<text class="sub">mg/周</text>
</view>
</view>
<image class="none" wx:else src="{{imageUrl}}bg45.png?t={{Timestamp}}"></image>
<view class="k-footer">
<view class="date" wx:if="{{hormoneDetail.dosage}}">最近:{{hormoneDetail.createTime}}</view>
<view class="no-tip" wx:else>关注不良反应</view>
<image
class="add"
wx:if="{{hormoneDetail.recordId>0}}"
catch:tap="routerTo"
data-url="/patient/pages/hormones/index?id={{hormoneDetail.recordId}}"
src="{{imageUrl}}icon127.png?t={{Timestamp}}"
></image>
<image
class="add"
wx:else
catch:tap="routerTo"
data-url="/patient/pages/hormonesStart/index"
src="{{imageUrl}}icon127.png?t={{Timestamp}}"
></image>
</view>
</view>
</view>
<view class="kkd2" wx:if="{{medicalInsuranceShow && hospitalMapShow}}">
<view class="k-item" bind:tap="routerTo" data-url="/patient/pages/doctor/index">
<view
class="wrap"
style="background: url('{{imageUrl}}icon128.png?t={{Timestamp}}') no-repeat bottom right/122rpx 134rpx"
>
<view class="title">就诊地图</view>
<view class="content">附近的医院</view>
</view>
</view>
<view class="k-item" bind:tap="routerTo" data-url="/patient/pages/medical/index">
<view
class="wrap"
style="background: url('{{imageUrl}}icon129.png?t={{Timestamp}}') no-repeat bottom right/122rpx 134rpx"
>
<view class="title">医保查询</view>
<view class="content">政策轻松查询</view>
</view>
</view> </view>
<view class="btn">{{unreadCount ? '去看看':'去咨询'}}</view>
</view> </view>
<block wx:for="{{configList}}" wx:key="index" wx:for-item="card" wx:for-index="cIndex"> <block wx:for="{{configList}}" wx:key="index" wx:for-item="card" wx:for-index="cIndex">
<view <view
@ -66,34 +159,6 @@
</swiper-item> </swiper-item>
</swiper> </swiper>
</view> </view>
<view
class="qol"
wx:if="{{card.code == 'adl' && card.showStatus == 1}}"
style="background: url('{{imageUrl}}bg41.png?t={{Timestamp}}') no-repeat top center/100%"
bind:tap="routerTo"
data-url="/patient/pages/qolReport/index"
>
<view class="date" wx:if="{{qolDetail.CreateTime}}">最近记录 {{qolDetail.CreateDate}}</view>
<view class="btn" catch:tap="routerTo" data-url="/patient/pages/qol/index"></view>
</view>
<view
class="hormones"
wx:if="{{card.code == 'hormone' && card.showStatus == 1}}"
style="background: url('{{imageUrl}}bg36.png?t={{Timestamp}}') no-repeat top center/100%"
bind:tap="routerTo"
data-url="/patient/pages/qolReport/index?scrollId=proit-hormone"
>
<view class="date" wx:if="{{hormoneDetail && hormoneDetail.createTime}}">
最近记录 {{hormoneDetail.createTime}}
</view>
<view
wx:if="{{hormoneDetail.recordId>0}}"
class="btn"
catch:tap="routerTo"
data-url="/patient/pages/hormones/index?id={{hormoneDetail.recordId}}"
></view>
<view wx:else class="btn" catch:tap="routerTo" data-url="/patient/pages/hormonesStart/index"></view>
</view>
<view class="live-up-new" wx:if="{{card.code == 'activity2' && card.showStatus == 1 }}"> <view class="live-up-new" wx:if="{{card.code == 'activity2' && card.showStatus == 1 }}">
<view class="header" wx:if="{{card.name}}"> <view class="header" wx:if="{{card.name}}">
<view class="title">{{card.name}}</view> <view class="title">{{card.name}}</view>
@ -209,25 +274,6 @@
</swiper-item> </swiper-item>
</swiper> </swiper>
</view> </view>
<view class="new-server" wx:if="{{card.code == 'serviceConf' && card.showStatus == 1}}">
<view class="title" wx:if="{{card.name}}">{{card.name}}</view>
<image
class="one-card"
wx:if="{{card.subList.length==1}}"
src="{{card.subList[0].img}}"
bind:tap="routerTo"
data-url="{{card.subList[0].linkUrl}}"
data-code="{{card.subList[0].code}}"
></image>
<view class="list" wx:else>
<block wx:for="{{card.subList}}" wx:key="index">
<view class="item" bind:tap="routerTo" data-url="{{item.linkUrl}}" data-code="{{card.code}}">
<image class="icon" src="{{item.img}}"></image>
<view class="name">{{item.title}}</view>
</view>
</block>
</view>
</view>
</block> </block>
</view> </view>

42
src/patient/pages/live/index.wxml

@ -16,27 +16,27 @@
/> />
<van-icon class="clear extend-via-pseudo-elem" wx:if="{{Search}}" name="clear" bind:tap="handleClear" /> <van-icon class="clear extend-via-pseudo-elem" wx:if="{{Search}}" name="clear" bind:tap="handleClear" />
</view> </view>
<view class="sticky"> <!-- <view class="sticky"> -->
<view class="tags"> <!-- <view class="tags"> -->
<view class="scroll"> <!-- <view class="scroll"> -->
<view class="tag {{!CateId &&'active'}}" bind:tap="handleCate" data-id="">全部</view> <!-- <view class="tag {{!CateId &&'active'}}" bind:tap="handleCate" data-id="">全部</view> -->
<view <!-- <view -->
class="tag {{CateId == item.CateId &&'active'}}" <!-- class="tag {{CateId == item.CateId &&'active'}}" -->
wx:for="{{cateList}}" <!-- wx:for="{{cateList}}" -->
wx:key="CateId" <!-- wx:key="CateId" -->
bind:tap="handleCate" <!-- bind:tap="handleCate" -->
data-id="{{item.CateId}}" <!-- data-id="{{item.CateId}}" -->
> <!-- > -->
{{item.CateName}} <!-- {{item.CateName}} -->
</view> <!-- </view> -->
<view class="site" bind:tap="handleToggleSite" wx:if="{{active==1}}"> <!-- <view class="site" bind:tap="handleToggleSite" wx:if="{{active==1}}"> -->
<image class="icon" wx:if="{{LNG}}" src="{{imageUrl}}za-images/1/select-active.png?t={{Timestamp}}"></image> <!-- <image class="icon" wx:if="{{LNG}}" src="{{imageUrl}}za-images/1/select-active.png?t={{Timestamp}}"></image> -->
<image class="icon" wx:else src="{{imageUrl}}za-images/1/select.png?t={{Timestamp}}"></image> <!-- <image class="icon" wx:else src="{{imageUrl}}za-images/1/select.png?t={{Timestamp}}"></image> -->
距离最近 <!-- 距离最近 -->
</view> <!-- </view> -->
</view> <!-- </view> -->
</view> <!-- </view> -->
</view> <!-- </view> -->
<view class="info-list" wx:if="{{active==0}}"> <view class="info-list" wx:if="{{active==0}}">
<view class="list-item" wx:for="{{list}}" bind:tap="handleDetail" data-id="{{item.Id}}" wx:key="index"> <view class="list-item" wx:for="{{list}}" bind:tap="handleDetail" data-id="{{item.Id}}" wx:key="index">
<view class="photo-wrap"> <view class="photo-wrap">

3
src/patient/pages/liveDetail/index.json

@ -9,6 +9,7 @@
"navbar": "/components/navbar/index", "navbar": "/components/navbar/index",
"van-popup": "@vant/weapp/popup/index", "van-popup": "@vant/weapp/popup/index",
"popup": "/components/popup/index", "popup": "/components/popup/index",
"van-count-down": "@vant/weapp/count-down/index" "van-count-down": "@vant/weapp/count-down/index",
"toast": "/components/toast/index"
} }
} }

113
src/patient/pages/liveDetail/index.ts

@ -24,10 +24,17 @@ Page({
popupShow: false, popupShow: false,
popupType: 'popup6', // 登录失败弹窗 popupType: 'popup6', // 登录失败弹窗
// popupType: 'popup14', // 切换医生端弹窗
popupParams: { popupParams: {
close: true, close: true,
} as any, } as any,
toastShow: false,
toastType: '',
// toastType: 'guideEnterInfo',
// toastType: 'guideEnterInfoJump',
toastParams: {} as any,
answer: false, answer: false,
isAnswer: false, isAnswer: false,
}, },
@ -37,6 +44,12 @@ Page({
id: options.id, id: options.id,
answer: options.answer === '1', answer: options.answer === '1',
}) })
if (options.jump == '1') {
this.setData({
popupShow: true,
popupType: 'popup15',
})
}
if (options.scene) { if (options.scene) {
const optionsScene: any = parseScene(options.scene) const optionsScene: any = parseScene(options.scene)
this.setData({ this.setData({
@ -66,7 +79,13 @@ Page({
app.waitLogin({ type: [0, 1, 2] }).then(() => { app.waitLogin({ type: [0, 1, 2] }).then(() => {
// 拦截医生直接访问直播详情页 // 拦截医生直接访问直播详情页
if (app.globalData.loginType == 2 && app.globalData.isLogin == 1) { if (app.globalData.loginType == 2 && app.globalData.isLogin == 1) {
this.doctorLoginOut() this.setData({
popupShow: true,
popupType: 'popup14',
popupParams: {
close: true,
},
})
return return
} }
app.mpBehavior({ app.mpBehavior({
@ -77,20 +96,32 @@ Page({
this.getDetail() this.getDetail()
this.setView() this.setView()
this.getLightList() this.getLightList()
this.getPopup()
app.getZdUserInfo(this, true, () => { app.getZdUserInfo(this, true, () => {
this.getPosterParams() this.getPosterParams()
}) })
}) })
}, },
async getPopup() {
if (this.data.toastShow)
return
const data1 = await wx.ajax({
method: 'GET',
url: '?r=zd/popup/get-need-popup',
data: {
type: 1,
},
})
if (data1.showAlert) {
this.setData({
toastShow: data1.showAlert,
toastType: 'guideEnterInfo',
toastParams: {},
})
}
},
doctorLoginOut() { doctorLoginOut() {
wx.showModal({
title: '访问直播活动页需切换至患者端',
content: '请问是否继续',
confirmColor: '#8c75d0',
cancelText: '取消',
confirmText: '继续',
success: (res) => {
if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=xd/user/reg-logout', url: '?r=xd/user/reg-logout',
@ -102,14 +133,6 @@ Page({
}) })
}) })
}) })
}
if (res.cancel) {
wx.reLaunch({
url: '/pages/home/index',
})
}
},
})
}, },
onReady() { onReady() {
this.videoContext = wx.createVideoContext('video') this.videoContext = wx.createVideoContext('video')
@ -481,11 +504,67 @@ Page({
}) })
}) })
}, },
handlePopupOk() {
const { popupType } = this.data
if (popupType === 'popup14') {
this.doctorLoginOut()
}
if (popupType === 'popup15') {
this.doctorLoginOut()
}
this.setData({
popupShow: false,
})
},
handlePopupCancel() { handlePopupCancel() {
const { popupType } = this.data
if (popupType === 'popup14') {
wx.reLaunch({
url: '/pages/home/index',
})
}
this.setData({ this.setData({
popupShow: false, popupShow: false,
}) })
}, },
handleToastOk() {
const { toastType } = this.data
if (toastType === 'guideEnterInfo') {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/close-need-popup',
data: { type: 1 },
}).then(() => {
wx.navigateTo({
url: '/patient/pages/personalInformation/index',
})
this.handleToastCancel(null, false)
})
}
else if (toastType === 'guideEnterInfoJump') {
wx.navigateTo({
url: '/patient/pages/personalInformation/index',
})
this.handleToastCancel(null, false)
}
},
handleToastCancel(_e = null, sure = true) {
const { toastType } = this.data
if (toastType === 'guideEnterInfo' && sure) {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/close-need-popup',
data: { type: 1 },
})
}
this.setData({
toastShow: false,
toastType: '',
toastParams: '',
})
},
handleAnswer() { handleAnswer() {
const link = this.data.detail.QuestionnaireUrl const link = this.data.detail.QuestionnaireUrl
wx.navigateTo({ wx.navigateTo({

12
src/patient/pages/liveDetail/index.wxml

@ -151,7 +151,9 @@
已满额 已满额
</view> </view>
<view class="btn active" wx:elif="{{detail.SignUpDeadlineValue * 1 < dateValue * 1}}">报名已截止</view> <view class="btn active" wx:elif="{{detail.SignUpDeadlineValue * 1 < dateValue * 1}}">报名已截止</view>
<view class="btn" wx:elif="{{detail.BeginTimeValue * 1 < dateValue * 1}}" bind:tap="handleSignUpLive">点此进入</view> <view class="btn" wx:elif="{{detail.BeginTimeValue * 1 < dateValue * 1}}" bind:tap="handleSignUpLive">
点此进入
</view>
<view class="btn" wx:else bind:tap="handleSignUp">报名</view> <view class="btn" wx:else bind:tap="handleSignUp">报名</view>
</block> </block>
</view> </view>
@ -199,3 +201,11 @@
bind:ok="handlePopupOk" bind:ok="handlePopupOk"
bind:cancel="handlePopupCancel" bind:cancel="handlePopupCancel"
></popup> ></popup>
<toast
bind:cancel="handleToastCancel"
bind:ok="handleToastOk"
show="{{toastShow}}"
type="{{toastType}}"
params="{{toastParams}}"
></toast>

75
src/patient/pages/liveDetailVideo/index.ts

@ -25,6 +25,7 @@ Page({
offsetTop: 310, offsetTop: 310,
}, },
videoContexts: {} as any,
onLoad(options) { onLoad(options) {
this.setData({ this.setData({
id: options.id, id: options.id,
@ -43,15 +44,35 @@ Page({
}).then((res) => { }).then((res) => {
res.map((item: any) => { res.map((item: any) => {
item.duration = dayjs(item.duration * 1000).format('mm:ss') item.duration = dayjs(item.duration * 1000).format('mm:ss')
item.preload = false
return item return item
}) })
this.setData({ this.setData({
videoList: res, videoList: res,
current: this.data.index, current: this.data.index,
}) })
this.preloadVideos(this.data.index)
this.playCurrentVideo() this.playCurrentVideo()
}) })
}, },
preloadVideos(currentIndex: number) {
const { videoList } = this.data
const newVideoList = [...videoList]
// 只预加载当前和前后各一个视频
newVideoList.forEach((item: any, index: number) => {
if (Math.abs(index - currentIndex) <= 1) {
item.preload = true
}
else {
item.preload = false
}
})
this.setData({
videoList: newVideoList,
})
},
handleChange(e: any) { handleChange(e: any) {
const { beforeLoading, afterLoading, beforeEnd, afterEnd, videoList } = this.data const { beforeLoading, afterLoading, beforeEnd, afterEnd, videoList } = this.data
const { current } = e.detail const { current } = e.detail
@ -71,22 +92,26 @@ Page({
}) })
// this.getList('after') // this.getList('after')
} }
this.preloadVideos(current)
this.playCurrentVideo() this.playCurrentVideo()
}, },
playCurrentVideo() { playCurrentVideo() {
const { current, videoList } = this.data const { current, videoList } = this.data
videoList.forEach((item: any, index: number) => {
if (!item.ctx) { // 暂停所有视频
item.ctx = wx.createVideoContext(`video-${item.attachmentId}`) Object.values(this.videoContexts).forEach((ctx: any) => {
} ctx.pause()
item.drag = false })
if (index === current) {
item.ctx.play() // 播放当前视频
const currentVideo = videoList[current]
if (currentVideo) {
const videoId = `video-${currentVideo.attachmentId}`
if (!this.videoContexts[videoId]) {
this.videoContexts[videoId] = wx.createVideoContext(videoId)
} }
else { this.videoContexts[videoId].play()
item.ctx.pause()
} }
})
}, },
handleFullScreenChange(e) { handleFullScreenChange(e) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
@ -97,8 +122,10 @@ Page({
}, },
handelFullScreen(e) { handelFullScreen(e) {
const { id } = e.currentTarget.dataset const { id } = e.currentTarget.dataset
const context = wx.createVideoContext(id) if (!this.videoContexts[id]) {
context.requestFullScreen({}) this.videoContexts[id] = wx.createVideoContext(id)
}
this.videoContexts[id].requestFullScreen({})
}, },
handleLoadedMetaData(e) { handleLoadedMetaData(e) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
@ -144,11 +171,18 @@ Page({
handleTogglePlay(e) { handleTogglePlay(e) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
const { videoList } = this.data const { videoList } = this.data
if (videoList[index].play) { const video = videoList[index]
videoList[index].ctx.pause() const videoId = `video-${video.attachmentId}`
if (!this.videoContexts[videoId]) {
this.videoContexts[videoId] = wx.createVideoContext(videoId)
}
if (video.play) {
this.videoContexts[videoId].pause()
} }
else { else {
videoList[index].ctx.play() this.videoContexts[videoId].play()
} }
}, },
handleDragStart(e: any) { handleDragStart(e: any) {
@ -161,10 +195,17 @@ Page({
handleDragEnd(e: any) { handleDragEnd(e: any) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
const { videoList } = this.data const { videoList } = this.data
const duration = videoList[index].duration const video = videoList[index]
const duration = video.duration
const drapProgress = e.detail const drapProgress = e.detail
const currentTime = (drapProgress / 100) * duration const currentTime = (drapProgress / 100) * duration
videoList[index].ctx.seek(currentTime)
const videoId = `video-${video.attachmentId}`
if (!this.videoContexts[videoId]) {
this.videoContexts[videoId] = wx.createVideoContext(videoId)
}
this.videoContexts[videoId].seek(currentTime)
const dragKey = `videoList[${index}].drag` const dragKey = `videoList[${index}].drag`
this.setData({ this.setData({
[dragKey]: false, [dragKey]: false,

2
src/patient/pages/liveDetailVideo/index.wxml

@ -8,7 +8,7 @@
<video <video
id="video-{{item.attachmentId}}" id="video-{{item.attachmentId}}"
class="video" class="video"
src="{{item.videoUrl}}" src="{{item.preload ? item.videoUrl : ''}}"
poster="{{item.imgUrl}}" poster="{{item.imgUrl}}"
loop loop
title="{{item.title}}" title="{{item.title}}"

73
src/patient/pages/medical/index.ts

@ -1,29 +1,60 @@
const _app = getApp<IAppOption>() const app = getApp<IAppOption>()
Page({ Page({
data: { data: {
ProvinceName: '', bannerList: [],
ProvinceId: '',
CityName: '', provinceName: '',
CityId: '', provinceId: '',
cityName: '',
cityId: '',
hostipalName: '', hostipalName: '',
hostipalId: '', hostipalId: '',
hostipalList: [ hospitalPolicyId: '',
{ hostipalList: [] as any[],
id: '1', },
name: '北京医院', onLoad() {
app.waitLogin({ type: [1] }).then(() => {
this.getBanner()
})
}, },
], getBanner() {
wx.ajax({
method: 'GET',
url: '?r=xd/hospital-policy/get-intro-list',
data: {},
}).then((res) => {
this.setData({
bannerList: res,
})
})
}, },
onLoad() {},
handleChangeSite(e: WechatMiniprogram.CustomEvent) { handleChangeSite(e: WechatMiniprogram.CustomEvent) {
const detail = e.detail const detail = e.detail
this.setData({ this.setData({
ProvinceId: detail.ProvinceId, provinceId: detail.ProvinceId,
ProvinceName: detail.ProvinceName, provinceName: detail.ProvinceName,
CityId: detail.CityId, cityId: detail.CityId,
CityName: detail.CityName, cityName: detail.CityName,
})
this.getHosList()
},
getHosList() {
const { provinceId, cityId } = this.data
wx.ajax({
method: 'GET',
url: '?r=xd/hospital-policy/get-hospital-list',
data: {
provinceId,
cityId,
},
}).then((res) => {
this.setData({
hostipalList: res.map((item) => {
return { id: item.hospitalId, name: item.hospitalName, pId: item.hospitalPolicyId }
}),
})
}) })
}, },
handleChange(e) { handleChange(e) {
@ -32,6 +63,7 @@ Page({
this.setData({ this.setData({
hostipalName: hItem.name, hostipalName: hItem.name,
hostipalId: hItem.id, hostipalId: hItem.id,
hospitalPolicyId: hItem.pId,
}) })
}, },
handleHostipalDisable() { handleHostipalDisable() {
@ -49,9 +81,18 @@ Page({
return return
} }
wx.navigateTo({ wx.navigateTo({
url: '/patient/pages/medicalDetail/index', url: `/patient/pages/medicalDetail/index?id=${this.data.hospitalPolicyId}`,
}) })
}, },
handleInfo(e) {
const { id } = e.currentTarget.dataset
wx.navigateTo({
url: `/patient/pages/repositoryDetail/index?id=${id}`,
})
},
handleBack() {
wx.navigateBack()
},
}) })
export {} export {}

28
src/patient/pages/medical/index.wxml

@ -3,17 +3,17 @@
</navbar> </navbar>
<view <view
class="page" class="page"
style="background: url('/images/bg27.png') no-repeat top center/100% 546rpx;padding-top: {{pageTop}}px;" style="background: url('{{imageUrl}}bg27.png?t={{Timestamp}}') no-repeat top center/100% 546rpx;padding-top: {{pageTop}}px;"
> >
<view class="page-title">医保报销查询</view> <view class="page-title">医保报销查询</view>
<view class="page-sub-title"> <view class="page-sub-title">
<image class="icon" src="/images/icon110.png"></image> <image class="icon" src="{{imageUrl}}icon110.png?t={{Timestamp}}"></image>
医保政策轻松查询 医保政策轻松查询
</view> </view>
<view class="form"> <view class="form">
<view class="form-item"> <view class="form-item">
<view class="title"> <view class="title">
<image class="icon" src="/images/icon111.png"></image> <image class="icon" src="{{imageUrl}}icon111.png?t={{Timestamp}}"></image>
我的医保所在城市 我的医保所在城市
</view> </view>
<pickerArea <pickerArea
@ -24,7 +24,7 @@
bind:ok="handleChangeSite" bind:ok="handleChangeSite"
> >
<view class="picker-content"> <view class="picker-content">
<block wx:if="{{ProvinceName}}">{{ProvinceName}}{{CityName}}</block> <block wx:if="{{provinceName}}">{{provinceName}}{{cityName}}</block>
<block wx:else>选择省份城市</block> <block wx:else>选择省份城市</block>
<van-icon name="arrow-down" /> <van-icon name="arrow-down" />
</view> </view>
@ -32,7 +32,7 @@
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="title"> <view class="title">
<image class="icon" src="/images/icon111.png"></image> <image class="icon" src="{{imageUrl}}icon111.png?t={{Timestamp}}"></image>
我就诊的医院 我就诊的医院
</view> </view>
<picker mode="selector" range="{{hostipalList}}" range-key="name" bind:change="handleChange"> <picker mode="selector" range="{{hostipalList}}" range-key="name" bind:change="handleChange">
@ -40,18 +40,26 @@
<block wx:if="{{hostipalName}}">{{hostipalName}}</block> <block wx:if="{{hostipalName}}">{{hostipalName}}</block>
<block wx:else>选择就诊医院</block> <block wx:else>选择就诊医院</block>
<van-icon name="arrow-down" /> <van-icon name="arrow-down" />
<view wx:if="{{!ProvinceId}}" class="disable" catch:tap="handleHostipalDisable"></view> <view wx:if="{{!provinceId}}" class="disable" catch:tap="handleHostipalDisable"></view>
</view> </view>
</picker> </picker>
</view> </view>
<view class="submit-btn" bind:tap="handleSubmit">医保查询</view> <view class="submit-btn" bind:tap="handleSubmit">医保查询</view>
</view> </view>
<view class="list"> <view class="list" wx:if="{{bannerList.length}}">
<view class="list-title"> <view class="list-title">
<image class="icon" src="/images/icon112.png"></image> <image class="icon" src="{{imageUrl}}icon112.png?t={{Timestamp}}"></image>
<view class="content">关于替妥尤单抗</view> <view class="content">关于替妥尤单抗</view>
<image class="icon icon-rotate" src="/images/icon112.png"></image> <image class="icon icon-rotate" src="{{imageUrl}}icon112.png?t={{Timestamp}}"></image>
</view> </view>
<image class="card" src="/images/bg1.png"></image> <image
wx:for="{{bannerList}}"
wx:key="id"
class="card"
mode="aspectFill"
src="{{item.bannerImg}}"
bind:tap="handleInfo"
data-id="{{item.picTextId}}"
></image>
</view> </view>
</view> </view>

13
src/patient/pages/medicalDetail/index.scss

@ -125,14 +125,21 @@ page {
} }
.tip { .tip {
margin-top: 32rpx; margin-top: 32rpx;
font-size: 28rpx; font-size: 32rpx;
color: #211d2e; color: #b982ff;
} }
.feedback { .feedback {
margin: 24rpx 0 0; margin: 24rpx 0 0;
font-size: 32rpx; font-size: 32rpx;
color: #b982ff; color: #b982ff;
text-align: center; display: flex;
align-items: center;
justify-content: center;
gap: 12rpx;
.icon {
width: 44rpx;
height: 44rpx;
}
} }
} }
.page-footer { .page-footer {

56
src/patient/pages/medicalDetail/index.ts

@ -1,4 +1,4 @@
const _app = getApp<IAppOption>() const app = getApp<IAppOption>()
Page({ Page({
data: { data: {
@ -10,8 +10,40 @@ Page({
popupParams: { popupParams: {
close: true, close: true,
} as any, } as any,
id: '',
detail: {} as any,
medicationMethods: '',
},
onLoad(options) {
this.setData({
id: options.id,
})
app.waitLogin({ type: [1] }).then(() => {
this.getDetail()
})
},
getDetail() {
wx.ajax({
method: 'GET',
url: '?r=xd/hospital-policy/get-detail',
data: {
hospitalPolicyId: this.data.id,
},
}).then((res) => {
const medicationMethods = this.formatMedicationMethods(res.medicationMethodList)
this.setData({
detail: res,
medicationMethods,
})
})
},
formatMedicationMethods(medicationMethodList: any[]) {
if (!medicationMethodList || medicationMethodList.length === 0) {
return ''
}
return medicationMethodList.map(item => item.medicationMethodName).join('、')
}, },
onLoad() {},
handleInfo() { handleInfo() {
this.setData({ this.setData({
popupShow: true, popupShow: true,
@ -19,10 +51,18 @@ Page({
}) })
}, },
handleFeedback() { handleFeedback() {
wx.ajax({
method: 'POST',
url: '?r=xd/hospital-policy/add-feedback',
data: {
hospitalId: this.data.detail.hospitalId || '',
},
}).then(() => {
wx.showToast({ wx.showToast({
title: '已收到您的报错反馈', title: '已收到您的报错反馈',
icon: 'none', icon: 'none',
}) })
})
}, },
handleConsult() { handleConsult() {
this.setData({ this.setData({
@ -36,7 +76,7 @@ Page({
}, },
handlePhone() { handlePhone() {
wx.makePhoneCall({ wx.makePhoneCall({
phoneNumber: '123', phoneNumber: this.data.detail.telephone,
}) })
this.onClose() this.onClose()
}, },
@ -44,12 +84,17 @@ Page({
this.setData({ this.setData({
popupShow: true, popupShow: true,
popupType: 'popup12', popupType: 'popup12',
popupParams: {
imgs: this.data.detail.imgs || [],
consultImg: this.data.detail.consultImg || '',
close: true,
},
}) })
this.onClose() this.onClose()
}, },
handleHostipal() { handleHostipal() {
wx.navigateTo({ wx.navigateTo({
url: `/patient/pages/hospital/index?id=1`, url: `/patient/pages/hospital/index?id=${this.data.detail.hospitalId || ''}`,
}) })
}, },
handlePopupOk() { handlePopupOk() {
@ -63,6 +108,9 @@ Page({
popupShow: false, popupShow: false,
}) })
}, },
handleBack() {
wx.navigateBack()
},
}) })
export {} export {}

37
src/patient/pages/medicalDetail/index.wxml

@ -4,47 +4,48 @@
<view class="page" style="padding-top: {{pageTop+60}}px;"> <view class="page" style="padding-top: {{pageTop+60}}px;">
<view class="banner"> <view class="banner">
<view class="badge"> <view class="badge">
<image class="b-img" src="/images/bg1.png"></image> <image class="b-img" src="{{detail.imgs || '{{imageUrl}}bg1.png?t={{Timestamp}}'}}"></image>
</view> </view>
<view class="name">北京同仁医院(崇文门院区)</view> <view class="name">{{detail.hospitalName || ''}}</view>
<view class="title" style="background: url('/images/bg28.png') no-repeat top left/52rpx 52rpx">用药方式</view> <view class="title" style="background: url('{{imageUrl}}bg28.png?t={{Timestamp}}') no-repeat top left/52rpx 52rpx">用药方式</view>
<view class="content" bind:tap="handleInfo"> <view class="content" bind:tap="handleInfo">
双通道 {{medicationMethods}}
<image class="icon" src="/images/icon113.png"></image> <image class="icon" src="{{imageUrl}}icon113.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view class="container"> <view class="container">
<view class="c-header" style="background: url('/images/bg28.png') no-repeat top left/52rpx 52rpx"> <view class="c-header" style="background: url('{{imageUrl}}bg28.png?t={{Timestamp}}') no-repeat top left/52rpx 52rpx">
用药方式 用药方式
<view class="status"> <view class="status" wx:if="{{detail.isReimbursement == '1'}}">
<image class="icon" src="/images/icon114.png"></image> <image class="icon" src="{{imageUrl}}icon114.png?t={{Timestamp}}"></image>
可报销 可报销
</view> </view>
</view> </view>
<view class="row"> <view class="row">
<view class="r-title">起付线</view> <view class="r-title">起付线</view>
<view class="r-content">600元,第二次及以上,起付线300元</view> <view class="r-content">{{detail.threshold || '暂无'}}</view>
</view> </view>
<view class="row"> <view class="row">
<view class="r-title">个人先行自付比例</view> <view class="r-title">个人先行自付比例</view>
<view class="r-content">20%</view> <view class="r-content">{{detail.individualRatio || '暂无'}}</view>
</view> </view>
<view class="row"> <view class="row">
<view class="r-title">职工医保</view> <view class="r-title">职工医保</view>
<view class="r-content">报销比例:90%(退休95%)</view> <view class="r-content">{{detail.employeeMedicalInsurance || '暂无'}}</view>
</view> </view>
<view class="row"> <view class="row">
<view class="r-title">居民医保</view> <view class="r-title">居民医保</view>
<view class="r-content"> <view class="r-content">{{detail.residentMedicalInsurance || '暂无'}}</view>
参保人一个年度内因同一病种在同一家医疗机构住院的支付一次起付标准,未经转诊跨县(市)域在省属三级医疗机构住院治疗的,起付线增加0.5倍。报销比例:三级医院75%,省属三级医院70%。
</view>
</view> </view>
<view class="row"> <view class="row">
<view class="r-title">其他信息</view> <view class="r-title">其他信息</view>
<view class="r-content">1号以后可以申请使用高值药品备案备案成功后方可报销</view> <view class="r-content">{{detail.otherInfo || '暂无'}}</view>
</view> </view>
<view class="tip">注:各地医保报销比例和具体政策请以当地执行为准</view> <view class="tip">注:各地医保报销比例和具体政策请以当地执行为准</view>
<view class="feedback" bind:tap="handleFeedback">信息有误?点击反馈</view> <view class="feedback" bind:tap="handleFeedback">
信息有误?点击反馈
<image class="icon" src="{{imageUrl}}icon130.png?t={{Timestamp}}"></image>
</view>
</view> </view>
<view class="page-footer"> <view class="page-footer">
<view class="btn" bind:tap="handleConsult">我要咨询</view> <view class="btn" bind:tap="handleConsult">我要咨询</view>
@ -55,11 +56,11 @@
<van-popup show="{{ show }}" position="bottom" bind:close="onClose" closeable round custom-style="background:#f6f8f9 "> <van-popup show="{{ show }}" position="bottom" bind:close="onClose" closeable round custom-style="background:#f6f8f9 ">
<view class="popup-consult"> <view class="popup-consult">
<view class="item" bind:tap="handlePhone"> <view class="item" bind:tap="handlePhone">
<image class="icon" src="/images/icon115.png"></image> <image class="icon" src="{{imageUrl}}icon115.png?t={{Timestamp}}"></image>
<view class="name">电话咨询</view> <view class="name">电话咨询</view>
</view> </view>
<view class="item" bind:tap="handleCustomerService"> <view class="item" bind:tap="handleCustomerService">
<image class="icon" src="/images/icon116.png"></image> <image class="icon" src="{{imageUrl}}icon116.png?t={{Timestamp}}"></image>
<view class="name">咨询客服</view> <view class="name">咨询客服</view>
</view> </view>
</view> </view>

3
src/patient/pages/my/index.json

@ -5,6 +5,7 @@
"van-icon": "@vant/weapp/icon/index", "van-icon": "@vant/weapp/icon/index",
"navBar": "/components/zd-navBar/navBar", "navBar": "/components/zd-navBar/navBar",
"van-switch": "@vant/weapp/switch/index", "van-switch": "@vant/weapp/switch/index",
"patient-tab-bar": "/components/patient-tab-bar/index" "patient-tab-bar": "/components/patient-tab-bar/index",
"toast": "/components/toast/index"
} }
} }

72
src/patient/pages/my/index.ts

@ -1,4 +1,5 @@
import dayjs from 'dayjs' import dayjs from 'dayjs'
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
Page({ Page({
@ -13,8 +14,20 @@ Page({
}, },
adlNewRecord: {} as any, adlNewRecord: {} as any,
toastShow: false,
toastType: '',
// toastType: 'guideEnterInfo',
// toastType: 'guideEnterInfoJump',
toastParams: {} as any,
}, },
onLoad() { onLoad(options) {
if (options.jump == '1') {
this.setData({
toastShow: true,
toastType: 'guideEnterInfoJump',
})
}
app.zdGetTheme().then((res) => { app.zdGetTheme().then((res) => {
this.setData({ this.setData({
theme: res, theme: res,
@ -35,8 +48,28 @@ Page({
app.mpBehavior({ PageName: 'PG_PatientPersonalCenter' }) app.mpBehavior({ PageName: 'PG_PatientPersonalCenter' })
app.getZdUserInfo(this, true, () => {}) app.getZdUserInfo(this, true, () => {})
this.getScore() this.getScore()
this.getPopup()
}) })
}, },
async getPopup() {
if (this.data.toastShow)
return
const data1 = await wx.ajax({
method: 'GET',
url: '?r=zd/popup/get-need-popup',
data: {
type: 1,
},
})
if (data1.showAlert) {
this.setData({
toastShow: data1.showAlert,
toastType: 'guideEnterInfo',
toastParams: {},
})
}
},
getScore() { getScore() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
@ -125,4 +158,41 @@ Page({
}, },
}) })
}, },
handleToastOk() {
const { toastType } = this.data
if (toastType === 'guideEnterInfo') {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/close-need-popup',
data: { type: 1 },
}).then(() => {
wx.navigateTo({
url: '/patient/pages/personalInformation/index',
})
this.handleToastCancel(null, false)
})
}
else if (toastType === 'guideEnterInfoJump') {
wx.navigateTo({
url: '/patient/pages/personalInformation/index',
})
this.handleToastCancel(null, false)
}
},
handleToastCancel(_e = null, sure = true) {
const { toastType } = this.data
if (toastType === 'guideEnterInfo' && sure) {
wx.ajax({
method: 'POST',
url: '?r=zd/popup/close-need-popup',
data: { type: 1 },
})
}
this.setData({
toastShow: false,
toastType: '',
toastParams: '',
})
},
}) })

8
src/patient/pages/my/index.wxml

@ -76,3 +76,11 @@
</view> </view>
<patient-tab-bar></patient-tab-bar> <patient-tab-bar></patient-tab-bar>
<toast
bind:cancel="handleToastCancel"
bind:ok="handleToastOk"
show="{{toastShow}}"
type="{{toastType}}"
params="{{toastParams}}"
></toast>

15
src/patient/pages/qolReport/index.ts

@ -8,12 +8,12 @@ Page({
footerBtnShow: false, footerBtnShow: false,
hormoneDetail: { recordId: '' }, hormoneDetail: { recordId: '' },
type: '1', // 默认月度
type: '2',
BeginMonth: '', BeginMonth: '',
EndMonth: '', EndMonth: '',
fields: { fields: {
1: 'day',
2: 'month', 2: 'month',
3: 'year', 3: 'year',
}, },
@ -87,18 +87,15 @@ Page({
handleChangeType(e?: WechatMiniprogram.CustomEvent) { handleChangeType(e?: WechatMiniprogram.CustomEvent) {
let type = '' let type = ''
if (e) { if (e) {
type = e.detail.index + 1 // Tab 已移除“日”,现仅有“月度/年度”
type = e.detail.index === 0 ? '2' : '3'
} }
else { else {
type = this.data.type type = this.data.type
} }
let EndMonth = '' let EndMonth = ''
let BeginMonth = '' let BeginMonth = ''
if (type == '1') { if (type == '2') {
EndMonth = dayjs().format('YYYY-MM-DD')
BeginMonth = dayjs().subtract(6, 'd').format('YYYY-MM-DD')
}
else if (type == '2') {
EndMonth = dayjs().format('YYYY-MM') EndMonth = dayjs().format('YYYY-MM')
BeginMonth = dayjs().subtract(1, 'M').format('YYYY-MM') BeginMonth = dayjs().subtract(1, 'M').format('YYYY-MM')
} }
@ -494,7 +491,7 @@ Page({
page: newPage, page: newPage,
}, },
}).then((res) => { }).then((res) => {
let list = res.page == 1 ? res.list : [...this.data.list, ...res.list] const list = res.page == 1 ? res.list : [...this.data.list, ...res.list]
this.setData({ this.setData({
list, list,
pagination: { pagination: {

1
src/patient/pages/qolReport/index.wxml

@ -10,7 +10,6 @@
title-inactive-color="#69686E" title-inactive-color="#69686E"
bind:change="handleChangeType" bind:change="handleChangeType"
> >
<van-tab title="日"></van-tab>
<van-tab title="月度"></van-tab> <van-tab title="月度"></van-tab>
<van-tab title="年度"></van-tab> <van-tab title="年度"></van-tab>
</van-tabs> </van-tabs>

12
src/patient/pages/qolResult/index.wxml

@ -17,9 +17,9 @@
</view> </view>
<view class="tip">分数越高,对生活质量影响越小</view> <view class="tip">分数越高,对生活质量影响越小</view>
</view> </view>
<image class="status" wx:if="{{detail.TotalScore >= 80}}" src="{{imageUrl}}icon72.png?t={{Timestamp}}"></image> <image class="status" wx:if="{{detail.TotalScore >= 80}}" src="{{imageUrl}}icon123.png?t={{Timestamp}}"></image>
<image class="status" wx:elif="{{detail.TotalScore >= 40}}" src="{{imageUrl}}icon71.png?t={{Timestamp}}"></image> <image class="status" wx:elif="{{detail.TotalScore >= 40}}" src="{{imageUrl}}icon121.png?t={{Timestamp}}"></image>
<image class="status" wx:else src="{{imageUrl}}icon70.png?t={{Timestamp}}"></image> <image class="status" wx:else src="{{imageUrl}}icon122.png?t={{Timestamp}}"></image>
</view> </view>
<view class="c-line"></view> <view class="c-line"></view>
<view <view
@ -111,7 +111,11 @@
</view> </view>
<view class="e-container"> <view class="e-container">
<view class="r1">定期评测,可帮助您更好地了解改善情况</view> <view class="r1">定期评测,可帮助您更好地了解改善情况</view>
<view class="r1">已完成评测<text class="num">{{detail.Times}}</text>次</view> <view class="r1">
已完成评测
<text class="num">{{detail.Times}}</text>
</view>
<view class="btn" bind:tap="handleReport"> <view class="btn" bind:tap="handleReport">
查看我的评估报告 查看我的评估报告
<van-icon name="arrow" /> <van-icon name="arrow" />

11
src/utils/request.ts

@ -1,8 +1,11 @@
interface IGlobalParams { interface IGlobalParams {
gUrl: string gUrl: string
version: string
} }
export function request({ gUrl }: IGlobalParams, { export function request(
{ gUrl, version }: IGlobalParams,
{
url, url,
method, method,
data, data,
@ -12,7 +15,8 @@ export function request({ gUrl }: IGlobalParams, {
loadingText = '加载中...', loadingText = '加载中...',
isJSON = false, isJSON = false,
...options ...options
}: IAgaxParams): Promise<any> { }: IAgaxParams,
): Promise<any> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (loading) { if (loading) {
wx.showLoading({ wx.showLoading({
@ -22,7 +26,8 @@ export function request({ gUrl }: IGlobalParams, {
} }
wx.request({ wx.request({
header: { header: {
loginState: getApp().globalData.loginState, 'loginState': getApp().globalData.loginState,
'X-MP-Version': version,
...header, ...header,
}, },
url: gUrl + url, url: gUrl + url,

Loading…
Cancel
Save