Browse Source

stash

master
kola-web 4 weeks ago
parent
commit
f6a4247b33
  1. 2
      AGENTS.md
  2. 2
      README.md
  3. 2
      dist.ps1
  4. 2
      project.config.json
  5. 182
      project.private.config.json
  6. 10
      src/app.json
  7. 24
      src/app.ts
  8. 8
      src/components/pageNavbar/index.scss
  9. 4
      src/components/pageNavbar/index.wxml
  10. 2
      src/components/referralFrom/index.ts
  11. 2
      src/components/timeOut/index.ts
  12. 760
      src/components/toast/index.scss
  13. 20
      src/components/toast/index.ts
  14. 252
      src/components/toast/index.wxml
  15. 4
      src/custom-tab-bar/index.scss
  16. 23
      src/custom-tab-bar/index.ts
  17. 2
      src/custom-tab-bar/index.wxml
  18. 5
      src/doctor/components/tabbar/index.json
  19. 76
      src/doctor/components/tabbar/index.scss
  20. 31
      src/doctor/components/tabbar/index.ts
  21. 34
      src/doctor/components/tabbar/index.wxml
  22. 4
      src/doctor/pages/d_changeDoctor/index.ts
  23. 6
      src/doctor/pages/d_changePhone/index.ts
  24. 10
      src/doctor/pages/d_createTask/index.ts
  25. 2
      src/doctor/pages/d_customExport/index.ts
  26. 4
      src/doctor/pages/d_exportList/index.ts
  27. 3
      src/doctor/pages/d_home/index.json
  28. 460
      src/doctor/pages/d_home/index.scss
  29. 821
      src/doctor/pages/d_home/index.ts
  30. 275
      src/doctor/pages/d_home/index.wxml
  31. 7
      src/doctor/pages/d_interactive/index.json
  32. 115
      src/doctor/pages/d_interactive/index.scss
  33. 26
      src/doctor/pages/d_interactive/index.ts
  34. 22
      src/doctor/pages/d_interactive/index.wxml
  35. 4
      src/doctor/pages/d_interactiveDoctor/index.json
  36. 621
      src/doctor/pages/d_interactiveDoctor/index.scss
  37. 260
      src/doctor/pages/d_interactiveDoctor/index.ts
  38. 273
      src/doctor/pages/d_interactiveDoctor/index.wxml
  39. 1
      src/doctor/pages/d_invite/index.scss
  40. 66
      src/doctor/pages/d_invite/index.ts
  41. 5
      src/doctor/pages/d_login/index.json
  42. 54
      src/doctor/pages/d_login/index.scss
  43. 60
      src/doctor/pages/d_login/index.ts
  44. 35
      src/doctor/pages/d_login/index.wxml
  45. 3
      src/doctor/pages/d_my/index.json
  46. 167
      src/doctor/pages/d_my/index.scss
  47. 39
      src/doctor/pages/d_my/index.ts
  48. 90
      src/doctor/pages/d_my/index.wxml
  49. 2
      src/doctor/pages/d_patient/index.json
  50. 250
      src/doctor/pages/d_patient/index.scss
  51. 6
      src/doctor/pages/d_patient/index.ts
  52. 199
      src/doctor/pages/d_patient/index.wxml
  53. 3
      src/doctor/pages/d_patientDetail/index.json
  54. 834
      src/doctor/pages/d_patientDetail/index.scss
  55. 12
      src/doctor/pages/d_patientDetail/index.ts
  56. 476
      src/doctor/pages/d_patientDetail/index.wxml
  57. 2
      src/doctor/pages/d_patientList/index.ts
  58. 16
      src/doctor/pages/d_taskDetail/index.ts
  59. 14
      src/doctor/pages/d_taskList/index.ts
  60. 2
      src/doctor/pages/d_trans/index.ts
  61. 4
      src/doctor/pages/d_transfer/index.ts
  62. 8
      src/doctor/pages/d_transferDetail/index.ts
  63. 4
      src/doctor/pages/d_transferLog/index.ts
  64. 131
      src/doctor/pages/d_userInfo/index.scss
  65. 8
      src/doctor/pages/d_userInfo/index.ts
  66. 28
      src/doctor/pages/d_userInfo/index.wxml
  67. 6
      src/gift/pages/conformOrder/index.ts
  68. 2
      src/gift/pages/dtpDurg/index.ts
  69. 10
      src/gift/pages/giftDetail/index.ts
  70. 6
      src/gift/pages/giftList/index.ts
  71. 2
      src/gift/pages/myGift/index.ts
  72. 18
      src/gift/pages/myHealthRecord/index.ts
  73. 2
      src/gift/pages/orderDetail/index.ts
  74. 2
      src/gift/pages/orderEnd/index.ts
  75. 4
      src/gift/pages/priceDetail/index.ts
  76. 2
      src/gift/pages/scoreRule/index.ts
  77. 8
      src/gift/pages/siteEdit/index.ts
  78. 2
      src/gift/pages/siteList/index.ts
  79. 4
      src/gift/pages/vipCert/index.ts
  80. 2
      src/gift/pages/vipPending/index.ts
  81. 2
      src/gift/pages/vipReject/index.json
  82. 108
      src/gift/pages/vipReject/index.scss
  83. 12
      src/gift/pages/vipReject/index.wxml
  84. BIN
      src/images/bg14.png
  85. BIN
      src/images/bg15.png
  86. BIN
      src/images/bg16.png
  87. BIN
      src/images/bg17.png
  88. BIN
      src/images/bg18.png
  89. BIN
      src/images/bg19.png
  90. BIN
      src/images/bg20.png
  91. BIN
      src/images/bg21.png
  92. BIN
      src/images/doctor/tabbar/1-active.png
  93. BIN
      src/images/doctor/tabbar/1.png
  94. BIN
      src/images/doctor/tabbar/2-active.png
  95. BIN
      src/images/doctor/tabbar/2.png
  96. BIN
      src/images/doctor/tabbar/3-active.png
  97. BIN
      src/images/doctor/tabbar/3.png
  98. BIN
      src/images/doctor/tabbar/4-active.png
  99. BIN
      src/images/doctor/tabbar/4.png
  100. BIN
      src/images/icon19.png
  101. Some files were not shown because too many files have changed in this diff Show More

2
AGENTS.md

@ -204,7 +204,7 @@ IGG4 重症肌无力(MG)患者社区微信小程序。两种用户角色:
- **`noImplicitAny: false`** — 允许隐式 any - **`noImplicitAny: false`** — 允许隐式 any
- **`removeComments: true`**(tsconfig)— 编译输出移除注释 - **`removeComments: true`**(tsconfig)— 编译输出移除注释
- **Prettier**:无分号、单引号、尾逗号、120 字符宽度;`.wxml` 按 HTML 解析,`.wxss` 按 CSS 解析,`.wxs` 按 babel 解析 - **Prettier**:无分号、单引号、尾逗号、120 字符宽度;`.wxml` 按 HTML 解析,`.wxss` 按 CSS 解析,`.wxs` 按 babel 解析
- **API URL 格式**:所有 API 调用使用 `?r=模块/动作` 格式(如 `?r=igg4/user/init-login`、`?r=igg4/account/info`) - **API URL 格式**:所有 API 调用使用 `?r=模块/动作` 格式(如 `?r=zd/user/init-login`、`?r=zd/account/info`)
- **默认分享**:患者端页面分享到 `/pages/index/index`,医生端页面分享到 `/doctor/pages/d_home/index`,标题:"重症肌无力加油站,重拾生活掌控感!" - **默认分享**:患者端页面分享到 `/pages/index/index`,医生端页面分享到 `/doctor/pages/d_home/index`,标题:"重症肌无力加油站,重拾生活掌控感!"
- **客服电话**:全局 `handleMakePhoneCall` 拨打 `4008102299` - **客服电话**:全局 `handleMakePhoneCall` 拨打 `4008102299`

2
README.md

@ -42,7 +42,7 @@ wx.showModal({
title: '', title: '',
confirmColor: '#cf5375', confirmColor: '#cf5375',
}) })
// 医生端 confirmColor: '#62bed0', // 医生端 confirmColor: 'rgba(22, 121, 203, 1)',
``` ```
1)提供3中的3个路径链接; 1)提供3中的3个路径链接;

2
dist.ps1

@ -6,3 +6,5 @@ svn add . --no-ignore --force
# Commit the changes with a message # Commit the changes with a message
svn ci -m "版本更新" svn ci -m "版本更新"
ssh hb127 "cd /data/wwwroot/default/igg4/shop/frontend/web/igg4 && svn up && exit"

2
project.config.json

@ -69,7 +69,7 @@
], ],
"include": [] "include": []
}, },
"appid": "wxc3cdb3c4d4f62cea", "appid": "wx9404bbbdaf52c276",
"scripts": { "scripts": {
"beforeCompile": "pnpm run beforeCompile", "beforeCompile": "pnpm run beforeCompile",
"beforePreview": "pnpm run beforeCompile", "beforePreview": "pnpm run beforeCompile",

182
project.private.config.json

@ -18,6 +18,186 @@
"bigPackageSizeSupport": false "bigPackageSizeSupport": false
}, },
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"condition": {}, "condition": {
"miniprogram": {
"list": [
{
"name": "医生-邀约",
"pathName": "doctor/pages/d_invite/index",
"query": "",
"scene": null,
"launchMode": "default"
},
{
"name": "患者-我的",
"pathName": "doctor/pages/d_my/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "医生-个人信息",
"pathName": "doctor/pages/d_userInfo/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "医生-医患互动",
"pathName": "doctor/pages/d_interactiveDoctor/index",
"query": "patientId=1313",
"launchMode": "default",
"scene": null
},
{
"name": "患者-互动",
"pathName": "doctor/pages/d_interactive/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "医生-患者详情",
"pathName": "doctor/pages/d_patientDetail/index",
"query": "id=1313",
"launchMode": "default",
"scene": null
},
{
"name": "医生-患者列表",
"pathName": "doctor/pages/d_patient/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "医生-首页",
"pathName": "doctor/pages/d_home/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "医生-登录",
"pathName": "doctor/pages/d_login/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-问卷",
"pathName": "pages/qaForm/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-用药认证审核失败",
"pathName": "gift/pages/vipReject/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-审核中",
"pathName": "/pages/certPending/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-认证用药成功",
"pathName": "/pages/certReslove/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-认证用药身份",
"pathName": "pages/uploadCert/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-医生介绍",
"pathName": "pages/doctorDetail/index",
"query": "id=12",
"launchMode": "default",
"scene": null
},
{
"name": "患者-医患互动",
"pathName": "pages/interactivePatient/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-医院介绍",
"pathName": "pages/hospital/index",
"query": "id=12",
"launchMode": "default",
"scene": null
},
{
"name": "患者-就诊地图",
"pathName": "pages/doctor/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-活动详情",
"pathName": "pages/liveDetail/index",
"query": "id=108",
"launchMode": "default",
"scene": null
},
{
"name": "患者-活动",
"pathName": "pages/live/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-我的",
"pathName": "pages/my/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-首页",
"pathName": "pages/index/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-知识库",
"pathName": "pages/repository/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-录入个人信息",
"pathName": "pages/enterInfo/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-登录",
"pathName": "pages/login/index",
"query": "",
"launchMode": "default",
"scene": null
}
]
}
},
"libVersion": "3.5.8" "libVersion": "3.5.8"
} }

10
src/app.json

@ -40,10 +40,6 @@
"pages/liveDetail/index", "pages/liveDetail/index",
"pages/liveResult/index", "pages/liveResult/index",
"pages/signIn/index", "pages/signIn/index",
"pages/adl/index",
"pages/adlShare/index",
"pages/adlTest/index",
"pages/adlResult/index",
"pages/smallPage/index", "pages/smallPage/index",
"pages/hospital/index", "pages/hospital/index",
"pages/doctor/index", "pages/doctor/index",
@ -57,7 +53,7 @@
"pages/nrdlTable/index", "pages/nrdlTable/index",
"pages/interactivePatient/index", "pages/interactivePatient/index",
"pages/referral/index", "pages/referral/index",
"pages/demo/index" "pages/qaForm/index"
], ],
"subpackages": [ "subpackages": [
{ {
@ -135,11 +131,11 @@
}, },
{ {
"pagePath": "pages/repository/index", "pagePath": "pages/repository/index",
"text": "知识" "text": "知识"
}, },
{ {
"pagePath": "pages/live/index", "pagePath": "pages/live/index",
"text": "会议课堂" "text": "活动"
}, },
{ {
"pagePath": "pages/story/index", "pagePath": "pages/story/index",

24
src/app.ts

@ -17,9 +17,15 @@ App<IAppOption>({
globalData: { globalData: {
// dev // dev
// appid:wxc3cdb3c4d4f62cea // appid:wxc3cdb3c4d4f62cea
url: 'https://m.igg4.hbraas.com', // url: 'https://m.igg4.hbraas.com',
upFileUrl: 'https://m.igg4.hbraas.com/', // upFileUrl: 'https://m.igg4.hbraas.com/',
imageUrl: 'https://m.igg4.hbraas.com/igg4/', imageUrl: 'https://m.igg4.hbraas.com/igg4/',
// appid:wx9404bbbdaf52c276
url: 'https://m.zd.hbraas.com',
upFileUrl: 'https://m.zd.hbraas.com/',
// imageUrl: 'https://m.zd.hbraas.com/zd/',
// pro // pro
// appid:wx96f45ca4f1fa36ec // appid:wx96f45ca4f1fa36ec
// url: 'https://m.igg4.hbsaas.com', // url: 'https://m.igg4.hbsaas.com',
@ -136,7 +142,7 @@ App<IAppOption>({
success(res) { success(res) {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/user/init-login', url: '?r=zd/user/init-login',
data: { data: {
code: res.code, code: res.code,
}, },
@ -388,7 +394,7 @@ App<IAppOption>({
} }
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/account/info', url: '?r=zd/account/info',
showMsg: false, showMsg: false,
}).then((res) => { }).then((res) => {
res.UserType = res.UserType || 1 res.UserType = res.UserType || 1
@ -410,7 +416,7 @@ App<IAppOption>({
) { ) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/account/update-doctor', url: '?r=zd/account/update-doctor',
data: { data: {
inviteDoctorId: doctorId, inviteDoctorId: doctorId,
inviteChannel: inviteChan, inviteChannel: inviteChan,
@ -420,7 +426,7 @@ App<IAppOption>({
if (recommendDoctorId && doctorId) { if (recommendDoctorId && doctorId) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor-recommend/add-record', url: '?r=zd/doctor-recommend/add-record',
data: { data: {
recommendDoctorId: doctorId, recommendDoctorId: doctorId,
beRecommendDoctorId: recommendDoctorId, beRecommendDoctorId: recommendDoctorId,
@ -433,9 +439,9 @@ App<IAppOption>({
}) })
}, },
mpBehavior(data: { PageName: string; doctor?: boolean }) { mpBehavior(data: { PageName: string; doctor?: boolean }) {
let url = '?r=igg4/mp-behavior/add' let url = '?r=zd/mp-behavior/add'
if (data.doctor) { if (data.doctor) {
url = '?r=igg4/doctor/mp-behavior/add' url = '?r=zd/doctor/mp-behavior/add'
} }
delete data.doctor delete data.doctor
wx.ajax({ wx.ajax({
@ -514,7 +520,7 @@ App<IAppOption>({
clickPush() { clickPush() {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/nrdl/add-push-click-record', url: '?r=zd/nrdl/add-push-click-record',
}) })
}, },
watch: function (key, method) { watch: function (key, method) {

8
src/components/pageNavbar/index.scss

@ -6,11 +6,11 @@
margin-right: 40rpx; margin-right: 40rpx;
} }
.nav-img { .nav-img {
width: 356rpx; width: 278rpx;
height: 46rpx; height: 78rpx;
} }
.drug-nav-img { .drug-nav-img {
width: 199rpx; width: 278rpx;
height: 36rpx; height: 78rpx;
} }
} }

4
src/components/pageNavbar/index.wxml

@ -1,7 +1,7 @@
<van-nav-bar title="" custom-style="background:transparent;"> <van-nav-bar title="" custom-style="background:transparent;">
<view class="navbar" slot="left"> <view class="navbar" slot="left">
<van-icon wx:if="{{back}}" class="back-icon" name="arrow-left" color="#333333" size="22" bind:tap="handleBack" /> <van-icon wx:if="{{back}}" class="back-icon" name="arrow-left" color="#333333" size="22" bind:tap="handleBack" />
<image wx:if="{{drug}}" class="drug-nav-img" src="{{imageUrl}}1.5/page-title.png?t={{Timestamp}}"></image> <image wx:if="{{drug}}" class="drug-nav-img" src="/images/title1.png"></image>
<image wx:else class="nav-img" src="{{imageUrl}}1/page-title.png?t={{Timestamp}}"></image> <image wx:else class="nav-img" src="/images/title1.png"></image>
</view> </view>
</van-nav-bar> </van-nav-bar>

2
src/components/referralFrom/index.ts

@ -112,7 +112,7 @@ Component({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/re-visit/save-record', url: '?r=zd/re-visit/save-record',
data: params, data: params,
}).then(() => { }).then(() => {
if (recordId) { if (recordId) {

2
src/components/timeOut/index.ts

@ -84,7 +84,7 @@ Component({
handleAsideOut() { handleAsideOut() {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/score/send-score", url: "?r=zd/score/send-score",
data: { data: {
Type: this.data.asideType, Type: this.data.asideType,
Id: this.data.detailId, Id: this.data.detailId,

760
src/components/toast/index.scss

@ -2809,3 +2809,763 @@
} }
} }
} }
.popup1 {
padding: 220rpx 0 0;
width: 630rpx;
box-sizing: border-box;
.container {
margin-top: -60rpx;
padding: 32rpx;
background: linear-gradient(180deg, #ebe4ff 0%, #ffffff 100%);
border-radius: 24rpx;
.user {
padding: 24rpx;
display: flex;
align-items: center;
border-radius: 24rpx;
background-color: #fff;
.avatar-wrapper {
flex-shrink: 0;
padding: 0;
margin: 0;
width: 108rpx;
height: 108rpx;
gap: 16rpx;
outline: none;
border: 2px solid #fff;
border-radius: 50%;
&::after {
border: none;
}
.avatar {
width: 100%;
height: 100%;
border-radius: 50%;
}
}
.wrap {
flex: 1;
padding-left: 24rpx;
.nickname {
font-size: 36rpx;
font-weight: bold;
color: rgba(1, 1, 5, 1);
}
.hostipal {
margin-top: 16rpx;
line-height: 1;
font-size: 28rpx;
color: rgba(173, 172, 178, 1);
.tag {
margin-left: 10rpx;
display: inline-block;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
padding: 2rpx 10rpx;
background: #8c75d0;
border-radius: 8rpx 8rpx 8rpx 8rpx;
}
}
}
}
}
}
.popup2 {
width: 590rpx;
height: 880rpx;
.p-img {
width: 100%;
height: 100%;
}
}
.popup3 {
width: 590rpx;
height: 880rpx;
.p-img {
width: 100%;
height: 100%;
}
}
.popup4 {
width: 590rpx;
height: 620rpx;
.p-img {
width: 100%;
height: 100%;
}
}
.popup5 {
background-color: #fff;
.container {
padding: 64rpx 0 104rpx;
.title {
display: flex;
align-items: center;
justify-content: center;
font-size: 40rpx;
color: rgba(40, 48, 49, 1);
line-height: 64rpx;
gap: 8rpx;
.tag {
padding: 0 10rpx;
color: #fff;
background-color: rgba(140, 117, 208, 1);
border-radius: 12rpx;
line-height: 52rpx;
}
}
.content {
font-size: 40rpx;
color: rgba(40, 48, 49, 1);
text-align: center;
}
.btn {
margin: 612rpx auto 0;
font-size: 36rpx;
color: rgba(255, 255, 255, 1);
width: 590rpx;
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(89deg, #8c75d0 0%, #b7bdff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
}
}
.popup6 {
width: 590rpx;
height: 880rpx;
position: relative;
.p-img {
width: 100%;
height: 100%;
}
.code {
position: absolute;
top: 350rpx;
left: 50%;
transform: translateX(-50%);
width: 290rpx;
height: 290rpx;
}
}
.popup7 {
.badge {
position: relative;
z-index: 1;
width: 126rpx;
height: 124rpx;
display: block;
margin: 0 auto;
}
.contaienr {
margin-top: -80rpx;
padding: 122rpx 0 0;
width: 540rpx;
border-radius: 24rpx;
box-sizing: border-box;
background: linear-gradient(353deg, #ffffff 0%, #f5eeff 100%);
box-shadow: inset 0rpx -1rpx 0rpx 0rpx #e5e6eb;
.content {
font-size: 36rpx;
color: #adacb2;
text-align: center;
}
.footer {
margin-top: 66rpx;
border-top: 1px solid #e5e6eb;
display: flex;
.sure,
.cancel {
flex: 1;
padding: 22rpx;
text-align: center;
font-size: 32rpx;
}
.cancel {
border-right: 1px solid #e5e6eb;
color: #211d2e;
}
.sure {
color: #b982ff;
}
}
}
}
.popup8 {
width: 590rpx;
height: 880rpx;
position: relative;
.p-img {
width: 100%;
height: 100%;
}
.code {
position: absolute;
top: 372rpx;
left: 50%;
transform: translateX(-50%);
border-radius: 24rpx;
width: 300rpx;
height: 300rpx;
}
}
.popup11 {
padding: 48rpx 50rpx 48rpx;
width: 650rpx;
box-sizing: border-box;
background-color: #fff;
border-radius: 24rpx;
.title {
margin-top: 24rpx;
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
line-height: 56rpx;
text-align: center;
}
.content {
margin-top: 24rpx;
text-align: center;
.link {
font-size: 32rpx;
color: #b982ff;
}
}
.footer {
margin-top: 40rpx;
display: flex;
gap: 30rpx;
.sure,
.cancel {
flex: 1;
padding: 20rpx;
text-align: center;
font-size: 36rpx;
border-radius: 100rpx;
}
.cancel {
padding: 18rpx 0;
color: #b982ff;
border: 1px solid #b982ff;
}
.sure {
padding: 0;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
}
}
.popup9 {
padding: 32rpx;
width: 530rpx;
height: 452rpx;
box-sizing: border-box;
background-color: #fff;
text-align: center;
.icon {
width: 128rpx;
height: 128rpx;
}
.title {
margin-top: 24rpx;
font-size: 38rpx;
color: #211d2e;
font-weight: bold;
line-height: 56rpx;
}
.btn {
margin: 36rpx auto 0;
width: 418rpx;
height: 88rpx;
line-height: 88rpx;
font-size: 32rpx;
color: #ffffff;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
}
.popup10,
.popup11 {
padding: 48rpx 50rpx 48rpx;
width: 650rpx;
box-sizing: border-box;
background-color: #fff;
border-radius: 24rpx;
.title {
margin-top: 24rpx;
font-size: 36rpx;
color: rgba(33, 33, 32, 1);
font-weight: bold;
line-height: 56rpx;
text-align: center;
}
.content {
margin-top: 24rpx;
text-align: center;
.link {
font-size: 36rpx;
color: rgba(22, 121, 203, 1);
}
}
.footer {
margin-top: 40rpx;
display: flex;
gap: 30rpx;
.sure,
.cancel {
flex: 1;
padding: 20rpx;
text-align: center;
font-size: 36rpx;
border-radius: 12rpx;
}
.cancel {
padding: 18rpx 0;
color: rgba(22, 121, 203, 1);
border: 1px solid rgba(22, 121, 203, 1);
}
.sure {
padding: 0;
background: linear-gradient( 90deg, #293B9F 0%, #1679CB 100%);
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
}
}
.popup12 {
.popup-container {
padding: 0 40rpx 40rpx;
width: 630rpx;
height: 860rpx;
box-sizing: border-box;
.container {
padding: 236rpx 0 0;
.c-header {
display: flex;
align-items: center;
justify-content: center;
.avatar {
width: 76rpx;
height: 76rpx;
border-radius: 50%;
}
.name {
margin-left: 20rpx;
font-size: 32rpx;
color: #211d2e;
font-weight: bold;
line-height: 44rpx;
}
}
.code {
margin: 60rpx auto 0;
display: block;
width: 260rpx;
height: 260rpx;
border-radius: 24rpx;
}
.tip {
margin-top: 60rpx;
text-align: center;
font-size: 32rpx;
color: #211d2e;
line-height: 44rpx;
}
}
}
}
.popup13 {
.popup-container {
padding: 48rpx 32rpx 32rpx;
width: 670rpx;
height: 1124rpx;
background: linear-gradient(180deg, #f1e6ff 0%, #ffffff 12.03%, #ffffff 100%);
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid #ffffff;
box-sizing: border-box;
.title {
font-size: 44rpx;
color: #b982ff;
text-align: center;
font-weight: bold;
}
.scroll {
margin-top: 32rpx;
padding: 32rpx 32rpx 32rpx 0;
background: #f6f8f9;
border-radius: 32rpx 32rpx 32rpx 32rpx;
height: 824rpx;
overflow-y: auto;
box-sizing: border-box;
.s-title {
font-size: 36rpx;
line-height: 60rpx;
font-weight: bold;
margin-left: 32rpx;
color: #332c49;
border-radius: 0 32rpx 32rpx 0;
display: inline-block;
margin-top: 28rpx;
position: relative;
&::after {
position: absolute;
left: 0;
bottom: 6rpx;
content: '';
width: 100%;
height: 16rpx;
background: linear-gradient(90deg, #b982ff 0%, rgba(185, 130, 255, 0) 100%);
opacity: 0.4;
}
&:first-of-type {
margin-top: 0;
}
}
.content {
margin-top: 32rpx;
padding: 0 32rpx;
font-size: 32rpx;
color: #69686e;
line-height: 48rpx;
.high {
color: #b982ff;
font-weight: bold;
}
}
.s-name {
margin-top: 32rpx;
padding: 0 32rpx;
font-size: 32rpx;
color: #211d2e;
line-height: 48rpx;
display: flex;
align-items: center;
gap: 8rpx;
&::before {
content: '';
width: 8rpx;
height: 30rpx;
background: #b982ff;
border-radius: 2rpx 2rpx 2rpx 2rpx;
}
}
.row {
padding: 0 32rpx;
.col {
margin-top: 24rpx;
display: flex;
gap: 12rpx;
.order {
margin-top: 10rpx;
flex-shrink: 0;
width: 36rpx;
height: 36rpx;
text-align: center;
line-height: 36rpx;
font-size: 28rpx;
color: #ffffff;
border-radius: 50%;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
}
.c-content {
font-size: 32rpx;
color: #69686e;
line-height: 48rpx;
.high {
color: #b982ff;
font-weight: bold;
}
}
}
}
}
.btn {
margin-top: 32rpx;
width: 606rpx;
height: 88rpx;
font-size: 36rpx;
color: #ffffff;
line-height: 88rpx;
text-align: center;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
}
}
.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: 36rpx;
color: #211d2e;
font-weight: bold;
}
.content {
margin-top: 28rpx;
font-size: 36rpx;
color: #69686e;
line-height: 48rpx;
text-align: center;
}
.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;
}
}
}
.popup15 {
.badge {
position: relative;
z-index: 1;
display: block;
width: 144rpx;
height: 144rpx;
margin: 0 auto -72rpx;
text-align: center;
}
.popup-container {
width: 670rpx;
box-sizing: border-box;
padding: 118rpx 48rpx 16rpx;
border-radius: 32rpx;
background: #fff;
.title {
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
text-align: center;
}
.content {
margin-top: 20rpx;
font-size: 32rpx;
color: #69686e;
line-height: 48rpx;
text-align: center;
.date {
color: #b982ff;
}
}
.btn {
margin-top: 44rpx;
height: 88rpx;
line-height: 88rpx;
text-align: center;
font-size: 36rpx;
color: #ffffff;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx;
}
.cancel {
padding: 32rpx;
font-size: 32rpx;
color: #b982ff;
text-align: center;
}
}
}
.popup16 {
.badge {
position: relative;
z-index: 1;
display: block;
width: 144rpx;
height: 144rpx;
margin: 0 auto -72rpx;
text-align: center;
}
.popup-container {
width: 670rpx;
box-sizing: border-box;
padding: 118rpx 48rpx 44rpx;
border-radius: 32rpx;
background: #fff;
.title {
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
text-align: center;
}
.p-footer {
margin-top: 52rpx;
display: flex;
gap: 30rpx;
.sure,
.cancel {
flex: 1;
font-size: 36rpx;
border-radius: 100rpx;
height: 88rpx;
box-sizing: border-box;
}
.cancel {
color: #b982ff;
border: 1px solid #b982ff;
display: flex;
align-items: center;
justify-content: center;
}
.sure {
padding: 0;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
.popup17 {
.badge {
position: relative;
z-index: 1;
display: block;
width: 144rpx;
height: 144rpx;
margin: 0 auto -72rpx;
text-align: center;
}
.popup-container {
width: 670rpx;
box-sizing: border-box;
padding: 118rpx 48rpx 44rpx;
border-radius: 32rpx;
background: #fff;
.title {
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
text-align: center;
}
.p-footer {
margin-top: 52rpx;
display: flex;
gap: 30rpx;
.sure,
.cancel {
flex: 1;
font-size: 36rpx;
border-radius: 100rpx;
height: 88rpx;
box-sizing: border-box;
}
.cancel {
color: #b982ff;
border: 1px solid #b982ff;
display: flex;
align-items: center;
justify-content: center;
}
.sure {
padding: 0;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
.popup18 {
.badge {
position: relative;
z-index: 1;
display: block;
width: 144rpx;
height: 144rpx;
margin: 0 auto -72rpx;
text-align: center;
}
.popup-container {
width: 670rpx;
box-sizing: border-box;
padding: 118rpx 48rpx 44rpx;
border-radius: 32rpx;
background: #fff;
.title {
font-size: 40rpx;
color: #211d2e;
font-weight: bold;
text-align: center;
}
.p-footer {
margin-top: 52rpx;
display: flex;
gap: 30rpx;
.sure,
.cancel {
flex: 1;
font-size: 36rpx;
border-radius: 100rpx;
height: 88rpx;
box-sizing: border-box;
}
.cancel {
color: #b982ff;
border: 1px solid #b982ff;
display: flex;
align-items: center;
justify-content: center;
}
.sure {
padding: 0;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
.close {
margin: 48rpx auto 0;
display: block;
width: 84rpx;
height: 84rpx;
}

20
src/components/toast/index.ts

@ -60,6 +60,7 @@ Component({
settingsInfo: {}, settingsInfo: {},
userInfo: {}, userInfo: {},
openPatientList: {}, openPatientList: {},
popup1Check1: false,
}, },
lifetimes: { lifetimes: {
attached() { attached() {
@ -72,6 +73,14 @@ Component({
methods: { methods: {
timer: null as any, timer: null as any,
handleOk() { handleOk() {
const { type } = this.data
if (type === 'argument' && !this.data.popup1Check1) {
wx.showToast({
title: '请同意隐私政策',
icon: 'none',
})
return
}
if (this.data.timeOut) { if (this.data.timeOut) {
return return
} }
@ -106,7 +115,7 @@ Component({
getSettingInfo() { getSettingInfo() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/drugs/setting-info', url: '?r=zd/drugs/setting-info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -117,7 +126,7 @@ Component({
getOpenPatientList() { getOpenPatientList() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/nrdl/open-patient-list', url: '?r=zd/nrdl/open-patient-list',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -135,5 +144,12 @@ Component({
url: '/pages/repositoryDetail/index?id=9', url: '/pages/repositoryDetail/index?id=9',
}) })
}, },
handleSelectStatus(e) {
const { status } = e.currentTarget.dataset
this.triggerEvent('ok', { type: 'selectStatusComplete', status })
},
handlePhone(e) {
this.triggerEvent('phone', e.detail)
},
}, },
}) })

252
src/components/toast/index.wxml

@ -824,4 +824,256 @@
<view class="footer">跳转中 {{params.time}}s</view> <view class="footer">跳转中 {{params.time}}s</view>
</view> </view>
</view> </view>
<view
class="popup1"
style="background: url('{{imageUrl}}bg4.png?t={{Timestamp}}') no-repeat top center/100% 304rpx"
wx:if="{{type==='popup1'}}"
>
<view class="container">
<view class="user">
<button class="avatar-wrapper">
<image class="avatar" src="{{params.Img}}"></image>
</button>
<view class="wrap">
<view class="nickname">{{params.Name}}医生</view>
<view class="hostipal">
{{params.HospitalName}}
<view class="tag" wx:if="{{params.HospitalClassificationName || params.HospitalLevel}}">
{{params.HospitalClassificationName}}{{params.HospitalLevel}}
</view>
</view>
</view>
</view>
</view>
</view>
<view class="popup2" wx:if="{{type==='popup2'}}">
<image class="p-img" src="{{imageUrl}}bg5.png?t={{Timestamp}}" show-menu-by-longpress></image>
</view>
<view class="popup3" wx:if="{{type==='popup3'}}">
<image class="p-img" src="{{imageUrl}}bg6.png?t={{Timestamp}}" show-menu-by-longpress></image>
</view>
<view class="popup4" wx:if="{{type==='popup4'}}">
<image class="p-img" src="{{imageUrl}}bg7.png?t={{Timestamp}}" show-menu-by-longpress></image>
</view>
<view class="popup5" wx:if="{{type==='popup5'}}">
<view
class="container"
style="background: url('{{imageUrl}}bg9.png?t={{Timestamp}}') no-repeat bottom center/100% 804rpx"
>
<view class="title">
<view class="tag">转发</view>
报告至
</view>
<view class="content">"文件传输助手"完成下载</view>
<view class="btn" bind:tap="handleOk">继续</view>
</view>
</view>
<view class="popup6" wx:if="{{type==='popup6'}}">
<image class="p-img" src="{{imageUrl}}bg32.png?t={{Timestamp}}"></image>
<image class="code" src="{{params.qrCode}}" show-menu-by-longpress></image>
</view>
<view class="popup7" wx:if="{{type==='popup7'}}">
<image class="badge" src="{{imageUrl}}icon78.png?t={{Timestamp}}"></image>
<view class="contaienr">
<view class="content">要删除这张照片吗 ?</view>
<view class="footer">
<view class="cancel" bind:tap="handleCancel">取消</view>
<view class="sure" bind:tap="handleOk">确定</view>
</view>
</view>
</view>
<view class="popup8" wx:if="{{type==='popup8'}}">
<image class="p-img" src="{{imageUrl}}bg23.png?t={{Timestamp}}"></image>
<image class="code" src="{{params.subscribe_img}}" show-menu-by-longpress></image>
</view>
<view class="popup11" wx:if="{{type==='popup11'}}">
<view class="title">我已阅读并同意</view>
<view class="content">
<text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index">《隐私政策》</text>
</view>
<view class="footer">
<view class="cancel" bind:tap="handleCancel">取消</view>
<view wx:if="{{params.customPhone}}" class="sure" bind:tap="handleOk">确定</view>
<button wx:else class="sure" open-type="getPhoneNumber" bindgetphonenumber="handlePhone">确定</button>
</view>
</view>
<view class="popup9" wx:if="{{type==='popup9'}}">
<image class="icon" src="{{imageUrl}}icon100.png?t={{Timestamp}}"></image>
<view class="title">
文字包含不合规内容
<view></view>
请修改后重新提交
</view>
<view class="btn" bind:tap="handleOk">知道了</view>
</view>
<view class="popup10" wx:if="{{type==='popup10'}}">
<view class="title">我已阅读并同意</view>
<view class="content">
<text class="link" bind:tap="routerTo" data-path="/doc/pages/doc2/index?active=1">《用户协议》</text>
<text class="link" bind:tap="routerTo" data-path="/doc/pages/doc2/index">《隐私政策》</text>
<view></view>
<text class="link" bind:tap="routerTo" data-path="/doc/pages/doc2/index?active=2">《个人信息共享知情同意书》</text>
</view>
<view class="footer">
<view class="cancel" bind:tap="handleCancel">取消</view>
<button class="sure" open-type="getPhoneNumber" bindgetphonenumber="handlePhone">确定</button>
</view>
</view>
<view class="popup12" wx:if="{{type==='popup12'}}">
<view
class="popup-container"
style="background: url('{{imageUrl}}bg29.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="container">
<view class="c-header">
<image class="avatar" src="{{params.ConsultQwAvatar}}"></image>
<view class="name">{{params.ConsultQwName}}</view>
</view>
<image class="code" mode="aspectFill" src="{{params.ConsultQwImg}}" show-menu-by-longpress></image>
<view class="tip">
长按识别二维码
<view></view>
添加客服人员
</view>
</view>
</view>
</view>
<view class="popup13" wx:if="{{type==='popup13'}}">
<view class="popup-container">
<view class="title">了解双通道/临采/院内用药</view>
<view class="scroll">
<view class="s-title">什么是"双通道"?</view>
<view class="content">
"双通道"是指除了医院,患者还能去
<text class="high">指定药店</text>
买药,而且
<text class="high">报销比例和医院一样。</text>
</view>
<view class="s-name">"双通道"报销需要注意以下两点</view>
<view class="row">
<view class="col">
<view class="order">1</view>
<view class="c-content">
外配处方通常存在
<text class="high">有效期</text>
,我们要在有效期内去药店购药;
</view>
</view>
<view class="col">
<view class="order">2</view>
<view class="c-content">
药店必须是纳入"双通道"管理的
<text class="high">定点药店</text>
,才能享受同等报销待遇。
</view>
</view>
</view>
<view class="s-title">什么是"临采"?</view>
<view class="content">
"临采"全称是临时采购,适用场景主要是:医院暂时缺货、有突发的治疗需求、或者有特种病例需要紧急用药的情况。
</view>
<view class="content">
整个流程有
<text class="high">明确的时间限制</text>
,是短期解决"缺药"问题的办法,
<text class="high">不适合长期</text>
常规用药。
</view>
<view class="s-title">什么是"院内用药"?</view>
<view class="content">
院内用药就是"在医院看诊-拿药-直接报销"的一站式全流程,也是最传统、最省心的方式,全程
<text class="high">自动报销</text>
</view>
<view class="s-name">"院内用药"报销需满足两个条件</view>
<view class="row">
<view class="col">
<view class="order">1</view>
<view class="c-content">
医院必须是
<text class="high">医保定点机构</text>
</view>
</view>
<view class="col">
<view class="order">2</view>
<view class="c-content">
医生开具的处方要符合药品说明书适应症和医保限定支付范围(即:
<text class="high">中重度甲状腺眼病</text>
)。
</view>
</view>
</view>
</view>
<view class="btn" bind:tap="handleOk">了解更多详情</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>
<view class="popup15" wx:if="{{type==='popup15'}}">
<image class="badge" src="{{imageUrl}}icon155.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">确认删除记录?</view>
<view class="content">
删除
<text class="date">{{params.recordDate}}</text>
记录
<view>此操作不可逆,相关照片将永久删除</view>
</view>
<view class="btn" bind:tap="handleOk">确认删除</view>
<view class="cancel" bind:tap="handleCancel">取消</view>
</view>
</view>
<view class="popup16" wx:if="{{type==='popup16'}}">
<image class="badge" src="{{imageUrl}}icon156.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">您的记录还未保存</view>
<view class="p-footer">
<view class="cancel" bind:tap="handleCancel">退出</view>
<view class="sure" bind:tap="handleOk">保存记录</view>
</view>
</view>
</view>
<view class="popup17" wx:if="{{type==='popup17'}}">
<image class="badge" src="{{imageUrl}}icon156.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">
您有裁剪的照片
<view></view>
现在退出会被清空
</view>
<view class="p-footer">
<view class="cancel" bind:tap="handleCancel">取消</view>
<view class="sure" bind:tap="handleOk">继续退出</view>
</view>
</view>
</view>
<view class="popup18" wx:if="{{type==='popup18'}}">
<image class="badge" src="{{imageUrl}}icon156.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">
是否替换已有基准照
</view>
<view class="p-footer">
<view class="cancel" bind:tap="handleCancel">取消</view>
<view class="sure" bind:tap="handleOk">确认替换</view>
</view>
</view>
</view>
<image
wx:if="{{params.close}}"
class="close"
src="{{imageUrl}}icon11.png?t={{Timestamp}}"
bind:tap="handleCancel"
></image>
</van-popup> </van-popup>

4
src/custom-tab-bar/index.scss

@ -10,10 +10,10 @@
font-size: 24rpx; font-size: 24rpx;
color: #CCCCCC; color: #CCCCCC;
&.active{ &.active{
color: #CF5375; color: rgba(14, 182, 109, 1);
} }
&.drug-active{ &.drug-active{
color: #25D9C8; color: rgba(89, 86, 233, 1);
} }
} }
} }

23
src/custom-tab-bar/index.ts

@ -16,23 +16,17 @@ Component({
}, },
{ {
pagePath: '/pages/repository/index', pagePath: '/pages/repository/index',
text: 'MG全知道', text: '知识',
icon: 'story', icon: 'story',
iconActive: 'story-active', iconActive: 'story-active',
}, },
{ {
pagePath: '/pages/live/index', pagePath: '/pages/live/index',
text: '周三大咖说', text: '活动',
icon: 'gift', icon: 'gift',
iconActive: 'gift-active', iconActive: 'gift-active',
}, },
{ {
pagePath: '/pages/story/index',
text: '向往的生活',
icon: 'class',
iconActive: 'class-active',
},
{
pagePath: '/pages/my/index', pagePath: '/pages/my/index',
text: '我的', text: '我的',
icon: 'my', icon: 'my',
@ -69,7 +63,7 @@ Component({
}) })
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/common/get-config', url: '?r=zd/common/get-config',
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
config: res, config: res,
@ -82,7 +76,7 @@ Component({
onChange() {}, onChange() {},
handleNav(e) { handleNav(e) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
const { list, config } = this.data const { list } = this.data
const pagePath = list[index].pagePath const pagePath = list[index].pagePath
app.globalData.BeginnerCardId = '' app.globalData.BeginnerCardId = ''
this.setData({ this.setData({
@ -94,15 +88,6 @@ Component({
url: pagePath, url: pagePath,
}) })
}) })
} else if (pagePath == '/pages/repository/index' && config.picTextEbookStatus == 1) {
app.permissionVerification(2, 0, `/pages/repository/index`).then(() => {
const webviewUrl = encodeURIComponent(
`${app.globalData.url}/zdcare/#/cover?loginState=${app.globalData.loginState}`,
)
wx.navigateTo({
url: `/pages/webview/index?url=${webviewUrl}`,
})
})
} else { } else {
wx.switchTab({ wx.switchTab({
url: pagePath, url: pagePath,

2
src/custom-tab-bar/index.wxml

@ -1,4 +1,4 @@
<van-tabbar active="{{ active }}" active-color="#CF5375" bind:change="onChange" inactive-color="#CCCCCC"> <van-tabbar active="{{ active }}" active-color="rgba(14, 182, 109, 1)" bind:change="onChange" inactive-color="#CCCCCC">
<block wx:for="{{list}}" wx:key="*this"> <block wx:for="{{list}}" wx:key="*this">
<van-tabbar-item <van-tabbar-item
class="tab-item" class="tab-item"

5
src/doctor/components/tabbar/index.json

@ -1,7 +1,4 @@
{ {
"component": true, "component": true,
"usingComponents": { "usingComponents": {}
"van-tabbar": "@vant/weapp/tabbar/index",
"van-tabbar-item": "@vant/weapp/tabbar-item/index"
}
} }

76
src/doctor/components/tabbar/index.scss

@ -1,9 +1,71 @@
.tabbar-item { .tabbar {
width: 25%; position: fixed;
font-size: 20rpx; bottom: 0;
color: rgba(103, 113, 114, 1); left: 0;
.icon { width: 100%;
width: 45rpx; padding: 0 0 calc(env(safe-area-inset-bottom) + 12rpx);
height: 45rpx; display: flex;
justify-content: space-between;
background-color: #fff;
box-shadow: 0rpx 3rpx 27rpx 0rpx rgba(40, 48, 49, 0.1);
.tab-item {
position: relative;
padding-top: 10rpx;
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.icon-wrap {
position: relative;
width: 48rpx;
height: 48rpx;
.icon {
display: block;
width: 100%;
height: 100%;
}
.icon-active {
display: none;
width: 100%;
height: 100%;
}
.dot {
position: absolute;
top: -8rpx;
right: -16rpx;
padding: 0 8rpx;
min-width: 32rpx;
height: 32rpx;
text-align: center;
font-size: 20rpx;
line-height: 32rpx;
color: #ffffff;
border: 2rpx solid #ffffff;
border-radius: 16rpx;
background: #ef3939;
box-sizing: border-box;
}
}
.name {
margin-top: 8rpx;
font-size: 22rpx;
color: rgba(103, 113, 114, 1);
line-height: 21rpx;
}
&.active {
.icon-wrap {
.icon {
display: none;
}
.icon-active {
display: block;
}
}
.name {
color: rgba(98, 190, 208, 1);
}
}
} }
} }

31
src/doctor/components/tabbar/index.ts

@ -1,26 +1,16 @@
const app = getApp<IAppOption>() const app = getApp<IAppOption>()
// pages/story/a.ts
Component({ Component({
/**
*
*/
properties: { properties: {
active: { active: {
type: Number, type: Number,
value: 1000, value: 1000,
}, },
}, },
/**
*
*/
data: { data: {
imageUrl: app.globalData.imageUrl, imageUrl: app.globalData.imageUrl,
Timestamp: app.globalData.Timestamp, Timestamp: app.globalData.Timestamp,
unReadCount: 0, unReadCount: 0,
tablist: [ tablist: [
{ {
name: '首页', name: '首页',
@ -42,28 +32,23 @@ Component({
}, },
lifetimes: { lifetimes: {
attached() { attached() {
// app.waitLogin().then((_res) => { this.getList()
// this.getList()
// })
}, },
}, },
/**
*
*/
methods: { methods: {
onChange(e) { handleTab(e: any) {
if (e.detail === this.data.active) return const { index } = e.currentTarget.dataset
const index = e.detail if (index === this.data.active) return
const path = this.data.tablist[index].path const tab = this.data.tablist[index]
wx.reLaunch({ wx.reLaunch({
url: path, url: tab.path,
}) })
}, },
getList() { getList() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/message-interact/get-interact-patient-list', url: '?r=zd/doctor/message-interact/get-interact-patient-list',
}).then((res) => { }).then((res: any) => {
this.setData({ this.setData({
unReadCount: res.unReadCount, unReadCount: res.unReadCount,
}) })

34
src/doctor/components/tabbar/index.wxml

@ -1,22 +1,12 @@
<van-tabbar <view class="tabbar">
active="{{ active }}" <block wx:for="{{tablist}}" wx:key="name">
bind:change="onChange" <view class="tab-item {{active===index && 'active'}}" bind:tap="handleTab" data-index="{{index}}">
inactive-color="rgba(103, 113, 114, 1)" <view class="icon-wrap">
active-color="rgba(98, 190, 208, 1)" <view class="dot" wx:if="{{index===2 && unReadCount>0}}">{{unReadCount > 99 ? '99+' : unReadCount}}</view>
> <image class="icon" src="{{imageUrl}}/doctor/tabbar/{{index+1}}.png?t={{Timestamp}}"></image>
<van-tabbar-item <image class="icon-active" src="{{imageUrl}}/doctor/tabbar/{{index+1}}-active.png?t={{Timestamp}}"></image>
class="tabbar-item" </view>
wx:for="{{tablist}}" <view class="name">{{item.name}}</view>
wx:key="name" </view>
info="{{index===2 && unReadCount>0 ? unReadCount : ''}}" </block>
> </view>
<image slot="icon" src="{{imageUrl}}/doctor/tabbar/{{index+1}}.png?t={{Timestamp}}" mode="aspectFit" class="icon" />
<image
slot="icon-active"
src="{{imageUrl}}/doctor/tabbar/{{index+1}}-active.png?t={{Timestamp}}"
mode="aspectFit"
class="icon"
/>
{{item.name}}
</van-tabbar-item>
</van-tabbar>

4
src/doctor/pages/d_changeDoctor/index.ts

@ -29,7 +29,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/login/send-verify-code', url: '?r=zd/login/send-verify-code',
data: { data: {
mobile, mobile,
}, },
@ -78,7 +78,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/login/change-doctor-login', url: '?r=zd/doctor/login/change-doctor-login',
data: { data: {
mobile: this.data.mobile, mobile: this.data.mobile,
code: this.data.code, code: this.data.code,

6
src/doctor/pages/d_changePhone/index.ts

@ -15,7 +15,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/account/info', url: '?r=zd/doctor/account/info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -44,7 +44,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/login/send-verify-code', url: '?r=zd/login/send-verify-code',
data: { data: {
mobile, mobile,
}, },
@ -86,7 +86,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/account/update-telephone', url: '?r=zd/doctor/account/update-telephone',
data: { data: {
mobile: this.data.mobile, mobile: this.data.mobile,
code: this.data.code, code: this.data.code,

10
src/doctor/pages/d_createTask/index.ts

@ -80,7 +80,7 @@ Page({
getTemplate() { getTemplate() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/task/get-template', url: '?r=zd/doctor/task/get-template',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -111,7 +111,7 @@ Page({
return wx return wx
.ajax({ .ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/task/filter-patient-num', url: '?r=zd/doctor/task/filter-patient-num',
data: { data: {
Search: this.data.Search, Search: this.data.Search,
HasAdl: this.data.HasAdl, HasAdl: this.data.HasAdl,
@ -146,7 +146,7 @@ Page({
app.mpBehavior({ doctor: true, PageName: 'BTN_NEWMESSAGEPAGE1_CLEAR' }) app.mpBehavior({ doctor: true, PageName: 'BTN_NEWMESSAGEPAGE1_CLEAR' })
wx.showModal({ wx.showModal({
title: '确认清空选项吗', title: '确认清空选项吗',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
this.setData({ this.setData({
@ -353,7 +353,7 @@ Page({
wx.showModal({ wx.showModal({
title: '确认创建群发任务', title: '确认创建群发任务',
content: '将会按您创建的规则给所有符合条件患者发送消息', content: '将会按您创建的规则给所有符合条件患者发送消息',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
const params = { const params = {
@ -386,7 +386,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/task/create', url: '?r=zd/doctor/task/create',
data: params, data: params,
loading: true, loading: true,
}).then(() => { }).then(() => {

2
src/doctor/pages/d_customExport/index.ts

@ -23,7 +23,7 @@ Page({
getList() { getList() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-week-record-list', url: '?r=zd/doctor/doctor-stat/get-week-record-list',
data: { data: {
statId: this.data.id, statId: this.data.id,
count: 0, count: 0,

4
src/doctor/pages/d_exportList/index.ts

@ -29,7 +29,7 @@ Page({
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-week-list', url: '?r=zd/doctor/doctor-stat/get-week-list',
data: { data: {
page: newPage, page: newPage,
}, },
@ -67,7 +67,7 @@ Page({
const d_export_list_guide = wx.getStorageSync('d_export_list_guide') === '1' || false const d_export_list_guide = wx.getStorageSync('d_export_list_guide') === '1' || false
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/adl-stat/download', url: '?r=zd/doctor/adl-stat/download',
data: { data: {
statId: id, statId: id,
}, },

3
src/doctor/pages/d_home/index.json

@ -2,8 +2,7 @@
"navigationStyle": "custom", "navigationStyle": "custom",
"navigationBarTitleText": "首页", "navigationBarTitleText": "首页",
"usingComponents": { "usingComponents": {
"van-sticky": "@vant/weapp/sticky/index", "pageNavbar": "/components/pageNavbar/index",
"navBar": "/components/navBar/navBar",
"ec-canvas": "/components/ec-canvas/ec-canvas", "ec-canvas": "/components/ec-canvas/ec-canvas",
"van-icon": "@vant/weapp/icon/index", "van-icon": "@vant/weapp/icon/index",
"van-dialog": "@vant/weapp/dialog/index", "van-dialog": "@vant/weapp/dialog/index",

460
src/doctor/pages/d_home/index.scss

@ -1,23 +1,15 @@
page { page {
background-color: rgba(242, 244, 245, 1);
padding-bottom: calc(140rpx + env(safe-area-inset-bottom)); padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
} }
.page { .page {
.page-title {
margin-left: 34rpx;
position: absolute;
display: block;
width: 346rpx !important;
height: 43.77rpx;
}
.user { .user {
padding: 72rpx 30rpx 0; padding: 72rpx 30rpx 0;
display: flex; display: flex;
gap: 20rpx; gap: 20rpx;
.avatar { .avatar {
flex-shrink: 0; flex-shrink: 0;
width: 104rpx; width: 112rpx;
height: 104rpx; height: 112rpx;
border-radius: 50%; border-radius: 50%;
} }
.wrap { .wrap {
@ -28,142 +20,23 @@ page {
font-weight: bold; font-weight: bold;
} }
.site { .site {
display: flex; font-size: 32rpx;
flex-wrap: wrap; color: rgba(33, 33, 32, 0.4);
align-items: center;
gap: 8rpx;
font-size: 24rpx;
color: rgba(154, 161, 162, 1);
.tag { .tag {
display: inline-block;
padding: 0 12rpx; padding: 0 12rpx;
font-size: 22rpx; font-size: 22rpx;
color: rgba(229, 154, 41, 1); color: #fff;
border-radius: 8rpx; border-radius: 8rpx;
line-height: 28rpx; line-height: 28rpx;
white-space: nowrap; white-space: nowrap;
background-color: rgba(229, 154, 41, 0.29); background: linear-gradient(272deg, #ffd21e 0%, #ffb514 100%);
}
}
}
.export {
flex-shrink: 0;
.btn {
padding: 12rpx 24rpx;
font-size: 32rpx;
color: #ffffff;
background: #67baca;
border-radius: 48rpx 48rpx 48rpx 48rpx;
line-height: 1;
display: flex;
align-items: center;
gap: 12rpx;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(40, 48, 49, 0.1);
.icon {
width: 32rpx;
height: 32rpx;
}
}
.tip {
position: relative;
text-align: right;
margin-top: 14rpx;
margin-right: 17rpx;
font-size: 24rpx;
color: #9aa1a2;
.hover {
position: absolute;
bottom: -30rpx;
right: 0;
z-index: 10;
white-space: nowrap;
font-size: 28rpx;
line-height: 1;
color: #ffffff;
padding: 14rpx 32rpx;
background: linear-gradient(180deg, #ffc137 0%, #e6a004 100%);
border-radius: 32rpx;
box-shadow: -10rpx 6rpx 12rpx rgba(94, 65, 0, 0.3);
&::before {
position: absolute;
top: -10rpx;
right: 30rpx;
content: '';
width: 0;
height: 0;
border-style: solid;
border-width: 0 36rpx 19rpx 36rpx;
border-color: transparent transparent #f4bb38 transparent;
}
} }
} }
} }
} }
.transfer {
position: relative;
margin: 36rpx 30rpx 0;
padding: 20rpx 32rpx;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10rpx;
background: linear-gradient(341deg, #ffffff 0%, #ffffff 42%, #e8f0f2 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.icon {
width: 44rpx;
height: 44rpx;
}
.name {
flex: 1;
font-size: 32rpx;
color: #283031;
}
.more {
width: 36rpx;
height: 36rpx;
}
.hover {
position: absolute;
bottom: -50rpx;
right: 30%;
z-index: 10;
white-space: nowrap;
font-size: 28rpx;
line-height: 1;
color: #ffffff;
padding: 14rpx 32rpx;
background: linear-gradient(180deg, #ffc137 0%, #e6a004 100%);
border-radius: 32rpx;
box-shadow: -10rpx 6rpx 12rpx rgba(94, 65, 0, 0.3);
.num {
font-size: 36rpx;
}
&::before {
position: absolute;
top: -10rpx;
right: 70rpx;
content: '';
width: 0;
height: 0;
border-style: solid;
border-width: 0 20rpx 19rpx 20rpx;
border-color: transparent transparent #f4bb38 transparent;
}
}
}
.data-tip {
padding-top: 20rpx;
padding-left: 32rpx;
font-size: 24rpx;
color: rgba(154, 161, 162, 1);
}
.new-banner { .new-banner {
margin: 12rpx 30rpx 0; margin: 40rpx 40rpx 0;
padding: 32rpx;
background: linear-gradient(10deg, #ffffff 0%, #eaf1f3 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
gap: 24rpx 26rpx; gap: 24rpx 26rpx;
@ -171,16 +44,18 @@ page {
display: flex; display: flex;
gap: 16rpx; gap: 16rpx;
padding: 30rpx; padding: 30rpx;
background-color: #62bed0; background: #ffffff;
border-radius: 16rpx; box-shadow: 0rpx 4rpx 26rpx 0rpx rgba(40, 48, 49, 0.07);
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #f2f4f5;
.icon { .icon {
width: 84rpx; width: 84rpx;
height: 84rpx; height: 84rpx;
} }
.wrap { .wrap {
.title { .title {
font-size: 24rpx; font-size: 28rpx;
color: #ffffff; color: rgba(33, 33, 32, 0.4);
line-height: 28rpx; line-height: 28rpx;
.question { .question {
margin-left: 8rpx; margin-left: 8rpx;
@ -190,244 +65,23 @@ page {
} }
.num { .num {
margin-top: 14rpx; margin-top: 14rpx;
font-size: 38rpx; font-size: 48rpx;
color: #ffffff; color: rgba(33, 33, 32, 1);
line-height: 1; line-height: 1;
font-weight: bold; font-weight: bold;
.sub { .sub {
font-size: 24rpx; font-size: 28rpx;
} }
} }
} }
} }
} }
.new-sub-banner {
margin: 48rpx 30rpx 0;
padding: 32rpx 32rpx 32rpx;
background: linear-gradient(10deg, #ffffff 0%, #eaf1f3 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
position: relative;
.year {
position: absolute;
width: 156rpx;
height: 40rpx;
left: 50%;
top: -16rpx;
transform: translateX(-50%);
font-size: 28rpx;
color: #ffffff;
text-align: center;
line-height: 40rpx;
}
.n-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24rpx 26rpx;
.item {
gap: 16rpx;
padding: 30rpx;
background-color: #ffffff;
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(40, 48, 49, 0.07);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 1rpx solid #f2f4f5;
.wrap {
.title {
font-size: 24rpx;
color: #9aa1a2;
line-height: 28rpx;
.question {
margin-left: 8rpx;
width: 20rpx;
height: 20rpx;
}
}
.num {
margin-top: 14rpx;
font-size: 38rpx;
color: #283031;
line-height: 1;
font-weight: bold;
.sub {
font-size: 24rpx;
}
}
}
}
}
.tip {
position: relative;
margin-top: 26rpx;
margin-bottom: -30rpx;
padding: 14rpx 32rpx;
display: inline-block;
border-radius: 48rpx;
font-size: 28rpx;
color: #ffffff;
line-height: 1;
background: linear-gradient(180deg, #ffc137 0%, #e6a004 100%);
&::after {
position: absolute;
top: -16rpx;
left: 40rpx;
content: '';
width: 0;
height: 0;
border-style: solid;
border-width: 0 19rpx 19rpx 19rpx;
border-color: transparent transparent #f7bf3c transparent;
}
}
}
.banner {
margin: 48rpx 30rpx 0;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(40, 48, 49, 0.1);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.header {
padding: 32rpx 48rpx;
display: flex;
justify-content: space-between;
align-items: center;
background: linear-gradient(81deg, #67baca 0%, #43a8bc 100%);
border-radius: 24rpx 24rpx 24rpx 0;
.h-item {
.name {
font-size: 22rpx;
color: rgba(255, 255, 255, 1);
display: flex;
align-items: center;
.icon {
margin-left: 10rpx;
width: 24rpx;
height: 24rpx;
}
}
.num {
margin-top: 16rpx;
font-size: 56rpx;
color: rgba(255, 255, 255, 1);
font-weight: bold;
line-height: 1;
}
}
}
.container {
position: relative;
z-index: 1;
padding: 32rpx 0 20rpx;
box-shadow: 0rpx 4rpx 14rpx 0rpx rgba(40, 48, 49, 0.1);
border-radius: 0 0 24rpx 24rpx;
.c-row {
display: flex;
align-items: center;
justify-content: space-between;
.item {
flex: 1;
text-align: center;
.name {
font-size: 22rpx;
color: rgba(154, 161, 162, 1);
display: flex;
align-items: center;
justify-content: center;
gap: 8rpx;
.icon {
width: 20rpx;
height: 20rpx;
}
}
.num {
margin-top: 12rpx;
font-size: 44rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
line-height: 1;
}
}
.line {
height: 66rpx;
border-right: 2px dotted rgba(194, 201, 202, 1);
}
}
.c-row-line {
margin: 32rpx 20rpx;
width: 650rpx;
border-top: 1rpx dashed #d4d9da;
}
}
}
.page-container { .page-container {
margin: 0 30rpx; margin: 0 30rpx;
.van-sticky-wrap--fixed {
background-color: #fff;
}
.card { .card {
margin: 24rpx 0 0; margin: 24rpx 0 0;
padding-top: 15px; padding-top: 15px;
background: #fff linear-gradient(to top, #ffffff 0%, #ffffff 89%, #e8f0f2 100%) no-repeat top center / 100% 752rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx; border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.card-title {
padding: 15rpx 30rpx 30rpx 0;
display: flex;
align-items: center;
justify-content: space-between;
.wrap {
display: flex;
align-items: center;
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
.icon {
width: 24rpx;
height: 30rpx;
}
}
.fold {
font-size: 28rpx;
color: rgba(154, 161, 162, 1);
display: flex;
align-items: center;
gap: 10rpx;
.icon {
width: 24rpx;
height: 24rpx;
}
}
}
.fold-container {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s;
&.unfold-container {
max-height: 1800rpx;
}
}
.navbar {
display: flex;
padding: 12rpx 0;
.nav {
flex: 1;
text-align: center;
font-size: 32rpx;
color: rgba(103, 113, 114, 1);
&.active {
color: rgba(98, 190, 208, 1);
font-weight: bold;
&::after {
margin: 4rpx auto 0;
display: block;
content: '';
width: 54rpx;
height: 8rpx;
border-radius: 8rpx 8rpx 0 0;
background-color: rgba(98, 190, 208, 1);
}
}
}
}
.switch { .switch {
margin: 15rpx 30rpx; margin: 15rpx 30rpx;
padding: 8rpx; padding: 8rpx;
@ -445,100 +99,42 @@ page {
border-radius: 62rpx; border-radius: 62rpx;
&.active { &.active {
color: #fff; color: #fff;
background-color: rgba(98, 190, 208, 1); background-color: rgba(39, 66, 164, 1);
} }
} }
} }
.chart { .chart {
margin-top: 48rpx;
padding: 32rpx 0;
border: 2rpx solid #f2f4f5;
border-radius: 12rpx;
.chart-header { .chart-header {
padding: 15rpx 30rpx; padding: 0 30rpx;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.select-year { .select-year {
padding: 10rpx 28rpx; padding: 10rpx 28rpx;
border-radius: 34rpx; border-radius: 34rpx;
background-color: #f2f4f5; font-size: 36rpx;
font-size: 32rpx; color: rgba(33, 33, 32, 1);
color: rgba(40, 48, 49, 1); border: 1px solid #f3f3f3;
.icon { .icon {
width: 24rpx; width: 24rpx;
height: 24rpx; height: 24rpx;
} }
} }
.tip { .tip {
font-size: 24rpx; font-size: 32rpx;
color: rgba(154, 161, 162, 1); color: rgba(154, 161, 162, 1);
} }
} }
.chat-data-panel {
padding: 15rpx 30rpx;
gap: 14rpx;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200rpx, 1fr));
.panel {
flex: 1;
padding: 28rpx 0 18rpx;
text-align: center;
background: #ffffff;
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(40, 48, 49, 0.07);
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 1rpx solid #f2f4f5;
.name {
font-size: 24rpx;
color: rgba(154, 161, 162, 1);
.icon {
width: 20rpx;
height: 20rpx;
}
}
.num {
margin-top: 8rpx;
font-size: 40rpx;
font-weight: bold;
color: rgba(40, 48, 49, 1);
line-height: 1;
}
}
}
.chart-title {
padding: 15rpx 30rpx 15rpx 0;
display: flex;
align-items: center;
gap: 4rpx;
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
.icon {
width: 24rpx;
height: 30rpx;
}
.q-icon {
width: 24rpx;
height: 24rpx;
}
&.no-top {
margin-top: 0;
}
}
.chart-tip {
padding: 0 30rpx;
font-size: 24rpx;
color: rgba(154, 161, 162, 1);
}
.chart-container { .chart-container {
padding: 15rpx 30rpx; padding: 15rpx 30rpx 0;
width: 100%; width: 100%;
height: 546rpx; height: 546rpx;
box-sizing: border-box; box-sizing: border-box;
} }
.tip {
padding: 20rpx;
text-align: center;
font-size: 20rpx;
color: #677172;
line-height: 32rpx;
}
} }
} }
} }

821
src/doctor/pages/d_home/index.ts

@ -6,8 +6,6 @@ let echarts: any = null
Page({ Page({
data: { data: {
fold4: false,
fold5: false,
top: 0, top: 0,
bottom: 0, bottom: 0,
ec: { ec: {
@ -22,24 +20,11 @@ Page({
detail: {}, detail: {},
tab1: 0, tab1: 0,
tab2: 0,
tab3: 0,
year1: dayjs().format('YYYY'), year1: dayjs().format('YYYY'),
year2: dayjs().format('YYYY'),
year3: dayjs().format('YYYY'),
adlReadStatus: false,
statDate: '',
}, },
ecDataTrendComponent1_1: null as any, ecDataTrendComponent1_1: null as any,
ecDataTrendComponent1_2: null as any, ecDataTrendComponent1_2: null as any,
ecDataTrendComponent2_1: null as any,
ecDataTrendComponent2_2: null as any,
ecDataTrendComponent3_1: null as any,
ecDataTrendComponent3_2: null as any,
ecDataTrendComponent4_1: null as any,
ecDataTrendComponent5_1: null as any,
async onLoad() { async onLoad() {
const SystemInfo = app.globalSystemInfo const SystemInfo = app.globalSystemInfo
if (SystemInfo) { if (SystemInfo) {
@ -55,17 +40,12 @@ Page({
this.getDoctorInfo() this.getDoctorInfo()
this.getDetail() this.getDetail()
this.getList1_1() this.getList1_1()
this.getList2_1()
this.getList3_1()
this.getList4_1()
this.getList5_1()
this.getAdlStatus()
}) })
}, },
getDoctorInfo() { getDoctorInfo() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/account/info', url: '?r=zd/doctor/account/info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -77,7 +57,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-last-month', url: '?r=zd/doctor/doctor-stat/get-last-month',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -112,7 +92,7 @@ Page({
getList1_1() { getList1_1() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list', url: '?r=zd/doctor/doctor-stat/get-month-list',
data: { data: {
statYear: this.data.year1, statYear: this.data.year1,
}, },
@ -123,7 +103,7 @@ Page({
getList1_2() { getList1_2() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list', url: '?r=zd/doctor/doctor-stat/get-month-list',
data: { data: {
statYear: this.data.year1, statYear: this.data.year1,
}, },
@ -158,7 +138,7 @@ Page({
width: '0', width: '0',
}, },
textStyle: { textStyle: {
color: 'rgba(103, 113, 114, 1)', color: 'rgba(33, 33, 32, 0.30)',
fontSize: '12', fontSize: '12',
}, },
data: [], data: [],
@ -178,7 +158,7 @@ Page({
}, },
axisLabel: { axisLabel: {
fontSize: 10, fontSize: 10,
color: 'rgba(40, 48, 49, 1)', color: 'rgba(33, 33, 32, 0.30)',
}, },
data: x, data: x,
}, },
@ -189,7 +169,7 @@ Page({
minInterval: 1, minInterval: 1,
axisLabel: { axisLabel: {
fontSize: 10, fontSize: 10,
color: 'rgba(40, 48, 49, 1)', color: 'rgba(33, 33, 32, 0.30)',
formatter(value) { formatter(value) {
return Math.abs(value) return Math.abs(value)
}, },
@ -203,13 +183,13 @@ Page({
stack: 'a', stack: 'a',
label: { label: {
show: true, show: true,
color: '#000', color: 'rgba(33, 33, 32, 1)',
fontSize: 10, fontSize: 10,
overflow: 'truncate', overflow: 'truncate',
width: 30, width: 30,
position: 'top', position: 'top',
}, },
color: 'rgba(103, 186, 202, 1)', color: 'rgba(0, 194, 255, 1)',
data: y1, data: y1,
}, },
], ],
@ -321,777 +301,32 @@ Page({
}) })
}, },
handleTab2(e) { handleQuestion(e) {
const { index } = e.currentTarget.dataset const { id } = e.currentTarget.dataset
this.setData({ const toastParams = {
tab2: index, 1: {
}) content: `累计邀约患者数`,
if (index === 0) { title: '累计邀约',
this.getList2_1()
} else if (index === 1) {
this.getList2_2()
}
},
handleSelectYear2() {
this.handleTab2({
currentTarget: {
dataset: {
index: this.data.tab2,
},
},
})
},
getList2_1() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list',
data: {
statYear: this.data.year2,
}, },
}).then(async (res) => { 2: {
this.initChart2_1(res.list) content: `今年至少完成 1 次ADL 测评的患者数`,
}) title: `${dayjs().format('YY')}年激活`,
},
getList2_2() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list',
data: {
statYear: this.data.year2,
}, },
}).then((res) => { }[id]
this.initChart2_2(res.list) Dialog.alert({
}) title: toastParams.title || '提示说明',
}, messageAlign: 'left',
initChart2_1(list: any[]) { message: toastParams.content,
return new Promise((reslove) => { zIndex: 10000,
this.ecDataTrendComponent2_1 = this.selectComponent('#chart2_1') confirmButtonColor: '#62bed0',
this.ecDataTrendComponent2_1.init((canvas, width, height, dpr) => { } as any)
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const x: string[] = []
const y1: string[] = []
list.forEach((item) => {
x.push(item.StatMonth)
y1.push(item.MonthActivePCount)
})
const option = {
legend: {
bottom: 0,
itemWidth: 8,
itemHeight: 8,
icon: 'circle',
lineStyle: {
width: '0',
},
textStyle: {
color: 'rgba(103, 113, 114, 1)',
fontSize: '12',
},
data: [],
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '30',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
},
data: x,
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
formatter(value) {
return Math.abs(value)
},
},
},
],
series: [
{
name: '患者数',
type: 'bar',
stack: 'a',
label: {
show: true,
color: '#000',
fontSize: 10,
overflow: 'truncate',
width: 30,
position: 'top',
},
color: 'rgba(103, 186, 202, 1)',
data: y1,
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: x.length - 6,
endValue: x.length - 1,
filterMode: 'none',
},
}
chart.setOption(option)
reslove(chart)
return chart
})
})
}, },
initChart2_2(list: any[]) {
this.ecDataTrendComponent2_2 = this.selectComponent('#chart2_2')
this.ecDataTrendComponent2_2.init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const x: string[] = []
const y1: string[] = []
list.forEach((item) => {
x.push(item.StatMonth)
y1.push(item.YearActivePCount)
})
const option = {
legend: {
bottom: 0,
itemWidth: 8,
itemHeight: 8,
icon: 'circle',
lineStyle: {
width: '0',
},
textStyle: {
color: 'rgba(103, 113, 114, 1)',
fontSize: '12',
},
data: [],
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '30',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
},
data: x,
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
formatter(value) {
return Math.abs(value)
},
},
},
],
series: [
{
name: '患者数',
type: 'bar',
stack: 'a',
label: {
show: true,
color: '#000',
fontSize: 10,
overflow: 'truncate',
width: 30,
position: 'top',
},
color: 'rgba(103, 186, 202, 1)',
data: y1,
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: x.length - 6,
endValue: x.length - 1,
filterMode: 'none',
},
}
chart.setOption(option) handlePatient(e) {
return chart const { type, name } = e.currentTarget.dataset
})
},
handleTab3(e) {
const { index } = e.currentTarget.dataset
this.setData({
tab3: index,
})
if (index === 0) {
this.getList3_1()
} else if (index === 1) {
this.getList3_2()
}
},
handleSelectYear3() {
this.handleTab3({
currentTarget: {
dataset: {
index: this.data.tab3,
},
},
})
},
getList3_1() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list',
data: {
statYear: this.data.year3,
},
}).then(async (res) => {
this.initChart3_1(res.list)
})
},
getList3_2() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list',
data: {
statYear: this.data.year3,
},
}).then((res) => {
this.initChart3_2(res.list)
})
},
initChart3_1(list: any[]) {
return new Promise((reslove) => {
this.ecDataTrendComponent3_1 = this.selectComponent('#chart3_1')
this.ecDataTrendComponent3_1.init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const x: string[] = []
const y1: string[] = []
list.forEach((item) => {
x.push(item.StatMonth)
y1.push(item.MonthRegularAssessPCount)
})
const option = {
legend: {
bottom: 0,
itemWidth: 8,
itemHeight: 8,
icon: 'circle',
lineStyle: {
width: '0',
},
textStyle: {
color: 'rgba(103, 113, 114, 1)',
fontSize: '12',
},
data: [],
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '30',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
},
data: x,
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
formatter(value) {
return Math.abs(value)
},
},
},
],
series: [
{
name: '患者数',
type: 'bar',
stack: 'a',
label: {
show: true,
color: '#000',
fontSize: 10,
overflow: 'truncate',
width: 30,
position: 'top',
},
color: 'rgba(103, 186, 202, 1)',
data: y1,
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: x.length - 6,
endValue: x.length - 1,
filterMode: 'none',
},
}
chart.setOption(option)
reslove(chart)
return chart
})
})
},
initChart3_2(list: any[]) {
this.ecDataTrendComponent3_2 = this.selectComponent('#chart3_2')
this.ecDataTrendComponent3_2.init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const x: string[] = []
const y1: string[] = []
list.forEach((item) => {
x.push(item.StatMonth)
y1.push(item.RegularAssessPCount)
})
const option = {
legend: {
bottom: 0,
itemWidth: 8,
itemHeight: 8,
icon: 'circle',
lineStyle: {
width: '0',
},
textStyle: {
color: 'rgba(103, 113, 114, 1)',
fontSize: '12',
},
data: [],
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '30',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
},
data: x,
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
formatter(value) {
return Math.abs(value)
},
},
},
],
series: [
{
name: '患者数',
type: 'bar',
stack: 'a',
label: {
show: true,
color: '#000',
fontSize: 10,
overflow: 'truncate',
width: 30,
position: 'top',
},
color: 'rgba(103, 186, 202, 1)',
data: y1,
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: x.length - 6,
endValue: x.length - 1,
filterMode: 'none',
},
}
chart.setOption(option)
return chart
})
},
getList4_1() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list',
data: {},
}).then((res) => {
this.initChart4_1(res.list)
})
},
initChart4_1(list: any[]) {
this.ecDataTrendComponent4_1 = this.selectComponent('#chart4_1')
this.ecDataTrendComponent4_1.init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const x: string[] = []
const y1: string[] = []
list.forEach((item) => {
x.push(item.StatMonth)
y1.push(item.YearAdlStandardRate)
})
const option = {
legend: {
bottom: 0,
itemWidth: 8,
itemHeight: 8,
icon: 'circle',
lineStyle: {
width: '0',
},
textStyle: {
color: '#283031',
fontSize: '12',
fontWeight: 'bold',
},
data: [
{
name: '疗效达标率',
},
],
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '30',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
},
data: x,
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
splitNumber: 5,
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
formatter(value) {
return `${Math.abs(value)}%`
},
},
},
],
series: [
{
name: '疗效达标率',
type: 'line',
stack: '',
color: 'rgba(226, 219, 65, 1)',
label: {
normal: {
show: true,
position: 'top',
color: 'rgba(40, 48, 49, 1)',
fontSize: 10,
formatter: '{c}%',
},
},
barGap: '-100%',
data: y1,
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: x.length - 6,
endValue: x.length - 1,
filterMode: 'none',
},
}
chart.setOption(option)
return chart
})
},
getList5_1() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/doctor-stat/get-month-list',
data: {},
}).then((res) => {
this.initChart5_1(res.list)
})
},
initChart5_1(list: any[]) {
this.ecDataTrendComponent5_1 = this.selectComponent('#chart5_1')
this.ecDataTrendComponent5_1.init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const x: string[] = []
const y1: string[] = []
list.forEach((item) => {
x.push(item.StatMonth)
y1.push(item.YearDoubleStandardRate)
})
const option = {
legend: {
bottom: 0,
itemWidth: 8,
itemHeight: 8,
icon: 'circle',
lineStyle: {
width: '0',
},
textStyle: {
color: '#283031',
fontSize: '12',
fontWeight: 'bold',
},
data: [
{
name: '双达标率',
},
],
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '30',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
},
data: x,
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
splitNumber: 5,
axisLabel: {
fontSize: 10,
color: 'rgba(40, 48, 49, 1)',
formatter(value) {
return `${Math.abs(value)}%`
},
},
},
],
series: [
{
name: '双达标率',
type: 'line',
stack: '',
color: 'rgba(226, 219, 65, 1)',
label: {
normal: {
show: true,
position: 'top',
color: 'rgba(40, 48, 49, 1)',
fontSize: 10,
formatter: '{c}%',
},
},
barGap: '-100%',
data: y1,
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: x.length - 6,
endValue: x.length - 1,
filterMode: 'none',
},
}
chart.setOption(option)
return chart
})
},
handleQuestion(e) {
const { id } = e.currentTarget.dataset
const toastParams = {
1: {
content: `累计邀约患者数`,
title: '累计邀约',
},
2: {
content: `今年至少完成 1 次ADL 测评的患者数`,
title: `${dayjs().format('YY')}年激活`,
},
3: {
content: `本月新邀约患者数`,
title: '本月新增',
},
4: {
content: `今年末次ADL评估:\n①ADL增加≥2分;\n②ADL总分≥5分;\n③ADL总分2-4分,延髓评分+呼吸评分≥2分;\n④激素≥20mg/d,以上条件任意满足一条的患者数;`,
title: '需随访',
},
5: {
content: `1.数据统计截至到上月月底 \n 2.近 3 个月内完成ADL 测评≥3 次患者数/今年激活患者数`,
title: 'ADL规律评估率',
},
6: {
content: `单月复诊患者数/今年需随访患者数`,
title: '复诊率',
},
7: {
content: `今年末次ADL测评为 0 或1 患者数/今年激活患者数`,
title: '疗效达标率',
},
8: {
content: `今年末次ADL 测评为 0 或 1 且激素用量≤5mg/d患者数/今年激活患者数`,
title: '双达标率',
},
}[id]
Dialog.alert({
title: toastParams.title || '提示说明',
messageAlign: 'left',
message: toastParams.content,
zIndex: 10000,
confirmButtonColor: '#62bed0',
} as any)
},
handleFoldToggle4() {
this.setData({
fold4: !this.data.fold4,
})
},
handleFoldToggle5() {
this.setData({
fold5: !this.data.fold5,
})
},
handleExport() {
app.mpBehavior({ doctor: true, PageName: 'BTN_DOCTORADLREPORTENTRY' })
wx.navigateTo({
url: '/doctor/pages/d_exportList/index',
})
},
getAdlStatus() {
wx.ajax({ method: 'GET', url: '?r=igg4/doctor/doctor-stat/get-last-week', data: {} }).then((res) => {
if (!res) return
this.setData({
adlReadStatus: res.readStatus == 0,
statDate: res.statDate,
})
})
},
handlePatient(e) {
const { type, name } = e.currentTarget.dataset
wx.navigateTo({ wx.navigateTo({
url: `/doctor/pages/d_patientList/index?type=${type}&name=${name}`, url: `/doctor/pages/d_patientList/index?type=${type}&name=${name}`,
}) })
}, },
handleTransfer() {
app.mpBehavior({ doctor: true, PageName: 'BTN_DOCTORHOMEPAGERECOMMENDEDREFERRAL' })
wx.navigateTo({
url: '/doctor/pages/d_transfer/index',
})
},
handleTransferLog() {
wx.navigateTo({
url: '/doctor/pages/d_transferLog/index',
})
},
}) })

275
src/doctor/pages/d_home/index.wxml

@ -1,10 +1,5 @@
<view <view class="page">
class="page" <pageNavbar></pageNavbar>
style="padding-top: {{top+25}}px;background: url({{imageUrl}}/doctor/home-bg.png?t={{Timestamp}}) no-repeat top center / 100% 740rpx"
>
<navBar background="{{background}}" slotLeft="{{true}}" fixed home="{{false}}">
<image slot="left" class="page-title" src="{{imageUrl}}/doctor/home-title.png?t={{Timestamp}}"></image>
</navBar>
<view class="user"> <view class="user">
<image class="avatar" mode="aspectFill" src="{{doctor.Img}}"></image> <image class="avatar" mode="aspectFill" src="{{doctor.Img}}"></image>
<view class="wrap"> <view class="wrap">
@ -14,36 +9,14 @@
<view class="tag">{{hospital.HospitalClassificationName}}{{hospital.HospitalLevelName}}</view> <view class="tag">{{hospital.HospitalClassificationName}}{{hospital.HospitalLevelName}}</view>
</view> </view>
</view> </view>
<view class="export" bind:tap="handleExport">
<view class="btn">
<image class="icon" src="{{imageUrl}}/doctor/export.png?t={{Timestamp}}"></image>
报告中心
</view>
<view class="tip">
每周五报告更新
<view class="hover" wx:if="{{adlReadStatus}}">您的ADL报告(截至 {{statDate}})已生成</view>
</view>
</view>
</view>
<view class="transfer" bind:tap="handleTransfer">
<image class="icon" src="{{imageUrl}}icon23.png?t={{Timestamp}}"></image>
<view class="name">推荐转诊</view>
<image class="more" src="{{imageUrl}}icon24.png?t={{Timestamp}}"></image>
<view class="hover" wx:if="{{doctor.TipStatus==1}}" catch:tap="handleTransferLog">您推荐的医生有患者复诊</view>
</view> </view>
<view class="data-tip">统计数据截止到昨天</view>
<view class="new-banner"> <view class="new-banner">
<view class="item" bind:tap="handlePatient" data-type="1" data-name="累计邀约患者"> <view class="item" bind:tap="handlePatient" data-type="1" data-name="累计邀约患者">
<image class="icon" src="{{imageUrl}}5/d_home_icon1.png?t={{Timestamp}}"></image> <image class="icon" src="/images/icon53.png"></image>
<view class="wrap"> <view class="wrap">
<view class="title"> <view class="title">
累计邀约 累计邀约
<image <van-icon catch:tap="handleQuestion" data-id="1" name="question" color="rgba(33, 33, 32, 0.30)" />
catch:tap="handleQuestion"
data-id="1"
class="question"
src="{{imageUrl}}/doctor/icon-question.png?t={{Timestamp}}"
></image>
</view> </view>
<view class="num"> <view class="num">
{{detail.InvitePCount}} {{detail.InvitePCount}}
@ -52,16 +25,11 @@
</view> </view>
</view> </view>
<view class="item" bind:tap="handlePatient" data-type="3" data-name="{{detail.yr}}年激活患者"> <view class="item" bind:tap="handlePatient" data-type="3" data-name="{{detail.yr}}年激活患者">
<image class="icon" src="{{imageUrl}}5/d_home_icon2.png?t={{Timestamp}}"></image> <image class="icon" src="/images/icon54.png"></image>
<view class="wrap"> <view class="wrap">
<view class="title"> <view class="title">
{{detail.yr}}年激活 {{detail.yr}}年激活
<image <van-icon catch:tap="handleQuestion" data-id="2" name="question" color="rgba(33, 33, 32, 0.30)" />
catch:tap="handleQuestion"
data-id="2"
class="question"
src="{{imageUrl}}/doctor/icon-question.png?t={{Timestamp}}"
></image>
</view> </view>
<view class="num"> <view class="num">
{{detail.YearActivePCount}} {{detail.YearActivePCount}}
@ -69,120 +37,6 @@
</view> </view>
</view> </view>
</view> </view>
<view class="item" bind:tap="handlePatient" data-type="2" data-name="本月新增患者">
<image class="icon" src="{{imageUrl}}5/d_home_icon3.png?t={{Timestamp}}"></image>
<view class="wrap">
<view class="title">
本月新增
<image
catch:tap="handleQuestion"
data-id="3"
class="question"
src="{{imageUrl}}/doctor/icon-question.png?t={{Timestamp}}"
></image>
</view>
<view class="num">
{{detail.MonthInvitePCount}}
<text class="sub">人</text>
</view>
</view>
</view>
<view class="item" bind:tap="handlePatient" data-type="4" data-name="需随访患者">
<image class="icon" src="{{imageUrl}}5/d_home_icon4.png?t={{Timestamp}}"></image>
<view class="wrap">
<view class="title">
需随访
<image
catch:tap="handleQuestion"
data-id="4"
class="question"
src="{{imageUrl}}/doctor/icon-question.png?t={{Timestamp}}"
></image>
</view>
<view class="num">
{{detail.YearNeedFollowPCount}}
<text class="sub">人</text>
</view>
</view>
</view>
</view>
<view class="new-sub-banner">
<view class="year" style="background: url('{{imageUrl}}/5/year-bg.png?t={{Timestamp}}') no-repeat top center/100%">
{{detail.year}}年
</view>
<view class="n-container">
<view class="item" bind:tap="handlePatient" data-type="6" data-name="ADL规律评估患者">
<view class="wrap">
<view class="title">
ADL规律评估率
<image
catch:tap="handleQuestion"
data-id="5"
class="question"
src="{{imageUrl}}/doctor/icon-question1.png?t={{Timestamp}}"
></image>
</view>
<view class="num">
{{detail.MonthRegularAssessRate}}
<text class="sub">%</text>
</view>
</view>
</view>
<view class="item" bind:tap="handlePatient" data-type="5" data-name="复诊患者">
<view class="wrap">
<view class="title">
复诊率
<image
catch:tap="handleQuestion"
data-id="6"
class="question"
src="{{imageUrl}}/doctor/icon-question1.png?t={{Timestamp}}"
></image>
</view>
<view class="num">
{{detail.MonthReVisitRate}}
<text class="sub">%</text>
</view>
</view>
</view>
<view class="item" bind:tap="handlePatient" data-type="7" data-name="疗效达标患者">
<view class="wrap">
<view class="title">
疗效达标率
<image
catch:tap="handleQuestion"
data-id="7"
class="question"
src="{{imageUrl}}/doctor/icon-question1.png?t={{Timestamp}}"
></image>
</view>
<view class="num">
{{detail.YearAdlStandardRate}}
<text class="sub">%</text>
</view>
</view>
</view>
<view class="item" bind:tap="handlePatient" data-type="8" data-name="双达标患者">
<view class="wrap">
<view class="title">
双达标率
<image
catch:tap="handleQuestion"
data-id="8"
class="question"
src="{{imageUrl}}/doctor/icon-question1.png?t={{Timestamp}}"
></image>
</view>
<view class="num">
{{detail.YearDoubleStandardRate}}
<text class="sub">%</text>
</view>
</view>
</view>
</view>
<view class="tip" wx:if="{{detail.YearAdlStandardSortRate>0}}">
您已超过全国{{detail.YearAdlStandardSortRate}}%的医生
</view>
</view> </view>
<view class="page-container"> <view class="page-container">
<view class="card"> <view class="card">
@ -206,7 +60,7 @@
model:value="{{year1}}" model:value="{{year1}}"
> >
{{year1}}年 {{year1}}年
<image class="icon" src="{{imageUrl}}/doctor/triangle-down.png?t={{Timestamp}}"></image> <image class="icon" src="/images/icon55.png"></image>
</picker> </picker>
<view class="tip">统计数据截止昨天</view> <view class="tip">统计数据截止昨天</view>
</view> </view>
@ -222,121 +76,6 @@
</block> </block>
</view> </view>
</view> </view>
<view class="card">
<view class="switch">
<view class="switch-item {{tab2===0 && 'active'}}" bind:tap="handleTab2" data-index="{{0}}">
月度激活患者数
</view>
<view class="switch-item {{tab2===1 && 'active'}}" bind:tap="handleTab2" data-index="{{1}}">
累计激活患者数
</view>
</view>
<view class="chart">
<view class="chart-header">
<picker
class="select-year"
mode="date"
fields="year"
start="{{startData}}"
end="{{endDate}}"
bind:change="handleSelectYear2"
model:value="{{year2}}"
>
{{year2}}年
<image class="icon" src="{{imageUrl}}/doctor/triangle-down.png?t={{Timestamp}}"></image>
</picker>
<view class="tip">统计数据截止昨天</view>
</view>
<block wx:if="{{tab2===0}}">
<view class="chart-container">
<ec-canvas id="chart2_1" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
</block>
<block wx:if="{{tab2===1}}">
<view class="chart-container">
<ec-canvas id="chart2_2" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
</block>
</view>
</view>
<view class="card">
<view class="switch">
<view class="switch-item {{tab3===0 && 'active'}}" bind:tap="handleTab3" data-index="{{0}}">
月度规律评估患者数
</view>
<view class="switch-item {{tab3===1 && 'active'}}" bind:tap="handleTab3" data-index="{{1}}">
累计规律评估患者数
</view>
</view>
<view class="chart">
<view class="chart-header">
<picker
class="select-year"
mode="date"
fields="year"
start="{{startData}}"
end="{{endDate}}"
bind:change="handleSelectYear3"
model:value="{{year3}}"
>
{{year3}}年
<image class="icon" src="{{imageUrl}}/doctor/triangle-down.png?t={{Timestamp}}"></image>
</picker>
<view class="tip">统计数据截止昨天</view>
</view>
<block wx:if="{{tab3===0}}">
<view class="chart-container">
<ec-canvas id="chart3_1" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
</block>
<block wx:if="{{tab3===1}}">
<view class="chart-container">
<ec-canvas id="chart3_2" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
</block>
</view>
</view>
<view class="card">
<view class="card-title" bind:tap="handleFoldToggle4">
<view class="wrap">
<image class="icon" src="{{imageUrl}}/doctor/icon-title-lable.png?t={{Timestamp}}"></image>
疗效达标率
</view>
<view class="fold">
{{ fold4? '展开' : '收起' }}
<image class="icon" src="{{imageUrl}}/doctor/icon-circle-{{fold4?'down':'up'}}.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="fold-container {{fold4? '':'unfold-container'}}">
<view class="chart">
<view class="chart-container">
<ec-canvas id="chart4_1" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
<view class="tip">未次ADL 0或1的患者数/年激活患者数</view>
</view>
</view>
</view>
<view class="card">
<view class="card-title" bind:tap="handleFoldToggle5">
<view class="wrap">
<image class="icon" src="{{imageUrl}}/doctor/icon-title-lable.png?t={{Timestamp}}"></image>
双达标率
</view>
<view class="fold">
{{ fold5? '展开' : '收起' }}
<image class="icon" src="{{imageUrl}}/doctor/icon-circle-{{fold5?'down':'up'}}.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="fold-container {{fold5? '':'unfold-container'}}">
<view class="chart">
<view class="chart-container">
<ec-canvas id="chart5_1" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
<view class="tip">未次ADL 0或1且激素≤5mg/天的患者数/年激活患者数</view>
</view>
</view>
</view>
</view> </view>
</view> </view>

7
src/doctor/pages/d_interactive/index.json

@ -1,9 +1,6 @@
{ {
"navigationStyle": "custom", "navigationBarTitleText": "互动",
"usingComponents": { "usingComponents": {
"tabbar": "../../components/tabbar/index", "tabbar": "../../components/tabbar/index"
"navBar": "/components/navBar/navBar",
"van-icon": "@vant/weapp/icon/index",
"van-popup": "@vant/weapp/popup/index"
} }
} }

115
src/doctor/pages/d_interactive/index.scss

@ -1,5 +1,5 @@
page { page {
background-color: rgba(242, 244, 245, 1); background-color: rgba(246, 248, 249, 1);
padding-bottom: calc(140rpx + env(safe-area-inset-bottom)); padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
} }
.page { .page {
@ -7,22 +7,21 @@ page {
.page-header { .page-header {
position: sticky; position: sticky;
top: 0; top: 0;
padding: 30rpx; padding: 32rpx 40rpx;
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(40, 48, 49, 0.04);
z-index: 10; z-index: 10;
background-color: rgba(246, 248, 249, 1);
.wrap { .wrap {
display: flex; display: flex;
align-items: center; align-items: center;
.search { .search {
flex: 1; flex: 1;
padding: 18rpx 32rpx; padding: 12rpx 32rpx;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 16rpx; gap: 16rpx;
background: linear-gradient(to top, #ffffff 0%, #ebf3f4 100%); background: rgba(243, 243, 243, 1);
box-shadow: 0rpx 8rpx 8rpx 0rpx rgba(40, 48, 49, 0.04);
border-radius: 140rpx 140rpx 140rpx 140rpx; border-radius: 140rpx 140rpx 140rpx 140rpx;
border: 2rpx solid #ffffff; border: 2rpx solid rgba(255, 255, 255, 1);
.icon { .icon {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
@ -37,68 +36,24 @@ page {
} }
.clear { .clear {
margin-left: 32rpx; margin-left: 32rpx;
width: 44rpx; width: 56rpx;
height: 44rpx; height: 56rpx;
}
}
.navbar {
margin-top: 32rpx;
display: flex;
justify-content: space-between;
align-items: center;
.nav {
position: relative;
flex: 1;
text-align: center;
font-size: 32rpx;
color: rgba(103, 113, 114, 1);
transition: all 0.3s;
.dot {
padding: 0 4rpx;
position: absolute;
left: 50%;
transform: translateX(35rpx);
top: 0;
min-width: 18rpx;
height: 26rpx;
font-size: 18rpx;
line-height: 26rpx;
color: rgba(255, 255, 255, 1);
border-radius: 50%;
background: rgba(215, 108, 108, 1);
}
&.active {
font-size: 32rpx;
color: rgba(98, 190, 208, 1);
font-weight: bold;
&::after {
position: absolute;
bottom: -30rpx;
left: 50%;
transform: translateX(-50%);
content: '';
width: 52rpx;
height: 8rpx;
border-radius: 24rpx 24rpx 0 0;
background: #62bed0;
}
}
} }
} }
} }
.list { .list {
margin: 30rpx; margin: 30rpx 40rpx;
.list-item { .list-item {
margin-bottom: 24rpx; margin-bottom: 24rpx;
padding: 30rpx; padding: 32rpx;
border-radius: 24rpx; border-radius: 24rpx;
background-color: #fff; background-color: #fff;
display: flex; display: flex;
.avatar { .avatar {
flex-shrink: 0; flex-shrink: 0;
position: relative; position: relative;
width: 92rpx; width: 112rpx;
height: 92rpx; height: 112rpx;
.a-img { .a-img {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -107,50 +62,42 @@ page {
.dot { .dot {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 10rpx;
width: 18rpx; transform: translateX(50%);
height: 18rpx; padding: 0 5rpx;
min-width: 32rpx;
height: 32rpx;
text-align: center;
font-size: 20rpx;
color: #ffffff;
border: 2rpx solid #ffffff; border: 2rpx solid #ffffff;
border-radius: 50%; border-radius: 16rpx;
background: #d76c6c; background: #ef3939;
box-sizing: border-box;
} }
} }
.wrap { .wrap {
flex: 1; flex: 1;
padding-left: 24rpx; padding-left: 28rpx;
.w-header { .w-header {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.name { .name {
font-size: 32rpx; font-size: 40rpx;
color: rgba(40, 48, 49, 1); color: rgba(40, 48, 49, 1);
font-weight: bold; font-weight: bold;
} }
.date { .date {
font-size: 24rpx; font-size: 32rpx;
color: rgba(154, 161, 162, 1); color: rgba(33, 33, 32, 0.40);
}
}
.tags {
margin-top: 12rpx;
display: flex;
flex-wrap: wrap;
gap: 12rpx;
.tag {
padding: 4rpx 16rpx;
border-radius: 8rpx;
border-color: rgba(242, 244, 245, 1);
font-size: 22rpx;
color: rgba(103, 113, 114, 1);
background-color: rgba(242, 244, 245, 1);
} }
} }
.content { .content {
margin-top: 20rpx; margin-top: 16rpx;
max-width: 18em; max-width: 15em;
font-size: 28rpx; font-size: 32rpx;
color: rgba(154, 161, 162, 1); color: rgba(33, 33, 32, 0.70);
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;

26
src/doctor/pages/d_interactive/index.ts

@ -14,11 +14,12 @@ Page({
}, },
onShow() { onShow() {
app.waitLogin().then((_res) => { app.waitLogin().then((_res) => {
app.mpBehavior({ doctor: true, PageName: 'PG_DoctorIMList' })
this.getList() this.getList()
}) })
}, },
handleTapSearch() { handleTapSearch() {
app.mpBehavior({ doctor:true, PageName: 'BTN_DOCTORINTERACTIONSEARCH' }) app.mpBehavior({ doctor: true, PageName: 'BTN_DoctorIMListSearch' })
}, },
handleSearch() { handleSearch() {
this.setData({ this.setData({
@ -39,19 +40,9 @@ Page({
this.getList() this.getList()
}, },
getList(newPage = 1) { getList(newPage = 1) {
const { active } = this.data
if (active == '' && newPage == 1) {
app.mpBehavior({ doctor:true, PageName: 'PG_DOCTORINTERACTIONALL' })
}
if (active == '1' && newPage == 1) {
app.mpBehavior({ doctor:true, PageName: 'PG_DOCTORINTERACTIONREAD' })
}
if (active == '2' && newPage == 1) {
app.mpBehavior({ doctor:true, PageName: 'PG_DOCTORINTERACTIONUNREAD' })
}
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/message-interact/get-interact-patient-list', url: '?r=zd/doctor/message-interact/get-interact-patient-list',
data: { data: {
page: newPage, page: newPage,
search: this.data.search, search: this.data.search,
@ -68,9 +59,6 @@ Page({
count: res.count, count: res.count,
}, },
}) })
const header = this.selectComponent('#tabbar')
header.getList() //子组件的方法
}) })
}, },
onReachBottom() { onReachBottom() {
@ -80,7 +68,7 @@ Page({
} }
}, },
handleDetail(e) { handleDetail(e) {
app.mpBehavior({ doctor:true, PageName: 'BTN_DOCTORINTERACTIONVIEW' }) app.mpBehavior({ doctor: true, PageName: 'BTN_DoctorIMList' })
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
const { list } = this.data const { list } = this.data
const listItem: any = list[index] const listItem: any = list[index]
@ -99,12 +87,12 @@ Page({
wx.showModal({ wx.showModal({
title: '提示', title: '提示',
content: '确认清空消息吗?', content: '确认清空消息吗?',
confirmColor: '#62bed0', confirmColor: '#8c75d0',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/message-interact/read-history', url: '?r=zd/doctor/message-interact/read-history',
data: {}, data: {},
}).then((_res) => { }).then((_res) => {
this.setData({ this.setData({
@ -116,8 +104,6 @@ Page({
} }
}), }),
}) })
const header = this.selectComponent('#tabbar')
header.getList() //子组件的方法
}) })
} }
}, },

22
src/doctor/pages/d_interactive/index.wxml

@ -1,24 +1,20 @@
<view class="page"> <view class="page">
<view <view class="page-header">
class="page-header"
style="background:#fff url({{imageUrl}}/doctor/d_patient-bg.png?t={{Timestamp}}) no-repeat top center/100% 456rpx"
>
<navBar title="互动" back home="{{false}}" bind:back="handleBack"></navBar>
<view class="wrap"> <view class="wrap">
<view class="search"> <view class="search">
<image class="icon" src="{{imageUrl}}/doctor/icon-search.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}icon43.png?t={{Timestamp}}"></image>
<input <input
type="text" type="text"
class="input" class="input"
placeholder-class="input-place" placeholder-class="input-place"
placeholder="搜索姓名、手机号" placeholder="可根据姓名、手机号搜索患者"
model:value="{{search}}" model:value="{{search}}"
confirm-type="search" confirm-type="search"
bindconfirm="handleSearch" bindconfirm="handleSearch"
bind:tap="handleTapSearch" bind:tap="handleTapSearch"
/> />
</view> </view>
<image class="clear" src="{{imageUrl}}/doctor/icon-clear.png?t={{Timestamp}}" bind:tap="hancleClaer"></image> <!-- <image class="clear" src="{{imageUrl}}icon47.png?t={{Timestamp}}" bind:tap="hancleClaer"></image> -->
</view> </view>
<!-- <view class="navbar"> --> <!-- <view class="navbar"> -->
<!-- <view class="nav {{!active && 'active'}}" bind:tap="handleNav" data-active=""> --> <!-- <view class="nav {{!active && 'active'}}" bind:tap="handleNav" data-active=""> -->
@ -37,7 +33,7 @@
<view class="list-item" wx:for="{{list}}" wx:key="index" bind:tap="handleDetail" data-index="{{index}}"> <view class="list-item" wx:for="{{list}}" wx:key="index" bind:tap="handleDetail" data-index="{{index}}">
<view class="avatar"> <view class="avatar">
<image class="a-img" src="{{item.userAvatar}}"></image> <image class="a-img" src="{{item.userAvatar}}"></image>
<view class="dot" wx:if="{{item.msgReadStatus==='2'}}"></view> <view class="dot" wx:if="{{item.unReadCount>0}}">{{item.unReadCount> 99 ? '99+' : item.unReadCount}}</view>
</view> </view>
<view class="wrap"> <view class="wrap">
<view class="w-header"> <view class="w-header">
@ -45,15 +41,11 @@
<view class="name" wx:else>{{item.Telephone}}</view> <view class="name" wx:else>{{item.Telephone}}</view>
<view class="date">{{item.msgCreateTime}}</view> <view class="date">{{item.msgCreateTime}}</view>
</view> </view>
<view class="tags">
<view class="tag" wx:for="{{item.Tags}}" wx:for-item="tag" wx:for-index="tIndex" wx:key="tIndex">
{{tag}}
</view>
</view>
<view class="content">{{item.msgContent}}</view> <view class="content">{{item.msgContent}}</view>
</view> </view>
</view> </view>
<pagination pagination="{{pagination}}"></pagination> <pagination pagination="{{pagination}}"></pagination>
</view> </view>
</view> </view>
<tabbar id="tabbar" active="{{2}}"></tabbar>
<tabbar active="{{2}}"></tabbar>

4
src/doctor/pages/d_interactiveDoctor/index.json

@ -2,6 +2,8 @@
"navigationBarTitleText": "互动", "navigationBarTitleText": "互动",
"usingComponents": { "usingComponents": {
"van-icon": "@vant/weapp/icon/index", "van-icon": "@vant/weapp/icon/index",
"van-popup": "@vant/weapp/popup/index" "navBar": "/components/navBar/navBar",
"van-popup": "@vant/weapp/popup/index",
"toast": "/components/toast/index"
} }
} }

621
src/doctor/pages/d_interactiveDoctor/index.scss

@ -3,168 +3,47 @@ page {
} }
.page { .page {
height: 100vh; height: 100vh;
box-sizing: border-box;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
.page-header { .page-header {
margin: 32rpx 30rpx 0;
padding-bottom: 30rpx; padding-bottom: 30rpx;
border-radius: 0 0 24rpx 24rpx; background: #ffffff;
background-color: #fff; box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.08);
border-radius: 24rpx 24rpx 24rpx 24rpx;
.user { .user {
flex-shrink: 0; flex-shrink: 0;
padding: 36rpx 30rpx 0; padding: 36rpx 30rpx 0;
display: flex; display: flex;
align-items: center;
justify-content: space-between; justify-content: space-between;
align-items: center;
.avatar { .avatar {
width: 104rpx; width: 120rpx;
height: 104rpx; height: 120rpx;
border-radius: 50%; border-radius: 50%;
} }
.wrap { .wrap {
flex: 1; flex: 1;
padding: 0 20rpx; padding: 0 16rpx;
.name { .name {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 40rpx; font-size: 40rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
font-weight: bold; font-weight: bold;
.tip {
display: block;
padding: 2rpx 16rpx;
font-size: 24rpx;
color: #fff;
border-radius: 0 30rpx 30rpx 30rpx;
background-color: #67baca;
}
.detail {
flex-shrink: 0;
font-size: 28rpx;
color: rgba(103, 186, 202, 1);
font-weight: normal;
}
} }
.tags { .date {
margin-top: 20rpx; margin-top: 20rpx;
display: flex; font-size: 32rpx;
flex-wrap: wrap; color: rgba(33, 33, 32, 0.7);
gap: 12rpx;
.tag {
padding: 4rpx 16rpx;
font-size: 22rpx;
color: rgba(103, 113, 114, 1);
border-radius: 8rpx;
background-color: rgba(242, 244, 245, 1);
}
} }
} }
} .detail {
.adl { flex-shrink: 0;
margin: 32rpx 30rpx 0; font-size: 32rpx;
background: #ffffff; color: rgba(22, 121, 203, 1);
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04); font-weight: normal;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #f8f9f9;
.a-header {
display: flex;
align-items: flex-start;
flex-direction: column;
.content {
border-radius: 24rpx 0 24rpx 0;
padding: 14rpx 28rpx;
font-size: 28rpx;
line-height: 1;
color: rgba(98, 190, 208, 1);
background-color: rgba(242, 248, 249, 1);
}
.box {
width: 40rpx;
height: 40rpx;
background-color: rgba(242, 248, 249, 1);
}
}
.a-content {
position: relative;
z-index: 1;
margin-top: -40rpx;
padding: 32rpx 30rpx;
background-color: #fff;
border-radius: 24rpx;
.row {
display: flex;
align-items: center;
gap: 20rpx;
&:first-of-type {
margin-bottom: 24rpx;
}
.label {
flex-shrink: 0;
font-size: 28rpx;
color: rgba(154, 161, 162, 1);
}
.num {
min-width: 3em;
font-size: 28rpx;
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;
display: flex;
align-items: center;
font-size: 28rpx;
color: rgba(103, 186, 202, 1);
display: flex;
align-items: center;
gap: 4rpx;
flex-shrink: 0;
.icon {
width: 24rpx;
height: 28rpx;
}
}
&.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 {
color: rgba(215, 108, 108, 1);
}
}
}
}
} }
} }
} }
@ -197,106 +76,15 @@ page {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: start; align-items: start;
.guide {
margin-bottom: 32rpx;
padding: 32rpx 30rpx;
border-radius: 0 32rpx 32rpx;
background: linear-gradient(13deg, #ffffff 8%, #e8f0f1 100%);
border: 2rpx solid #ffffff;
.title {
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
}
.sub-title {
font-size: 28rpx;
color: rgba(154, 161, 162, 1);
margin-bottom: 30rpx;
}
.list {
.l-item {
display: flex;
align-items: center;
gap: 16rpx;
margin-bottom: 30rpx;
.order {
flex-shrink: 0;
width: 28rpx;
height: 28rpx;
font-size: 24rpx;
display: flex;
align-items: center;
justify-content: center;
color: rgba(255, 255, 255, 1);
border-radius: 6rpx;
background: #67baca;
}
.content {
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
}
}
}
.tip {
font-size: 28rpx;
color: rgba(103, 113, 114, 1);
display: flex;
align-items: center;
.icon {
width: 44rpx;
height: 44rpx;
}
}
}
.message { .message {
margin-bottom: 32rpx; margin-bottom: 32rpx;
padding: 26rpx 32rpx; padding: 26rpx 32rpx;
background-color: #fff; background-color: #fff;
border-radius: 0 32rpx 32rpx; border-radius: 32rpx;
font-size: 32rpx; font-size: 32rpx;
color: rgba(40, 48, 49, 1); color: rgba(40, 48, 49, 1);
white-space: pre-line; white-space: pre-line;
} }
.referral-replay {
margin-bottom: 32rpx;
padding: 18rpx 32rpx;
border-radius: 32rpx;
background-color: #fff;
.title {
font-size: 32rpx;
color: #283031;
line-height: 48rpx;
}
.sub-title {
margin-top: 32rpx;
font-size: 32rpx;
color: #67baca;
font-weight: bold;
display: flex;
align-items: center;
&::before {
margin-right: 8rpx;
content: '';
width: 6rpx;
height: 32rpx;
background-color: #67baca;
border-radius: 84rpx;
}
}
.r-list {
margin-top: 12rpx;
.item {
padding: 24rpx 0;
font-size: 32rpx;
color: #283031;
line-height: 36rpx;
border-bottom: 1px solid #eaeced;
&:last-of-type {
border: none;
}
}
}
}
} }
} }
.doctor { .doctor {
@ -321,26 +109,24 @@ page {
.guide { .guide {
margin-bottom: 32rpx; margin-bottom: 32rpx;
padding: 32rpx 30rpx; padding: 32rpx 30rpx;
border-radius: 32rpx 0 32rpx 32rpx; border-radius: 32rpx 32rpx;
background: linear-gradient(13deg, #ffffff 8%, #e8f0f1 100%); background: rgba(248, 248, 248, 1);
border: 2rpx solid #ffffff; border: 2rpx solid #ffffff;
.title { .title {
font-size: 32rpx; font-size: 40rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
font-weight: bold; font-weight: bold;
} }
.sub-title {
font-size: 28rpx;
color: rgba(154, 161, 162, 1);
margin-bottom: 30rpx;
}
.list { .list {
.l-item { .l-item {
margin-top: 24rpx;
display: flex; display: flex;
align-items: center;
gap: 16rpx; gap: 16rpx;
margin-bottom: 30rpx; &:last-of-type {
margin-bottom: 0;
}
.order { .order {
margin-top: 6rpx;
flex-shrink: 0; flex-shrink: 0;
width: 28rpx; width: 28rpx;
height: 28rpx; height: 28rpx;
@ -350,42 +136,32 @@ page {
justify-content: center; justify-content: center;
color: rgba(255, 255, 255, 1); color: rgba(255, 255, 255, 1);
border-radius: 6rpx; border-radius: 6rpx;
background: #67baca; background: linear-gradient(90deg, #293b9f 0%, #1679cb 100%);
} }
.content { .content {
font-size: 32rpx; font-size: 36rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
} }
} }
} }
.tip {
font-size: 28rpx;
color: rgba(103, 113, 114, 1);
display: flex;
align-items: center;
.icon {
width: 44rpx;
height: 44rpx;
}
}
} }
.message { .message {
margin-bottom: 32rpx; margin-bottom: 32rpx;
padding: 26rpx 32rpx; padding: 26rpx 32rpx;
background: #67baca; background: rgba(248, 248, 248, 1);
border-radius: 32rpx 0 32rpx 32rpx; border-radius: 32rpx;
font-size: 32rpx; font-size: 36rpx;
color: #fff; color: rgba(33, 33, 32, 1);
white-space: pre-line; white-space: pre-line;
} }
.week { .week {
margin-bottom: 32rpx; margin-bottom: 32rpx;
padding: 26rpx 32rpx; padding: 26rpx 32rpx;
background-color: #fff; background-color: #fff;
border-radius: 32rpx 0 32rpx 32rpx; border-radius: 32rpx;
.w-title { .w-title {
font-size: 32rpx; font-size: 32rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 29, 46, 1);
text-align: right; text-align: right;
} }
.w-container { .w-container {
@ -408,7 +184,7 @@ page {
justify-content: center; justify-content: center;
font-size: 32rpx; font-size: 32rpx;
color: rgba(255, 255, 255, 1); color: rgba(255, 255, 255, 1);
background-color: rgba(103, 186, 202, 1); background-color: rgba(22, 121, 203, 1);
} }
.content { .content {
width: 156rpx; width: 156rpx;
@ -417,8 +193,8 @@ page {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 32rpx; font-size: 32rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
background-color: rgba(242, 244, 245, 1); background-color: rgba(205, 232, 255, 1);
} }
&:first-of-type { &:first-of-type {
.label { .label {
@ -439,157 +215,23 @@ page {
&:not(:last-of-type) { &:not(:last-of-type) {
border-bottom: 2rpx solid #fff; border-bottom: 2rpx solid #fff;
} }
&:nth-of-type(2n) {
.label {
background-color: rgba(85, 164, 230, 1);
}
.content {
background-color: rgba(232, 243, 253, 1);
}
}
} }
} }
} }
.adl { .adl {
position: relative;
margin-bottom: 32rpx; margin-bottom: 32rpx;
padding: 32rpx 156rpx 34rpx 30rpx; adl-img {
border-radius: 0 32rpx 32rpx; width: 498rpx;
background: linear-gradient(141deg, #edfcff 0%, #d4f3f9 100%); height: 250rpx;
border: 2rpx solid #fff;
.title {
width: 324rpx;
height: 40rpx;
}
.sub-title {
margin-top: 18rpx;
line-height: 1;
font-size: 28rpx;
color: rgba(255, 255, 255, 0.8);
}
.btn {
margin-top: 20rpx;
width: 220rpx;
height: 56rpx;
text-align: center;
line-height: 56rpx;
font-size: 28rpx;
color: #e04775;
background: #ffffff;
border-radius: 102rpx 102rpx 102rpx 102rpx;
}
.tip {
margin-top: 10rpx;
font-size: 24rpx;
color: #fff;
}
}
.audio {
margin-bottom: 32rpx;
padding: 22rpx 24rpx;
border-radius: 32rpx 0 32rpx 32rpx;
background: #67baca;
min-width: 218rpx;
font-size: 32rpx;
color: #fff;
display: flex;
align-items: center;
justify-content: flex-end;
gap: 12rpx;
box-sizing: border-box;
.icon {
width: 32rpx;
height: 40rpx;
}
}
.info {
margin-bottom: 32rpx;
padding: 26rpx 32rpx;
background-color: #fff;
border-radius: 32rpx 0 32rpx 32rpx;
.content {
font-size: 28rpx;
color: #283031;
}
.btn {
margin-top: 24rpx;
padding: 22rpx;
font-size: 32rpx;
color: #283031;
line-height: 40rpx;
text-align: center;
background: #67baca;
color: #ffffff;
border-radius: 104rpx 104rpx 104rpx 104rpx;
border: 1rpx solid #f8f9f9;
}
}
.referral {
margin-bottom: 32rpx;
width: 502rpx;
height: 262rpx;
background: linear-gradient(223deg, #59b0c2 0%, #94e2f1 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 24rpx 24rpx 24rpx 24rpx;
.r-header {
padding: 20rpx 24rpx 0 32rpx;
display: flex;
.title {
font-size: 32rpx;
color: #ffffff;
line-height: 48rpx;
}
.icon {
flex-shrink: 0;
width: 138rpx;
height: 122rpx;
}
}
.r-footer {
padding: 32rpx;
background: linear-gradient(11deg, #ffffff 8%, rgba(255, 255, 255, 0.79) 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.btn {
width: 438rpx;
height: 64rpx;
font-size: 32rpx;
color: #fff;
text-align: center;
line-height: 64rpx;
background: #67baca;
border-radius: 104rpx 104rpx 104rpx 104rpx;
}
}
}
.trans {
margin-bottom: 32rpx;
padding: 32rpx;
width: 508rpx;
box-sizing: border-box;
background: linear-gradient(223deg, #59b0c2 0%, #94e2f1 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 24rpx 24rpx 24rpx 24rpx;
.user {
padding: 24rpx 32rpx;
display: flex;
gap: 24rpx;
border-radius: 24rpx;
background-color: #fff;
.u-avatar {
width: 112rpx;
height: 112rpx;
flex-shrink: 0;
border-radius: 50%;
}
.wrap {
.name {
font-size: 40rpx;
color: #283031;
}
.content {
margin-top: 12rpx;
font-size: 28rpx;
color: #9aa1a2;
line-height: 36rpx;
}
}
}
.tip {
margin-top: 24rpx;
font-size: 32rpx;
color: #ffffff;
} }
} }
} }
@ -603,36 +245,133 @@ page {
padding: 32rpx 30rpx calc(32rpx + env(safe-area-inset-bottom)); padding: 32rpx 30rpx calc(32rpx + env(safe-area-inset-bottom));
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
gap: 28rpx; gap: 20rpx;
border-radius: 32rpx 32rpx 0 0;
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(40, 48, 49, 0.04); box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(40, 48, 49, 0.04);
border: 2rpx solid #ffffff; border: 2rpx solid #ffffff;
background-color: #fff; background-color: #fff;
.send { .send {
flex: 1; flex: 1;
padding: 8rpx 8rpx 8rpx 32rpx;
box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: space-between;
font-size: 32rpx; border-radius: 12rpx;
color: rgba(40, 48, 49, 1); background: #f6f6f6;
height: 76rpx; .content {
background: #ffffff; padding: 10rpx 0;
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(40, 48, 49, 0.04); flex: 1;
border-radius: 140rpx 140rpx 140rpx 140rpx; color: rgba(34, 34, 34, 0.3);
border: 2rpx solid #f2f4f5; overflow: hidden;
.icon { text-overflow: ellipsis;
width: 36rpx; white-space: nowrap;
height: 36rpx; }
.btn {
flex-shrink: 0;
width: 188rpx;
height: 80rpx;
line-height: 80rpx;
font-size: 32rpx;
color: #ffffff;
text-align: center;
background: linear-gradient(90deg, #293b9f 0%, #1679cb 100%);
border-radius: 12rpx;
} }
} }
.short-send {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 36rpx;
color: #fff;
height: 96rpx;
background: linear-gradient(90deg, #293b9f 0%, #1679cb 100%);
border-radius: 12rpx;
}
.send-date { .send-date {
text-align: center;
flex-shrink: 0; flex-shrink: 0;
font-size: 24rpx; font-size: 28rpx;
color: #283031; color: rgba(33, 33, 32, 1);
text-align: center; text-align: center;
.icon { .icon {
width: 40rpx; width: 52rpx;
height: 40rpx; height: 52rpx;
}
}
}
}
.custom-input {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
padding: 30rpx;
box-sizing: border-box;
border-radius: 32rpx 32rpx 0 0;
background-color: #fff;
.icon {
position: relative;
width: 36rpx;
height: 36rpx;
overflow: visible;
&::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 60rpx;
height: 60rpx;
background-color: transparent;
}
}
.wrap {
margin-top: 14rpx;
position: relative;
padding: 32rpx 32rpx 24rpx;
border-radius: 24rpx;
background-color: #f6f8f9;
.textarea {
width: 100%;
display: block;
height: 300rpx;
box-sizing: border-box;
padding-bottom: 80rpx;
background-color: transparent;
font-size: 32rpx;
.ka-container {
padding: 30rpx 62rpx;
display: flex;
align-items: center;
justify-content: space-between;
background-color: transparent;
.stat {
font-size: 28rpx;
color: #adacb2;
&.red {
color: #ef3939;
}
}
.send-btn {
width: 128rpx;
height: 64rpx;
text-align: center;
line-height: 64rpx;
font-size: 32rpx;
color: #ffffff;
background: linear-gradient(90deg, #293b9f 0%, #1679cb 100%);
border-radius: 111rpx 111rpx 111rpx 111rpx;
}
}
}
}
&.custom-input-max {
.wrap {
.textarea {
height: 43vh;
} }
} }
} }
@ -640,11 +379,11 @@ page {
.popup-message { .popup-message {
padding: 30rpx; padding: 30rpx;
background-color: rgba(242, 244, 245, 1); background-color: rgba(255, 255, 255, 1);
.title { .title {
padding: 0 32rpx 32rpx; padding: 0 32rpx 32rpx;
font-size: 36rpx; font-size: 40rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
font-weight: bold; font-weight: bold;
text-align: center; text-align: center;
} }
@ -652,30 +391,34 @@ page {
max-height: 50vh; max-height: 50vh;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
&::-webkit-scrollbar {
display: none;
}
.l-item { .l-item {
margin-bottom: 24rpx; margin-bottom: 24rpx;
padding: 30rpx; padding: 30rpx;
font-size: 32rpx; font-size: 36rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
border-radius: 24rpx; box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.08);
background-color: #fff; border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #f4f3f3;
&.active { &.active {
color: #fff; color: rgba(255, 255, 255, 1);
background-color: rgba(103, 186, 202, 1); background-color: rgba(22, 121, 203, 1);
} }
} }
} }
.submit { .submit {
margin-top: 24rpx; margin-top: 24rpx;
width: 690rpx; width: 690rpx;
height: 84rpx; height: 96rpx;
font-size: 36rpx; font-size: 36rpx;
color: rgba(255, 255, 255, 1); color: rgba(255, 255, 255, 1);
font-weight: bold; font-weight: bold;
background: #67baca; background: linear-gradient(90deg, #293b9f 0%, #1679cb 100%);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
border-radius: 64rpx 64rpx 64rpx 64rpx; border-radius: 12rpx;
} }
} }

260
src/doctor/pages/d_interactiveDoctor/index.ts

@ -4,15 +4,16 @@ const app = getApp<IAppOption>()
interface IMessageItem { interface IMessageItem {
msgId: string msgId: string
msgContentType: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' // 1:文本 2: 出诊时间 3: adl卡片 4: 语音 5: 欢迎语 6:补充真实姓名 7: 提醒完善信息 8: 复诊卡片 9:患者恢复复诊消息 msgContentType: '1' | '2' | '5' | '10' | '11' | '12'
msgContent: any msgContent: any
msgVisitTime: string msgVisitTime: string
msgVisitTimeType?: string msgVisitTimeType?: string
msgFromType: '1' | '2' // 1: 患者 2: 医生 msgFromType: '1' | '2'
isPlay?: boolean isPlay?: boolean
msgCreateTime: string // 消息创建时间 msgCreateTime: string
msgCreateTimeName?: string // 消息创建时间 msgCreateTimeName?: string
showTime?: boolean showTime?: boolean
msgCustomSendStatus?: number | string
} }
interface Item { interface Item {
@ -22,12 +23,22 @@ interface Item {
Page({ Page({
data: { data: {
pageTop: 0,
popupShow: false,
popupType: 'popup9',
popupParams: {} as any,
doctor: {} as any, doctor: {} as any,
patientId: '', patientId: '',
messageListShow: false, messageListShow: false,
patientDetail: {}, patientDetail: {},
inputShow: false,
maxTextArea: false,
focus: false,
isLoad: false, isLoad: false,
isFinish: false, isFinish: false,
scrollTop: 0, scrollTop: 0,
@ -40,36 +51,32 @@ Page({
week: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], week: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
timeDay: { 1: '上午', 2: '下午' }, timeDay: { 1: '上午', 2: '下午' },
},
innerAudioContext: null as WechatMiniprogram.InnerAudioContext | null, customMessage: '',
},
onLoad(options) { onLoad(options) {
this.innerAudioContext = wx.createInnerAudioContext({ const menuButton = wx.getMenuButtonBoundingClientRect()
useWebAudioImplement: true, const pageTop = menuButton.bottom + 8
}) this.setData({ pageTop })
this.setData({ this.setData({
patientId: options.patientId, patientId: options.patientId,
}) })
}, },
onShow() { onShow() {
app.waitLogin().then((_res) => { app.waitLogin().then((_res) => {
app.mpBehavior({ doctor: true, PageName: 'PG_DOCTORINTERACTIONDETAIL' }) app.mpBehavior({ doctor: true, PageName: 'PG_DoctorIMDetail' })
this.getDoctorDetail() this.getDoctorDetail()
this.getPatientDetail() this.getPatientDetail()
this.getMessageList() this.getMessageList()
this.getWordList() this.getWordList()
}) })
}, },
onUnload() {
if (this.innerAudioContext) {
this.innerAudioContext.stop()
}
},
getDoctorDetail() { getDoctorDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/account/info', url: '?r=zd/doctor/account/info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -80,7 +87,7 @@ Page({
getPatientDetail() { getPatientDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/message-interact/get-patient-info', url: '?r=zd/doctor/message-interact/get-patient-info',
data: { data: {
patientId: this.data.patientId, patientId: this.data.patientId,
}, },
@ -89,7 +96,10 @@ Page({
res.LastAdlTimeName = dayjs(res.LastAdlTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', '') res.LastAdlTimeName = dayjs(res.LastAdlTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', '')
} }
this.setData({ this.setData({
patientDetail: res, patientDetail: {
...res,
BecomePatientTime: dayjs(res.BecomePatientTime).format('YYYY-MM-DD'),
},
}) })
}) })
}, },
@ -101,30 +111,19 @@ Page({
const nextMsgId = this.data.nextMsgId const nextMsgId = this.data.nextMsgId
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/message-interact/doctor-get-message-list', url: '?r=zd/doctor/message-interact/doctor-get-message-list',
data: { data: {
nextMsgId, nextMsgId,
patientId: this.data.patientId, patientId: this.data.patientId,
}, },
}).then((res) => { }).then((res) => {
res.messageList.map((item) => { res.messageList.map((item) => {
if (item.msgContentType === '4') {
item.msgContent = JSON.parse(item.msgContent)
}
if (item.msgContentType === '2') { if (item.msgContentType === '2') {
item.msgVisitTime = item.msgVisitTimeType == 2 ? item.msgVisitTime : JSON.parse(item.msgVisitTime) item.msgVisitTime = item.msgVisitTimeType == 2 ? item.msgVisitTime : JSON.parse(item.msgVisitTime)
} }
if (item.msgContentType === '5') { if (item.msgContentType === '5') {
item.welcomeMsg = JSON.parse(item.welcomeMsg) item.welcomeMsg = JSON.parse(item.welcomeMsg)
} }
if (item.msgContentType === '9') {
item.ReVisitInfo = JSON.parse(item.ReVisitInfo)
item.ReVisitInfo.visitDateName = dayjs(item.ReVisitInfo.visitDate).format('YYYY年M月DD日')
}
if (item.msgContentType === '10') {
item.msgContentInfo = JSON.parse(item.msgContentInfo)
}
return item return item
}) })
if (!this.data.nextMsgId && !res.messageList.length) { if (!this.data.nextMsgId && !res.messageList.length) {
@ -162,7 +161,7 @@ Page({
getWordList() { getWordList() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/message-interact/get-common-word-list', url: '?r=zd/doctor/message-interact/get-common-word-list',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -171,7 +170,7 @@ Page({
}) })
}, },
handleSendDate() { handleSendDate() {
app.mpBehavior({ doctor: true, PageName: 'BTN_DOCTORINTERACTIONDETAILMYCLINICTIME' }) app.mpBehavior({ doctor: true, PageName: 'BTN_DoctorIMDetailClinicHours' })
const { const {
messageList, messageList,
doctor: { Clinic }, doctor: { Clinic },
@ -181,7 +180,7 @@ Page({
title: '完善出诊时间?', title: '完善出诊时间?',
content: '您还没有录入出诊时间', content: '您还没有录入出诊时间',
confirmText: '录入', confirmText: '录入',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.navigateTo({ wx.navigateTo({
@ -195,7 +194,7 @@ Page({
wx.showModal({ wx.showModal({
title: '提示', title: '提示',
content: '将您的出诊时间发送给患者?', content: '将您的出诊时间发送给患者?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
this.setData({ this.setData({
@ -215,7 +214,7 @@ Page({
this.filterCreateTime() this.filterCreateTime()
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/message-interact/send-visit-time', url: '?r=zd/doctor/message-interact/send-visit-time',
data: { data: {
patientId: this.data.patientId, patientId: this.data.patientId,
}, },
@ -226,7 +225,7 @@ Page({
}) })
}, },
handleSendShow() { handleSendShow() {
app.mpBehavior({ doctor: true, PageName: 'BTN_DOCTORINTERACTIONDETAILSENDMESSAGE' }) app.mpBehavior({ doctor: true, PageName: 'BTN_DoctorIMDetailSendMessage' })
this.setData({ this.setData({
messageListShow: true, messageListShow: true,
}) })
@ -236,6 +235,17 @@ Page({
messageListShow: false, messageListShow: false,
}) })
}, },
handleInputShow() {
this.setData({
inputShow: true,
focus: true,
})
},
toggleMaxTextarea() {
this.setData({
maxTextArea: !this.data.maxTextArea,
})
},
handleWord(e) { handleWord(e) {
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
this.setData({ this.setData({
@ -263,64 +273,13 @@ Page({
this.handleView() this.handleView()
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/message-interact/send-word-message', url: '?r=zd/doctor/message-interact/send-word-message',
data: { data: {
patientId: this.data.patientId, patientId: this.data.patientId,
wordId, wordId,
}, },
}) })
}, },
handleSendUserConform(e) {
const { id } = e.currentTarget.dataset
const title = {
6: '发送后患者将收到补充姓名通知',
7: '发送后患者将收到完善信息通知',
}[id]
wx.showModal({
title,
confirmColor: '#62bed0',
success: (res) => {
if (res.confirm) {
this.handleSendUser(id)
}
},
})
},
handleSendUser(id) {
const { messageList } = this.data
const content = {
6: '请完善您的真实姓名,以便我清楚了解您的病情',
7: '请完善您的个人信息,以便我清楚了解您的病情',
}[id]
this.setData({
messageList: [
...messageList,
{
msgId: '',
msgContentType: id,
msgContent: content,
msgVisitTime: '',
msgFromType: '2',
msgCreateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
},
],
})
this.filterCreateTime()
this.handlePopupMessageClose()
this.handleView()
const url = {
6: '?r=igg4/doctor/message-interact/send-remind-name',
7: '?r=igg4/doctor/message-interact/send-remind-init',
}[id]
wx.ajax({
method: 'POST',
url,
data: {
patientId: this.data.patientId,
},
})
},
formatTime(date: string) { formatTime(date: string) {
let msgCreateTimeName = '' let msgCreateTimeName = ''
if (dayjs().format('YYYY-MM-DD') === dayjs(date).format('YYYY-MM-DD')) { if (dayjs().format('YYYY-MM-DD') === dayjs(date).format('YYYY-MM-DD')) {
@ -363,83 +322,80 @@ Page({
}) })
}, },
handlePatientDetail() { handlePatientDetail() {
app.mpBehavior({ doctor: true, PageName: 'BTN_DOCTORINTERACTIONDETAILPATIENTFILE' }) app.mpBehavior({ doctor: true, PageName: 'BTN_DoctorIMDetailPatient' })
wx.navigateTo({ wx.navigateTo({
url: `/doctor/pages/d_patientDetail/index?id=${this.data.patientId}`, url: `/doctor/pages/d_patientDetail/index?id=${this.data.patientId}`,
}) })
}, },
handleAudio(e) { handleHideKeyboard() {
const { index } = e.currentTarget.dataset if (this.data.inputShow) {
const { messageList } = this.data this.setData({
const messageItem = messageList[index] inputShow: false,
const { url } = messageItem.msgContent[0] focus: false,
if (this.innerAudioContext) { })
if (messageItem.isPlay) { }
this.innerAudioContext.stop() },
messageItem.isPlay = false handleConfirm() {
const { customMessage } = this.data
this.handleHideKeyboard()
this.handleSendCustomMessage(customMessage)
},
handleSendCustomMessage(customMessage: string) {
if (!customMessage) return
const { messageList, patientId } = this.data
wx.ajax({
method: 'POST',
url: '?r=zd/doctor/message-interact/send-text-message',
data: {
text: customMessage,
patientId,
},
loading: true,
}).then((res) => {
if (res.errcode == 10001) {
this.setData({ this.setData({
messageList, popupShow: true,
popupType: 'popup9',
popupParams: {
message: res.errmsg,
},
}) })
return return
} }
this.innerAudioContext.stop() const pushMessage: IMessageItem[] = [
this.innerAudioContext.src = url {
this.innerAudioContext.play() msgId: '',
messageItem.isPlay = true msgContentType: '12',
this.innerAudioContext.onEnded(() => { msgContent: customMessage,
messageItem.isPlay = false msgVisitTime: '',
this.setData({ msgFromType: '2',
messageList, msgCreateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
}) },
}) ]
this.innerAudioContext.onStop(() => {
messageItem.isPlay = false
this.setData({
messageList,
})
})
this.setData({ this.setData({
messageList, customMessage: '',
messageList: [...messageList, ...pushMessage],
}) })
} this.filterCreateTime()
this.handleView()
})
}, },
handleAdl() { handlePopupOk() {
wx.showToast({ this.setData({
title: '患者点击此按钮可进入ADL测评页面', popupShow: false,
icon: 'none',
}) })
}, },
handleReferral() { handlePopupCancel() {
wx.showModal({ this.setData({
title: '', popupShow: false,
content: '您将给患者发送复诊时间填写卡片?', })
confirmText: '发送', },
confirmColor: '#62bed0', handleBack() {
success: (res) => { wx.navigateBack({
if (res.confirm) { fail() {
wx.ajax({ wx.reLaunch({
method: 'POST', url: '/doctor/pages/d_home/index',
url: '?r=igg4/doctor/message-interact/send-re-visit', })
data: {
patientId: this.data.patientId,
},
}).then(() => {
this.setData({
messageList: [
...this.data.messageList,
{
msgId: '',
msgContentType: '8',
msgVisitTime: '',
msgContent: '',
msgFromType: '2',
msgCreateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
},
],
})
this.handleView()
})
}
}, },
}) })
}, },

273
src/doctor/pages/d_interactiveDoctor/index.wxml

@ -1,122 +1,14 @@
<view class="page"> <view class="page" bind:tap="handleHideKeyboard">
<view class="page-header"> <view class="page-header">
<view class="user"> <view class="user">
<image class="avatar" src="{{patientDetail.userAvatar}}"></image> <image class="avatar" src="{{patientDetail.userAvatar}}"></image>
<view class="wrap"> <view class="wrap">
<view class="name"> <view class="name">
<view class="left"> <view class="left">{{patientDetail.patientName}}</view>
{{patientDetail.patientName}}
<view
class="tip"
wx:if="{{patientDetail.patientNameInit==='2'}}"
bind:tap="handleSendUserConform"
data-id="6"
>
提醒补充真实姓名
</view>
</view>
<view class="detail" bind:tap="handlePatientDetail">
患者档案
<van-icon name="arrow" />
</view>
</view>
<view class="tags">
<view class="tag" wx:for="{{patientDetail.Tags}}" wx:for-item="tag" wx:for-index="tIndex" wx:key="tIndex">
{{tag}}
</view>
</view>
</view>
</view>
<view class="adl" wx:if="{{patientDetail.LastAdlTime}}">
<view class="a-header">
<view class="content">最近一次测评:{{patientDetail.LastAdlTimeName}}</view>
<view class="box"></view>
</view>
<view class="a-content">
<view class="row" wx:if="{{patientDetail.AdlScore}}">
<view class="label">最新ADL评分</view>
<view class="num">{{patientDetail.AdlScore}}</view>
<view class="tag" wx:if="{{patientDetail.AdlScore<=1}}">
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-success.png?t={{Timestamp}}"></image>
已达标
</view>
<view class="t-content" wx:if="{{patientDetail.TotalScoreChange*1!=0}}">
<image
wx:if="{{patientDetail.TotalScoreChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-success.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-success.png?t={{Timestamp}}"></image>
{{patientDetail.TotalScoreChange}}
</view>
</view>
<view class="tag tag-warn" wx:elif="{{patientDetail.AdlScore<=5}}">
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-warn.png?t={{Timestamp}}"></image>
接近达标
</view>
<view class="t-content" wx:if="{{patientDetail.TotalScoreChange*1!=0}}">
<image
wx:if="{{patientDetail.TotalScoreChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-warn.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-warn.png?t={{Timestamp}}"></image>
{{patientDetail.TotalScoreChange}}
</view>
</view>
<view class="tag tag-error" wx:else>
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-error.png?t={{Timestamp}}"></image>
待达标
</view>
<view class="t-content" wx:if="{{patientDetail.TotalScoreChange*1!=0}}">
<image
wx:if="{{patientDetail.TotalScoreChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-error.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-error.png?t={{Timestamp}}"></image>
{{patientDetail.TotalScoreChange}}
</view>
</view>
</view>
<view class="row" wx:if="{{patientDetail.SteroidDailyDose}}">
<view class="label">最新激素用量</view>
<view class="num">{{patientDetail.SteroidDailyDose}}mg</view>
<view class="tag" wx:if="{{patientDetail.SteroidDailyDose<=5}}">
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-success.png?t={{Timestamp}}"></image>
已达标
</view>
<view class="t-content" wx:if="{{patientDetail.SteroidDailyDoseChange*1!=0}}">
<image
wx:if="{{patientDetail.SteroidDailyDoseChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-success.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-success.png?t={{Timestamp}}"></image>
{{patientDetail.SteroidDailyDoseChange}}mg
</view>
</view>
<view class="tag tag-error" wx:else>
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-error.png?t={{Timestamp}}"></image>
待达标
</view>
<view class="t-content" wx:if="{{patientDetail.SteroidDailyDoseChange*1!=0}}">
<image
wx:if="{{patientDetail.SteroidDailyDoseChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-error.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-error.png?t={{Timestamp}}"></image>
{{patientDetail.SteroidDailyDoseChange}}mg
</view>
</view>
</view> </view>
<view class="date">注册时间:{{patientDetail.BecomePatientTime}}</view>
</view> </view>
<view class="detail" bind:tap="handlePatientDetail">查看档案</view>
</view> </view>
</view> </view>
<view class="page-container" id="page-container"> <view class="page-container" id="page-container">
@ -143,47 +35,23 @@
<image class="a-img" src="{{patientDetail.userAvatar}}"></image> <image class="a-img" src="{{patientDetail.userAvatar}}"></image>
</view> </view>
<view class="p-container"> <view class="p-container">
<view class="message" wx:if="{{message.msgContentType==='1'}}">{{message.msgContent}}</view> <view class="message">{{message.msgContent}}</view>
<view class="referral-replay" wx:if="{{message.msgContentType==='9'}}">
<view class="title">我最近一次复诊时间是{{message.ReVisitInfo.visitDateName}}</view>
<view class="sub-title">我的方案是</view>
<view class="r-list">
<view class="item" wx:if="{{message.ReVisitInfo.hormone==1}}">1.激素</view>
<view class="item" wx:if="{{message.ReVisitInfo.traditionalInhibitor==1}}">
2.传统免疫抑制剂(如他克莫司、吗 替麦考酚酯等)
</view>
<view class="item" wx:if="{{message.ReVisitInfo.gammaGlobulin==1}}">3.静脉输注丙种球蛋白</view>
<view class="item" wx:if="{{message.ReVisitInfo.plasmaExchange==1}}">4.血浆置换</view>
<view class="item" wx:if="{{message.ReVisitInfo.bCellInhibitor==1}}">
5.B细胞抑制剂(如:利妥昔单抗、泰 它西普、伊奈利珠单抗)
</view>
<view class="item" wx:if="{{message.ReVisitInfo.fcRnAntagonists==1}}">6.FcRn拮抗剂(如:艾加莫德)</view>
<view class="item" wx:if="{{message.ReVisitInfo.c5ComplementInhibitor==1}}">
7.C5补体抑制剂(如:依库珠单抗)
</view>
<view class="item" wx:if="{{message.ReVisitInfo.chineseMedicine==1}}">8.中药或中成药</view>
<view class="item" wx:if="{{message.ReVisitInfo.other==1}}">9.其他</view>
</view>
</view>
</view> </view>
</view> </view>
<view class="doctor" wx:if="{{message.msgFromType==='2'}}"> <view class="doctor" wx:if="{{message.msgFromType==='2'}}">
<view class="d-container"> <view class="d-container">
<view class="guide" wx:if="{{message.msgContentType==='5'}}"> <view class="guide" wx:if="{{message.msgContentType==='5'}}">
<view class="title">{{message.welcomeMsg.title}}</view> <view class="title">以下是门诊常见提问,您也可以在对话框下方的"快速提问"里查询更多:</view>
<view class="sub-title">{{message.welcomeMsg.questionDes}}</view>
<view class="list"> <view class="list">
<view class="l-item" wx:for="{{message.welcomeMsg.hotQuestion}}" wx:key="questionId"> <view class="l-item" wx:for="{{message.welcomeMsg.hotQuestion}}" wx:key="questionId">
<view class="order">{{index+1}}</view> <view class="order">{{index+1}}</view>
<view class="content">{{item.question}}</view> <view class="content">{{item.question}}</view>
</view> </view>
</view> </view>
<view class="tip">
{{message.welcomeMsg.guideClick}}
<image class="icon" src="{{imageUrl}}/doctor/icon-down1.png?t={{Timestamp}}"></image>
</view>
</view> </view>
<view class="message" wx:elif="{{message.msgContentType==='1'}}">{{message.msgContent}}</view> <block wx:elif="{{message.msgContentType==='1'|| message.msgContentType==='11' || message.msgContentType==='12'}}">
<view class="message">{{message.msgContent}}</view>
</block>
<view class="week" wx:elif="{{message.msgContentType==='2'}}"> <view class="week" wx:elif="{{message.msgContentType==='2'}}">
<view class="w-title">以下是我的出诊时间</view> <view class="w-title">以下是我的出诊时间</view>
<view class="w-container"> <view class="w-container">
@ -196,70 +64,12 @@
</block> </block>
</view> </view>
</view> </view>
<view <view class="adl" wx:elif="{{message.msgContentType==='10'}}">
class="adl" <image class="adl-img" src="/images/bg20.png"></image>
wx:elif="{{message.msgContentType==='3'}}"
style="padding-top: {{top+25}}px;background: url({{imageUrl}}/doctor/d_interactive-adl-bg.png?t={{Timestamp}}) no-repeat bottom right / 268rpx 222rpx,#D74D75;"
>
<image
class="title"
src="{{imageUrl}}/doctor/d_interactiveTitle1.png?t={{Timestamp}}"
mode="aspectFit"
></image>
<view class="sub-title">ADL+激素双达标</view>
<view class="btn" bind:tap="handleAdl">点击进入ADL</view>
<view class="tip">建议您定期做ADL测评</view>
</view>
<view
class="audio"
wx:elif="{{message.msgContentType==='4'}}"
bind:tap="handleAudio"
data-index="{{mIndex}}"
>
{{message.msgContent[0].duration}}''
<image
class="icon"
wx:if="{{message.isPlay}}"
src="{{imageUrl}}/doctor/audio-left.gif?t={{Timestamp}}"
mode="aspectFit"
></image>
<image
class="icon"
wx:else
src="{{imageUrl}}/doctor/audio-left.png?t={{Timestamp}}"
mode="aspectFit"
></image>
</view>
<view class="info" wx:elif="{{message.msgContentType==='6'}}">
<view class="content">{{message.msgContent}}</view>
<view class="btn">提交您的真实姓名</view>
</view>
<view class="info" wx:elif="{{message.msgContentType==='7'}}">
<view class="content">{{message.msgContent}}</view>
<view class="btn">完善个人信息</view>
</view>
<view class="referral" wx:elif="{{message.msgContentType==='8'}}">
<view class="r-header">
<view class="title">您最近有按照医生的 提醒,定期复诊吗?</view>
<image class="icon" src="{{imageUrl}}5/hostipal.png?t={{Timestamp}}"></image>
</view>
<view class="r-footer">
<view class="btn">已复诊</view>
</view>
</view>
<view class="trans" wx:elif="{{message.msgContentType==='10'}}">
<view class="user">
<image class="u-avatar" mode="aspectFill" src="{{message.msgContentInfo.doctorImg}}"></image>
<view class="wrap">
<view class="name">{{message.msgContentInfo.doctorName}}</view>
<view class="content">{{message.msgContentInfo.hospitalName}}</view>
</view>
</view>
<view class="tip">推荐好医生给你,建议2周内复诊</view>
</view> </view>
</view> </view>
<view class="avatar"> <view class="avatar">
<image class="a-img" mode="aspectFill" src="{{imageUrl}}/5/doctor.png?t={{Timestamp}}"></image> <image class="a-img" mode="aspectFill" src="{{doctor.Img}}"></image>
</view> </view>
</view> </view>
</view> </view>
@ -267,22 +77,51 @@
</scroll-view> </scroll-view>
</view> </view>
<view class="page-footer"> <view class="page-footer">
<view class="send" bind:tap="handleSendShow">发送消息</view> <view class="send" wx:if="{{doctor.IsOpenOneToOne==1}}">
<view class="send-date" wx:if="{{patientDetail.patientInit==='2'}}" bind:tap="handleSendUserConform" data-id="7"> <view class="content" catch:tap="handleInputShow">{{customMessage || '输入文字'}}</view>
<image class="icon" src="{{imageUrl}}/3/icon-user.png?t={{Timestamp}}"></image> <view class="btn" catch:tap="handleSendShow">快捷回复</view>
<view>完善个人信息</view>
</view> </view>
<view wx:else class="short-send" bind:tap="handleSendShow">发送消息</view>
<view class="send-date" bind:tap="handleSendDate"> <view class="send-date" bind:tap="handleSendDate">
<image class="icon" src="{{imageUrl}}/3/icon-send-date.png?t={{Timestamp}}"></image> <image class="icon" src="/images/icon56.png"></image>
<view>我的出诊时间</view> <view>出诊时间</view>
</view>
<view class="send-date" bind:tap="handleReferral">
<image class="icon" src="{{imageUrl}}5/icon-referral.png?t={{Timestamp}}"></image>
<view style="color: #67baca">复诊提醒</view>
</view> </view>
</view> </view>
</view> </view>
<view wx:if="{{inputShow}}" class="custom-input {{maxTextArea && 'custom-input-max'}}">
<image
wx:if="{{maxTextArea}}"
class="icon"
src="{{imageUrl}}icon98.png?t={{Timestamp}}"
catch:tap="toggleMaxTextarea"
></image>
<image wx:else class="icon" src="{{imageUrl}}icon97.png?t={{Timestamp}}" catch:tap="toggleMaxTextarea"></image>
<view class="wrap" catch:tap="catchFooterInput">
<textarea
class="textarea"
model:value="{{customMessage}}"
focus="{{focus}}"
hold-keyboard
disable-default-padding
confirm-type="send"
adjust-keyboard-to="bottom"
maxlength="{{500}}"
placeholder="输入文字"
bind:blur="bindblur"
bindconfirm="handleConfirm"
>
<keyboard-accessory class="ka" hold-keyboard="{{true}}" style="background-color: #fff;">
<cover-view class="ka-container">
<cover-view class="stat {{customMessage.length==500 && 'red'}}">{{customMessage.length}}/500</cover-view>
<cover-view class="send-btn" bind:tap="handleConfirm">发送</cover-view>
</cover-view>
</keyboard-accessory>
</textarea>
<view class="w-footer"></view>
</view>
</view>
<van-popup <van-popup
show="{{ messageListShow }}" show="{{ messageListShow }}"
style="--popup-close-icon-color: #283031" style="--popup-close-icon-color: #283031"
@ -292,7 +131,7 @@
closeable closeable
> >
<view class="popup-message"> <view class="popup-message">
<view class="title">发送消息</view> <view class="title">快捷回复</view>
<view class="list"> <view class="list">
<view <view
class="l-item {{wordIndex===index && 'active'}}" class="l-item {{wordIndex===index && 'active'}}"
@ -307,3 +146,11 @@
<view class="submit" bind:tap="handleSendWord">发送</view> <view class="submit" bind:tap="handleSendWord">发送</view>
</view> </view>
</van-popup> </van-popup>
<toast
show="{{popupShow}}"
type="{{popupType}}"
params="{{popupParams}}"
bind:ok="handlePopupOk"
bind:cancel="handlePopupCancel"
></toast>

1
src/doctor/pages/d_invite/index.scss

@ -1,5 +1,4 @@
page{ page{
background-color: #c65174;
} }
.page { .page {
position: relative; position: relative;

66
src/doctor/pages/d_invite/index.ts

@ -28,7 +28,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/account/info', url: '?r=zd/doctor/account/info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -47,6 +47,68 @@ Page({
doctorId: id, doctorId: id,
}, },
}).then((res) => { }).then((res) => {
res = {
info: { id: 'doctor_mini', title: '医生码海报', desc: '医生小程序码海报' },
body: {
bgImg:
'https://picsissiok-10049618.cos.ap-shanghai.myqcloud.com/c40aa612270160a657112c56a933d54e_17558553039736.png',
width: '750',
height: '1448',
},
elements: [
{
id: 'avatar',
desc: '医生头像',
type: 0,
picType: 'avatar',
src: 'https://picsissiok-10049618.cos.ap-shanghai.myqcloud.com/6e61b32196f54f20f66dd45c33ade450_17693963483779.png',
width: '128',
height: '128',
left: '70',
top: '256',
shape: 'circle',
},
{
id: 'doctorName',
desc: '医生姓名',
type: 1,
text: '云南大学附属医院\n内分泌科医生',
font: '',
'font-size': '40',
'font-weight': 'bold',
width: '384',
color: 'rgba(33, 29, 46, 1)',
'single-line': true,
left: '234',
top: '256',
},
{
id: 'hospitalName',
desc: '医院名称',
type: 1,
text: '中南大学湘雅医院',
font: '',
'font-size': '32',
color: 'rgba(115, 114, 121, 1)',
'single-line': true,
left: '234',
width: '384',
top: '344',
lineHeight: '36',
},
{
id: 'minicode',
desc: '医生小程序码',
type: 0,
picType: 'minicode',
src: '',
width: '238',
height: '238',
halign: 'center',
top: '640',
},
],
}
this.setData({ this.setData({
params: res, params: res,
}) })
@ -54,7 +116,7 @@ Page({
}, },
getQrCode() { getQrCode() {
this.setData({ this.setData({
qrCode: `${app.globalData.url}?r=igg4/doctor/account/mp-info&loginState=${app.globalData.loginState}`, qrCode: `${app.globalData.url}?r=zd/doctor/account/mp-info&loginState=${app.globalData.loginState}`,
}) })
}, },
handleDownload() { handleDownload() {

5
src/doctor/pages/d_login/index.json

@ -1,9 +1,8 @@
{ {
"navigationBarTitleText": "登录", "navigationBarTitleText": "",
"navigationStyle": "custom",
"usingComponents": { "usingComponents": {
"van-divider": "@vant/weapp/divider/index", "van-divider": "@vant/weapp/divider/index",
"van-icon": "@vant/weapp/icon/index", "van-icon": "@vant/weapp/icon/index",
"navBar": "/components/navBar/navBar" "toast": "/components/toast/index"
} }
} }

54
src/doctor/pages/d_login/index.scss

@ -1,32 +1,39 @@
.page { .page {
min-height: 100vh; min-height: 100vh;
padding: 460rpx 0 80rpx 0; padding: 36rpx 0 80rpx 0;
box-sizing: border-box; box-sizing: border-box;
.container { .container {
padding: 0 50rpx; padding: 0 40rpx;
.page-logo {
margin: 0 auto;
display: block;
width: 223rpx;
height: 280rpx;
}
.c-title { .c-title {
font-size: 36rpx; margin-top: 56rpx;
color: rgba(32, 33, 33, 1); font-size: 40rpx;
color: rgba(33, 33, 32, 1);
font-weight: bold; font-weight: bold;
} }
.content { .content {
margin-top: 30rpx; margin-top: 30rpx;
font-size: 32rpx; font-size: 32rpx;
color: rgba(32, 33, 33, 1); color: rgba(33, 33, 32, 0.70);
line-height: 56rpx; line-height: 56rpx;
.link { .link {
color: rgba(67, 168, 188, 1); color: rgba(22, 121, 203, 1);
} }
} }
} }
.phone { .phone {
margin: 44rpx 48rpx 0; margin: 44rpx 48rpx 0;
padding: 24rpx 20rpx; padding: 24rpx 20rpx;
border-radius: 64rpx; border-radius: 12rpx;
background: rgba(103, 186, 202, 1); background: linear-gradient( 90deg, #293B9F 0%, #1679CB 100%);
font-size: 32rpx; font-size: 32rpx;
color: rgba(255, 255, 255, 1); color: rgba(255, 255, 255, 1);
line-height: 1; line-height: 48rpx;
&::after { &::after {
border: none; border: none;
outline: none; outline: none;
@ -34,17 +41,18 @@
} }
.tel-code { .tel-code {
margin: 16rpx auto 0; margin: 16rpx auto 0;
width: 278rpx; width: 294rpx;
height: 52rpx; height: 56rpx;
background: #f7f7fa; border-radius: 92rpx 92rpx 92rpx 92rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx; background: rgba(243, 243, 243, 1);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 28rpx; gap: 12rpx;
color: rgba(161, 164, 172, 1); font-size: 32rpx;
color: rgba(22, 121, 203, 1);
.icon { .icon {
width: 40rpx; width: 27rpx;
height: 40rpx; height: 40rpx;
} }
} }
@ -55,7 +63,7 @@
margin-bottom: 32rpx; margin-bottom: 32rpx;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
border-radius: 64rpx; border-radius: 12rpx;
background: rgba(247, 247, 247, 1); background: rgba(247, 247, 247, 1);
border: 1rpx solid rgba(237, 239, 240, 1); border: 1rpx solid rgba(237, 239, 240, 1);
.input { .input {
@ -66,7 +74,7 @@
color: #000; color: #000;
} }
.input-placeholade { .input-placeholade {
color: rgba(194, 201, 202, 1); color: rgba(33, 33, 32, 0.40);
} }
.code { .code {
margin-left: 24rpx; margin-left: 24rpx;
@ -74,7 +82,7 @@
width: 262rpx; width: 262rpx;
border-radius: 24rpx; border-radius: 24rpx;
font-size: 32rpx; font-size: 32rpx;
color: rgba(103, 186, 202, 1); color: rgba(22, 121, 203, 1);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -83,12 +91,12 @@
.submit { .submit {
margin-top: 32px; margin-top: 32px;
padding: 24rpx 20rpx; padding: 24rpx 20rpx;
background: rgba(103, 186, 202, 1); border-radius: 12rpx;
border-radius: 64rpx; background: linear-gradient( 90deg, #293B9F 0%, #1679CB 100%);
font-size: 32rpx; font-size: 32rpx;
color: #ffffff; color: #ffffff;
text-align: center; text-align: center;
line-height: 1; line-height: 48rpx;
} }
} }
.divider { .divider {
@ -108,7 +116,7 @@
height: 32rpx; height: 32rpx;
} }
.link { .link {
color: rgba(67, 168, 188, 1); color: rgba(22, 121, 203, 1);
} }
} }
.partient { .partient {

60
src/doctor/pages/d_login/index.ts

@ -3,6 +3,12 @@ let timer = null as null | number
Page({ Page({
data: { data: {
popupShow: false,
popupType: 'popup11',
popupParams: {
close: false,
} as any,
mobile: '', mobile: '',
code: '', code: '',
codeText: '发送验证码', codeText: '发送验证码',
@ -38,7 +44,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/login/send-verify-code', url: '?r=zd/login/send-verify-code',
data: { data: {
mobile, mobile,
}, },
@ -63,6 +69,22 @@ Page({
}, 1000) }, 1000)
}) })
}, },
handleDocRule(customPhone = false) {
const { check } = this.data
return new Promise((resolve) => {
if (check) {
return resolve(true)
}
this.setData({
popupShow: true,
popupType: 'popup11',
popupParams: {
close: false,
customPhone,
},
})
})
},
handleSubmit() { handleSubmit() {
app.mpBehavior({ PageName: 'BTN_DOCTORLOGIN' }) app.mpBehavior({ PageName: 'BTN_DOCTORLOGIN' })
if (!this.data.mobile) { if (!this.data.mobile) {
@ -80,15 +102,12 @@ Page({
return return
} }
if (!this.data.check) { if (!this.data.check) {
wx.showToast({ this.handleDocRule(true)
icon: 'none',
title: '请同意用户协议',
})
return return
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/login/reg-login', url: '?r=zd/doctor/login/reg-login',
data: { data: {
mobile: this.data.mobile, mobile: this.data.mobile,
code: this.data.code, code: this.data.code,
@ -99,18 +118,12 @@ Page({
}, },
handleWxSubmit(e: WechatMiniprogram.CustomEvent) { handleWxSubmit(e: WechatMiniprogram.CustomEvent) {
app.mpBehavior({ PageName: 'BTN_DOCTORQUICKPATIENTLOGIN' }) app.mpBehavior({ PageName: 'BTN_DOCTORQUICKPATIENTLOGIN' })
if (!this.data.check) { this.handlePopupCancel()
wx.showToast({
icon: 'none',
title: '请同意用户协议',
})
return
}
const { iv, encryptedData } = e.detail const { iv, encryptedData } = e.detail
if (iv && encryptedData) { if (iv && encryptedData) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/login/wx-reg-login', url: '?r=zd/doctor/login/wx-reg-login',
data: { data: {
iv: encodeURIComponent(iv), iv: encodeURIComponent(iv),
encryptedData: encodeURIComponent(encryptedData), encryptedData: encodeURIComponent(encryptedData),
@ -120,6 +133,10 @@ Page({
}) })
} }
}, },
handleNoDoc() {
app.mpBehavior({ PageName: 'BTN_DOCTORQUICKPATIENTLOGIN' })
this.handleDocRule()
},
submitCallback() { submitCallback() {
app.globalData.loginType = 2 app.globalData.loginType = 2
app.globalData.isLogin = true app.globalData.isLogin = true
@ -147,6 +164,21 @@ Page({
check: !this.data.check, check: !this.data.check,
}) })
}, },
handlePopupOk() {
const { popupType } = this.data
if (popupType == 'popup11') {
this.setData({
check: true,
popupShow: false,
})
this.handleSubmit()
}
},
handlePopupCancel() {
this.setData({
popupShow: false,
})
},
handleBack() { handleBack() {
wx.navigateBack() wx.navigateBack()
}, },

35
src/doctor/pages/d_login/index.wxml

@ -1,25 +1,23 @@
<view class="page" style="background: url({{imageUrl}}/bg4.png?t={{Timestamp}}) no-repeat top center / 100% 648rpx"> <view class="page">
<navBar title="" fixed home="{{false}}" back="{{back}}" bind:back="handleBack"></navBar>
<view class="container"> <view class="container">
<image class="page-logo" src="/images/bg19.png"></image>
<view class="c-title">尊敬的医生您好</view> <view class="c-title">尊敬的医生您好</view>
<view class="content">gMG 给力加油站是中国罕见病联盟/北京罕见病诊疗与保障学会发起的gMG患者健康全程管理平台;</view> <view class="content">“愈见昕生”是北京白求恩公益基金会发起的 IgG4-RD 患者健康管理平台。</view>
<view class="content"> <view class="content">
在您加入gMG 给力加油站平台之前,请您阅读并充分理解 加入平台前,请您仔细阅读
<text class="link" bind:tap="handleLink">《隐私协议保护政策》</text> <text class="link" bind:tap="handleLink">《隐私保护协议》</text>
,了解您的权益及相关数据处理方法,我们将严格按照法律法规及 ,了解您的权益及个人信息处理方式。我们将严格依法保护您的个人信息安全。
<text class="link" bind:tap="handleLink">《隐私协议保护政策》</text>
的相关规定,保证您的个人信息不受侵犯。
</view> </view>
</view> </view>
<button wx:if="{{check}}" class="phone" open-type="getPhoneNumber" bindgetphonenumber="handleWxSubmit"> <button wx:if="{{check}}" class="phone" open-type="getPhoneNumber" bindgetphonenumber="handleWxSubmit">
手机号快捷登录 手机号快捷登录
</button> </button>
<button wx:else class="phone" bind:tap="handleWxSubmit">手机号快捷登录</button> <button wx:else class="phone" bind:tap="handleNoDoc">手机号快捷登录</button>
<view class="divider"> <view class="divider">
<van-divider contentPosition="center" textColor="rgba(207, 209, 213, 1)">或者</van-divider> <van-divider contentPosition="center" textColor="rgba(33, 33, 32, 0.70)">或者</van-divider>
</view> </view>
<view class="tel-code" bind:tap="handleTelCode"> <view class="tel-code" bind:tap="handleTelCode">
<image class="icon" src="{{imageUrl}}/icon14.png?t={{Timestamp}}"></image> <image class="icon" src="/images/icon51.png"></image>
手机号验证码 手机号验证码
</view> </view>
<view class="form" wx:if="{{showForm}}"> <view class="form" wx:if="{{showForm}}">
@ -45,11 +43,11 @@
<view class="submit" bind:tap="handleSubmit">立即加入</view> <view class="submit" bind:tap="handleSubmit">立即加入</view>
</view> </view>
<view class="check"> <view class="check">
<image wx:if="{{check}}" class="icon" src="{{imageUrl}}icon12.png?t={{Timestamp}}" bind:tap="handleCheck"></image> <image wx:if="{{check}}" class="icon" src="/images/icon52.png" bind:tap="handleCheck"></image>
<image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image> <image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image>
<view class="p"> <view class="p">
特此同意依照此 我同意依照此
<text class="link" bind:tap="handleLink">《隐私协议保护政策》</text> <text class="link" bind:tap="handleLink">《隐私政策》</text>
规定收集我的个人敏感信息 规定收集我的个人敏感信息
</view> </view>
</view> </view>
@ -58,3 +56,12 @@
<van-icon name="arrow" /> <van-icon name="arrow" />
</view> </view>
</view> </view>
<toast
show="{{popupShow}}"
type="{{popupType}}"
params="{{popupParams}}"
bind:ok="handlePopupOk"
bind:phone="handleWxSubmit"
bind:cancel="handlePopupCancel"
></toast>

3
src/doctor/pages/d_my/index.json

@ -1,8 +1,7 @@
{ {
"navigationStyle": "custom", "navigationBarTitleText": "我的",
"usingComponents": { "usingComponents": {
"van-icon": "@vant/weapp/icon/index", "van-icon": "@vant/weapp/icon/index",
"navBar": "/components/navBar/navBar",
"tabbar": "../../components/tabbar/index", "tabbar": "../../components/tabbar/index",
"text-expandsion": "/components/text-expandsion/index" "text-expandsion": "/components/text-expandsion/index"
} }

167
src/doctor/pages/d_my/index.scss

@ -4,137 +4,88 @@ page {
} }
.page { .page {
min-height: 100vh; min-height: 100vh;
.container { padding-top: 40rpx;
margin: 160rpx 30rpx 0; .user-info {
padding: 0 30rpx 40rpx; display: flex;
background: #fff linear-gradient(to top, #ffffff 0%, #e8f0f1 100%) no-repeat top center/100% 200rpx; padding: 0 40rpx 0;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.avatar { .avatar {
margin-top: -50rpx; flex-shrink: 0;
width: 128rpx; width: 104rpx;
height: 128rpx; height: 104rpx;
.avatar-user { border-radius: 50%;
width: 100%; margin-right: 24rpx;
height: 100%;
border-radius: 50%;
}
} }
.name { .user-detail {
margin: -55rpx 0 0 150rpx; .name {
font-size: 40rpx; font-size: 40rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
line-height: 1;
}
.card {
margin-top: 52rpx;
padding: 32rpx;
background: #ffffff;
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #f8f9f9;
.content {
display: flex;
align-items: start;
gap: 8rpx;
font-size: 32rpx;
color: rgba(40, 48, 49, 1); color: rgba(40, 48, 49, 1);
line-height: 1; font-weight: bold;
margin-bottom: 12rpx;
}
.hospital {
font-size: 32rpx;
color: rgba(33, 33, 32, 0.4);
.tag { .tag {
flex-shrink: 0; display: inline-block;
padding: 4rpx 12rpx; margin-left: 12rpx;
padding: 0 12rpx;
font-size: 22rpx; font-size: 22rpx;
color: rgba(229, 154, 41, 1); color: rgba(255, 255, 255, 1);
background: linear-gradient(272deg, #ffd21e 0%, #ffb514 100%);
border-radius: 8rpx; border-radius: 8rpx;
background-color: rgba(229, 154, 41, 0.29);
}
}
.c-row {
margin-top: 32rpx;
display: flex;
align-items: center;
gap: 12rpx;
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
line-height: 1;
.icon {
flex-shrink: 0;
width: 32rpx;
height: 32rpx;
} }
} }
} }
.row { }
margin-top: 32rpx; .invite-card {
.r-title { margin: 40rpx 40rpx 0;
width: 128rpx; .i-img {
height: 32rpx; width: 100%;
} height: 164rpx;
.r-content {
margin-top: 16rpx;
font-size: 28rpx;
color: rgba(154, 161, 163, 1);
white-space: pre-line;
}
} }
} }
.invite { .menu-list {
padding: 22rpx 30rpx 36rpx 168rpx; margin: 32rpx 30rpx 0;
margin: 24rpx 30rpx 0; background: #fff;
display: flex;
align-items: center;
justify-content: space-between;
border-radius: 24rpx; border-radius: 24rpx;
border: 2rpx solid #ffffff; overflow: hidden;
.wrap { .menu-item {
.title {
font-size: 36rpx;
color: rgba(40, 48, 49, 1);
}
.content {
font-size: 28rpx;
color: rgba(154, 161, 163, 1);
}
}
.btn {
width: 198rpx;
height: 64rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
background: #62bed0;
border-radius: 136rpx 136rpx 136rpx 136rpx;
}
}
.list {
margin: 24rpx 30rpx 0;
.list-item {
padding: 30rpx;
display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; padding: 30rpx;
background: #ffffff; border-bottom: 1rpx solid #f2f4f5;
border-radius: 24rpx 24rpx 24rpx 24rpx; &:last-child {
.left { border-bottom: none;
}
.menu-left {
display: flex; display: flex;
gap: 20rpx;
align-items: center; align-items: center;
.icon { .menu-icon {
width: 48rpx; width: 44rpx;
height: 48rpx; height: 44rpx;
margin-right: 20rpx;
} }
.name { .menu-name {
font-size: 32rpx; font-size: 32rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
} }
} }
.more { .menu-arrow {
color: #d4d9da; color: rgba(173, 172, 178, 1);
font-size: 32rpx; font-size: 32rpx;
} }
} }
} }
.logout-btn {
margin: 40rpx 30rpx;
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(33, 33, 32, 1);
background: #fff;
border-radius: 44rpx;
}
} }

39
src/doctor/pages/d_my/index.ts

@ -24,7 +24,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/account/info', url: '?r=zd/doctor/account/info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
let weekName = '' let weekName = ''
@ -60,6 +60,43 @@ Page({
url, url,
}) })
}, },
handlePrivacy() {
wx.navigateTo({
url: '/pages/privacyAgreement/index',
})
},
handleFollow() {
wx.navigateTo({
url: '/pages/thePublic/index',
})
},
handleFeedback() {
wx.navigateTo({
url: '/pages/comIns/index',
})
},
handleLogout() {
wx.showModal({
title: '确认退出?',
confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => {
if (res.confirm) {
wx.ajax({
method: 'POST',
url: '?r=zd/doctor/account/reg-logout',
data: {},
}).then((_res) => {
app.globalData.loginType = 1
app.globalData.anyWhere = true
app.globalData.first = true
wx.reLaunch({
url: '/pages/login/index',
})
})
}
},
})
},
onShareAppMessage() { onShareAppMessage() {
return { return {
title: '重症肌无力加油站,重拾生活掌控感!', title: '重症肌无力加油站,重拾生活掌控感!',

90
src/doctor/pages/d_my/index.wxml

@ -1,66 +1,50 @@
<view <view class="page">
class="page" <view class="user-info">
style="padding-top: {{top+5}}px;background: url({{imageUrl}}/doctor/my-bg.png?t={{Timestamp}}) no-repeat top center / 100% 740rpx" <image class="avatar" mode="aspectFill" src="{{doctor.Img}}"></image>
> <view class="user-detail">
<navBar title="" fixed home="{{false}}"></navBar> <view class="name">{{doctor.Name}}</view>
<view class="container"> <view class="hospital">
<view class="avatar">
<image class="avatar-user" mode="aspectFill" src="{{doctor.Img}}"></image>
</view>
<view class="name">{{doctor.Name}}</view>
<view class="card">
<view class="content">
{{hospital.Name}} {{hospital.Name}}
<view class="tag">{{hospital.HospitalClassificationName}}{{hospital.HospitalLevelName}}</view> <view class="tag" wx:if="{{hospital.HospitalClassificationName || hospital.HospitalLevelName}}">
</view> {{hospital.HospitalClassificationName}}{{hospital.HospitalLevelName}}
<view </view>
class="c-row"
wx:if="{{hospital.ProvinceName || hospital.CityName || hospital.CountyName || hospital.Address}}"
>
<image class="icon" src="{{imageUrl}}/doctor/icon-site.png?t={{Timestamp}}"></image>
{{hospital.ProvinceName}}{{hospital.CityName}}{{hospital.CountyName}}{{hospital.Address}}
</view>
<view class="c-row" wx:if="{{hospital.Telephone}}">
<image class="icon" src="{{imageUrl}}/doctor/icon-phone.png?t={{Timestamp}}"></image>
{{hospital.Telephone}}
</view> </view>
</view> </view>
<view class="row" wx:if="{{doctor.Introduce}}"> </view>
<image class="r-title" src="{{imageUrl}}/doctor/my-title1.png?t={{Timestamp}}"></image> <view class="invite-card" data-url="/doctor/pages/d_invite/index" bind:tap="handleRouter">
<view class="r-content"> <image class="i-img" src="/images/bg21.png"></image>
<text-expandsion </view>
text="{{doctor.Introduce}}" <view class="menu-list">
color="rgba(154, 161, 163, 1)" <view class="menu-item" bind:tap="handleRouter" data-url="/doctor/pages/d_userInfo/index">
expend-color="#62BED0" <view class="menu-left">
></text-expandsion> <image class="menu-icon" src="/images/icon57.png"></image>
<view class="menu-name">个人信息</view>
</view> </view>
<van-icon class="menu-arrow" name="arrow" />
</view> </view>
<view class="row" wx:if="{{doctor.weekName}}"> <view class="menu-item" bind:tap="handlePrivacy">
<image class="r-title" src="{{imageUrl}}/doctor/my-title2.png?t={{Timestamp}}"></image> <view class="menu-left">
<view class="r-content pre-line">{{doctor.weekName}}</view> <image class="menu-icon" src="/images/icon58.png"></image>
<view class="menu-name">隐私协议</view>
</view>
<van-icon class="menu-arrow" name="arrow" />
</view> </view>
</view> <view class="menu-item" bind:tap="handleFollow">
<view <view class="menu-left">
class="invite" <image class="menu-icon" src="/images/icon59.png"></image>
style="background: url({{imageUrl}}/doctor/my-code.png?t={{Timestamp}}) no-repeat center left / 208rpx 152rpx,linear-gradient( 265deg, #E8F0F1 0%, #FFFFFF 100%);" <view class="menu-name">关注公众号</view>
data-url="/doctor/pages/d_invite/index" </view>
bind:tap="handleRouter" <van-icon class="menu-arrow" name="arrow" />
>
<view class="wrap">
<view class="title">出示邀约码</view>
<view class="content">邀请患者加入你吧</view>
</view> </view>
<view class="btn">邀请患者</view> <view class="menu-item" bind:tap="handleFeedback">
</view> <view class="menu-left">
<view class="list"> <image class="menu-icon" src="/images/icon60.png"></image>
<view class="list-item" bind:tap="handleRouter" data-url="/doctor/pages/d_userInfo/index"> <view class="menu-name">问题反馈</view>
<view class="left">
<image class="icon" src="{{imageUrl}}/doctor/my-list-icon1.png?t={{Timestamp}}"></image>
<view class="name">个人信息</view>
</view> </view>
<van-icon class="more" name="arrow" /> <van-icon class="menu-arrow" name="arrow" />
</view> </view>
</view> </view>
<view class="logout-btn" bind:tap="handleLogout">退出登录</view>
</view> </view>
<tabbar active="{{3}}"></tabbar> <tabbar active="{{3}}"></tabbar>

2
src/doctor/pages/d_patient/index.json

@ -1,5 +1,5 @@
{ {
"navigationStyle": "custom", "navigationBarTitleText": "患者列表",
"usingComponents": { "usingComponents": {
"tabbar": "../../components/tabbar/index", "tabbar": "../../components/tabbar/index",
"navBar": "/components/navBar/navBar", "navBar": "/components/navBar/navBar",

250
src/doctor/pages/d_patient/index.scss

@ -11,18 +11,16 @@ page {
top: 0; top: 0;
padding: 30rpx; padding: 30rpx;
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(40, 48, 49, 0.04); box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(40, 48, 49, 0.04);
border-radius: 0 0 32rpx 32rpx;
z-index: 10; z-index: 10;
background-color: #fff;
.search { .search {
padding: 18rpx 32rpx; padding: 16rpx 32rpx;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 16rpx; gap: 16rpx;
background: linear-gradient(to top, #ffffff 0%, #ebf3f4 100%); background: rgba(243, 243, 243, 1);
box-shadow: 0rpx 8rpx 8rpx 0rpx rgba(40, 48, 49, 0.04);
border-radius: 140rpx 140rpx 140rpx 140rpx; border-radius: 140rpx 140rpx 140rpx 140rpx;
border: 2rpx solid #ffffff;
.icon { .icon {
width: 40rpx; width: 40rpx;
@ -31,11 +29,11 @@ page {
.input { .input {
flex: 1; flex: 1;
font-size: 28rpx; font-size: 32rpx;
} }
.input-place { .input-place {
color: rgba(173, 179, 180, 1); color: rgba(33, 33, 32, 0.3);
} }
} }
.navbar { .navbar {
@ -43,13 +41,22 @@ page {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
gap: 16rpx;
overflow-y: scroll;
&::-webkit-scrollbar {
display: none;
}
.nav { .nav {
position: relative; position: relative;
flex: 1; flex: 1;
padding: 6rpx 32rpx;
text-align: center; text-align: center;
font-size: 32rpx; font-size: 36rpx;
color: rgba(103, 113, 114, 1); color: rgba(34, 34, 34, 0.7);
transition: all 0.3s; transition: all 0.3s;
white-space: nowrap;
border-radius: 80rpx 80rpx 80rpx 80rpx;
border: 2rpx solid #f4f3f3;
.dot { .dot {
padding: 0 4rpx; padding: 0 4rpx;
position: absolute; position: absolute;
@ -65,9 +72,10 @@ page {
background: rgba(215, 108, 108, 1); background: rgba(215, 108, 108, 1);
} }
&.active { &.active {
font-size: 32rpx; color: rgba(22, 121, 203, 1);
color: rgba(98, 190, 208, 1);
font-weight: bold; font-weight: bold;
background-color: rgba(232, 244, 255, 1);
border-color: rgba(232, 244, 255, 1);
&::after { &::after {
position: absolute; position: absolute;
bottom: -30rpx; bottom: -30rpx;
@ -77,7 +85,6 @@ page {
width: 52rpx; width: 52rpx;
height: 8rpx; height: 8rpx;
border-radius: 24rpx 24rpx 0 0; border-radius: 24rpx 24rpx 0 0;
background: #62bed0;
} }
} }
} }
@ -134,15 +141,18 @@ page {
.list-item { .list-item {
margin-top: 24rpx; margin-top: 24rpx;
padding: 36rpx 34rpx; padding: 28rpx;
display: flex;
background: #ffffff; background: #ffffff;
border: 1px solid #f4f3f3;
border-radius: 24rpx 24rpx 24rpx 24rpx; border-radius: 24rpx 24rpx 24rpx 24rpx;
display: flex; border: 2rpx solid #f4f3f3;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.08);
.avatar { .avatar {
flex-shrink: 0; flex-shrink: 0;
.avatar-img { .avatar-img {
width: 100rpx; width: 111rpx;
height: 100rpx; height: 111rpx;
border-radius: 50%; border-radius: 50%;
} }
} }
@ -154,59 +164,13 @@ page {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.name { .name {
font-size: 32rpx; font-size: 40rpx;
color: #283031; color: rgba(40, 48, 49, 1);
font-weight: bold; font-weight: bold;
} }
.send { .disease {
padding: 8rpx 22rpx; font-size: 32rpx;
font-size: 24rpx; color: rgba(22, 121, 203, 1);
color: #67baca;
line-height: 1;
border-radius: 32rpx 32rpx 32rpx 32rpx;
border: 2rpx solid rgba(103, 186, 202, 0.26);
display: flex;
align-items: center;
gap: 8rpx;
.icon {
width: 28rpx;
height: 28rpx;
}
}
}
.tags {
margin-top: 16rpx;
display: flex;
flex-wrap: wrap;
gap: 12rpx;
.tag {
padding: 4rpx 16rpx;
font-size: 22rpx;
color: #e59a29;
line-height: 28rpx;
background: #fff5df;
border-radius: 8rpx 8rpx 8rpx 8rpx;
}
}
.content {
margin-top: 24rpx;
display: flex;
align-items: center;
flex-wrap: wrap;
font-size: 28rpx;
color: #283031;
gap: 14rpx;
.line {
flex-shrink: 0;
width: 2rpx;
height: 32rpx;
background-color: #eaeced;
}
.blod {
font-weight: bold;
}
&.disable {
color: #9aa1a2;
} }
} }
.replay-date { .replay-date {
@ -214,156 +178,14 @@ page {
font-size: 28rpx; font-size: 28rpx;
color: #9aa1a2; color: #9aa1a2;
} }
} .remark {
} margin-top: 34rpx;
} padding-top: 24rpx;
} border-top: 1px solid rgba(244, 243, 243, 1);
.popup {
padding: 92rpx 30rpx calc(30rpx + env(safe-area-inset-bottom));
.form {
max-height: 60vh;
overflow-y: auto;
overflow-x: hidden;
.form-item {
margin-bottom: 48rpx;
.f-title {
font-size: 36rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
}
.select {
margin-top: 24rpx;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16rpx;
.s-item {
padding: 18rpx 0;
text-align: center;
border-radius: 12rpx;
font-size: 28rpx;
color: rgba(103, 113, 114, 1);
background: #f2f4f5;
&.active {
color: #fff;
background-color: rgba(103, 186, 202, 1);
}
}
}
.custom {
margin-top: 16rpx;
display: flex;
align-items: center;
gap: 12rpx;
.c-item {
padding: 18rpx 24rpx;
display: flex;
align-items: center;
font-size: 32rpx; font-size: 32rpx;
color: rgba(103, 113, 114, 1); color: rgba(33, 33, 32, 1);
border-radius: 12rpx;
background-color: rgba(242, 244, 245, 1);
.input {
padding: 0;
margin: 0;
width: 3em;
font-size: 32rpx;
line-height: 1;
}
.input-place {
color: rgba(194, 201, 202, 1);
line-height: 1;
}
} }
} }
.date {
margin-top: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
.picker {
flex: 1;
.d-item {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
padding: 18rpx 32rpx;
background: #f7f8f9;
border-radius: 12rpx 12rpx 12rpx 12rpx;
.icon {
width: 32rpx;
height: 32rpx;
}
.content {
font-size: 32rpx;
color: #677172;
&:empty::after {
content: attr(data-place);
color: rgba(194, 201, 202, 1);
}
}
}
}
.sion {
flex-shrink: 0;
margin: 0 14rpx;
font-size: 32rpx;
color: #677172;
}
}
}
}
.p-footer {
margin-top: 32rpx;
display: flex;
justify-content: space-between;
align-items: center;
gap: 26rpx;
.reset {
flex: 1;
height: 84rpx;
font-size: 36rpx;
color: rgba(103, 186, 202, 1);
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
background: #ffffff;
border-radius: 98rpx 98rpx 98rpx 98rpx;
border: 2rpx solid #67baca;
}
.submit {
flex: 1;
height: 84rpx;
font-size: 36rpx;
color: #ffffff;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
background: rgba(103, 186, 202, 1);
border-radius: 98rpx 98rpx 98rpx 98rpx;
} }
} }
} }

6
src/doctor/pages/d_patient/index.ts

@ -110,9 +110,9 @@ Page({
search: this.data.Search, search: this.data.Search,
} }
const url = { const url = {
0: '?r=igg4/doctor/patient/get-need-follow-list', 0: '?r=zd/doctor/patient/get-need-follow-list',
1: '?r=igg4/doctor/patient/get-no-standard-list', 1: '?r=zd/doctor/patient/get-no-standard-list',
2: '?r=igg4/doctor/patient/get-my-list', 2: '?r=zd/doctor/patient/get-my-list',
}[active] as string }[active] as string
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',

199
src/doctor/pages/d_patient/index.wxml

@ -1,12 +1,8 @@
<wxs src="./index.wxs" module="tools" /> <wxs src="./index.wxs" module="tools" />
<view class="page"> <view class="page">
<view <view class="page-header">
class="page-header"
style="background:#fff url({{imageUrl}}/doctor/d_patient-bg.png?t={{Timestamp}}) no-repeat top center/100% 456rpx"
>
<navBar title="患者列表" back home="{{false}}" bind:back="handleBack"></navBar>
<view class="search"> <view class="search">
<image class="icon" src="{{imageUrl}}/doctor/icon-search.png?t={{Timestamp}}"></image> <image class="icon" src="/images/icon43.png"></image>
<input <input
type="text" type="text"
model:value="{{Search}}" model:value="{{Search}}"
@ -19,30 +15,11 @@
/> />
</view> </view>
<view class="navbar"> <view class="navbar">
<view class="nav {{active===0 && 'active'}}" bind:tap="handleNav" data-active="{{0}}"> <view class="nav {{active===0 && 'active'}}" bind:tap="handleNav" data-active="{{0}}">疾病基础</view>
需随访患者 <view class="nav {{active===1 && 'active'}}" bind:tap="handleNav" data-active="{{1}}">复发/活动期</view>
<view class="dot" wx:if="{{unReadCount>0}}">{{unReadCount}}</view> <view class="nav {{active===2 && 'active'}}" bind:tap="handleNav" data-active="{{2}}">伊奈利珠单抗用药患者</view>
</view>
<view class="nav {{active===1 && 'active'}}" bind:tap="handleNav" data-active="{{1}}">未达标患者</view>
<view class="nav {{active===2 && 'active'}}" bind:tap="handleNav" data-active="{{2}}">
我的患者
<view class="dot" wx:if="{{unReadCount>0}}">{{unReadCount}}</view>
</view>
</view> </view>
</view> </view>
<view class="total-line">
<view class="wrap">
<view class="user">
患者数:
<text class="num">{{total}}</text>
</view>
</view>
<view class="btn" bind:tap="handleSendGroup">群发管理</view>
<!-- <view class="btn"> -->
<!-- 导出 -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-export.png?t={{Timestamp}}"></image> -->
<!-- </view> -->
</view>
<view class="list"> <view class="list">
<view class="list-item" wx:for="{{list}}" wx:key="index" bind:tap="handleDetail" data-index="{{index}}"> <view class="list-item" wx:for="{{list}}" wx:key="index" bind:tap="handleDetail" data-index="{{index}}">
<view class="avatar"> <view class="avatar">
@ -51,172 +28,12 @@
<view class="container"> <view class="container">
<view class="title"> <view class="title">
<view class="name">{{item.Name}}</view> <view class="name">{{item.Name}}</view>
<view class="send" wx:if="{{item.IsCurrent==1}}" catch:tap="handleSend" data-index="{{index}}"> <view class="disease">病程{{'<'}}1年</view>
<image class="icon" src="{{imageUrl}}5/icon-message.png?t={{Timestamp}}"></image>
消息
</view>
</view>
<view class="tags">
<view class="tag" wx:if="{{item.LastAdlTime}}">最近一次ADL:{{item.LastAdlTimeName}}</view>
<view class="tag" wx:if="{{item.LastAdlNeedFollowStatus==1}}">需随访</view>
</view>
<view class="content" wx:if="{{item.AdlScore || item.SteroidDailyDose}}">
<view wx:if="{{item.LastAdlTime}}">
ADL评分:
<text class="blod">{{item.AdlScore}}</text>
</view>
<view class="line" wx:if="{{item.AdlScore || item.SteroidDailyDose}}"></view>
<view wx:if="{{item.SteroidDailyDose}}">
激素用量:
<text class="blod">{{item.SteroidDailyDose}}</text>
mg/d
</view>
</view> </view>
<view class="content disable" wx:else>无ADL记录</view> <view class="replay-date">邀约时间:2025-12-30</view>
<view class="replay-date" wx:if="{{item.LastReVisitDate}}">复诊时间:{{item.LastReVisitDate}}</view> <view class="remark">备注:111111111111111111111</view>
</view> </view>
</view> </view>
<!-- <view class="list-item" wx:for="{{list}}" wx:key="index" bind:tap="handleDetail" data-index="{{index}}"> -->
<!-- <view class="user"> -->
<!-- <view class="avatar"> -->
<!-- <image class="avatar-img" src="{{item.UserImg}}"></image> -->
<!-- </view> -->
<!-- <view class="wrap"> -->
<!-- <view class="w-header"> -->
<!-- <view class="name">{{item.Name}}</view> -->
<!-- <image -->
<!-- wx:if="{{item.Gender==='1'}}" -->
<!-- class="icon" -->
<!-- src="{{imageUrl}}/doctor/icon-man.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <image -->
<!-- wx:if="{{item.Gender==='2'}}" -->
<!-- class="icon" -->
<!-- src="{{imageUrl}}/doctor/icon-woman.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <view class="tel">{{item.Telephone}}</view> -->
<!-- <view class="send" catch:tap="handleSend" data-index="{{index}}">发消息</view> -->
<!-- </view> -->
<!-- <view class="w-tags"> -->
<!-- <image -->
<!-- wx:if="{{item.UserType===4}}" -->
<!-- class="label" -->
<!-- src="{{imageUrl}}/doctor/drug-label.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <view class="tag" wx:for="{{item.Tags}}" wx:for-item="tag" wx:for-index="tIndex" wx:key="tIndex"> -->
<!-- {{tag}} -->
<!-- </view> -->
<!-- </view> -->
<!-- </view> -->
<!-- </view> -->
<!-- <view class="adl" wx:if="{{item.LastAdlTime}}"> -->
<!-- <view class="a-header"> -->
<!-- <view class="content">最近一次测评:{{item.LastAdlTimeName}}</view> -->
<!-- <view class="box"></view> -->
<!-- </view> -->
<!-- <view class="a-content"> -->
<!-- <view class="row" wx:if="{{item.AdlScore}}"> -->
<!-- <view class="label">最新ADL评分</view> -->
<!-- <view class="num">{{item.AdlScore}}</view> -->
<!-- <view class="tag" wx:if="{{item.AdlScore<=1}}"> -->
<!-- <view class="t-label"> -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-success.png?t={{Timestamp}}"></image> -->
<!-- 已达标 -->
<!-- </view> -->
<!-- <view class="t-content" wx:if="{{item.TotalScoreChange*1!=0}}"> -->
<!-- <image -->
<!-- wx:if="{{item.TotalScoreChange<=0}}" -->
<!-- class="icon" -->
<!-- src="{{imageUrl}}/doctor/icon-down-success.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-success.png?t={{Timestamp}}"></image> -->
<!-- {{item.TotalScoreChange}} -->
<!-- </view> -->
<!-- </view> -->
<!-- <view class="tag tag-warn" wx:elif="{{item.AdlScore<=5}}"> -->
<!-- <view class="t-label"> -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-warn.png?t={{Timestamp}}"></image> -->
<!-- 接近达标 -->
<!-- </view> -->
<!-- <view class="t-content" wx:if="{{item.TotalScoreChange*1!=0}}"> -->
<!-- <image -->
<!-- wx:if="{{item.TotalScoreChange<=0}}" -->
<!-- class="icon" -->
<!-- src="{{imageUrl}}/doctor/icon-down-warn.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-warn.png?t={{Timestamp}}"></image> -->
<!-- {{item.TotalScoreChange}} -->
<!-- </view> -->
<!-- </view> -->
<!-- <view class="tag tag-error" wx:else> -->
<!-- <view class="t-label"> -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-error.png?t={{Timestamp}}"></image> -->
<!-- 待达标 -->
<!-- </view> -->
<!-- <view class="t-content" wx:if="{{item.TotalScoreChange*1!=0}}"> -->
<!-- <image -->
<!-- wx:if="{{item.TotalScoreChange<=0}}" -->
<!-- class="icon" -->
<!-- src="{{imageUrl}}/doctor/icon-down-error.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-error.png?t={{Timestamp}}"></image> -->
<!-- {{item.TotalScoreChange}} -->
<!-- </view> -->
<!-- </view> -->
<!-- </view> -->
<!-- <view class="row" wx:if="{{item.SteroidDailyDose}}"> -->
<!-- <view class="label">最新激素用量</view> -->
<!-- <view class="num">{{item.SteroidDailyDose}}mg</view> -->
<!-- <view class="tag" wx:if="{{item.SteroidDailyDose<=5}}"> -->
<!-- <view class="t-label"> -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-success.png?t={{Timestamp}}"></image> -->
<!-- 已达标 -->
<!-- </view> -->
<!-- <view class="t-content" wx:if="{{item.SteroidDailyDoseChange*1!=0}}"> -->
<!-- <image -->
<!-- wx:if="{{item.SteroidDailyDoseChange<=0}}" -->
<!-- class="icon" -->
<!-- src="{{imageUrl}}/doctor/icon-down-success.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-success.png?t={{Timestamp}}"></image> -->
<!-- {{item.SteroidDailyDoseChange}}mg -->
<!-- </view> -->
<!-- </view> -->
<!-- <view class="tag tag-error" wx:else> -->
<!-- <view class="t-label"> -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-error.png?t={{Timestamp}}"></image> -->
<!-- 待达标 -->
<!-- </view> -->
<!-- <view class="t-content" wx:if="{{item.SteroidDailyDoseChange*1!=0}}"> -->
<!-- <image -->
<!-- wx:if="{{item.SteroidDailyDoseChange<=0}}" -->
<!-- class="icon" -->
<!-- src="{{imageUrl}}/doctor/icon-down-error.png?t={{Timestamp}}" -->
<!-- ></image> -->
<!-- <image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-error.png?t={{Timestamp}}"></image> -->
<!-- {{item.SteroidDailyDoseChange}}mg -->
<!-- </view> -->
<!-- </view> -->
<!-- </view> -->
<!-- </view> -->
<!-- </view> -->
<!-- <view class="adl-none" wx:else> -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-adl-none.png?t={{Timestamp}}"></image> -->
<!-- 还未做ADL测评 -->
<!-- </view> -->
<!-- <view class="drug" wx:if="{{item.LastUseDrugsTime}}"> -->
<!-- <view class="label">最近用药</view> -->
<!-- <view class="content"> -->
<!-- {{item.LastUseDrugsTime}} -->
<!-- <block wx:if="{{item.LastUseDrugsTimeName}}">({{item.LastUseDrugsTimeName}})</block> -->
<!-- </view> -->
<!-- </view> -->
<!-- <view class="drug-none" wx:else> -->
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-drug-none.png?t={{Timestamp}}"></image> -->
<!-- 暂无用药数据 -->
<!-- </view> -->
<!-- </view> -->
<pagination pagination="{{pagination}}"></pagination> <pagination pagination="{{pagination}}"></pagination>
</view> </view>
</view> </view>

3
src/doctor/pages/d_patientDetail/index.json

@ -1,7 +1,6 @@
{ {
"navigationStyle": "custom", "navigationBarTitleText": "患者档案",
"usingComponents": { "usingComponents": {
"navBar": "/components/navBar/navBar",
"van-icon": "@vant/weapp/icon/index", "van-icon": "@vant/weapp/icon/index",
"van-popup": "@vant/weapp/popup/index", "van-popup": "@vant/weapp/popup/index",
"ec-canvas": "/components/ec-canvas/ec-canvas", "ec-canvas": "/components/ec-canvas/ec-canvas",

834
src/doctor/pages/d_patientDetail/index.scss

@ -1,769 +1,109 @@
page { page {
background-color: rgba(242, 244, 245, 1);
padding-bottom: calc(140rpx + env(safe-area-inset-bottom)); padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
} }
.page { .page {
width: 100vw; width: 100vw;
overflow-x: hidden; overflow-x: hidden;
min-height: 100vh; padding-bottom: 200rpx;
.banner { .banner {
margin: 40rpx 30rpx 32rpx; margin: 40rpx 40rpx 0;
padding: 36rpx 20rpx; padding: 48rpx 32rpx;
display: flex;
background: #ffffff; background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx; border-radius: 12rpx 12rpx 12rpx 12rpx;
position: relative; border: 1px solid #f4f3f3;
.watermark { .avatar {
position: absolute; flex-shrink: 0;
top: 80rpx; .avatar-img {
z-index: 2; width: 112rpx;
font-size: 36rpx; height: 112rpx;
line-height: 58rpx; border-radius: 50%;
color: rgba(0, 0, 0, 0.05);
transform: rotate(-12deg);
text-align: center;
.p {
white-space: wrap;
} }
} }
.banner-container { .wrap {
.user { margin-left: 24rpx;
display: flex; .name {
.avatar { font-size: 44rpx;
.avatar-img { color: rgba(33, 33, 32, 1);
width: 100rpx; .tel-icon {
height: 100rpx; margin-left: 10rpx;
border-radius: 50%; width: 32rpx;
} height: 32rpx;
}
.wrap {
padding-left: 20rpx;
.w-header {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8rpx;
.name {
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
}
.icon {
width: 32rpx;
height: 32rpx;
}
.tel {
position: relative;
z-index: 3;
font-size: 32rpx;
color: rgba(154, 161, 162, 1);
display: flex;
align-items: center;
.tel-icon {
margin-left: 10rpx;
width: 32rpx;
height: 32rpx;
}
}
.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;
}
}
.w-tags {
margin-top: 28rpx;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12rpx;
.label {
width: 164rpx;
height: 40rpx;
}
.tag {
padding: 6rpx 16rpx;
font-size: 24rpx;
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;
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04);
border-radius: 24rpx 24rpx 24rpx 24rpx;
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 {
position: relative;
z-index: 1;
margin-top: -40rpx;
padding: 32rpx 30rpx;
background-color: #fff;
border-radius: 24rpx;
.row {
display: flex;
align-items: center;
gap: 20rpx;
&:first-of-type {
margin-bottom: 24rpx;
}
.label {
flex-shrink: 0;
font-size: 28rpx;
color: rgba(154, 161, 162, 1);
width: 6em;
}
.num {
min-width: 3em;
font-size: 28rpx;
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;
display: flex;
align-items: center;
font-size: 28rpx;
color: rgba(103, 186, 202, 1);
display: flex;
align-items: center;
gap: 4rpx;
flex-shrink: 0;
.icon {
width: 24rpx;
height: 28rpx;
}
}
&.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 {
color: rgba(215, 108, 108, 1);
}
}
}
}
.d-row {
margin-top: 22rpx;
display: flex;
gap: 20rpx;
.label {
flex-shrink: 0;
width: 6em;
font-size: 28rpx;
color: rgba(154, 161, 162, 1);
}
.content {
min-width: 3em;
font-size: 28rpx;
color: rgba(40, 48, 49, 1);
}
}
} }
} }
.info-card { .content {
position: relative;
margin-top: 16rpx; margin-top: 16rpx;
padding: 32rpx 30rpx; font-size: 32rpx;
border-radius: 24rpx; color: rgba(33, 33, 32, 1);
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04); line-height: 52rpx;
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;
.label {
font-size: 28rpx;
color: #9aa1a2;
white-space: nowrap;
}
.content {
font-size: 28rpx;
color: #283031;
white-space: nowrap;
}
}
.edit {
position: absolute;
bottom: 0;
right: 0;
padding: 6rpx 18rpx;
display: flex;
align-items: center;
font-size: 28rpx;
color: #fff;
border-radius: 32rpx 0 24rpx 0;
background-color: #67baca;
.icon {
width: 32rpx;
height: 32rpx;
}
}
}
.b-footer {
margin: 32rpx auto 0;
display: flex;
align-items: center;
justify-content: center;
.send {
margin: 0 42rpx;
width: 200rpx;
height: 60rpx;
font-size: 32rpx;
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;
}
.remark {
width: 200rpx;
height: 60rpx;
font-size: 32rpx;
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;
}
} }
} }
} }
.container {
.chart-container { margin: 32rpx 40rpx;
margin: 30rpx; padding: 0 32rpx;
padding: 30rpx; background: #ffffff;
border-radius: 24rpx; box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.08);
background-color: #fff; border-radius: 12rpx 12rpx 12rpx 12rpx;
position: relative; border: 2rpx solid #f4f3f3;
.watermark { .row {
position: absolute; display: flex;
top: 80rpx; justify-content: space-between;
z-index: 2; padding: 30rpx 0;
font-size: 36rpx; border-bottom: 1px solid rgba(244, 243, 243, 1);
line-height: 58rpx; &.row-vetical {
color: rgba(0, 0, 0, 0.05); display: block;
transform: rotate(-12deg); .content {
text-align: center; margin-top: 24rpx;
.p { text-align: left;
max-width: 90vw;
white-space: wrap;
}
}
.container {
.c-nav {
position: relative;
z-index: 3;
display: flex;
padding: 8rpx;
border-radius: 98rpx;
background-color: #f2f4f5;
.nav-item {
flex: 1;
padding: 12rpx;
font-size: 32rpx;
color: #677172;
text-align: center;
&.active {
color: #fff;
border-radius: 62rpx;
background-color: #62bed0;
}
}
}
.filter {
position: relative;
z-index: 3;
margin-top: 32rpx;
display: flex;
gap: 16rpx;
align-items: center;
border-radius: 80rpx 80rpx 80rpx 80rpx;
.type {
padding: 10rpx 32rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: rgba(103, 113, 114, 1);
background-color: rgba(242, 244, 245, 1);
border-radius: 34rpx;
.icon {
width: 24rpx;
height: 24rpx;
}
}
.range {
padding: 10rpx 32rpx;
display: flex;
align-items: center;
font-size: 28rpx;
color: rgba(103, 113, 114, 1);
border-radius: 34rpx;
background-color: rgba(242, 244, 245, 1);
.icon {
width: 24rpx;
height: 24rpx;
}
} }
} }
.card { .label {
margin: 32rpx 0 0; font-size: 36rpx;
padding: 20rpx; color: rgba(33, 33, 32, 1);
background: #ffffff; font-weight: bold;
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #f8f9f9;
.pie {
height: 376rpx;
}
.line {
border-top: 1px dashed rgba(242, 244, 245, 1);
}
.w-header {
padding-top: 32rpx;
display: flex;
justify-content: space-between;
.title {
font-size: 32rpx;
color: #484848;
}
.legend {
display: flex;
align-items: center;
gap: 25rpx;
.item {
font-size: 20rpx;
color: #4f4f4f;
display: flex;
align-items: center;
.logo {
margin-right: 8rpx;
width: 16rpx;
height: 16rpx;
border-radius: 50%;
background-color: #cf5375;
&.hormone {
background-color: #3192a1;
}
}
.icon {
margin-right: 8rpx;
width: 17rpx;
height: 24rpx;
}
}
}
}
.column {
height: 400rpx;
}
} }
.module { .content {
margin-top: 30rpx; text-align: right;
.module-header { max-width: 6em;
display: flex; font-size: 36rpx;
.date { color: rgba(33, 33, 32, 1);
flex-shrink: 0;
font-size: 24rpx;
color: #333333;
}
.tags {
margin-left: 14rpx;
flex: 1;
display: flex;
flex-wrap: nowrap;
overflow-x: scroll;
white-space: nowrap;
&::-webkit-scrollbar {
display: none;
}
.tag1 {
margin-left: 14rpx;
padding: 0 12rpx;
background: #d86687;
border-radius: 6rpx;
font-size: 24rpx;
line-height: 36rpx;
text-align: center;
color: #ffffff;
}
.tag2 {
margin-left: 14rpx;
padding: 0 12rpx;
background: #0b184f;
border-radius: 6rpx;
font-size: 24rpx;
line-height: 36rpx;
text-align: center;
color: #ffffff;
}
.tag3 {
margin-left: 14rpx;
padding: 0 12rpx;
background: #24d8c8;
border-radius: 6rpx;
font-size: 24rpx;
line-height: 36rpx;
text-align: center;
color: #ffffff;
}
}
}
.module-container {
margin-top: 24rpx;
display: flex;
.aside {
margin-right: 30rpx;
padding-left: 14rpx;
border-right: 1px dashed #dddddd;
}
.m-card {
flex: 1;
box-shadow: 0 4rpx 29rpx 0rpx rgba(207, 83, 116, 0.25);
border-radius: 24rpx;
.card-header {
padding: 20rpx 18rpx 4rpx 48rpx;
border-radius: 24rpx 24rpx 0 0;
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 8rpx 8rpx 16rpx 0rpx rgba(143, 217, 226, 0.1);
&.grade1 {
background: linear-gradient(90deg, #26dac9 7%, rgba(143, 217, 226, 0) 70%, rgba(143, 217, 226, 0) 100%);
}
&.grade2 {
background: linear-gradient(
90deg,
rgba(235, 111, 87, 1) 7%,
rgba(143, 217, 226, 0) 70%,
rgba(143, 217, 226, 0) 100%
);
}
&.grade3 {
background: linear-gradient(
90deg,
rgba(207, 83, 117, 1) 7%,
rgba(143, 217, 226, 0) 70%,
rgba(143, 217, 226, 0) 100%
);
}
.num {
display: flex;
align-items: baseline;
font-size: 96rpx;
line-height: 1;
color: #ffffff;
letter-spacing: 4rpx;
.sub {
font-size: 24rpx;
color: #fff;
}
}
.num-detail {
display: flex;
.n-item {
width: 73rpx;
&.active {
.box {
background-color: #cf5375;
}
}
.box {
width: 45rpx;
height: 45rpx;
width: 45rpx;
height: 45rpx;
font-size: 32rpx;
color: #fff;
text-align: center;
line-height: 45rpx;
background: #333333;
border-radius: 12rpx 12rpx 12rpx 12rpx;
}
.name {
font-size: 24rpx;
line-height: 48rpx;
color: rgba(51, 51, 51, 0.5);
}
}
}
.status {
font-size: 24rpx;
color: #989898;
text-align: right;
.s-num {
font-size: 32rpx;
}
.s-core {
font-size: 24rpx;
color: #989898;
// background: #484848;
border-radius: 6rpx;
}
}
}
.card-container {
padding: 8rpx 23rpx 20rpx;
border-radius: 0 0 24rpx 24rpx;
background-color: #fff;
.cc-title {
text-indent: 22rpx;
font-size: 24rpx;
color: rgba(79, 79, 79, 1);
}
.cc-content {
margin-top: 12rpx;
padding: 16rpx 20rpx;
border-radius: 24rpx;
background-color: rgba(249, 249, 249, 1);
.line {
font-size: 24rpx;
color: #666666;
line-height: 36rpx;
.dot {
color: #666666;
font-weight: bold;
}
.red {
color: #cf5375;
}
.green {
color: #25d9c8;
}
}
}
.fold {
margin-top: 16rpx;
.fold-header {
display: flex;
justify-content: flex-end;
font-size: 24rpx;
color: rgba(204, 204, 204, 1);
}
.fold-container {
padding-top: 10rpx;
height: 500rpx;
overflow: hidden;
transition: all 0.5s;
&.hide {
padding: 0;
height: 0;
}
.fold-img {
width: 100%;
}
.scurt {
width: 100%;
border: 1px solid rgba(0, 0, 0, 0.1);
box-sizing: border-box;
.s-header {
display: flex;
height: 40rpx;
margin-bottom: -1px;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
.none {
flex-shrink: 0;
width: 226rpx;
background-color: rgba(228, 228, 228, 1);
}
.bar {
flex: 1;
display: flex;
.num {
flex: 1;
text-align: center;
font-size: 24rpx;
color: #fff;
line-height: 40rpx;
}
}
}
.s-body {
display: flex;
.s-aside {
width: 28rpx;
background-color: rgba(102, 102, 102, 0.15);
flex-shrink: 0;
.sa-item {
display: flex;
text-align: center;
justify-content: center;
align-items: center;
font-size: 18rpx;
color: rgba(102, 102, 102, 1);
line-height: 1;
overflow: hidden;
&:not(:last-of-type) {
margin-bottom: -1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
}
.sa-item1 {
height: 158rpx;
}
.sa-item2 {
height: 54rpx;
}
.sa-item3 {
height: 106rpx;
}
.sa-item4 {
height: 108rpx;
}
}
.s-container {
flex: 1;
.sc-row {
display: flex;
height: 54rpx;
overflow: hidden;
.sc-title {
width: 198rpx;
font-size: 18rpx;
color: rgba(102, 102, 102, 1);
text-align: center;
line-height: 53rpx;
}
.sc-col {
margin-left: -1px;
border-left: 1px solid rgba(0, 0, 0, 0.1);
flex: 1;
text-align: center;
.icon {
margin-top: 11rpx;
width: 32rpx;
height: 32rpx;
}
}
}
.sc-row:not(:last-of-type) {
margin-bottom: -1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.sc-row:nth-of-type(2n-1) {
background-color: rgba(217, 217, 217, 0.2);
}
}
}
}
}
}
}
}
.drug-card {
margin-top: 30rpx;
flex: 1;
box-shadow: 0 4rpx 29rpx 0rpx rgba(207, 83, 116, 0.25);
border-radius: 24rpx;
.d-header {
border-radius: 24rpx 0 0 0;
padding: 20rpx 50rpx;
display: flex;
align-items: center;
justify-content: space-between;
background: linear-gradient(95deg, #26dac9 7%, rgba(143, 217, 226, 0) 100%);
.name {
font-size: 28rpx;
color: #ffffff;
}
.status {
font-size: 22rpx;
color: #5b6363;
.num {
font-size: 22rpx;
color: #cf5375;
}
}
}
.content {
padding: 20rpx 50rpx;
font-size: 22rpx;
color: #666666;
}
}
}
} }
} }
} }
.footer {
padding: 0 40rpx;
position: fixed;
bottom: calc(env(safe-area-inset-bottom) + 32rpx);
left: 0;
width: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
gap: 30rpx;
.remark {
flex: 1;
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 12rpx;
font-size: 36rpx;
color: rgba(22, 121, 203, 1);
border: 1px solid rgba(22, 121, 203, 1);
}
.send {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 36rpx;
color: rgba(255, 255, 255, 1);
height: 96rpx;
background: linear-gradient(90deg, #293b9f 0%, #1679cb 100%);
border-radius: 12rpx 12rpx 12rpx 12rpx;
}
}
} }
.popup-remark { .popup-remark {
@ -788,14 +128,14 @@ page {
} }
.submit { .submit {
margin-top: 32rpx; margin-top: 32rpx;
height: 84rpx; height: 96rpx;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
background: #67baca; background: linear-gradient( 90deg, #293B9F 0%, #1679CB 100%);
font-size: 36rpx; font-size: 36rpx;
color: #fff; color: #fff;
border-radius: 64rpx 64rpx 64rpx 64rpx; border-radius: 12rpx;
} }
} }
.popup-edit { .popup-edit {

12
src/doctor/pages/d_patientDetail/index.ts

@ -190,7 +190,7 @@ Page({
getDoctorDetail() { getDoctorDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/account/info', url: '?r=zd/doctor/account/info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -209,7 +209,7 @@ Page({
return wx return wx
.ajax({ .ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/patient/info', url: '?r=zd/doctor/patient/info',
data: { patientId: this.data.id }, data: { patientId: this.data.id },
}) })
.then((res) => { .then((res) => {
@ -270,7 +270,7 @@ Page({
getGraph() { getGraph() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/patient/adl-graph', url: '?r=zd/doctor/patient/adl-graph',
data: { data: {
patientId: this.data.id, patientId: this.data.id,
StartDate: this.data.StartDate, StartDate: this.data.StartDate,
@ -930,7 +930,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/patient/remark', url: '?r=zd/doctor/patient/remark',
data: { data: {
PatientId: this.data.id, PatientId: this.data.id,
DoctorRemark: this.data.remark, DoctorRemark: this.data.remark,
@ -966,7 +966,7 @@ Page({
const { detail } = this.data const { detail } = this.data
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/patient/update', url: '?r=zd/doctor/patient/update',
data: { data: {
PatientId: detail.PatientId, //患者Id PatientId: detail.PatientId, //患者Id
AntibodyType: detail.AntibodyType, //抗体类型 1:AChR 2:Musk 3:LRP4 4:RYR AntibodyType: detail.AntibodyType, //抗体类型 1:AChR 2:Musk 3:LRP4 4:RYR
@ -1010,7 +1010,7 @@ Page({
const { detail, EndDate, StartDate, type } = this.data const { detail, EndDate, StartDate, type } = this.data
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/patient/adl-list', url: '?r=zd/doctor/patient/adl-list',
data: { data: {
DateType: type, DateType: type,
PatientId: detail.PatientId, PatientId: detail.PatientId,

476
src/doctor/pages/d_patientDetail/index.wxml

@ -1,452 +1,46 @@
<view <view class="page">
class="page"
style="background: url({{imageUrl}}/doctor/d_patient-detail-bg.png?t={{Timestamp}}) no-repeat top center/100% 640rpx"
>
<navBar background="{{background}}" title="患者档案" back bind:back="handleBack"></navBar>
<view class="banner"> <view class="banner">
<view class="watermark"> <view class="avatar">
<view class="p">本页面内容涉及患者个人信息</view> <image class="avatar-img" src="{{detail.UserImg}}"></image>
<view class="p">仅用于{{hospital.Name}}{{doctor.Name}}医生进行患者随访管理</view>
<view class="p">不可用于其他用途</view>
<view class="p">【gMG给力加油站】</view>
</view> </view>
<view class="banner-container"> <view class="wrap">
<view class="user"> <view class="name" bind:tap="handleToggleTel">
<view class="avatar"> {{showTel ? detail.Name : detail.hideName}}
<image class="avatar-img" src="{{detail.UserImg}}"></image> <image wx:if="{{showTel}}" class="tel-icon" src="{{imageUrl}}/5/eye2.png?t={{Timestamp}}"></image>
</view> <image wx:else class="tel-icon" src="{{imageUrl}}/5/eye1.png?t={{Timestamp}}"></image>
<view class="wrap">
<view class="w-header">
<view class="name">{{showTel ? detail.Name : detail.hideName}}</view>
<image
wx:if="{{detail.Gender==='1'}}"
class="icon"
src="{{imageUrl}}/doctor/icon-man.png?t={{Timestamp}}"
></image>
<image
wx:if="{{detail.Gender==='2'}}"
class="icon"
src="{{imageUrl}}/doctor/icon-woman.png?t={{Timestamp}}"
></image>
<view class="tel" bind:tap="handleToggleTel">
{{showTel ? detail.Telephone : '***********'}}
<image wx:if="{{showTel}}" class="tel-icon" src="{{imageUrl}}/5/eye2.png?t={{Timestamp}}"></image>
<image wx:else class="tel-icon" src="{{imageUrl}}/5/eye1.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="w-tags">
<image
wx:if="{{detail.UserType===4}}"
class="label"
src="{{imageUrl}}/doctor/drug-label.png?t={{Timestamp}}"
></image>
<view class="tag" wx:for="{{detail.Tags}}" wx:for-item="tag" wx:for-index="tIndex" wx:key="tIndex">
{{tag}}
</view>
</view>
</view>
</view>
<view class="adl" wx:if="{{detail.LastAdlTime}}">
<view class="a-header">
<view class="content">
<view class="sub-content1">最近一次测评:{{detail.LastAdlTimeName}}</view>
<view class="sub-content2" wx:if="{{detail.LastAdlNeedFollowStatus==1}}">需随访</view>
</view>
<view class="box"></view>
</view>
<view class="a-content">
<view class="row" wx:if="{{detail.AdlScore}}">
<view class="label">最新ADL评分</view>
<view class="num">{{detail.AdlScore}}</view>
<view class="tag" wx:if="{{detail.AdlScore<=1}}">
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-success.png?t={{Timestamp}}"></image>
已达标
</view>
<view class="t-content" wx:if="{{detail.TotalScoreChange*1!=0}}">
<image
wx:if="{{detail.TotalScoreChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-success.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-success.png?t={{Timestamp}}"></image>
{{detail.TotalScoreChange}}
</view>
</view>
<view class="tag tag-warn" wx:elif="{{detail.AdlScore<=5}}">
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-warn.png?t={{Timestamp}}"></image>
接近达标
</view>
<view class="t-content" wx:if="{{detail.TotalScoreChange*1!=0}}">
<image
wx:if="{{detail.TotalScoreChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-warn.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-warn.png?t={{Timestamp}}"></image>
{{detail.TotalScoreChange}}
</view>
</view>
<view class="tag tag-error" wx:else>
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-error.png?t={{Timestamp}}"></image>
待达标
</view>
<view class="t-content" wx:if="{{detail.TotalScoreChange*1!=0}}">
<image
wx:if="{{detail.TotalScoreChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-error.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-error.png?t={{Timestamp}}"></image>
{{detail.TotalScoreChange}}
</view>
</view>
</view>
<view class="row" wx:if="{{detail.SteroidDailyDose}}">
<view class="label">最新激素用量</view>
<view class="num">{{detail.SteroidDailyDose}}mg</view>
<view class="tag" wx:if="{{detail.SteroidDailyDose<=5}}">
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-success.png?t={{Timestamp}}"></image>
已达标
</view>
<view class="t-content" wx:if="{{detail.SteroidDailyDoseChange*1!=0}}">
<image
wx:if="{{detail.SteroidDailyDoseChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-success.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-success.png?t={{Timestamp}}"></image>
{{detail.SteroidDailyDoseChange}}mg
</view>
</view>
<view class="tag tag-error" wx:else>
<view class="t-label">
<image class="icon" src="{{imageUrl}}/doctor/icon-error.png?t={{Timestamp}}"></image>
待达标
</view>
<view class="t-content" wx:if="{{detail.SteroidDailyDoseChange*1!=0}}">
<image
wx:if="{{detail.SteroidDailyDoseChange<=0}}"
class="icon"
src="{{imageUrl}}/doctor/icon-down-error.png?t={{Timestamp}}"
></image>
<image wx:else class="icon" src="{{imageUrl}}/doctor/icon-up-error.png?t={{Timestamp}}"></image>
{{detail.SteroidDailyDoseChange}}mg
</view>
</view>
</view>
<view class="d-row" wx:if="{{detail.LastUseDrugsTime}}">
<view class="label">最近用药</view>
<view class="content">
{{detail.LastUseDrugsTime}}
<block wx:if="{{detail.LastUseDrugsTimeName}}">({{detail.LastUseDrugsTimeName}})</block>
</view>
</view>
<view class="d-row" wx:if="{{detail.DoctorRemark}}">
<view class="label">备注</view>
<view class="content">{{detail.DoctorRemark}}</view>
</view>
</view>
</view>
<view class="info-card">
<view class="ic-item">
<view class="label">抗体类型:</view>
<view class="content">{{antibodyTypeRangeList[detail.AntibodyType-1].value}}</view>
</view>
<view class="ic-item">
<view class="label">既往发生危象:</view>
<view class="content">{{previousConvulsionRangeList[detail.PreviousConvulsion-1].value}}</view>
</view>
<view class="ic-item">
<view class="label">胸腺异常:</view>
<view class="content">{{thyroidAbnormalRangeList[detail.ThyroidAbnormal-1].value}}</view>
</view>
<view class="ic-item">
<view class="label">医保类型:</view>
<view class="content">{{medicalInsuranceTypeRangeList[detail.MedicalInsuranceType-1].value}}</view>
</view>
<view class="ic-item">
<view class="label">免疫抑制剂:</view>
<view class="content">
{{traditionalImmunosuppressantRangeList[detail.TraditionalImmunosuppressant-1].value}}
</view>
</view>
<view class="edit" bind:tap="handleEditUser" wx:if="{{detail.IsCurrent==1}}">
<image class="icon" src="{{imageUrl}}/3/icon-edit-white.png?t={{Timestamp}}"></image>
编辑
</view>
</view> </view>
<view class="b-footer"> <view class="content">
<view class="send" bind:tap="handleSend" wx:if="{{detail.IsCurrent==1}}">发消息</view> <view>18岁以下 | {{showTel ? detail.Telephone : '***********'}}</view>
<view class="remark" bind:tap="handleRemark">备注</view> <view>邀约时间:2025-12-09 15:05:58</view>
</view> </view>
</view> </view>
</view> </view>
<view class="chart-container"> <view class="container">
<view class="watermark"> <view class="row">
<view class="p">本页面内容涉及患者个人信息</view> <view class="label">IgG4相关性疾病病程</view>
<view class="p">仅用于{{hospital.Name}}{{doctor.Name}}医生进行患者随访管理</view> <view class="content">4年</view>
<view class="p">不可用于其他用途</view>
<view class="p">【gMG给力加油站】</view>
</view> </view>
<view class="container"> <view class="row">
<view class="c-nav"> <view class="label">疾病阶段</view>
<view class="nav-item {{nav ==='0' && 'active'}}" data-index="0" bind:tap="handleNav">双达标测评报告</view> <view class="content">稳定期</view>
<view class="nav-item {{nav ==='1' && 'active'}}" data-index="1" bind:tap="handleNav">双达标笔记</view> </view>
</view> <view class="row">
<view class="filter"> <view class="label">正在使用的药物</view>
<picker class="type" mode="selector" range="{{typeRange}}" range-key="value" bind:change="handleTypeChange"> <view class="content">糖皮质激素 免疫抑制剂</view>
{{typeName}} </view>
<image class="icon" src="{{imageUrl}}/doctor/triangle-down.png?t={{Timestamp}}"></image> <view class="row row-vetical">
</picker> <view class="label">正在使用的药物</view>
<view class="range"> <view class="content">糖皮质激素 免疫抑制剂</view>
<picker
mode="date"
end="{{EndDate}}"
fields="{{fields[type]}}"
mode="date"
model:value="{{StartDate}}"
bindchange="handleChange"
>
{{StartDate}}
</picker>
~
<picker
mode="date"
start="{{StartDate}}"
fields="{{fields[type]}}"
mode="date"
model:value="{{EndDate}}"
bindchange="handleChange"
>
{{EndDate}}
</picker>
<image class="icon" src="{{imageUrl}}/doctor/triangle-down.png?t={{Timestamp}}"></image>
</view>
</view>
<view hidden="{{nav!=='0'}}">
<view class="card">
<view class="w-header">
<view class="title">ADL评分记录曲线</view>
<view class="legend">
<view class="item">
<view class="logo"></view>
ADL分数
</view>
<view class="item">
<image class="icon" src="{{imageUrl}}double-standard/adl-cure.png?t={{Timestamp}}"></image>
用药时间
</view>
</view>
</view>
<view class="column">
<ec-canvas id="chart3" type="2d" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
<view class="w-header">
<view class="title">激素日用量记录曲线</view>
<view class="legend">
<view class="item">
<view class="logo hormone"></view>
激素用量
</view>
</view>
</view>
<view class="column">
<ec-canvas id="chart4" type="2d" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
</view>
<view class="card">
<view class="pie">
<ec-canvas id="chart1" type="2d" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
<view class="line"></view>
<view class="pie">
<ec-canvas id="chart2" type="2d" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
</view>
</view>
<view hidden="{{nav !== '1'}}">
<view class="module" wx:for="{{adlList}}" wx:key="index">
<view class="module-header">
<view class="date">{{item.CreateTime || item.InjectionDate}}</view>
<view class="tags">
<view class="tag3" wx:if="{{item.IsInsuranceProject==1}}">商保项目记录</view>
</view>
</view>
<view class="module-container">
<view class="aside"></view>
<view style="flex: 1">
<view
class="m-card"
bind:tap="handleAdlDetail"
data-id="{{item.Id}}"
data-isi="{{item.IsInsuranceProject}}"
data-index="{{index}}"
>
<view class="card-header grade{{item.grade}}">
<view class="num">
{{item.TotalScore}}
<view class="sub">分</view>
</view>
<view class="num-detail">
<view class="n-item {{item.MedullaTypeScore >=7 && 'active'}}">
<view class="box">{{item.MedullaTypeScore}}</view>
<view class="name">延髓</view>
</view>
<view class="n-item {{item.BreathTypeScore>=3 && 'active'}}">
<view class="box">{{item.BreathTypeScore}}</view>
<view class="name">呼吸</view>
</view>
<view class="n-item {{item.LimbsTypeScore>=5 && 'active'}}">
<view class="box">{{item.LimbsTypeScore}}</view>
<view class="name">四肢</view>
</view>
<view class="n-item {{item.EyeTypeScore >=5 && 'active'}}">
<view class="box">{{item.EyeTypeScore}}</view>
<view class="name">眼睛</view>
</view>
</view>
</view>
<view class="card-container">
<view class="cc-title">注意事项</view>
<view class="cc-content">
<view class="line" wx:if="{{item.TotalScore < 5}}">
1 总分
<text decode="true ">&lt;</text>
<text class="red">5分</text>
,日常请注意观察
</view>
<view class="line" wx:elif="{{item.TotalScore >= 5}}">
1 总分
<text decode="true ">&gt;=</text>
<text class="red">5分</text>
,您的症状控制欠佳,建议必要时就医
</view>
<block wx:if="{{item.LastTotalScore !== null}}">
<view class="line" wx:if="{{item.TotalScore - item.LastTotalScore < 0 }}">
2 较上次得分变化
<text class="green">{{item.TotalScore - item.LastTotalScore }},有进步,加油!</text>
</view>
<view class="line" wx:elif="{{item.TotalScore - item.LastTotalScore == 0 }}">
2 与上次得分一致,请继续保持
</view>
<view class="line" wx:elif="{{item.TotalScore - item.LastTotalScore == 1 }}">
2 较上次得分变化
<text class="red">+{{item.TotalScore - item.LastTotalScore }},请继续关注!</text>
</view>
<view class="line" wx:elif="{{item.TotalScore - item.LastTotalScore >= 0 }}">
2 较上次得分变化
<text class="red">+{{item.TotalScore - item.LastTotalScore }},需要重点关注!</text>
</view>
</block>
<view class="line" wx:if="{{item.EyeTypeScore / item.TotalScore < 0.5}}">
{{item.LastTotalScore === null ? 2 : 3}} 您的眼肌类占比
<text decode="true ">&lt;</text>
50%,以全身症状为主,应注意休息警惕病情加重
</view>
<view class="line" wx:elif="{{item.EyeTypeScore / item.TotalScore > 0.5}}">
{{item.LastTotalScore === null ? 2 : 3}} 您的眼肌类占比
<text decode="true ">&gt;</text>
50%,危象风险不高,请继续关注
</view>
<view class="line" wx:elif="{{item.EyeTypeScore / item.TotalScore == 0.5}}">
{{item.LastTotalScore === null ? 2 : 3}} 您的眼肌类占比=50%,危象风险不高,请继续关注
</view>
</view>
<view class="fold" wx:if="{{item.ResultsImgUrl}}">
<view class="fold-header" catch:tap="handleFold" data-index="{{index}}">
{{item.fold ? '展开':'收起'}}详细评测报告
<van-icon name="arrow-{{!item.fold ? 'up' : 'down'}}" />
</view>
<view class="fold-container {{item.fold && 'hide'}}">
<!-- <image class="fold-img" mode="widthFix" src="{{item.ResultsImgUrl}}" show-menu-by-longpress></image> -->
<view class="scurt">
<view class="s-header">
<view class="none"></view>
<view
class="bar"
style="background: url({{imageUrl}}/1/adl-scurt.png?t={{Timestamp}}) no-repeat center / 100% 100% ;"
>
<view class="num">0分</view>
<view class="num">1分</view>
<view class="num">2分</view>
<view class="num">3分</view>
</view>
</view>
<view class="s-body">
<view class="s-aside">
<view class="sa-item sa-item1">延髓</view>
<view class="sa-item sa-item2">呼吸</view>
<view class="sa-item sa-item3">四肢</view>
<view class="sa-item sa-item4">眼肌</view>
</view>
<view class="s-container">
<view class="sc-row" wx:for="{{tableData}}" wx:for-item="subItem" wx:key="index">
<view class="sc-title">{{subItem.title}}</view>
<view class="sc-col">
<image
wx:if="{{item[subItem.key] == 0}}"
class="icon"
src="{{imageUrl}}1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
<view class="sc-col">
<image
wx:if="{{item[subItem.key] == 1}}"
class="icon"
src="{{imageUrl}}1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
<view class="sc-col">
<image
wx:if="{{item[subItem.key] == 2}}"
class="icon"
src="{{imageUrl}}1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
<view class="sc-col">
<image
wx:if="{{item[subItem.key] == 3}}"
class="icon"
src="{{imageUrl}}1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view
class="drug-card"
wx:if="{{item.SteroidDailyDose}}"
bind:tap="handleAdlDetail"
data-id="{{item.Id}}"
data-isi="{{item.IsInsuranceProject}}"
data-index="{{index}}"
>
<view class="d-header">
<view class="name">激素用量</view>
<view class="status">
本次激素用量为
<text class="num">{{item.SteroidDailyDose}}mg</text>
/天
</view>
</view>
<view class="content" wx:if="{{item.SteroidDailyDose>5}}">距离达标还需努力,请遵医嘱规律治疗</view>
<view class="content" wx:else>恭喜达标,您的激素用量已少于95% 的患友</view>
</view>
</view>
</view>
</view>
<pagination pagination="{{pagination}}"></pagination>
</view>
</view> </view>
<view class="row">
<view class="label">备注</view>
<view class="content">无</view>
</view>
</view>
<view class="footer">
<view class="remark" bind:tap="handleRemark">备注</view>
<view class="send" bind:tap="handleSend" wx:if="{{detail.IsCurrent==1}}">发消息</view>
</view> </view>
</view> </view>

2
src/doctor/pages/d_patientList/index.ts

@ -38,7 +38,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/patient/get-stat-patient-list', url: '?r=zd/doctor/patient/get-stat-patient-list',
data: { data: {
page: newPage, page: newPage,
...params, ...params,

16
src/doctor/pages/d_taskDetail/index.ts

@ -33,7 +33,7 @@ Page({
getTemplate() { getTemplate() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/task/get-template', url: '?r=zd/doctor/task/get-template',
data: {}, data: {},
}).then((res) => { }).then((res) => {
const templateObj = {} const templateObj = {}
@ -48,7 +48,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/task/detail', url: '?r=zd/doctor/task/detail',
data: { data: {
TaskId: this.data.id, TaskId: this.data.id,
}, },
@ -127,12 +127,12 @@ Page({
const { Id } = detail const { Id } = detail
wx.showModal({ wx.showModal({
title: '确认取消发送?', title: '确认取消发送?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/task/cancel', url: '?r=zd/doctor/task/cancel',
data: { data: {
TaskId: Id, TaskId: Id,
}, },
@ -148,12 +148,12 @@ Page({
const { Id } = detail const { Id } = detail
wx.showModal({ wx.showModal({
title: '确认停止发送?', title: '确认停止发送?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/task/stop', url: '?r=zd/doctor/task/stop',
data: { data: {
TaskId: Id, TaskId: Id,
}, },
@ -169,12 +169,12 @@ Page({
const { Id } = detail const { Id } = detail
wx.showModal({ wx.showModal({
title: '确认删除?', title: '确认删除?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/task/delete', url: '?r=zd/doctor/task/delete',
data: { data: {
TaskId: Id, TaskId: Id,
}, },

14
src/doctor/pages/d_taskList/index.ts

@ -39,7 +39,7 @@ Page({
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/task/list', url: '?r=zd/doctor/task/list',
data: { data: {
page: newPage, page: newPage,
}, },
@ -156,12 +156,12 @@ Page({
const { Id } = list[index] const { Id } = list[index]
wx.showModal({ wx.showModal({
title: '确认取消发送?', title: '确认取消发送?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/task/cancel', url: '?r=zd/doctor/task/cancel',
data: { data: {
TaskId: Id, TaskId: Id,
}, },
@ -178,12 +178,12 @@ Page({
const { Id } = list[index] const { Id } = list[index]
wx.showModal({ wx.showModal({
title: '确认停止发送?', title: '确认停止发送?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/task/stop', url: '?r=zd/doctor/task/stop',
data: { data: {
TaskId: Id, TaskId: Id,
}, },
@ -200,12 +200,12 @@ Page({
const { Id } = list[index] const { Id } = list[index]
wx.showModal({ wx.showModal({
title: '确认删除?', title: '确认删除?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/task/delete', url: '?r=zd/doctor/task/delete',
data: { data: {
TaskId: Id, TaskId: Id,
}, },

2
src/doctor/pages/d_trans/index.ts

@ -12,7 +12,7 @@ Page({
handleLoginOut() { handleLoginOut() {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/account/reg-logout', url: '?r=zd/doctor/account/reg-logout',
data: {}, data: {},
}).then((_res) => { }).then((_res) => {
app.globalData.loginType = 1 app.globalData.loginType = 1

4
src/doctor/pages/d_transfer/index.ts

@ -31,7 +31,7 @@ Page({
const { search, ProvinceId, CityId } = this.data const { search, ProvinceId, CityId } = this.data
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/doctor-recommend/get-doctor-list', url: '?r=zd/doctor/doctor-recommend/get-doctor-list',
data: { data: {
page: newPage, page: newPage,
search, search,
@ -80,7 +80,7 @@ Page({
const { list } = this.data const { list } = this.data
const { index } = e.currentTarget.dataset const { index } = e.currentTarget.dataset
const item: any = list[index] const item: any = list[index]
const url = `${app.globalData.url}?r=igg4/doctor/doctor-recommend/get-rec-code&loginState=${app.globalData.loginState}&recommendDoctorId=${item.doctorId}` const url = `${app.globalData.url}?r=zd/doctor/doctor-recommend/get-rec-code&loginState=${app.globalData.loginState}&recommendDoctorId=${item.doctorId}`
app.mpBehavior({ doctor: true, PageName: 'BTN_DOCTORRECOMMENDEDREFERRALPAGERECOMMENDCODE' }) app.mpBehavior({ doctor: true, PageName: 'BTN_DOCTORRECOMMENDEDREFERRALPAGERECOMMENDCODE' })
this.setData({ this.setData({
toastShow: true, toastShow: true,

8
src/doctor/pages/d_transferDetail/index.ts

@ -29,8 +29,8 @@ Page({
const { id, type } = this.data const { id, type } = this.data
const url = const url =
type == '1' type == '1'
? '?r=igg4/doctor/doctor-recommend/get-rec-stat-doctor' ? '?r=zd/doctor/doctor-recommend/get-rec-stat-doctor'
: '?r=igg4/doctor/doctor-recommend/get-be-rec-stat-doctor' : '?r=zd/doctor/doctor-recommend/get-be-rec-stat-doctor'
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url, url,
@ -47,8 +47,8 @@ Page({
const { id, type } = this.data const { id, type } = this.data
const url = const url =
type == '1' type == '1'
? '?r=igg4/doctor/doctor-recommend/get-rec-record-list' ? '?r=zd/doctor/doctor-recommend/get-rec-record-list'
: '?r=igg4/doctor/doctor-recommend/get-be-rec-record-list' : '?r=zd/doctor/doctor-recommend/get-be-rec-record-list'
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url, url,

4
src/doctor/pages/d_transferLog/index.ts

@ -38,8 +38,8 @@ Page({
getList(newPage = 1) { getList(newPage = 1) {
const { active } = this.data const { active } = this.data
const url = { const url = {
0: '?r=igg4/doctor/doctor-recommend/get-rec-stat-list', 0: '?r=zd/doctor/doctor-recommend/get-rec-stat-list',
1: '?r=igg4/doctor/doctor-recommend/get-be-rec-stat-list', 1: '?r=zd/doctor/doctor-recommend/get-be-rec-stat-list',
}[active] }[active]
if (newPage == 1) { if (newPage == 1) {
app.mpBehavior({ app.mpBehavior({

131
src/doctor/pages/d_userInfo/index.scss

@ -2,90 +2,69 @@ page {
background: #f2f4f5; background: #f2f4f5;
} }
.page { .page {
padding: 164rpx 30rpx 40rpx; padding: 40rpx 30rpx;
.container { .container {
position: relative;
padding: 92rpx 30rpx 64rpx;
background: #ffffff; background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx; border-radius: 24rpx;
.avatar { padding: 0 30rpx;
position: absolute; .row {
top: -90rpx;
left: 50%;
transform: translateX(-50%);
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; padding: 30rpx 0;
.avatar-user { gap: 20rpx;
flex-shrink: 0; border-bottom: 1rpx solid #f2f4f5;
width: 156rpx; &:last-child {
height: 156rpx; border-bottom: none;
border-radius: 50%;
} }
.edit {
margin-top: -15rpx;
padding: 8rpx 24rpx;
background: #f2f4f5;
border-radius: 108rpx 108rpx 108rpx 108rpx;
font-size: 24rpx;
color: rgba(40, 48, 49, 1);
display: flex;
align-items: center;
line-height: 1;
.icon {
margin-right: 8rpx;
width: 24rpx;
height: 24rpx;
}
}
}
.row {
margin-top: 64rpx;
display: flex;
justify-content: space-between;
.label { .label {
flex-shrink: 0; flex-shrink: 0;
font-size: 32rpx; width: 5em;
color: rgba(154, 161, 162, 1); font-size: 36rpx;
width: 6em; color: rgba(33, 33, 32, 0.30);
line-height: 48rpx;
}
.content {
flex: 1;
font-size: 36rpx;
color: rgba(33, 33, 32, 1);
line-height: 48rpx;
word-break: break-all;
.avatar-small {
width: 128rpx;
height: 128rpx;
border-radius: 50%;
}
.edit-text {
font-size: 36rpx;
color: rgba(22, 121, 203, 1);
}
} }
.switch-row { .switch-row {
flex: 1;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
.switch { .switch {
transform: scale(0.8); transform: scale(0.8);
} }
} }
.content {
flex: 1;
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
}
.option {
flex-shrink: 0;
display: flex;
align-items: center;
.change {
font-size: 32rpx;
color: rgba(98, 190, 208, 1);
}
.icon {
color: #d4d9da;
}
}
} }
} }
.switch-btn { .switch-btn {
margin: 64rpx 0; margin-top: 64rpx;
font-size: 36rpx; font-size: 36rpx;
color: rgba(255, 255, 255, 1); color: rgba(255, 255, 255, 1);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 84rpx; height: 84rpx;
background: #67baca; background: rgba(22, 121, 203, 1);
border-radius: 64rpx 64rpx 64rpx 64rpx; border-radius: 64rpx;
&.logout {
margin-top: 32rpx;
background: #fff;
color: rgba(22, 121, 203, 1);
border: 2rpx solid rgba(22, 121, 203, 1);
}
} }
} }
@ -94,8 +73,8 @@ page {
.title { .title {
display: flex; display: flex;
justify-content: center; justify-content: center;
font-size: 36rpx; font-size: 40rpx;
color: rgba(40, 48, 49, 1); color: rgba(33, 33, 32, 1);
font-weight: bold; font-weight: bold;
} }
.textarea { .textarea {
@ -105,7 +84,7 @@ page {
height: 180rpx; height: 180rpx;
box-sizing: border-box; box-sizing: border-box;
background: #f7f8f9; background: #f7f8f9;
border-radius: 24rpx 24rpx 24rpx 24rpx; border-radius: 12rpx;
border: 2rpx solid #f8f9f9; border: 2rpx solid #f8f9f9;
font-size: 32rx; font-size: 32rx;
} }
@ -114,37 +93,37 @@ page {
.w-row { .w-row {
display: grid; display: grid;
grid-template-columns: 156rpx repeat(2, 1fr); grid-template-columns: 156rpx repeat(2, 1fr);
background-color: rgba(242, 244, 245, 1); background-color: rgba(232, 243, 253, 1);
&:nth-of-type(2n) { &:nth-of-type(2n) {
background-color: rgba(247, 248, 249, 1); background-color: rgba(205, 232, 255, 1);
} }
&:not(:last-of-type) { &:not(:last-of-type) {
border-bottom: 1px solid #fff; border-bottom: 1px solid #fff;
} }
&:first-of-type { &:first-of-type {
border-radius: 24rpx 24rpx 0 0; border-radius: 12rpx 12rpx 0 0;
.name { .name {
border-radius: 24rpx 0 0 0; border-radius: 12rpx 0 0 0;
} }
} }
&:last-of-type { &:last-of-type {
border-radius: 0 0 24rpx 24rpx; border-radius: 0 0 12rpx 12rpx;
.name { .name {
border-radius: 0 0 0 24rpx; border-radius: 0 0 0 12rpx;
} }
} }
.name { .name {
height: 76rpx; height: 76rpx;
font-size: 32rpx; font-size: 36rpx;
color: #fff; color: #fff;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
background-color: rgba(103, 186, 202, 1); background-color: rgba(85, 164, 230, 1);
} }
.item { .item {
position: relative; position: relative;
font-size: 32rpx; font-size: 36rpx;
color: rgba(103, 113, 114, 1); color: rgba(103, 113, 114, 1);
display: flex; display: flex;
align-items: center; align-items: center;
@ -159,7 +138,7 @@ page {
display: none; display: none;
} }
&.active { &.active {
background-color: rgba(237, 252, 255, 1); // background-color: rgba(237, 252, 255, 1);
.icon { .icon {
display: block; display: block;
} }
@ -169,14 +148,14 @@ page {
} }
.submit { .submit {
margin-top: 32rpx; margin-top: 32rpx;
height: 84rpx; height: 96rpx;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
background: #67baca; background: linear-gradient( 90deg, #293B9F 0%, #1679CB 100%);
font-size: 36rpx; font-size: 36rpx;
color: #fff; color: #fff;
border-radius: 64rpx 64rpx 64rpx 64rpx; border-radius: 12rpx;
} }
} }

8
src/doctor/pages/d_userInfo/index.ts

@ -64,7 +64,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/doctor/account/info', url: '?r=zd/doctor/account/info',
data: {}, data: {},
}).then((res) => { }).then((res) => {
const { ClinicList } = this.data const { ClinicList } = this.data
@ -164,7 +164,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/account/update-info', url: '?r=zd/doctor/account/update-info',
data: { data: {
Introduce: this.data.doctor.Introduce, Introduce: this.data.doctor.Introduce,
Clinic, Clinic,
@ -209,12 +209,12 @@ Page({
handleLoginOut() { handleLoginOut() {
wx.showModal({ wx.showModal({
title: '确认退出?', title: '确认退出?',
confirmColor: '#62bed0', confirmColor: 'rgba(22, 121, 203, 1)',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/doctor/account/reg-logout', url: '?r=zd/doctor/account/reg-logout',
data: {}, data: {},
}).then((_res) => { }).then((_res) => {
app.globalData.loginType = 1 app.globalData.loginType = 1

28
src/doctor/pages/d_userInfo/index.wxml

@ -1,26 +1,22 @@
<view class="page"> <view class="page">
<view class="container"> <view class="container">
<view class="avatar"> <view class="row">
<image class="avatar-user" mode="aspectFill" src="{{doctor.Img}}"></image> <view class="label">头像</view>
<!-- <view class="edit"> --> <view class="content">
<!-- <image class="icon" src="{{imageUrl}}/doctor/icon-edit.png?t={{Timestamp}}"></image> --> <image class="avatar-small" mode="aspectFill" src="{{doctor.Img}}"></image>
<!-- 更换 --> </view>
<!-- </view> -->
</view> </view>
<view class="row"> <view class="row">
<view class="label">姓名</view> <view class="label">姓名</view>
<view class="content">{{doctor.Name}}</view> <view class="content">{{doctor.Name}}</view>
<view class="option"></view>
</view> </view>
<view class="row" bind:tap="handleChangePhone"> <view class="row">
<view class="label">电话</view> <view class="label">电话</view>
<view class="content">{{doctor.Telephone}}</view> <view class="content">{{doctor.Telephone}}</view>
<view class="option"><view class="change">更换</view></view>
</view> </view>
<view class="row"> <view class="row">
<view class="label">医院</view> <view class="label">医院</view>
<view class="content">{{hospital.Name}}</view> <view class="content">{{hospital.Name}}</view>
<view class="option"></view>
</view> </view>
<view class="row"> <view class="row">
<view class="label">多院区出诊</view> <view class="label">多院区出诊</view>
@ -34,21 +30,15 @@
</view> </view>
</view> </view>
<view class="row" bind:tap="handleWeek"> <view class="row" bind:tap="handleWeek">
<view class="label">门诊时间</view> <view class="label">出诊时间</view>
<view class="content pre-line">{{doctor.weekName || '暂无'}}</view> <view class="content">{{doctor.weekName || '暂无'}}<text class="edit-text">编辑</text></view>
<view class="option"><van-icon class="icon" name="arrow" /></view>
</view> </view>
<view class="row" bind:tap="handleBrief"> <view class="row" bind:tap="handleBrief">
<view class="label">个人简介</view> <view class="label">个人简介</view>
<view class="content">{{doctor.Introduce || '暂无'}}</view> <view class="content">{{doctor.Introduce || '暂无'}}<text class="edit-text">编辑</text></view>
<view class="option"><van-icon class="icon" name="arrow" /></view>
</view> </view>
</view> </view>
<view class="switch-btn" bind:tap="handleSwitch">切换账号</view> <view class="switch-btn" bind:tap="handleSwitch">切换账号</view>
<view class="switch-btn" bind:tap="handleLoginOut">
退出登录
</view>
</view> </view>
<van-popup <van-popup

6
src/gift/pages/conformOrder/index.ts

@ -28,7 +28,7 @@ Page({
getDefaultAddress() { getDefaultAddress() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/patient-address/get-default-address", url: "?r=zd/patient-address/get-default-address",
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -39,7 +39,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/gift-order/get-order-detail", url: "?r=zd/gift-order/get-order-detail",
data: { data: {
orderId: this.data.id, orderId: this.data.id,
}, },
@ -70,7 +70,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/gift-order/confirm-order", url: "?r=zd/gift-order/confirm-order",
data: { data: {
orderId: this.data.id, orderId: this.data.id,
addressId: this.data.addressDetail.addressId, addressId: this.data.addressDetail.addressId,

2
src/gift/pages/dtpDurg/index.ts

@ -17,7 +17,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/dtp-pharmacy/detail", url: "?r=zd/dtp-pharmacy/detail",
data: { data: {
Id: this.data.id, Id: this.data.id,
}, },

10
src/gift/pages/giftDetail/index.ts

@ -33,7 +33,7 @@ Page({
setView() { setView() {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/gift-spu/set-visit-num", url: "?r=zd/gift-spu/set-visit-num",
data: { spuId: this.data.id }, data: { spuId: this.data.id },
showMsg: false, showMsg: false,
}); });
@ -41,7 +41,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/gift-spu/get-detail", url: "?r=zd/gift-spu/get-detail",
data: { data: {
spuId: this.data.id, spuId: this.data.id,
}, },
@ -60,7 +60,7 @@ Page({
getProtocol() { getProtocol() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/agreement/get-user-agreement", url: "?r=zd/agreement/get-user-agreement",
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -71,7 +71,7 @@ Page({
setProtocol() { setProtocol() {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/agreement/set-user-agreement", url: "?r=zd/agreement/set-user-agreement",
data: {}, data: {},
}); });
}, },
@ -135,7 +135,7 @@ Page({
} }
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/gift-order/place-order", url: "?r=zd/gift-order/place-order",
data: { data: {
giftId: this.data.specVecItem.giftId, giftId: this.data.specVecItem.giftId,
count: this.data.num, count: this.data.num,

6
src/gift/pages/giftList/index.ts

@ -34,7 +34,7 @@ Page({
getScore() { getScore() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/patient-score/get-self-score", url: "?r=zd/patient-score/get-self-score",
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -45,7 +45,7 @@ Page({
getCateList() { getCateList() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/gift-spu/get-cate-all-list", url: "?r=zd/gift-spu/get-cate-all-list",
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -63,7 +63,7 @@ Page({
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: `?r=igg4/gift-spu/get-list&page=${newPage}`, url: `?r=zd/gift-spu/get-list&page=${newPage}`,
data: { data: {
cateId: this.data.cateId ? [this.data.cateId] : [], cateId: this.data.cateId ? [this.data.cateId] : [],
}, },

2
src/gift/pages/myGift/index.ts

@ -17,7 +17,7 @@ Page({
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/gift-order/get-order-list", url: "?r=zd/gift-order/get-order-list",
data: { data: {
page: newPage, page: newPage,
}, },

18
src/gift/pages/myHealthRecord/index.ts

@ -147,7 +147,7 @@ Page({
getCale() { getCale() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/adl/cale', url: '?r=zd/adl/cale',
data: { data: {
Month: this.data.calendarDate, Month: this.data.calendarDate,
}, },
@ -194,7 +194,7 @@ Page({
getMedicationAlertAdl() { getMedicationAlertAdl() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/medication/medication-alert-adl', url: '?r=zd/medication/medication-alert-adl',
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -295,7 +295,7 @@ Page({
const { BeginMonth, EndMonth, Type, Num } = this.data const { BeginMonth, EndMonth, Type, Num } = this.data
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/adl/composite-list', url: '?r=zd/adl/composite-list',
data: { data: {
Type: Number(Type) === 4 ? 2 : 1, Type: Number(Type) === 4 ? 2 : 1,
DateType: Number(Type) === 4 ? '' : Number(Type), DateType: Number(Type) === 4 ? '' : Number(Type),
@ -350,7 +350,7 @@ Page({
const { BeginMonth, EndMonth, Type, Num } = this.data const { BeginMonth, EndMonth, Type, Num } = this.data
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/adl/list', url: '?r=zd/adl/list',
data: { data: {
Type: Number(Type) === 4 ? 2 : 1, Type: Number(Type) === 4 ? 2 : 1,
DateType: Number(Type) === 4 ? '' : Number(Type), DateType: Number(Type) === 4 ? '' : Number(Type),
@ -390,7 +390,7 @@ Page({
const { BeginMonth, EndMonth, Type, Num } = this.data const { BeginMonth, EndMonth, Type, Num } = this.data
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/medication/list', url: '?r=zd/medication/list',
data: { data: {
Type: Number(Type) === 4 ? 2 : 1, Type: Number(Type) === 4 ? 2 : 1,
DateType: Number(Type) === 4 ? '' : Number(Type), DateType: Number(Type) === 4 ? '' : Number(Type),
@ -430,7 +430,7 @@ Page({
const { BeginMonth, EndMonth, Type, Num } = this.data const { BeginMonth, EndMonth, Type, Num } = this.data
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/adl/list', url: '?r=zd/adl/list',
data: { data: {
Type: Number(Type) === 4 ? 2 : 1, Type: Number(Type) === 4 ? 2 : 1,
DateType: Number(Type) === 4 ? '' : Number(Type), DateType: Number(Type) === 4 ? '' : Number(Type),
@ -455,7 +455,7 @@ Page({
if (Number(Type) != 4) { if (Number(Type) != 4) {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/adl/graph', url: '?r=zd/adl/graph',
data: { data: {
Type: Number(Type) === 4 ? 2 : 1, Type: Number(Type) === 4 ? 2 : 1,
DateType: Number(Type) === 4 ? '' : Number(Type), DateType: Number(Type) === 4 ? '' : Number(Type),
@ -996,7 +996,7 @@ Page({
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/adl/delete', url: '?r=zd/adl/delete',
data: { data: {
Id: id, Id: id,
}, },
@ -1053,7 +1053,7 @@ Page({
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: 'POST', method: 'POST',
url: '?r=igg4/medication/delete', url: '?r=zd/medication/delete',
data: { data: {
Id: id, Id: id,
}, },

2
src/gift/pages/orderDetail/index.ts

@ -16,7 +16,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/gift-order/get-order-detail", url: "?r=zd/gift-order/get-order-detail",
data: { data: {
orderId: this.data.id, orderId: this.data.id,
}, },

2
src/gift/pages/orderEnd/index.ts

@ -16,7 +16,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/gift-order/get-order-detail", url: "?r=zd/gift-order/get-order-detail",
data: { data: {
orderId: this.data.id, orderId: this.data.id,
}, },

4
src/gift/pages/priceDetail/index.ts

@ -19,7 +19,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/patient-score/get-self-score", url: "?r=zd/patient-score/get-self-score",
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({
@ -30,7 +30,7 @@ Page({
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/patient-score/get-self-record-list", url: "?r=zd/patient-score/get-self-record-list",
data: { page: newPage }, data: { page: newPage },
}).then((res) => { }).then((res) => {
let list = res.page == 1 ? res.list : [...this.data.list, ...res.list]; let list = res.page == 1 ? res.list : [...this.data.list, ...res.list];

2
src/gift/pages/scoreRule/index.ts

@ -19,7 +19,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/patient-score/get-score-explain", url: "?r=zd/patient-score/get-score-explain",
data: {}, data: {},
}).then((res) => { }).then((res) => {
this.setData({ this.setData({

8
src/gift/pages/siteEdit/index.ts

@ -44,7 +44,7 @@ Page({
getDetail() { getDetail() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/patient-address/get-address-detail", url: "?r=zd/patient-address/get-address-detail",
data: { data: {
addressId: this.data.addressId, addressId: this.data.addressId,
}, },
@ -182,7 +182,7 @@ Page({
getLocationInfo() { getLocationInfo() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/nrdl-hospital/location-info", url: "?r=zd/nrdl-hospital/location-info",
data: { data: {
lat: this.data.LAT, lat: this.data.LAT,
lng: this.data.LNG, lng: this.data.LNG,
@ -236,7 +236,7 @@ Page({
}; };
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/patient-address/save-address", url: "?r=zd/patient-address/save-address",
data: params, data: params,
}).then(() => { }).then(() => {
wx.navigateBack(); wx.navigateBack();
@ -250,7 +250,7 @@ Page({
if (res.confirm) { if (res.confirm) {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/patient-address/del-address", url: "?r=zd/patient-address/del-address",
data: { data: {
addressId: this.data.addressId, addressId: this.data.addressId,
}, },

2
src/gift/pages/siteList/index.ts

@ -17,7 +17,7 @@ Page({
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/patient-address/get-list", url: "?r=zd/patient-address/get-list",
data: { data: {
page: newPage, page: newPage,
}, },

4
src/gift/pages/vipCert/index.ts

@ -35,7 +35,7 @@ Page({
handleAiPass(imgUrl: string) { handleAiPass(imgUrl: string) {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/common/medicine-image-verify", url: "?r=zd/common/medicine-image-verify",
data: { data: {
ImageUrl: imgUrl, ImageUrl: imgUrl,
}, },
@ -85,7 +85,7 @@ Page({
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=igg4/account/upload-use-drugs-audit-img", url: "?r=zd/account/upload-use-drugs-audit-img",
data: { data: {
diagnoseImg, diagnoseImg,
aiPass: this.data.aiPass, aiPass: this.data.aiPass,

2
src/gift/pages/vipPending/index.ts

@ -17,7 +17,7 @@ Page({
getCode() { getCode() {
wx.ajax({ wx.ajax({
method: "GET", method: "GET",
url: "?r=igg4/common/get-channel-wx-code", url: "?r=zd/common/get-channel-wx-code",
data: { data: {
ChannelType: "11", ChannelType: "11",
Id: "", Id: "",

2
src/gift/pages/vipReject/index.json

@ -1,7 +1,5 @@
{ {
"navigationBarTitleText": "", "navigationBarTitleText": "",
"navigationStyle": "custom",
"disableSwipeBack": true,
"usingComponents": { "usingComponents": {
"navBar": "/components/navBar/navBar", "navBar": "/components/navBar/navBar",
"van-icon": "@vant/weapp/icon/index", "van-icon": "@vant/weapp/icon/index",

108
src/gift/pages/vipReject/index.scss

@ -2,86 +2,28 @@
position: relative; position: relative;
box-sizing: border-box; box-sizing: border-box;
background-color: #fff; background-color: #fff;
.bg {
width: 100%;
}
.page-container { .page-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
min-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding-bottom: 76rpx; padding-bottom: 76rpx;
.navbar {
flex-shrink: 0;
padding: 0 20rpx 0;
display: flex;
align-items: center;
font-size: 40rpx;
color: #cf5375;
font-style: italic;
font-weight: bold;
.icon {
flex-shrink: 0;
margin-right: 9rpx;
width: 42rpx;
height: 46rpx;
}
}
.tip {
position: relative;
margin: 180rpx auto 0;
width: 510rpx;
padding: 20rpx 70rpx;
box-sizing: border-box;
background-color: #bb232c;
border-radius: 24rpx;
word-break: break-all;
.icon {
margin-right: 16rpx;
width: 48rpx;
height: 48rpx;
vertical-align: bottom;
}
.text {
font-size: 26rpx;
color: #fff;
line-height: 48rpx;
}
&::after {
position: absolute;
// bottom: -13.5px;
bottom: 0;
left: 50%;
transform: translate(-50%, 90%);
content: "";
width: 0;
height: 0;
border-style: solid;
border-width: 12.5px 8px 0 8px;
border-color: #bb232c transparent transparent transparent;
}
}
.page-icon { .page-icon {
margin: 58rpx auto 0; margin: 58rpx auto 0;
display: block; display: block;
width: 280rpx; width: 240rpx;
height: 280rpx; height: 240rpx;
border-radius: 50%; border-radius: 50%;
} }
.page-title { .page-title {
margin-top: 64rpx; margin-top: 64rpx;
font-size: 56rpx; font-size: 56rpx;
color: #333333; color: #222222;
font-weight: bold; font-weight: bold;
text-align: center; text-align: center;
} }
.sub-title { .sub-title {
margin-top: 32rpx; margin-top: 32rpx;
font-size: 32rpx; font-size: 36rpx;
color: #aaa; color: rgba(34, 34, 34, 0.7);
text-align: center; text-align: center;
} }
.footer { .footer {
@ -97,45 +39,25 @@
.next { .next {
flex: 1; flex: 1;
text-align: center; text-align: center;
height: 88rpx; height: 96rpx;
line-height: 88rpx; line-height: 96rpx;
text-align: center; text-align: center;
border: 2rpx solid #e04775; border-radius: 16rpx;
border-radius: 24rpx; font-size: 40rpx;
font-size: 34rpx;
font-weight: bold; font-weight: bold;
background-color: #e04775; background: linear-gradient(0deg, #0eb66d, #00d277);
color: #fff; color: #fff;
} }
} }
.divider {
margin: 48rpx auto 0;
width: 300rpx;
}
.ohter { .ohter {
margin-top: 48rpx; margin-top: 200rpx;
display: flex; display: flex;
justify-content: center; justify-content: center;
.col { .col {
margin: 0 48rpx; padding: 16rpx 88rpx;
padding: 0 20rpx; font-size: 36rpx;
height: 48rpx; color: rgba(14, 182, 109, 1);
border-radius: 24rpx; border: 1px dashed rgba(14, 182, 109, 0.21);
background: #eeeeee;
font-size: 24rpx;
color: #666666;
display: flex;
align-items: center;
justify-content: center;
&::after {
border: none;
outline: none;
}
.icon {
margin-right: 12rpx;
width: 48rpx;
height: 48rpx;
}
} }
} }
} }

12
src/gift/pages/vipReject/index.wxml

@ -1,23 +1,13 @@
<view class="page"> <view class="page">
<image class="bg" mode="widthFix" src="{{imageUrl}}1/login-bg.png?t={{Timestamp}}"></image>
<view class="page-container"> <view class="page-container">
<navBar title="" back="{{true}}" bind:back="handleBack"></navBar> <image class="page-icon" src="/images/icon50.png"></image>
<view class="tip">
<image class="icon" src="{{imageUrl}}1/warn.png?t={{Timestamp}}"></image>
<text class="text">未通过原因:{{userInfo.UseDrugsRejectReason}}</text>
</view>
<image class="page-icon" src="{{imageUrl}}1/cert-reject.png?t={{Timestamp}}"></image>
<view class="page-title">审核未通过</view> <view class="page-title">审核未通过</view>
<view class="sub-title">很遗憾您的审核未通过</view> <view class="sub-title">很遗憾您的审核未通过</view>
<view class="footer"> <view class="footer">
<view class="next" bind:tap="handleSubmit">重新提交</view> <view class="next" bind:tap="handleSubmit">重新提交</view>
</view> </view>
<view class="viewider">
<van-divider contentPosition="center" textColor="#aaaaaa">或者</van-divider>
</view>
<view class="ohter"> <view class="ohter">
<view class="col" bind:tap="handleVisitors"> <view class="col" bind:tap="handleVisitors">
<image class="icon" src="{{imageUrl}}1/look.png?t={{Timestamp}}"></image>
回到首页 回到首页
</view> </view>
</view> </view>

BIN
src/images/bg14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
src/images/bg15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/images/bg16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

BIN
src/images/bg17.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

BIN
src/images/bg18.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
src/images/bg19.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
src/images/bg20.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

BIN
src/images/bg21.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
src/images/doctor/tabbar/1-active.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 829 B

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/images/doctor/tabbar/1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 565 B

BIN
src/images/doctor/tabbar/2-active.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/images/doctor/tabbar/2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/images/doctor/tabbar/3-active.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/images/doctor/tabbar/3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/images/doctor/tabbar/4-active.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/images/doctor/tabbar/4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 888 B

BIN
src/images/icon19.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 800 B

After

Width:  |  Height:  |  Size: 553 B

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save