Browse Source

医生端开发

2.0
kola-web 3 days ago
parent
commit
fec614b67f
  1. 11
      project.private.config.json
  2. 22
      src/app.json
  3. 1
      src/components/calendar/index.wxss
  4. 95
      src/components/calendar/theme/theme-geneDoctorB.wxss
  5. 10
      src/components/uploadFile/index.js
  6. 2
      src/components/uploadFile/index.wxml
  7. 4
      src/doctor/pages/bbmRemark/index.json
  8. 86
      src/doctor/pages/bbmRemark/index.scss
  9. 42
      src/doctor/pages/bbmRemark/index.ts
  10. 31
      src/doctor/pages/bbmRemark/index.wxml
  11. 4
      src/doctor/pages/bbmReport/index.json
  12. 163
      src/doctor/pages/bbmReport/index.scss
  13. 78
      src/doctor/pages/bbmReport/index.ts
  14. 71
      src/doctor/pages/bbmReport/index.wxml
  15. 4
      src/doctor/pages/blood/index.json
  16. 154
      src/doctor/pages/blood/index.scss
  17. 84
      src/doctor/pages/blood/index.ts
  18. 49
      src/doctor/pages/blood/index.wxml
  19. 4
      src/doctor/pages/casesDetail/index.json
  20. 99
      src/doctor/pages/casesDetail/index.scss
  21. 32
      src/doctor/pages/casesDetail/index.ts
  22. 95
      src/doctor/pages/casesDetail/index.wxml
  23. 7
      src/doctor/pages/course/index.json
  24. 243
      src/doctor/pages/course/index.scss
  25. 204
      src/doctor/pages/course/index.ts
  26. 504
      src/doctor/pages/course/index.wxml
  27. 4
      src/doctor/pages/courseHostipal/index.json
  28. 44
      src/doctor/pages/courseHostipal/index.scss
  29. 27
      src/doctor/pages/courseHostipal/index.ts
  30. 10
      src/doctor/pages/courseHostipal/index.wxml
  31. 7
      src/doctor/pages/file/index.json
  32. 607
      src/doctor/pages/file/index.scss
  33. 258
      src/doctor/pages/file/index.ts
  34. 336
      src/doctor/pages/file/index.wxml
  35. 4
      src/doctor/pages/followPlan/index.json
  36. 120
      src/doctor/pages/followPlan/index.scss
  37. 47
      src/doctor/pages/followPlan/index.ts
  38. 103
      src/doctor/pages/followPlan/index.wxml
  39. 1
      src/doctor/pages/index/index.scss
  40. 4
      src/doctor/pages/inhibitorsManageList/index.json
  41. 65
      src/doctor/pages/inhibitorsManageList/index.scss
  42. 62
      src/doctor/pages/inhibitorsManageList/index.ts
  43. 34
      src/doctor/pages/inhibitorsManageList/index.wxml
  44. 7
      src/doctor/pages/lastDiagnosisReport/index.json
  45. 322
      src/doctor/pages/lastDiagnosisReport/index.scss
  46. 240
      src/doctor/pages/lastDiagnosisReport/index.ts
  47. 201
      src/doctor/pages/lastDiagnosisReport/index.wxml
  48. 3
      src/doctor/pages/patientDetail/index.json
  49. 14
      src/doctor/pages/patientDetail/index.ts
  50. 10
      src/doctor/pages/patientDetail/index.wxml
  51. 7
      src/doctor/pages/preDiagnosisReport/index.json
  52. 483
      src/doctor/pages/preDiagnosisReport/index.scss
  53. 224
      src/doctor/pages/preDiagnosisReport/index.ts
  54. 557
      src/doctor/pages/preDiagnosisReport/index.wxml
  55. 4
      src/doctor/pages/revisitRecord/index.json
  56. 43
      src/doctor/pages/revisitRecord/index.scss
  57. 64
      src/doctor/pages/revisitRecord/index.ts
  58. 27
      src/doctor/pages/revisitRecord/index.wxml
  59. BIN
      src/images/bg25.png
  60. BIN
      src/images/bg26.png
  61. BIN
      src/images/icon107.png
  62. BIN
      src/images/icon108.png
  63. BIN
      src/images/icon109.png
  64. BIN
      src/images/icon110.png
  65. 2
      src/patient/pages/bbmRemark/index.ts
  66. 2
      src/patient/pages/bbmReport/index.ts
  67. 2
      src/patient/pages/lastDiagnosisReport/index.ts
  68. 2
      src/patient/pages/lastDiagnosisReport/index.wxml
  69. 8
      src/patient/pages/preDiagnosisReport/index.wxml

11
project.private.config.json

@ -23,11 +23,18 @@ @@ -23,11 +23,18 @@
"miniprogram": {
"list": [
{
"name": "医生端-诊疗流程",
"pathName": "doctor/pages/course/index",
"query": "id=25&current=0",
"scene": null,
"launchMode": "default"
},
{
"name": "医生-海报",
"pathName": "doctor/pages/poster/index",
"query": "",
"scene": null,
"launchMode": "default"
"launchMode": "default",
"scene": null
},
{
"name": "医生-计算器",

22
src/app.json

@ -65,18 +65,24 @@ @@ -65,18 +65,24 @@
"pages/userInfo/index",
"pages/changeTel/index",
"pages/calculator/index",
"pages/poster/index"
"pages/poster/index",
"pages/file/index",
"pages/course/index",
"pages/courseHostipal/index",
"pages/casesDetail/index",
"pages/preDiagnosisReport/index",
"pages/inhibitorsManageList/index",
"pages/bbmReport/index",
"pages/bbmRemark/index",
"pages/followPlan/index",
"pages/revisitRecord/index",
"pages/lastDiagnosisReport/index",
"pages/blood/index"
]
},
{
"root": "doc",
"pages": [
"pages/doc1/index",
"pages/doc2/index",
"pages/doc3/index",
"pages/doc4/index",
"pages/doc5/index"
]
"pages": ["pages/doc1/index", "pages/doc2/index", "pages/doc3/index", "pages/doc4/index", "pages/doc5/index"]
}
],
"tabBar": {

1
src/components/calendar/index.wxss

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
@import "./theme/theme-elegant.wxss";
@import "./theme/theme-nuohe.wxss";
@import "./theme/theme-geneB.wxss";
@import "./theme/theme-geneDoctorB.wxss";
.blod {
font-weight: bold;

95
src/components/calendar/theme/theme-geneDoctorB.wxss

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
/* 日历主要颜色相关样式 */
.geneb_doctor_color,
.geneb_doctor_weekend-color,
.geneb_doctor_handle-color,
.geneb_doctor_week-color {
color: rgba(51, 51, 51, 1);
}
.geneb_doctor_choosed {
color:#fff;
background-color: rgba(28, 107, 255, 1);
}
.geneb_doctor_today {
color: #fff;
background-color: rgba(28, 107, 255, 1);
}
.geneb_doctor_today.geneb_choosed {
color: #fff;
background-color: rgba(28, 107, 255, 1);
}
.geneb_doctor_date-disable {
color: #c7c7c7;
}
.geneb_doctor_choosed.geneb_date-disable {
color: #e2e2e2;
background-color: #c2afb6;
}
.geneb_doctor_prev-month-date,
.geneb_doctor_next-month-date {
color: #e2e2e2;
}
.geneb_doctor_normal-date {
color: rgba(1, 1, 5, 1);
}
.geneb_doctor_todo-circle {
border-color: #88d2ac;
}
.geneb_doctor_todo-dot {
background-color: #e54d42;
}
.geneb_doctor_date-desc {
color: #c2c2c2;
}
.geneb_doctor_date-desc-lunar {
color: #e54d42;
}
.geneb_doctor_date-desc-disable {
color: #e2e2e2;
}
.geneb_doctor_festival {
color: #c2c2c2;
}
.date.doc {
position: relative;
background-color: #e5e5e5;
}
.date.doc::after {
position: absolute;
z-index: 1;
top: -5rpx;
right: -5rpx;
content: '';
width: 17rpx;
height: 24rpx;
background-repeat: no-repeat;
background-size: cover;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAABACAYAAABhspUgAAAAAXNSR0IArs4c6QAACAVJREFUaEPtmltsHFcZx/9nZu92bMdJSMitzoWkoXVKUrVV8wKk4gHxgJTwgKA8lhfgCZBoUJEqUYGA0AhRQUSpFJQIHlyqogZFIipUoKiAKJAYQkp9qR1ir9fe6+zuXM4FfWf2MrOJY+/aS0zlkRxZzsw5v/nP/3znO+c7DItcl4vFTWVl/7wg5EctKSK2knCVBFcKcrGH7vL3MvfwVnYeGbsaustgAAODCSDCDLU1Hp/Ym+o7fnrvB9+9U3NssT5ezWe+k5X8qwvCQ0FwVKSEswJg6sfmHH+cm2l0SZ3Tj8F84ChjiDID+1I9ly4ceuTjbQFfyM2MpDk/meEu8oKjJIUG9khh1YHEtUeupgPAWl3AAENEwzLEmIGd8dToq8OPDbcF/OLCrZFZ7p5Mcxc5wVEUAmQLT8mOLFHvfCwzF7ZEC3CcGdiRSIxeHD7WHvDZhZsjM56ngbMELDlsWVO4c4ExOd8E9i1R969vhzhj2BFPjv76cJvApPCtkMK8YYkVOALLUXh7PNE+8M/Iw553MiN8S1ii6eGVAI+mZ0PfhzHoAWfWBlyMMWyPJ0dfG368PUu8nJ8bWRD8ZPYOUWIlwH+YmQ4Dg8FoAPu22J5Ijb7ywKPtAV8uZZ/LC36qIH11q7UIIZRCp8CW5+Ly7M3bgVkzUlC0ONC74VcvHTj6ybaiBN38RmVhV9YxTBs2nrl08VTRrjy1gvEGZRh+HGu5epOp808ceehMFFEkDYN/f++Df1+sn0UnjtYHjB9+63tQ6ssrAV70WcZOyy8+/ZXltL0o8Hfzk3u4jc94Bh7nSm0uOZWNruvFozBMkzEG+iF3KGm5XJTAZFVIxRXCjnGkNB0pIwXPTWYcu6/MeYLAgh1HozHeE48VE6Y5vyFiXknFoufO73/4nWVZ4kwmc9BG5QVLiONcKSYYEFU0z/vd1P3rQaEiBYiwnSvr2Jgo5mFxTz9Gcbj+AjTjmczPKbbF41fej9jnzz5w9J/B9kMKP58e/1xO4ayjZNKlwaUUkqYJJZsDjRKfBcH1dN3pRa3dKpUwX61oqRs5RS1amLWpOmWYzv5k7xfO3X/0p/W+GsBnMtNPLQjvx1UlDUcKQDEkDKanYRJR6W+tMM0dzPPOYYMvmauWkStXfOBA1kYxWecWMJAwDHV/T9+Xzh088kLDSmfmpx9b8Lw3qpDxqv7MCilmaFBJ/9aMmZYcY05VK78aFw2DrGXBdp2AymSLQDIEAynD9B4c3PKRnwwduqIV/ubc5N+Kgj9EnqQEhxIQ+iwyEHPJIm+WSxBMj7TV4NX+lVIiXyzURGCg/NjP3ijdNEAzH/FsjcX/dWn42CH2g+zMJ9Ju5bWyFDrnFQB6GMGSur4N6Bpzq5hwnVUBbW2kWq3CcXyV6QoMvgZwghk43Dtwgn17burlrHBPaGAlEQFDnN68Bku41NDvrQLsVVK2FZhzAcsqNYCpP/rCZA2tsGGAgIeSvRfZs3Pj0wUhdpZr028vo/cj4OaHJ+WvVIpdUbfeaKHg26KpMoU3P7cgaALeHIun2TPpcaskeE9ZSp0v9DPTjwoB4Cytx+xyV4FLxSKE9FeL9TDnZ3D+KoSA+yIRm52aGVOWEiBLVKXEoBHRdtDRoXbNcQ9XuwxMliBrhIBr8VgDGwxJZoI9TcCSo6wkHCmxUQOHV8Zz3MVVu9JVha2SBR6YjCjlrK/1tCUMwwf+WgDYrQGLlsC1VoDJFiHgoMLBSLsWgClSJOvAJdncd6hbYi0B08DzLVFTeB24g+F5t0G3rnAHgt72yLrC93LieO952ARHVDWXQQVuYbqaWQ2rLtrGVJmhEljR6pyRFqS1fIKS+LjB/JmuNQ7vlrMYUs1dxp3udRwrvdJV4GedJ3BDbl6yj1UFdgsJVNMbQp0mt5UQ67OXBLknwOO/OILi2KYQXN++Bez99F/XJvA75x+G9e7GEFzvfTnsf/Iv68CNKhFla50OujWtsD3fA2tyMPSpM3/eBSebCv0tPljBlkfCm9i9Q1kkNofXiF0fdJO/HEb++tYlvXmnGwYOpTF04lrov7oOPDFyGIUb7+sIuP9gBns+Fd6zXgdunen+7xT+z28OIPOn3R1ZYsujU9jxsbf/tx6m3pQMVxzGLhyFNdUycezOYd9n3wrBMeP23c+ue/hO0q7pOLwOfC/Sy1uvfwDZa9tC4g8Oz2L78X8vOTjviYeXpLrLDSsC3qqy2KZyjeYH3EnsKf92JTxLPvti9UOYkv233eefWKEqE52rWGSJFNx9pxbu9Wbge2/VvOYVru/Ar+UN7cb+8FosGTRrz35RpulhE+zrs1TjoKKMf5BuIzN1cTFYRcpwD6NOd2scxRIVZZqbN/q0la7sN6tIumTwjdlxXUWqCAIW6KeiTMtxxXnh4boTPoK4ZJxq84ZssQgvAEwl3HpVXyusK0kG2HNzk/mSEP0VJfS5NCosKjq7USuAU15lKYkbXa4i3czlwOkUQe0KAtfrzf2RqMVOZ6Z+VxD8w1RUJEtElV9JDx4Ipd8nXFtX+btxOULg7ay/d9eohDL/tFX9PCZB70qk3mQ/ys0M5T3nWlXKXqrYcyaRpFtrRw7qiPQyRa3Aso8JLevdqAg/mptHwW1uZ9XPYxIwiUc/GyLRyuH+LcO6d4KuCv5SRYojrpQDFIcjMLTp60dcdMJel6D1YM+y0MI3uUIg57n4RyGLoueGE/xar2SLHsO0NsXi13b1DDz5/H0Hxv8Lo3UyF0Y2DrcAAAAASUVORK5CYII=');
}
.date.error {
background-color: rgba(207, 83, 117, 1);
border-radius: 50%;
color: #fff;
}
.date.primary {
background-color: rgba(37, 217, 200, 1);
color: #fff;
border-radius: 50%;
}

10
src/components/uploadFile/index.js

@ -10,16 +10,16 @@ Component({ @@ -10,16 +10,16 @@ Component({
type: Boolean,
value: true,
},
// 是否可以删除
delete: {
type: Boolean,
value: true,
},
// 附件data
fileList: {
type: Array,
value: [],
},
// 是否可以删除
canDelete: {
type: Boolean,
value: true,
},
// 最大上传数量, -1为不限制
maxNum: {
type: Number,

2
src/components/uploadFile/index.wxml

@ -13,9 +13,9 @@ @@ -13,9 +13,9 @@
class="item_mask_icon"
/>
<image
wx:if="{{delete}}"
class="clear"
src="{{imageUrl}}icon97.png?t={{Timestamp}}"
wx:if="{{canDelete}}"
catchtap="deleteFile"
data-item="{{item}}"
data-index="{{index}}"

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

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "输注感受日志",
"usingComponents": {}
}

86
src/doctor/pages/bbmRemark/index.scss

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 48rpx 40rpx;
.card1 {
padding: 22rpx 32rpx;
border-radius: 24rpx;
background-color: #fff;
.label {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.select {
margin-top: 24rpx;
display: flex;
justify-content: space-between;
gap: 24rpx;
.icon {
width: 128rpx;
height: 128rpx;
}
}
}
.card2 {
margin-top: 24rpx;
padding: 32rpx;
border-radius: 24rpx;
background-color: #fff;
.title {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.textarea {
margin-top: 24rpx;
padding: 24rpx 32rpx;
width: 100%;
box-sizing: border-box;
font-size: 32rpx;
border-radius: 12rpx;
color: rgba(1, 1, 5, 1);
background-color: rgba(247, 247, 250, 1);
}
.place-textarea {
color: rgba(207, 209, 213, 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;
}
}
}

42
src/doctor/pages/bbmRemark/index.ts

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
const app = getApp<IAppOption>()
Page({
data: {
patientId: '',
injectionFeel: '',
injectionRemark: '',
},
onLoad(options) {
this.setData({
patientId: options.id || '',
})
app.waitLogin({ type: 2 }).then(() => {
this.getDetail()
})
},
getDetail() {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-injection-feel',
data: {
patientId: this.data.patientId,
},
}).then((res) => {
this.setData({
...res,
})
})
},
handleSelect(e) {
const { active } = e.currentTarget.dataset
this.setData({
injectionFeel: active,
})
},
handleBack() {
wx.navigateBack()
},
})
export {}

31
src/doctor/pages/bbmRemark/index.wxml

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
<view class="page">
<view class="card1">
<view class="label">整体治疗过程感受</view>
<view class="select">
<view class="s-item">
<image wx:if="{{injectionFeel==1}}" class="icon" src="{{imageUrl}}icon44.png?t={{Timestamp}}"></image>
<image wx:else class="icon" src="{{imageUrl}}icon49.png?t={{Timestamp}}"></image>
</view>
<view class="s-item">
<image wx:if="{{injectionFeel==2}}" class="icon" src="{{imageUrl}}icon42.png?t={{Timestamp}}"></image>
<image wx:else class="icon" src="{{imageUrl}}icon50.png?t={{Timestamp}}"></image>
</view>
<view class="s-item">
<image wx:if="{{injectionFeel==3}}" class="icon" src="{{imageUrl}}icon43.png?t={{Timestamp}}"></image>
<image wx:else class="icon" src="{{imageUrl}}icon83.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
<view class="card2">
<view class="title">整体治疗过程备注</view>
<textarea
class="textarea"
disabled
model:value="{{injectionRemark}}"
placeholder-class="place-textarea"
disable-default-padding
placeholder="--"
></textarea>
</view>
</view>

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

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "BBM-H901输注记录",
"usingComponents": {}
}

163
src/doctor/pages/bbmReport/index.scss

@ -0,0 +1,163 @@ @@ -0,0 +1,163 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page-tip{
padding: 18rpx;
text-align: center;
font-size: 28rpx;
color: rgba(255, 163, 112, 1);
background-color: rgba(255, 240, 218, 1);
}
.page {
padding: 48rpx 40rpx;
.container {
border-radius: 24rpx;
background: linear-gradient( 356deg, #1D6BFF 0%, #4F8DFF 100%);
.title {
padding: 20rpx 0 60rpx;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
text-align: center;
}
.card {
margin-top: -40rpx;
padding: 0 32rpx;
border-radius: 22rpx;
background-color: #fff;
.row {
display: flex;
align-items: center;
.label {
width: 5em;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.r-container {
flex: 1;
.picker {
.picker-content {
padding: 32rpx 0;
display: flex;
justify-content: space-between;
.content {
text-align: right;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
&:empty::after {
content: attr(data-place);
color: rgba(207, 209, 213, 1);
}
}
}
}
.columns {
display: flex;
align-items: center;
gap: 20rpx;
.input {
padding: 32rpx 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.input-place {
color: rgba(207, 209, 213, 1);
}
.sub {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
}
}
}
}
.body {
margin-top: 24rpx;
padding: 0 32rpx;
border-radius: 24rpx;
background-color: #fff;
.row {
display: flex;
align-items: center;
.label {
width: 5em;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.r-container {
flex: 1;
.picker {
.picker-content {
padding: 32rpx 0;
display: flex;
justify-content: space-between;
.content {
text-align: right;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
&:empty::after {
content: attr(data-place);
color: rgba(207, 209, 213, 1);
}
}
}
}
.columns {
display: flex;
align-items: center;
gap: 20rpx;
.input {
padding: 32rpx 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.input-place {
color: rgba(207, 209, 213, 1);
}
.sub {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 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;
}
}
}

78
src/doctor/pages/bbmReport/index.ts

@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
const app = getApp<IAppOption>()
import { calc } from 'a-calc'
Page({
data: {
patientId: '',
injectionDate: '',
injectionWeight: '',
injectionDrugs: '',
injectionNum: '',
},
onLoad(options) {
this.setData({
patientId: options.id || '',
})
app.waitLogin({ type: 2 }).then(() => {
this.getDetail()
})
},
handleWeight(e) {
const value = e.detail.value
if (value) {
const injectionDrugs = calc(`${value} * 1.25 | =0 ~+`)
const injectionNum = calc(`${value} * 1.25 / 2 | =0 ~+`)
this.setData({
injectionDrugs,
injectionNum,
})
}
},
getDetail() {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-injection-info',
data: {
patientId: this.data.patientId,
},
}).then((res) => {
this.setData({
...res,
injectionDate: res.injectionDate || '',
})
})
},
handleBack() {
wx.navigateBack()
},
handleSubmit() {
const { injectionDate, injectionWeight } = this.data
if (!injectionDate) {
wx.showToast({
title: '请选择输注时间',
icon: 'none',
})
return
}
if (!injectionWeight) {
wx.showToast({
title: '请输入体重',
icon: 'none',
})
return
}
wx.ajax({
method: 'POST',
url: '?r=wtx/treatment/save-injection-info',
data: {
injectionWeight,
},
}).then(() => {
wx.navigateBack()
})
},
})
export {}

71
src/doctor/pages/bbmReport/index.wxml

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
<view class="page-tip">此信息仅供参考,请以实际临床医生的专业意见为准</view>
<view class="page">
<view class="container">
<view class="title">BBM-H901输注信息</view>
<view class="card">
<view class="row">
<view class="label">输注时间</view>
<view class="r-container">
<view class="picker">
<view class="picker-content">
<view class="content" data-place="--">{{injectionDate}}</view>
</view>
</view>
</view>
</view>
<view class="row">
<view class="label">体重</view>
<view class="r-container">
<view class="columns">
<input
disabled
class="input"
model:value="{{injectionWeight}}"
type="digit"
placeholder-class="input-place"
placeholder="请输入"
bindblur="handleWeight"
/>
<view class="sub">KG</view>
</view>
</view>
</view>
</view>
</view>
<view class="body">
<view class="row">
<view class="label">用药体积</view>
<view class="r-container">
<view class="columns">
<input
class="input"
disabled
value="{{injectionDrugs}}"
type="number"
placeholder-class="input-place"
type=""
placeholder="--"
/>
<view class="sub">ml</view>
</view>
</view>
</view>
<view class="row">
<view class="label">预计瓶数</view>
<view class="r-container">
<view class="columns">
<input
class="input"
disabled
value="{{injectionNum}}"
type="number"
placeholder-class="input-place"
type=""
placeholder="--"
/>
<view class="sub">瓶</view>
</view>
</view>
</view>
</view>
</view>

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

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "出血管理",
"usingComponents": {}
}

154
src/doctor/pages/blood/index.scss

@ -0,0 +1,154 @@ @@ -0,0 +1,154 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding-bottom: 200rpx;
.header {
padding: 16rpx 32rpx 32rpx;
background-color: #fff;
border-radius: 24rpx;
.label {
font-size: 32rpx;
color: rgba(0, 0, 0, 1);
display: flex;
align-items: center;
gap: 12rpx;
.icon {
flex-shrink: 0;
width: 48rpx;
height: 48rpx;
}
}
.range {
margin-top: 24rpx;
display: flex;
align-items: center;
gap: 18rpx;
font-size: 32rpx;
color: rgba(207, 209, 213, 1);
.picker {
flex: 1;
.picker-content {
padding: 22rpx 32rpx;
display: flex;
align-items: center;
background-color: rgba(247, 247, 250, 1);
border-radius: 12rpx;
.content {
flex: 1;
font-size: 28rpx;
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;
}
}
}
.clear {
flex-shrink: 0;
font-size: 28rpx;
color: rgba(1, 1, 5, 1);
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 36rpx;
height: 36rpx;
}
}
}
}
.list {
padding: 0 32rpx;
margin-top: 32rpx;
.list-item {
display: flex;
gap: 16rpx;
.aside {
display: flex;
align-items: center;
flex-direction: column;
gap: 16rpx;
.order {
margin-top: 8rpx;
width: 16rpx;
height: 16rpx;
border-radius: 50%;
background-clip: content-box;
background-color: rgba(28, 107, 255, 1);
border: 4rpx solid rgba(28, 107, 255, 0.3);
}
.line {
flex: 1;
border-right: 1px dashed rgba(28, 107, 255, 1);
}
}
.container {
flex: 1;
padding-bottom: 16rpx;
.date {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
padding-bottom: 16rpx;
}
.wrap {
padding: 0 32rpx;
background-color: #fff;
border-radius: 24rpx;
.row {
padding: 32rpx;
display: flex;
gap: 16rpx;
border-bottom: 1px solid rgba(247, 247, 250, 1);
.label {
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
}
.content {
flex: 1;
width: 5em;
font-size: 32rpx;
color: rgba(0, 0, 0, 1);
display: flex;
gap: 10rpx;
flex-wrap: wrap;
}
}
.row-resver {
padding: 32rpx;
.label {
width: 7em;
font-size: 32rpx;
color: rgba(137, 141, 151, 1);
}
.content {
margin-top: 24rpx;
font-size: 32rpx;
color: rgba(0, 0, 0, 1);
line-height: 48rpx;
}
}
}
}
}
}
.add {
position: fixed;
left: 50%;
bottom: 142rpx;
transform: translateX(-50%);
width: 156rpx;
height: 156rpx;
border-radius: 50%;
box-shadow: 0 20rpx 30rpx #f0b4af;
}
}

84
src/doctor/pages/blood/index.ts

@ -0,0 +1,84 @@ @@ -0,0 +1,84 @@
const app = getApp<IAppOption>()
Page({
data: {
patientId: '',
beginDate: '',
endDate: '',
list: [] as any[],
total: 0,
pagination: {
page: 1,
pages: 1,
count: 1,
},
},
onLoad(options) {
this.setData({
patientId: options.id || '',
})
},
onShow() {
app.waitLogin({ type: 2 }).then(() => {
this.getList()
})
},
handleClear() {
this.setData({
beginDate: '',
endDate: '',
})
this.getList(1)
},
handleChange() {
const { beginDate, endDate } = this.data
if (beginDate && endDate) {
this.getList(1)
}
},
getList(newPage = 1) {
const { beginDate, endDate } = this.data
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-bleeding-list',
data: {
page: newPage,
beginDate,
endDate,
patientId: this.data.patientId,
},
}).then((res) => {
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 { id } = e.currentTarget.dataset
wx.navigateTo({
url: `/patient/pages/bloodDetail/index?id=${id}`,
})
},
handleAdd() {
wx.navigateTo({
url: '/patient/pages/bloodAdd/index',
})
},
})
export {}

49
src/doctor/pages/blood/index.wxml

@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
<view class="page">
<view class="header">
<view class="range">
<picker class="picker" mode="date" end="{{endDate}}" model:value="{{beginDate}}" bind:change="handleChange">
<view class="picker-content">
<view class="content" data-place="开始时间">{{beginDate}}</view>
<view class="tril"></view>
</view>
</picker>
<picker class="picker" mode="date" start="{{beginDate}}" model:value="{{endDate}}" bind:change="handleChange">
<view class="picker-content">
<view class="content" data-place="结束时间">{{endDate}}</view>
<view class="tril"></view>
</view>
</picker>
<view class="clear" catchtap="handleClear">
<image class="icon" src="{{imageUrl}}icon98.png?t={{Timestamp}}"></image>
重选
</view>
</view>
</view>
<view class="list">
<view class="list-item" wx:for="{{list}}" wx:key="recordId" bind:tap="handleEdit" data-id="{{item.recordId}}">
<view class="aside">
<view class="order"></view>
<view class="line"></view>
</view>
<view class="container">
<view class="date">{{item.bleedingDate}}</view>
<view class="wrap">
<view class="row">
<view class="label">出血关节</view>
<view class="content">
<view wx:for="{{item.bleedingPartList}}" wx:for-item="subItem" wx:key="bleedingId">
{{subItem.bleedingPartName}}
</view>
</view>
</view>
<view class="row-resver" wx:if="{{item.remark}}">
<view class="label">其他情况备注</view>
<view class="content">{{item.remark}}</view>
</view>
</view>
</view>
</view>
<pagination pagination="{{pagination}}"></pagination>
</view>
</view>

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

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "病史信息",
"usingComponents": {}
}

99
src/doctor/pages/casesDetail/index.scss

@ -0,0 +1,99 @@ @@ -0,0 +1,99 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
padding: 32rpx 40rpx;
.container1 {
padding: 8rpx 0 0;
.c1_card1 {
margin-top: 24rpx;
padding: 16rpx 32rpx;
background: linear-gradient(180deg, #fffaf9 0%, #ffffff 14%, #ffffff 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.row {
padding: 16rpx 0;
display: flex;
gap: 32rpx;
.label {
width: 6em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
}
.c1_card2 {
margin-top: 24rpx;
padding: 0 32rpx;
background: linear-gradient(180deg, #fffaf9 0%, #ffffff 14%, #ffffff 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.row {
padding: 32rpx 0;
border-bottom: 1px solid rgba(247, 247, 250, 1);
.wrap {
display: flex;
gap: 32rpx;
.label {
flex-shrink: 0;
width: 9em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
display: flex;
gap: 10rpx;
flex-wrap: wrap;
}
}
.remark {
margin-top: 24rpx;
padding: 22rpx 32rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
border-radius: 12rpx;
background-color: rgba(247, 247, 250, 1);
}
}
.row1 {
padding: 32rpx 0;
border-bottom: 1px solid rgba(247, 247, 250, 1);
.wrap {
display: flex;
align-items: center;
gap: 32rpx;
.label {
flex-shrink: 0;
width: 11em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.line {
width: 1px;
height: 88rpx;
background-color: rgba(247, 247, 250, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.remark {
margin-top: 24rpx;
padding: 22rpx 32rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
border-radius: 12rpx;
background-color: rgba(247, 247, 250, 1);
}
}
}
}
}

32
src/doctor/pages/casesDetail/index.ts

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
const app = getApp<IAppOption>()
Page({
data: {
medical: {
lastBleedingInfo: {
bleedingPartList: [],
},
},
},
onLoad(options) {
console.log("DEBUGPRINT[122]: index.ts:11: options=", options)
app.waitLogin({ type: 2 }).then(() => {
this.getDetail(options.id)
})
},
getDetail(patientId: string) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-medical-history-info',
data: {
patientId,
},
}).then((res) => {
this.setData({
medical: res,
})
})
},
})
export {}

95
src/doctor/pages/casesDetail/index.wxml

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
<view class="page">
<view class="container1">
<view class="c1_card1">
<view class="row">
<view class="label">出生年月</view>
<view class="content">{{medical.birthMonth}}({{medical.ageYear}}岁)</view>
</view>
<view class="row">
<view class="label">确诊时间</view>
<view class="content">
{{medical.diagnosisTime || '未填写'}}
<block wx:if="{{medical.diagnosisAge}}">({{medical.diagnosisAge}})</block>
</view>
</view>
<view class="row">
<view class="label">您的体重</view>
<view class="content" wx:if="{{medical.weight}}">{{medical.weight}} kg</view>
<div class="content" wx:else>未填写</div>
</view>
</view>
<view class="c1_card1">
<view class="row">
<view class="label">凝血因子</view>
<view class="content" wx:if="{{medical.clottingFactor}}">{{medical.clottingFactor}}%</view>
<view class="content" wx:else>未填写</view>
</view>
<view class="row">
<view class="label">治疗方案</view>
<view class="content">{{medical.treatmentPlanName || '未填写'}}</view>
</view>
<view class="row">
<view class="label">FIX暴露日</view>
<view class="content" wx:if="{{medical.fixExposureDay}}">{{medical.fixExposureDay}}个</view>
<view class="content" wx:else>未填写</view>
</view>
</view>
<view class="c1_card2">
<view class="row">
<view class="wrap">
<view class="label">既往FIX抑制物病史</view>
<view class="content">{{medical.beforeFixHistoryName || '未填写'}}</view>
</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">既往肝脏疾病病史</view>
<view class="content">{{medical.beforeLiverHistoryName || '未填写'}}</view>
</view>
<view class="remark" wx:if="{{medical.liverRecord}}">{{medical.liverRecord}}</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">您是否有饮酒史</view>
<view class="content">{{medical.drinkingHistoryName || '未填写'}}</view>
</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">您是否有过敏史</view>
<view class="content">{{medical.allergyHistoryName || '未填写'}}</view>
</view>
<view class="remark" wx:if="{{medical.allergyRecord}}">{{medical.allergyRecord}}</view>
</view>
<view class="row1">
<view class="wrap">
<view class="label">
<view>您是否可能存在不适合</view>
<view>使用糖皮质激素的情况?</view>
</view>
<view class="line"></view>
<view class="content">{{medical.isNotGlucocorticoidName || '未填写'}}</view>
</view>
<view class="remark" wx:if="{{medical.medicalHistoryInfo}}">{{medical.medicalHistoryInfo}}</view>
</view>
</view>
<view class="c1_card2">
<view class="row">
<view class="wrap">
<view class="label" style="width: 4em">靶关节</view>
<view class="content">
<view wx:for="{{medical.lastBleedingInfo.bleedingPartList}}" wx:key="bleedingId">
{{item.bleedingPartName}}
</view>
</view>
</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">最近6个月出血</view>
</view>
<view class="remark" wx:if="{{medical.lastBleedingInfo.remark}}">{{medical.lastBleedingInfo.remark}}</view>
</view>
</view>
</view>
</view>

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

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

243
src/doctor/pages/course/index.scss

@ -0,0 +1,243 @@ @@ -0,0 +1,243 @@
.page {
height: 100vh;
display: flex;
flex-direction: column;
.pgae-header {
flex-shrink: 0;
padding: 0 40rpx 38rpx;
background: linear-gradient(180deg, rgba(241, 251, 251, 0.70) 0%, #ffffff 100%);
box-shadow: 0rpx 8rpx 8rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 0rpx 0rpx 0rpx 0rpx;
.title {
font-size: 40rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.content {
margin-top: 6rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.page-container {
flex: 1;
.swiper {
height: 100%;
.swiper-item {
position: relative;
.scroll-view {
height: 100%;
.scroll-view-container {
height: 100%;
padding: 88rpx 40rpx 0;
box-sizing: border-box;
display: flex;
flex-direction: column;
.row {
flex-shrink: 0;
display: flex;
gap: 24rpx;
.aside {
flex-shrink: 0;
width: 64rpx;
display: flex;
flex-direction: column;
align-items: center;
.num {
width: 64rpx;
height: 64rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 38rpx;
color: rgba(255, 255, 255, 1);
background: linear-gradient( 356deg, #1D6BFF 0%, #4F8DFF 100%);
box-shadow: 0rpx 13rpx 26rpx 0rpx rgba(151, 151, 151, 0.05);
border-radius: 50%;
}
.radio {
width: 48rpx;
height: 48rpx;
}
.slow-line {
height: 32rpx;
width: 4rpx;
background-color: rgba(28, 107, 255, 1);
}
.line {
flex: 1;
width: 4rpx;
background-color: rgba(28, 107, 255, 1);
}
}
.container {
padding-bottom: 84rpx;
.c-header {
.title {
font-size: 44rpx;
color: rgba(28, 107, 255, 1);
line-height: 64rpx;
font-weight: bold;
}
.content {
margin-top: 20rpx;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
line-height: 40rpx;
}
}
.c-body {
padding: 18rpx 42rpx;
min-height: 104rpx;
box-sizing: border-box;
background: #ffffff;
border-radius: 96rpx 96rpx 96rpx 96rpx;
border: 4rpx solid rgba(28, 107, 255, 1);
display: flex;
align-items: center;
gap: 32rpx;
.wrap {
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
display: flex;
align-items: center;
.feel {
margin: -20rpx 0;
width: 96rpx;
height: 96rpx;
}
}
.hostipl-name {
margin-top: 4rpx;
padding-left: 28rpx;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
line-height: 40rpx;
}
}
.icon {
flex-shrink: 0;
width: 40rpx;
height: 40rpx;
}
.status-icon {
position: relative;
width: 80rpx;
height: 40rpx;
.s-icon {
position: absolute;
top: 50%;
left: 0;
transform: translateY(-50%);
width: 100rpx;
height: 100rpx;
}
}
}
.c-footer {
margin-top: 16rpx;
margin-bottom: -40rpx;
padding-left: 44rpx;
.content {
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
}
.bind-doctor {
font-size: 28rpx;
color: rgba(28, 107, 255, 1);
line-height: 40rpx;
}
.inhibitors-content {
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
.green {
color: rgba(53, 177, 63, 1);
}
}
}
}
}
.row:first-of-type {
.container {
padding-bottom: 48rpx;
}
}
.next {
padding: 34rpx;
width: 472rpx;
height: 104rpx;
font-size: 36rpx;
color: rgba(255, 255, 255, 1);
font-weight: bold;
display: flex;
align-items: center;
justify-content: center;
gap: 32rpx;
background: linear-gradient( 356deg, #1D6BFF 0%, #4F8DFF 100%);
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(151, 151, 151, 0.05);
border-radius: 112rpx 112rpx 112rpx 112rpx;
box-sizing: border-box;
.icon {
width: 48rpx;
height: 48rpx;
}
}
.grow-row {
flex: 1;
min-height: 80rpx;
display: flex;
gap: 24rpx;
.aside {
flex-shrink: 0;
width: 64rpx;
display: flex;
flex-direction: column;
align-items: center;
.line {
flex: 1;
width: 4rpx;
background-color: rgba(28, 107, 255, 1);
}
}
}
}
}
}
}
}
}
.guide1 {
position: fixed;
z-index: 10;
top: 640rpx;
right: 86rpx;
width: 172rpx;
height: 256rpx;
}
.guide2 {
position: fixed;
z-index: 10;
top: 660rpx;
right: 86rpx;
width: 172rpx;
height: 256rpx;
}
.guide3 {
position: fixed;
z-index: 10;
top: 620rpx;
right: 86rpx;
width: 172rpx;
height: 256rpx;
}
.guide4 {
position: fixed;
z-index: 10;
top: 620rpx;
right: 86rpx;
width: 172rpx;
height: 256rpx;
}

204
src/doctor/pages/course/index.ts

@ -0,0 +1,204 @@ @@ -0,0 +1,204 @@
const app = getApp<IAppOption>()
Page({
data: {
popupShow: false,
// popupType: 'selectStatus',
// popupType: 'selectStatusComplete',
// popupType: 'TCenter', // 诊疗中心
popupType: 'TCenterEnd', // 诊疗中心完成
popupParams: {
// position: 'bottom',
},
current: 0,
patientId: '',
patientInfo: {},
periodInfo1: {} as any,
periodInfo2: {} as any,
periodInfo3: {} as any,
periodInfo4: { followUpWeekInfo: {} } as any,
},
onLoad(options) {
this.setData({
current: Number(options.current),
patientId: options.id,
})
},
onShow() {
app.waitLogin({ type: 2 }).then(() => {
this.handleUpdate()
this.getDetail()
})
},
getDetail() {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/patient/get-detail',
data: {
patientId: this.data.patientId,
},
}).then((res) => {
this.setData({
patientInfo: {
...res.patientInfo,
},
})
})
},
handleUpdate() {
this.getPeriodInfo(this.data.current + 1, `periodInfo${this.data.current + 1}`)
},
getPeriodInfo(period: number, key: string) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-period-info',
data: {
period,
patientId: this.data.patientId,
},
}).then((res) => {
this.setData({
[key]: res,
})
})
},
handleSwiperChange(e) {
this.setData({
current: e.detail.current,
})
this.handleUpdate()
},
handleSelectHostipal() {
const { periodInfo1 } = this.data
wx.navigateTo({
url: `/doctor/pages/courseHostipal/index?id=${periodInfo1.hospitalId}`,
})
},
handleCasesAdd() {
wx.navigateTo({
url: `/doctor/pages/casesDetail/index?id=${this.data.patientId}`,
})
},
handleCheckRedGreen() {
this.setData({
popupShow: true,
popupType: 'selectStatus',
popupParams: { position: 'bottom' },
})
},
handleTCenter() {
const { periodInfo2 } = this.data
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/common/get-treatment-center-list',
data: {
patientId: this.data.patientId,
},
}).then((res) => {
this.setData({
popupShow: true,
popupType: 'TCenter',
popupParams: {
hospitalId: periodInfo2.hospitalId,
list: res,
},
})
})
},
handlePreDiagnosisReport(e: any) {
const { period } = e.currentTarget.dataset
const { examId } = this.data[`periodInfo${period}`]
wx.navigateTo({
url: `/doctor/pages/preDiagnosisReport/index?examid=${examId}&period=${period}&id=${this.data.patientId}`,
})
},
handleAavReport() {
wx.navigateTo({
url: '/patient/pages/aavReport/index',
})
},
handleBbmReport() {
wx.navigateTo({
url: `/doctor/pages/bbmReport/index?id=${this.data.patientId}`,
})
},
handleBbmRemark() {
wx.navigateTo({
url: `/doctor/pages/bbmRemark/index?id=${this.data.patientId}`,
})
},
hadnleInjectDate() {
wx.navigateTo({
url: '/patient/pages/injectDate/index',
})
},
handleInhibitorsManage(e: any) {
const { period } = e.currentTarget.dataset
wx.navigateTo({
url: `/doctor/pages/inhibitorsManageList/index?period=${period}&id=${this.data.patientId}`,
})
},
handleFollowPlan() {
wx.navigateTo({
url: '/doctor/pages/followPlan/index',
})
},
handleLastDiagnosisReport() {
wx.navigateTo({
url: `/doctor/pages/revisitRecord/index?period=4&id=${this.data.patientId}`,
})
},
handleColtStat() {
wx.navigateTo({
url: '/patient/pages/coltStat/index',
})
},
handleBlood() {
wx.navigateTo({
url: `/doctor/pages/blood/index?id=${this.data.patientId}`,
})
},
handleNext() {
this.setData({
current: this.data.current + 1,
})
},
handlePopupOk(e) {
const { popupType } = this.data
const { id } = e.detail
if (popupType === 'TCenter') {
wx.ajax({
method: 'POST',
url: '?r=wtx/doctor/treatment/save-t-hospital',
data: {
hospitalId: id,
patientId: this.data.patientId,
},
}).then(() => {
this.setData({
popupShow: true,
popupType: 'TCenterEnd',
popupParams: {
close: true,
},
})
})
}
},
handlePopupCancel() {
const { popupType } = this.data
if (popupType === 'TCenterEnd') {
this.handleUpdate()
}
this.setData({
popupShow: false,
})
},
handleBack() {
wx.navigateBack()
},
})
export {}

504
src/doctor/pages/course/index.wxml

@ -0,0 +1,504 @@ @@ -0,0 +1,504 @@
<page-meta page-style="{{ popupShow ? 'overflow: hidden;' : '' }}" />
<navbar fixed custom-style="background:{{background}}" back>
<van-icon name="arrow-left" slot="left" size="18px" color="#000" bind:tap="handleBack" />
</navbar>
<view class="page">
<view class="pgae-header" style="padding-top:{{pageTop + 30}}px">
<view class="title">{{patientInfo.patientName}}的专属诊疗流程</view>
<view class="content">从开始治疗到长期随访全周期流程</view>
</view>
<view class="page-container">
<swiper class="swiper" current="{{current}}" vertical bindchange="handleSwiperChange">
<!-- 阶段一 -->
<swiper-item class="swiper-item">
<scroll-view class="scroll-view" scroll-y show-scrollbar="{{false}}">
<view class="scroll-view-container">
<view class="row">
<view class="aside">
<view class="num">1</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>
</view>
<view class="row" bind:tap="handleSelectHostipal">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo1.hospitalName}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">1.{{patientInfo.patientName}}诊前检查医院</view>
<view class="hostipl-name" wx:if="{{periodInfo1.hospitalName}}">{{periodInfo1.hospitalName}}</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer"></view>
</view>
</view>
<view class="row" bind:tap="handleCasesAdd">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo1.isMedicalHistory===1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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}}icon108.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
<view class="row" bind:tap="handlePreDiagnosisReport" data-period="1">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo1.isExamReport===1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">3.诊前检查</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
<view class="next" bind:tap="handleNext">
下一阶段
<image class="icon" src="{{imageUrl}}icon109.png?t={{Timestamp}}"></image>
</view>
<view class="grow-row">
<view class="aside">
<view class="line"></view>
</view>
<view class="container"></view>
</view>
</view>
</scroll-view>
</swiper-item>
<!-- 阶段二 -->
<swiper-item class="swiper-item">
<scroll-view class="scroll-view" scroll-y show-scrollbar="{{false}}">
<view class="scroll-view-container">
<view class="row">
<view class="aside">
<view class="num">2</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>
</view>
<view class="row" bind:tap="handleTCenter">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo2.hospitalName}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">1.治疗中心</view>
<view class="hostipl-name" wx:if="{{periodInfo2.hospitalName}}">{{periodInfo2.hospitalName}}</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer"></view>
</view>
</view>
<view class="row" bind:tap="handlePreDiagnosisReport" data-period="2">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo2.isExamReport===1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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}}icon108.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
<view class="next" bind:tap="handleNext">
下一阶段
<image class="icon" src="{{imageUrl}}icon109.png?t={{Timestamp}}"></image>
</view>
<view class="grow-row">
<view class="aside">
<view class="line"></view>
</view>
<view class="container"></view>
</view>
</view>
</scroll-view>
</swiper-item>
<!-- 阶段三 -->
<swiper-item class="swiper-item">
<scroll-view class="scroll-view" scroll-y show-scrollbar="{{false}}">
<view class="scroll-view-container">
<view class="row">
<view class="aside">
<view class="num">3</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">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo3.injectionDate}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">1.注射日</view>
<view class="hostipl-name" wx:if="{{periodInfo3.injectionDate}}">
{{periodInfo3.injectionDate}}
</view>
</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleInhibitorsManage" data-period="3">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo3.immuneCount>0}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer">
<view class="inhibitors-content" wx:if="{{periodInfo3.immuneCount>0}}">
已记录
<text class="green">{{periodInfo3.immuneCount}}</text>
</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleBbmReport">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo3.isInjection==1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">3.BBM-H901输注记录</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer">
<view class="content" wx:if="{{periodInfo3.isInjection == 1}}">已完成</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleBbmRemark">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo3.isInjectionFeel==1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">
4.此次输注感受如何?
<image
wx:if="{{periodInfo3.injectionFeel==1}}"
class="feel"
src="{{imageUrl}}icon44.png?t={{Timestamp}}"
></image>
<image
wx:elif="{{periodInfo3.injectionFeel==2}}"
class="feel"
src="{{imageUrl}}icon42.png?t={{Timestamp}}"
></image>
<image
wx:elif="{{periodInfo3.injectionFeel==3}}"
class="feel"
src="{{imageUrl}}icon43.png?t={{Timestamp}}"
></image>
<image wx:else class="feel" src="{{imageUrl}}icon49.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
</view>
</view>
<view class="next" bind:tap="handleNext">
下一阶段
<image class="icon" src="{{imageUrl}}icon109.png?t={{Timestamp}}"></image>
</view>
<view class="grow-row">
<view class="aside">
<view class="line"></view>
</view>
<view class="container"></view>
</view>
</view>
</scroll-view>
</swiper-item>
<!-- 阶段四 -->
<swiper-item class="swiper-item">
<scroll-view class="scroll-view" scroll-y 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
wx:if="{{periodInfo4.isVisitFollowUp==1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">1.查看患者随访计划</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer">
<view
class="content"
wx:if="{{periodInfo4.followUpWeekInfo.iYear || periodInfo4.followUpWeekInfo.iYearDay || periodInfo4.followUpWeekInfo.iWeek}}"
>
当前是注射后
<block wx:if="{{periodInfo4.followUpWeekInfo.iYear}}">
第{{periodInfo4.followUpWeekInfo.iYear}}年
<block wx:if="{{periodInfo4.followUpWeekInfo.iYearDay}}">
第{{periodInfo4.followUpWeekInfo.iYearDay}}天
</block>
</block>
<block wx:if="{{periodInfo4.followUpWeekInfo.iWeek}}">
第{{periodInfo4.followUpWeekInfo.iWeek}}周
</block>
</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleLastDiagnosisReport">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo4.isRevisit==1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer" wx:if="{{periodInfo4.revisitDate}}">
<view class="content">最近录入:{{periodInfo4.revisitDate}}</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleColtStat">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo4.isVisitHealthChange==1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">3.查看患者健康变化</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
<view class="row" bind:tap="handleInhibitorsManage" data-period="4">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo4.isImmune==1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">4.免疫抑制剂记录</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer" wx:if="{{periodInfo4.immuneDate}}">
<view class="content">最近录入:{{periodInfo4.immuneDate}}</view>
</view>
</view>
</view>
<view class="row" bind:tap="handleBlood">
<view class="aside">
<view class="slow-line"></view>
<image
wx:if="{{periodInfo4.isBleed==1}}"
class="radio"
src="{{imageUrl}}icon29.png?t={{Timestamp}}"
></image>
<image wx:else 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">5.出血记录</view>
</view>
<image class="icon" src="{{imageUrl}}icon108.png?t={{Timestamp}}"></image>
</view>
<view class="c-footer" wx:if="{{periodInfo4.bleedDate}}">
<view class="content">最近录入:{{periodInfo4.bleedDate}}</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>
<image
class="guide1"
wx:if="{{current==0 && periodInfo1.isEnterPeriod==2}}"
src="{{imageUrl}}gif1.gif?t={{Timestamp}}"
></image>
<image
class="guide2"
wx:if="{{current==1 && periodInfo2.isEnterPeriod==2}}"
src="{{imageUrl}}gif1.gif?t={{Timestamp}}"
></image>
<image
class="guide3"
wx:if="{{current==2 && periodInfo3.isEnterPeriod==2}}"
src="{{imageUrl}}gif1.gif?t={{Timestamp}}"
></image>
<image
class="guide4"
wx:if="{{current==3 && periodInfo4.isEnterPeriod==2}}"
src="{{imageUrl}}gif1.gif?t={{Timestamp}}"
></image>
<popup
show="{{popupShow}}"
type="{{popupType}}"
params="{{popupParams}}"
bind:ok="handlePopupOk"
bind:cancel="handlePopupCancel"
></popup>

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

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "诊前检查医院",
"usingComponents": {}
}

44
src/doctor/pages/courseHostipal/index.scss

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
padding: 154rpx 40rpx;
.card {
position: relative;
background-color: #fff;
padding: 118rpx 40rpx 50rpx;
border-radius: 24rpx;
.c-img {
position: absolute;
top: -68rpx;
left: 50%;
transform: translateX(-50%);
width: 137rpx;
height: 137rpx;
border: 16rpx solid #fff;
border-radius: 14rpx;
}
.title {
text-align: center;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
line-height: 36rpx;
.tag {
display: inline-block;
font-size: 22rpx;
color: rgba(255, 255, 255, 1);
background-color: rgba(255, 186, 1, 1);
border-radius: 8rpx;
padding: 0 10rpx;
}
}
.site {
margin-top: 28rpx;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
text-align: center;
}
}
}

27
src/doctor/pages/courseHostipal/index.ts

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
const app = getApp<IAppOption>()
Page({
data: {
detail: {} as any,
},
onLoad(options: any) {
app.waitLogin({ type: 2 }).then(() => {
this.getDetail(options.id)
})
},
getDetail(id: string) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-hospital',
data: {
hospitalId: id,
},
}).then((res) => {
this.setData({
detail: res,
})
})
},
})
export {}

10
src/doctor/pages/courseHostipal/index.wxml

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
<view class="page">
<view class="card">
<image class="c-img" src="{{detail.hospitalImg}}"></image>
<view class="title">
{{detail.hospitalName}}
<view class="tag">{{detail.hospitalClassificationName}}{{detail.hospitalLevelName}}</view>
</view>
<view class="site">{{detail.provinceName}}{{detail.cityName}}{{detail.countyName}}{{detail.address}}</view>
</view>
</view>

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

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

607
src/doctor/pages/file/index.scss

@ -0,0 +1,607 @@ @@ -0,0 +1,607 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
padding: 40rpx 40rpx 200rpx;
.user {
padding-top: 34rpx;
display: flex;
.avatar {
flex-shrink: 0;
width: 108rpx;
height: 108rpx;
border: 2px solid #fff;
border-radius: 50%;
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(0, 0, 0, 0.16);
.a-img {
width: 100%;
height: 100%;
border-radius: inherit;
}
}
.wrap {
padding-left: 20rpx;
flex: 1;
.w-header {
display: flex;
align-items: center;
gap: 16rpx;
.name {
font-size: 36rpx;
color: rgba(1, 1, 5, 1);
font-weight: bold;
}
.age {
padding: 0 14rpx;
border-radius: 20rpx;
background-color: rgba(32, 196, 255, 1);
display: flex;
align-items: center;
gap: 6rpx;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
line-height: 32rpx;
.icon {
width: 28rpx;
height: 28rpx;
}
}
.site {
padding: 0 14rpx;
border-radius: 20rpx;
background-color: rgba(248, 166, 133, 1);
display: flex;
align-items: center;
gap: 6rpx;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
line-height: 32rpx;
.icon {
width: 28rpx;
height: 28rpx;
}
}
}
.w-footer {
margin-top: 18rpx;
display: flex;
align-items: center;
justify-content: space-between;
.info {
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
}
.more {
font-size: 28rpx;
color: rgba(28, 107, 255, 1);
}
}
}
}
.navbar {
margin-top: 28rpx;
padding: 8rpx;
border-radius: 112rpx;
background-color: #fff;
border: 2rpx solid #f6f6f6;
display: flex;
align-items: center;
justify-content: space-between;
.nav {
flex: 1;
text-align: center;
line-height: 68rpx;
font-size: 28rpx;
color: rgba(137, 141, 151, 1);
&.active {
background-color: rgba(28, 107, 255, 1);
color: #fff;
border-radius: 112rpx;
}
}
}
.container0 {
padding: 8rpx 0 0;
.none {
display: block;
margin: 30rpx auto;
width: 80%;
}
.card1 {
margin-top: 24rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
background: linear-gradient(346deg, #ffffff 0%, #ffffff 85%, #e6efff 100%);
padding-bottom: 32rpx;
.c-header {
padding: 32rpx 16rpx 0 0;
display: flex;
align-items: center;
justify-content: space-between;
.left {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
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: rgba(28, 107, 255, 1);
}
}
.fold-icon {
width: 60rpx;
height: 60rpx;
transition: all 0.3s ease;
transform: rotate(0);
&.trun {
transform: rotate(-180deg);
}
}
}
.btn {
padding: 8rpx 32rpx;
font-size: 32rpx;
line-height: 40rpx;
color: #fff;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 96rpx;
}
}
.fold {
transition: height 0.3s ease;
max-height: 0;
overflow: hidden;
}
.c-body {
margin: 24rpx 32rpx 0;
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;
line-height: 56rpx;
.label {
flex-shrink: 0;
width: 4em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.detail {
padding: 16rpx;
font-size: 32rpx;
text-align: center;
color: rgba(161, 164, 172, 1);
}
}
.more {
margin-top: 32rpx;
font-size: 32rpx;
color: rgba(28, 107, 255, 1);
text-align: center;
}
}
.card2 {
margin-top: 24rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
background: linear-gradient(346deg, #ffffff 0%, #ffffff 85%, #e6efff 100%);
padding-bottom: 32rpx;
.c-header {
padding: 32rpx 16rpx 0 0;
display: flex;
align-items: center;
justify-content: space-between;
.left {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
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: rgba(28, 107, 255, 1);
}
}
.fold-icon {
width: 60rpx;
height: 60rpx;
transition: all 0.3s ease;
transform: rotate(0);
&.trun {
transform: rotate(-180deg);
}
}
}
}
.fold {
transition: height 0.3s ease;
max-height: 0;
overflow: hidden;
}
.c-body {
margin: 24rpx 32rpx 0;
padding: 16rpx 0 0;
background: #f6f6f6;
border-radius: 24rpx 24rpx 24rpx 24rpx;
position: relative;
.row {
padding: 16rpx 32rpx;
display: flex;
gap: 32rpx;
line-height: 56rpx;
.label {
flex-shrink: 0;
width: 6em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.options {
display: flex;
align-items: center;
border-top: 1px solid rgba(232, 233, 237, 1);
.item {
flex: 1;
padding: 22rpx 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(28, 107, 255, 1);
text-align: center;
&:first-of-type {
border-right: 1px solid rgba(232, 233, 237, 1);
}
}
}
}
}
.card3,
.card4 {
margin-top: 24rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
background: linear-gradient(346deg, #ffffff 0%, #ffffff 85%, #e6efff 100%);
padding-bottom: 32rpx;
.c-header {
padding: 32rpx 16rpx 0 0;
display: flex;
align-items: center;
justify-content: space-between;
.left {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
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: rgba(28, 107, 255, 1);
}
}
.fold-icon {
width: 60rpx;
height: 60rpx;
transition: all 0.3s ease;
transform: rotate(0);
&.trun {
transform: rotate(-180deg);
}
}
}
}
.fold {
transition: height 0.3s ease;
max-height: 0;
overflow: hidden;
}
.c-body {
margin: 24rpx 32rpx 0;
padding: 16rpx 0 0;
background: #f6f6f6;
border-radius: 24rpx 24rpx 24rpx 24rpx;
position: relative;
.row {
padding: 16rpx 32rpx;
display: flex;
gap: 32rpx;
line-height: 56rpx;
.label {
flex-shrink: 0;
width: 4em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.options {
display: flex;
align-items: center;
border-top: 1px solid rgba(232, 233, 237, 1);
.item {
flex: 1;
padding: 22rpx 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: rgba(28, 107, 255, 1);
text-align: center;
&:first-of-type {
border-right: 1px solid rgba(232, 233, 237, 1);
}
}
}
}
}
}
.container1 {
padding: 8rpx 0 0;
.c1_card1 {
margin-top: 24rpx;
padding: 16rpx 32rpx;
background: linear-gradient(180deg, #fffaf9 0%, #ffffff 14%, #ffffff 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.row {
padding: 16rpx 0;
display: flex;
gap: 32rpx;
.label {
width: 6em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
}
.c1_card2 {
margin-top: 24rpx;
padding: 0 32rpx;
background: linear-gradient(180deg, #fffaf9 0%, #ffffff 14%, #ffffff 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.row {
padding: 32rpx 0;
border-bottom: 1px solid rgba(247, 247, 250, 1);
.wrap {
display: flex;
gap: 32rpx;
.label {
flex-shrink: 0;
width: 9em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
display: flex;
gap: 10rpx;
flex-wrap: wrap;
}
}
.remark {
margin-top: 24rpx;
padding: 22rpx 32rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
border-radius: 12rpx;
background-color: rgba(247, 247, 250, 1);
}
}
.row1 {
padding: 32rpx 0;
border-bottom: 1px solid rgba(247, 247, 250, 1);
.wrap {
display: flex;
align-items: center;
gap: 32rpx;
.label {
flex-shrink: 0;
width: 11em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.line {
width: 1px;
height: 88rpx;
background-color: rgba(247, 247, 250, 1);
}
.content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.remark {
margin-top: 24rpx;
padding: 22rpx 32rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
border-radius: 12rpx;
background-color: rgba(247, 247, 250, 1);
}
}
}
}
.container2 {
.date-card {
margin-top: 32rpx;
padding: 18rpx 32rpx;
background: linear-gradient( 355deg, #FFFFFF 0%, #E6EFFF 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.08);
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);
}
}
.notic {
position: relative;
margin-top: 32rpx;
height: 168rpx;
box-sizing: border-box;
padding: 24rpx 32rpx;
.title {
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
font-weight: bold;
}
.content {
margin-top: 6rpx;
font-size: 28rpx;
color: rgba(255, 255, 255, 1);
}
.sub-content {
margin-top: 6rpx;
padding: 0 10rpx;
height: 36rpx;
display: inline-block;
font-size: 28rpx;
border-radius: 6rpx;
color: rgba(28, 107, 255, 1);
background-color: #fff;
}
.badge {
position: absolute;
right: 6rpx;
top: -14rpx;
width: 180rpx;
height: 180rpx;
border-radius: 50%;
box-shadow: inset 0rpx -1rpx 0rpx 0rpx rgba(255, 255, 255, 0.25);
}
}
.card {
position: relative;
margin-top: 32rpx;
border-radius: 24rpx;
border: 1px solid #ffffff;
background: rgba(255, 244, 243, 1);
.c-calendar {
position: relative;
z-index: 1;
padding: 40rpx 32rpx 0;
min-height: 400rpx;
background-color: #fff;
border-radius: 24rpx;
.lengend {
padding: 32rpx 0;
display: flex;
align-items: center;
gap: 32rpx;
border-top: 1px solid rgba(247, 247, 250, 1);
.l-item {
display: flex;
align-items: center;
gap: 12rpx;
font-size: 28rpx;
color: rgba(161, 164, 172, 1);
.dot {
width: 12rpx;
height: 12rpx;
border-radius: 50%;
&.dot1 {
background-color: rgba(28, 107, 255, 1);
}
&.dot2 {
background-color: rgba(255, 163, 112, 1);
}
&.dot3 {
background-color: rgba(255, 207, 135, 1);
}
}
}
}
}
.c-sub-card {
position: absolute;
bottom: -24rpx;
left: 40rpx;
width: 590rpx;
height: 636rpx;
background: #e2e3e6;
border-radius: 24rpx 24rpx 24rpx 24rpx;
}
}
.btn {
margin: 52rpx 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;
}
}
}

258
src/doctor/pages/file/index.ts

@ -0,0 +1,258 @@ @@ -0,0 +1,258 @@
import dayjs from 'dayjs'
const licia = require('miniprogram-licia')
const app = getApp<IAppOption>()
Page({
data: {
nav: 0,
id: '',
userInfo: {},
fold1: false,
fold2: false,
fold3: false,
fold4: false,
periodOne: [],
periodTwo: [],
periodThree: {},
periodFour: [],
empty0: false,
medical: {
lastBleedingInfo: {
bleedingPartList: [],
},
},
followExam: {
recommendDate: [],
} as any,
calendarConfig: {
multi: false,
hideSelectYear: true,
markToday: '今', // 当天日期展示不使用默认数字,用特殊文字标记
autoChoosedWhenJump: true,
firstDayOfWeek: 'Mon',
theme: 'geneb_doctor',
takeoverTap: false,
highlightToday: true,
onlyShowCurrentMonth: true,
disableMode: {
type: 'after', // [‘before’, 'after']
},
},
},
onLoad(options) {
this.setData({
nav: Number(options.nav) || 0,
id: options.id,
})
},
onShow() {
app.waitLogin({ type: 2 }).then(() => {
this.getPatientInfo()
this.getInfo()
})
},
getPatientInfo() {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/patient/get-detail',
data: {
patientId: this.data.id,
},
}).then((res) => {
console.log('res: ', res)
this.setData({
userInfo: {
...res.patientInfo,
CreateTime: dayjs(res.createTime).format('YYYY年MM月DD日'),
},
})
})
},
handleNav(e) {
const { nav } = e.currentTarget.dataset
this.setData({
nav,
})
this.getInfo()
},
getInfo() {
const { nav } = this.data
if (nav == 0) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-archives',
data: {
patientId: this.data.id,
},
}).then((res) => {
this.setData({
...res,
empty0:
!res.periodOne.length &&
!res.periodTwo.length &&
!res.periodFour.length &&
!res.periodThree.injectionDate &&
!res.periodThree.injectionWeight &&
!res.periodThree.injectionDrugs &&
!res.periodThree.injectionNum,
})
})
}
if (nav == 1) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-medical-history-info',
data: {
patientId: this.data.id,
},
}).then((res) => {
this.setData({
medical: res,
})
})
}
if (nav == 2) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-follow-up-exam',
data: {
patientId: this.data.id,
},
}).then((res) => {
this.setData({
followExam: {
injectionDateName: dayjs(res.injectionDate).format('YYYY年MM月DD日 ddd'),
...res,
},
})
this.getFollowList()
})
}
},
getFollowList(dateMonth = '') {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-follow-up-exam-list',
data: {
month: dateMonth,
patientId: this.data.id,
},
}).then((res) => {
console.log('res: ', res)
const { followExam } = this.data
this.setCalendarTodos({
bleedDate: [followExam.injectionDate],
injectionDate: res,
reportInjectionDate: followExam.recommendDate,
})
})
},
handleWhenChangeMonth(e) {
console.log('DEBUGPRINT[101]: index.ts:129: e=', e)
const next = e.detail.next
const dateMonth = dayjs(`${next.year}-${next.month}`).format('YYYY-MM')
this.getFollowList(dateMonth)
},
setCalendarTodos({
bleedDate = [],
injectionDate = [],
reportInjectionDate = [],
}: {
bleedDate: any[]
injectionDate: string[]
reportInjectionDate: string[]
}) {
const calendar = this.selectComponent('#calendar').calendar
const dates: any[] = []
const unionArr = licia.union(bleedDate, injectionDate, reportInjectionDate)
unionArr.forEach((date: string) => {
let color: string[] = []
if (bleedDate.includes(date)) {
color.push('rgba(28, 107, 255, 1)')
}
if (injectionDate.includes(date)) {
color.push('rgba(255, 163, 112, 1)')
}
if (reportInjectionDate.includes(date)) {
color.push('rgba(255, 207, 135, 1)')
}
dates.push({
year: date.split('-')[0],
month: date.split('-')[1],
date: date.split('-')[2],
color,
})
})
calendar.setTodos({
// 待办点标记设置
pos: 'bottom', // 待办点标记位置 ['top', 'bottom']
dotColor: 'purple', // 待办点标记颜色
circle: false, // 待办圆圈标记设置(如圆圈标记已签到日期),该设置与点标记设置互斥
showLunar: true,
showLabelAlways: true, // 点击时是否显示待办事项(圆点/文字),在 circle 为 true 及当日历配置 showLunar 为 true 时,此配置失效
dates,
})
},
handleFold(e) {
const { fold } = e.currentTarget.dataset
this.setData({
[fold]: !this.data[fold],
})
console.log(this.data[fold])
},
handleRevisitRecord() {
wx.navigateTo({
url: '/patient/pages/lastDiagnosisReport/index?period=4',
})
},
handleRevisitDetail(e) {
const { id, period } = e.currentTarget.dataset
wx.navigateTo({
url: `/patient/pages/lastDiagnosisReport/index?examid=${id}&period=${period}`,
})
},
handleRevisitAll() {
wx.navigateTo({
url: '/patient/pages/revisitRecord/index',
})
},
handleCourse(e: any) {
const { progress } = e.currentTarget.dataset
wx.navigateTo({
url: `/patient/pages/course/index?current=${progress}`,
})
},
handleBbmDetail() {
wx.navigateTo({
url: '/patient/pages/bbmReport/index',
})
},
handlePreDiagnosisReport(e) {
const { id, period } = e.currentTarget.dataset
wx.navigateTo({
url: `/patient/pages/preDiagnosisReport/index?examid=${id}&period=${period}`,
})
},
handleInjectionDate() {
wx.navigateTo({
url: '/patient/pages/injectDate/index',
})
},
handleBack() {
wx.navigateBack()
},
})
export {}

336
src/doctor/pages/file/index.wxml

@ -0,0 +1,336 @@ @@ -0,0 +1,336 @@
<navbar fixed custom-style="background:{{background}}" back>
<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}}bg25.png?t={{Timestamp}}') no-repeat top center/100% 693rpx"
>
<view class="user">
<view class="avatar">
<image class="a-img" src="{{userInfo.userAvatar}}"></image>
</view>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.patientName}}</view>
<view class="age">
<image class="icon" src="{{imageUrl}}icon91.png?t={{Timestamp}}"></image>
{{userInfo.ageYear}}岁
</view>
<view class="site">
<image class="icon" src="{{imageUrl}}icon92.png?t={{Timestamp}}"></image>
{{userInfo.provinceName}}
</view>
</view>
<view class="w-footer">
<view class="info">入组时间:{{userInfo.CreateTime}}</view>
</view>
</view>
</view>
<view class="navbar">
<view class="nav {{nav==0 && 'active'}}" bindtap="handleNav" data-nav="0">治疗档案</view>
<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="card1" wx:if="{{periodFour.length}}">
<view class="c-header">
<view class="left" bindtap="handleFold" data-fold="fold1">
<view class="title">随访计划</view>
<image class="fold-icon {{fold1 && 'trun'}}" src="{{imageUrl}}icon56.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="{{fold1 && 'fold'}}">
<view
class="c-body"
wx:for="{{periodFour}}"
wx:key="index"
bind:tap="handleRevisitDetail"
data-id="{{item.examId}}"
data-period="{{item.period}}"
>
<!-- <image wx:if="{{true}}" class="status" src="{{imageUrl}}icon42.png?t={{Timestamp}}"></image> -->
<!-- <image wx:elif="{{false}}" class="status" src="{{imageUrl}}icon43.png?t={{Timestamp}}"></image> -->
<!-- <image wx:elif="{{false}}" class="status" src="{{imageUrl}}icon44.png?t={{Timestamp}}"></image> -->
<view class="row">
<view class="label">日期</view>
<view class="content" wx:if="{{item.beginDate && item.endDate}}">{{item.beginDate}}~{{item.endDate}}</view>
<view class="content" wx:else>--</view>
</view>
<view class="row">
<view class="label">诊疗医院</view>
<view class="content">{{item.hospitalName || '未填写'}}</view>
</view>
<view class="row">
<view class="label">检查项目</view>
<view class="content">{{item.totalNum}}/{{item.allNum}}</view>
</view>
</view>
<view class="more" bind:tap="handleRevisitAll">
查看全部
<van-icon name="arrow" />
</view>
</view>
</view>
<view
class="card2"
wx:if="{{periodThree.injectionDate || periodThree.injectionWeight || periodThree.injectionDrugs || periodThree.injectionNum}}"
>
<view class="c-header">
<view class="left" bindtap="handleFold" data-fold="fold2">
<view class="title">注射日</view>
<image class="fold-icon {{fold2 && 'trun'}}" src="{{imageUrl}}icon56.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="{{fold2 && 'fold'}}">
<view class="c-body">
<view class="row">
<view class="label">注射日期</view>
<view class="content">{{periodThree.injectionDate}}</view>
</view>
<view class="row">
<view class="label">BBM-H901</view>
<view class="content">
<view wx:if="{{periodThree.injectionWeight}}">体重 {{periodThree.injectionWeight}}kg</view>
<view wx:else>体重 未填写</view>
<view wx:if="{{periodThree.injectionDrugs}}">用药 {{periodThree.injectionDrugs}}ml</view>
<view wx:else>用药 未填写</view>
<view wx:if="{{periodThree.injectionNum}}">预期用药 {{periodThree.injectionNum}} 瓶</view>
<view wx:else>预期用药 未填写</view>
</view>
</view>
<view class="options">
<view class="item" bind:tap="handleCourse" data-progress="2">
诊疗阶段详情
<van-icon name="arrow" />
</view>
<view class="item" bind:tap="handleBbmDetail">
查看详情
<van-icon name="arrow" />
</view>
</view>
</view>
</view>
</view>
<view class="card3" wx:if="{{periodTwo.length}}">
<view class="c-header">
<view class="left" bindtap="handleFold" data-fold="fold3">
<view class="title">基因治疗中心检查</view>
<image class="fold-icon {{fold3 && 'trun'}}" src="{{imageUrl}}icon56.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="{{fold3 && 'fold'}}">
<view class="c-body" wx:for="{{periodTwo}}" wx:key="index">
<view class="row">
<view class="label">日期</view>
<view class="content" wx:if="{{item.beginDate && item.endDate}}">{{item.beginDate}}~{{item.endDate}}</view>
<view class="content" wx:else>未填写</view>
</view>
<view class="row">
<view class="label">诊疗医院</view>
<view class="content">{{item.hospitalName || '未填写'}}</view>
</view>
<view class="row">
<view class="label">检查项目</view>
<view class="content">{{item.totalNum}}/{{item.allNum}}</view>
</view>
<view class="options">
<view class="item" bind:tap="handleCourse" data-progress="1">
诊疗阶段详情
<van-icon name="arrow" />
</view>
<view
class="item"
bind:tap="handlePreDiagnosisReport"
data-id="{{item.examId}}"
data-period="{{item.period}}"
>
查看详情
<van-icon name="arrow" />
</view>
</view>
</view>
</view>
</view>
<view class="card4" wx:if="{{periodOne.length}}">
<view class="c-header">
<view class="left" bindtap="handleFold" data-fold="fold4">
<view class="title">诊前筛查</view>
<image class="fold-icon {{fold4 && 'trun'}}" src="{{imageUrl}}icon56.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="{{fold4 && 'fold'}}">
<view class="c-body" wx:for="{{periodOne}}" wx:key="index">
<view class="row">
<view class="label">日期</view>
<view class="content" wx:if="{{item.beginDate && item.endDate}}">{{item.beginDate}}~{{item.endDate}}</view>
<view class="content" wx:else>未填写</view>
</view>
<view class="row">
<view class="label">定点医院</view>
<view class="content">{{item.hospitalName || '未填写'}}</view>
</view>
<view class="row">
<view class="label">检查项目</view>
<view class="content">{{item.totalNum}}/{{item.allNum}}</view>
</view>
<view class="options">
<view class="item" bind:tap="handleCourse" data-progress="0">
诊疗阶段详情
<van-icon name="arrow" />
</view>
<view
class="item"
bind:tap="handlePreDiagnosisReport"
data-id="{{item.examId}}"
data-period="{{item.period}}"
>
查看详情
<van-icon name="arrow" />
</view>
</view>
</view>
</view>
</view>
<image wx:if="{{empty0}}" class="none" src="{{imageUrl}}none.png"></image>
</view>
<view class="container1" wx:if="{{nav==1}}">
<view class="c1_card1">
<view class="row">
<view class="label">出生年月</view>
<view class="content">{{medical.birthMonth}}({{medical.ageYear}}岁)</view>
</view>
<view class="row">
<view class="label">确诊时间</view>
<view class="content">
{{medical.diagnosisTime || '未填写'}}
<block wx:if="{{medical.diagnosisAge}}">({{medical.diagnosisAge}})</block>
</view>
</view>
<view class="row">
<view class="label">您的体重</view>
<view class="content" wx:if="{{medical.weight}}">{{medical.weight}} kg</view>
<div class="content" wx:else>未填写</div>
</view>
</view>
<view class="c1_card1">
<view class="row">
<view class="label">凝血因子</view>
<view class="content" wx:if="{{medical.clottingFactor}}">{{medical.clottingFactor}}%</view>
<view class="content" wx:else>未填写</view>
</view>
<view class="row">
<view class="label">治疗方案</view>
<view class="content">{{medical.treatmentPlanName || '未填写'}}</view>
</view>
<view class="row">
<view class="label">FIX暴露日</view>
<view class="content" wx:if="{{medical.fixExposureDay}}">{{medical.fixExposureDay}}个</view>
<view class="content" wx:else>未填写</view>
</view>
</view>
<view class="c1_card2">
<view class="row">
<view class="wrap">
<view class="label">既往FIX抑制物病史</view>
<view class="content">{{medical.beforeFixHistoryName || '未填写'}}</view>
</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">既往肝脏疾病病史</view>
<view class="content">{{medical.beforeLiverHistoryName || '未填写'}}</view>
</view>
<view class="remark" wx:if="{{medical.liverRecord}}">{{medical.liverRecord}}</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">您是否有饮酒史</view>
<view class="content">{{medical.drinkingHistoryName || '未填写'}}</view>
</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">您是否有过敏史</view>
<view class="content">{{medical.allergyHistoryName || '未填写'}}</view>
</view>
<view class="remark" wx:if="{{medical.allergyRecord}}">{{medical.allergyRecord}}</view>
</view>
<view class="row1">
<view class="wrap">
<view class="label">
<view>您是否可能存在不适合</view>
<view>使用糖皮质激素的情况?</view>
</view>
<view class="line"></view>
<view class="content">{{medical.isNotGlucocorticoidName || '未填写'}}</view>
</view>
<view class="remark" wx:if="{{medical.medicalHistoryInfo}}">{{medical.medicalHistoryInfo}}</view>
</view>
</view>
<view class="c1_card2">
<view class="row">
<view class="wrap">
<view class="label" style="width: 4em">靶关节</view>
<view class="content">
<view wx:for="{{medical.lastBleedingInfo.bleedingPartList}}" wx:key="bleedingId">
{{item.bleedingPartName}}
</view>
</view>
</view>
</view>
<view class="row">
<view class="wrap">
<view class="label">最近6个月出血</view>
</view>
<view class="remark" wx:if="{{medical.lastBleedingInfo.remark}}">{{medical.lastBleedingInfo.remark}}</view>
</view>
</view>
</view>
<view class="container2" wx:if="{{nav==2}}">
<view class="date-card" bind:tap="handleInjectionDate">
<image class="icon" src="{{imageUrl}}icon107.png?t={{Timestamp}}"></image>
<view class="content" wx:if="{{followExam.injectionDate}}">注射日:{{followExam.injectionDateName}}</view>
<view class="content" wx:else>请填写您的注射日生成随访计划</view>
</view>
<view
class="notic"
wx:if="{{followExam.injectionDate}}"
style="background: url('{{imageUrl}}bg26.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="title">{{followExam.tipsInfo}}</view>
<view class="content" wx:if="{{followExam.lastNoticeWeekInfo}}">{{followExam.lastNoticeWeekInfo}}</view>
<view class="sub-content" wx:if="{{followExam.lastNoticeExamInfo}}">{{followExam.lastNoticeExamInfo}}</view>
<image
wx:if="{{followExam.examDiffPassMonth==1}}"
class="badge"
src="{{imageUrl}}icon94.png?t={{Timestamp}}"
></image>
<image wxx:else class="badge" src="{{imageUrl}}icon95.png?t={{Timestamp}}"></image>
</view>
<view class="card">
<view class="c-calendar" style="background: #fff url('/images/icon99.png') no-repeat bottom right/118rpx 116rpx">
<calendar
bind:whenChangeMonth="handleWhenChangeMonth"
config="{{calendarConfig}}"
id="calendar"
bind:jumpToToday="toggleFold"
></calendar>
<view class="lengend">
<view class="l-item">
<view class="dot dot1"></view>
注射日
</view>
<view class="l-item">
<view class="dot dot2"></view>
已复诊
</view>
<view class="l-item">
<view class="dot dot3"></view>
建议复诊
</view>
</view>
</view>
<view class="c-sub-card"></view>
</view>
</view>
</view>

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

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

120
src/doctor/pages/followPlan/index.scss

@ -0,0 +1,120 @@ @@ -0,0 +1,120 @@
page {
background-color: #f7f7fa;
}
.page {
padding: 32rpx 40rpx 260rpx;
.date-card {
padding: 18rpx 32rpx;
background: linear-gradient(to top, #ffffff 60%, #d8e5ff 100%);
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: #F2F7FF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.title {
padding: 20rpx;
font-size: 32rpx;
color: rgba(28, 107, 255, 1);
text-align: center;
}
.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(28, 107, 255, 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);
line-height: 40rpx;
white-space: pre-line;
display: flex;
justify-content: center;
flex-direction: column;
}
}
.tr:nth-child(even) {
.td {
background-color: rgba(242, 247, 255, 1);
}
}
.active {
.aside {
.line-top,
.line-bottom {
border-color: rgba(28, 107, 255, 1);
}
.order {
background-color: rgba(28, 107, 255, 1);
}
}
}
.current {
.aside {
.line-top {
border-color: rgba(28, 107, 255, 1);
}
.order {
background-color: rgba(28, 107, 255, 1);
}
}
.td {
color: rgba(28, 107, 255, 1);
}
}
}
}
}
}
}

47
src/doctor/pages/followPlan/index.ts

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
import dayjs from 'dayjs'
const app = getApp<IAppOption>()
Page({
data: {
patientId: '',
injectionDate: '',
stage: '',
},
onLoad(options) {
this.setData({
patientId: options.id,
})
app.waitLogin({ type: 2 }).then(() => {
this.getDetail()
})
},
getDetail() {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-follow-up-plan',
data: {
patientId: this.data.patientId,
},
}).then((res) => {
console.log('res: ', res)
this.setData({
injectionDate: res.injectionDate ? dayjs(res.injectionDate).format('YYYY年MM月DD日 ddd') : '',
stage: res.stage,
})
})
},
handleClander() {
wx.navigateTo({
url: '/patient/pages/file/index?nav=2',
})
},
handleLastDiagnosisReport() {
wx.navigateTo({
url: '/patient/pages/lastDiagnosisReport/index',
})
},
})
export {}

103
src/doctor/pages/followPlan/index.wxml

@ -0,0 +1,103 @@ @@ -0,0 +1,103 @@
<view class="page">
<view class="date-card">
<image class="icon" src="{{imageUrl}}icon107.png?t={{Timestamp}}"></image>
<view class="content">注射日:{{injectionDate || '未录入'}}</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 {{stage === 1 && 'current'}} {{stage > 1 && 'active'}}">
<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">
<view>每周2次</view>
<view>输注后第3天,第6天</view>
</view>
</view>
<view class="tr {{stage === 2 && 'current'}} {{stage > 2 && 'active'}}">
<view class="aside">
<view class="line-top"></view>
<view class="order"></view>
<view class="line-bottom"></view>
</view>
<view class="td">
<view>输注后</view>
<view>第2周~第12周</view>
</view>
<view class="td">每周1次</view>
</view>
<view class="tr {{stage === 3 && 'current'}} {{stage > 3 && 'active'}}">
<view class="aside">
<view class="line-top"></view>
<view class="order"></view>
<view class="line-bottom"></view>
</view>
<view class="td">
<view>输注后</view>
<view>第13周~第26周</view>
</view>
<view class="td">每2周1次</view>
</view>
<view class="tr {{stage === 4 && 'current'}} {{stage > 4 && 'active'}}">
<view class="aside">
<view class="line-top"></view>
<view class="order"></view>
<view class="line-bottom"></view>
</view>
<view class="td">
<view>输注后</view>
<view>第27周~第52周</view>
</view>
<view class="td">每4周1次</view>
</view>
<view class="tr {{stage === 5 && 'current'}} {{stage > 5 && 'active'}}">
<view class="aside">
<view class="line-top"></view>
<view class="order"></view>
<view class="line-bottom"></view>
</view>
<view class="td">
<view>输注后</view>
<view>第1年~第2年内</view>
</view>
<view class="td">每周1次</view>
</view>
<view class="tr {{stage === 6 && 'current'}} {{stage > 6 && 'active'}}">
<view class="aside">
<view class="line-top"></view>
<view class="order"></view>
<view class="line-bottom"></view>
</view>
<view class="td">
<view>输注后</view>
<view>第2年~第5年内</view>
</view>
<view class="td">每6个月1次</view>
</view>
<view class="tr {{stage === 7 && 'current'}} {{stage > 7 && 'active'}}">
<view class="aside">
<view class="line-top"></view>
<view class="order"></view>
<view class="line-bottom"></view>
</view>
<view class="td">
<view>输注后</view>
<view>5年以后</view>
</view>
<view class="td">每年1次或2次</view>
</view>
</view>
</view>
</view>
</view>
</view>

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

@ -13,7 +13,6 @@ page { @@ -13,7 +13,6 @@ page {
.page-header {
padding: 54rpx 0 0;
.user {
padding: 0 32rpx;
display: flex;
align-items: center;
justify-content: space-between;

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

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "免疫抑制剂管理",
"usingComponents": {}
}

65
src/doctor/pages/inhibitorsManageList/index.scss

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
.empty {
padding: 276rpx 108rpx;
.none-img {
width: 533rpx;
height: 339rpx;
}
.title {
text-align: center;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.add {
margin: 174rpx 0 0;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
line-height: 88rpx;
text-align: center;
background: linear-gradient(356deg, #f23a2f 0%, #fc684f 100%);
border-radius: 84rpx 84rpx 84rpx 84rpx;
}
}
.list {
padding: 32rpx 40rpx;
.total {
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
.red {
color: rgba(246, 74, 58, 1);
font-size: 40rpx;
}
}
.list-card {
padding: 16rpx 0;
margin-top: 24rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.item {
padding: 16rpx 32rpx;
display: flex;
.item-title {
flex-shrink: 0;
width: 5em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.item-content {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
}
.add {
position: fixed;
left: 50%;
bottom: 142rpx;
transform: translateX(-50%);
width: 156rpx;
height: 156rpx;
}
}
}

62
src/doctor/pages/inhibitorsManageList/index.ts

@ -0,0 +1,62 @@ @@ -0,0 +1,62 @@
const app = getApp<IAppOption>()
Page({
data: {
patientId: '',
period: '',
list: [] as any[],
total: 0,
pagination: {
page: 1,
pages: 1,
count: 1,
},
},
onLoad(options) {
this.setData({
period: options.period || '',
patientId: options.id || '',
})
},
onShow() {
app.waitLogin().then(() => {
this.getList()
})
},
getList(newPage = 1) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-immune-list',
data: {
page: newPage,
patientId: this.data.patientId,
},
}).then((res) => {
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: any) {
// const { id, period } = e.currentTarget.dataset
// wx.navigateTo({
// url: `/patient/pages/inhibitorsManageDetail/index?id=${id}&peroid=${period}`,
// })
},
})
export {}

34
src/doctor/pages/inhibitorsManageList/index.wxml

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
<view class="page">
<view class="list">
<view class="total">
已记录剂量处方
<text class="red">{{total}}</text>
</view>
<view
class="list-card"
wx:for="{{list}}"
bind:tap="handleEdit"
data-id="{{item.recordId}}"
data-period="{{item.period}}"
>
<view class="item">
<view class="item-title">用药时间</view>
<view class="item-content">{{item.recordDate}}</view>
</view>
<view class="item">
<view class="item-title">药物名称</view>
<view class="item-content">{{item.drugName}}</view>
</view>
<view class="item">
<view class="item-title">用药方式</view>
<view class="item-content">{{item.typeName}}</view>
</view>
<view class="item">
<view class="item-title">用药剂量</view>
<view class="item-content">{{item.dosage}}{{item.dosageUnitName}}</view>
</view>
</view>
<pagination pagination="{{pagination}}"></pagination>
</view>
</view>

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

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

322
src/doctor/pages/lastDiagnosisReport/index.scss

@ -0,0 +1,322 @@ @@ -0,0 +1,322 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page {
padding: 32rpx 30rpx 240rpx;
.date-form {
padding: 24rpx 32rpx;
background-color: #fff;
border-radius: 24rpx;
.title {
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);
}
.content {
margin-left: 32rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
.range {
margin-top: 24rpx;
display: flex;
align-items: center;
gap: 18rpx;
font-size: 32rpx;
color: rgba(207, 209, 213, 1);
.picker {
flex: 1;
.picker-content {
padding: 22rpx 32rpx;
display: flex;
align-items: center;
background-color: rgba(247, 247, 250, 1);
border-radius: 12rpx;
.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;
}
}
}
}
}
.select-hostipal {
margin-top: 24rpx;
padding: 28rpx 32rpx;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #fff;
border-radius: 24rpx;
gap: 32rpx;
.label {
font-size: 32rpx;
color: rgba(0, 0, 0, 1);
}
.picker {
flex: 1;
.picker-content {
display: flex;
align-items: center;
justify-content: space-between;
color: rgba(161, 164, 172, 0.5);
.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);
}
}
}
}
}
.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(28, 107, 255, 1);
}
.line-bottom,
.line-top {
background-color: rgba(28, 107, 255, 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: rgba(28, 107, 255, 1);
}
}
.icon {
width: 32rpx;
height: 32rpx;
transition: transform 0.3s;
&.turn {
transform: rotate(180deg);
}
}
}
.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(14, 209, 167, 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-input-area {
padding: 0 32rpx;
border-radius: 24rpx;
background-color: rgba(247, 247, 250, 1);
.m-input {
padding: 32rpx 0;
display: flex;
align-items: center;
gap: 32rpx;
border-bottom: 1px solid rgba(241, 241, 244, 1);
.label {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
width: 7em;
.sub-label {
font-size: 20rpx;
}
}
.input {
width: 3em;
font-size: 32rpx;
height: 72rpx;
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;
}
}
.module2 {
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);
}
}
.text-area {
padding: 24rpx 32rpx;
width: 100%;
height: 182rpx;
border-radius: 12rpx;
box-sizing: border-box;
background-color: rgba(247, 247, 250, 1);
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
.module3 {
padding: 0 32rpx 32rpx;
.text-area {
padding: 24rpx 32rpx;
width: 100%;
height: 182rpx;
border-radius: 12rpx;
box-sizing: border-box;
background-color: rgba(247, 247, 250, 1);
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
}
}
}
}
}

240
src/doctor/pages/lastDiagnosisReport/index.ts

@ -0,0 +1,240 @@ @@ -0,0 +1,240 @@
const app = getApp<IAppOption>()
Page({
data: {
popupShow: false,
popupType: 'preDiagnosisReportDate', // 确认绑定曾经扫码医生
popupParams: {},
edit: false,
fold1: true,
fold2: true,
fold3: true,
hospitalName: '',
patientId: '',
examId: '',
period: '1',
beginDate: '',
endDate: '',
hospitalId: '',
isBiochemical: 2,
alt: '',
ast: '',
bilirubin: '',
isCFIxActivity: 2,
clottingFactor: '',
isOther: 2,
otherInfo: '',
attachmentList2: [],
attachmentList3: [],
attachmentList10: [],
formKeys: [
'beginDate',
'endDate',
'hospitalId',
'isBiochemical',
'alt',
'ast',
'bilirubin',
'isCFIxActivity',
'clottingFactor',
'isOther',
'otherInfo',
],
dict: {
result: {},
number: {},
},
},
onLoad(options) {
this.setData({
examId: options.examid || '',
period: options.period || '1',
patientId: options.id || '',
edit: options.edit === '1',
})
},
onShow() {
app.waitLogin({ type: 2 }).then(() => {
this.getDict()
this.getDetail()
})
},
getDict() {
wx.ajax({
method: 'GET',
url: '?r=wtx/treatment/get-dict',
data: {},
}).then((res) => {
this.setData({
dict: res,
})
})
},
getDetail() {
const { examId, formKeys } = this.data
if (!examId) return
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-exam-detail',
data: {
examId: examId,
patientId: this.data.patientId,
},
}).then((res) => {
const reset = formKeys.reduce((pre, cur) => {
pre[cur] = res[cur] || ''
return pre
}, {})
this.setData({
...reset,
attachmentList2: res.attachmentList[2] || [],
attachmentList3: res.attachmentList[3] || [],
attachmentList10: res.attachmentList[10] || [],
hospitalName: res.hospitalName || '',
})
})
},
handleSelectHospital() {
wx.navigateTo({
url: `/patient/pages/selectHostipal/index?select=1&id=${this.data.hospitalId}`,
events: {
acceptDataFromOpenedPage: (data) => {
this.setData({
hospitalId: data.hospitalId,
hospitalName: data.hospitalName,
})
this.updateSave()
},
},
})
},
handleToggleFold(e: any) {
const { fold } = e.currentTarget.dataset
this.setData({
[fold]: !this.data[fold],
})
},
handleToggleCheck(e: any) {
const { check, fold } = e.currentTarget.dataset
let foldValue = this.data[fold]
if (this.data[check] == 2) {
foldValue = false
}
this.setData({
[check]: this.data[check] == 1 ? 2 : 1,
[fold]: foldValue,
})
this.updateSave()
},
updateSave(e = null) {
let isBack = false
if (e) {
const { back } = (e as any).currentTarget.dataset
isBack = back == 1
}
const { formKeys, period, examId, ...reset } = this.data
const form = formKeys.reduce((pre, cur) => {
pre[cur] = reset[cur]
return pre
}, {})
wx.ajax({
method: 'POST',
url: '?r=wtx/exam/save-record',
data: {
examId,
period,
...form,
},
}).then((res) => {
this.setData({
examId: res,
})
if (isBack) {
wx.navigateBack()
}
})
},
setFile(e: any) {
const { type, key } = e.currentTarget.dataset
const { examId, period } = this.data
const detail = e.detail || []
let apiArr: any[] = []
const fileList = this.data[key] || []
detail.forEach((item: any) => {
const params: any = {
examId,
period,
type,
fileType: item.fileType,
name: item.name,
url: item.url,
videoUrl: item.videoUrl,
duration: item.duration,
}
fileList.push(params)
apiArr.push(this.saveAttachment(params))
})
this.setData({
[key]: fileList,
})
Promise.all(apiArr).then((res) => {
console.log(res)
})
},
saveAttachment(params: any) {
return wx.ajax({
method: 'POST',
url: '?r=wtx/treatment/save-attachment',
data: params,
})
},
delFile(e: any) {
const { key } = e.currentTarget.dataset
const { index, item } = e.detail
if (item.attachmentId) {
wx.ajax({
method: 'POST',
url: '?r=wtx/treatment/del-attachment',
data: {
attachmentId: item.attachmentId,
},
})
}
const fileList = this.data[key]
const newFileList = fileList.filter((_, i) => i !== index)
this.setData({
[key]: newFileList,
})
},
handleDel() {
const { examId } = this.data
wx.showModal({
title: '确认删除?',
confirmColor: 'rgba(246, 74, 58, 1)',
success: (res) => {
if (res.confirm) {
wx.ajax({
method: 'POST',
url: '?r=wtx/exam/del',
data: { examId },
}).then(() => {
wx.navigateBack()
})
}
},
})
},
handleBack() {
wx.navigateBack()
},
})
export {}

201
src/doctor/pages/lastDiagnosisReport/index.wxml

@ -0,0 +1,201 @@ @@ -0,0 +1,201 @@
<view class="page">
<view class="date-form">
<view class="title">
<image class="icon" src="{{imageUrl}}icon110.png?t={{Timestamp}}"></image>
<view class="label">检查时间</view>
<view class="content" wx:if="{{beginDate && endDate}}">{{beginDate}}至{{endDate}}</view>
<view class="content" wx:else>--</view>
</view>
</view>
<view class="select-hostipal">
<view class="label">检查医院</view>
<div class="picker" bind:tap="handleSelectHospital">
<view class="picker-content">
<view class="content" data-place="--">{{hospitalName}}</view>
</view>
</div>
</view>
<view class="form">
<view class="form-card">
<view class="aside {{isBiochemical==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold1">
<view class="title">生化检查</view>
<image class="icon {{fold1 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view class="status {{isBiochemical==1 && 'active'}}">{{isBiochemical==1?'已检查':'未检查'}}</view>
</view>
</view>
<view class="c-body {{fold1 && 'fold'}}">
<view class="module1">
<view class="m-input-area">
<view class="m-input">
<view class="label">
ALT
<view class="sub-label">丙氨酸氨基转移酶</view>
</view>
<input
disabled
bind:blur="updateSave"
bind:blur="updateSave"
type="number"
maxlength="5"
model:value="{{alt}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">U/L</view>
</view>
<view class="m-input">
<view class="label">
AST
<view class="sub-label">天门冬氨酸氨基转移酶</view>
</view>
<input
disabled
bind:blur="updateSave"
type="number"
maxlength="5"
model:value="{{ast}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">U/L</view>
</view>
<view class="m-input">
<view class="label">总胆红素</view>
<input
disabled
bind:blur="updateSave"
type="number"
maxlength="4"
model:value="{{bilirubin}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">μmol/L</view>
</view>
</view>
<view class="m-title" wx:if="{{attachmentList2.length}}">请上传您的检查报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList2}}"
maxNum="{{9}}"
data-key="attachmentList2"
data-type="2"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isCFIxActivity==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold2">
<view class="title">凝血因子 IX 活性</view>
<image class="icon {{fold2 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view class="status {{isCFIxActivity==1 && 'active'}}">{{isCFIxActivity==1?'已检查':'未检查'}}</view>
</view>
</view>
<view class="c-body {{fold2 && 'fold'}}">
<view class="module2">
<view class="m-input">
<view class="label">您的凝血因子水平</view>
<input
disabled
bind:blur="updateSave"
type="number"
maxlength="3"
model:value="{{clottingFactor}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">%</view>
</view>
<view class="m-title" wx:if="{{attachmentList3.length}}">请上传您的检查报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList3}}"
maxNum="{{9}}"
data-key="attachmentList3"
data-type="3"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isOther==1 && 'active'}}">
<view class="line-top"></view>
<view class="order" style="font-size: 24rpx">3</view>
<view class="line-bottom" style="border: none"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left" bind:tap="handleToggleFold" data-fold="fold3">
<view class="title">其他检查</view>
<image class="icon {{fold3 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view class="status {{isOther==1 && 'active'}}">{{isOther==1?'已检查':'未检查'}}</view>
</view>
<view class="content">您的其他项检查</view>
</view>
<view class="c-body {{fold3 && 'fold'}}">
<view class="module3">
<textarea
disabled
class="text-area"
model:value="{{otherInfo}}"
placeholder="--"
disable-default-padding
bind:blur="updateSave"
></textarea>
<view class="m-title" wx:if="{{attachmentList10.length}}">提交您的检测报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList10}}"
maxNum="{{9}}"
data-key="attachmentList10"
data-type="10"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<popup
show="{{popupShow}}"
type="{{popupType}}"
params="{{popupParams}}"
bind:ok="handlePopupOk"
bind:cancel="handlePopupCancel"
></popup>

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

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

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

@ -5,7 +5,7 @@ const app = getApp<IAppOption>() @@ -5,7 +5,7 @@ const app = getApp<IAppOption>()
Page({
data: {
id: '',
patientInfo: {},
patientInfo: {} as any,
doctorAvatarListMore: false,
doctorAvatarList: [],
lastBindDoctorInfo: {},
@ -42,6 +42,18 @@ Page({ @@ -42,6 +42,18 @@ Page({
})
})
},
handleFile() {
const { patientInfo } = this.data
wx.navigateTo({
url: `/doctor/pages/file/index?id=${patientInfo.patientId}`,
})
},
handleCourse(e) {
const { period } = e.currentTarget.dataset
wx.navigateTo({
url: `/doctor/pages/course/index?id=${this.data.id}&current=${period}`,
})
},
handleBack() {
wx.navigateBack()
},

10
src/doctor/pages/patientDetail/index.wxml

@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
</view>
<view class="w-footer">
<view class="content">入组时间:{{patientInfo.createTimeName}}</view>
<view class="doc">
<view class="doc" bind:tap="handleFile">
查看档案
<van-icon name="arrow" />
</view>
@ -67,6 +67,8 @@ @@ -67,6 +67,8 @@
<view class="p-header">{{patientInfo.patientName}}的检查进展</view>
<view
class="card {{patientArchiveInfo.periodOneStatus==2 && 'current'}} {{patientArchiveInfo.periodOneStatus==2 && 'finish'}}"
bind:tap="handleCourse"
data-period="0"
>
<view class="c-aside">
<view class="line-top hide"></view>
@ -103,6 +105,8 @@ @@ -103,6 +105,8 @@
</view>
<view
class="card {{patientArchiveInfo.periodTwoStatus==2 && 'current'}} {{patientArchiveInfo.periodTwoStatus==2 && 'finish'}}"
bind:tap="handleCourse"
data-period="1"
>
<view class="c-aside">
<view class="line-top"></view>
@ -132,6 +136,8 @@ @@ -132,6 +136,8 @@
</view>
<view
class="card {{patientArchiveInfo.periodThreeStatus==2 && 'current'}} {{patientArchiveInfo.periodThreeStatus==2 && 'finish'}}"
bind:tap="handleCourse"
data-period="2"
>
<view class="c-aside">
<view class="line-top"></view>
@ -171,6 +177,8 @@ @@ -171,6 +177,8 @@
</view>
<view
class="card {{patientArchiveInfo.periodFourStatus==2 && 'current'}} {{patientArchiveInfo.periodFourStatus==2 && 'finish'}}"
bind:tap="handleCourse"
data-period="3"
>
<view class="c-aside">
<view class="line-top"></view>

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

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

483
src/doctor/pages/preDiagnosisReport/index.scss

@ -0,0 +1,483 @@ @@ -0,0 +1,483 @@
page {
background-color: rgba(247, 247, 250, 1);
}
.page-tip {
padding: 20rpx;
font-size: 28rpx;
color: rgba(255, 163, 112, 1);
line-height: 40rpx;
text-align: center;
background-color: rgba(255, 247, 232, 1);
}
.page {
padding: 32rpx 30rpx;
.date-form {
padding: 24rpx 32rpx;
background-color: #fff;
border-radius: 24rpx;
.title {
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);
}
.content {
margin-left: 32rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
}
}
.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(14, 209, 167, 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(28, 107, 255, 1);
}
.line-bottom,
.line-top {
background-color: rgba(28, 107, 255, 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: rgba(28, 107, 255, 1);
}
}
.icon {
width: 32rpx;
height: 32rpx;
transition: transform 0.3s;
&.turn {
transform: rotate(180deg);
}
}
}
.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(14, 209, 167, 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-input-area {
padding: 0 32rpx;
border-radius: 24rpx;
background-color: rgba(247, 247, 250, 1);
.m-input {
padding: 32rpx 0;
display: flex;
align-items: center;
gap: 32rpx;
border-bottom: 1px solid rgba(241, 241, 244, 1);
.label {
flex-shrink: 0;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
width: 7em;
.sub-label {
font-size: 20rpx;
}
}
.input {
width: 3em;
font-size: 32rpx;
height: 72rpx;
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;
}
}
.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;
}
}
.module9 {
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;
}
}
.module10 {
padding: 0 32rpx 32rpx;
.text-area {
padding: 24rpx 32rpx;
width: 100%;
height: 182rpx;
border-radius: 12rpx;
box-sizing: border-box;
background-color: rgba(247, 247, 250, 1);
}
.m-title {
margin-top: 48rpx;
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
}
.file-list {
margin-top: 24rpx;
}
}
}
}
}
}
}

224
src/doctor/pages/preDiagnosisReport/index.ts

@ -0,0 +1,224 @@ @@ -0,0 +1,224 @@
const app = getApp<IAppOption>()
Page({
data: {
popupShow: false,
popupType: 'preDiagnosisReportDate', // 确认绑定曾经扫码医生
popupParams: {},
fold1: true,
fold2: true,
fold3: true,
fold4: true,
fold5: true,
fold6: true,
fold7: true,
fold8: true,
fold9: true,
fold10: true,
// form
examId: '',
period: '1',
patientId: '',
beginDate: '',
endDate: '',
isBloodRoutine: 2,
isBiochemical: 2,
alt: '',
ast: '',
bilirubin: '',
isCFIxActivity: 2,
clottingFactor: '',
isCFIxInhibitor: 2,
cFII: '',
isHepatitisB: 2,
hbsAg: '',
hbvDNA: '',
isHepatitisC: 2,
hcvAntibody: '',
hcvRNA: '',
isHivAntibody: 2,
hiv: '',
isAfp: 2,
afp: '',
isAav: 2,
aav: '',
isOther: 2,
otherInfo: '',
attachmentList1: [],
attachmentList2: [],
attachmentList3: [],
attachmentList4: [],
attachmentList5: [],
attachmentList6: [],
attachmentList7: [],
attachmentList8: [],
attachmentList9: [],
attachmentList10: [],
formKeys: [
'beginDate',
'endDate',
'isBloodRoutine',
'isBiochemical',
'alt',
'ast',
'bilirubin',
'isCFIxActivity',
'clottingFactor',
'isCFIxInhibitor',
'cFII',
'isHepatitisB',
'hbsAg',
'hbvDNA',
'isHepatitisC',
'hcvAntibody',
'hcvRNA',
'isHivAntibody',
'hiv',
'isAfp',
'afp',
'isAav',
'aav',
'isOther',
'otherInfo',
],
checkNum: 0,
checkList: [
'isBloodRoutine',
'isBiochemical',
'isCFIxActivity',
'isCFIxInhibitor',
'isHepatitisB',
'isHepatitisC',
'isHivAntibody',
'isAfp',
'isAav',
'isOther',
],
dict: {
result: {},
number: {},
},
},
onLoad(options) {
this.setData({
examId: options.examid || '',
period: options.period || '1',
patientId: options.id || '',
})
if (options.period === '2') {
wx.setNavigationBarTitle({
title: '我的检查报告',
})
}
},
onShow() {
const { formKeys, period } = this.data
app.waitLogin().then(() => {
this.getDict()
this.getDetail()
})
},
handleInput(e) {
const { key, length } = e.currentTarget.dataset
const value = e.detail.value
this.setData({
[`${key}`]: this.validateInput(value, length),
})
},
validateInput(val, integerLimit) {
let num = val.toString()
// 清除“数字”和“.”以外的字符
num = num.replace(/[^\d.]/g, '')
// 只保留第一个.,清除多余的
num = num.replace(/\.{2,}/g, '.')
// 限制整数位位数
const index = num.indexOf('.')
if (index !== -1) {
num = num.slice(0, index + integerLimit + 1)
} else {
num = num.slice(0, integerLimit)
}
return num
},
getDict() {
wx.ajax({
method: 'GET',
url: '?r=wtx/treatment/get-dict',
data: {},
}).then((res) => {
this.setData({
dict: res,
})
})
},
getDetail() {
const { examId, formKeys } = this.data
if (!examId) return
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-exam-detail',
data: {
examId: examId,
patientId: this.data.patientId,
},
}).then((res) => {
const reset = formKeys.reduce((pre, cur) => {
pre[cur] = res[cur] || ''
return pre
}, {})
this.setData({
...reset,
attachmentList1: res.attachmentList[1] || [],
attachmentList2: res.attachmentList[2] || [],
attachmentList3: res.attachmentList[3] || [],
attachmentList4: res.attachmentList[4] || [],
attachmentList5: res.attachmentList[5] || [],
attachmentList6: res.attachmentList[6] || [],
attachmentList7: res.attachmentList[7] || [],
attachmentList8: res.attachmentList[8] || [],
attachmentList9: res.attachmentList[9] || [],
attachmentList10: res.attachmentList[10] || [],
})
this.getCheckNum()
})
},
handleToggleFold(e: any) {
const { fold } = e.currentTarget.dataset
this.setData({
[fold]: !this.data[fold],
})
},
handleToggleCheck(e: any) {
const { check, fold } = e.currentTarget.dataset
let foldValue = this.data[fold]
if (this.data[check] == 2 || !this.data[check]) {
foldValue = false
}
this.setData({
[check]: this.data[check] == 1 ? 2 : 1,
[fold]: foldValue,
})
this.getCheckNum()
},
getCheckNum() {
const { checkList } = this.data
let num = 0
checkList.forEach((item) => {
if (this.data[item] == 1) {
num += 1
}
})
this.setData({
checkNum: num,
})
},
})
export {}

557
src/doctor/pages/preDiagnosisReport/index.wxml

@ -0,0 +1,557 @@ @@ -0,0 +1,557 @@
<view class="page-tip">以下内容仅供参考,不作为任何临床诊断依据</view>
<view class="page">
<view class="date-form">
<view class="title">
<image class="icon" src="{{imageUrl}}icon110.png?t={{Timestamp}}"></image>
<view class="label">检查时间</view>
<view class="content" wx:if="{{beginDate && endDate}}">{{beginDate}}至{{endDate}}</view>
<view class="content" wx:else>--</view>
</view>
</view>
<view class="form">
<view class="form-header">
<view class="form-title">您的诊前检查项目</view>
<view class="order">
<view class="green">{{checkNum}}</view>
/
<view class="all">10</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isBloodRoutine==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold1">
<view class="title">血常规检查</view>
<image class="icon {{fold1 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isBloodRoutine==1 && 'active'}} {{isBloodRoutine==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isBloodRoutine"
data-fold="fold1"
>
{{isBloodRoutine==1?'已检查':'未检查'}}
</view>
</view>
<view class="content">重点检查项目:白细胞计数)WBC)血红蛋白(HGB)血小板计数(PLT)</view>
</view>
<view class="c-body {{fold1 && 'fold'}}">
<view class="module1">
<view class="m-title" wx:if="{{attachmentList1.length}}">请上传您的检查报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList1}}"
maxNum="{{9}}"
data-key="attachmentList1"
data-type="1"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isBiochemical==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold2">
<view class="title">生化检查</view>
<image class="icon {{fold2 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isBiochemical==1 && 'active'}} {{isBiochemical==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isBiochemical"
data-fold="fold2"
>
{{isBiochemical==1?'已检查':'未检查'}}
</view>
</view>
</view>
<view class="c-body {{fold2 && 'fold'}}">
<view class="module2">
<view class="m-input-area">
<view class="m-input">
<view class="label">
ALT
<view class="sub-label">丙氨酸氨基转移酶</view>
</view>
<input
disabled
bind:blur="updateSave"
type="digit"
bind:input="handleInput"
data-key="alt"
data-length="5"
value="{{alt}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">U/L</view>
</view>
<view class="m-input">
<view class="label">
AST
<view class="sub-label">天门冬氨酸氨基转移酶</view>
</view>
<input
disabled
bind:blur="updateSave"
type="digit"
bind:input="handleInput"
data-key="ast"
data-length="5"
value="{{ast}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">U/L</view>
</view>
<view class="m-input">
<view class="label">总胆红素</view>
<input
disabled
bind:blur="updateSave"
type="digit"
bind:input="handleInput"
data-key="bilirubin"
data-length="4"
value="{{bilirubin}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">μmol/L</view>
</view>
</view>
<view class="m-title" wx:if="{{attachmentList2.length}}">请上传您的检查报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList2}}"
maxNum="{{9}}"
data-key="attachmentList2"
data-type="2"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isCFIxActivity==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold3">
<view class="title">凝血因子 IX 活性</view>
<image class="icon {{fold3 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isCFIxActivity==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isCFIxActivity"
data-fold="fold3"
>
{{isCFIxActivity==1?'已检查':'未检查'}}
</view>
</view>
</view>
<view class="c-body {{fold3 && 'fold'}}">
<view class="module3">
<view class="m-input">
<view class="label">您的凝血因子水平</view>
<input
disabled
bind:blur="updateSave"
type="digit"
bind:input="handleInput"
data-key="clottingFactor"
data-length="3"
value="{{clottingFactor}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">%</view>
</view>
<view class="m-title" wx:if="{{attachmentList3.length}}">请上传您的检查报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList3}}"
maxNum="{{9}}"
data-key="attachmentList3"
data-type="3"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isCFIxInhibitor==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold4">
<view class="title">凝血因子 IX 抑制物检测</view>
<image class="icon {{fold4 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isCFIxInhibitor==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isCFIxInhibitor"
data-fold="fold4"
>
{{isCFIxInhibitor==1?'已检查':'未检查'}}
</view>
</view>
</view>
<view class="c-body {{fold4 && 'fold'}}">
<view class="module4">
<view class="m-select">
<view class="m-item {{cFII==index && 'active'}}" wx:for="{{dict.result}}" wx:key="index">{{item}}</view>
</view>
<view class="m-title" wx:if="{{attachmentList4.length}}">可上传您的抑制物检查结果</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList4}}"
maxNum="{{9}}"
data-key="attachmentList4"
data-type="4"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isHepatitisB==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold5">
<view class="title">乙型肝炎相关检查</view>
<image class="icon {{fold5 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isHepatitisB==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isHepatitisB"
data-fold="fold5"
>
{{isHepatitisB==1?'已检查':'未检查'}}
</view>
</view>
</view>
<view class="c-body {{fold5 && 'fold'}}">
<view class="module5">
<view class="m-select-title">乙型肝炎病毒表面抗原(HBsAg)</view>
<view class="m-select">
<view class="m-item {{hbsAg==index && 'active'}}" wx:for="{{dict.result}}" wx:key="index">{{item}}</view>
</view>
<view class="m-select-title" style="margin-top: 48rpx">乙型肝炎病毒脱氧核糖核酸(HBV - DNA)</view>
<view class="m-select">
<view class="m-item {{hbvDNA==index && 'active'}}" wx:for="{{dict.number}}" wx:key="index">{{item}}</view>
</view>
<view class="m-title" wx:if="{{attachmentList5.length}}">请上传乙型肝炎检查报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList5}}"
maxNum="{{9}}"
data-key="attachmentList5"
data-type="5"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isHepatitisC==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold6">
<view class="title">丙型肝炎相关检查</view>
<image class="icon {{fold6 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isHepatitisC==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isHepatitisC"
data-fold="fold6"
>
{{isHepatitisC==1?'已检查':'未检查'}}
</view>
</view>
</view>
<view class="c-body {{fold6 && 'fold'}}">
<view class="module6">
<view class="m-select-title">丙型肝炎病毒抗体(抗 - HCV)</view>
<view class="m-select">
<view class="m-item {{hcvAntibody==index && 'active'}}" wx:for="{{dict.result}}" wx:key="index">
{{item}}
</view>
</view>
<view class="m-select-title" style="margin-top: 48rpx">丙型肝炎病毒核糖核酸(HCV - RNA)</view>
<view class="m-select">
<view class="m-item {{hcvRNA==index && 'active'}}" wx:for="{{dict.result}}" wx:key="index">{{item}}</view>
</view>
<view class="m-title" wx:if="{{attachmentList6.length}}">请上传丙型肝炎检查报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList6}}"
maxNum="{{9}}"
data-key="attachmentList6"
data-type="6"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isHivAntibody==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold7">
<view class="title">HIV抗体</view>
<image class="icon {{fold7 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isHivAntibody==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isHivAntibody"
data-fold="fold7"
>
{{isHivAntibody==1?'已检查':'未检查'}}
</view>
</view>
<view class="content">类免疫缺陷病毒抗体(HIV - Ab)</view>
</view>
<view class="c-body {{fold7 && 'fold'}}">
<view class="module7">
<view class="m-select-title">填选您的HIV检查结果</view>
<view class="m-select">
<view class="m-item {{hiv==index && 'active'}}" wx:for="{{dict.result}}" wx:key="index">{{item}}</view>
</view>
<view class="m-title" wx:if="{{attachmentList7.length}}">提交您的HIV检测报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList7}}"
maxNum="{{9}}"
data-key="attachmentList7"
data-type="7"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isAfp==1 && 'active'}}">
<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" bind:tap="handleToggleFold" data-fold="fold8">
<view class="title">甲胎蛋白(AFP)检测</view>
<image class="icon {{fold8 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isAfp==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isAfp"
data-fold="fold8"
>
{{isAfp==1?'已检查':'未检查'}}
</view>
</view>
</view>
<view class="c-body {{fold8 && 'fold'}}">
<view class="module8">
<view class="m-input">
<view class="label">您的(AFP)检测</view>
<input
disabled
bind:blur="updateSave"
type="digit"
bind:input="handleInput"
data-key="afp"
data-length="3"
value="{{afp}}"
placeholder="--"
class="input"
placeholder-class="place-input"
/>
<view class="sub">μg/L</view>
</view>
<view class="m-title" wx:if="{{attachmentList8.length}}">提交您的AFP 检测报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList8}}"
maxNum="{{9}}"
data-key="attachmentList8"
data-type="8"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isAav==1 && 'active'}}">
<view class="line-top"></view>
<view class="order">9</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left" bind:tap="handleToggleFold" data-fold="fold9">
<view class="title">AAV 抗体检查</view>
<image class="icon {{fold9 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isAav==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isAav"
data-fold="fold9"
>
{{isAav==1?'已检查':'未检查'}}
</view>
</view>
<view class="content">提交您的AAV抗体检查报告</view>
</view>
<view class="c-body {{fold9 && 'fold'}}">
<view class="module9">
<view class="m-select-title">填选您的AAV检查结果</view>
<view class="m-select">
<view class="m-item {{aav==index && 'active'}}" wx:for="{{dict.result}}" wx:key="index">{{item}}</view>
</view>
<view class="m-title" wx:if="{{attachmentList9.length}}">提交您的AAV检测报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList9}}"
maxNum="{{9}}"
data-key="attachmentList9"
data-type="9"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
<view class="form-card">
<view class="aside {{isOther==1 && 'active'}}">
<view class="line-top"></view>
<view class="order" style="font-size: 24rpx">10</view>
<view class="line-bottom"></view>
</view>
<view class="container">
<view class="c-header">
<view class="wrap">
<view class="left" bind:tap="handleToggleFold" data-fold="fold10">
<view class="title">其他检查</view>
<image class="icon {{fold10 && 'turn'}}" src="{{imageUrl}}icon63.png?t={{Timestamp}}"></image>
</view>
<view
class="status {{isOther==1 && 'active'}}"
catch:tap="handleToggleCheck"
data-check="isOther"
data-fold="fold10"
>
{{isOther==1?'已检查':'未检查'}}
</view>
</view>
<view class="content">您的其他项检查</view>
</view>
<view class="c-body {{fold10 && 'fold'}}">
<view class="module10">
<textarea
disabled
class="text-area"
model:value="{{otherInfo}}"
placeholder="--"
disable-default-padding
></textarea>
<view class="m-title" wx:if="{{attachmentList10.length}}">提交您的检测报告</view>
<view class="file-list">
<uploadFile
upload="{{false}}"
delete="{{false}}"
fileList="{{attachmentList10}}"
maxNum="{{9}}"
data-key="attachmentList10"
data-type="10"
></uploadFile>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<popup
show="{{popupShow}}"
type="{{popupType}}"
params="{{popupParams}}"
bind:ok="handlePopupOk"
bind:cancel="handlePopupCancel"
></popup>

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

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{
"navigationBarTitleText": "我的复诊记录",
"usingComponents": {}
}

43
src/doctor/pages/revisitRecord/index.scss

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
.list {
padding: 32rpx 40rpx;
.total {
font-size: 32rpx;
color: rgba(1, 1, 5, 1);
.red {
color: rgba(28, 107, 255, 1);
font-size: 40rpx;
}
}
.list-card {
padding: 16rpx 0;
margin-top: 24rpx;
background: linear-gradient( 349deg, #FFFFFF 0%, #F1F6FF 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
.item {
padding: 16rpx 32rpx;
display: flex;
.item-title {
width: 5em;
font-size: 32rpx;
color: rgba(161, 164, 172, 1);
}
.item-content {
color: rgba(1, 1, 5, 1);
}
}
}
.add {
position: fixed;
left: 50%;
bottom: 142rpx;
transform: translateX(-50%);
width: 156rpx;
height: 156rpx;
}
}
}

64
src/doctor/pages/revisitRecord/index.ts

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
const app = getApp<IAppOption>()
Page({
data: {
list: [],
pagination: {
page: 1,
pages: 1,
count: 1,
},
patientId: '',
examId: '',
period: '1',
},
onLoad(options) {
this.setData({
examId: options.examid || '',
period: options.period || '1',
patientId: options.id || '',
})
},
onShow() {
app.waitLogin({ type: 2 }).then(() => {
this.getList()
})
},
getList(newPage = 1) {
wx.ajax({
method: 'GET',
url: '?r=wtx/doctor/treatment/get-exam-list',
data: {
page: newPage,
period: 4,
patientId: this.data.patientId,
},
}).then((res) => {
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 { id } = e.currentTarget.dataset
wx.navigateTo({
url: `/doctor/pages/lastDiagnosisReport/index?period=${this.data.period}&examid=${id}&edit=1&id=${this.data.patientId}`,
})
},
})
export {}

27
src/doctor/pages/revisitRecord/index.wxml

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
<view class="page">
<view class="list">
<view class="total" wx:if="{{pagination.count>0}}">
随访次数:
<text class="red">{{pagination.count}}</text>
</view>
<view class="list-card" wx:for="{{list}}" wx:key="examId" bind:tap="handleEdit" data-id="{{item.examId}}">
<view class="item">
<view class="item-title">日期</view>
<view class="item-content">
<block wx:if="{{item.beginDate && item.endDate}}">{{item.beginDate}}-{{item.endDate}}</block>
<block wx:else>---</block>
</view>
</view>
<view class="item">
<view class="item-title">诊疗医院</view>
<view class="item-content">{{item.hospitalName || '---'}}</view>
</view>
<view class="item">
<view class="item-title">检查项目</view>
<view class="item-content">{{item.totalNum}}/{{item.allNum}}</view>
</view>
</view>
<pagination pagination="{{pagination}}"></pagination>
</view>
</view>

BIN
src/images/bg25.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

BIN
src/images/bg26.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
src/images/icon107.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/images/icon108.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/images/icon109.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1017 B

BIN
src/images/icon110.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

2
src/patient/pages/bbmRemark/index.ts

@ -6,7 +6,7 @@ Page({ @@ -6,7 +6,7 @@ Page({
injectionRemark: '',
},
onLoad() {
app.waitLogin().then(() => {
app.waitLogin({ type: 1 }).then(() => {
this.getDetail()
})
},

2
src/patient/pages/bbmReport/index.ts

@ -10,7 +10,7 @@ Page({ @@ -10,7 +10,7 @@ Page({
injectionNum: '',
},
onLoad() {
app.waitLogin().then(() => {
app.waitLogin({ type: 1 }).then(() => {
this.getDetail()
})
},

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

@ -60,7 +60,7 @@ Page({ @@ -60,7 +60,7 @@ Page({
})
},
onShow() {
app.waitLogin().then(() => {
app.waitLogin({ type: 1 }).then(() => {
this.getDict()
this.getDetail()
})

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

@ -210,7 +210,7 @@ @@ -210,7 +210,7 @@
disable-default-padding
bind:blur="updateSave"
></textarea>
<view class="m-title">提交您的检测报告</view>
<view class="m-title">提交您的检测报告</view>
<view class="file-list">
<uploadFile
bind:setData="setFile"

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

@ -455,7 +455,7 @@ @@ -455,7 +455,7 @@
{{item}}
</view>
</view>
<view class="m-title">提交您的HIV检测报告</view>
<view class="m-title">提交您的HIV检测报告</view>
<view class="file-list">
<uploadFile
bind:setData="setFile"
@ -512,7 +512,7 @@ @@ -512,7 +512,7 @@
/>
<view class="sub">μg/L</view>
</view>
<view class="m-title">提交您的AFP 检测报告</view>
<view class="m-title">提交您的AFP 检测报告</view>
<view class="file-list">
<uploadFile
bind:setData="setFile"
@ -568,7 +568,7 @@ @@ -568,7 +568,7 @@
{{item}}
</view>
</view>
<view class="m-title">提交您的AAV检测报告</view>
<view class="m-title">提交您的AAV检测报告</view>
<view class="file-list">
<uploadFile
bind:setData="setFile"
@ -617,7 +617,7 @@ @@ -617,7 +617,7 @@
placeholder="您做了哪些其他检查?"
disable-default-padding
></textarea>
<view class="m-title">提交您的检测报告</view>
<view class="m-title">提交您的检测报告</view>
<view class="file-list">
<uploadFile
bind:setData="setFile"

Loading…
Cancel
Save