kola-web 1 month ago
parent
commit
bd93020375
  1. 73
      project.private.config.json
  2. 11
      src/app.json
  3. 232
      src/components/popup/index.scss
  4. 51
      src/components/popup/index.wxml
  5. BIN
      src/images/icon61.png
  6. BIN
      src/images/icon62.png
  7. BIN
      src/images/icon63.png
  8. BIN
      src/images/icon64.png
  9. BIN
      src/images/icon65.png
  10. BIN
      src/images/icon66.png
  11. BIN
      src/images/icon67.png
  12. BIN
      src/images/icon68.png
  13. BIN
      src/images/icon69.png
  14. BIN
      src/images/title5.png
  15. BIN
      src/images/title6.png
  16. BIN
      src/images/title7.png
  17. BIN
      src/images/title8.png
  18. 2
      src/pages/index/index.scss
  19. 2
      src/pages/my/index.scss
  20. 2
      src/patient/components/patient-tab-bar/index.ts
  21. 73
      src/patient/pages/casesAdd/index.scss
  22. 59
      src/patient/pages/casesAdd/index.ts
  23. 32
      src/patient/pages/casesAdd/index.wxml
  24. 4
      src/patient/pages/changeTel/index.json
  25. 50
      src/patient/pages/changeTel/index.scss
  26. 85
      src/patient/pages/changeTel/index.ts
  27. 30
      src/patient/pages/changeTel/index.wxml
  28. 17
      src/patient/pages/course/index.ts
  29. 89
      src/patient/pages/course/index.wxml
  30. 6
      src/patient/pages/family/index.json
  31. 71
      src/patient/pages/family/index.scss
  32. 16
      src/patient/pages/family/index.ts
  33. 25
      src/patient/pages/family/index.wxml
  34. 4
      src/patient/pages/familyList/index.json
  35. 45
      src/patient/pages/familyList/index.scss
  36. 8
      src/patient/pages/familyList/index.ts
  37. 12
      src/patient/pages/familyList/index.wxml
  38. 3
      src/patient/pages/file/index.json
  39. 114
      src/patient/pages/file/index.scss
  40. 17
      src/patient/pages/file/index.ts
  41. 48
      src/patient/pages/file/index.wxml
  42. 4
      src/patient/pages/followPlan/index.json
  43. 142
      src/patient/pages/followPlan/index.scss
  44. 8
      src/patient/pages/followPlan/index.ts
  45. 32
      src/patient/pages/followPlan/index.wxml
  46. 61
      src/patient/pages/home/index.scss
  47. 8
      src/patient/pages/home/index.ts
  48. 39
      src/patient/pages/home/index.wxml
  49. 7
      src/patient/pages/lastDiagnosisReport/index.json
  50. 207
      src/patient/pages/lastDiagnosisReport/index.scss
  51. 12
      src/patient/pages/lastDiagnosisReport/index.ts
  52. 122
      src/patient/pages/lastDiagnosisReport/index.wxml
  53. 4
      src/patient/pages/loginOut/index.json
  54. 47
      src/patient/pages/loginOut/index.scss
  55. 18
      src/patient/pages/loginOut/index.ts
  56. 16
      src/patient/pages/loginOut/index.wxml
  57. 7
      src/patient/pages/my/index.json
  58. 153
      src/patient/pages/my/index.scss
  59. 82
      src/patient/pages/my/index.ts
  60. 45
      src/patient/pages/my/index.wxml
  61. 7
      src/patient/pages/preDiagnosisReport/index.json
  62. 402
      src/patient/pages/preDiagnosisReport/index.scss
  63. 12
      src/patient/pages/preDiagnosisReport/index.ts
  64. 308
      src/patient/pages/preDiagnosisReport/index.wxml
  65. 6
      src/patient/pages/userInfo/index.json
  66. 70
      src/patient/pages/userInfo/index.scss
  67. 18
      src/patient/pages/userInfo/index.ts
  68. 40
      src/patient/pages/userInfo/index.wxml

73
project.private.config.json

@ -23,27 +23,90 @@ @@ -23,27 +23,90 @@
"miniprogram": {
"list": [
{
"name": "个人信息及隐私政策",
"pathName": "doc/pages/doc1/index",
"name": "患者-亲友列表",
"pathName": "patient/pages/familyList/index",
"query": "",
"scene": null,
"launchMode": "default"
},
{
"name": "患者-凝血因子统计",
"pathName": "patient/pages/coltStat/index",
"name": "患者-亲友",
"pathName": "patient/pages/family/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-注销",
"pathName": "patient/pages/loginOut/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-修改手机号",
"pathName": "patient/pages/changeTel/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "随访档案",
"name": "患者-个人信息",
"pathName": "patient/pages/userInfo/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-我的",
"pathName": "patient/pages/my/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-随访档案",
"pathName": "patient/pages/file/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-最新复诊检查记录",
"pathName": "patient/pages/lastDiagnosisReport/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-查看我的随访计划",
"pathName": "patient/pages/followPlan/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-我的诊前检查报告",
"pathName": "patient/pages/preDiagnosisReport/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "个人信息及隐私政策",
"pathName": "doc/pages/doc1/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-凝血因子统计",
"pathName": "patient/pages/coltStat/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "患者-免疫抑制剂添加",
"pathName": "patient/pages/inhibitorsManage/index",
"query": "",

11
src/app.json

@ -32,7 +32,16 @@ @@ -32,7 +32,16 @@
"pages/inhibitorsManageList/index",
"pages/inhibitorsManage/index",
"pages/file/index",
"pages/coltStat/index"
"pages/coltStat/index",
"pages/preDiagnosisReport/index",
"pages/followPlan/index",
"pages/lastDiagnosisReport/index",
"pages/my/index",
"pages/userInfo/index",
"pages/changeTel/index",
"pages/loginOut/index",
"pages/family/index",
"pages/familyList/index"
]
},
{

232
src/components/popup/index.scss

@ -601,6 +601,238 @@ @@ -601,6 +601,238 @@
}
}
.popup12 {
.icon {
position: relative;
z-index: 1;
margin: 0 auto;
display: block;
width: 144rpx;
height: 144rpx;
}
.container {
margin-top: -94rpx;
padding: 108rpx 32rpx 32rpx;
width: 604rpx;
background: linear-gradient(7deg, #ffffff 19%, #ffe8e4 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
box-sizing: border-box;
.title {
display: block;
margin: 0 auto;
width: 308rpx;
height: 34rpx;
}
.content {
margin-top: 16rpx;
font-size: 32rpx;
line-height: 48rpx;
color: rgba(161, 164, 172, 1);
text-align: center;
}
.tip {
margin-top: 24rpx;
padding: 10rpx 22rpx;
font-size: 28rpx;
color: rgba(246, 74, 58, 1);
text-align: center;
border-radius: 24rpx;
background-color: rgba(255, 231, 228, 1);
}
.footer {
margin-top: 32rpx;
display: flex;
gap: 26rpx;
.cancel {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
.submit {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #fff;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
}
}
}
.popup13 {
.icon {
position: relative;
z-index: 1;
margin: 0 auto;
display: block;
width: 144rpx;
height: 144rpx;
}
.container {
margin-top: -94rpx;
padding: 106rpx 32rpx 32rpx;
width: 604rpx;
background: linear-gradient(7deg, #ffffff 19%, #ffe8e4 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
box-sizing: border-box;
.title {
display: block;
margin: 0 auto;
width: 495rpx;
height: 78rpx;
}
.card {
position: relative;
margin-top: 32rpx;
padding: 32rpx;
background: #ffffff;
display: flex;
gap: 16rpx;
justify-content: space-between;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.05);
border-radius: 24rpx 24rpx 24rpx 24rpx;
&::after {
position: absolute;
bottom: -24rpx;
left: 32rpx;
content: '';
width: 476rpx;
height: 24rpx;
background: #ffebea;
border-radius: 0 0 24rpx 24rpx;
}
.avatar {
flex-shrink: 0;
width: 92rpx;
height: 92rpx;
border-radius: 50%;
}
.wrap {
flex: 1;
.name {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.hostipal {
margin-top: 16rpx;
line-height: 28rpx;
.content {
margin-right: 8rpx;
display: inline-block;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
}
.tag {
display: inline-block;
font-size: 20rpx;
color: rgba(255, 255, 255, 1);
padding: 0 8rpx;
background-color: rgba(255, 186, 1, 1);
border-radius: 6rpx;
}
}
}
}
.footer {
margin-top: 52rpx;
display: flex;
gap: 26rpx;
.cancel {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
.submit {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #fff;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
}
}
}
.popup14 {
.container {
padding: 48rpx 32rpx 32rpx;
width: 604rpx;
background: linear-gradient(7deg, #ffffff 19%, #ffe8e4 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
box-sizing: border-box;
.title {
display: block;
margin: 0 auto;
width: 365rpx;
height: 34rpx;
}
.picker-content {
margin-top: 24rpx;
padding: 28rpx;
background-color: rgba(255, 255, 255, 1);
border-radius: 24rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
text-align: center;
&:empty::after {
color: rgba(161, 164, 172, 0.5);
content: attr(data-place);
}
}
.footer {
margin-top: 32rpx;
display: flex;
gap: 26rpx;
.cancel {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
.submit {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #fff;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
}
}
}
.close {
margin: 32rpx auto 0;
display: block;

51
src/components/popup/index.wxml

@ -205,6 +205,57 @@ @@ -205,6 +205,57 @@
</view>
</view>
</view>
<view class="popup12" wx:elif="{{type==='bindDoctorQuestion'}}">
<image class="icon" src="/images/icon62.png"></image>
<view class="container">
<image class="title" src="/images/title5.png"></image>
<view class="content">
绑定医生后
<view></view>
医生可以实时看到您的检查进展
</view>
<view class="tip">您可以扫描不同医生邀约码绑定多个医生</view>
<view class="footer">
<view class="cancel">重新选择</view>
<view class="submit">提交</view>
</view>
</view>
</view>
<view class="popup13" wx:elif="{{type==='conformBindDoctorQuestion'}}">
<image class="icon" src="/images/icon62.png"></image>
<view class="container">
<image class="title" src="/images/title6.png"></image>
<view class="card">
<image
class="avatar"
src="https://pic1.zhimg.com/50/v2-8cfef5f9ea7d15963af2277c6814f152_720w.jpg?source=2c26e567"
></image>
<view class="wrap">
<view class="name">王青</view>
<view class="hostipal">
<view class="content">北京积水潭医院龙泽院区</view>
<view class="tag">三甲</view>
</view>
</view>
</view>
<view class="footer">
<view class="cancel">取消</view>
<view class="submit">提交</view>
</view>
</view>
</view>
<view class="popup14" wx:elif="{{type==='preDiagnosisReportDate'}}">
<view class="container">
<image class="title" src="/images/title7.png"></image>
<picker mode="date">
<view class="picker-content" data-place="请选择检查日期"></view>
</picker>
<view class="footer">
<view class="cancel">取消</view>
<view class="submit">提交</view>
</view>
</view>
</view>
<image
wx:if="{{params.close}}"
class="close"

BIN
src/images/icon61.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/images/icon62.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
src/images/icon63.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/images/icon64.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

BIN
src/images/icon65.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

BIN
src/images/icon66.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/images/icon67.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon68.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/images/icon69.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/title5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
src/images/title6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
src/images/title7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
src/images/title8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

2
src/pages/index/index.scss

@ -38,6 +38,8 @@ @@ -38,6 +38,8 @@
.a-img {
width: 670rpx;
height: 136rpx;
border-radius: 120rpx;
box-shadow: 0px 2px 16px 0px #f33e328f;
}
.a-label {
position: absolute;

2
src/pages/my/index.scss

@ -54,6 +54,8 @@ page { @@ -54,6 +54,8 @@ page {
.a-img {
width: 670rpx;
height: 136rpx;
border-radius: 120rpx;
box-shadow: 0px 2px 16px 0px #f33e328f;
}
.a-label {
position: absolute;

2
src/patient/components/patient-tab-bar/index.ts

@ -27,7 +27,7 @@ Component({ @@ -27,7 +27,7 @@ Component({
iconActive: 'tabbar2-3-active',
},
{
pagePath: '/pages/my/index',
pagePath: '/patient/pages/my/index',
text: '我的',
icon: 'tabbar2-4',
iconActive: 'tabbar2-4-active',

73
src/patient/pages/casesAdd/index.scss

@ -3,14 +3,14 @@ page { @@ -3,14 +3,14 @@ page {
}
.page {
padding: 40rpx 30rpx calc(42rpx + env(safe-area-inset-bottom));
padding: 40rpx 0 0;
height: 100vh;
box-sizing: border-box;
display: flex;
flex-direction: column;
.progress {
flex-shrink: 0;
padding: 0 50rpx 50rpx;
padding: 0 80rpx 50rpx;
display: flex;
align-items: center;
justify-content: space-between;
@ -61,6 +61,7 @@ page { @@ -61,6 +61,7 @@ page {
.tip-card {
flex-shrink: 0;
padding: 12rpx 24rpx;
margin: 0 30rpx;
margin-top: 32rpx;
display: flex;
align-items: center;
@ -87,8 +88,10 @@ page { @@ -87,8 +88,10 @@ page {
flex-direction: column;
justify-content: space-between;
.scroll-view0 {
padding: 0 30rpx;
flex: 1;
height: 40vh;
box-sizing: border-box;
.card {
margin-bottom: 24rpx;
padding: 0 32rpx;
@ -182,8 +185,10 @@ page { @@ -182,8 +185,10 @@ page {
}
}
.scroll-view1 {
padding: 0 30rpx;
flex: 1;
height: 40vh;
box-sizing: border-box;
.card {
margin-bottom: 24rpx;
padding: 0 32rpx;
@ -298,28 +303,81 @@ page { @@ -298,28 +303,81 @@ page {
}
}
.scroll-view2 {
padding: 0 30rpx;
flex: 1;
height: 40vh;
box-sizing: border-box;
.card {
margin-bottom: 24rpx;
padding: 0 32rpx;
padding: 0 32rpx 32rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.title {
padding: 32rpx 0 24rpx;
padding: 32rpx 0 0;
font-size: 36rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
display: flex;
justify-content: space-between;
align-items: center;
.stat-font {
font-size: 24rpx;
color: rgba(137, 141, 151, 1);
font-weight: normal;
.num {
font-size: 28rpx;
color: rgba(246, 74, 58, 1);
}
}
}
.sub-title {
margin-top: 16rpx;
font-size: 24rpx;
color: rgba(161, 164, 172, 1);
}
.body {
position: relative;
margin: 112rpx auto 0;
margin: 30rpx auto 0;
padding-bottom: 24rpx;
width: 345rpx;
height: 417rpx;
.part {
position: absolute;
width: 32rpx;
height: 32rpx;
background: rgba(255, 186, 148, 0.3);
border-radius: 50%;
&.active {
&::after {
position: absolute;
content: '';
top: 8rpx;
left: 8rpx;
width: 16rpx;
height: 16rpx;
border-radius: 50%;
background-color: rgba(246, 74, 58, 1);
}
}
}
}
.part-name {
font-size: 36rpx;
color: rgba(246, 74, 58, 1);
gap: 20rpx;
display: flex;
justify-content: center;
flex-wrap: wrap;
font-weight: bold;
}
.name {
margin-top: 10rpx;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
text-align: center;
}
.auto-area {
padding-bottom: 32rpx;
margin-top: 24rpx;
.textarea {
width: 100%;
padding: 22rpx 32rpx;
@ -342,6 +400,9 @@ page { @@ -342,6 +400,9 @@ page {
display: flex;
align-items: center;
gap: 22rpx;
background-color: #fff;
padding: 30rpx 30rpx calc(42rpx + env(safe-area-inset-bottom));
box-shadow: 0rpx -4rpx 15rpx 0rpx rgba(0, 0, 0, 0.05);
.cancel {
flex: 1;
padding: 18rpx;

59
src/patient/pages/casesAdd/index.ts

@ -10,6 +10,65 @@ Page({ @@ -10,6 +10,65 @@ Page({
},
current: 0,
parts: [
{
top: '94',
left: '-14',
},
{
top: '78',
left: '28',
},
{
top: '88',
left: '72',
},
{
top: '78',
left: '126',
},
{
top: '78',
left: '184',
},
{
top: '88',
left: '238',
},
{
top: '78',
left: '284',
},
{
top: '94',
left: '324',
},
{
top: '194',
left: '122',
},
{
top: '194',
left: '190',
},
{
top: '296',
left: '122',
},
{
top: '296',
left: '190',
},
{
top: '364',
left: '122',
},
{
top: '364',
left: '190',
},
],
},
onLoad() {},
})

32
src/patient/pages/casesAdd/index.wxml

@ -154,18 +154,44 @@ @@ -154,18 +154,44 @@
</swiper-item>
<swiper-item class="swiper-item">
<scroll-view class="scroll-view2" scroll-y>
<view class="card" style="background: #fff url({{imageUrl}}bg9.png) no-repeat top right 0/666rpx 492rpx?t={{Timestamp}}">
<view
class="card"
style="background: #fff url({{imageUrl}}bg9.png?t={{Timestamp}}) no-repeat top right 0/666rpx 492rpx"
>
<view class="title">您的靶关节</view>
<view class="body" style="background: #fff url({{imageUrl}}body1.png) no-repeat top center/345rpx 417rpx?t={{Timestamp}}"></view>
<view class="sub-title">因反复自发性出血或创伤后出血而导致慢性损伤的关节</view>
<view
class="body"
style="background: #fff url({{imageUrl}}body1.png?t={{Timestamp}}) no-repeat top center/345rpx 417rpx"
>
<view
class="part {{index===0 &&'active'}}"
wx:for="{{parts}}"
wx:key="index"
style="top:{{item.top}}rpx;left:{{item.left}}rpx"
></view>
</view>
<view class="part-name">
<view class="item">左侧手肘</view>
<view class="item">右侧手肘</view>
</view>
<view class="name">已选择关节</view>
</view>
<view class="card">
<view class="title">您近6个月的出血情况</view>
<view class="title">
您近6个月的出血情况
<view class="stat-font">
<text class="num">200</text>
/200
</view>
</view>
<view class="auto-area">
<textarea
class="textarea"
placeholder-class="place-textarea"
disable-default-padding
placeholder="出血频次、出血部位、出血原因等"
maxlength="200"
></textarea>
</view>
</view>

4
src/patient/pages/changeTel/index.json

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "修改手机号",
"usingComponents": {}
}

50
src/patient/pages/changeTel/index.scss

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 48rpx 40rpx;
.form {
padding: 0 32rpx;
background-color: #fff;
border-radius: 24rpx;
.row {
display: flex;
align-items: center;
.label {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
width: 5em;
}
.container {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.input {
padding: 32rpx 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.place-input {
color: rgba(161, 164, 172, 0.4);
}
.btn {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
}
}
}
}
.login-out {
margin-top: 48rpx;
padding: 20rpx;
font-size: 32rpx;
line-height: 48rpx;
color: #fff;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 96rpx;
}
}

85
src/patient/pages/changeTel/index.ts

@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
const app = getApp<IAppOption>()
let timer = null as null | number
Page({
data: {
mobile: '',
code: '',
codeText: '发送验证码',
},
onLoad() {},
getCode() {
if (timer) return
const mobile = this.data.mobile
if (!mobile) {
wx.showToast({
title: '手机号不能为空',
icon: 'none',
})
return
}
// 验证手机号
if (!/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/.test(mobile)) {
wx.showToast({
title: '手机号格式不正确',
icon: 'none',
})
return
}
wx.ajax({
method: 'POST',
url: '?r=zd/login/send-verify-code',
data: {
mobile,
},
}).then((res) => {
console.log(res)
wx.showToast({
icon: 'none',
title: '验证码已发送~',
})
let time = 60
timer = setInterval(() => {
time--
this.setData({
codeText: time + 's后重新发送',
})
if (time <= 0) {
clearInterval(timer as number)
timer = null
this.setData({
codeText: '发送验证码',
})
}
}, 1000)
})
},
handleSubmit() {
wx.showModal({
title: '确定修改此手机号?',
confirmColor: 'rgba(246, 74, 58, 1)',
success: (res) => {
if (!res.confirm) return
const { mobile, code } = this.data
const { registrationSource, registChannel, regBusinessId } = app.globalData
wx.ajax({
method: 'POST',
url: '?r=zd/account/update-telephone',
data: {
mobile,
code,
registrationSource,
registChannel,
regBusinessId,
},
}).then((_res) => {
wx.navigateBack()
})
},
})
},
handleBack() {
wx.navigateBack()
},
})

30
src/patient/pages/changeTel/index.wxml

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
<view class="page">
<view class="form">
<view class="row">
<view class="label">新手机号</view>
<view class="container">
<input
type="number"
class="input"
maxlength="11"
placeholder-class="place-input"
placeholder="请输入新手机号"
/>
</view>
</view>
<view class="row">
<view class="label">验证码</view>
<view class="container">
<input
type="number"
class="input"
maxlength="6"
placeholder-class="place-input"
placeholder="请输入短信验证码"
/>
<view class="btn" bind:tap="getCode">{{codeText}}</view>
</view>
</view>
</view>
<view class="login-out">提交</view>
</view>

17
src/patient/pages/course/index.ts

@ -11,7 +11,7 @@ Page({ @@ -11,7 +11,7 @@ Page({
// position: 'bottom',
},
current: 2,
current: 3,
},
onLoad() {},
handleSelectHostipal() {
@ -31,6 +31,11 @@ Page({ @@ -31,6 +31,11 @@ Page({
popupParams: {},
})
},
handlePreDiagnosisReport() {
wx.navigateTo({
url: '/patient/pages/preDiagnosisReport/index',
})
},
handleAavReport() {
wx.navigateTo({
url: '/patient/pages/aavReport/index',
@ -56,6 +61,16 @@ Page({ @@ -56,6 +61,16 @@ Page({
url: '/patient/pages/inhibitorsManageList/index',
})
},
handleFollowPlan() {
wx.navigateTo({
url: '/patient/pages/followPlan/index',
})
},
handleLastDiagnosisReport() {
wx.navigateTo({
url: '/patient/pages/lastDiagnosisReport/index',
})
},
handleBack() {
wx.navigateBack()
},

89
src/patient/pages/course/index.wxml

@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
</view>
</view>
</view>
<view class="row">
<view class="row" bind:tap="handlePreDiagnosisReport">
<view class="aside">
<view class="slow-line"></view>
<image class="radio" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image>
@ -168,7 +168,7 @@ @@ -168,7 +168,7 @@
</view>
</view>
</view>
<view class="row" bind:tap="handleAavReport">
<view class="row" bind:tap="handleAavReport">
<view class="aside">
<view class="slow-line"></view>
<image class="radio" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image>
@ -288,9 +288,7 @@ @@ -288,9 +288,7 @@
<image class="icon" src="{{imageUrl}}icon31.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer">
<view class="content">
已完成
</view>
<view class="content">已完成</view>
</view>
</view>
</view>
@ -321,6 +319,87 @@ @@ -321,6 +319,87 @@
</view>
</scroll-view>
</swiper-item>
<swiper-item class="swiper-item">
<scroll-view class="scroll-view" show-scrollbar="{{false}}">
<view class="scroll-view-container">
<view class="row">
<view class="aside">
<view class="num">4</view>
<view class="line"></view>
</view>
<view class="container">
<view class="c-header">
<view class="title">长期随访</view>
<view class="content">
<view>世界本该如此美好,现在也属于你</view>
</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleFollowPlan">
<view class="aside">
<view class="slow-line"></view>
<!-- <image class="radio" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image> -->
<image class="radio" src="{{imageUrl}}icon29.png?t={{Timestamp}}"></image>
<view class="line"></view>
</view>
<view class="container">
<view class="c-body">
<view class="wrap">
<view class="content">1.查看我的随访计划</view>
</view>
<image class="icon" src="/images/icon66.png"></image>
</view>
<view class="c-footer">
<view class="content">您的下次随访日期:2025-08-15</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleLastDiagnosisReport">
<view class="aside">
<view class="slow-line"></view>
<image class="radio" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image>
<view class="line"></view>
</view>
<view class="container">
<view class="c-body">
<view class="wrap">
<view class="content">2.最新复诊检查记录</view>
</view>
<image class="icon" src="{{imageUrl}}icon30.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer">
<view class="content">最近录入:2025-08-01</view>
</view>
</view>
</view>
<view class="row">
<view class="aside">
<view class="slow-line"></view>
<image class="radio" src="{{imageUrl}}icon28.png?t={{Timestamp}}"></image>
<view class="line"></view>
</view>
<view class="container">
<view class="c-body">
<view class="wrap">
<view class="content">查看我的健康变化</view>
</view>
<image class="icon" src="{{imageUrl}}icon31.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer">
<view class="content">最近录入:2025-08-01</view>
</view>
</view>
</view>
<view class="grow-row">
<view class="aside">
<view class="line"></view>
</view>
<view class="container"></view>
</view>
</view>
</scroll-view>
</swiper-item>
</swiper>
</view>
</view>

6
src/patient/pages/family/index.json

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
{
"navigationStyle": "custom",
"usingComponents": {
"navbar": "/components/navbar/index"
}
}

71
src/patient/pages/family/index.scss

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 0 40rpx 40rpx;
.container {
margin-top: 184rpx;
position: relative;
background: linear-gradient(292deg, #ffffff 0%, #fff3f2 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
padding: 136rpx 40rpx 48rpx;
.avatar {
position: absolute;
top: -92rpx;
left: 50%;
transform: translateX(-50%);
width: 184rpx;
height: 184rpx;
border-radius: 50%;
}
.name {
font-size: 40rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
text-align: center;
}
.title {
margin: 46rpx auto 0;
display: block;
width: 346rpx;
height: 34rpx;
}
.content {
margin-top: 32rpx;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
text-align: center;
}
.code {
margin: 38rpx auto 0;
display: block;
width: 296rpx;
height: 296rpx;
}
.tip {
margin-top: 22rpx;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
text-align: center;
}
}
.btn {
margin-top: 48rpx;
padding: 20rpx;
font-size: 32rpx;
line-height: 48rpx;
color: #fff;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 96rpx;
}
.bind-num{
margin-top: 20rpx;
padding: 12rpx;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
text-align: center;
}
}

16
src/patient/pages/family/index.ts

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
const _app = getApp<IAppOption>()
Page({
data: {},
onLoad() {},
handleFamilyList() {
wx.navigateTo({
url: '/patient/pages/familyList/index',
})
},
hadnleBakc() {
wx.navigateBack()
},
})
export {}

25
src/patient/pages/family/index.wxml

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
<navbar title="我的亲友" fixed custom-style="background:{{background}}">
<van-icon name="arrow-left" slot="left" size="18px" color="#000" bind:tap="handleBack" />
</navbar>
<view
class="page"
style="padding-top:{{pageTop}}px;background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 668rpx"
>
<view class="container">
<image
class="avatar"
src="https://pic1.zhimg.com/50/v2-8cfef5f9ea7d15963af2277c6814f152_720w.jpg?source=2c26e567"
></image>
<view class="name">王猛</view>
<image class="title" src="/images/title8.png"></image>
<view class="content">
亲友将同步展示和管理
<view></view>
患者的健康档案
</view>
<image class="code" src="https://pic1.zhimg.com/50/v2-8cfef5f9ea7d15963af2277c6814f152_720w.jpg?source=2c26e567" show-menu-by-longpress></image>
<view class="tip">请使用微信扫一扫绑定</view>
</view>
<view class="btn" bind:tap="handleFamilyList">查看我的家庭成员</view>
<view class="bind-num">还能绑定2个人</view>
</view>

4
src/patient/pages/familyList/index.json

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "我的亲友",
"usingComponents": {}
}

45
src/patient/pages/familyList/index.scss

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 48rpx 40rpx;
.card {
padding: 32rpx;
background-color: #fff;
border-radius: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
.wrap {
.w-header {
.name {
display: inline;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.tag {
margin-left: 20rpx;
display: inline-block;
padding: 2rpx 8rpx;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
line-height: 32rpx;
background-color: rgba(246, 74, 58, 1);
border-radius: 4rpx;
}
}
.date{
margin-top: 20rpx;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
}
}
.unbind{
flex-shrink: 0;
padding: 32rpx 0 32rpx 32rpx;
font-size: 28rpx;
color: rgba(246, 74, 58, 1);
}
}
}

8
src/patient/pages/familyList/index.ts

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

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

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
<view class="page">
<view class="card">
<view class="wrap">
<view class="w-header">
<view class="name">Niaha</view>
<view class="tag">本人</view>
</view>
<view class="date">绑定时间:2025-06-12 17:30:50</view>
</view>
<view class="unbind">解绑</view>
</view>
</view>

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

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
{
"navigationStyle": "custom",
"usingComponents": {
"patient-tab-bar":"/patient/components/patient-tab-bar/index"
"patient-tab-bar":"/patient/components/patient-tab-bar/index",
"calendar": "/components/calendar/index"
}
}

114
src/patient/pages/file/index.scss

@ -84,41 +84,42 @@ page { @@ -84,41 +84,42 @@ page {
padding: 8rpx 0 0;
.card {
margin-top: 24rpx;
position: relative;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
background: linear-gradient(346deg, #ffffff 0%, #fff9f9 85%, #ffebe9 100%);
padding-bottom: 32rpx;
.status {
position: absolute;
width: 80rpx;
height: 80rpx;
top: 12rpx;
right: 2rpx;
}
.c-header {
padding: 32rpx 16rpx 0 0;
display: flex;
align-items: center;
justify-content: space-between;
.title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
.left {
display: flex;
align-items: center;
gap: 22rpx;
&::before {
content: '';
width: 8rpx;
height: 32rpx;
border-radius: 0 32rpx 32rpx 0;
background: #f64a3a;
gap: 16rpx;
.title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 22rpx;
&::before {
content: '';
width: 8rpx;
height: 32rpx;
border-radius: 0 32rpx 32rpx 0;
background: #f64a3a;
}
}
.fold-icon {
width: 60rpx;
height: 60rpx;
}
}
.fold-icon {
width: 60rpx;
height: 60rpx;
.more {
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
}
}
.c-body {
@ -126,11 +127,21 @@ page { @@ -126,11 +127,21 @@ page {
padding: 16rpx 32rpx;
background: #f6f6f6;
border-radius: 24rpx 24rpx 24rpx 24rpx;
position: relative;
.status {
position: absolute;
width: 80rpx;
height: 80rpx;
top: 12rpx;
right: 22rpx;
}
.row {
padding: 16rpx 0;
display: flex;
gap: 32rpx;
.label {
width: 4em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
@ -146,6 +157,16 @@ page { @@ -146,6 +157,16 @@ page {
color: rgba(161, 164, 172, 1);
}
}
.c-btn {
margin: 32rpx 32rpx 0;
padding: 20rpx;
font-size: 32rpx;
line-height: 48rpx;
color: #fff;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 96rpx;
}
}
}
.container1 {
@ -153,7 +174,7 @@ page { @@ -153,7 +174,7 @@ page {
.card {
margin-top: 24rpx;
padding: 16rpx 32rpx;
background: linear-gradient(349deg, #ffffff 0%, #fff1ef 100%);
background: linear-gradient(349deg, #ffffff 60%, #fff1ef 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.row {
@ -172,4 +193,51 @@ page { @@ -172,4 +193,51 @@ page {
}
}
}
.container2 {
.date-card {
margin-top: 32rpx;
padding: 18rpx 32rpx;
background: linear-gradient(19.87deg, #ffffff 55.08%, #ffe8e6 129.24%);
border-radius: 84rpx 84rpx 84rpx 84rpx;
border: 2px solid #ffffff;
display: flex;
align-items: center;
.icon {
width: 48rpx;
height: 48rpx;
}
.content {
padding-left: 16rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.card {
margin-top: 32rpx;
border-radius: 24rpx;
border: 1px solid #ffffff;
background: rgba(255, 244, 243, 1);
.c-header {
padding: 22rpx;
text-align: center;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
}
.c-calendar {
padding: 40rpx 0 0;
background-color: #fff;
border-radius: 24rpx;
}
}
.btn {
margin: 32rpx 0 0;
padding: 20rpx;
font-size: 32rpx;
line-height: 48rpx;
color: #fff;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 96rpx;
}
}
}

17
src/patient/pages/file/index.ts

@ -2,7 +2,22 @@ const _app = getApp<IAppOption>() @@ -2,7 +2,22 @@ const _app = getApp<IAppOption>()
Page({
data: {
nav: 0,
nav: 2,
calendarConfig: {
multi: false,
hideSelectYear: true,
markToday: '今', // 当天日期展示不使用默认数字,用特殊文字标记
autoChoosedWhenJump: true,
firstDayOfWeek: 'Mon',
theme: 'geneb',
takeoverTap: true,
highlightToday: true,
onlyShowCurrentMonth: true,
disableMode: {
type: 'after', // [‘before’, 'after']
},
},
},
onLoad() {},
handleNav(e) {

48
src/patient/pages/file/index.wxml

@ -29,31 +29,37 @@ @@ -29,31 +29,37 @@
<view class="nav {{nav==1 && 'active'}}" bindtap="handleNav" data-nav="1">病史档案</view>
<view class="nav {{nav==2 && 'active'}}" bindtap="handleNav" data-nav="2">随访日历</view>
</view>
<view class="container0" wx:if="{{nav==0}}">
<view class="card">
<image wx:if="{{true}}" class="status" src="/images/icon42.png"></image>
<image wx:elif="{{false}}" class="status" src="/images/icon43.png"></image>
<image wx:elif="{{false}}" class="status" src="/images/icon44.png"></image>
<view class="c-header">
<view class="title">随访期</view>
<image class="fold-icon" src="/images/icon56.png"></image>
<view class="left">
<view class="title">随访期</view>
<image class="fold-icon" src="/images/icon56.png"></image>
</view>
<view class="more">
查看全部
<van-icon name="arrow" />
</view>
</view>
<view class="c-body">
<image wx:if="{{true}}" class="status" src="/images/icon42.png"></image>
<image wx:elif="{{false}}" class="status" src="/images/icon43.png"></image>
<image wx:elif="{{false}}" class="status" src="/images/icon44.png"></image>
<view class="row">
<view class="label">出生年月</view>
<view class="content">1980 年 12 月(44 岁)</view>
<view class="label">日期</view>
<view class="content">2025-06-01</view>
</view>
<view class="row">
<view class="label">确诊时间</view>
<view class="content">2000 年 12 月(20 岁时)</view>
<view class="label">诊疗医院</view>
<view class="content">唐山人民医院</view>
</view>
<view class="row">
<view class="label">您的体重</view>
<view class="content">69 kg</view>
<view class="label">检查项目</view>
<view class="content">3/3</view>
</view>
<view class="detail">查看详情></view>
</view>
<view class="c-btn">添加随访记录</view>
</view>
</view>
<view class="container1" wx:if="{{nav==1}}">
@ -72,6 +78,24 @@ @@ -72,6 +78,24 @@
</view>
</view>
</view>
<view class="container2" wx:if="{{nav==2}}">
<view class="date-card">
<image class="icon" src="/images/icon67.png"></image>
<view class="content">注射日:2025 年5月28日 星期三</view>
</view>
<view class="card">
<view class="c-header">注射后第1周 建议本周2次复诊</view>
<view class="c-calendar">
<calendar
bind:whenChangeMonth="handleWhenChangeMonth"
config="{{calendarConfig}}"
id="calendar"
bind:jumpToToday="toggleFold"
></calendar>
</view>
</view>
<view class="btn"> 向医生询问出诊时间</view>
</view>
</view>
<patient-tab-bar></patient-tab-bar>

4
src/patient/pages/followPlan/index.json

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "查看我的随访计划",
"usingComponents": {}
}

142
src/patient/pages/followPlan/index.scss

@ -0,0 +1,142 @@ @@ -0,0 +1,142 @@
page {
background-color: #f7f7fa;
}
.page {
padding: 32rpx 40rpx 260rpx;
.date-card {
padding: 18rpx 32rpx;
background: linear-gradient(19.87deg, #ffffff 55.08%, #ffe8e6 129.24%);
border-radius: 84rpx 84rpx 84rpx 84rpx;
border: 2px solid #ffffff;
display: flex;
align-items: center;
.icon {
width: 48rpx;
height: 48rpx;
}
.content {
padding-left: 16rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.body {
margin-top: 32rpx;
background: #fff4f3;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.title {
padding: 20rpx;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
}
.container {
padding: 48rpx 24rpx 0;
background-color: #fff;
.table {
.thead {
display: grid;
border-radius: 24rpx 24rpx 0 0;
grid-template-columns: repeat(2, 1fr);
background-color: rgba(246, 74, 58, 1);
.th {
padding: 22rpx;
text-align: center;
font-size: 28rpx;
color: rgba(255, 255, 255, 1);
}
}
.tbody {
.tr {
display: grid;
grid-template-columns: 36rpx calc(50% - 36rpx) 50%;
.aside {
margin-right: 12rpx;
display: flex;
flex-direction: column;
align-items: center;
.line-top {
flex: 1;
border-right: 1px dashed rgba(207, 209, 213, 1);
}
.order {
flex-shrink: 0;
width: 24rpx;
height: 24rpx;
border-radius: 50%;
background-color: rgba(207, 209, 213, 1);
}
.line-bottom {
flex: 1;
border-right: 1px dashed rgba(207, 209, 213, 1);
}
}
.td {
padding: 28rpx 32rpx;
font-size: 28rpx;
color: rgba(1, 1, 5, 1);
text-align: center;
line-height: 40rpx;
display: flex;
align-items: center;
justify-content: center;
white-space: pre-line;
}
}
.tr:nth-child(even) {
.td {
background-color: rgba(255, 244, 243, 1);
}
}
.active {
.aside {
.line-top,
.line-bottom {
border-color: rgba(242, 58, 47, 1);
}
.order {
background-color: rgba(242, 58, 47, 1);
}
}
}
}
}
}
}
.footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
padding: 16rpx 40rpx calc(16rpx + env(safe-area-inset-bottom));
background-color: rgba(255, 255, 255, 1);
display: flex;
gap: 26rpx;
box-sizing: border-box;
.cancel {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
.submit {
flex: 1;
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #fff;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx;
border: 1px solid #f64a3a;
}
}
}

8
src/patient/pages/followPlan/index.ts

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

32
src/patient/pages/followPlan/index.wxml

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
<view class="page">
<view class="date-card">
<image class="icon" src="/images/icon67.png"></image>
<view class="content">注射日:2025 年5月28日 星期三</view>
</view>
<view class="body">
<view class="title">基因治疗后时间 监测频率</view>
<view class="container">
<view class="table">
<view class="thead">
<view class="th">输注后时间</view>
<view class="th">监测频率</view>
</view>
<view class="tbody">
<view class="tr {{index<=1 && 'active'}}" wx:for="{{8}}" wx:key="index">
<view class="aside">
<view class="line-top"></view>
<view class="order"></view>
<view class="line-bottom"></view>
</view>
<view class="td">1 周内</view>
<view class="td">每周2次 输注后第3天,第6天</view>
</view>
</view>
</view>
</view>
</view>
<view class="footer">
<view class="cancel">查看我的随访日历</view>
<view class="submit">添加复诊检查记录</view>
</view>
</view>

61
src/patient/pages/home/index.scss

@ -180,7 +180,7 @@ page { @@ -180,7 +180,7 @@ page {
}
}
}
.container {
.container1 {
padding: 40rpx 58rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(40, 0, 0, 0.06);
@ -227,6 +227,65 @@ page { @@ -227,6 +227,65 @@ page {
border-radius: 84rpx 84rpx 84rpx 84rpx;
}
}
.container4 {
display: flex;
padding: 32rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(40, 0, 0, 0.06);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.left {
padding-right: 30rpx;
border-right: 1px dashed rgba(207, 209, 213, 1);
flex: 1;
.title {
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
line-height: 44rpx;
}
.date {
font-size: 48rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.footer {
display: flex;
justify-content: space-between;
align-items: flex-end;
.date-name {
font-size: 28rpx;
color: rgba(242, 58, 47, 1);
}
.add {
width: 68rpx;
height: 68rpx;
}
}
}
.right {
padding-left: 18rpx;
flex: 1;
.title {
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
line-height: 44rpx;
}
.content {
display: flex;
align-items: flex-end;
justify-content: space-between;
.status {
width: 136rpx;
height: 136rpx;
}
.add {
width: 68rpx;
height: 68rpx;
margin-bottom: 6rpx;
}
}
}
}
}
.module1 {
margin-top: 48rpx;

8
src/patient/pages/home/index.ts

@ -3,9 +3,11 @@ const _app = getApp<IAppOption>() @@ -3,9 +3,11 @@ const _app = getApp<IAppOption>()
Page({
data: {
popupShow: false,
popupType: 'selectIdentity',
// popupType: 'bindDoctorReject',
// popupType: 'bindDoctor',
// popupType: 'selectIdentity', // 选择您的身份
// popupType: 'bindDoctorReject', // 绑定失败
// popupType: 'bindDoctor', // 绑定成功
// popupType: 'bindDoctorQuestion', // 为什么绑定医生
popupType: 'conformBindDoctorQuestion', // 确认绑定曾经扫码医生
popupParams: {},
progress: 1,

39
src/patient/pages/home/index.wxml

@ -59,7 +59,7 @@ @@ -59,7 +59,7 @@
<view class="item {{progress==4 && 'active'}}" bind:tap="handleProgress" data-index="{{4}}">4</view>
</view>
</view>
<view class="container">
<view class="container1" wx:if="{{progress==1}}">
<view class="c-header">
<view class="num">1</view>
<view class="wrap">
@ -69,6 +69,43 @@ @@ -69,6 +69,43 @@
</view>
<view class="btn" bind:tap="handleCourse">查看我的诊疗计划</view>
</view>
<view class="container1" wx:elif="{{progress==2}}">
<view class="c-header">
<view class="num">2</view>
<view class="wrap">
<view class="title">基于治疗中心检查</view>
<view class="content">做好每一步检查,向美好生活继续!</view>
</view>
</view>
<view class="btn" bind:tap="handleCourse">查看我的诊疗计划</view>
</view>
<view class="container1" wx:elif="{{progress==3}}">
<view class="c-header">
<view class="num">3</view>
<view class="wrap">
<view class="title">基因治疗-注射日</view>
<view class="content">重要的日子终于到来了~</view>
</view>
</view>
<view class="btn" bind:tap="handleCourse">查看我的诊疗计划</view>
</view>
<view class="container4" wx:elif="{{progress==4}}">
<view class="left">
<view class="title">最近一次随访</view>
<view class="date">2025.6.15</view>
<view class="footer">
<view class="date-name">2天后</view>
<image class="add" src="/images/icon61.png"></image>
</view>
</view>
<view class="right">
<view class="title">最近状态状态</view>
<view class="content">
<image class="status" src="/images/icon42.png"></image>
<image class="add" src="/images/icon61.png"></image>
</view>
</view>
</view>
</view>
<view class="module1">
<view class="m-header">

7
src/patient/pages/lastDiagnosisReport/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"navigationBarTitleText": "最新复诊检查记录",
"usingComponents": {
"uploadFile": "/components/uploadFile/index",
"popup": "/components/popup/index"
}
}

207
src/patient/pages/lastDiagnosisReport/index.scss

@ -0,0 +1,207 @@ @@ -0,0 +1,207 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 32rpx 30rpx;
.date-form {
padding: 24rpx 32rpx;
background-color: #fff;
border-radius: 80rpx;
display: flex;
align-items: center;
.icon {
flex-shrink: 0;
width: 48rpx;
height: 48rpx;
}
.label {
flex-shrink: 0;
margin-left: 16rpx;
font-size: 32rpx;
color: rgba(0, 0, 0, 1);
}
.picker {
flex: 1;
.picker-content {
padding-left: 48rpx;
display: flex;
align-items: center;
.content {
flex: 1;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
&:empty::after {
content: attr(data-place);
color: rgba(161, 164, 172, 0.5);
}
}
.tril {
width: 0;
height: 0;
border-style: solid;
border-width: 12rpx 12rpx 0 12rpx;
border-color: rgba(207, 209, 213, 1) transparent transparent transparent;
}
}
}
}
.form {
margin-top: 48rpx;
.form-card {
display: flex;
gap: 24rpx;
.aside {
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
.line-top {
flex-shrink: 0;
height: 32rpx;
border-left: 1px dashed rgba(207, 209, 213, 1);
}
.order {
flex-shrink: 0;
width: 40rpx;
height: 40rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
background-color: rgba(207, 209, 213, 1);
border-radius: 50%;
}
.line-bottom {
flex: 1;
height: 20rpx;
border-left: 1px dashed rgba(207, 209, 213, 1);
}
&.active {
.order {
color: #fff;
background-color: rgba(246, 74, 58, 1);
}
.line-bottom,
.line-top {
background-color: rgba(246, 74, 58, 1);
}
}
}
.container {
flex: 1;
background-color: #fff;
border-radius: 24rpx;
margin-bottom: 24rpx;
.c-header {
padding: 32rpx 32rpx 32rpx 0;
.wrap {
display: flex;
align-items: center;
justify-content: space-between;
.left {
display: flex;
align-items: center;
gap: 12rpx;
.title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
display: flex;
gap: 24rpx;
align-items: center;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
border-radius: 0 8rpx 8rpx 0;
background: #f64a3a;
}
}
.icon {
width: 32rpx;
height: 32rpx;
}
}
.status {
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 32rpx;
height: 32rpx;
}
&.active {
color: rgba(53, 177, 63, 1);
}
}
}
.content {
padding: 16rpx 32rpx 0;
font-size: 24rpx;
color: rgba(96, 97, 99, 1);
line-height: 36rpx;
}
}
.c-body {
max-height: 100vh;
transition: all 0.3s;
&.fold {
max-height: 0;
overflow: hidden;
}
.module1 {
padding: 16rpx 32rpx 32rpx;
.m-title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module2,.module3 {
padding: 0 32rpx 32rpx;
.m-input {
padding: 0 32rpx;
display: flex;
align-items: center;
gap: 32rpx;
background-color: rgba(247, 247, 250, 1);
border-radius: 24rpx;
.label {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.input {
flex: 1;
font-size: 32rpx;
height: 96rpx;
color: rgba(1, 1, 5, 1);
}
.place-input {
color: rgba(161, 164, 172, 0.5);
}
.sub {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
}
}
}
}
}

12
src/patient/pages/lastDiagnosisReport/index.ts

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
const _app = getApp<IAppOption>()
Page({
data: {
popupShow: false,
popupType: 'preDiagnosisReportDate', // 确认绑定曾经扫码医生
popupParams: {},
},
onLoad() {},
})
export {}

122
src/patient/pages/lastDiagnosisReport/index.wxml

@ -0,0 +1,122 @@ @@ -0,0 +1,122 @@
<view class="page">
<view class="date-form">
<image class="icon" src="/images/icon52.png"></image>
<view class="label">诊前检查时间</view>
<picker class="picker">
<view class="picker-content">
<view class="content" data-place="请选择"></view>
<view class="tril"></view>
</view>
</picker>
</view>
<view class="form">
<view class="form-card">
<view class="aside">
<view class="line-top" style="border: none"></view>
<view class="order">1</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">生化检查</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
<view class="content">重点检查项目:丙氨酸氨基转移酶(ALT)天门冬氨酸氨基转移酶(AST)总胆红素肌酐</view>
</view>
<view class="c-body">
<view class="module1">
<view class="m-title">请上传您的检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">2</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">凝血因子 IX 活性</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
</view>
<view class="c-body">
<view class="module2">
<view class="m-input">
<view class="label">您的凝血因子水平</view>
<input type="number" placeholder="请填写" class="input" placeholder-class="place-input" />
<view class="sub">%</view>
</view>
<view class="m-title">请上传您的检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">3</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">其他检查</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
</view>
<view class="c-body">
<view class="module3">
<view class="m-input">
<view class="label">检查项</view>
<input type="number" placeholder="请填写" class="input" placeholder-class="place-input" />
</view>
<view class="m-title">请上传您的检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<popup
show="{{popupShow}}"
type="{{popupType}}"
params="{{popupParams}}"
bind:ok="handlePopupOk"
bind:cancel="handlePopupCancel"
></popup>

4
src/patient/pages/loginOut/index.json

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "注销",
"usingComponents": {}
}

47
src/patient/pages/loginOut/index.scss

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 134rpx 40rpx 40rpx;
.container {
position: relative;
padding: 122rpx 32rpx 40rpx;
background: linear-gradient(2deg, #ffffff 0%, #ffffff 82%, #ffe5e3 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.icon {
position: absolute;
top: -72rpx;
left: 50%;
transform: translateX(-50%);
width: 144rpx;
height: 144rpx;
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
line-height: 56rpx;
text-align: center;
}
.btn1 {
margin-top: 48rpx;
padding: 20rpx;
font-size: 32rpx;
line-height: 48rpx;
color: #fff;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 96rpx;
}
.btn2 {
margin-top: 20rpx;
padding: 20rpx;
font-size: 32rpx;
line-height: 48rpx;
color: rgba(246, 74, 58, 1);
text-align: center;
border-radius: 96rpx;
}
}
}

18
src/patient/pages/loginOut/index.ts

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
const _app = getApp<IAppOption>()
Page({
data: {},
onLoad() {},
handleLoginOut() {
wx.showModal({
title: '确定注销吗?',
confirmColor: 'rgba(246, 74, 58, 1)',
success: (res) => {
if (res.confirm) {
}
},
})
},
})
export {}

16
src/patient/pages/loginOut/index.wxml

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
<view class="page">
<view class="container">
<image class="icon" src="/images/icon24.png"></image>
<view class="content">
请注意,注销后您在本平台存储的
<view></view>
全部信息将被删除包括
<view></view>
基础信息、诊疗进展、健康档案等数据
<view></view>
请您谨慎操作
</view>
<view class="btn1" bind:tap="handleLoginOut">确认注销</view>
<view class="btn2">取消</view>
</view>
</view>

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

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"navigationStyle": "custom",
"usingComponents": {
"popup": "/components/popup/index",
"patient-tab-bar":"/patient/components/patient-tab-bar/index"
}
}

153
src/patient/pages/my/index.scss

@ -0,0 +1,153 @@ @@ -0,0 +1,153 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 52rpx 30rpx;
.user {
display: flex;
align-items: center;
.avatar-wrapper {
flex-shrink: 0;
padding: 0;
margin: 0;
width: 128rpx;
height: 128rpx;
outline: none;
&::after {
border: none;
}
.avatar {
width: 128rpx;
height: 128rpx;
border-radius: 50%;
}
}
.wrap {
flex: 1;
padding-left: 24rpx;
.name {
display: flex;
align-items: center;
.nickname {
font-size: 40rpx;
}
font-weight: bold;
color: rgba(1, 1, 5, 1);
}
.icon {
margin-left: 16rpx;
width: 48rpx;
height: 48rpx;
}
}
.day {
margin-top: 8rpx;
font-size: 28rpx;
color: rgba(1, 1, 5, 0.4);
line-height: 36rpx;
display: flex;
align-items: baseline;
}
.icon {
width: 50rpx;
height: 50rpx;
}
}
.apply {
margin-top: 48rpx;
position: relative;
.a-img {
width: 100%;
height: 136rpx;
border-radius: 120rpx;
box-shadow: 0px 2px 16px 0px #f33e328f;
}
.a-label {
position: absolute;
top: -8rpx;
right: 68rpx;
width: 115rpx;
height: 60rpx;
}
.content {
padding: 20rpx 0;
position: absolute;
left: 260rpx;
top: -4rpx;
width: 8em;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
line-height: 1.4;
box-sizing: border-box;
font-size: 30rpx;
color: rgba(255, 255, 255, 1);
font-weight: bold;
}
}
.list {
margin-top: 48rpx;
.list-header {
display: flex;
align-items: center;
gap: 8rpx;
.name {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.icon {
flex-shrink: 0;
width: 48rpx;
height: 48rpx;
}
}
.list-container {
margin-top: 46rpx;
background: linear-gradient(359deg, #ffffff 0%, #fff8f7 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
padding: 0 22rpx;
.item {
padding: 22rpx 0;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid rgba(247, 247, 250, 1);
&:last-of-type {
border: none;
}
.icon {
width: 60rpx;
height: 60rpx;
}
.content {
padding: 0 24rpx;
flex: 1;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
.tex {
padding-left: 10rpx;
color: rgba(161, 164, 172, 1);
}
}
.more {
color: rgba(161, 164, 172, 0.4);
}
}
}
}
.login-out {
margin-top: 158rpx;
width: 670rpx;
height: 84rpx;
border-radius: 130rpx 130rpx 130rpx 130rpx;
border: 2rpx solid rgba(1, 1, 5, 0.04);
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(1, 1, 5, 0.4);
}
}

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

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
const app = getApp<IAppOption>()
Page({
data: {
popupShow: false,
popupType: 'stayTuned',
popupParams: {},
},
onLoad() {
app.waitLogin().then(() => {
app.getUserInfo().then((userInfo) => {
this.setData({
userInfo,
// 数字变红
Days: userInfo.Days.replace(/(\d+)/g, '<span style="font-size: 20px;color: rgba(242, 58, 47, 1);">$1</span>'),
})
})
})
},
onChooseAvatar(e) {
const { avatarUrl } = e.detail
const url = `${app.globalData.upFileUrl}?r=file-service/upload-img`
wx.showLoading({
title: '上传中',
})
wx.uploadFile({
url,
filePath: avatarUrl,
name: 'file',
success: (res) => {
const data = JSON.parse(res.data)
const avatarUrl = data.data.Url
wx.ajax({
method: 'POST',
url: '?r=wtx/user/update-avatar',
data: {
Avatar: avatarUrl,
},
})
.then(() => {
wx.hideLoading()
wx.showToast({
title: '头像更新成功!',
icon: 'none',
})
this.setData({
'userInfo.Avatar': avatarUrl,
})
})
.catch(() => {
wx.hideLoading()
})
},
fail() {
wx.hideLoading()
},
})
},
handlePopupCancel() {
this.setData({
popupShow: false,
})
},
routerTo(e) {
const { url } = e.currentTarget.dataset
wx.navigateTo({
url,
})
},
handleUserInfo() {
wx.navigateTo({
url: '/patient/pages/userInfo/index',
})
},
handleFamily() {
wx.navigateTo({
url: '/patient/pages/family/index',
})
},
})
export {}

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

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
<view
class="page"
style="background: url('{{imageUrl}}bg1.png?t={{Timestamp}}') no-repeat top center/100% 602rpx;padding-top:{{pageTop+21}}px;"
>
<view class="user">
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
<image class="avatar" src="{{userInfo.Avatar}}"></image>
</button>
<view class="wrap">
<view class="name">
<text class="nickname">你好</text>
</view>
<view class="day">
今天是陪伴您的第
<rich-text class="rich" nodes="{{Days}}"></rich-text>
</view>
</view>
<image class="icon" bind:tap="handleUserInfo" src="/images/icon12.png"></image>
</view>
<view class="apply" bind:tap="routerTo" data-url="/pages/applyFrom/index">
<image class="a-img" src="{{imageUrl}}index-apply.png?t={{Timestamp}}"></image>
<view class="content">查看我的健康档案</view>
</view>
<view class="list">
<view class="list-header" bind:tap="handleNone">
<view class="name">切换身份</view>
</view>
<view class="list-container">
<view class="item">
<image class="icon" src="/images/icon68.png"></image>
<view class="content">我是医生<text class="tex">登录医生端</text></view>
<van-icon class="more" name="arrow" />
</view>
<view class="item" bind:tap="handleFamily">
<image class="icon" src="/images/icon69.png"></image>
<view class="content">我的亲友</view>
<van-icon class="more" name="arrow" />
</view>
</view>
</view>
</view>
<popup model:show="{{popupShow}}" type="{{popupType}}" params="{{popupParams}}" bind:cancel="handlePopupCancel"></popup>
<patient-tab-bar></patient-tab-bar>

7
src/patient/pages/preDiagnosisReport/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"navigationBarTitleText": "我的诊前检查报告",
"usingComponents": {
"uploadFile": "/components/uploadFile/index",
"popup": "/components/popup/index"
}
}

402
src/patient/pages/preDiagnosisReport/index.scss

@ -0,0 +1,402 @@ @@ -0,0 +1,402 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 32rpx 30rpx;
.date-form {
padding: 24rpx 32rpx;
background-color: #fff;
border-radius: 80rpx;
display: flex;
align-items: center;
.icon {
flex-shrink: 0;
width: 48rpx;
height: 48rpx;
}
.label {
flex-shrink: 0;
margin-left: 16rpx;
font-size: 32rpx;
color: rgba(0, 0, 0, 1);
}
.picker {
flex: 1;
.picker-content {
padding-left: 48rpx;
display: flex;
align-items: center;
.content {
flex: 1;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
&:empty::after {
content: attr(data-place);
color: rgba(161, 164, 172, 0.5);
}
}
.tril {
width: 0;
height: 0;
border-style: solid;
border-width: 12rpx 12rpx 0 12rpx;
border-color: rgba(207, 209, 213, 1) transparent transparent transparent;
}
}
}
}
.form {
margin-top: 48rpx;
.form-header {
padding-bottom: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
.form-title {
font-size: 36rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.order {
display: flex;
align-items: baseline;
color: rgba(161, 164, 172, 1);
font-size: 28rpx;
.green {
font-size: 44rpx;
color: rgba(53, 177, 63, 1);
font-weight: bold;
}
.all {
font-size: 28rpx;
}
}
}
.form-card {
display: flex;
gap: 24rpx;
.aside {
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
.line-top {
flex-shrink: 0;
height: 32rpx;
border-left: 1px dashed rgba(207, 209, 213, 1);
}
.order {
flex-shrink: 0;
width: 40rpx;
height: 40rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
background-color: rgba(207, 209, 213, 1);
border-radius: 50%;
}
.line-bottom {
flex: 1;
height: 20rpx;
border-left: 1px dashed rgba(207, 209, 213, 1);
}
&.active {
.order {
color: #fff;
background-color: rgba(246, 74, 58, 1);
}
.line-bottom,
.line-top {
background-color: rgba(246, 74, 58, 1);
}
}
}
.container {
flex: 1;
background-color: #fff;
border-radius: 24rpx;
margin-bottom: 24rpx;
.c-header {
padding: 32rpx 32rpx 32rpx 0;
.wrap {
display: flex;
align-items: center;
justify-content: space-between;
.left {
display: flex;
align-items: center;
gap: 12rpx;
.title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
display: flex;
gap: 24rpx;
align-items: center;
&::before {
content: '';
width: 8rpx;
height: 36rpx;
border-radius: 0 8rpx 8rpx 0;
background: #f64a3a;
}
}
.icon {
width: 32rpx;
height: 32rpx;
}
}
.status {
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 32rpx;
height: 32rpx;
}
&.active {
color: rgba(53, 177, 63, 1);
}
}
}
.content {
padding: 16rpx 32rpx 0;
font-size: 24rpx;
color: rgba(96, 97, 99, 1);
line-height: 36rpx;
}
}
.c-body {
max-height: 100vh;
transition: all 0.3s;
&.fold {
max-height: 0;
overflow: hidden;
}
.module1 {
padding: 16rpx 32rpx 32rpx;
.m-title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module2 {
padding: 16rpx 32rpx 32rpx;
.m-title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module3 {
padding: 0 32rpx 32rpx;
.m-input {
padding: 0 32rpx;
display: flex;
align-items: center;
gap: 32rpx;
background-color: rgba(247, 247, 250, 1);
border-radius: 24rpx;
.label {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.input {
flex: 1;
font-size: 32rpx;
height: 96rpx;
color: rgba(1, 1, 5, 1);
}
.place-input {
color: rgba(161, 164, 172, 0.5);
}
.sub {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module4 {
padding: 0 32rpx 32rpx;
.m-select {
display: flex;
flex-wrap: wrap;
gap: 28rpx;
.m-item {
padding: 12rpx 24rpx;
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
background: #f7f7fa;
border-radius: 12rpx 12rpx 12rpx 12rpx;
&.active {
color: #fff;
background-color: rgba(246, 74, 58, 1);
}
}
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module5 {
padding: 0 32rpx 32rpx;
.m-select-title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.m-select {
margin-top: 24rpx;
display: flex;
flex-wrap: wrap;
gap: 28rpx;
.m-item {
padding: 12rpx 24rpx;
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
background: #f7f7fa;
border-radius: 12rpx 12rpx 12rpx 12rpx;
&.active {
color: #fff;
background-color: rgba(246, 74, 58, 1);
}
}
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module6 {
padding: 0 32rpx 32rpx;
.m-select-title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.m-select {
margin-top: 24rpx;
display: flex;
flex-wrap: wrap;
gap: 28rpx;
.m-item {
padding: 12rpx 24rpx;
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
background: #f7f7fa;
border-radius: 12rpx 12rpx 12rpx 12rpx;
&.active {
color: #fff;
background-color: rgba(246, 74, 58, 1);
}
}
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module7 {
padding: 0 32rpx 32rpx;
.m-select-title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.m-select {
margin-top: 24rpx;
display: flex;
flex-wrap: wrap;
gap: 28rpx;
.m-item {
padding: 12rpx 24rpx;
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
background: #f7f7fa;
border-radius: 12rpx 12rpx 12rpx 12rpx;
&.active {
color: #fff;
background-color: rgba(246, 74, 58, 1);
}
}
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module8 {
padding: 0 32rpx 32rpx;
.m-input {
padding: 0 32rpx;
display: flex;
align-items: center;
gap: 32rpx;
background-color: rgba(247, 247, 250, 1);
border-radius: 24rpx;
.label {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.input {
flex: 1;
font-size: 32rpx;
height: 96rpx;
color: rgba(1, 1, 5, 1);
}
.place-input {
color: rgba(161, 164, 172, 0.5);
}
.sub {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
}
}
}
}
}

12
src/patient/pages/preDiagnosisReport/index.ts

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
const _app = getApp<IAppOption>()
Page({
data: {
popupShow: false,
popupType: 'preDiagnosisReportDate', // 确认绑定曾经扫码医生
popupParams: {},
},
onLoad() {},
})
export {}

308
src/patient/pages/preDiagnosisReport/index.wxml

@ -0,0 +1,308 @@ @@ -0,0 +1,308 @@
<view class="page">
<view class="date-form">
<image class="icon" src="/images/icon52.png"></image>
<view class="label">诊前检查时间</view>
<picker class="picker">
<view class="picker-content">
<view class="content" data-place="请选择"></view>
<view class="tril"></view>
</view>
</picker>
</view>
<view class="form">
<view class="form-header">
<view class="form-title">您的诊前检查项目</view>
<view class="order">
<view class="green">1</view>
/
<view class="all">8</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top" style="border: none"></view>
<view class="order">1</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">血常规检查</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
<view class="content">重点检查项目:白细胞计数)WBC)血红蛋白(HGB)血小板计数(PLT)</view>
</view>
<view class="c-body">
<view class="module1">
<view class="m-title">请上传您的检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">2</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">生化检查</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
<view class="content">重点检查项目:丙氨酸氨基转移酶(ALT)天门冬氨酸氨基转移酶(AST)总胆红素肌酐</view>
</view>
<view class="c-body">
<view class="module2">
<view class="m-title">请上传您的检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">3</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">凝血因子 IX 活性</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
</view>
<view class="c-body">
<view class="module3">
<view class="m-input">
<view class="label">您的凝血因子水平</view>
<input type="number" placeholder="请填写" class="input" placeholder-class="place-input" />
<view class="sub">%</view>
</view>
<view class="m-title">请上传您的检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">4</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">凝血因子 IX 抑制物检测</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
</view>
<view class="c-body">
<view class="module4">
<view class="m-select">
<view class="m-item active">阳性(+)</view>
<view class="m-item">阴性(-)</view>
</view>
<view class="m-title">可上传您的抑制物检查结果</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">5</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">乙型肝炎相关检查</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
</view>
<view class="c-body">
<view class="module5">
<view class="m-select-title">乙型肝炎病毒表面抗原(HBsAg)</view>
<view class="m-select">
<view class="m-item active">阳性(+)</view>
<view class="m-item">阴性(-)</view>
</view>
<view class="m-select-title" style="margin-top: 48rpx">乙型肝炎病毒表面抗原(HBsAg)</view>
<view class="m-select">
<view class="m-item active">正常数值</view>
<view class="m-item">偏高数值</view>
</view>
<view class="m-title">请上传乙型肝炎检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">6</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">丙型肝炎相关检查</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
</view>
<view class="c-body">
<view class="module6">
<view class="m-select-title">丙型肝炎病毒抗体(抗 - HCV)</view>
<view class="m-select">
<view class="m-item active">阳性(+)</view>
<view class="m-item">阴性(-)</view>
</view>
<view class="m-select-title" style="margin-top: 48rpx">丙型肝炎病毒核糖核酸(HCV - RNA)</view>
<view class="m-select">
<view class="m-item active">阳性(+)</view>
<view class="m-item">阴性(-)</view>
</view>
<view class="m-title">请上传丙型肝炎检查报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">7</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">HIV抗体</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
<view class="content">类免疫缺陷病毒抗体(HIV - Ab)</view>
</view>
<view class="c-body">
<view class="module7">
<view class="m-select-title">填选您的HIV检查结果</view>
<view class="m-select">
<view class="m-item active">阳性(+)</view>
<view class="m-item">阴性(-)</view>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside">
<view class="line-top"></view>
<view class="order">8</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left">
<view class="title">甲胎蛋白(AFP)检测</view>
<image class="icon" src="/images/icon63.png"></image>
</view>
<view class="status">
<image wx:if="{{true}}" class="icon" src="/images/icon64.png"></image>
<image wx:else class="icon" src="/images/icon65.png"></image>
已检查
</view>
</view>
</view>
<view class="c-body">
<view class="module8">
<view class="m-input">
<view class="label">您的(AFP)检测</view>
<input type="number" placeholder="请填写" class="input" placeholder-class="place-input" />
<view class="sub">μg/L</view>
</view>
<view class="m-title">填提交您的AFP 检测报告</view>
<view class="file-list">
<uploadFile></uploadFile>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<popup
show="{{popupShow}}"
type="{{popupType}}"
params="{{popupParams}}"
bind:ok="handlePopupOk"
bind:cancel="handlePopupCancel"
></popup>

6
src/patient/pages/userInfo/index.json

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
{
"navigationBarTitleText": "个人信息修改",
"usingComponents": {
"pickerArea": "/components/pickerArea/index"
}
}

70
src/patient/pages/userInfo/index.scss

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 48rpx 40rpx;
.form {
padding: 0 32rpx;
background-color: #fff;
border-radius: 24rpx;
.row {
display: flex;
align-items: center;
.label {
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
width: 5em;
}
.container {
flex: 1;
.input {
padding: 32rpx 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.place-input {
color: rgba(161, 164, 172, 0.40);
}
.picker,
.picker-area {
.picker-content {
.content {
padding: 32rpx 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
&:empty::after {
content: attr(data-place);
color: rgba(161, 164, 172, 0.40);
}
}
}
}
.tel {
padding: 32rpx 0;
display: flex;
justify-content: space-between;
align-items: center;
.tel-num {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.btn {
font-size: 32rpx;
color: rgba(246, 74, 58, 1);
}
}
}
}
}
.login-out {
margin-top: 48rpx;
padding: 22rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
text-align: center;
line-height: 1;
background-color: #fff;
border-radius: 96rpx;
}
}

18
src/patient/pages/userInfo/index.ts

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
const _app = getApp<IAppOption>()
Page({
data: {},
onLoad() {},
handleTel() {
wx.navigateTo({
url: '/patient/pages/changeTel/index',
})
},
handleLoginOut() {
wx.navigateTo({
url: '/patient/pages/loginOut/index',
})
},
})
export {}

40
src/patient/pages/userInfo/index.wxml

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
<view class="page">
<view class="form">
<view class="row">
<view class="label">我的姓名</view>
<view class="container">
<input type="text" class="input" placeholder-class="place-input" placeholder="请输入" />
</view>
</view>
<view class="row">
<view class="label">出生年月</view>
<view class="container">
<picker class="picker">
<view class="picker-content">
<view class="content" data-place="请选择"></view>
</view>
</picker>
</view>
</view>
<view class="row">
<view class="label">我的姓名</view>
<view class="container">
<pickerArea class="picker-area">
<view class="picker-content">
<view class="content" data-place="请选择"></view>
</view>
</pickerArea>
</view>
</view>
<view class="row">
<view class="label">手机号</view>
<view class="container">
<view class="tel" bind:tap="handleTel">
<view class="tel-num">12312312</view>
<view class="btn">修改手机号</view>
</view>
</view>
</view>
</view>
<view class="login-out" bind:tap="handleLoginOut">注销账号</view>
</view>
Loading…
Cancel
Save