Browse Source

2.0页面开发

dev2.0
kola-web 2 weeks ago
parent
commit
eb0c5193f4
  1. 60
      project.private.config.json
  2. 11
      src/app.json
  3. 9
      src/app.ts
  4. 98
      src/components/toast/index.scss
  5. 21
      src/components/toast/index.wxml
  6. 51
      src/custom-tab-bar/index.scss
  7. 22
      src/custom-tab-bar/index.ts
  8. 13
      src/custom-tab-bar/index.wxml
  9. 132
      src/doctor/pages/d_createTask/index.scss
  10. 9
      src/doctor/pages/d_createTask/index.ts
  11. 243
      src/doctor/pages/d_createTask/index.wxml
  12. 25
      src/doctor/pages/d_patient/index.scss
  13. 11
      src/doctor/pages/d_patient/index.wxml
  14. 4
      src/doctor/pages/d_patientDetail/index.json
  15. 300
      src/doctor/pages/d_patientDetail/index.scss
  16. 163
      src/doctor/pages/d_patientDetail/index.ts
  17. 109
      src/doctor/pages/d_patientDetail/index.wxml
  18. 2
      src/doctor/pages/d_taskList/index.json
  19. 30
      src/doctor/pages/d_taskList/index.scss
  20. 4
      src/doctor/pages/d_taskList/index.ts
  21. 21
      src/doctor/pages/d_taskList/index.wxml
  22. 9
      src/gift/pages/record/index.json
  23. 590
      src/gift/pages/record/index.scss
  24. 39
      src/gift/pages/record/index.ts
  25. 227
      src/gift/pages/record/index.wxml
  26. 8
      src/gift/pages/recordDetail/index.json
  27. 167
      src/gift/pages/recordDetail/index.scss
  28. 8
      src/gift/pages/recordDetail/index.ts
  29. 57
      src/gift/pages/recordDetail/index.wxml
  30. 9
      src/gift/pages/recordList/index.json
  31. 281
      src/gift/pages/recordList/index.scss
  32. 164
      src/gift/pages/recordList/index.ts
  33. 97
      src/gift/pages/recordList/index.wxml
  34. BIN
      src/images/bg38.png
  35. BIN
      src/images/bg39.png
  36. BIN
      src/images/bg40.png
  37. BIN
      src/images/bg41.png
  38. BIN
      src/images/bg42.png
  39. BIN
      src/images/icon108.png
  40. BIN
      src/images/icon109.png
  41. BIN
      src/images/icon110.png
  42. BIN
      src/images/icon111.png
  43. BIN
      src/images/icon112.png
  44. BIN
      src/images/icon113.png
  45. BIN
      src/images/icon114.png
  46. BIN
      src/images/icon115.png
  47. BIN
      src/images/icon116.png
  48. BIN
      src/images/icon117.png
  49. BIN
      src/images/icon118.png
  50. BIN
      src/images/icon119.png
  51. BIN
      src/images/icon120.png
  52. BIN
      src/images/icon121.png
  53. BIN
      src/images/icon122.png
  54. BIN
      src/images/icon123.png
  55. BIN
      src/images/icon124.png
  56. BIN
      src/images/icon125.png
  57. BIN
      src/images/icon126.png
  58. BIN
      src/images/icon127.png
  59. BIN
      src/images/icon128.png
  60. BIN
      src/images/icon129.png
  61. BIN
      src/images/icon130.png
  62. BIN
      src/images/icon131.png
  63. BIN
      src/images/icon132.png
  64. BIN
      src/images/icon133.png
  65. BIN
      src/images/icon134.png
  66. BIN
      src/images/icon135.png
  67. BIN
      src/images/icon136.png
  68. BIN
      src/images/icon137.png
  69. BIN
      src/images/icon138.png
  70. BIN
      src/images/icon139.png
  71. BIN
      src/images/icon140.png
  72. BIN
      src/images/icon141.png
  73. BIN
      src/images/icon142.png
  74. BIN
      src/images/icon143.png
  75. BIN
      src/images/icon144.png
  76. BIN
      src/images/tabbar/add.png
  77. BIN
      src/images/tabbar/drug-add.png
  78. BIN
      src/images/tabbar/drug-gift-active.png
  79. BIN
      src/images/tabbar/gift-active.png
  80. BIN
      src/images/tabbar/gift.png
  81. BIN
      src/images/title4.png
  82. BIN
      src/images/title5.png
  83. 4
      src/pages/caseReport/index.json
  84. 96
      src/pages/caseReport/index.scss
  85. 14
      src/pages/caseReport/index.ts
  86. 17
      src/pages/caseReport/index.wxml
  87. 2
      src/pages/index/index.wxml
  88. 2
      src/pages/interactivePatient/index.ts
  89. 4
      src/pages/my/index.wxml
  90. 60
      src/pages/qaFormDetail/index.scss
  91. 19
      src/pages/qaFormDetail/index.ts
  92. 20
      src/pages/qaFormDetail/index.wxml
  93. 6
      src/pages/referral/index.json
  94. 82
      src/pages/referral/index.scss
  95. 118
      src/pages/referral/index.ts
  96. 40
      src/pages/referral/index.wxml
  97. 9
      健康档案-接口文档.md
  98. 1155
      医生端-接口文档.md
  99. 11504
      接口文档.md

60
project.private.config.json

@ -22,11 +22,60 @@ @@ -22,11 +22,60 @@
"miniprogram": {
"list": [
{
"name": "医生-患者详情",
"pathName": "doctor/pages/d_patientDetail/index",
"query": "id=67",
"scene": null,
"launchMode": "default"
},
{
"name": "病例报告",
"pathName": "pages/caseReport/index",
"query": "name=门诊病历及处方",
"launchMode": "default",
"scene": null
},
{
"name": "就诊记录详情",
"pathName": "gift/pages/recordDetail/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "就诊记录列表页",
"pathName": "gift/pages/recordList/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "就诊记录",
"pathName": "gift/pages/record/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "医生-新建消息",
"pathName": "doctor/pages/d_createTask/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "医生-任务列表",
"pathName": "doctor/pages/d_taskList/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-问题反馈",
"pathName": "pages/feedback/index",
"query": "",
"scene": null,
"launchMode": "default"
"launchMode": "default",
"scene": null
},
{
"name": "患者-更改手机号",
@ -134,13 +183,6 @@ @@ -134,13 +183,6 @@
"scene": null
},
{
"name": "医生-患者详情",
"pathName": "doctor/pages/d_patientDetail/index",
"query": "id=1313",
"launchMode": "default",
"scene": null
},
{
"name": "医生-患者列表",
"pathName": "doctor/pages/d_patient/index",
"query": "",

11
src/app.json

@ -47,9 +47,9 @@ @@ -47,9 +47,9 @@
"pages/webview/index",
"pages/infusionCenter/index",
"pages/interactivePatient/index",
"pages/referral/index",
"pages/qaForm/index",
"pages/qaFormDetail/index",
"pages/caseReport/index",
"pages/feedback/index"
],
"subpackages": [
@ -64,7 +64,10 @@ @@ -64,7 +64,10 @@
"pages/myHealthRecordChart/index",
"pages/cutaneous/index",
"pages/cutaneousDetail/index",
"pages/cutaneousVideo/index"
"pages/cutaneousVideo/index",
"pages/record/index",
"pages/recordList/index",
"pages/recordDetail/index"
]
},
{
@ -120,10 +123,6 @@ @@ -120,10 +123,6 @@
"text": "知识"
},
{
"pagePath": "pages/live/index",
"text": "活动"
},
{
"pagePath": "pages/my/index",
"text": "我的"
}

9
src/app.ts

@ -21,13 +21,8 @@ App<IAppOption>({ @@ -21,13 +21,8 @@ App<IAppOption>({
upFileUrl: 'https://m.igg4.hbraas.com/',
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
// appid:wx96f45ca4f1fa36ec
// appid:wx346254575bd711a7
// url: 'https://m.igg4.hbsaas.com',
// upFileUrl: 'https://m.igg4.hbsaas.com/',
// imageUrl: 'https://m.igg4.hbsaas.com/igg4/',
@ -253,7 +248,7 @@ App<IAppOption>({ @@ -253,7 +248,7 @@ App<IAppOption>({
verifySys(pub = false) {
// 1:患者 2:医生
const { loginType, isLogin, anyWhere } = this.globalData
console.log("DEBUGPRINT[229]: app.ts:246: loginType=", loginType)
console.log('DEBUGPRINT[229]: app.ts:246: loginType=', loginType)
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const url = currentPage.route

98
src/components/toast/index.scss

@ -2451,7 +2451,7 @@ @@ -2451,7 +2451,7 @@
width: 670rpx;
box-sizing: border-box;
border-radius: 24rpx;
background: linear-gradient(180deg, #E6F4FF 0%, #FFFFFF 22.89%, #FFFFFF 100%);
background: linear-gradient(180deg, #e6f4ff 0%, #ffffff 22.89%, #ffffff 100%);
.content {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
@ -3621,6 +3621,102 @@ @@ -3621,6 +3621,102 @@
}
}
.popup-no-write {
.badge {
position: relative;
z-index: 1;
margin: 0 auto -90rpx;
display: block;
width: 204rpx;
height: 160rpx;
}
.popup-container {
padding: 144rpx 0 0;
width: 540rpx;
box-sizing: border-box;
background-color: #fff;
border-radius: 24rpx;
box-shadow: inset 0rpx -1rpx 0rpx 0rpx #e5e6eb;
.title {
padding-bottom: 48rpx;
font-size: 36rpx;
color: #222222;
font-weight: bold;
text-align: center;
}
.footer {
border-top: 1px solid #eaebef;
display: flex;
.btn1,
.btn2 {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
}
.btn1 {
border-right: 1px solid #eaebef;
color: #212120;
}
.btn2 {
color: #0eb66d;
}
}
}
&.drug {
.footer {
.btn2 {
color: rgba(89, 86, 233, 1);
}
}
}
}
.popup-one-write {
.badge {
position: relative;
z-index: 1;
margin: 0 auto -90rpx;
display: block;
width: 204rpx;
height: 160rpx;
}
.popup-container {
padding: 116rpx 0 32rpx;
width: 550rpx;
box-sizing: border-box;
background-color: #fff;
border-radius: 24rpx;
box-shadow: inset 0rpx -1rpx 0rpx 0rpx #e5e6eb;
.title {
padding-bottom: 48rpx;
font-size: 36rpx;
color: #222222;
font-weight: bold;
text-align: center;
}
.btn {
margin: 0 auto;
width: 486rpx;
height: 96rpx;
background: linear-gradient(86deg, #0eb66d 0%, #00d277 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #ffffff;
}
}
&.drug {
.btn {
background: linear-gradient(274deg, #5956e9 0%, #b384f4 100%);
}
}
}
.close {
margin: 48rpx auto 0;
display: block;

21
src/components/toast/index.wxml

@ -892,7 +892,9 @@ @@ -892,7 +892,9 @@
<text class="link" catch:tap="routerTo" data-url="/doc/pages/privacyAgreement/index?active=1">《用户协议》</text>
<text class="link" catch:tap="routerTo" data-url="/doc/pages/privacyAgreement/index">《隐私政策》</text>
<view></view>
<text class="link" catch:tap="routerTo" data-url="/doc/pages/privacyAgreement/index?active=2">《个人信息共享知情同意书》</text>
<text class="link" catch:tap="routerTo" data-url="/doc/pages/privacyAgreement/index?active=2">
《个人信息共享知情同意书》
</text>
</view>
<view class="footer">
@ -1092,6 +1094,23 @@ @@ -1092,6 +1094,23 @@
<image class="code" src="{{followQrCode}}" show-menu-by-longpress></image>
</view>
</view>
<view class="popup-no-write {{theme === 'DRUG' && 'drug'}}" wx:if="{{type==='noWrite'}}">
<image class="badge" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon140' : 'icon125'}}.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">您有填写信息还未提交</view>
<view class="footer">
<view class="btn1" bind:tap="handleCancel">退出</view>
<view class="btn2" bind:tap="handleOk">提交</view>
</view>
</view>
</view>
<view class="popup-one-write {{theme === 'DRUG' && 'drug'}}" wx:if="{{type==='oneWrite'}}">
<image class="badge" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon140' : 'icon125'}}.png?t={{Timestamp}}"></image>
<view class="popup-container">
<view class="title">请至少完成一项填写</view>
<view class="btn" bind:tap="handleCancel">继续</view>
</view>
</view>
<image
wx:if="{{params.close}}"

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

@ -1,26 +1,8 @@ @@ -1,26 +1,8 @@
/* custom-tab-bar/index.wxss */
.circle {
display: block;
margin: 0 auto;
margin-top: -60rpx;
width: 100rpx;
height: 100rpx;
border-radius: 50%;
border: 3px solid #fff;
background: linear-gradient(10deg, #b384f4 0%, #5956e9 100%);
display: flex;
align-items: center;
justify-content: center;
position: relative;
z-index: 1;
.icon {
width: 60rpx;
height: 60rpx;
}
}
.tab-item {
flex: 1;
width: 110rpx;
.icon {
width: 60rpx;
height: 60rpx;
@ -29,6 +11,7 @@ @@ -29,6 +11,7 @@
margin-top: 4rpx;
font-size: 24rpx;
color: #cccccc;
text-align: center;
&.active {
color: rgba(14, 182, 109, 1);
}
@ -37,3 +20,31 @@ @@ -37,3 +20,31 @@
}
}
}
.custom-tab-item {
flex-shrink: 0;
text-align: center;
.name {
margin-top: 4rpx;
font-size: 24rpx;
color: #cccccc;
text-align: center;
&.active {
color: rgba(14, 182, 109, 1);
}
&.drug-active {
color: rgba(89, 86, 233, 1);
}
}
}
.circle {
position: relative;
z-index: 1;
display: block;
margin: -62rpx auto 0;
width: 116rpx;
height: 116rpx;
.icon {
width: 100%;
height: 100%;
}
}

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

@ -20,17 +20,17 @@ Component({ @@ -20,17 +20,17 @@ Component({
icon: 'story',
iconActive: 'story-active',
},
// {
// pagePath: '/pages/certReslove/index',
// text: '突眼日记',
// custom: true,
// },
// {
// pagePath: '/pages/live/index',
// text: '活动',
// icon: 'gift',
// iconActive: 'gift-active',
// },
{
pagePath: '/gift/pages/recordList/index',
custom: true,
text: '就诊记录',
},
{
pagePath: '/pages/qaFormDetail/index',
text: '健康档案',
icon: 'gift',
iconActive: 'gift-active',
},
{
pagePath: '/pages/my/index',
text: '我的',

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

@ -1,10 +1,15 @@ @@ -1,10 +1,15 @@
<van-tabbar active="{{ active }}" active-color="{{theme === 'DRUG' ? 'rgba(89, 86, 233, 1)' : 'rgba(14, 182, 109, 1)'}}" bind:change="onChange" inactive-color="#CCCCCC">
<van-tabbar
active="{{ active }}"
active-color="{{theme === 'DRUG' ? 'rgba(89, 86, 233, 1)' : 'rgba(14, 182, 109, 1)'}}"
bind:change="onChange"
inactive-color="#CCCCCC"
>
<block wx:for="{{list}}" wx:key="*this">
<view class="tab-item" wx:if="{{item.custom && theme === 'DRUG'}}" bind:tap="handleNav" data-index="{{index}}">
<view class="custom-tab-item" wx:if="{{item.custom}}" bind:tap="handleNav" data-index="{{index}}">
<view class="circle">
<image class="icon" src="/images/icon64.png"></image>
<image class="icon" src="{{imageUrl}}/tabbar/{{theme === 'DRUG' ? 'drug-add' : 'add'}}.png"></image>
</view>
<view class="name">用药提醒</view>
<view class="name">就诊记录</view>
</view>
<van-tabbar-item
wx:elif="{{!item.custom}}"

132
src/doctor/pages/d_createTask/index.scss

@ -18,11 +18,13 @@ page { @@ -18,11 +18,13 @@ page {
height: 48rpx;
text-align: center;
font-size: 32rpx;
color: rgba(103, 186, 202, 1);
color: rgba(39, 66, 164, 1);
line-height: 48rpx;
border: 8rpx solid #85d4d5;
border-radius: 50%;
background-color: #85d4d5;
background-color: rgba(255, 255, 255, 1);
border: 8rpx solid rgba(255, 255, 255, 0);
background-clip: content-box;
opacity: 0.8;
}
.order-end {
width: 48rpx;
@ -36,6 +38,8 @@ page { @@ -36,6 +38,8 @@ page {
&.active {
.order {
background-color: #fff;
border: 8rpx solid rgba(255, 255, 255, 0.19);
opacity: 1;
}
.name {
color: rgba(255, 255, 255, 1);
@ -45,9 +49,9 @@ page { @@ -45,9 +49,9 @@ page {
.line {
margin: 30rpx -10rpx 0;
flex: 1;
border-top: 1px dashed #a3d6d7;
border-top: 1px dashed rgba(255, 255, 255, 1);
&.active {
border-color: #fff;
border-color: rgba(255, 255, 255, 1);
}
}
}
@ -55,37 +59,61 @@ page { @@ -55,37 +59,61 @@ page {
margin-top: 24rpx;
text-align: center;
font-size: 28rpx;
color: #ffffff;
color: rgba(255, 255, 255, 1);
line-height: 40rpx;
}
.step1 {
margin: 32rpx 30rpx;
.form {
padding: 30rpx;
margin-bottom: 24rpx;
border-radius: 24rpx;
background-color: #fff;
.form {
.form-item {
margin-bottom: 48rpx;
&:last-of-type {
margin-bottom: 0;
}
&.vertical {
display: flex;
align-items: center;
justify-content: space-between;
}
.f-title {
font-size: 36rpx;
color: rgba(40, 48, 49, 1);
font-weight: bold;
}
.checkbox {
.wx-checkbox-input {
width: 40rpx;
height: 40rpx;
&.wx-checkbox-input-checked {
background: rgba(22, 121, 203, 1);
border-color: rgba(22, 121, 203, 1);
&::before {
color: #fff;
}
}
}
}
.select {
margin-top: 24rpx;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16rpx;
.s-item {
padding: 18rpx 0;
padding: 22rpx;
text-align: center;
border-radius: 12rpx;
font-size: 28rpx;
color: rgba(103, 113, 114, 1);
background: #f2f4f5;
font-size: 32rpx;
color: rgba(34, 34, 34, 0.6);
background: rgba(248, 248, 248, 1);
border: 1px solid rgba(248, 248, 248, 1);
&.active {
color: #fff;
background-color: rgba(103, 186, 202, 1);
color: rgba(22, 121, 203, 1);
background-color: rgba(22, 121, 203, 0.1);
border-color: rgba(22, 121, 203, 1);
}
}
}
@ -113,12 +141,10 @@ page { @@ -113,12 +141,10 @@ page {
.date {
margin-top: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
.picker {
flex: 1;
margin-top: 32rpx;
.d-item {
flex: 1;
@ -126,17 +152,17 @@ page { @@ -126,17 +152,17 @@ page {
align-items: center;
justify-content: space-between;
padding: 18rpx 32rpx;
background: #f7f8f9;
background: rgba(248, 248, 248, 1);
border-radius: 12rpx 12rpx 12rpx 12rpx;
.icon {
width: 32rpx;
height: 32rpx;
width: 40rpx;
height: 40rpx;
}
.content {
font-size: 32rpx;
color: #677172;
color: rgba(34, 34, 34, 0.2);
&:empty::after {
content: attr(data-place);
@ -169,7 +195,7 @@ page { @@ -169,7 +195,7 @@ page {
align-items: baseline;
.title {
font-size: 36rpx;
color: #283031;
color: rgba(34, 34, 34, 1);
font-weight: bold;
}
.tip {
@ -188,7 +214,7 @@ page { @@ -188,7 +214,7 @@ page {
align-items: center;
gap: 16rpx;
font-size: 32rpx;
color: #283031;
color: rgba(34, 34, 34, 1);
line-height: 1;
.circle {
flex-shrink: 0;
@ -196,10 +222,10 @@ page { @@ -196,10 +222,10 @@ page {
height: 32rpx;
background: #ffffff;
border-radius: 50%;
border: 2rpx solid #d4d9da;
border: 2rpx solid rgba(212, 217, 218, 1);
&.active {
position: relative;
border-color: #62bed0;
border-color: rgba(22, 121, 203, 1);
&::after {
content: '';
position: absolute;
@ -209,7 +235,7 @@ page { @@ -209,7 +235,7 @@ page {
width: 18rpx;
height: 18rpx;
border-radius: 50%;
background-color: #62bed0;
background-color: rgba(22, 121, 203, 1);
}
}
}
@ -224,16 +250,16 @@ page { @@ -224,16 +250,16 @@ page {
flex: 1;
padding: 18rpx;
font-size: 32rpx;
color: #677172;
color: rgba(34, 34, 34, 0.60);
text-align: center;
background: #f7f8f9;
background: rgba(248, 248, 248, 1);
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid rgba(207, 212, 213, 0.56);
border: 2rpx solid rgba(248, 248, 248, 1);
font-weight: bold;
&.active {
color: #67baca;
border-color: #67baca;
background: rgba(103, 186, 202, 0.1);
color: rgba(22, 121, 203, 1);
border-color: rgba(22, 121, 203, 1);
background: rgba(22, 121, 203, 0.10);
}
}
}
@ -251,9 +277,10 @@ page { @@ -251,9 +277,10 @@ page {
padding: 22rpx 0;
font-size: 32rpx;
text-align: center;
color: rgba(34, 34, 34, 1);
&:empty::after {
content: attr(data-place);
color: #c2c9ca;
color: rgba(34, 34, 34, 0.2);
}
}
}
@ -262,8 +289,8 @@ page { @@ -262,8 +289,8 @@ page {
color: #677172;
}
.icon {
width: 32rpx;
height: 32rpx;
width: 40rpx;
height: 40rpx;
}
}
}
@ -284,13 +311,14 @@ page { @@ -284,13 +311,14 @@ page {
display: none;
}
.switch-item {
flex: 1;
position: relative;
text-align: center;
font-size: 32rpx;
color: rgba(103, 113, 114, 1);
white-space: nowrap;
&.active {
color: rgba(98, 190, 208, 1);
color: rgba(22, 121, 203, 1);
&::after {
position: absolute;
bottom: -14rpx;
@ -299,8 +327,8 @@ page { @@ -299,8 +327,8 @@ page {
content: '';
width: 54rpx;
height: 8rpx;
border-radius: 12rpx 12rpx 0 0;
background: #62bed0;
border-radius: 8rpx;
background: rgba(22, 121, 203, 1);
}
}
}
@ -315,14 +343,16 @@ page { @@ -315,14 +343,16 @@ page {
transform: scale(0.8);
}
.wrap {
flex: 1;
margin-left: 14rpx;
padding: 30rpx;
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.08);
border-radius: 24rpx 24rpx 24rpx 24rpx;
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(40, 48, 49, 0.04);
border-radius: 24rpx;
border: 2rpx solid #f8f9f9;
.content {
flex: 1;
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
color: rgba(34, 34, 34, 1);
}
.rows {
.row {
@ -362,17 +392,17 @@ page { @@ -362,17 +392,17 @@ page {
display: flex;
align-items: center;
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
color: rgba(34, 34, 34, 1);
.resource {
margin-left: 26rpx;
color: rgba(103, 186, 202, 1);
color: rgba(22, 121, 203, 1);
}
}
.clear {
display: flex;
align-items: center;
font-size: 32rpx;
color: rgba(103, 186, 202, 1);
color: rgba(22, 121, 203, 1);
gap: 12rpx;
.icon {
width: 36rpx;
@ -388,27 +418,27 @@ page { @@ -388,27 +418,27 @@ page {
gap: 26rpx;
.cancel {
flex: 1;
height: 84rpx;
height: 92rpx;
font-size: 36rpx;
color: rgba(103, 186, 202, 1);
color: rgba(22, 121, 203, 1);
display: flex;
align-items: center;
justify-content: center;
background: #ffffff;
border-radius: 98rpx 98rpx 98rpx 98rpx;
border: 2rpx solid #67baca;
border-radius: 12rpx;
border: 2rpx solid rgba(22, 121, 203, 1);
}
.submit {
flex: 1;
height: 84rpx;
height: 92rpx;
font-size: 36rpx;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
background: rgba(103, 186, 202, 1);
border-radius: 98rpx 98rpx 98rpx 98rpx;
border: 2rpx solid #67baca;
background: linear-gradient(96deg, #293b9f 0%, #1679cb 100%);
border-radius: 12rpx;
border: 2rpx solid transparent;
}
}
}

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

@ -5,7 +5,9 @@ const app = getApp<IAppOption>() @@ -5,7 +5,9 @@ const app = getApp<IAppOption>()
Page({
data: {
step: 1,
background: 'transparent',
step: 2,
TemplateType: 1,
templates: [] as any,
@ -348,6 +350,8 @@ Page({ @@ -348,6 +350,8 @@ Page({
title: '确认创建群发任务',
content: '将会按您创建的规则给所有符合条件患者发送消息',
confirmColor: 'rgba(22, 121, 203, 1)',
confirmText: '确认',
cancelText: '取消',
success: (res) => {
if (res.confirm) {
const params = {
@ -401,6 +405,5 @@ Page({ @@ -401,6 +405,5 @@ Page({
handleBack() {
wx.navigateBack()
},
handleViewMp() {
},
handleViewMp() {},
})

243
src/doctor/pages/d_createTask/index.wxml

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<wxs src="../d_patient/index.wxs" module="tools" />
<view
class="page"
style="padding-top: {{bottom+5}}px;background: url({{imageUrl}}/doctor/create-task-bg.png?t={{Timestamp}}) no-repeat top center / 100% 626rpx"
style="padding-top: {{bottom+5}}px;background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center / 100% 472rpx"
>
<navBar
title="新建消息"
@ -27,71 +27,33 @@ @@ -27,71 +27,33 @@
<view class="page-tip">您配置的内容会通过对话列表及公众号提醒通知患者</view>
<view class="step1" wx:if="{{step===1}}">
<view class="form">
<view class="form-item vertical">
<view class="f-title">选择全员</view>
<checkbox class="checkbox"></checkbox>
</view>
</view>
<view class="form">
<view class="form-item">
<view class="f-title">绑定时间</view>
<view class="date">
<picker class="picker" model:value="{{BindStartDate}}" end="{{BindEndDate}}" mode="date">
<view class="d-item">
<view class="content" data-place="选择开始时间">{{BindStartDate}}</view>
<image class="icon" src="{{imageUrl}}3/icon-clock.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon110.png?t={{Timestamp}}"></image>
</view>
</picker>
<view class="sion">-</view>
<picker class="picker" model:value="{{BindEndDate}}" start="{{BindStartDate}}" mode="date">
<view class="d-item">
<view class="content" data-place="选择结束时间">{{BindEndDate}}</view>
<image class="icon" src="{{imageUrl}}3/icon-clock.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon110.png?t={{Timestamp}}"></image>
</view>
</picker>
</view>
</view>
<view class="form-item">
<view class="f-title">本周ADL测评</view>
<view class="select">
<view
class="s-item {{IsThisWeekAdl === item.id && 'active'}}"
wx:for="{{IsThisWeekAdlColumn}}"
data-index="{{index}}"
data-key="IsThisWeekAdl"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">是否有ADL测评</view>
<view class="select">
<view
class="s-item {{HasAdl === item.id && 'active'}}"
wx:for="{{HasAdlColumn}}"
data-index="{{index}}"
data-key="HasAdl"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">ADL测评间隔时长</view>
<view class="select">
<view
class="s-item {{AdlTime === item.id && 'active'}}"
wx:for="{{AdlTimeColumn}}"
data-index="{{index}}"
data-key="AdlTime"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form">
<view class="form-item">
<view class="f-title">是否双达标</view>
<view class="f-title">确诊IgG4-R</view>
<view class="select">
<view
class="s-item {{DoubleStandard === item.id && 'active'}}"
@ -105,8 +67,10 @@ @@ -105,8 +67,10 @@
</view>
</view>
</view>
</view>
<view class="form">
<view class="form-item">
<view class="f-title">ADL评分(多选)</view>
<view class="f-title">正在使用的药物</view>
<view class="select">
<view
class="s-item {{(tools.include(item.id,AdlScore) || AdlScore.length===0 && !item.id) && 'active'}}"
@ -120,185 +84,12 @@ @@ -120,185 +84,12 @@
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">ADL分数变化(多选)</view>
<view class="select">
<view
class="s-item {{(tools.include(item.id,AdlScoreChange) || AdlScoreChange.length===0 && !item.id) && 'active'}}"
wx:for="{{AdlScoreChangeColumn}}"
data-key="AdlScoreChange"
data-index="{{index}}"
wx:key="id"
bind:tap="handleCheckbox"
>
{{item.value}}
</view>
</view>
<view class="select" wx:if="{{tools.include(1,AdlScoreChange)}}">
<view
class="s-item {{AdlScoreChangeType === item.id && 'active'}}"
wx:for="{{AdlScoreChangeTypeColumn}}"
data-index="{{index}}"
data-key="AdlScoreChangeType"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
<view class="custom" wx:if="{{tools.include(1,AdlScoreChange) && AdlScoreChangeType===2}}">
<view class="c-item">
<input
type="number"
model:value="{{AdlScoreChangeMin}}"
maxlength="{{2}}"
class="input"
placeholder-class="input-place"
placeholder="请输入"
/>
</view>
-
<view class="c-item">
<input
type="number"
model:value="{{AdlScoreChangeMax}}"
maxlength="{{2}}"
class="input"
placeholder-class="input-place"
placeholder="请输入"
/>
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">激素用量(多选)</view>
<view class="select">
<view
class="s-item {{(tools.include(item.id,SteroidDailyDose) || SteroidDailyDose.length===0 && !item.id) && 'active'}}"
wx:for="{{SteroidDailyDoseColumn}}"
data-key="SteroidDailyDose"
data-index="{{index}}"
wx:key="id"
bind:tap="handleCheckbox"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">激素变化(多选)</view>
<view class="select">
<view
class="s-item {{(tools.include(item.id,SteroidDailyDoseChange) || SteroidDailyDoseChange.length===0 && !item.id) && 'active'}}"
wx:for="{{SteroidDailyDoseChangeColumn}}"
data-key="SteroidDailyDoseChange"
data-index="{{index}}"
wx:key="id"
bind:tap="handleCheckbox"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">延髓症状</view>
<view class="select">
<view
class="s-item {{PharyngealSymptoms === item.id && 'active'}}"
wx:for="{{PharyngealSymptomsColumn}}"
data-index="{{index}}"
data-key="PharyngealSymptoms"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">抗体类型</view>
<view class="select">
<view
class="s-item {{AntibodyType === item.id && 'active'}}"
wx:for="{{AntibodyTypeColumn}}"
data-index="{{index}}"
data-key="AntibodyType"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">胸腺异常</view>
<view class="select">
<view
class="s-item {{ThyroidAbnormal === item.id && 'active'}}"
wx:for="{{ThyroidAbnormalColumn}}"
data-index="{{index}}"
data-key="ThyroidAbnormal"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">既往发生危象</view>
<view class="select">
<view
class="s-item {{PreviousConvulsion === item.id && 'active'}}"
wx:for="{{PreviousConvulsionColumn}}"
data-index="{{index}}"
data-key="PreviousConvulsion"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">传统免疫抑制剂</view>
<view class="select">
<view
class="s-item {{TraditionalImmunosuppressant === item.id && 'active'}}"
wx:for="{{TraditionalImmunosuppressantColumn}}"
data-index="{{index}}"
data-key="TraditionalImmunosuppressant"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
<view class="form-item">
<view class="f-title">医保类型</view>
<view class="select">
<view
class="s-item {{MedicalInsuranceType === item.id && 'active'}}"
wx:for="{{MedicalInsuranceTypeColumn}}"
data-index="{{index}}"
data-key="MedicalInsuranceType"
bind:tap="handleRadio"
wx:key="id"
>
{{item.value}}
</view>
</view>
</view>
</view>
</view>
<view class="step2" wx:elif="{{step===2}}">
<view class="banner-date">
<view class="b-header">
<view class="title">配置发送时间</view>
<view class="tip">每天可创建1条群发任务</view>
</view>
<view class="radios">
<view class="radio-item" bind:tap="handleSendDay" data-value="{{1}}">
@ -326,7 +117,7 @@ @@ -326,7 +117,7 @@
>
<view class="content" data-place="请选择发送时间">{{time}}</view>
</picker>
<image class="icon" src="{{imageUrl}}3/icon-clock.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon110.png?t={{Timestamp}}"></image>
</view>
</block>
</view>
@ -351,7 +142,7 @@ @@ -351,7 +142,7 @@
data-id="{{item.Id}}"
>
<view class="radio">
<radio checked="{{false}}" checked="{{item.Id === PushTemplateId}}" color="#62BED0" />
<radio checked="{{false}}" checked="{{item.Id === PushTemplateId}}" color="#3379CA" />
</view>
<view class="wrap">
<view class="content">{{item.InteractMsgContent}}</view>
@ -369,7 +160,7 @@ @@ -369,7 +160,7 @@
<view class="resource" bind:tap="getTaskNum" data-btn="1">刷新</view>
</view>
<view class="clear" bind:tap="handleReset">
<image class="icon" src="{{imageUrl}}/doctor/icon-clear.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon111.png?t={{Timestamp}}"></image>
清空选项
</view>
</view>

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

@ -14,13 +14,20 @@ page { @@ -14,13 +14,20 @@ page {
z-index: 10;
background-color: #fff;
.search-wrap {
display: flex;
align-items: center;
gap: 16rpx;
.search {
flex: 1;
padding: 16rpx 32rpx;
display: flex;
align-items: center;
gap: 16rpx;
background: rgba(243, 243, 243, 1);
border-radius: 140rpx 140rpx 140rpx 140rpx;
height: 76rpx;
box-sizing: border-box;
.icon {
width: 40rpx;
@ -36,6 +43,24 @@ page { @@ -36,6 +43,24 @@ page {
color: rgba(33, 33, 32, 0.3);
}
}
.send {
flex-shrink: 0;
padding: 16rpx 28rpx;
background: linear-gradient(96deg, #293b9f 0%, #1679cb 100%);
border-radius: 48rpx;
font-size: 32rpx;
color: #ffffff;
display: flex;
align-items: center;
gap: 12rpx;
height: 76rpx;
box-sizing: border-box;
.icon {
width: 40rpx;
height: 40rpx;
}
}
}
.navbar {
margin-top: 32rpx;
display: flex;

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

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
<wxs src="../../../utils/tools.wxs" module="tools" />
<view class="page">
<view class="page-header">
<view class="search-wrap">
<view class="search">
<image class="icon" src="{{imageUrl}}icon43.png?t={{Timestamp}}"></image>
<input
@ -14,6 +15,11 @@ @@ -14,6 +15,11 @@
bind:tap="handleTapSearch"
/>
</view>
<view class="send" bind:tap="handleSendGroup">
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
群发
</view>
</view>
<view class="navbar">
<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}}">确诊IgG4-RD</view>
@ -27,7 +33,10 @@ @@ -27,7 +33,10 @@
<view class="container">
<view class="title">
<view class="name">{{item.Name}}</view>
<view class="disease" wx:if="{{item.DiagnosisTimeRange}}">病程:{{item.DiagnosisTimeRange == 1 ? '6个月以内' : item.DiagnosisTimeRange == 2 ? '6个月-3年' : '3年以上'}}</view>
<view class="disease" wx:if="{{item.DiagnosisTimeRange}}">
病程:{{item.DiagnosisTimeRange == 1 ? '6个月以内' : item.DiagnosisTimeRange == 2 ? '6个月-3年' :
'3年以上'}}
</view>
</view>
<view class="replay-date">邀约时间:{{tools.formatDate(item.InviteTime)}}</view>
<view class="remark">备注:{{item.DoctorRemark || '无'}}</view>

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

@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
"usingComponents": {
"van-icon": "@vant/weapp/icon/index",
"van-popup": "@vant/weapp/popup/index",
"toast": "/components/toast/index"
"toast": "/components/toast/index",
"van-sticky": "@vant/weapp/sticky/index",
"ec-canvas": "/components/ec-canvas/ec-canvas"
}
}

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

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
page {
background-color: #fcfcfc;
padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
}
.page {
@ -6,6 +7,7 @@ page { @@ -6,6 +7,7 @@ page {
overflow-x: hidden;
padding-bottom: 200rpx;
.banner {
position: relative;
margin: 40rpx 40rpx 0;
padding: 48rpx 32rpx;
display: flex;
@ -13,6 +15,25 @@ page { @@ -13,6 +15,25 @@ page {
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 1px solid #f4f3f3;
box-shadow: 0 4rpx 32rpx 0 rgba(0, 0, 0, 0.08);
.generate-pdf {
position: absolute;
right: 0;
top: 0;
padding: 0 24rpx;
height: 56rpx;
background: linear-gradient(96deg, #293b9f 0%, #1679cb 100%);
font-size: 28rpx;
color: rgba(255, 255, 255, 1);
border-radius: 0 12rpx 0 24rpx;
line-height: 56rpx;
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 28rpx;
height: 28rpx;
}
}
.avatar {
flex-shrink: 0;
.avatar-img {
@ -45,8 +66,32 @@ page { @@ -45,8 +66,32 @@ page {
}
}
}
.nav {
padding: 32rpx 40rpx;
background-color: #fcfcfc;
.nav-wrap {
background-color: rgba(243, 243, 243, 1);
padding: 8rpx;
border-radius: 12rpx;
display: flex;
align-items: center;
.nav-item {
flex: 1;
padding: 10rpx;
font-size: 32rpx;
color: rgba(33, 33, 32, 0.4);
line-height: 48rpx;
text-align: center;
&.active {
background-color: #fff;
border-radius: 8rpx;
color: rgba(22, 121, 203, 1);
}
}
}
}
.container {
margin: 32rpx 40rpx;
margin: 0 40rpx 32rpx;
padding: 0 32rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.08);
@ -79,16 +124,265 @@ page { @@ -79,16 +124,265 @@ page {
}
}
}
.chart {
margin: 32rpx 40rpx;
.chart-header {
margin-top: 48rpx;
display: flex;
gap: 24rpx;
.type {
padding: 8rpx 32rpx;
font-size: 32rpx;
color: rgba(34, 34, 34, 0.6);
background-color: rgba(246, 246, 246, 1);
border-radius: 58rpx;
display: flex;
align-items: center;
gap: 14rpx;
.icon {
font-size: 24rpx;
color: rgba(34, 34, 34, 0.6);
transform: rotate(90deg);
}
}
.date {
padding: 8rpx 32rpx;
font-size: 32rpx;
color: rgba(34, 34, 34, 0.6);
background-color: rgba(246, 246, 246, 1);
border-radius: 58rpx;
display: flex;
align-items: center;
gap: 14rpx;
.line {
margin: 0 10rpx;
}
.icon {
transform: rotate(90deg);
color: rgba(34, 34, 34, 0.6);
font-size: 24rpx;
}
}
}
.chart-container {
margin-top: 32rpx;
padding: 32rpx;
background-color: #fff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.08);
.c-header {
display: flex;
justify-content: space-between;
.title {
font-size: 36rpx;
color: rgba(0, 0, 0, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 24rpx;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
background: rgba(22, 121, 203, 1);
border-radius: 32rpx 32rpx 32rpx 32rpx;
}
}
.sub {
font-size: 32rpx;
color: rgba(34, 34, 34, 0.4);
}
}
.w-chart {
height: 460rpx;
}
}
}
.case-report {
margin: 64rpx 40rpx 0;
.c-header {
display: flex;
align-items: center;
gap: 32rpx;
.name {
flex-shrink: 0;
font-size: 36rpx;
color: rgba(0, 0, 0, 1);
font-weight: bold;
text-align: center;
position: relative;
z-index: 1;
&::after {
margin-top: -20rpx;
display: block;
content: '';
height: 20rpx;
background: linear-gradient(90deg, #1679cb 0%, rgba(22, 121, 203, 0) 100%);
border-radius: 0rpx 0rpx 0rpx 0rpx;
opacity: 0.2;
}
}
}
.list {
.row {
margin-top: 32rpx;
padding: 34rpx;
background-color: #fff;
border-radius: 24rpx;
display: flex;
gap: 24rpx;
box-shadow: 0rpx 8rpx 40rpx 0rpx rgba(0, 0, 0, 0.08);
.icon {
flex-shrink: 0;
width: 96rpx;
height: 96rpx;
}
.col {
.name {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
}
.content {
margin-top: 8rpx;
font-size: 28rpx;
color: rgba(34, 34, 34, 0.5);
}
}
}
}
}
.record-list {
margin: 32rpx 40rpx 0;
.card {
display: flex;
gap: 20rpx;
.aside {
display: flex;
flex-direction: column;
align-items: center;
flex-shrink: 0;
.line-top,
.line-bottom {
border-right: 1px dashed rgba(34, 34, 34, 0.2);
}
.line-top {
flex-shrink: 0;
}
.line-bottom {
flex: 1;
}
.circle {
flex-shrink: 0;
width: 20rpx;
height: 20rpx;
border-radius: 50%;
background-color: rgba(22, 121, 203, 1);
background-clip: content-box;
border: 6rpx solid rgba(22, 121, 203, 0.1);
}
}
.wrap {
flex: 1;
min-width: 0;
padding-bottom: 48rpx;
.date {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
line-height: 1;
}
.w-container {
position: relative;
margin-top: 24rpx;
padding: 32rpx;
border-radius: 24rpx;
background-color: #fff;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.08);
.del {
position: absolute;
top: 1px;
right: 1px;
padding: 8rpx 16rpx;
background-color: rgba(246, 246, 246, 1);
font-size: 28rpx;
font-weight: bold;
color: rgba(34, 34, 34, 1);
border-radius: 0 24rpx 0 24rpx;
}
.name {
font-size: 32rpx;
color: rgba(34, 34, 34, 1);
}
.content {
margin-top: 16rpx;
display: flex;
align-items: center;
justify-content: space-between;
.c-left {
display: flex;
gap: 8rpx;
align-items: baseline;
line-height: 84rpx;
.num {
font-size: 72rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
}
.sub {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
}
.icon {
width: 44rpx;
height: 51rpx;
}
}
.status {
font-size: 32rpx;
color: rgba(14, 182, 109, 1);
padding: 0 12rpx;
background-color: rgba(14, 182, 109, 0.08);
border-radius: 8rpx;
}
}
.row {
margin-top: 32rpx;
padding: 32rpx;
background-color: rgba(246, 246, 246, 1);
border-radius: 16rpx;
display: flex;
align-items: center;
gap: 8rpx;
.col {
flex: 1;
.c-name {
font-size: 32rpx;
color: rgba(34, 34, 34, 0.5);
}
.c-content {
margin-top: 16rpx;
font-size: 40rpx;
color: rgba(34, 34, 34, 1);
}
}
}
}
}
}
}
.footer {
padding: 0 40rpx;
padding: 32rpx 40rpx calc(env(safe-area-inset-bottom) + 32rpx);
position: fixed;
bottom: calc(env(safe-area-inset-bottom) + 32rpx);
bottom: 0;
left: 0;
width: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
gap: 30rpx;
background-color: #fff;
box-shadow: 0rpx -12rpx 44rpx 0rpx rgba(0, 0, 0, 0.05);
.remark {
flex: 1;
height: 96rpx;

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

@ -2,6 +2,8 @@ import dayjs from 'dayjs' @@ -2,6 +2,8 @@ import dayjs from 'dayjs'
const app = getApp<IAppOption>()
let echarts: any = null
Page({
data: {
toastShow: false,
@ -106,16 +108,170 @@ Page({ @@ -106,16 +108,170 @@ Page({
2: '6个月-3年',
3: '3年以上',
},
caseReportList: [
{
icon: 'icon142.png',
name: '门诊病历及处方',
content: '医生手写或电脑打印的病历、处方',
},
{ icon: 'icon127.png', name: '检验报告', content: '抽血检测的IgG4、IgG、ESR等' },
{ icon: 'icon128.png', name: '影像学检查', content: '超声/CT/MRI的描述结论、电子胶片' },
{ icon: 'icon129.png', name: '病理诊断及活检', content: '受累组织穿刺或切除免疫组化报告' },
{ icon: 'icon130.png', name: '外周血免疫功能评估', content: '免疫细胞亚群、淋巴细胞比例测定' },
],
},
onLoad(option) {
ecDataTrendComponent: null as any,
async onLoad(option) {
this.setData({
id: option.id,
})
echarts = await require.async('../../../resource/components/echart/echarts.js')
this.ecDataTrendComponent = this.selectComponent('#chart1')
this.initChart()
app.waitLogin().then(async (_res) => {
this.getDoctorDetail()
await this.getDetail()
})
},
initChart(defaultList = []) {
const list: any = [
...defaultList,
{ Date: '2026-7-7', TotalScore: 100, InjectionBottles: false },
{ Date: '2026-7-8', TotalScore: 1000, InjectionBottles: false },
]
return new Promise((reslove) => {
this.ecDataTrendComponent.init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const option: any = {
tooltip: {
show: false,
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
confine: true,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
textStyle: {
color: '#fff',
fontSize: 10,
},
order: 'seriesDesc',
},
grid: {
top: '30',
left: '0',
right: '0',
bottom: '10',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
alignWithLabel: true,
},
axisLine: {
lineStyle: {
color: 'rgba(34, 34, 34, 0.20)',
type: 'dashed',
},
},
data: list.map((item) => dayjs(item.Date).format('MM-DD')),
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
axisLabel: {
color: 'rgba(34, 34, 34, 0.40)',
},
splitLine: {
lineStyle: {
color: 'rgba(34, 34, 34, 0.20)',
type: 'dashed',
},
},
},
],
series: [
{
name: '总分',
data: list.length ? list.map((item) => item.TotalScore) : [25],
barWidth: '16',
label: {
show: true,
position: 'top',
color: 'rgba(22, 121, 203, 1)',
},
type: 'line',
symbol: 'circle',
symbolSize: 8,
showSymbol: list.length >= 1,
connectNulls: true,
z: 10,
itemStyle: {
color: 'rgba(22, 121, 203, 1)',
},
markLine: {
symbol: ['none', 'none'],
data: [
{
name: '135 安全区',
yAxis: 135,
label: {
formatter: '{b}',
position: 'insideMiddle',
color: 'rgba(22, 121, 203, 1)',
fontSize: '10',
},
lineStyle: {
cap: '',
color: 'rgba(22, 121, 203, 1)',
type: 'dashed',
},
},
],
},
markArea: {
itemStyle: {
color: 'rgba(22, 121, 203, 0.16)',
},
data: [
[
{
yAxis: 0,
},
{
yAxis: 135,
},
],
],
},
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: 0,
endValue: 4,
filterMode: 'none',
},
}
chart.setOption(option)
reslove(chart)
return chart
})
})
},
getDoctorDetail() {
wx.ajax({
method: 'GET',
@ -170,7 +326,10 @@ Page({ @@ -170,7 +326,10 @@ Page({
this.setData({
detail: {
...res,
hideName: res.Name.length <= 2 ? res.Name.charAt(0) + '*' : res.Name.charAt(0) + '*' + res.Name.charAt(res.Name.length - 1),
hideName:
res.Name.length <= 2
? res.Name.charAt(0) + '*'
: res.Name.charAt(0) + '*' + res.Name.charAt(res.Name.length - 1),
hideTelephone: res.Telephone ? res.Telephone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') : '',
},
})

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

@ -1,6 +1,10 @@ @@ -1,6 +1,10 @@
<wxs src="../../../utils/tools.wxs" module="tools" />
<view class="page">
<view class="banner">
<view class="generate-pdf">
一键生成病历
<image class="icon" src="/images/icon144.png"></image>
</view>
<view class="avatar">
<image class="avatar-img" src="{{detail.UserImg}}"></image>
</view>
@ -16,6 +20,15 @@ @@ -16,6 +20,15 @@
</view>
</view>
</view>
<van-sticky>
<view class="nav">
<view class="nav-wrap">
<view class="nav-item active">基本信息</view>
<view class="nav-item">就诊记录</view>
</view>
</view>
</van-sticky>
<view class="container">
<block wx:if="{{detail.HealthQA && detail.HealthQA.hasSubmitted && detail.HealthQA.questions.length > 0}}">
<view class="row" wx:for="{{detail.HealthQA.questions}}" wx:key="QuestionNo">
@ -23,7 +36,10 @@ @@ -23,7 +36,10 @@
<view class="content" wx:if="{{item.AnswerTextStr}}">
<text wx:if="{{!item.isAnswerArray}}">{{item.AnswerTextStr}}</text>
<block wx:else>
<view wx:for="{{item.AnswerTextArr}}" wx:for-item="ans" wx:key="index">{{ans}}<text wx:if="{{item.OtherText && index === item.AnswerTextArr.length - 1}}">({{item.OtherText}})</text></view>
<view wx:for="{{item.AnswerTextArr}}" wx:for-item="ans" wx:key="index">
{{ans}}
<text wx:if="{{item.OtherText && index === item.AnswerTextArr.length - 1}}">({{item.OtherText}})</text>
</view>
</block>
</view>
<view class="content" wx:else>无</view>
@ -34,6 +50,97 @@ @@ -34,6 +50,97 @@
<view class="content">{{detail.DoctorRemark || '无'}}</view>
</view>
</view>
<view class="chart">
<view class="chart-header">
<picker>
<view class="type">
按年
<van-icon class="icon" name="play" />
</view>
</picker>
<view class="date">
<picker
bindchange="handleChange"
class="start"
end="{{EndMonth}}"
fields="day"
mode="date"
model:value="{{BeginMonth}}"
>
2025.08
</picker>
<view class="line">-</view>
<picker
bindchange="handleChange"
class="end"
fields="day"
mode="date"
model:value="{{EndMonth}}"
start="{{BeginMonth}}"
>
2025.09
</picker>
<van-icon class="icon" name="play" />
</view>
</view>
<view class="chart-container">
<view class="c-header">
<view class="title">血清IgG4趋势监测</view>
<view class="sub">单位mg/dL</view>
</view>
<view class="w-chart">
<ec-canvas id="chart1" ec="{{ ec }}"></ec-canvas>
</view>
</view>
</view>
<view class="case-report">
<view class="c-header">
<view class="name">我的病历报告</view>
</view>
<view class="list">
<view class="row" wx:for="{{caseReportList}}" wx:key="icon" bind:tap="handleDetail" data-name="{{item.name}}">
<image class="icon" src="{{imageUrl}}{{item.icon}}?t={{Timestamp}}"></image>
<view class="col">
<view class="name">{{item.name}}</view>
<view class="content">{{item.content}}</view>
</view>
</view>
</view>
</view>
<view class="record-list">
<view class="card" wx:for="{{10}}" wx:key="index" bind:tap="handleDetail">
<view class="aside">
<view class="line-top"></view>
<view class="circle"></view>
<view class="line-bottom"></view>
</view>
<view class="wrap">
<view class="date">2025-06-11</view>
<view class="w-container">
<view class="name">lgG4值</view>
<view class="content">
<view class="c-left">
<view class="num">385</view>
<view class="sub">mg/dL</view>
<image class="icon" src="{{imageUrl}}icon143.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon120.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="row">
<view class="col">
<view class="c-name">激素用量</view>
<view class="c-content">10mg/天</view>
</view>
<view class="col">
<view class="c-name">下次复诊时间</view>
<view class="c-content">2025.06.11</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="footer">
<view class="remark" bind:tap="handleRemark">备注</view>

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

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "任务列表",
"usingComponents": {
"navBar": "/components/navBar/navBar"
}

30
src/doctor/pages/d_taskList/index.scss

@ -1,15 +1,18 @@ @@ -1,15 +1,18 @@
page {
background: #f2f4f5;
background: rgba(246, 246, 246, 1);
}
.page {
padding-bottom: 300rpx;
.card {
margin: 30rpx;
background-color: rgba(246, 246, 246, 1);
border: 1px solid rgba(255, 255, 255, 1);
border-radius: 24rpx;
.card-body {
padding: 32rpx 30rpx;
background-color: #fff;
border-radius: 24rpx;
.c-header {
padding-bottom: 32rpx;
display: flex;
@ -20,7 +23,7 @@ page { @@ -20,7 +23,7 @@ page {
.id {
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
color: rgba(34, 34, 34, 1);
}
.status {
@ -66,7 +69,7 @@ page { @@ -66,7 +69,7 @@ page {
.content {
flex: 1;
font-size: 32rpx;
color: rgba(40, 48, 49, 1);
color: rgba(34, 34, 34, 1);
&:empty::after {
display: block;
@ -96,9 +99,10 @@ page { @@ -96,9 +99,10 @@ page {
}
}
}
}
.c-footer {
padding: 40rpx 0 0;
padding: 24rpx 30rpx;
border-top: 1px solid rgba(242, 244, 245, 1);
display: flex;
gap: 28rpx;
@ -110,7 +114,7 @@ page { @@ -110,7 +114,7 @@ page {
color: rgba(173, 179, 180, 1);
.num {
color: rgba(103, 186, 202, 1);
color: rgba(22, 121, 203, 1);
font-weight: bold;
}
}
@ -125,13 +129,13 @@ page { @@ -125,13 +129,13 @@ page {
.copy {
padding: 12rpx 30rpx;
font-size: 32rpx;
font-size: 28rpx;
display: flex;
align-items: center;
justify-content: center;
color: rgba(103, 186, 202, 1);
color: rgba(22, 121, 203, 1);
border-radius: 88rpx 88rpx 88rpx 88rpx;
border: 1rpx solid #67baca;
border: 1rpx solid rgba(22, 121, 203, 1);
}
.send {
@ -139,7 +143,7 @@ page { @@ -139,7 +143,7 @@ page {
display: flex;
align-items: center;
justify-content: center;
color: rgba(40, 48, 49, 1);
color: rgba(34, 34, 34, 1);
border-radius: 88rpx 88rpx 88rpx 88rpx;
border: 1rpx solid rgba(39, 58, 101, 0.15);
}
@ -149,7 +153,7 @@ page { @@ -149,7 +153,7 @@ page {
display: flex;
align-items: center;
justify-content: center;
color: rgba(40, 48, 49, 1);
color: rgba(34, 34, 34, 1);
border-radius: 88rpx 88rpx 88rpx 88rpx;
border: 1rpx solid rgba(39, 58, 101, 0.15);
}
@ -162,8 +166,8 @@ page { @@ -162,8 +166,8 @@ page {
bottom: 100rpx;
left: 50%;
transform: translateX(-50%);
width: 178rpx;
height: 178rpx;
width: 168rpx;
height: 168rpx;
.icon {
width: 100%;

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

@ -5,7 +5,7 @@ const app = getApp<IAppOption>() @@ -5,7 +5,7 @@ const app = getApp<IAppOption>()
Page({
data: {
list: [] as any[],
list: [{}] as any[],
pagination: {
page: 1,
pages: 1,
@ -32,7 +32,7 @@ Page({ @@ -32,7 +32,7 @@ Page({
},
onShow() {
app.waitLogin().then(() => {
this.getList()
// this.getList()
})
},
getList(newPage = 1) {

21
src/doctor/pages/d_taskList/index.wxml

@ -1,9 +1,6 @@ @@ -1,9 +1,6 @@
<view
class="page"
style="padding-top: {{bottom}}px;background: url({{imageUrl}}/doctor/my-bg.png?t={{Timestamp}}) no-repeat top center / 100% 740rpx"
>
<navBar title="任务列表" background="{{background}}" back bind:back="handleBack" fixed></navBar>
<view class="page">
<view class="card" wx:for="{{list}}" wx:key="Id" bind:tap="handleDetail" data-id="{{item.Id}}">
<view class="card-body">
<view class="c-header">
<view class="id">ID:{{item.IdNumber}}</view>
<view class="status status{{item.Status}}">{{Status[item.Status]}}</view>
@ -33,7 +30,9 @@ @@ -33,7 +30,9 @@
</view>
<view class="f-row" wx:if="{{item.FilterCondition.BindStartDate || item.FilterCondition.BindEndDate}}">
<view class="f-label">绑定时间:</view>
<view class="f-content">{{item.FilterCondition.BindStartDate || '---'}}~{{item.FilterCondition.BindEndDate || '---'}}</view>
<view class="f-content">
{{item.FilterCondition.BindStartDate || '---'}}~{{item.FilterCondition.BindEndDate || '---'}}
</view>
</view>
<view class="f-row" wx:if="{{item.FilterCondition.IsThisWeekAdl}}">
<view class="f-label">本周ADL测评:</view>
@ -77,7 +76,8 @@ @@ -77,7 +76,8 @@
<view class="f-label">激素用量(多选):</view>
<view class="f-content">
<block wx:for="{{item.FilterCondition.SteroidDailyDose}}" wx:for-item="subItem" wx:key="subItem">
{{SteroidDailyDoseObj[subItem]}}{{index < item.FilterCondition.SteroidDailyDose.length - 1 ? ',' : ''}}
{{SteroidDailyDoseObj[subItem]}}{{index < item.FilterCondition.SteroidDailyDose.length - 1 ? ',' :
''}}
</block>
</view>
</view>
@ -85,8 +85,8 @@ @@ -85,8 +85,8 @@
<view class="f-label">激素变化(多选):</view>
<view class="f-content">
<block wx:for="{{item.FilterCondition.SteroidDailyDoseChange}}" wx:for-item="subItem" wx:key="subItem">
{{SteroidDailyDoseChangeObj[subItem]}}{{index < item.FilterCondition.SteroidDailyDoseChange.length - 1 ?
',' : ''}}
{{SteroidDailyDoseChangeObj[subItem]}}{{index < item.FilterCondition.SteroidDailyDoseChange.length - 1
? ',' : ''}}
</block>
</view>
</view>
@ -119,6 +119,7 @@ @@ -119,6 +119,7 @@
</view>
</view>
</view>
</view>
<view class="c-footer">
<view class="total">
共筛选出
@ -138,6 +139,6 @@ @@ -138,6 +139,6 @@
</view>
<pagination pagination="{{pagination}}"></pagination>
<view class="create" bind:tap="handleCreate">
<image class="icon" src="{{imageUrl}}/doctor/icon-create.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon109.png?t={{Timestamp}}"></image>
</view>
</view>

9
src/gift/pages/record/index.json

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
{
"navigationBarTitleText": "就诊记录",
"navigationBarBackgroundColor": "#F6F6F6",
"usingComponents": {
"uploadFile": "/components/uploadFile/index",
"van-icon": "@vant/weapp/icon/index",
"toast": "/components/toast/index"
}
}

590
src/gift/pages/record/index.scss

@ -0,0 +1,590 @@ @@ -0,0 +1,590 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
.page-header {
padding: 50rpx 64rpx 0;
display: flex;
justify-content: space-between;
.item {
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
.order {
width: 52rpx;
height: 52rpx;
text-align: center;
font-size: 36rpx;
color: rgba(34, 34, 34, 0.3);
line-height: 52rpx;
border-radius: 50%;
background-color: rgba(236, 236, 236, 1);
border: 8rpx solid rgba(255, 255, 255, 0);
background-clip: content-box;
.icon {
width: 28rpx;
height: 28rpx;
}
}
.order-end {
width: 52rpx;
height: 52rpx;
}
.name {
margin-top: 4rpx;
font-size: 28rpx;
color: rgba(34, 34, 34, 0.4);
&.current {
color: rgba(14, 182, 109, 1);
}
}
&.active {
.order {
background-color: rgba(14, 182, 109, 1);
border: 8rpx solid #e5f2ec;
color: #fff;
opacity: 1;
}
}
}
.line {
margin: 30rpx -10rpx 0;
flex: 1;
border-top: 1px dashed rgba(34, 34, 34, 0.1);
&.active {
border-color: rgba(14, 182, 109, 1);
}
}
}
.step1 {
margin: 32rpx;
background-color: rgba(255, 255, 255, 0.9);
border-radius: 24rpx;
.s-header {
padding: 20rpx 0;
display: flex;
align-items: start;
justify-content: center;
.title {
margin-top: 48rpx;
width: 410rpx;
height: 122rpx;
}
.badge {
margin-left: -24rpx;
width: 224rpx;
height: 188rpx;
}
}
.s-form {
padding: 24rpx 40rpx 40rpx;
background-color: #fff;
border-radius: 16rpx;
box-shadow: 0rpx 4rpx 40rpx 0rpx rgba(0, 0, 0, 0.08);
.form-item {
margin-top: 32rpx;
padding-bottom: 32rpx;
border-bottom: 1px dashed rgba(34, 34, 34, 0.1);
.label {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 12rpx;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
background: #0eb66d;
border-radius: 44rpx 44rpx 44rpx 44rpx;
}
}
.date {
margin-top: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 32rpx;
height: 96rpx;
background: #f6f6f6;
border-radius: 16rpx 16rpx 16rpx 16rpx;
gap: 24rpx;
.icon1 {
flex-shrink: 0;
width: 44rpx;
height: 44rpx;
}
.icon2 {
flex-shrink: 0;
width: 40rpx;
height: 40rpx;
}
.content {
flex: 1;
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
&:empty::after {
content: attr(data-place);
color: rgba(34, 34, 34, 0.7);
}
}
}
}
}
}
.step1-btn {
margin: 82rpx 40rpx 0;
height: 96rpx;
font-size: 40rpx;
color: rgba(255, 255, 255, 1);
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(86deg, #0eb66d 0%, #00d277 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
}
.step2 {
.tip-card {
margin: 32rpx;
padding: 16rpx 32rpx;
font-size: 32rpx;
color: rgba(248, 167, 28, 1);
line-height: 48rpx;
background-color: rgba(255, 248, 236, 1);
border-radius: 24rpx;
border: 1px solid #fff;
}
.form-card {
margin: 32rpx;
padding: 32rpx;
border-radius: 24rpx;
background-color: #fff;
.f-header {
display: flex;
align-items: center;
justify-content: space-between;
.label {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
display: flex;
align-items: center;
line-height: 48rpx;
&::before {
margin-right: 24rpx;
margin-left: -32rpx;
width: 8rpx;
height: 36rpx;
background: #0eb66d;
content: '';
border-radius: 0 8rpx 8rpx 0;
}
&.required::after {
display: inline;
content: '*';
color: rgba(211, 62, 48, 1);
bottom: none;
padding: 0;
background: transparent;
}
&::after {
padding: 0 16rpx;
line-height: 40rpx;
content: '选填';
background-color: rgba(34, 34, 34, 0.06);
border-radius: 8rpx;
font-size: 28rpx;
color: rgba(34, 34, 34, 1);
font-weight: normal;
}
}
.example {
font-size: 32rpx;
color: rgba(14, 182, 109, 1);
}
}
.content {
margin-top: 16rpx;
font-size: 32rpx;
color: rgba(34, 34, 34, 0.5);
}
.upload-container {
margin-top: 32rpx;
padding: 0;
width: 300rpx;
height: 168rpx;
box-sizing: border-box;
background: #f3fffa;
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx dashed #0eb66d;
overflow: hidden;
.icon {
display: block;
margin: 28rpx auto 0;
width: 48rpx;
height: 48rpx;
}
.name {
margin-top: 18rpx;
text-align: center;
font-size: 28rpx;
color: rgba(14, 182, 109, 1);
}
}
.upload-preview {
position: relative;
margin-top: 32rpx;
width: 300rpx;
height: 168rpx;
border-radius: 24rpx;
.upload-img {
display: block;
width: 100%;
height: 100%;
border-radius: 24rpx;
}
.del {
position: absolute;
top: 0;
right: 0;
color: #fff;
font-size: 28rpx;
padding: 4rpx 12rpx;
background-color: rgba(0, 0, 0, 0.8);
border-radius: 0 24rpx 0 24rpx;
}
}
}
.step2-footer {
position: sticky;
bottom: 0;
left: 0;
width: 100%;
padding: 32rpx 32rpx calc(env(safe-area-inset-bottom));
background-color: #fff;
box-sizing: border-box;
display: flex;
align-items: center;
gap: 26rpx;
.prev {
flex: 1;
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 36rpx;
color: rgba(14, 182, 109, 1);
background: #ffffff;
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #0eb66d;
box-sizing: border-box;
}
.next {
flex: 1;
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 36rpx;
color: #fff;
background: linear-gradient(86deg, #0eb66d 0%, #00d277 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
}
}
}
.step3 {
.tip-card {
margin: 32rpx;
padding: 16rpx 32rpx;
font-size: 32rpx;
color: rgba(248, 167, 28, 1);
line-height: 48rpx;
background-color: rgba(255, 248, 236, 1);
border-radius: 24rpx;
border: 1px solid #fff;
}
.form-card {
margin: 32rpx;
padding: 32rpx;
border-radius: 24rpx;
background-color: #fff;
.f-header {
display: flex;
align-items: center;
justify-content: space-between;
.label {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
line-height: 48rpx;
display: flex;
&::before {
display: inline-block;
margin-right: 24rpx;
margin-left: -32rpx;
width: 8rpx;
height: 36rpx;
background: #0eb66d;
content: '';
border-radius: 0 8rpx 8rpx 0;
}
&.doboule::before {
height: 84rpx;
}
}
}
.num {
margin-top: 24rpx;
display: flex;
align-items: center;
gap: 20rpx;
.wrap {
padding: 0 32rpx;
background: #f6f6f6;
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
gap: 24rpx;
.input {
flex: 1;
height: 96rpx;
line-height: 96rpx;
font-size: 36rpx;
color: rgba(0, 0, 0, 1);
}
.place-input {
color: rgba(0, 0, 0, 0.4);
}
.icon {
width: 44rpx;
height: 44rpx;
}
}
.sub {
flex-shrink: 0;
font-size: 36rpx;
color: rgba(34, 34, 34, 0.3);
}
}
.check-group {
margin-top: 32rpx;
display: grid;
gap: 24rpx;
&.col1 {
grid-template-columns: repeat(1, 1fr);
}
&.col2 {
grid-template-columns: repeat(2, 1fr);
}
.check-item {
display: flex;
align-items: center;
gap: 24rpx;
padding: 0 32rpx;
height: 96rpx;
border-radius: 16rpx;
background-color: rgba(248, 248, 248, 1);
border: 1px solid rgba(248, 248, 248, 1);
box-sizing: border-box;
.check {
flex-shrink: 0;
width: 40rpx;
height: 40rpx;
border-radius: 8rpx;
border: 1px solid rgba(34, 34, 34, 0.2);
display: flex;
align-items: center;
justify-content: center;
.icon {
display: none;
}
}
.content {
font-size: 36rpx;
color: rgba(34, 34, 34, 0.7);
}
&.active {
border-color: rgba(14, 182, 109, 1);
background-color: rgba(14, 182, 109, 0.08);
.check {
border-color: rgba(14, 182, 109, 1);
background-color: rgba(14, 182, 109, 1);
.icon {
color: #fff;
display: block;
}
}
}
}
}
.num-select {
margin-top: 32rpx;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24rpx 22rpx;
.n-item {
display: flex;
align-items: center;
justify-content: center;
gap: 24rpx;
height: 96rpx;
border-radius: 16rpx;
background-color: rgba(248, 248, 248, 1);
border: 1px solid rgba(248, 248, 248, 1);
box-sizing: border-box;
.content {
font-size: 36rpx;
color: rgba(34, 34, 34, 0.7);
}
&.active {
border-color: rgba(14, 182, 109, 1);
background-color: rgba(14, 182, 109, 0.08);
}
}
}
.custom-num {
margin-top: 24rpx;
padding: 0 32rpx;
background: #f6f6f6;
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
gap: 24rpx;
.input {
flex: 1;
height: 96rpx;
line-height: 96rpx;
font-size: 36rpx;
color: rgba(0, 0, 0, 1);
}
.place-input {
color: rgba(0, 0, 0, 0.4);
}
.sub {
font-size: 36rpx;
color: rgba(0, 0, 0, 0.8);
}
}
}
.step3-footer {
position: sticky;
bottom: 0;
left: 0;
width: 100%;
padding: 32rpx 32rpx calc(env(safe-area-inset-bottom));
background-color: #fff;
box-sizing: border-box;
display: flex;
align-items: center;
gap: 26rpx;
.prev {
flex: 1;
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 36rpx;
color: rgba(14, 182, 109, 1);
background: #ffffff;
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #0eb66d;
box-sizing: border-box;
}
.submit {
flex-shrink: 0;
width: 406rpx;
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 36rpx;
color: #fff;
background: linear-gradient(86deg, #0eb66d 0%, #00d277 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
}
}
}
}
#drug-page {
.page-header {
.name.current {
color: rgba(89, 86, 233, 1);
}
.item.active {
.order {
background-image: linear-gradient(274deg, #5956e9 0%, #b384f4 100%);
border-color: rgba(89, 86, 233, 0.08);
}
}
.line.active {
border-color: rgba(89, 86, 233, 1);
}
}
.step1 {
.label::before {
background: rgba(89, 86, 233, 1);
}
}
.step1-btn {
background: linear-gradient(274deg, #5956e9 0%, #b384f4 100%);
}
.step2 {
.form-card {
.label::before {
background: rgba(89, 86, 233, 1);
}
.example {
color: rgba(89, 86, 233, 1);
}
.upload-container {
border-color: rgba(89, 86, 233, 1);
background-color: rgba(249, 249, 255, 1);
.name {
color: rgba(89, 86, 233, 1);
}
}
}
}
.step2-footer {
.prev {
color: rgba(89, 86, 233, 1);
border-color: rgba(89, 86, 233, 1);
}
.next {
background: linear-gradient(274deg, #5956e9 0%, #b384f4 100%);
}
}
.step3 {
.f-header {
.label::before {
background: rgba(89, 86, 233, 1);
}
}
.check-group {
.check-item.active {
border-color: rgba(89, 86, 233, 1);
background-color: rgba(89, 86, 233, 0.08);
.check {
border-color: rgba(89, 86, 233, 1);
background-color: rgba(89, 86, 233, 1);
}
}
}
}
.step3-footer {
.prev {
color: rgba(89, 86, 233, 1);
border-color: rgba(89, 86, 233, 1);
}
.submit {
background: linear-gradient(274deg, #5956e9 0%, #b384f4 100%);
}
}
}

39
src/gift/pages/record/index.ts

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
const _app = getApp<IAppOption>()
Page({
data: {
step: 3,
toastShow: false,
toastType: '',
// toastType: 'oneWrite',
// toastType: 'noWrite', // 用户信息未填全的提醒弹窗
toastParams: {} as any,
},
onLoad() {},
handleSetData(e: WechatMiniprogram.CustomEvent) {
const imgUrl = e.detail[0].imgUrl
this.setData({
uploadImg: imgUrl,
audit: true,
})
},
handleExample(e) {
wx.previewImage({
urls: [e.currentTarget.dataset.url],
})
},
handleToastOk() {
const { toastType } = this.data
},
handleToastCancel(_e = null) {
const { toastType } = this.data
this.setData({
toastShow: false,
toastType: '',
toastParams: '',
})
},
})
export {}

227
src/gift/pages/record/index.wxml

@ -0,0 +1,227 @@ @@ -0,0 +1,227 @@
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<view class="page-header">
<view class="item active">
<view class="order">
<block wx:if="{{step<=1}}">1</block>
<image wx:else class="icon" src="{{imageUrl}}icon112.png?t={{Timestamp}}"></image>
</view>
<view class="name {{step==1 && 'current'}}">时间记录</view>
</view>
<view class="line {{step>1 &&'active'}}"></view>
<view class="item {{step>1 &&'active'}}">
<view class="order">
<block wx:if="{{step<=2}}">2</block>
<image wx:else class="icon" src="{{imageUrl}}icon112.png?t={{Timestamp}}"></image>
</view>
<view class="name {{step==2 && 'current'}}">上传资料</view>
</view>
<view class="line {{step>2 &&'active'}}"></view>
<view class="item {{step>2 &&'active'}}">
<view class="order">3</view>
<view class="name {{step==3 && 'current'}}">核对指标</view>
</view>
</view>
<block wx:if="{{step==1}}">
<view class="step1">
<view class="s-header">
<image class="title" src="{{imageUrl}}{{theme === 'DRUG' ? 'title5' : 'title4'}}.png?t={{Timestamp}}"></image>
<image class="badge" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon133' : 'icon113'}}.png?t={{Timestamp}}"></image>
</view>
<view class="s-form">
<view class="form-item">
<view class="label">我的本次就诊时间</view>
<picker>
<view class="date">
<image class="icon1" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon134' : 'icon114'}}.png?t={{Timestamp}}"></image>
<view class="content" data-place="选择开始时间"></view>
<image class="icon2" src="{{imageUrl}}icon115.png?t={{Timestamp}}"></image>
</view>
</picker>
</view>
<view class="form-item">
<view class="label">我的下次就诊时间</view>
<picker>
<view class="date">
<image class="icon1" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon134' : 'icon114'}}.png?t={{Timestamp}}"></image>
<view class="content" data-place="选择开始时间"></view>
<image class="icon2" src="{{imageUrl}}icon115.png?t={{Timestamp}}"></image>
</view>
</picker>
</view>
</view>
</view>
<view class="step1-btn">下一步</view>
</block>
<view class="step2" wx:if="{{step==2}}">
<view class="tip-card">门诊材料会分类存储到 "我的-健康档案",方便您查看对比。</view>
<view class="form-card">
<view class="f-header">
<view class="label required">门诊病历及处方</view>
<view class="example" bind:tap="handleExample" data-url="{{imageUrl}}{{theme === 'DRUG' ? 'bg42' : 'bg40'}}.png?t={{Timestamp}}">示意</view>
</view>
<view class="content">医生手写或电脑打印的病历、处方</view>
<uploadFile fileTypes="{{['image']}}" bind:setData="handleSetData" maxNum="{{1}}" isSlot="{{true}}">
<view class="upload-container" wx:if="{{!uploadImg}}">
<image class="icon" wx:if="{{!uploadImg}}" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon135' : 'icon48'}}.png?t={{Timestamp}}"></image>
<view class="name" wx:if="{{!uploadImg}}">添加文件照片</view>
</view>
<view class="upload-preview" wx:else>
<image class="upload-img" mode="aspectFill" src="{{uploadImg}}"></image>
<view class="del">
<van-icon name="cross" />
</view>
</view>
</uploadFile>
</view>
<view class="form-card">
<view class="f-header">
<view class="label required">检验报告(IgG4化验单等)</view>
<view class="example" bind:tap="handleExample" data-url="{{imageUrl}}{{theme === 'DRUG' ? 'bg41' : 'bg39'}}.png?t={{Timestamp}}">示意</view>
</view>
<view class="content">抽血检测的IgG4、总免疫球蛋白、ESR等</view>
<uploadFile fileTypes="{{['image']}}" bind:setData="handleSetData" maxNum="{{1}}" isSlot="{{true}}">
<view class="upload-container" wx:if="{{!uploadImg}}">
<image class="icon" wx:if="{{!uploadImg}}" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon135' : 'icon48'}}.png?t={{Timestamp}}"></image>
<view class="name" wx:if="{{!uploadImg}}">添加文件照片</view>
</view>
<view class="upload-preview" wx:else>
<image class="upload-img" mode="aspectFill" src="{{uploadImg}}"></image>
</view>
</uploadFile>
</view>
<view class="form-card">
<view class="f-header">
<view class="label">影像学检查(CT/超声/核磁)</view>
</view>
<view class="content">超声、CT、核磁共振的描述结论、电子胶片</view>
<uploadFile fileTypes="{{['image']}}" bind:setData="handleSetData" maxNum="{{1}}" isSlot="{{true}}">
<view class="upload-container" wx:if="{{!uploadImg}}">
<image class="icon" wx:if="{{!uploadImg}}" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon135' : 'icon48'}}.png?t={{Timestamp}}"></image>
<view class="name" wx:if="{{!uploadImg}}">添加文件照片</view>
</view>
<view class="upload-preview" wx:else>
<image class="upload-img" mode="aspectFill" src="{{uploadImg}}"></image>
</view>
</uploadFile>
</view>
<view class="form-card">
<view class="f-header">
<view class="label">病理诊断及活检</view>
</view>
<view class="content">受累组织穿刺或切除免疫组化报告</view>
<uploadFile fileTypes="{{['image']}}" bind:setData="handleSetData" maxNum="{{1}}" isSlot="{{true}}">
<view class="upload-container" wx:if="{{!uploadImg}}">
<image class="icon" wx:if="{{!uploadImg}}" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon135' : 'icon48'}}.png?t={{Timestamp}}"></image>
<view class="name" wx:if="{{!uploadImg}}">添加文件照片</view>
</view>
<view class="upload-preview" wx:else>
<image class="upload-img" mode="aspectFill" src="{{uploadImg}}"></image>
</view>
</uploadFile>
</view>
<view class="form-card">
<view class="f-header">
<view class="label">外周血免疫功能评估</view>
</view>
<view class="content">免疫细胞亚群、淋巴细胞比例测定</view>
<uploadFile fileTypes="{{['image']}}" bind:setData="handleSetData" maxNum="{{1}}" isSlot="{{true}}">
<view class="upload-container" wx:if="{{!uploadImg}}">
<image class="icon" wx:if="{{!uploadImg}}" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon135' : 'icon48'}}.png?t={{Timestamp}}"></image>
<view class="name" wx:if="{{!uploadImg}}">添加文件照片</view>
</view>
<view class="upload-preview" wx:else>
<image class="upload-img" mode="aspectFill" src="{{uploadImg}}"></image>
</view>
</uploadFile>
</view>
<view class="step2-footer">
<view class="prev">上一页</view>
<view class="next">下一页</view>
</view>
</view>
<view class="step3" wx:if="{{step==3}}">
<view class="tip-card">请填写本次就诊的以下信息,方便医生关注您的健康情况</view>
<view class="form-card">
<view class="f-header">
<view class="label doboule">
<view>
本次就诊检验的
<view></view>
IgG4(免疫球蛋白G4亚类)
</view>
</view>
</view>
<view class="num">
<view class="wrap">
<input class="input" placeholder-class="place-input" type="number" placeholder="请输入" maxlength="{{5}}" />
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon136' : 'icon117'}}.png?t={{Timestamp}}"></image>
</view>
<view class="sub">mg/dL</view>
</view>
</view>
<view class="form-card">
<view class="f-header">
<view class="label">本次就诊已使用的药物</view>
</view>
<view class="check-group">
<view class="check-item active">
<view class="check">
<van-icon name="success" class="icon" />
</view>
<view class="content">没有使用激素</view>
</view>
<view class="check-item">
<view class="check">
<van-icon name="success" class="icon" />
</view>
<view class="content">没有使用激素</view>
</view>
</view>
</view>
<view class="form-card">
<view class="f-header">
<view class="label">最近一周,口服激素的每日用量</view>
</view>
<view class="num-select">
<view class="n-item" wx:for="{{6}}" wx:key="index">8片</view>
</view>
<view class="custom-num">
<input class="input" placeholder-class="place-input" type="number" maxlength="{{5}}" placeholder="请输入" />
<view class="sub">片</view>
</view>
</view>
<view class="form-card">
<view class="f-header">
<view class="label">正在使用的免疫抑制剂名称</view>
</view>
<view class="check-group">
<view class="check-item active">
<view class="check">
<van-icon name="success" class="icon" />
</view>
<view class="content">没有使用激素</view>
</view>
<view class="check-item">
<view class="check">
<van-icon name="success" class="icon" />
</view>
<view class="content">没有使用激素</view>
</view>
</view>
</view>
<view class="step3-footer">
<view class="prev">上一页</view>
<view class="submit">提交</view>
</view>
</view>
</view>
<toast
bind:cancel="handleToastCancel"
bind:ok="handleToastOk"
show="{{toastShow}}"
type="{{toastType}}"
params="{{toastParams}}"
></toast>

8
src/gift/pages/recordDetail/index.json

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
{
"navigationBarTitleText": "就诊记录详情页",
"navigationBarBackgroundColor": "#F6F6F6",
"usingComponents": {
"uploadFile": "/components/uploadFile/index",
"van-icon": "@vant/weapp/icon/index"
}
}

167
src/gift/pages/recordDetail/index.scss

@ -0,0 +1,167 @@ @@ -0,0 +1,167 @@
page {
background-color: #f6f6f6;
}
.page {
padding: 32rpx;
.banner {
padding: 28rpx 32rpx;
border-radius: 24rpx;
background-color: #fff;
.row {
display: flex;
gap: 32rpx;
&:last-of-type {
margin-top: 52rpx;
}
.icon {
flex-shrink: 0;
width: 96rpx;
height: 96rpx;
}
.col {
.name {
font-size: 32rpx;
color: rgba(34, 34, 34, 0.6);
}
.date {
margin-top: 12rpx;
font-size: 40rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
}
}
}
}
.switch-wrap {
margin-top: 32rpx;
padding: 28rpx 32rpx;
border-radius: 24rpx;
background-color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
}
.switch {
}
}
.photos {
margin-top: 32rpx;
padding: 28rpx 32rpx;
border-radius: 24rpx;
background-color: #fff;
.p-header {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 24rpx;
margin-left: -32rpx;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
border-radius: 0 8rpx 8rpx 0;
background: #0eb66d;
}
}
.p-container {
margin-top: 24rpx;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 22rpx;
.photo {
display: block;
width: 100%;
height: 168rpx;
border-radius: 16rpx;
}
}
}
.container {
margin-top: 32rpx;
padding: 0 32rpx 28rpx;
border-radius: 24rpx;
background-color: #fff;
.row {
padding-top: 32rpx;
border-bottom: 1px solid rgba(34, 34, 34, 0.08);
&:last-of-type {
border: none;
}
.name {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 24rpx;
margin-left: -32rpx;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
border-radius: 0 8rpx 8rpx 0;
background: #0eb66d;
}
}
.content {
margin-top: 16rpx;
padding-bottom: 28rpx;
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
}
}
}
.footer {
display: flex;
align-items: center;
justify-content: center;
.col {
flex: 1;
padding: 50rpx;
display: flex;
align-items: center;
justify-content: center;
gap: 12rpx;
.icon {
width: 44rpx;
height: 44rpx;
}
.name {
font-size: 36rpx;
color: #222222;
&.name1 {
color: #0eb66d;
}
}
}
.line {
width: 1px;
height: 36rpx;
background: rgba(34, 34, 34, 0.1);
}
}
}
#drug-page {
.photos {
.p-header::before {
background: rgba(89, 86, 233, 1);
}
}
.container {
.name::before {
background: rgba(89, 86, 233, 1);
}
}
.footer{
.name1{
color: rgba(89, 86, 233, 1);
}
}
}

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

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});
export {}

57
src/gift/pages/recordDetail/index.wxml

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<view class="banner">
<view class="row">
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon137' : 'icon121'}}.png?t={{Timestamp}}"></image>
<view class="col">
<view class="name">我的本次就诊时间</view>
<view class="date">2026-06-23</view>
</view>
</view>
<view class="row">
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon138' : 'icon122'}}.png?t={{Timestamp}}"></image>
<view class="col">
<view class="name">我的下次就诊时间</view>
<view class="date">2026-07-23</view>
</view>
</view>
</view>
<view class="switch-wrap">
<view class="name">复诊提醒</view>
<switch class="switch" color="{{theme === 'DRUG' ? 'rgba(89, 86, 233, 1)' : 'rgba(14, 182, 109, 1)'}}"></switch>
</view>
<view class="photos">
<view class="p-header">门诊病历及处方</view>
<view class="p-container">
<image class="photo" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="container">
<view class="row">
<view class="name">IgG4值</view>
<view class="content">115 mg/dL</view>
</view>
<view class="row">
<view class="name">本次就诊已使用的药物</view>
<view class="content">激素免疫抑制剂</view>
</view>
<view class="row">
<view class="name">最近一周,每日激素使用剂量</view>
<view class="content">5mg/天</view>
</view>
<view class="row">
<view class="name">正在使用的免疫抑制剂名称</view>
<view class="content">吗替麦考酚酯(骁悉、麦考芬)</view>
</view>
</view>
<view class="footer">
<view class="col">
<image class="icon" src="{{imageUrl}}icon123.png?t={{Timestamp}}"></image>
<view class="name">删除</view>
</view>
<view class="line"></view>
<view class="col">
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon139' : 'icon124'}}.png?t={{Timestamp}}"></image>
<view class="name name1">编辑</view>
</view>
</view>
</view>

9
src/gift/pages/recordList/index.json

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
{
"navigationBarTitleText": "就诊记录",
"navigationBarBackgroundColor": "#F6F6F6",
"usingComponents": {
"uploadFile": "/components/uploadFile/index",
"van-icon": "@vant/weapp/icon/index",
"ec-canvas": "/components/ec-canvas/ec-canvas"
}
}

281
src/gift/pages/recordList/index.scss

@ -0,0 +1,281 @@ @@ -0,0 +1,281 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
padding: 32rpx 32rpx 300rpx;
.user {
.name {
font-size: 44rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 57rpx;
height: 73rpx;
}
}
.content {
margin-top: 12rpx;
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
.high {
color: rgba(14, 182, 109, 1);
}
}
}
.chart {
.chart-header {
margin-top: 48rpx;
display: flex;
gap: 24rpx;
.type {
padding: 8rpx 32rpx;
font-size: 32rpx;
color: rgba(105, 104, 110, 1);
background-color: #fff;
border-radius: 58rpx;
display: flex;
align-items: center;
gap: 14rpx;
.icon {
font-size: 24rpx;
color: rgba(105, 104, 110, 1);
transform: rotate(90deg);
}
}
.date {
padding: 8rpx 32rpx;
font-size: 32rpx;
color: rgba(105, 104, 110, 1);
background-color: #fff;
border-radius: 58rpx;
display: flex;
align-items: center;
gap: 14rpx;
.line {
margin: 0 10rpx;
}
.icon {
transform: rotate(90deg);
color: rgba(105, 104, 110, 1);
font-size: 24rpx;
}
}
}
.chart-container {
margin-top: 32rpx;
padding: 32rpx;
background: linear-gradient(180deg, #f5f4f4 0%, #ffffff 17.72%, #ffffff 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.c-header {
display: flex;
justify-content: space-between;
.title {
font-size: 36rpx;
color: rgba(0, 0, 0, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 24rpx;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
background: #0eb66d;
border-radius: 32rpx 32rpx 32rpx 32rpx;
}
}
.sub {
font-size: 32rpx;
color: rgba(34, 34, 34, 0.4);
}
}
.w-chart {
height: 460rpx;
}
}
}
.list {
margin-top: 56rpx;
.l-header {
padding-bottom: 32rpx;
.title {
font-size: 36rpx;
color: #000;
font-weight: bold;
}
}
.card {
display: flex;
gap: 20rpx;
.aside {
display: flex;
flex-direction: column;
align-items: center;
flex-shrink: 0;
.line-top,
.line-bottom {
border-right: 1px dashed rgba(34, 34, 34, 0.2);
}
.line-top {
flex-shrink: 0;
}
.line-bottom {
flex: 1;
}
.circle {
flex-shrink: 0;
width: 20rpx;
height: 20rpx;
border-radius: 50%;
background-color: rgba(14, 182, 109, 1);
background-clip: content-box;
border: 6rpx solid #e1f0e9;
}
}
.wrap {
flex: 1;
min-width: 0;
padding-bottom: 48rpx;
.date {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
line-height: 1;
}
.container {
position: relative;
margin-top: 24rpx;
padding: 32rpx;
border-radius: 24rpx;
background-color: #fff;
.del {
position: absolute;
top: 1px;
right: 1px;
padding: 8rpx 16rpx;
background-color: rgba(246, 246, 246, 1);
font-size: 28rpx;
font-weight: bold;
color: rgba(34, 34, 34, 1);
border-radius: 0 24rpx 0 24rpx;
}
.name {
font-size: 32rpx;
color: rgba(34, 34, 34, 1);
}
.content {
margin-top: 16rpx;
display: flex;
align-items: center;
justify-content: space-between;
.c-left {
display: flex;
gap: 8rpx;
align-items: baseline;
line-height: 84rpx;
.num {
font-size: 72rpx;
color: rgba(34, 34, 34, 1);
font-weight: bold;
}
.sub {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
}
.icon {
width: 44rpx;
height: 51rpx;
}
}
.status {
font-size: 32rpx;
color: rgba(14, 182, 109, 1);
padding: 0 12rpx;
background-color: rgba(14, 182, 109, 0.08);
border-radius: 8rpx;
}
}
.row {
margin-top: 32rpx;
padding: 32rpx;
background-color: rgba(246, 246, 246, 1);
border-radius: 16rpx;
display: flex;
align-items: center;
gap: 8rpx;
.col {
flex: 1;
.c-name {
font-size: 32rpx;
color: rgba(34, 34, 34, 0.5);
}
.c-content {
margin-top: 16rpx;
font-size: 40rpx;
color: rgba(34, 34, 34, 1);
}
}
}
}
}
}
}
.page-footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
box-sizing: border-box;
padding: 32rpx 32rpx calc(env(safe-area-inset-bottom) + 32rpx);
background-color: #fff;
box-shadow: 0rpx -10rpx 30rpx 0rpx rgba(0, 0, 0, 0.01);
.btn {
font-size: 36rpx;
color: rgba(255, 255, 255, 1);
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(86deg, #0eb66d 0%, #00d277 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
}
}
}
#drug-page {
.user {
.content {
.high {
color: rgba(89, 86, 233, 1);
}
}
}
.chart {
.c-header {
.title::before {
background: rgba(89, 86, 233, 1);
}
}
}
.list {
.card {
.circle {
background-color: rgba(89, 86, 233, 1);
border-color: rgba(89, 86, 233, 0.08);
}
.status{
background-color: rgba(89, 86, 233, 0.08);
color: rgba(89, 86, 233, 1);
}
}
}
.page-footer {
.btn {
background: linear-gradient(274deg, #5956e9 0%, #b384f4 100%);
}
}
}

164
src/gift/pages/recordList/index.ts

@ -0,0 +1,164 @@ @@ -0,0 +1,164 @@
import dayjs from 'dayjs'
const _app = getApp<IAppOption>()
let echarts: any = null
Page({
data: {},
ecDataTrendComponent: null as any,
async onLoad() {
echarts = await require.async('../../../resource/components/echart/echarts.js')
this.ecDataTrendComponent = this.selectComponent('#chart1')
this.initChart()
},
initChart(defaultList = []) {
const list: any = [
...defaultList,
{ Date: '2026-7-7', TotalScore: 100, InjectionBottles: false },
{ Date: '2026-7-8', TotalScore: 1000, InjectionBottles: false },
]
return new Promise((reslove) => {
const { theme } = this.data
this.ecDataTrendComponent.init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const option: any = {
tooltip: {
show: false,
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
confine: true,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
textStyle: {
color: '#fff',
fontSize: 10,
},
order: 'seriesDesc',
},
grid: {
top: '30',
left: '0',
right: '0',
bottom: '10',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
alignWithLabel: true,
},
axisLine: {
lineStyle: {
color: 'rgba(34, 34, 34, 0.20)',
type: 'dashed',
},
},
data: list.map((item) => dayjs(item.Date).format('MM-DD')),
},
],
yAxis: [
{
type: 'value',
minInterval: 1,
axisLabel: {
color: 'rgba(34, 34, 34, 0.40)',
},
splitLine: {
lineStyle: {
color: 'rgba(34, 34, 34, 0.20)',
type: 'dashed',
},
},
},
],
series: [
{
name: '总分',
data: list.length ? list.map((item) => item.TotalScore) : [25],
barWidth: '16',
label: {
show: true,
position: 'top',
color: theme === 'DRUG' ? 'rgba(89, 86, 233, 1)' : 'rgba(14, 182, 109, 1)',
},
type: 'line',
symbol: 'circle',
symbolSize: 8,
showSymbol: list.length >= 1,
connectNulls: true,
z: 10,
itemStyle: {
color: theme === 'DRUG' ? 'rgba(89, 86, 233, 1)' : 'rgba(14, 182, 109, 1)',
},
markLine: {
symbol: ['none', 'none'],
data: [
{
name: '135 安全区',
yAxis: 135,
label: {
formatter: '{b}',
position: 'insideMiddle',
color: theme === 'DRUG' ? 'rgba(89, 86, 233, 1)' : 'rgba(14, 182, 109, 1)',
fontSize: '10',
},
lineStyle: {
cap: '',
color: theme === 'DRUG' ? 'rgba(89, 86, 233, 1)' : 'rgba(14, 182, 109, 1)',
type: 'dashed',
},
},
],
},
markArea: {
itemStyle: {
color: theme === 'DRUG' ? 'rgba(89, 86, 233, 0.06)' : 'rgba(14, 182, 109, 0.06)',
},
data: [
[
{
yAxis: 0,
},
{
yAxis: 135,
},
],
],
},
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: 0,
endValue: 4,
filterMode: 'none',
},
}
chart.setOption(option)
reslove(chart)
return chart
})
})
},
handleDetail() {
wx.navigateTo({
url: '/gift/pages/recordDetail/index',
})
},
handleAdd() {
wx.navigateTo({
url: '/gift/pages/record/index',
})
},
})
export {}

97
src/gift/pages/recordList/index.wxml

@ -0,0 +1,97 @@ @@ -0,0 +1,97 @@
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<view class="user">
<view class="name">
张先生,您好
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon131' : 'icon119'}}.png?t={{Timestamp}}"></image>
</view>
<view class="content">
您的最近一次IgG4数值为:
<text class="high">115 mg/dL</text>
</view>
</view>
<view class="chart">
<view class="chart-header">
<picker>
<view class="type">
按年
<van-icon class="icon" name="play" />
</view>
</picker>
<view class="date">
<picker
bindchange="handleChange"
class="start"
end="{{EndMonth}}"
fields="day"
mode="date"
model:value="{{BeginMonth}}"
>
2025.08
</picker>
<view class="line">-</view>
<picker
bindchange="handleChange"
class="end"
fields="day"
mode="date"
model:value="{{EndMonth}}"
start="{{BeginMonth}}"
>
2025.09
</picker>
<van-icon class="icon" name="play" />
</view>
</view>
<view class="chart-container">
<view class="c-header">
<view class="title">血清IgG4趋势监测</view>
<view class="sub">单位mg/dL</view>
</view>
<view class="w-chart">
<ec-canvas id="chart1" ec="{{ ec }}"></ec-canvas>
</view>
</view>
</view>
<view class="list">
<view class="l-header">
<view class="title">我的就诊历史总轴(按日期)</view>
</view>
<view class="card" wx:for="{{10}}" wx:key="index" bind:tap="handleDetail">
<view class="aside">
<view class="line-top"></view>
<view class="circle"></view>
<view class="line-bottom"></view>
</view>
<view class="wrap">
<view class="date">2025-06-11</view>
<view class="container">
<view class="del"><van-icon name="cross" /></view>
<view class="name">lgG4值</view>
<view class="content">
<view class="c-left">
<view class="num">385</view>
<view class="sub">mg/dL</view>
<image class="icon" src="{{imageUrl}}icon118.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon132.png?t={{Timestamp}}"></image>
<image class="icon" src="{{imageUrl}}icon120.png?t={{Timestamp}}"></image>
</view>
<view class="status">草稿</view>
</view>
<view class="row">
<view class="col">
<view class="c-name">激素用量</view>
<view class="c-content">10mg/天</view>
</view>
<view class="col">
<view class="c-name">下次复诊时间</view>
<view class="c-content">2025.06.11</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="page-footer" bind:tap="handleAdd">
<view class="btn">新增就诊记录</view>
</view>
</view>

BIN
src/images/bg38.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 KiB

BIN
src/images/bg39.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
src/images/bg40.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
src/images/bg41.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
src/images/bg42.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
src/images/icon108.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 B

BIN
src/images/icon109.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
src/images/icon110.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/images/icon111.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

BIN
src/images/icon112.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

BIN
src/images/icon113.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
src/images/icon114.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon115.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

BIN
src/images/icon116.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon117.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon118.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/images/icon119.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
src/images/icon120.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/images/icon121.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/images/icon122.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon123.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon124.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon125.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/images/icon126.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon127.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/images/icon128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/icon129.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/images/icon130.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/images/icon131.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
src/images/icon132.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/images/icon133.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
src/images/icon134.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon135.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon136.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon137.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/images/icon138.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon139.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon140.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
src/images/icon141.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon142.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon143.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/images/icon144.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 B

BIN
src/images/tabbar/add.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/images/tabbar/drug-add.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/images/tabbar/drug-gift-active.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/tabbar/gift-active.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/images/tabbar/gift.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 995 B

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/images/title4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
src/images/title5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

4
src/pages/caseReport/index.json

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "病例报告",
"usingComponents": {}
}

96
src/pages/caseReport/index.scss

@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
padding: 32rpx 32rpx 300rpx;
.list {
.card {
display: flex;
gap: 20rpx;
.aside {
display: flex;
flex-direction: column;
align-items: center;
flex-shrink: 0;
.line-top,
.line-bottom {
border-right: 1px dashed rgba(34, 34, 34, 0.2);
}
.line-top {
flex-shrink: 0;
}
.line-bottom {
flex: 1;
}
.circle {
flex-shrink: 0;
width: 20rpx;
height: 20rpx;
border-radius: 50%;
background-color: rgba(14, 182, 109, 1);
background-clip: content-box;
border: 6rpx solid #e1f0e9;
}
}
.wrap {
flex: 1;
min-width: 0;
padding-bottom: 48rpx;
.date {
font-size: 36rpx;
color: rgba(34, 34, 34, 1);
line-height: 1;
}
.container {
margin-top: 20rpx;
padding: 32rpx;
background-color: #fff;
border-radius: 12rpx;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24rpx;
.photo {
display: block;
width: 100%;
height: 154rpx;
border-radius: 12rpx;
}
}
}
}
}
.page-footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
box-sizing: border-box;
padding: 32rpx 32rpx calc(env(safe-area-inset-bottom) + 32rpx);
background-color: #fff;
box-shadow: 0rpx -10rpx 30rpx 0rpx rgba(0, 0, 0, 0.01);
.btn {
font-size: 36rpx;
color: rgba(255, 255, 255, 1);
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(86deg, #0eb66d 0%, #00d277 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
}
}
}
#drug-page {
.list {
.card {
.aside {
.circle {
background-color: rgba(89, 86, 233, 1);
border-color: rgba(89, 86, 233, 0.1);
}
}
}
}
}

14
src/pages/caseReport/index.ts

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
const _app = getApp<IAppOption>()
Page({
data: {},
onLoad(options) {
if (options.name) {
wx.setNavigationBarTitle({
title: options.name,
})
}
},
})
export {}

17
src/pages/caseReport/index.wxml

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<view class="list">
<view class="card" wx:for="{{10}}" wx:key="index" bind:tap="handleDetail">
<view class="aside">
<view class="line-top"></view>
<view class="circle"></view>
<view class="line-bottom"></view>
</view>
<view class="wrap">
<view class="date">2025-06-11</view>
<view class="container">
<image class="photo" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
</view>
</view>

2
src/pages/index/index.wxml

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
<view class="alert" bind:tap="handleNextVisit">
<view class="empty" wx:if="{{nextVisitDays === '--'}}">
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon92' : 'icon90'}}.png?t={{Timestamp}}"></image>
<view class="content">设置复诊提醒</view>
<view class="content">添加就诊记录</view>
</view>
<view class="a-container" wx:if="{{nextVisitDays !== '--'}}">
<view

2
src/pages/interactivePatient/index.ts

@ -221,7 +221,7 @@ Page({ @@ -221,7 +221,7 @@ Page({
...this.data.messageList,
{
msgId: '',
msgContentType: '12',
msgContentType: '1',
msgContent: res,
msgVisitTime: '',
msgFromType: '2',

4
src/pages/my/index.wxml

@ -27,9 +27,9 @@ @@ -27,9 +27,9 @@
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon71' : 'icon62'}}.png?t={{Timestamp}}"></image>
<view class="name">健康档案</view>
</view>
<view bind:tap="routerTo" class="item" data-url="/pages/signIn/index">
<view bind:tap="routerTo" class="item" data-url="/gift/pages/recordList/index">
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon72' : 'icon63'}}.png?t={{Timestamp}}"></image>
<view class="name">复诊提醒</view>
<view class="name">就诊记录</view>
</view>
</view>
<view class="options-list">

60
src/pages/qaFormDetail/index.scss

@ -10,9 +10,13 @@ page { @@ -10,9 +10,13 @@ page {
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #f4f3f3;
.card {
margin-bottom: 32rpx;
padding-top: 32rpx;
padding-bottom: 32rpx;
border-bottom: 1px solid rgba(244, 243, 243, 1);
border-top: 1px solid rgba(244, 243, 243, 1);
&:first-of-type {
padding-top: 0;
border: none;
}
.c-title {
font-size: 36rpx;
color: rgba(33, 33, 32, 1);
@ -83,6 +87,58 @@ page { @@ -83,6 +87,58 @@ page {
font-size: 36rpx;
color: rgba(255, 255, 255, 1);
}
.case-report {
margin-top: 64rpx;
.c-header {
display: flex;
align-items: center;
gap: 32rpx;
.left {
width: 204rpx;
height: 2rpx;
background: linear-gradient(90deg, rgba(14, 182, 109, 0) 0%, #0eb66d 100%);
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.right {
width: 204rpx;
height: 2rpx;
background: linear-gradient(270deg, rgba(14, 182, 109, 0) 0%, #0eb66d 100%);
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.name {
flex-shrink: 0;
font-size: 36rpx;
color: #222222;
text-align: center;
}
}
.list {
.row {
margin-top: 32rpx;
padding: 34rpx;
background-color: #fff;
border-radius: 24rpx;
display: flex;
gap: 24rpx;
.icon {
flex-shrink: 0;
width: 96rpx;
height: 96rpx;
}
.col {
.name {
font-size: 36rpx;
color: #222222;
}
.content {
margin-top: 8rpx;
font-size: 28rpx;
color: rgba(34, 34, 34, 0.5);
}
}
}
}
}
}
#drug-page {

19
src/pages/qaFormDetail/index.ts

@ -33,6 +33,18 @@ Page({ @@ -33,6 +33,18 @@ Page({
data: {
questions: [] as IQuestion[],
hasData: false,
caseReportList: [
{
icon: 'icon126.png',
drugIcon: 'icon141.png',
name: '门诊病历及处方',
content: '医生手写或电脑打印的病历、处方',
},
{ icon: 'icon127.png', name: '检验报告', content: '抽血检测的IgG4、IgG、ESR等' },
{ icon: 'icon128.png', name: '影像学检查', content: '超声/CT/MRI的描述结论、电子胶片' },
{ icon: 'icon129.png', name: '病理诊断及活检', content: '受累组织穿刺或切除免疫组化报告' },
{ icon: 'icon130.png', name: '外周血免疫功能评估', content: '免疫细胞亚群、淋巴细胞比例测定' },
],
},
onLoad() {
@ -198,4 +210,11 @@ Page({ @@ -198,4 +210,11 @@ Page({
url: '/pages/qaForm/index',
})
},
handleDetail(e) {
const { name } = e.currentTarget.dataset
wx.navigateTo({
url: `/pages/caseReport/index?name=${name}`,
})
},
})

20
src/pages/qaFormDetail/index.wxml

@ -47,11 +47,27 @@ @@ -47,11 +47,27 @@
</view>
</view>
</block>
<view wx:if="{{hasData}}" class="edit-btn" bind:tap="handleEdit">更新健康档案</view>
<view wx:if="{{!hasData && questions.length}}" class="empty">
<view class="empty-text">暂未填写健康档案</view>
<view class="empty-btn" bind:tap="handleEdit">去填写</view>
</view>
</view>
<view wx:if="{{hasData}}" class="edit-btn" bind:tap="handleEdit">更新健康档案</view>
<view class="case-report">
<view class="c-header">
<view class="left"></view>
<view class="name">我的病历报告</view>
<view class="right"></view>
</view>
<view class="list">
<view class="row" wx:for="{{caseReportList}}" wx:key="icon" bind:tap="handleDetail" data-name="{{item.name}}">
<image wx:if="{{item.drugIcon && theme === 'DRUG'}}" class="icon" src="{{imageUrl}}{{item.drugIcon}}?t={{Timestamp}}"></image>
<image wx:else class="icon" src="{{imageUrl}}{{item.icon}}?t={{Timestamp}}"></image>
<view class="col">
<view class="name">{{item.name}}</view>
<view class="content">{{item.content}}</view>
</view>
</view>
</view>
</view>
</view>

6
src/pages/referral/index.json

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
{
"navigationBarTitleText": "复诊记录",
"usingComponents": {
"referralFrom": "/components/referralFrom/index"
}
}

82
src/pages/referral/index.scss

@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
page {
background-color: #f2f4f5;
}
.page {
padding: 30rpx;
.card {
margin-bottom: 24rpx;
padding: 32rpx 32rpx 0;
background: linear-gradient(1deg, #ffffff 0%, #e7f1f3 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.date {
display: flex;
font-weight: bold;
.label {
flex-shrink: 0;
width: 5em;
font-size: 32rpx;
color: #1d2021;
line-height: 36rpx;
}
.content {
font-size: 32rpx;
color: #283031;
line-height: 36rpx;
}
}
.container {
margin-top: 32rpx;
padding-bottom: 24rpx;
display: flex;
.label {
flex-shrink: 0;
width: 5em;
font-size: 32rpx;
color: #9aa1a2;
line-height: 48rpx;
}
.content {
font-size: 32rpx;
color: #283031;
line-height: 48rpx;
counter-reset: item;
&:empty::after {
display: inline;
content: '---';
}
.item {
display: flex;
&::before {
flex-shrink: 0;
width: 1.2em;
counter-increment: item; /* 递增计数器 */
content: counter(item) '.'; /* 显示计数器值 */
margin-right: 8px;
}
}
}
}
.adl {
border-top: 1px solid rgba(0, 0, 0, 0.04);
padding: 24rpx 0;
font-size: 32rpx;
color: rgba(154, 161, 162, 1);
display: flex;
align-items: center;
justify-content: space-between;
}
}
}
.record {
position: fixed;
bottom: 112rpx;
left: 50%;
transform: translateX(-50%);
z-index: 1;
width: 148rpx;
height: 148rpx;
}

118
src/pages/referral/index.ts

@ -1,118 +0,0 @@ @@ -1,118 +0,0 @@
import dayjs from 'dayjs'
const app = getApp<IAppOption>()
Page({
data: {
list: [] as any[],
total: 0,
pagination: {
page: 1,
pages: 1,
count: 1,
},
referralFromShow: false,
referralFromParams: null as any,
},
onLoad(options) {
app.waitLogin().then(() => {
// 强制疾病患者以上身份
app.permissionVerification(3, 0, `/pages/referral/index`).then(() => {
this.getList()
if (options.pushId) {
this.updatePush(options.pushId)
}
})
})
},
updatePush(id) {
wx.ajax({
method: 'POST',
url: '?r=igg4/push-click/update-click-status',
data: {
pushId: id,
},
})
},
getList(newPage = 1) {
wx.ajax({
method: 'GET',
url: '?r=igg4/re-visit/get-list',
data: {
page: newPage,
},
}).then((res) => {
res.list = res.list.map((item: any) => {
item.adlDate = dayjs(item.LastAdlDate).format('YYYY-MM-DD')
return item
})
const list = res.page === 1 ? res.list : [...this.data.list, ...res.list]
this.setData({
total: res.count,
list,
pagination: {
page: res.page,
pages: res.pages,
count: res.count,
},
})
})
},
onReachBottom() {
const { page, pages } = this.data.pagination
if (pages > page) {
this.getList(page + 1)
}
},
handleEdit(e) {
const { index } = e.currentTarget.dataset
const { list } = this.data
const {
Id,
VisitDate,
Hormone,
TraditionalInhibitor,
GammaGlobulin,
PlasmaExchange,
BCellInhibitor,
FcRnAntagonists,
C5ComplementInhibitor,
ChineseMedicine,
Other,
} = list[index]
this.setData({
referralFromShow: true,
referralFromParams: {
recordId: Id,
visitDate: VisitDate,
hormone: Number(Hormone),
traditionalInhibitor: Number(TraditionalInhibitor),
gammaGlobulin: Number(GammaGlobulin),
plasmaExchange: Number(PlasmaExchange),
bCellInhibitor: Number(BCellInhibitor),
fcRnAntagonists: Number(FcRnAntagonists),
c5ComplementInhibitor: Number(C5ComplementInhibitor),
chineseMedicine: Number(ChineseMedicine),
other: Number(Other),
},
})
},
handleRecord() {
this.setData({
referralFromShow: true,
referralFromParams: null,
})
},
handleRefrech() {
this.getList()
},
handleAdl() {
wx.navigateTo({
url: '/gift/pages/myHealthRecord/index',
})
},
})
export {}

40
src/pages/referral/index.wxml

@ -1,40 +0,0 @@ @@ -1,40 +0,0 @@
<page-meta page-style="{{ referralFromShow ? 'overflow: hidden;' : '' }}" />
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<view class="card" wx:for="{{list}}" wx:key="Id" bind:tap="handleEdit" data-index="{{index}}">
<view class="date">
<view class="label">复诊时间</view>
<view class="content">{{item.VisitDate}}</view>
</view>
<view class="container">
<view class="label">复诊方案</view>
<view class="content">
<view class="item" wx:if="{{item.Hormone==1}}">激素</view>
<view class="item" wx:if="{{item.TraditionalInhibitor==1}}">传统免疫抑制剂(如他克莫司、吗 替麦考酚酯等)</view>
<view class="item" wx:if="{{item.GammaGlobulin==1}}">静脉输注丙种球蛋白</view>
<view class="item" wx:if="{{item.PlasmaExchange==1}}">血浆置换</view>
<view class="item" wx:if="{{item.BCellInhibitor==1}}">B细胞抑制剂(如:利妥昔单抗、泰 它西普、伊奈利珠单抗)</view>
<view class="item" wx:if="{{item.FcRnAntagonists==1}}">FcRn拮抗剂(如:艾加莫德)</view>
<view class="item" wx:if="{{item.C5ComplementInhibitor==1}}">C5补体抑制剂(如:依库珠单抗)</view>
<view class="item" wx:if="{{item.ChineseMedicine==1}}">中药或中成药</view>
<view class="item" wx:if="{{item.Other==1}}">其他</view>
</view>
</view>
<view wx:if="{{item.LastAdlScore}}" class="adl" catch:tap="handleAdl" data-id="{{item.LastAdlId}}">
<view class="content">
最近一次ADL得分:
<text class="num">{{item.LastAdlScore}}分</text>
</view>
<view class="a-date">{{item.adlDate}}</view>
</view>
</view>
<pagination pagination="{{pagination}}"></pagination>
</view>
<image class="record" src="{{imageUrl}}5/record-btn.png?t={{Timestamp}}" bind:tap="handleRecord"></image>
<referralFrom
model:show="{{referralFromShow}}"
params="{{referralFromParams}}"
bind:refresh="handleRefrech"
></referralFrom>

9
健康档案-接口文档.md

File diff suppressed because one or more lines are too long

1155
医生端-接口文档.md

File diff suppressed because it is too large Load Diff

11504
接口文档.md

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save