Browse Source

激素联调

dev
kola-web 2 months ago
parent
commit
853c69aa7b
  1. 1
      .gitignore
  2. 14
      README.md
  3. 28
      project.private.config.json
  4. 13
      src/app.json
  5. 58
      src/pages/d_patientDetail/index.scss
  6. 210
      src/pages/d_patientDetail/index.ts
  7. 27
      src/pages/d_patientDetail/index.wxml
  8. 23
      src/pages/d_patientHormones/index.ts
  9. 23
      src/pages/d_patientHormones/index.wxml
  10. 6
      src/patient/pages/adl/index.json
  11. 223
      src/patient/pages/adl/index.scss
  12. 110
      src/patient/pages/adl/index.ts
  13. 74
      src/patient/pages/adl/index.wxml
  14. 8
      src/patient/pages/adlResult/index.json
  15. 614
      src/patient/pages/adlResult/index.scss
  16. 272
      src/patient/pages/adlResult/index.ts
  17. 371
      src/patient/pages/adlResult/index.wxml
  18. 7
      src/patient/pages/adlShare/index.json
  19. 35
      src/patient/pages/adlShare/index.scss
  20. 134
      src/patient/pages/adlShare/index.ts
  21. 14
      src/patient/pages/adlShare/index.wxml
  22. 11
      src/patient/pages/adlTest/index.json
  23. 334
      src/patient/pages/adlTest/index.scss
  24. 412
      src/patient/pages/adlTest/index.ts
  25. 101
      src/patient/pages/adlTest/index.wxml
  26. 75
      src/patient/pages/doctorDetail/index.ts
  27. 5
      src/patient/pages/hormones/index.json
  28. 257
      src/patient/pages/hormones/index.scss
  29. 211
      src/patient/pages/hormones/index.ts
  30. 307
      src/patient/pages/hormones/index.wxml
  31. 12
      src/patient/pages/hormonesResult/index.scss
  32. 39
      src/patient/pages/hormonesResult/index.ts
  33. 47
      src/patient/pages/hormonesResult/index.wxml
  34. 34
      src/patient/pages/index/index.scss
  35. 18
      src/patient/pages/index/index.ts
  36. 16
      src/patient/pages/index/index.wxml
  37. 13
      src/patient/pages/nrdl/index.json
  38. 286
      src/patient/pages/nrdl/index.scss
  39. 446
      src/patient/pages/nrdl/index.ts
  40. 248
      src/patient/pages/nrdl/index.wxml
  41. 7
      src/patient/pages/nrdlDetail/index.json
  42. 10
      src/patient/pages/nrdlDetail/index.scss
  43. 94
      src/patient/pages/nrdlDetail/index.ts
  44. 21
      src/patient/pages/nrdlDetail/index.wxml
  45. 7
      src/patient/pages/nrdlTable/index.json
  46. 63
      src/patient/pages/nrdlTable/index.scss
  47. 876
      src/patient/pages/nrdlTable/index.ts
  48. 29
      src/patient/pages/nrdlTable/index.wxml
  49. 71
      src/patient/pages/qolReport/index.scss
  50. 173
      src/patient/pages/qolReport/index.ts
  51. 68
      src/patient/pages/qolReport/index.wxml

1
.gitignore vendored

@ -1,4 +1,5 @@
node_modules node_modules
src/images/.svn src/images/.svn
src/images/
.idea .idea
.DS_Store .DS_Store

14
README.md

@ -11,11 +11,13 @@ svn://39.106.86.127:28386/projects/xd/proj_src/shop/frontend/web/xd
svn://39.106.86.127:28386/projects/xd/proj_src/branches/dev_v2.0/shop/frontend/web/xd/ svn://39.106.86.127:28386/projects/xd/proj_src/branches/dev_v2.0/shop/frontend/web/xd/
## vscode ## vscode
(/images/)(\S*(?=["|']))
(/images/)(\S\*(?=["|']))
{{imageUrl}}$2?t={{Timestamp}} {{imageUrl}}$2?t={{Timestamp}}
## neovim ## neovim
(/images/)([^\"|']*)
(/images/)([^\"|']\*)
{{imageUrl}}$2?t={{Timestamp}} {{imageUrl}}$2?t={{Timestamp}}
ui问题 ui问题
@ -34,3 +36,11 @@ wx.showModal({
审核账号 审核账号
18910233000 1111 18910233000 1111
正整数 3
正整数 2
正整数 4
正整数 2
正整数 3

28
project.private.config.json

@ -23,6 +23,34 @@
"miniprogram": { "miniprogram": {
"list": [ "list": [
{ {
"name": "patient/pages/hormonesResult/index",
"pathName": "patient/pages/hormonesResult/index",
"query": "medicationMethod=1&oralMonth=2&injectionWeek=0&injectionTimes=0&dosage=5",
"scene": null,
"launchMode": "default"
},
{
"name": "医生-激素用药详情",
"pathName": "pages/d_patientHormones/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "激素量表-结果页",
"pathName": "patient/pages/hormonesResult/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "激素量表",
"pathName": "patient/pages/hormones/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "药房", "name": "药房",
"pathName": "gift/pages/dtpDurg/index", "pathName": "gift/pages/dtpDurg/index",
"query": "id=10", "query": "id=10",

13
src/app.json

@ -14,7 +14,8 @@
"pages/d_patientDetail/index", "pages/d_patientDetail/index",
"pages/d_userInfo/index", "pages/d_userInfo/index",
"pages/d_invite/index", "pages/d_invite/index",
"pages/d_patient/index" "pages/d_patient/index",
"pages/d_patientHormones/index"
], ],
"subPackages": [ "subPackages": [
{ {
@ -52,10 +53,6 @@
"pages/liveResult/index", "pages/liveResult/index",
"pages/liveDetailVideo/index", "pages/liveDetailVideo/index",
"pages/signIn/index", "pages/signIn/index",
"pages/adl/index",
"pages/adlShare/index",
"pages/adlTest/index",
"pages/adlResult/index",
"pages/smallPage/index", "pages/smallPage/index",
"pages/hospital/index", "pages/hospital/index",
"pages/doctor/index", "pages/doctor/index",
@ -63,16 +60,14 @@
"pages/drugRecord/index", "pages/drugRecord/index",
"pages/comIns/index", "pages/comIns/index",
"pages/webview/index", "pages/webview/index",
"pages/nrdl/index",
"pages/nrdlDetail/index",
"pages/infusionCenter/index", "pages/infusionCenter/index",
"pages/nrdlTable/index",
"pages/interactivePatient/index", "pages/interactivePatient/index",
"pages/qol/index", "pages/qol/index",
"pages/qolAdd/index", "pages/qolAdd/index",
"pages/qolResult/index", "pages/qolResult/index",
"pages/qolReport/index", "pages/qolReport/index",
"pages/hormones/index" "pages/hormones/index",
"pages/hormonesResult/index"
] ]
}, },
{ {

58
src/pages/d_patientDetail/index.scss

@ -5,6 +5,7 @@ page {
width: 100vw; width: 100vw;
overflow-x: hidden; overflow-x: hidden;
min-height: 100vh; min-height: 100vh;
padding-bottom: 220rpx;
.banner { .banner {
margin: 40rpx 30rpx 0; margin: 40rpx 30rpx 0;
padding: 0 20rpx; padding: 0 20rpx;
@ -410,8 +411,8 @@ page {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 32rpx; font-size: 32rpx;
color: #69686E; color: #69686e;
background-color: #FFFFFF; background-color: #ffffff;
border-radius: 34rpx; border-radius: 34rpx;
.icon { .icon {
width: 24rpx; width: 24rpx;
@ -423,9 +424,9 @@ page {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 32rpx; font-size: 32rpx;
color: #69686E; color: #69686e;
border-radius: 34rpx; border-radius: 34rpx;
background-color: #FFFFFF; background-color: #ffffff;
.icon { .icon {
width: 24rpx; width: 24rpx;
height: 24rpx; height: 24rpx;
@ -437,16 +438,65 @@ page {
padding: 32rpx; padding: 32rpx;
background-color: #fff; background-color: #fff;
border-radius: 24rpx; border-radius: 24rpx;
&.chart-card-legend {
.chart {
padding-top: 40rpx;
}
}
.title { .title {
font-size: 32rpx; font-size: 32rpx;
color: #211d2e; color: #211d2e;
font-weight: bold; font-weight: bold;
} }
.chart { .chart {
position: relative;
height: 420rpx; height: 420rpx;
.legend {
position: absolute;
top: 0;
right: 0;
display: flex;
align-items: center;
gap: 12rpx;
justify-content: flex-end;
.dot {
width: 18rpx;
height: 18rpx;
border-radius: 50%;
&.dot4 {
background-color: #1ec580;
}
&.dot5 {
background-color: #b982ff;
}
&.dot6 {
background-color: #ffa300;
}
} }
} }
} }
}
}
}
.page-footer {
position: fixed;
bottom: 0;
left: 0;
z-index: 10;
width: 100%;
padding: 20rpx 40rpx calc(env(safe-area-inset-bottom) + 20rpx);
box-sizing: border-box;
background-color: #fff;
.pf-btn {
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #ffffff;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
} }
.popup-remark { .popup-remark {

210
src/pages/d_patientDetail/index.ts

@ -165,11 +165,17 @@ Page({
chartComponent1: null as any, chartComponent1: null as any,
chartComponent2: null as any, chartComponent2: null as any,
chartComponent3: null as any, chartComponent3: null as any,
chartComponent4: null as any,
chartComponent5: null as any,
chartComponent6: null as any,
async onLoad(option) { async onLoad(option) {
echarts = await require.async('../../gift/compontnts/echart/echarts.js') echarts = await require.async('../../gift/compontnts/echart/echarts.js')
this.chartComponent1 = this.selectComponent('#chart1') this.chartComponent1 = this.selectComponent('#chart1')
this.chartComponent2 = this.selectComponent('#chart2') this.chartComponent2 = this.selectComponent('#chart2')
this.chartComponent3 = this.selectComponent('#chart3') this.chartComponent3 = this.selectComponent('#chart3')
this.chartComponent4 = this.selectComponent('#chart4')
this.chartComponent5 = this.selectComponent('#chart5')
this.chartComponent6 = this.selectComponent('#chart6')
this.setData({ this.setData({
id: option.id, id: option.id,
}) })
@ -210,8 +216,8 @@ Page({
res.LastAdlTimeName = dayjs(res.LastAdlTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', '') res.LastAdlTimeName = dayjs(res.LastAdlTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', '')
} }
if (res.LastUseDrugsTime) { if (res.LastUseDrugsTime) {
res.LastUseDrugsTimeName = res.LastUseDrugsTimeName
dayjs().format('YYYY-MM-DD') === res.LastUseDrugsTime = dayjs().format('YYYY-MM-DD') === res.LastUseDrugsTime
? '' ? ''
: dayjs(res.LastUseDrugsTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', '') : dayjs(res.LastUseDrugsTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', '')
} }
@ -240,10 +246,12 @@ Page({
if (type === '1') { if (type === '1') {
EndDate = dayjs().format('YYYY-MM-DD') EndDate = dayjs().format('YYYY-MM-DD')
StartDate = dayjs().subtract(6, 'd').format('YYYY-MM-DD') StartDate = dayjs().subtract(6, 'd').format('YYYY-MM-DD')
} else if (type === '2') { }
else if (type === '2') {
EndDate = dayjs().format('YYYY-MM') EndDate = dayjs().format('YYYY-MM')
StartDate = dayjs().subtract(1, 'M').format('YYYY-MM') StartDate = dayjs().subtract(1, 'M').format('YYYY-MM')
} else if (type === '3') { }
else if (type === '3') {
EndDate = dayjs().format('YYYY') EndDate = dayjs().format('YYYY')
StartDate = dayjs().subtract(1, 'y').format('YYYY') StartDate = dayjs().subtract(1, 'y').format('YYYY')
} }
@ -254,6 +262,7 @@ Page({
StartDate, StartDate,
}) })
this.getGraph() this.getGraph()
this.getHormoneData()
}, },
getGraph() { getGraph() {
const { type, StartDate, EndDate } = this.data const { type, StartDate, EndDate } = this.data
@ -262,8 +271,8 @@ Page({
url: '?r=xd/doctor/qol/graph', url: '?r=xd/doctor/qol/graph',
data: { data: {
DateType: type, DateType: type,
StartDate: StartDate, StartDate,
EndDate: EndDate, EndDate,
count: 0, count: 0,
PatientId: this.data.id, PatientId: this.data.id,
}, },
@ -291,6 +300,42 @@ Page({
this.initChart(list2, 'chartComponent3') this.initChart(list2, 'chartComponent3')
}) })
}, },
getHormoneData() {
const { type, StartDate, EndDate } = this.data
wx.ajax({
method: 'GET',
url: '?r=xd/doctor/hormone-dosage/graph',
data: {
DateType: type,
StartDate,
EndDate,
PatientId: this.data.id,
count: 0,
},
}).then((res) => {
const list4: any[] = []
const list5: any[] = []
const list6: any[] = []
res.forEach((item: any) => {
list4.push({
Date: item.recordDate,
value: item.medicationMethod == 1 ? item.dosage : '',
})
list5.push({
Date: item.recordDate,
value: item.medicationMethod == 2 ? item.dosage : '',
})
list6.push({
Date: item.recordDate,
value: item.medicationMethod == 3 ? item.dosage : '',
})
})
this.initChartHormone(list4, 'chartComponent4', '#1ec580')
this.initChartHormone(list5, 'chartComponent5', '#B982FF')
this.initChartHormone(list6, 'chartComponent6', '#FFA300')
})
},
initChart(defaultList = [] as any[], key) { initChart(defaultList = [] as any[], key) {
return new Promise((reslove) => { return new Promise((reslove) => {
this[key].init((canvas, width, height, dpr) => { this[key].init((canvas, width, height, dpr) => {
@ -352,7 +397,7 @@ Page({
color: 'rgba(137, 141, 151, 0.23)', color: 'rgba(137, 141, 151, 0.23)',
}, },
}, },
data: defaultList.map((item) => dayjs(item.Date).format('MM-DD')), data: defaultList.map(item => dayjs(item.Date).format('MM-DD')),
}, },
], ],
yAxis: [ yAxis: [
@ -380,7 +425,7 @@ Page({
series: [ series: [
{ {
name: '总分', name: '总分',
data: defaultList.length ? defaultList.map((item) => item.value) : [25], data: defaultList.length ? defaultList.map(item => item.value) : [25],
barWidth: '16', barWidth: '16',
label: { label: {
show: true, show: true,
@ -446,6 +491,127 @@ Page({
}) })
}) })
}, },
initChartHormone(defaultList = [] as any[], key, color) {
return new Promise((reslove) => {
this[key].init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const option: any = {
tooltip: {
show: false,
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
confine: true,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
textStyle: {
color: '#fff',
fontSize: 10,
},
order: 'seriesDesc',
},
grid: {
top: '30',
left: '0',
right: '0',
bottom: '10',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
inside: true,
length: 1,
alignWithLabel: true,
lineStyle: {
type: 'dotted',
color: '#D8D8D8',
width: 4,
cap: 'round',
},
},
axisLine: {
lineStyle: {
color: '#8C8C8C',
type: 'dashed',
},
},
splitLine: {
show: true,
showMinLine: false,
lineStyle: {
type: 'dotted',
color: 'rgba(137, 141, 151, 0.23)',
},
},
data: defaultList.map(item => dayjs(item.Date).format('MM-DD')),
},
],
yAxis: [
{
type: 'value',
minInterval: 20,
min: 0,
axisLine: {
show: false,
lineStyle: {
type: 'solid',
color: 'rgba(161, 164, 172, 1)',
},
},
splitLine: {
show: true,
showMinLine: false,
lineStyle: {
type: 'dotted',
color: 'rgba(137, 141, 151, 0.23)',
},
},
},
],
series: [
{
name: '总分',
data: defaultList.length ? defaultList.map(item => item.value) : [25],
barWidth: '16',
label: {
show: true,
position: 'top',
color,
fontSize: 14,
},
type: 'line',
symbolSize: 4,
showSymbol: defaultList.length >= 1,
connectNulls: true,
z: 10,
itemStyle: {
color,
},
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: 0,
endValue: 4,
filterMode: 'none',
},
}
chart.setOption(option)
reslove(chart)
return chart
})
})
},
handleRemark() { handleRemark() {
this.setData({ this.setData({
popupRemarkShow: true, popupRemarkShow: true,
@ -510,12 +676,12 @@ Page({
method: 'POST', method: 'POST',
url: '?r=zd/doctor/patient/update', url: '?r=zd/doctor/patient/update',
data: { data: {
PatientId: detail.PatientId, //患者Id PatientId: detail.PatientId, // 患者Id
AntibodyType: detail.AntibodyType, //抗体类型 1:AChR 2:Musk 3:LRP4 4:RYR AntibodyType: detail.AntibodyType, // 抗体类型 1:AChR 2:Musk 3:LRP4 4:RYR
ThyroidAbnormal: detail.ThyroidAbnormal, //胸腺异常 1:是 2:否 ThyroidAbnormal: detail.ThyroidAbnormal, // 胸腺异常 1:是 2:否
PreviousConvulsion: detail.PreviousConvulsion, //既往发生危象 1:是 2:否 PreviousConvulsion: detail.PreviousConvulsion, // 既往发生危象 1:是 2:否
TraditionalImmunosuppressant: detail.TraditionalImmunosuppressant, //传统免疫抑制剂 1:特克莫苏 2:硫唑嘌呤 3:马替麦考酚酯 4:其他 TraditionalImmunosuppressant: detail.TraditionalImmunosuppressant, // 传统免疫抑制剂 1:特克莫苏 2:硫唑嘌呤 3:马替麦考酚酯 4:其他
MedicalInsuranceType: detail.MedicalInsuranceType, //医保类型 1:城市职工 2:城市居民 3:新农合 MedicalInsuranceType: detail.MedicalInsuranceType, // 医保类型 1:城市职工 2:城市居民 3:新农合
}, },
}).then(() => { }).then(() => {
wx.showToast({ wx.showToast({
@ -552,9 +718,11 @@ Page({
let grade = 1 let grade = 1
if (item.TotalScore < 5) { if (item.TotalScore < 5) {
grade = 1 grade = 1
} else if (item.TotalScore >= 5 && item.TotalScore < 15) { }
else if (item.TotalScore >= 5 && item.TotalScore < 15) {
grade = 2 grade = 2
} else { }
else {
grade = 3 grade = 3
} }
item.grade = grade item.grade = grade
@ -589,7 +757,6 @@ Page({
wx.navigateBack() wx.navigateBack()
}, },
handleToggleTel() { handleToggleTel() {
console.log(11111)
this.setData({ this.setData({
showTel: !this.data.showTel, showTel: !this.data.showTel,
}) })
@ -600,9 +767,9 @@ Page({
method: 'POST', method: 'POST',
url: '?r=zd/doctor/patient/set-edc', url: '?r=zd/doctor/patient/set-edc',
data: { patientId: this.data.detail.PatientId }, data: { patientId: this.data.detail.PatientId },
}).then((res) => { }).then(() => {
this.setData({ this.setData({
['detail.IsEDC']: this.data.detail.IsEDC == 1 ? 2 : 1, 'detail.IsEDC': this.data.detail.IsEDC == 1 ? 2 : 1,
}) })
wx.showToast({ wx.showToast({
icon: 'none', icon: 'none',
@ -610,4 +777,9 @@ Page({
}) })
}) })
}, },
handleHormones() {
wx.navigateTo({
url: `/pages/d_patientHormones/index?id=${this.data.detail.PatientId}&name=${this.data.detail.Name}`,
})
},
}) })

27
src/pages/d_patientDetail/index.wxml

@ -110,7 +110,34 @@
<ec-canvas id="chart3" ec="{{ ec }}"></ec-canvas> <ec-canvas id="chart3" ec="{{ ec }}"></ec-canvas>
</view> </view>
</view> </view>
<view class="chart-card chart-card-legend">
<view class="title">我的激素周用量记录曲线</view>
<view class="chart">
<view class="legend">
<view class="dot dot4"></view>
口服
</view>
<ec-canvas id="chart4" ec="{{ ec }}"></ec-canvas>
</view>
<view class="chart">
<view class="legend">
<view class="dot dot5"></view>
大剂量冲击治疗
</view>
<ec-canvas id="chart5" ec="{{ ec }}"></ec-canvas>
</view> </view>
<view class="chart">
<view class="legend">
<view class="dot dot6"></view>
眶内或眼睑局部注射
</view>
<ec-canvas id="chart6" ec="{{ ec }}"></ec-canvas>
</view>
</view>
</view>
</view>
<view class="page-footer" wx:if="{{detail.Name}}">
<view class="pf-btn" bind:tap="handleHormones">查看激素用药详情</view>
</view> </view>
<van-popup <van-popup

23
src/pages/d_patientHormones/index.ts

@ -1,24 +1,31 @@
const _app = getApp<IAppOption>() const app = getApp<IAppOption>()
Page({ Page({
data: { data: {
list: [ id: '',
{ name: '',
date: '2025-09-02', list: [],
},
],
pagination: { pagination: {
page: 1, page: 1,
pages: 1, pages: 1,
count: 1, count: 1,
}, },
}, },
onLoad() {}, onLoad(options) {
app.waitLogin({ type: [2] }).then(async (_res) => {
this.setData({
id: options.id,
name: options.name,
})
this.getList()
})
},
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=xd/qol/list', url: '?r=xd/doctor/hormone-dosage/list',
data: { data: {
patientId: this.data.id,
page: newPage, page: newPage,
}, },
}).then((res) => { }).then((res) => {

23
src/pages/d_patientHormones/index.wxml

@ -1,6 +1,6 @@
<view class="page"> <view class="page">
<view class="list"> <view class="list">
<view class="list-title">xxx的激素用药详情</view> <view class="list-title">{{name}}的激素用药详情</view>
<view class="list-container"> <view class="list-container">
<view <view
class="row {{item.TotalScore>=0 && 'status1'}} {{item.TotalScore>=40 && 'status2'}} {{item.TotalScore>=80 && 'status3'}}" class="row {{item.TotalScore>=0 && 'status1'}} {{item.TotalScore>=40 && 'status2'}} {{item.TotalScore>=80 && 'status3'}}"
@ -17,22 +17,31 @@
<view class="line"></view> <view class="line"></view>
</view> </view>
<view class="r-container"> <view class="r-container">
<view class="date">{{item.date}}</view> <view class="date">{{item.recordDate}}</view>
<view class="r-card-hormones"> <view class="r-card-hormones">
<view class="rch-row"> <view class="rch-row">
<view class="col"> <view class="col">
<view class="title">最近一周激素治疗方式</view> <view class="title">最近一周激素治疗方式</view>
<view class="content">口服</view> <view class="content">{{item.medicationMethodName}}</view>
</view> </view>
<view class="line"></view> <view class="line"></view>
<view class="col"> <view class="col">
<view class="title">每日用药量</view> <view class="title">每日用药量</view>
<view class="content">30mg</view> <view class="content">{{item.dosage}}mg</view>
</view> </view>
</view> </view>
<view class="rch-footer">
<view class="name">已进行的治疗疗程</view> <view class="rch-footer" wx:if="{{item.medicationMethod == 1}}">
<text class="range">3周</text> <view class="naem">已持续口服</view>
<text class="range">{{item.oralMonthName}}</text>
</view>
<view class="rch-footer" wx:elif="{{item.medicationMethod == 2}}">
<div class="name">已进行的治疗疗程</div>
<text class="range">{{item.injectionWeek}}周</text>
</view>
<view class="rch-footer" wx:elif="{{item.medicationMethod == 3}}">
<div class="naem">已注射次数</div>
<text class="range">{{item.injectionTimes}}次</text>
</view> </view>
</view> </view>
</view> </view>

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

@ -1,6 +0,0 @@
{
"usingComponents": {
"navBar": "/components/zd-navBar/navBar",
"free-audio": "/components/freeAudio/index"
}
}

223
src/patient/pages/adl/index.scss

@ -1,223 +0,0 @@
.page {
background-color: #fafafa;
.page-container {
padding: 20rpx 50rpx 40rpx;
.title {
font-size: 45rpx;
color: #e04775;
font-weight: bold;
line-height: 60rpx;
}
.sub-title {
font-size: 34rpx;
color: #484848;
line-height: 60rpx;
font-weight: bold;
}
.banner {
margin-top: 10rpx;
width: 100%;
height: 246rpx;
}
.rule {
position: relative;
z-index: 1;
margin-top: 20rpx;
border-radius: 24rpx;
background-color: #fff;
border: 1rpx solid rgba(39, 58, 101, 0.1);
.r-header {
padding-left: 30rpx;
width: 670rpx;
height: 69rpx;
display: flex;
align-items: center;
font-size: 32rpx;
color: #ffffff;
background: linear-gradient(278deg, rgba(242, 125, 173, 0) 0%, #e04775 100%);
border-radius: 24rpx 24rpx 0rpx 0rpx;
}
.r-container {
.row {
padding: 22rpx;
display: flex;
.icon {
width: 62rpx;
height: 62rpx;
}
.wrap {
padding-left: 7rpx;
.w-title {
font-size: 30rpx;
color: #cf5375;
font-weight: bold;
}
.w-content {
font-size: 24rpx;
color: #999999;
.blod {
color: #484848;
}
}
}
}
.line {
margin: 0 auto;
width: 610rpx;
height: 1rpx;
background-color: #e0e3e9;
opacity: 0.8;
}
}
}
.page-tip {
margin-top: -20rpx;
padding: 30rpx 10rpx 10rpx;
text-align: center;
font-size: 28rpx;
color: rgba(161, 85, 10, 1);
background: linear-gradient(90deg, #fff4cf 0%, rgba(255, 244, 207, 0.76) 100%);
border-radius: 0 0 24rpx 24rpx;
}
.question {
padding: 25rpx;
margin-top: 20rpx;
border-radius: 24rpx;
border: 1px solid rgba(39, 58, 101, 0.1);
background-color: #fff;
.poster {
position: relative;
width: 100%;
height: 348rpx;
border-radius: 24rpx;
}
.play {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 80rpx;
height: 80rpx;
}
.q-title {
margin-top: 24rpx;
text-align: center;
font-size: 28rpx;
color: #464646;
}
}
.module {
padding: 17rpx;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 15rpx;
background-color: rgba(255, 255, 255, 0.9);
border-radius: 24rpx;
border: 1px solid #d5dce1;
.item {
text-align: center;
.icon {
width: 96rpx;
height: 96rpx;
}
.name {
font-size: 24rpx;
color: #aaaaaa;
}
}
}
.container {
margin-top: 40rpx;
padding: 49rpx 32rpx;
background-color: rgba(255, 255, 255, 0.9);
border: 1px solid #d5dce1;
border-radius: 24rpx;
.content {
margin-top: 33rpx;
padding-left: 40rpx;
font-size: 24rpx;
color: #aaaaaa;
}
}
.footer {
padding-top: 40rpx;
display: flex;
.share {
width: 176rpx;
height: 80rpx;
font-size: 34rpx;
font-weight: bold;
color: #cf5375;
border-radius: 24rpx 24rpx 24rpx 24rpx;
opacity: 1;
border: 2rpx solid #e04775;
text-align: center;
box-sizing: border-box;
line-height: 78rpx;
background-color: transparent;
margin: 0;
margin-right: 32rpx;
&::after {
border: none;
outline: none;
}
}
.test {
position: relative;
flex: 1;
height: 80rpx;
font-size: 34rpx;
color: #ffffff;
text-align: center;
line-height: 80rpx;
background: #cf5375;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.money {
padding: 0 20rpx;
position: absolute;
top: -5rpx;
left: 50%;
transform: translate(-50%, -100%);
background-color: #ffefd0;
font-size: 24rpx;
color: #f5ad1d;
line-height: 50rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 12rpx;
.icon {
margin-right: 10rpx;
width: 34rpx;
height: 36rpx;
}
&::after {
position: absolute;
bottom: 0;
left: 50%;
transform: translate(-50%, 100%);
content: '';
width: 0;
height: 0;
border-style: solid;
border-width: 10rpx 10rpx 0 10rpx;
border-color: #ffefd0 transparent transparent transparent;
}
}
}
}
.footer-tip {
margin-top: 40rpx;
text-align: center;
font-size: 24rpx;
color: #aaaaaa;
}
}
}
.video {
position: relative;
width: 100%;
height: 0;
border-radius: 24rpx;
}

110
src/patient/pages/adl/index.ts

@ -1,110 +0,0 @@
const app = getApp<IAppOption>();
Page({
data: {
pageShow: false,
audio: {
url: 'https://voice-hb.oss-cn-beijing.aliyuncs.com/zaiding/voice_1690445548-5.mp3',
size: 50,
},
zdUserInfo: {},
m_d: '',
nrdl: '',
rewardScore: undefined,
bottom: wx.getMenuButtonBoundingClientRect().bottom,
},
videoContext: null as WechatMiniprogram.VideoContext | null,
async onLoad(options) {
await this.handleScene(options);
this.videoContext = wx.createVideoContext('video');
this.setData({
m_d: options.m_d,
nrdl: options.nrdl,
});
app.waitLogin({ type: [0, 1] }).then(() => {
app.getZdUserInfo(this, true);
this.getAdlScore();
if (options.adlPushId) {
wx.ajax({
method: 'POST',
url: '?r=zd/push-click/adl-push-click',
data: { adlPushId: options.adlPushId },
});
}
if (options.es === '201502') {
app.globalData.IsAliQiWei = 1;
}
});
},
// 拦截通过小程序码进入的场景
handleScene(options: any) {
return new Promise((resolve) => {
console.log(options);
const { scene, ...reset } = wx.getLaunchOptionsSync();
console.log(scene);
console.log(reset);
if (
[1047, 1048, 1049, 1089].includes(scene) &&
options.scene?.includes('doctorId') &&
options.scene?.includes('inviteChan')
) {
app.zdPermissionVerification(3, 15, `/patient/pages/index/index`).then(() => {
wx.reLaunch({
url: '/patient/pages/index/index',
});
});
} else {
resolve(true);
}
});
},
getAdlScore() {
wx.ajax({
method: 'GET',
url: '?r=zd/adl/get-score',
data: {},
}).then((res) => {
this.setData({
rewardScore: res.rewardScore,
});
});
},
handlePlay() {
this.videoContext?.play();
this.videoContext?.requestFullScreen({});
},
handleFullScreen(e) {
if (!e.detail.fullScreen) {
this.videoContext?.pause();
this.videoContext?.seek(0);
}
},
handleShare() {
wx.navigateTo({
url: '/patient/pages/adlShare/index',
});
},
handleTest() {
wx.navigateTo({
url: `/patient/pages/adlTest/index?m_d=${this.data.m_d}&nrdl=${this.data.nrdl}`,
});
},
handleBack() {
wx.navigateBack();
},
onShareAppMessage() {
return {
title: 'MG-ADL测评表:评估重症肌无力患者症状对生活质量的影响',
path: '/patient/pages/adl/index',
};
},
});

74
src/patient/pages/adl/index.wxml

@ -1,74 +0,0 @@
<view
class="page"
style="background: url({{imageUrl}}za-images//double-standard/adl-bg.png?t={{Timestamp}}) no-repeat top center / 100%;padding-top:{{bottom}}px"
>
<navBar background="{{background}}" title="" back bind:back="handleBack" fixed></navBar>
<view class="page-container">
<view class="title">国际权威机构建议</view>
<view class="sub-title">重症肌无力治疗追求“双达标”</view>
<image class="banner" src="{{imageUrl}}za-images/double-standard/adl-banner.png?t={{Timestamp}}"></image>
<view class="rule">
<view class="r-header">什么是“双达标”</view>
<view class="r-container">
<view class="row">
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-rule-icon1.png?t={{Timestamp}}"></image>
<view class="wrap">
<view class="w-title">疗效达标</view>
<view class="w-content">
<text class="blod">MG-ADL评分为0或1</text>
疾病症状达到最小症状表达
</view>
</view>
</view>
<view class="line"></view>
<view class="row">
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-rule-icon2.png?t={{Timestamp}}"></image>
<view class="wrap">
<view class="w-title">安全性达标</view>
<view class="w-content">
<text class="blod">治疗相关副作用≤1级</text>
如口服泼尼松当量≤5mg/天
</view>
</view>
</view>
</view>
</view>
<view class="page-tip">ADL测评可以如实反馈您过去1周的整体平均状况</view>
<view class="question">
<image class="poster" src="{{imageUrl}}za-images/double-standard/adl-poster.png?t={{Timestamp}}">
<image
class="play"
src="{{imageUrl}}za-images/double-standard/adl-play.png?t={{Timestamp}}"
bind:tap="handlePlay"
></image>
</image>
<!-- <view class="q-title">专家说什么是“双达标”</view> -->
</view>
<view class="footer">
<button class="share" wx:if="{{zdUserInfo.UserType>=3}}" bind:tap="handleShare">分享</button>
<view class="test" bind:tap="handleTest">
<view class="money" wx:if="{{rewardScore}}">
<image class="icon" src="{{imageUrl}}za-images/2/money.png?t={{Timestamp}}"></image>
+{{rewardScore}}能量
</view>
开始评测
</view>
</view>
<view class="footer-tip">
<view>建议您至少每周更新1次测评</view>
<view>您提交的测评信息仅用于生成您的健康记录和报告</view>
</view>
</view>
</view>
<video
id="video"
class="video"
loop
src="https://circlehbsaas.oss-cn-beijing.aliyuncs.com/video/20250630828_adl-video.mp4"
poster="{{imageUrl}}za-images/double-standard/adl-poster.png?t={{Timestamp}}"
show-play-btn
play-btn-position="center"
enable-play-gesture
bindfullscreenchange="handleFullScreen"
></video>

8
src/patient/pages/adlResult/index.json

@ -1,8 +0,0 @@
{
"usingComponents": {
"navBar": "/components/zd-navBar/navBar",
"van-icon": "@vant/weapp/icon/index",
"van-transition": "@vant/weapp/transition/index",
"toast": "/components/toast/index"
}
}

614
src/patient/pages/adlResult/index.scss

@ -1,614 +0,0 @@
.page {
background-color: #fafafa;
min-height: 100vh;
padding-bottom: 240rpx;
.page-container {
.card-status {
position: relative;
margin: 0 6rpx;
height: 316rpx;
.card-icon {
position: absolute;
top: 71rpx;
left: 45rpx;
width: 217rpx;
height: 198rpx;
&.card-icon2 {
width: 197rpx;
height: 199rpx;
}
&.card-icon3 {
width: 197rpx;
height: 199rpx;
}
}
.content {
position: absolute;
top: 90rpx;
right: 76rpx;
.row {
display: flex;
align-items: center;
.name {
margin-right: 33rpx;
width: 5em;
font-size: 32rpx;
color: #333333;
}
.ststus {
padding: 0 0 0 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
width: 170rpx;
height: 45rpx;
color: #fff;
background-color: #24d8c8;
font-weight: bold;
border-radius: 27rpx;
box-sizing: border-box;
.icon {
width: 52rpx;
height: 52rpx;
}
&.status-warn {
color: #cf5375;
background: #f0ccd6;
}
}
}
.line {
margin: 24rpx 0;
width: 365rpx;
height: 1px;
background-color: rgba(255, 255, 255, 0.85);
}
}
}
.pass-line {
margin: 0 40rpx;
display: flex;
align-items: center;
.icon {
width: 180rpx;
height: 180rpx;
}
.content {
padding-left: 16rpx;
.row {
margin-bottom: 20rpx;
line-height: 45rpx;
font-size: 32rpx;
color: #ffffff;
.name {
display: inline-block;
width: 6em;
}
}
}
}
.doctor {
margin: 0 40rpx 40rpx;
padding: 72rpx 32rpx 32rpx;
height: 240rpx;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
.avatar {
width: 96rpx;
height: 96rpx;
.a-img {
width: 100%;
height: 100%;
border-radius: 50%;
}
}
.wrap {
padding: 0 16rpx;
flex: 1;
.name-wrap {
display: flex;
.name {
position: relative;
font-size: 36rpx;
color: rgba(51, 51, 51, 1);
font-weight: bold;
.n-content {
max-width: 8em;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.bubble {
position: absolute;
top: -10rpx;
right: 0;
padding: 0 5rpx;
transform: translateX(100%);
min-width: 32rpx;
height: 32rpx;
box-sizing: border-box;
text-align: center;
line-height: 28rpx;
font-size: 22rpx;
color: rgba(255, 255, 255, 1);
background: #cf5375;
border: 2rpx solid #ffffff;
border-radius: 32rpx 32rpx 32rpx 0;
}
}
}
.content {
margin-top: 5rpx;
font-size: 24rpx;
color: rgba(207, 83, 117, 1);
}
}
.btn {
width: 158rpx;
height: 56rpx;
font-size: 28rpx;
color: rgba(207, 83, 117, 1);
background: linear-gradient(136deg, #e9f0ff 0%, #fee4ed 100%);
border-radius: 420rpx 420rpx 420rpx 420rpx;
display: flex;
align-items: center;
justify-content: center;
}
}
.banner {
position: relative;
margin: 0 40rpx 0;
background-color: #fff;
border: 1px solid #dfe2e7;
border-radius: 24rpx;
box-shadow: 0rpx 4rpx 32rpx 10rpx rgba(207, 83, 116, 0.2);
min-height: 323rpx;
line-height: 1;
.status-icon {
position: absolute;
top: 165rpx;
right: -10rpx;
width: 124rpx;
height: 124rpx;
}
.b-header {
display: flex;
padding: 19rpx 20rpx 0rpx 182rpx;
.num {
flex-shrink: 0;
display: flex;
align-items: baseline;
font-size: 104rpx;
color: #ffffff;
font-weight: bold;
text-shadow: 8px 8px 16px rgba(143, 217, 226, 0.1);
background: linear-gradient(180deg, #ffffff 0%, #ffffff 50%, rgba(255, 255, 255, 0.5) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
.sub {
font-size: 24rpx;
color: #ffffff;
}
}
.verline {
margin: 10rpx 40rpx 0;
height: 76rpx;
border-right: 2rpx dotted #ffffff;
}
.num-detail {
flex: 1;
display: flex;
.n-item {
flex: 1;
&.active {
.box {
background-color: #cf5375;
}
}
.box {
margin: 0 auto;
width: 45rpx;
height: 45rpx;
text-align: center;
line-height: 45rpx;
background-color: #333333;
border-radius: 12rpx;
color: #ffffff;
font-size: 32rpx;
}
.name {
text-align: center;
font-size: 24rpx;
line-height: 48rpx;
color: #333333;
}
}
}
}
.b-tip {
padding: 4rpx 50rpx;
text-align: center;
font-size: 22rpx;
color: #ffffff;
line-height: 36rpx;
background: linear-gradient(90deg, #e04775 0%, #e04775 20%, #5eaeaf 100%);
display: flex;
justify-content: space-between;
}
.b-body {
padding: 16rpx 120rpx 16rpx 54rpx;
background-color: #fff;
border-radius: 0 0 24rpx 24rpx;
min-height: 124rpx;
.line {
font-size: 24rpx;
color: #666666;
line-height: 36rpx;
.red {
color: #cf5375;
}
.green {
color: #25d9c8;
}
}
}
.b-container {
padding: 16rpx 23rpx;
.c-header {
display: flex;
justify-content: flex-end;
font-size: 24rpx;
color: #cccccc;
}
.swiper {
margin: 19rpx 24rpx;
.scurt {
width: 100%;
border: 1px solid rgba(0, 0, 0, 0.1);
box-sizing: border-box;
.s-header {
display: flex;
height: 40rpx;
margin-bottom: -1px;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
.none {
flex-shrink: 0;
width: 226rpx;
background-color: rgba(228, 228, 228, 1);
}
.bar {
flex: 1;
display: flex;
.num {
flex: 1;
text-align: center;
font-size: 24rpx;
color: #fff;
line-height: 40rpx;
}
}
}
.s-body {
display: flex;
.s-aside {
width: 28rpx;
background-color: rgba(102, 102, 102, 0.15);
flex-shrink: 0;
.sa-item {
display: flex;
text-align: center;
justify-content: center;
align-items: center;
font-size: 18rpx;
color: rgba(102, 102, 102, 1);
line-height: 1;
overflow: hidden;
&:not(:last-of-type) {
margin-bottom: -1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
}
.sa-item1 {
height: 158rpx;
}
.sa-item2 {
height: 54rpx;
}
.sa-item3 {
height: 106rpx;
}
.sa-item4 {
height: 108rpx;
}
}
.s-container {
flex: 1;
.sc-row {
display: flex;
height: 54rpx;
overflow: hidden;
.sc-title {
width: 198rpx;
font-size: 18rpx;
color: rgba(102, 102, 102, 1);
text-align: center;
line-height: 53rpx;
}
.sc-col {
margin-left: -1px;
border-left: 1px solid rgba(0, 0, 0, 0.1);
flex: 1;
text-align: center;
.icon {
margin-top: 11rpx;
width: 32rpx;
height: 32rpx;
}
}
}
.sc-row:not(:last-of-type) {
margin-bottom: -1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.sc-row:nth-of-type(2n-1) {
background-color: rgba(217, 217, 217, 0.2);
}
}
}
}
.scurt-detail {
width: 100%;
.scurt-detail-img {
width: 100%;
}
}
}
// .detail {
// margin: 19rpx 24rpx;
// border: 1rpx solid rgba(0, 0, 0, 0.1);
// .d-header {
// display: flex;
// height: 40rpx;
// border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
// .none {
// flex-shrink: 0;
// width: 125rpx;
// background-color: rgba(228, 228, 228, 1);
// }
// .bar {
// flex: 1;
// display: flex;
// .num-normal {
// width: 64rpx;
// text-align: center;
// font-size: 24rpx;
// color: #fff;
// line-height: 40rpx;
// }
// .num {
// flex: 1;
// text-align: center;
// font-size: 24rpx;
// color: #fff;
// line-height: 40rpx;
// }
// }
// }
// .d-body {
// display: flex;
// .d-aside {
// width: 28rpx;
// background-color: rgba(102, 102, 102, 0.15);
// flex-shrink: 0;
// .da-item {
// display: flex;
// text-align: center;
// justify-content: center;
// align-items: center;
// font-size: 18rpx;
// color: rgba(102, 102, 102, 1);
// line-height: 1;
// border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
// }
// .da-item1 {
// height: 293rpx;
// }
// .da-item2 {
// height: 96rpx;
// }
// .da-item3 {
// height: 194rpx;
// }
// .da-item4 {
// height: 194rpx;
// }
// }
// .d-container {
// flex: 1;
// .dc-row {
// display: flex;
// height: 96rpx;
// border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
// line-height: 24rpx;
// .dc-title {
// padding: 12rpx;
// width: 97rpx;
// font-size: 18rpx;
// color: rgba(102, 102, 102, 1);
// box-sizing: border-box;
// }
// .dc-sub-title {
// border-left: 1rpx solid rgba(0, 0, 0, 0.1);
// width: 64rpx;
// text-align: center;
// font-size: 18rpx;
// color: rgba(102, 102, 102, 1);
// padding: 12rpx;
// box-sizing: border-box;
// }
// .dc-col {
// padding: 0 12rpx;
// border-left: 1rpx solid rgba(0, 0, 0, 0.1);
// flex: 1;
// font-size: 18rpx;
// color: rgba(102, 102, 102, 1);
// }
// }
// .dc-row:nth-of-type(2n-1) {
// background-color: rgba(217, 217, 217, 0.2);
// }
// }
// }
// }
}
}
.hormone {
position: relative;
margin: 40rpx;
background-color: #fff;
border: 1px solid #dfe2e7;
border-radius: 24rpx;
box-shadow: 0rpx 4rpx 32rpx 10rpx rgba(207, 83, 116, 0.2);
.status-icon {
position: absolute;
top: 100rpx;
right: -10rpx;
width: 124rpx;
height: 124rpx;
&.status-icon-max {
width: 162rpx;
}
}
.h-header {
padding: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
background: linear-gradient(95deg, #26dac9 7%, rgba(143, 217, 226, 0) 100%);
box-shadow: 8rpx 8rpx 17rpx 0rpx rgba(143, 217, 226, 0.1);
border-radius: 24rpx 24rpx 0 0;
.title {
font-size: 30rpx;
color: #ffffff;
}
.content {
font-size: 22rpx;
color: #787878;
.red {
color: #e04775;
}
}
}
.h-container {
padding: 25rpx 25rpx 50rpx;
font-size: 24rpx;
color: #666666;
}
}
.no-solve {
margin: 40rpx auto 0;
font-size: 24rpx;
color: #666666;
width: 404rpx;
height: 48rpx;
text-align: center;
line-height: 48rpx;
border-radius: 24rpx;
background: #eeeeee;
}
.footer {
margin: 46rpx 40rpx;
display: flex;
.share {
width: 176rpx;
height: 80rpx;
font-size: 34rpx;
font-weight: bold;
color: #cf5375;
border-radius: 24rpx 24rpx 24rpx 24rpx;
opacity: 1;
border: 2rpx solid #e04775;
text-align: center;
box-sizing: border-box;
line-height: 78rpx;
background-color: transparent;
margin: 0;
margin-right: 32rpx;
&::after {
border: none;
outline: none;
}
}
.test {
flex: 1;
height: 80rpx;
font-size: 30rpx;
color: #ffffff;
text-align: center;
line-height: 80rpx;
background: #cf5375;
border-radius: 24rpx 24rpx 24rpx 24rpx;
}
}
}
}
.code-wrap {
.code-boder {
margin: 0 auto;
padding: 18rpx;
width: 352rpx;
height: 352rpx;
box-sizing: border-box;
.code {
width: 100%;
height: 100%;
}
}
.code-tip {
margin-top: 24rpx;
padding-bottom: 80rpx;
text-align: center;
font-size: 28rpx;
color: rgba(102, 102, 102, 1);
}
}
.navback {
padding: 32rpx;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
font-size: 40rpx;
color: #ffffff;
font-weight: bold;
text-align: center;
background: #cf5375;
box-sizing: border-box;
box-shadow: 0rpx 4rpx 36rpx 0rpx rgba(0, 0, 0, 0.27);
border-radius: 24rpx 24rpx 0rpx 0rpx;
.sub {
font-size: 24rpx;
}
}
.shangbao-footer {
padding: 26rpx 0;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
display: flex;
justify-content: center;
box-shadow: 0rpx -32rpx 32rpx 0rpx rgba(0, 0, 0, 0.09);
border-radius: 24rpx 24rpx 0 0;
.btn {
width: 670rpx;
height: 157rpx;
}
}

272
src/patient/pages/adlResult/index.ts

@ -1,272 +0,0 @@
import dayjs from 'dayjs';
const app = getApp<IAppOption>();
Page({
data: {
id: '',
reset: '',
qrcode: '',
detail: {},
scurt: 0,
noFinish: false,
grade: 1,
tableData: [
{
title: '说话',
key: 'TalkingScore',
},
{
title: '咀嚼',
key: 'ChewScore',
},
{
title: '吞咽',
key: 'SwallowScore',
},
{
title: '呼吸',
key: 'BreathScore',
},
{
title: '刷牙梳头能力受损',
key: 'BrushTeethAndCombHairScore',
},
{
title: '从椅子上起身能力受损',
key: 'GetUpFromChairScore',
},
{
title: '复视/重影',
key: 'DoubleVisionScore',
},
{
title: '眼睑下垂',
key: 'DroopyEyelidsScore',
},
],
LastCreateDate: '',
dateDiff: '',
m_d: '',
nrdl: '',
sendWeiYi: false,
toastShow: false,
// toastType: 'adlProgresss',
// toastType: "adlProgresssEnd",
toastType: 'adlLevelUp',
toastParams: {
// ContinuousTimes: 2,
// RewardScore: "500",
// Records: [
// { Id: "6", ContinuousTimes: "2", RewardScore: "500" },
// { Id: "3", ContinuousTimes: "1", RewardScore: "500" },
// ],
// PatientScore: "500",
// PatientScoreExtra: "200",
// PatientScoreExtra2: "500",
} as any,
unreadCount: 0,
},
onLoad(options) {
console.log(options);
app.zdGetTheme().then((res) => {
this.setData({
theme: res,
});
});
const SystemInfo = app.globalSystemInfo;
if (SystemInfo) {
const { bottom } = SystemInfo.capsulePosition;
this.setData({
bottom,
});
}
this.setData({
id: options.id,
reset: options.reset,
m_d: options.m_d,
nrdl: options.nrdl,
sendWeiYi: options.wy === '1',
idafa: options.idafa === '1',
});
app.waitLogin({ type: [0, 1] }).then(() => {
app.getZdUserInfo(this, false);
this.getUnreadCount();
this.getDetail();
this.getQrCode();
if (options.nrdl === '1') {
this.getOpenPatientList();
}
const pages = getCurrentPages(); //获取当前页面js里面的pages里的所有信息。
const prevPage = pages[pages.length - 2];
const adlResultInfo = wx.getStorageSync('adlResultInfo');
console.log(options.idafa === '1');
if (options.idafa === '1') {
this.setData({
toastShow: true,
toastType: 'adlLevelUp',
toastParams: {},
});
} else if (adlResultInfo && prevPage.route == 'pages/adl/index' && !Array.isArray(adlResultInfo)) {
this.setData({
toastShow: true,
toastType: 'adlProgresss',
toastParams: {
...adlResultInfo,
Records: adlResultInfo.Records?.reverse(),
},
});
wx.removeStorageSync('adlResultInfo');
}
});
},
getQrCode() {
wx.ajax({
method: 'GET',
url: '?r=zd/adl/qrcode',
data: {},
}).then((res) => {
this.setData({
qrcode: res.src,
});
});
},
getUnreadCount() {
wx.ajax({
method: 'GET',
url: '?r=zd/message-interact/get-unread-count',
data: {},
}).then((res) => {
this.setData({
unreadCount: res,
});
});
},
getDetail() {
const { id } = this.data;
wx.ajax({
method: 'GET',
url: '?r=zd/adl/view',
data: {
Id: id,
},
}).then((res) => {
let grade = 1;
if (res.TotalScore < 5) {
grade = 1;
} else if (res.TotalScore >= 5 && res.TotalScore < 15) {
grade = 2;
} else {
grade = 3;
}
this.setData({
detail: res,
grade,
LastCreateDate: dayjs(res.LastCreateTime).format('MM月DD日'),
dateDiff: dayjs(res.CreateTime).from(res.LastCreateTime).replace(' ', ''),
});
});
},
getOpenPatientList() {
wx.ajax({
method: 'GET',
url: '?r=zd/nrdl/open-patient-list',
data: {},
}).then((res) => {
this.setData({
patientInfo: res,
});
});
},
handleDetail() {
const { scurt, noFinish } = this.data;
if (noFinish) return;
this.setData({
scurt: (scurt + 1) % 2,
noFinish: true,
});
},
handleDetailFinish() {
this.setData({
noFinish: false,
});
},
handleReset() {
const id = this.data.id;
wx.showModal({
title: '确认重新测试?',
content: '重新测试后,此次评测结果将自动删除',
confirmColor: '#8c75d0',
success(res) {
if (res.confirm) {
wx.ajax({
method: 'POST',
url: '?r=zd/adl/delete',
data: {
Id: id,
},
}).then(() => {
wx.redirectTo({
url: '/patient/pages/adlTest/index',
});
});
}
},
});
},
handleSave() {
app.zdPermissionVerification(3, 2, ``).then(() => {});
},
handleMyHealth() {
wx.navigateTo({
url: '/patient/pages/myHealthRecord/index',
});
},
handleShare() {
wx.navigateTo({
url: '/patient/pages/adlShare/index',
});
},
handleToastOk() {
if (this.data.toastType === 'adlLevelUp') {
wx.navigateTo({
url: '/patient/pages/webview/index',
});
}
this.handleToastCancel();
},
handleToastCancel() {
this.setData({
toastShow: false,
});
},
handleBack() {
wx.navigateBack();
},
routerTo(e) {
const { url } = e.currentTarget.dataset;
if (url === '/patient/pages/interactivePatient/index') {
}
if (url === '/patient/pages/webview/index') {
}
wx.navigateTo({
url,
});
},
hanldeCodeLong() {
},
onShareAppMessage() {
return {
title: 'MG-ADL测评表:评估重症肌无力患者症状对生活质量的影响',
path: '/patient/pages/adl/index',
};
},
});

371
src/patient/pages/adlResult/index.wxml

@ -1,371 +0,0 @@
<view
class="page"
style="background: url({{imageUrl}}za-images//1/adl-test-bg.png?t={{Timestamp}}) top center / 100% ;padding-top:{{bottom||60}}px"
wx:if="{{detail.TotalScore}}"
>
<navBar background="{{background}}" title="双达标测评结果" back bind:back="handleBack" fixed></navBar>
<view class="page-container">
<view
wx:if="{{detail.TotalScore <=1 && detail.SteroidDailyDose <=5}}"
class="card-status"
style="background: url({{imageUrl}}za-images/double-standard/adl-result-bg1.png?t={{Timestamp}}) no-repeat top center/100% 100%;"
>
<image class="card-icon" src="{{imageUrl}}za-images/double-standard/adl-result-preple1.png?t={{Timestamp}}"></image>
<view class="content">
<view class="row row1">
<view class="name">ADL评分</view>
<view class="ststus">
已达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon1.png?t={{Timestamp}}"></image>
</view>
</view>
<block wx:if="{{detail.SteroidDailyDose}}">
<view class="line"></view>
<view class="row row2">
<view class="name">激素日用量</view>
<view class="ststus">
已达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon1.png?t={{Timestamp}}"></image>
</view>
</view>
</block>
</view>
</view>
<view
wx:elif="{{detail.TotalScore <=1 || detail.SteroidDailyDose <=5}}"
class="card-status"
style="background: url({{imageUrl}}za-images/double-standard/adl-result-bg2.png?t={{Timestamp}}) no-repeat top center/100% 100%;"
>
<image
class="card-icon card-icon2"
src="{{imageUrl}}za-images/double-standard/adl-result-preple2.png?t={{Timestamp}}"
></image>
<view class="content">
<view class="row row1">
<view class="name">ADL评分</view>
<view class="ststus" wx:if="{{detail.TotalScore <= 1}}">
已达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon1.png?t={{Timestamp}}"></image>
</view>
<view class="ststus status-warn" wx:else>
待达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon2.png?t={{Timestamp}}"></image>
</view>
</view>
<block wx:if="{{detail.SteroidDailyDose}}">
<view class="line"></view>
<view class="row row2">
<view class="name">激素日用量</view>
<view class="ststus" wx:if="{{detail.SteroidDailyDose <= 5}}">
已达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon1.png?t={{Timestamp}}"></image>
</view>
<view class="ststus status-warn" wx:else>
待达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon2.png?t={{Timestamp}}"></image>
</view>
</view>
</block>
</view>
</view>
<view
wx:else
class="card-status"
style="background: url({{imageUrl}}za-images/double-standard/adl-result-bg3.png?t={{Timestamp}}) no-repeat top center/100% 100%;"
>
<image
class="card-icon card-icon3"
src="{{imageUrl}}za-images/double-standard/adl-result-preple3.png?t={{Timestamp}}"
></image>
<view class="content">
<view class="row row1">
<view class="name">ADL评分</view>
<view class="ststus status-warn">
待达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon2.png?t={{Timestamp}}"></image>
</view>
</view>
<block wx:if="{{detail.SteroidDailyDose}}">
<view class="line"></view>
<view class="row row2">
<view class="name">激素日用量</view>
<view class="ststus status-warn">
待达标
<image class="icon" src="{{imageUrl}}za-images/double-standard/adl-result-icon2.png?t={{Timestamp}}"></image>
</view>
</view>
</block>
</view>
</view>
<block wx:if="{{zdUserInfo.ExclusiveDoctorId}}">
<view
class="doctor {{theme === 'DRUG' && 'doctor-drugs'}}"
wx:if="{{detail.LastTotalScore !== null && (detail.TotalScore-detail.LastTotalScore)>2 || detail.TotalScore>=5 || detail.SteroidDailyDose>=20}}"
style="background: url({{imageUrl}}za-images/2/doctor{{theme === 'DRUG' ? '-drug':''}}-bg.png?t={{Timestamp}}) no-repeat top center/100% 240rpx"
>
<view class="avatar">
<image class="a-img" mode="aspectFill" src="{{zdUserInfo.ExclusiveDoctorImg}}" alt=""></image>
</view>
<view class="wrap">
<view class="name-wrap">
<view class="name">
<view class="n-content">{{zdUserInfo.ExclusiveDoctorName}}</view>
<view class="bubble" wx:if="{{unreadCount>0}}">{{unreadCount}}</view>
</view>
</view>
<view
class="content"
wx:if="{{detail.TotalScore-detail.LastTotalScore>2 && detail.TotalScore>=5 && detail.LastAdlRecordId * 1}}"
>
您的ADL评分≥5分,且较上次增加了2分以上
<block wx:if="{{detail.SteroidDailyDose>=20}}">,激素用量超过了20mg,</block>
建议定期复诊
</view>
<view class="content" wx:elif="{{detail.TotalScore-detail.LastTotalScore>2 && detail.LastAdlRecordId * 1}}">
您的ADL较上次增加了2分以上
<block wx:if="{{detail.SteroidDailyDose>=20}}">,激素用量超过了20mg,</block>
建议定期复诊
</view>
<view class="content" wx:elif="{{detail.TotalScore>=5}}">
您的ADL评分≥5分
<block wx:if="{{detail.SteroidDailyDose>=20}}">,激素用量超过了20mg,</block>
建议定期复诊
</view>
<view class="content" wx:elif="{{detail.SteroidDailyDose>=20}}">您的激素用量超过了20mg,建议定期复诊</view>
</view>
<view class="btn" bind:tap="routerTo" data-url="/patient/pages/interactivePatient/index">
{{unreadCount ? '去看看':'去咨询'}}
<van-icon name="arrow" />
</view>
</view>
</block>
<view
class="banner"
style="background: #fff url({{imageUrl}}za-images//1/adl-result{{grade}}.png?t={{Timestamp}}) no-repeat top center / 100% 323rpx;"
>
<image
wx:if="{{detail.TotalScore <=1}}"
class="status-icon"
src="{{imageUrl}}za-images/double-standard/adl-result-status1.png?t={{Timestamp}}"
></image>
<image
wx:elif="{{detail.TotalScore <=4}}"
class="status-icon"
src="{{imageUrl}}za-images/double-standard/adl-result-status2.png?t={{Timestamp}}"
></image>
<image
wx:else
class="status-icon"
src="{{imageUrl}}za-images/double-standard/adl-result-status3.png?t={{Timestamp}}"
></image>
<view class="b-header">
<view class="num">
{{detail.TotalScore}}
<view class="sub">分</view>
</view>
<view class="verline"></view>
<view class="num-detail">
<view class="n-item {{detail.MedullaTypeScore >=7 && 'active'}}">
<view class="box">{{detail.MedullaTypeScore}}</view>
<view class="name">延髓</view>
</view>
<view class="n-item {{detail.BreathTypeScore >=3 && 'active'}}">
<view class="box">{{detail.BreathTypeScore}}</view>
<view class="name">呼吸</view>
</view>
<view class="n-item {{detail.LimbsTypeScore >=5 && 'active'}}">
<view class="box">{{detail.LimbsTypeScore}}</view>
<view class="name">四肢</view>
</view>
<view class="n-item {{detail.EyeTypeScore >=5 && 'active'}}">
<view class="box">{{detail.EyeTypeScore}}</view>
<view class="name">眼睛</view>
</view>
</view>
</view>
<view class="b-tip" wx:if="{{detail.LastTotalScore}}">
<view class="name">ADL测评</view>
上次得分 {{detail.LastTotalScore}}分 {{LastCreateDate}} {{dateDiff}}
</view>
<view class="b-body">
<view class="line" wx:if="{{detail.TotalScore < 5}}">
1 总分
<text decode="true ">&lt;</text>
<text class="red">5分</text>
,日常请注意观察
</view>
<view class="line" wx:elif="{{detail.TotalScore >= 5}}">
1 总分
<text decode="true ">&gt;=</text>
<text class="red">5分</text>
,您的症状控制欠佳,建议必要时就医
</view>
<block wx:if="{{detail.LastTotalScore !== null}}">
<view class="line" wx:if="{{detail.TotalScore - detail.LastTotalScore < 0 }}">
2 较上次得分变化
<text class="green">{{detail.TotalScore - detail.LastTotalScore }},有进步,加油!</text>
</view>
<view class="line" wx:elif="{{detail.TotalScore - detail.LastTotalScore == 0 }}">
2 与上次得分一致,请继续保持
</view>
<view class="line" wx:elif="{{detail.TotalScore - detail.LastTotalScore == 1 }}">
2 较上次得分变化
<text class="red">+{{detail.TotalScore - detail.LastTotalScore }},请继续关注!</text>
</view>
<view class="line" wx:elif="{{detail.TotalScore - detail.LastTotalScore >= 0 }}">
2 较上次得分变化
<text class="red">+{{detail.TotalScore - detail.LastTotalScore }},需要重点关注!</text>
</view>
</block>
<view class="line" wx:if="{{detail.EyeTypeScore / detail.TotalScore < 0.5}}">
{{detail.LastTotalScore === null ? 2 : 3}} 您的眼肌类占比
<text decode="true ">&lt;</text>
50%,以全身症状为主,应注意休息警惕病情加重
</view>
<view class="line" wx:elif="{{detail.EyeTypeScore / detail.TotalScore > 0.5}}">
{{detail.LastTotalScore === null ? 2 : 3}} 您的眼肌类占比
<text decode="true ">&gt;</text>
50%,危象风险不高,请继续关注
</view>
<view class="line" wx:elif="{{detail.EyeTypeScore / detail.TotalScore == 0.5}}">
{{detail.LastTotalScore === null ? 2 : 3}} 您的眼肌类占比=50%,危象风险不高,请继续关注
</view>
</view>
<view class="b-container">
<view class="c-header" bind:tap="handleDetail">
{{scurt==0 ? '查看详情':'返回'}}
<van-icon wx:if="{{scurt==0}}" name="arrow" />
<van-icon wx:else name="arrow" />
</view>
<swiper
class="swiper"
current="{{scurt}}"
style="height: {{scurt==0 ? '500rpx':'940rpx'}};"
bindchange="handleDetail"
bindanimationfinish="handleDetailFinish"
>
<swiper-item>
<view class="scurt">
<view class="s-header">
<view class="none"></view>
<view
class="bar"
style="background: url({{imageUrl}}za-images//1/adl-scurt.png?t={{Timestamp}}) no-repeat center / 100% 100% ;"
>
<view class="num">0分</view>
<view class="num">1分</view>
<view class="num">2分</view>
<view class="num">3分</view>
</view>
</view>
<view class="s-body">
<view class="s-aside">
<view class="sa-item sa-item1">延髓</view>
<view class="sa-item sa-item2">呼吸</view>
<view class="sa-item sa-item3">四肢</view>
<view class="sa-item sa-item4">眼肌</view>
</view>
<view class="s-container">
<view class="sc-row" wx:for="{{tableData}}" wx:key="index">
<view class="sc-title">{{item.title}}</view>
<view class="sc-col">
<image
wx:if="{{detail[item.key] == 0}}"
class="icon"
src="{{imageUrl}}za-images/1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
<view class="sc-col">
<image
wx:if="{{detail[item.key] == 1}}"
class="icon"
src="{{imageUrl}}za-images/1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
<view class="sc-col">
<image
wx:if="{{detail[item.key] == 2}}"
class="icon"
src="{{imageUrl}}za-images/1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
<view class="sc-col">
<image
wx:if="{{detail[item.key] == 3}}"
class="icon"
src="{{imageUrl}}za-images/1/adl-scurt-icon.png?t={{Timestamp}}"
></image>
</view>
</view>
</view>
</view>
</view>
</swiper-item>
<swiper-item>
<view class="scurt-detail">
<image class="scurt-detail-img" mode="widthFix" src="{{detail.ResultsImgUrl}}"></image>
</view>
</swiper-item>
</swiper>
</view>
</view>
<view class="hormone" wx:if="{{detail.SteroidDailyDose}}">
<image
wx:if="{{detail.SteroidDailyDose <= 5}}"
class="status-icon"
src="{{imageUrl}}za-images/double-standard/adl-result-status1.png?t={{Timestamp}}"
></image>
<image
wx:else
class="status-icon"
src="{{imageUrl}}za-images/double-standard/adl-result-status3.png?t={{Timestamp}}"
></image>
<view class="h-header">
<view class="title">激素用量</view>
<view class="content">
本次激素用量为
<text class="red">{{detail.SteroidDailyDose}}mg</text>
/天
</view>
</view>
<view class="h-container" wx:if="{{detail.SteroidDailyDose<=5}}">恭喜达标,您的激素用量已少于95% 的患友</view>
<view class="h-container" wx:else>距离达标还需努力,请遵医嘱规律治疗</view>
</view>
<view wx:if="{{reset}}" class="no-solve" bind:tap="handleReset">坚持每周测评,敏锐识别症状变化</view>
<view class="footer">
<view wx:if="{{zdUserInfo.UserType<3}}" class="test" bind:tap="handleSave">保存测评结果</view>
<view wx:else class="test" bind:tap="handleMyHealth">点击获取我的双达标笔记</view>
</view>
</view>
<view class="code-wrap">
<view
class="code-boder"
style="background: url({{imageUrl}}za-images//2/follow.png?t={{Timestamp}}) no-repeat top center / 100%"
>
<image class="code" src="{{qrcode}}" show-menu-by-longpress bind:longpress="hanldeCodeLong"></image>
</view>
<view class="code-tip">
扫码关注公众号
<view></view>
开启每周ADL测评提醒
</view>
</view>
</view>
<view class="shangbao-footer" bind:tap="routerTo" data-url="/patient/pages/webview/index" wx:if="{{m_d==2 || sendWeiYi || idafa}}">
<image class="btn" src="{{imageUrl}}za-images/2/adl-result-btn.gif?t={{Timestamp}}"></image>
</view>
<view class="navback" bind:tap="routerTo" data-url="/patient/pages/nrdl/index" wx:if="{{nrdl==1}}">
立即查看医保报销详细解读
<van-icon name="arrow" />
<view class="sub">{{patientInfo.PatientNum}}人正在关注</view>
</view>
<toast
bind:cancel="handleToastCancel"
bind:ok="handleToastOk"
show="{{toastShow}}"
type="{{toastType}}"
params="{{toastParams}}"
></toast>

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

@ -1,7 +0,0 @@
{
"usingComponents": {
"navBar": "/components/zd-navBar/navBar",
"free-audio": "/components/freeAudio/index",
"customPoster": "/components/customPoster/index"
}
}

35
src/patient/pages/adlShare/index.scss

@ -1,35 +0,0 @@
.page {
background-color: #fafafa;
min-height: 100vh;
.page-container {
position: relative;
.poster {
display: block;
width: 100%;
}
.download {
position: absolute;
top: 1450rpx;
left: 50%;
transform: translateX(-50%);
width: 482rpx;
height: 80rpx;
background: #cf5375;
border-radius: 40rpx;
text-align: center;
font-size: 28rpx;
color: #FFFFFF;
line-height: 80rpx;
.icon {
width: 48rpx;
height: 48rpx;
vertical-align: middle;
}
}
}
}
.poster {
display: block;
width: 100%;
}

134
src/patient/pages/adlShare/index.ts

@ -1,134 +0,0 @@
const app = getApp<IAppOption>()
Page({
data: {
poster: '',
params: {},
zdUserInfo: {} as any,
posterUrl: '',
},
onLoad() {
const SystemInfo = app.globalSystemInfo
wx.showLoading({
title: '加载中',
})
if (SystemInfo) {
const { bottom } = SystemInfo.capsulePosition
this.setData({
bottom,
})
}
app.zdWaitLogin({ loginPage: true }).then(() => {
app.getZdUserInfo(this, true, () => {
this.getPoster()
})
})
},
getPoster() {
wx.ajax({
method: 'POST',
url: '?r=poster/prepare',
data: {
posterId: 'adl2-invite',
userId: this.data.zdUserInfo.UserId,
},
}).then((res) => {
this.setData({
params: res,
})
})
},
handlePosterFinish(e) {
this.setData({
posterUrl: e.detail,
})
wx.hideLoading()
},
handleDownload() {
const that = this
wx.getSetting({
success(res) {
console.log(res)
if (
res.authSetting['scope.writePhotosAlbum'] != undefined &&
res.authSetting['scope.writePhotosAlbum'] == true
) {
//获取当前位置
that.saveImage()
} else if (res.authSetting['scope.writePhotosAlbum'] == undefined) {
//获取当前位置
that.saveImage()
} else {
wx.showModal({
title: '请求授权相册权限',
content: '需要保存海报到相册,请确认授权',
confirmColor: '#8c75d0',
success (res) {
if (res.cancel) {
//取消授权
wx.showToast({
title: '拒绝授权',
icon: 'none',
duration: 1000,
})
} else if (res.confirm) {
//确定授权,通过wx.openSetting发起授权请求
wx.openSetting({
success (res) {
if (res.authSetting['scope.writePhotosAlbum'] == true) {
// wx.showToast({
// title: '授权成功',
// icon: 'success',
// duration: 1000
// })
//再次授权,调用wx.getLocation的API
that.saveImage()
} else {
// wx.showToast({
// title: '授权失败',
// icon: 'none',
// duration: 1000
// })
}
},
})
}
},
})
}
},
})
},
saveImage() {
wx.showLoading({
title: '加载中',
})
wx.saveImageToPhotosAlbum({
filePath: this.data.posterUrl,
success: () => {
wx.hideLoading()
wx.showToast({
title: '保存成功,请到相册中查看',
})
},
fail: () => {
wx.hideLoading()
wx.showToast({
icon: 'none',
title: '保存失败,请稍后重试',
})
},
})
},
handleBack() {
wx.navigateBack()
},
onShareAppMessage() {
return {
title: 'MG-ADL测评表:重症肌无力患者评估表',
path: '/patient/pages/adl/index',
}
},
})

14
src/patient/pages/adlShare/index.wxml

@ -1,14 +0,0 @@
<view class="page">
<navBar background="{{background}}" title="" back bind:back="handleBack" fixed></navBar>
<view class="page-container">
<image class="poster" mode="widthFix" src="{{posterUrl}}" show-menu-by-longpress></image>
<view class="download" bind:tap="handleDownload">
<image class="icon" src="{{imageUrl}}za-images/1/download.png?t={{Timestamp}}"></image>
点击下载海报到本地
</view>
</view>
</view>
<!-- <image class="poster" mode="widthFix" src="{{posterUrl}}" show-menu-by-longpress></image> -->
<customPoster params="{{params}}" bind:finish="handlePosterFinish"></customPoster>

11
src/patient/pages/adlTest/index.json

@ -1,11 +0,0 @@
{
"navigationStyle": "custom",
"usingComponents": {
"navBar": "/components/zd-navBar/navBar",
"free-audio": "/components/freeAudio/index",
"van-transition": "@vant/weapp/transition/index",
"customTable": "/components/customTable/index",
"van-icon": "@vant/weapp/icon/index",
"van-popup": "@vant/weapp/popup/index"
}
}

334
src/patient/pages/adlTest/index.scss

@ -1,334 +0,0 @@
.page {
background-color: #fafafa;
min-height: 100vh;
.page-container {
margin-top: 40rpx;
.nav {
margin: 0rpx 40rpx;
padding: 16rpx 23rpx;
background-color: #fff;
border: 1px solid #dfe2e7;
border-radius: 24rpx;
box-shadow: 0rpx 4rpx 32rpx 10rpx #f2dee3;
.nav-title {
text-align: center;
font-size: 28rpx;
color: #999999;
}
.nav-wrap {
display: flex;
.nav-item {
flex: 1;
margin: 0 10rpx;
height: 6rpx;
background: #cf5375;
opacity: 0.3;
border-radius: 0rpx 0rpx 0rpx 0rpx;
&.active {
opacity: 1;
}
}
}
}
.custom-class {
position: absolute;
width: 100%;
}
.van-enter-active-class,
.van-leave-active-class {
transition-property: background-color, transform;
}
.van-enter-class {
transform: translateX(1000rpx);
opacity: 0;
}
.van-leave-to-class {
transform: translateX(-1000rpx);
opacity: 0;
}
.swiper {
height: 1400rpx;
}
.container {
padding: 64rpx 48rpx;
margin: 21rpx 40rpx 0;
width: calc(100% - 172rpx);
background-color: #fff;
border: 1px solid #dfe2e7;
border-radius: 24rpx;
box-shadow: 0rpx 4rpx 32rpx 10rpx #f2dee3;
.c-icon {
display: block;
margin: 0 auto;
width: 144rpx;
height: 144rpx;
}
.title {
margin-top: 44rpx;
font-size: 48rpx;
color: #333333;
font-weight: bold;
text-align: center;
}
.en-title {
margin-top: 10rpx;
font-size: 24rpx;
color: #cccccc;
text-align: center;
}
.question {
margin-top: 76rpx;
.question-item {
margin-bottom: 40rpx;
padding: 24rpx 32rpx;
display: flex;
align-items: center;
border-radius: 24rpx;
background-color: #f2f2f2;
.label {
flex-shrink: 0;
margin-right: 24rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
background: rgba(77, 77, 77, 0.07);
.icon {
margin: 11rpx 0 0 7rpx;
display: none;
width: 26rpx;
height: 21rpx;
}
}
.content {
font-size: 32rpx;
color: #666666;
font-weight: bold;
line-height: 48rpx;
}
&.active {
background-color: #cf5375;
.label {
background-color: #ffffff;
.icon {
display: block;
}
}
.content {
color: #fefefe;
}
}
}
}
}
.intense-dose {
padding: 64rpx 48rpx;
margin: 21rpx 40rpx 0;
width: calc(100% - 172rpx);
background-color: #fff;
border: 1px solid #dfe2e7;
border-radius: 24rpx;
box-shadow: 0rpx 4rpx 32rpx 10rpx #f2dee3;
.c-icon {
display: block;
margin: 0 auto;
width: 144rpx;
height: 144rpx;
}
.title {
margin-top: 44rpx;
font-size: 48rpx;
color: #333333;
font-weight: bold;
text-align: center;
}
.en-title {
margin-top: 10rpx;
font-size: 24rpx;
color: #cccccc;
text-align: center;
}
.tip {
margin: 28rpx auto 0;
font-size: 28rpx;
color: #333333;
width: 502rpx;
height: 74rpx;
display: flex;
align-items: center;
justify-content: center;
background: #f2f2f2;
border-radius: 38rpx;
}
.wrap {
margin-top: 40rpx;
.w-title {
font-size: 32rpx;
color: #333333;
font-weight: bold;
text-align: center;
}
.w-num {
margin-top: 20rpx;
text-align: center;
font-size: 72rpx;
color: #333333;
font-weight: bold;
.sub {
font-size: 36rpx;
}
}
}
.select {
margin-top: 30rpx;
display: flex;
gap: 14rpx;
.item {
position: relative;
flex-shrink: 0;
padding: 20rpx 10rpx 8rpx;
width: 64rpx;
text-align: center;
background: #f2f2f2;
border-radius: 16rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.i-icon {
width: 48rpx;
height: 48rpx;
}
.input {
font-size: 16rpx;
line-height: 24rpx;
height: 48rpx;
overflow: hidden;
color: #cccccc;
}
.name {
font-size: 28rpx;
color: #666666;
}
.i-active {
position: absolute;
right: -14rpx;
top: -14rpx;
width: 28rpx;
height: 28rpx;
background-color: #e04775;
border-radius: 50%;
color: #fff;
font-size: 20rpx;
}
}
}
.s-tip {
margin-top: 30rpx;
font-size: 22rpx;
color: #cccccc;
}
}
.footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
padding: 20rpx 40rpx calc(env(safe-area-inset-bottom) + 20rpx);
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
background-color: #fff;
box-shadow: 0 -10rpx 10rpx #faf1f3;
.prev {
margin: 0 45rpx;
display: flex;
align-content: inherit;
justify-content: center;
.icon {
margin-right: 20rpx;
width: 56rpx;
height: 56rpx;
vertical-align: middle;
}
.name {
font-size: 30rpx;
line-height: 50rpx;
color: #cf5375;
font-weight: bold;
}
}
.submit {
flex: 1;
height: 80rpx;
background: #cf5375;
border-radius: 24rpx 24rpx 24rpx 24rpx;
text-align: center;
line-height: 80rpx;
font-size: 34rpx;
color: #ffffff;
font-weight: bold;
}
}
}
}
.popup {
padding: 44rpx 40rpx;
.p-title {
font-size: 32rpx;
color: #333333;
font-weight: bold;
}
.input-wrap {
margin-top: 28rpx;
padding: 0 20rpx;
display: flex;
align-items: center;
border-radius: 24rpx;
border: 1rpx solid #d7d7d7;
.input {
flex: 1;
height: 84rpx;
font-size: 28rpx;
}
.sub {
flex-shrink: 0;
font-size: 28rpx;
color: #cccccc;
}
}
.p-footer {
margin-top: 38rpx;
padding: 0 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
.cancel {
width: 294rpx;
height: 80rpx;
font-size: 34rpx;
color: #cf5375;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
border-radius: 24rpx;
border: 2rpx solid #cf5375;
}
.sure {
width: 294rpx;
height: 80rpx;
font-size: 34rpx;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
border-radius: 24rpx;
border: 2rpx solid #CF5375;
background-color: #CF5375;
}
}
}

412
src/patient/pages/adlTest/index.ts

@ -1,412 +0,0 @@
const app = getApp<IAppOption>();
Page({
data: {
nav: 0,
showSubmit: false,
popupShow: false,
popupFocus: false,
SteroidDailyDose: 0,
popupHormone: '',
question: [
{
title: '第一题:说话',
key: 'TalkingScore',
type: 'question',
icon: '1',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '间或有点含糊或有鼻音',
},
{
id: '3',
title: '经常含糊不清或者有鼻音,但是别人还能听懂',
},
{
id: '4',
title: '别人听不太懂',
},
],
},
{
title: '第二题:咀嚼',
key: 'ChewScore',
type: 'question',
icon: '2',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '咀嚼固体食物会感到疲劳',
},
{
id: '3',
title: '咀嚼松软食物会感到疲劳',
},
{
id: '4',
title: '使用喂食管进食,如鼻胃管胃肠管等',
},
],
},
{
title: '第三题:吞咽',
key: 'SwallowScore',
type: 'question',
icon: '4',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '偶尔会噎到',
},
{
id: '3',
title: '经常会噎到,因而需要改变饮食习惯',
},
{
id: '4',
title: '使用喂食管进食,如鼻胃管胃肠管等',
},
],
},
{
title: '第四题:呼吸',
key: 'BreathScore',
type: 'question',
icon: '5',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '劳累后感到气促或呼吸不畅',
},
{
id: '3',
title: '静止时感到气促或呼吸不畅',
},
{
id: '4',
title: '依赖呼吸机',
},
],
},
{
title: '第五题 刷牙或梳头的能力受损',
key: 'BrushTeethAndCombHairScore',
type: 'question',
icon: '6',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '需要多费些力气但是不需要停下来',
},
{
id: '3',
title: '需要停下来休息才能完成',
},
{
id: '4',
title: '无法自己完成',
},
],
},
{
title: '第六题 从椅子上起身能力受损',
key: 'GetUpFromChairScore',
type: 'question',
icon: '3',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '轻度受损,有时需要用手帮忙',
},
{
id: '3',
title: '中度受损,总是需要用手帮忙',
},
{
id: '4',
title: '严重受损,需要他人帮助',
},
],
},
{
title: '第七题:复视/重影',
key: 'DoubleVisionScore',
type: 'question',
icon: '7',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '有,但不是每天',
},
{
id: '3',
title: '每天,但不是持续一整天',
},
{
id: '4',
title: '持续有',
},
],
},
{
title: '第八题:眼睑下垂',
key: 'DroopyEyelidsScore',
type: 'question',
icon: '8',
list: [
{
id: '1',
title: '正常',
},
{
id: '2',
title: '有,但不是每天',
},
{
id: '3',
title: '每天,但不是持续一整天',
},
{
id: '4',
title: '持续有',
},
],
},
{
title: '第九题:激素用量',
key: 'SteroidDailyDose',
type: 'intenseDose',
icon: '9',
},
] as {
title: string;
key: string;
icon: string;
type: string;
list: {
id: string;
title: string;
active?: boolean;
}[];
}[],
params: {},
m_d: '',
nrdl: '',
focus: false,
},
onLoad(options) {
const SystemInfo = app.globalSystemInfo;
if (SystemInfo) {
const { bottom } = SystemInfo.capsulePosition;
this.setData({
bottom,
});
}
this.setData({
m_d: options.m_d,
nrdl: options.nrdl,
});
app.waitLogin({ type: [0, 1] }).then(() => {
this.handleMp(this.data.nav);
});
},
handleSelect(e) {
const { index } = e.currentTarget.dataset;
const { nav, question } = this.data;
const questionItem = question[nav];
questionItem.list = questionItem.list.map((item, i) => {
if (index == i) {
item.active = true;
} else {
item.active = false;
}
return item;
});
this.setData({
[`question[${nav}]`]: questionItem,
});
setTimeout(() => {
this.setData({
nav: nav == 8 ? 8 : nav + 1,
showSubmit: nav == 8,
});
this.handleMp(this.data.nav);
}, 500);
},
stopTouchMove() {
return false;
},
bindtransition() {
this.setData({
nav: this.data.nav,
});
},
handlePrev() {
const { nav } = this.data;
this.setData({
nav: nav - 1,
});
},
handleSubmit() {
wx.showLoading({
title: '提交中',
});
const { question } = this.data;
const params = {};
question.forEach((item) => {
if (item.type === 'intenseDose') {
params[item.key] = this.data[item.key];
} else {
params[item.key] = item.list.findIndex((subItem) => subItem.active);
}
});
this.setData({
params,
});
},
handleFinish(e) {
const that = this;
const url = `${app.globalData.upFileUrl}?r=file-service/upload-img`;
wx.uploadFile({
filePath: e.detail,
name: 'file',
url,
success(res) {
const data = JSON.parse(res.data);
that.submitCreate(data.data.Url);
},
});
},
handleHorSelect(e) {
const { id } = e.currentTarget.dataset;
const { SteroidDailyDose } = this.data;
if (!id) {
this.setData({
popupHormone: SteroidDailyDose > 0 ? SteroidDailyDose : '',
popupShow: true,
});
setTimeout(() => {
this.setData({
popupFocus: true,
});
}, 300);
return;
}
this.setData({
SteroidDailyDose: id * 1,
showSubmit: Boolean(id),
});
},
handlePopupCancel() {
this.setData({
popupShow: false,
popupFocus: false,
});
},
handlePopupSure() {
// if (!Number(this.data.popupHormone)) {
// wx.showToast({
// icon: "none",
// title: "请输入激素用量",
// });
// return;
// }
this.setData({
SteroidDailyDose: Number(this.data.popupHormone),
showSubmit: true,
});
this.handlePopupCancel();
},
submitCreate(Url) {
const params = this.data.params;
wx.ajax({
method: 'POST',
url: '?r=zd/adl/create',
data: params,
}).then((res) => {
this.updateAdlImg(res.Id, Url, res);
});
},
updateAdlImg(id, Url, params) {
const { m_d, nrdl } = this.data;
wx.ajax({
method: 'POST',
url: '?r=zd/adl/update-img',
data: {
Id: id,
ImgUrl: Url,
},
}).then(() => {
wx.hideLoading();
wx.setStorageSync('adlResultInfo', params.ScoreInfo);
wx.redirectTo({
url: `/patient/pages/adlResult/index?id=${id}&reset=1&m_d=${m_d}&nrdl=${nrdl}&wy=${Number(params.sendWeiYi)}&idafa=${Number(params.inviteDoctorAndFirstAdl)}`,
});
});
},
handleInput(e) {
if (e.detail.value) {
this.setData({
// eslint-disable-next-line regexp/optimal-quantifier-concatenation
popupHormone: e.detail.value.replace(/^(-)?(\d{0,3})(\.\d?)?.*$/, '$1$2$3'),
});
}
},
handleBack() {
wx.navigateBack();
},
onShareAppMessage() {
return {
title: 'MG-ADL测评表:评估重症肌无力患者症状对生活质量的影响',
path: '/patient/pages/adl/index',
};
},
handleMp(index) {
const PageName = {
0: 'PG_PATIENTASSESSMENTQ1',
1: 'PG_PATIENTASSESSMENTQ2',
2: 'PG_PATIENTASSESSMENTQ3',
3: 'PG_PATIENTASSESSMENTQ4',
4: 'PG_PATIENTASSESSMENTQ5',
5: 'PG_PATIENTASSESSMENTQ6',
6: 'PG_PATIENTASSESSMENTQ7',
7: 'PG_PATIENTASSESSMENTQ8',
8: 'PG_PATIENTASSESSMENTQ9',
}[index];
},
});

101
src/patient/pages/adlTest/index.wxml

@ -1,101 +0,0 @@
<view
class="page"
style="background: url({{imageUrl}}za-images//1/adl-test-bg.png?t={{Timestamp}}) no-repeat top center / 100% ;padding-top:{{bottom}}px"
>
<navBar background="{{background}}" title="测评" back bind:back="handleBack" fixed></navBar>
<view class="page-container">
<view class="nav">
<view class="nav-title">测评{{nav+1}}/9</view>
<view class="nav-wrap">
<view class="nav-item {{index<=nav && 'active'}}" wx:for="{{9}}" wx:key="index"></view>
</view>
</view>
<swiper class="swiper" current="{{nav}}" bindtransition="bindtransition">
<!-- catchtouchmove="stopTouchMove" -->
<swiper-item wx:for="{{question}}" wx:key="index" wx:for-item="questionItem">
<view class="container" wx:if="{{questionItem.type==='question'}}">
<image class="c-icon" src="{{imageUrl}}za-images/1/adl-icon{{questionItem.icon}}.png?t={{Timestamp}}"></image>
<view class="title">{{questionItem.title}}</view>
<view class="en-title">Please answer the question below</view>
<view class="question">
<view
class="question-item {{item.active && 'active'}}"
wx:for="{{question[nav].list}}"
wx:key="id"
catch:tap="handleSelect"
data-index="{{index}}"
>
<view class="label">
<image class="icon" src="{{imageUrl}}za-images/1/question-true.png?t={{Timestamp}}"></image>
</view>
<view class="content">{{item.title}}</view>
</view>
</view>
</view>
<view class="intense-dose" wx:elif="{{questionItem.type==='intenseDose'}}">
<image class="c-icon" src="{{imageUrl}}za-images/1/adl-icon{{questionItem.icon}}.png?t={{Timestamp}}"></image>
<view class="title">{{questionItem.title}}</view>
<view class="en-title">Please answer the question below</view>
<view class="wrap">
<view class="w-title">请选择您最近每天的激素用量</view>
<view class="w-num">
{{SteroidDailyDose}}
<text class="sub">mg</text>
</view>
</view>
<view class="select">
<view class="item" wx:for="{{5}}" wx:key="index" data-id="{{(item+1)*5}}" bind:tap="handleHorSelect">
<image class="i-icon" src="{{imageUrl}}za-images/double-standard/adl-drug.png?t={{Timestamp}}"></image>
<view class="name">{{item+1}}片</view>
<view wx:if="{{SteroidDailyDose===(item+1)*5}}" class="i-active"><van-icon name="success" /></view>
</view>
<view class="item" bind:tap="handleHorSelect">
<view class="input">{{SteroidDailyDose || '请输入其它毫克'}}</view>
<view class="name">其它</view>
<view wx:if="{{SteroidDailyDose > 25 || SteroidDailyDose%5 !== 0 }}" class="i-active">
<van-icon name="success" />
</view>
</view>
</view>
<view class="s-tip">
说明:此处按醋酸泼尼松片用量计算,每片为5mg
<view>若其它激素药物根据规格做等量换算,如5mg醋酸泼尼松 =4mg 甲泼尼龙*</view>
</view>
</view>
</swiper-item>
</swiper>
<view class="footer" wx:if="{{nav>0}}">
<view class="prev" bind:tap="handlePrev">
<image class="icon" src="{{imageUrl}}za-images/1/question-prev.png?t={{Timestamp}}"></image>
<view class="name">上一题</view>
</view>
<view class="submit" wx:if="{{nav==8 && showSubmit}}" bind:tap="handleSubmit">完成</view>
</view>
</view>
</view>
<customTable params="{{params}}" bind:finish="handleFinish"></customTable>
<van-popup show="{{ popupShow }}" position="bottom" bind:close="handlePopupCancel" round>
<view class="popup">
<view class="p-title">请输入当天的激素用量</view>
<view class="input-wrap">
<input
class="input"
type="digit"
maxlength="{{5}}"
value="{{popupHormone}}"
placeholder="请输入"
focus="{{popupFocus}}"
cursor-spacing="{{140}}"
always-embed
bind:input="handleInput"
/>
<view class="sub">mg/天</view>
</view>
<view class="p-footer">
<view class="cancel" bind:tap="handlePopupCancel">取消</view>
<view class="sure" bind:tap="handlePopupSure">确认</view>
</view>
</view>
</van-popup>

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

@ -17,75 +17,7 @@ Page({
this.setData({ this.setData({
id: options.id, id: options.id,
}) })
this.handleToggleSite()
})
},
handleToggleSite() {
const that = this
if (!this.data.LNG) {
wx.getSetting({
success(res) {
if (
res.authSetting['scope.userFuzzyLocation'] != undefined &&
res.authSetting['scope.userFuzzyLocation'] == true
) {
//获取当前位置
that.getFuzzyLocation()
} else if (res.authSetting['scope.userFuzzyLocation'] == undefined) {
//获取当前位置
that.getFuzzyLocation()
} else {
wx.showModal({
title: '请求授权当前位置',
content: '需要获取您的地理位置,请确认授权',
confirmColor: '#8c75d0',
success(res) {
if (res.cancel) {
//取消授权
wx.showToast({
title: '拒绝授权',
icon: 'none',
duration: 1000,
})
that.getFuzzyLocation()
} else if (res.confirm) {
//确定授权,通过wx.openSetting发起授权请求
wx.openSetting({
success(res) {
if (res.authSetting['scope.userFuzzyLocation'] == true) {
that.getFuzzyLocation()
} else {
that.getFuzzyLocation()
}
},
})
}
},
})
}
},
})
} else {
that.setData({
LNG: '',
LAT: '',
})
this.getDetail() this.getDetail()
}
},
getFuzzyLocation() {
const that = this
wx.getFuzzyLocation({
success(res) {
that.setData({
LNG: res.longitude,
LAT: res.latitude,
})
that.getDetail()
},
fail(_err) {
that.getDetail()
},
}) })
}, },
getDetail() { getDetail() {
@ -94,16 +26,15 @@ Page({
url: '?r=zd/doctor/detail', url: '?r=zd/doctor/detail',
data: { data: {
Id: this.data.id, Id: this.data.id,
lng: this.data.LNG,
lat: this.data.LAT,
}, },
}).then((res) => { }).then((res) => {
let weekName = '' let weekName = ''
if (res.ClinicType == 2) { if (res.ClinicType == 2) {
weekName = res.Clinic weekName = res.Clinic
} else { }
else {
weekName = (res.Clinic ? res.Clinic : []) weekName = (res.Clinic ? res.Clinic : [])
.map((subItem: { weekday: string | number; timeType: string | number }) => { .map((subItem: { weekday: string | number, timeType: string | number }) => {
const week = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] const week = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
const timeDay = { 1: '上午', 2: '下午' } const timeDay = { 1: '上午', 2: '下午' }
return `${week[Number(subItem.weekday) - 1]}${timeDay[subItem.timeType]}` return `${week[Number(subItem.weekday) - 1]}${timeDay[subItem.timeType]}`

5
src/patient/pages/hormones/index.json

@ -1,3 +1,6 @@
{ {
"usingComponents": {} "usingComponents": {
"navbar": "/components/navbar/index",
"van-popup": "@vant/weapp/popup/index"
}
} }

257
src/patient/pages/hormones/index.scss

@ -0,0 +1,257 @@
page {
background-color: #f7f1ff;
}
.nav-back {
color: #fff;
font-size: 36rpx;
}
.nav-title {
color: #fff;
}
.page {
height: 100vh;
box-sizing: border-box;
.swiper {
height: 1272rpx;
.container {
padding: 182rpx 94rpx 100rpx;
width: 100%;
height: 1272rpx;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
.title {
flex-shrink: 0;
font-size: 48rpx;
color: #211d2e;
font-weight: bold;
text-align: center;
line-height: 68rpx;
}
.spread {
flex: 1;
.num {
margin-top: 10rpx;
display: flex;
justify-content: center;
align-items: baseline;
font-size: 104rpx;
color: #211d2e;
font-weight: bold;
.sub {
font-size: 48rpx;
color: #211d2e;
font-weight: normal;
}
}
.list {
margin-top: 136rpx;
.l-item {
margin-bottom: 32rpx;
padding: 26rpx;
font-size: 40rpx;
color: #211d2e;
text-align: center;
background: linear-gradient(7deg, #ffffff 0%, #f8f2ff 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.06);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
&.active {
background: #b982ff;
color: #fff;
}
}
}
.list-two {
margin-top: 56rpx;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 32rpx 26rpx;
.lt-item {
padding: 26rpx;
font-size: 40rpx;
color: #211d2e;
text-align: center;
background: linear-gradient(7deg, #ffffff 0%, #f8f2ff 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.06);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
&.active {
background: #b982ff;
color: #fff;
}
}
}
.list-mg {
margin-top: 40rpx;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 36rpx 16rpx;
.lm-item {
position: relative;
padding: 60rpx 26rpx 20rpx;
font-size: 36rpx;
color: #211d2e;
line-height: 1;
text-align: center;
background: linear-gradient(7deg, #ffffff 0%, #f8f2ff 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.06);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.icon {
position: absolute;
top: -28rpx;
left: 50%;
transform: translateX(-50%);
width: 76rpx;
height: 76rpx;
}
&.other {
padding: 40rpx 26rpx;
.icon {
display: none;
}
}
&.active {
background: #b982ff;
color: #fff;
}
}
}
.custom-input {
margin-top: 32rpx;
background: linear-gradient(7deg, #ffffff 0%, #f8f2ff 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.06);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
display: flex;
align-items: center;
justify-content: center;
gap: 32rpx;
line-height: 108rpx;
.input {
padding: 0;
height: 108rpx;
text-align: center;
min-width: 3em;
max-width: 4em;
color: #211D2E;
}
.palce-input{
color: #ADACB2;
}
}
.description {
margin-top: 32rpx;
font-size: 28rpx;
color: #211d2e;
line-height: 38rpx;
}
}
.pre-btn {
flex-shrink: 0;
margin-top: 100rpx;
height: 108rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 40rpx;
color: #b982ff;
background: #ffffff;
border-radius: 100rpx 100rpx 100rpx 100rpx;
border: 2rpx solid #b982ff;
}
.end {
flex-shrink: 0;
margin-top: 52rpx;
display: flex;
gap: 28rpx;
.pre {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 108rpx;
font-size: 40rpx;
color: #b982ff;
background: #ffffff;
border-radius: 100rpx 100rpx 100rpx 100rpx;
border: 2rpx solid #b982ff;
box-sizing: border-box;
}
.submit {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 108rpx;
font-size: 40rpx;
color: #ffffff;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
}
}
}
}
.popup {
padding: 44rpx 40rpx;
.p-title {
font-size: 32rpx;
color: #333333;
font-weight: bold;
}
.input-wrap {
margin-top: 28rpx;
padding: 0 20rpx;
display: flex;
align-items: center;
border-radius: 24rpx;
border: 1rpx solid #d7d7d7;
.input {
flex: 1;
height: 84rpx;
font-size: 28rpx;
}
.sub {
flex-shrink: 0;
font-size: 28rpx;
color: #cccccc;
}
}
.p-footer {
margin-top: 38rpx;
padding: 0 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
.cancel {
width: 294rpx;
height: 88rpx;
font-size: 36rpx;
color: #b982ff;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
border-radius: 100rpx;
border: 2rpx solid #b982ff;
box-sizing: border-box;
}
.sure {
width: 294rpx;
height: 88rpx;
font-size: 34rpx;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
border-radius: 100rpx;
background: linear-gradient(197deg, #ffbcf9 0%, #b982ff 100%);
}
}
}

211
src/patient/pages/hormones/index.ts

@ -1,8 +1,213 @@
const _app = getApp<IAppOption>(); const app = getApp<IAppOption>()
Page({ Page({
data: {
id: '',
type: 1,
nav: 0,
popupShow: false,
popupFocus: false,
popupHormone: '',
form: {
medicationMethod: '',
oralMonth: '',
injectionWeek: '',
injectionTimes: '',
dosage: '',
},
question: {
nav0: {
key: 'medicationMethod',
list: {},
},
nav11: {
key: 'oralMonth',
list: {},
},
nav12: {
key: 'dosage',
list: {
5: '1片',
10: '2片',
15: '3片',
20: '4片',
25: '5片',
other: '其他',
},
},
nav21: {
key: 'injectionWeek',
list: {
1: '1周',
2: '2周',
3: '3周',
4: '4周',
5: '5周',
6: '6周',
},
},
nav22: {
key: 'dosage',
list: {
250: '250mg',
500: '500mg',
750: '750mg',
1000: '1000mg',
},
},
nav31: {
key: 'injectionTimes',
list: {
1: '1次',
2: '2次',
3: '3次',
},
},
nav32: {
key: 'dosage',
list: {
20: '20mg',
30: '30mg',
40: '40mg',
},
},
},
params: {},
medicationMethodList: {},
monthList: {},
focus: false,
},
onLoad(options) {
app.waitLogin({ type: [1] }).then(() => {
this.getBaseInfo()
if (Number(options.id) > 0) {
this.getDetail(options.id)
wx.showToast({
icon: 'none',
title: '每日仅录入1次,您可修改已录信息',
})
}
})
},
getBaseInfo() {
const { question } = this.data
wx.ajax({
method: 'GET',
url: '?r=xd/hormone-dosage/base-info',
data: {}, data: {},
onLoad() {}, }).then((res) => {
}); question.nav0.list = res.medicationMethodList
question.nav11.list = res.monthList
this.setData({
question,
})
})
},
getDetail(id) {
wx.ajax({
method: 'GET',
url: '?r=xd/hormone-dosage/get-record',
data: {
recordId: id,
},
}).then((res) => {
const form = {
medicationMethod: res.medicationMethod,
oralMonth: res.oralMonth,
injectionWeek: res.injectionWeek,
injectionTimes: res.injectionTimes,
dosage: res.dosage,
}
this.setData({
id,
form,
})
})
},
handleSelect(e) {
const { key, value } = e.currentTarget.dataset
const { nav } = this.data
if (value == 'other') {
this.setData({
popupShow: true,
popupFocus: true,
})
return
}
this.setData({
[`form.${key}`]: value,
})
setTimeout(() => {
this.setData({
nav: nav == 2 ? 2 : nav + 1,
})
}, 500)
},
bindtransition() {
this.setData({
nav: this.data.nav,
})
},
handlePrev() {
const { nav } = this.data
this.setData({
nav: nav - 1,
})
},
handleBlur(e) {
console.log('DEBUGPRINT[133]: index.ts:160: e=', e)
const { nav } = this.data
const { key } = e.currentTarget.dataset
this.setData({
[`form.${key}`]: e.detail.value,
})
setTimeout(() => {
this.setData({
nav: nav == 2 ? 2 : nav + 1,
})
}, 500)
},
handlePopupCancel() {
this.setData({
popupShow: false,
popupFocus: false,
})
},
handlePopupSure() {
this.handlePopupCancel()
},
handleSubmit() {
const { id, form, question } = this.data
wx.ajax({
method: 'POST',
url: id ? '?r=xd/hormone-dosage/update' : '?r=xd/hormone-dosage/create',
data: {
recordId: id,
...form,
},
loading: true,
}).then(() => {
wx.redirectTo({
url: `/patient/pages/hormonesResult/index?medicationMethod=${form.medicationMethod}&oralMonth=${question.nav11.list[form.oralMonth]}&injectionWeek=${form.injectionWeek}&injectionTimes=${form.injectionTimes}&dosage=${Number(form.medicationMethod) == 1 ? Number(form.dosage) * 7 : form.dosage}`,
})
})
},
handleBack() {
wx.navigateBack({
fail() {
wx.reLaunch({
url: '/patient/pages/index/index',
})
},
})
},
})
export {} export {}

307
src/patient/pages/hormones/index.wxml

@ -1,2 +1,305 @@
<!--pages/story/index.wxml--> <navbar custom-style="background:{{background}};" fixed>
<text>pages/story/index.wxml</text> <van-icon class="nav-back" name="arrow-left" slot="left" bind:tap="handleBack" />
<view class="nav-title" slot="title">激素量表</view>
</navbar>
<view
class="page"
style="background: url('{{imageUrl}}bg37.png?t={{Timestamp}}') no-repeat top center/100% 1624rpx;padding-top:{{pageTop+18}}px;"
>
<swiper class="swiper" current="{{nav}}" bindtransition="bindtransition">
<swiper-item>
<view class="container" style="background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center/100%">
<view class="title">
最近一周
<view></view>
您的激素用药方式
</view>
<view class="spread">
<view class="list">
<view
wx:for="{{question['nav0'].list}}"
wx:key="index"
class="l-item {{form[question['nav0'].key]==index && 'active'}}"
data-key="{{question['nav0'].key}}"
data-value="{{index}}"
bind:tap="handleSelect"
>
{{item}}
</view>
</view>
</view>
</view>
</swiper-item>
<block wx:if="{{form.medicationMethod==1}}">
<!-- 11 -->
<swiper-item>
<view
class="container"
style="background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="title">
您已持续
<view></view>
口服激素
</view>
<view class="spread">
<view class="list-two">
<view
wx:for="{{question['nav11'].list}}"
wx:key="index"
class="lt-item {{form[question['nav11'].key]==index && 'active'}}"
data-key="{{question['nav11'].key}}"
data-value="{{index}}"
bind:tap="handleSelect"
>
{{item}}
</view>
</view>
</view>
<view class="pre-btn" bind:tap="handlePrev">上一页</view>
</view>
</swiper-item>
<!-- 12 -->
<swiper-item>
<view
class="container"
style="background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="title">
最近一周
<view></view>
您每天的激素用量
</view>
<view class="spread">
<view class="num">
{{form.dosage}}
<view class="sub">mg</view>
</view>
<view class="list-mg">
<view
wx:for="{{question['nav12'].list}}"
wx:key="index"
class="lm-item {{index=='other' && 'other'}} {{form[question['nav12'].key]==index && 'active'}}"
data-key="{{question['nav12'].key}}"
data-value="{{index}}"
bind:tap="handleSelect"
>
<image class="icon" src="{{imageUrl}}icon103.png?t={{Timestamp}}"></image>
{{item}}
</view>
</view>
<view class="description">
<view>说明:</view>
<view>此处按醋酸泼尼松片用量计算,每片为5mg</view>
若其它激素药物根据规格做等量换算,如5mg醋酸泼尼松 =4mg甲泼尼龙*
</view>
</view>
<view class="end">
<view class="pre" bind:tap="handlePrev">上一步</view>
<view class="submit" bind:tap="handleSubmit">提交</view>
</view>
</view>
</swiper-item>
</block>
<block wx:if="{{form.medicationMethod==2}}">
<!-- 21 -->
<swiper-item>
<view
class="container"
style="background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="title">
当前疗程内
<view></view>
您已输注
</view>
<view class="spread">
<view class="list-two">
<view
wx:for="{{question['nav21'].list}}"
wx:key="index"
class="lt-item {{form[question['nav21'].key]==index && 'active'}}"
data-key="{{question['nav21'].key}}"
data-value="{{index}}"
bind:tap="handleSelect"
>
{{item}}
</view>
</view>
<view class="custom-input">
<input
type="number"
class="input"
placeholder-class="palce-input"
confirm-type="done"
maxlength="{{2}}"
placeholder="请输入"
cursor-spacing="{{140}}"
data-key="{{question['nav21'].key}}"
value="{{form[question['nav21'].key]}}"
bindblur="handleBlur"
/>
<view class="sub">周</view>
</view>
</view>
<view class="pre-btn" bind:tap="handlePrev">上一页</view>
</view>
</swiper-item>
<!-- 22 -->
<swiper-item>
<view
class="container"
style="background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="title">
最近一周
<view></view>
您的激素用量
</view>
<view class="spread">
<view class="list-two">
<view
wx:for="{{question['nav22'].list}}"
wx:key="index"
class="lt-item {{form[question['nav22'].key]==index && 'active'}}"
data-key="{{question['nav22'].key}}"
data-value="{{index}}"
bind:tap="handleSelect"
>
{{item}}
</view>
</view>
<view class="custom-input">
<input
type="number"
class="input"
placeholder-class="palce-input"
confirm-type="done"
maxlength="{{4}}"
placeholder="请输入"
cursor-spacing="{{140}}"
value="{{form[question['nav22'].key]}}"
bindblur="handleBlur"
data-key="{{question['nav22'].key}}"
/>
<view class="sub">mg</view>
</view>
</view>
<view class="end">
<view class="pre" bind:tap="handlePrev">上一步</view>
<view class="submit" bind:tap="handleSubmit">提交</view>
</view>
</view>
</swiper-item>
</block>
<block wx:if="{{form.medicationMethod==3}}">
<!-- 31 -->
<swiper-item>
<view
class="container"
style="background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="title">当前疗程内,您已输注</view>
<view class="spread">
<view class="list">
<view
wx:for="{{question['nav31'].list}}"
wx:key="index"
class="l-item {{form[question['nav31'].key]==index && 'active'}}"
data-key="{{question['nav31'].key}}"
data-value="{{index}}"
bind:tap="handleSelect"
>
{{item}}
</view>
</view>
<view class="custom-input">
<input
type="number"
class="input"
placeholder-class="palce-input"
confirm-type="done"
maxlength="{{2}}"
placeholder="请输入"
cursor-spacing="{{140}}"
data-key="{{question['nav31'].key}}"
value="{{form[question['nav31'].key]}}"
bindblur="handleBlur"
/>
<view class="sub">次</view>
</view>
</view>
<view class="pre-btn" bind:tap="handlePrev">上一页</view>
</view>
</swiper-item>
<!-- 32 -->
<swiper-item>
<view
class="container"
style="background: url('{{imageUrl}}bg38.png?t={{Timestamp}}') no-repeat top center/100%"
>
<view class="title">最近一周您的激素用量</view>
<view class="spread">
<view class="list">
<view
wx:for="{{question['nav32'].list}}"
wx:key="index"
class="l-item {{form[question['nav32'].key]==index && 'active'}}"
data-key="{{question['nav32'].key}}"
data-value="{{index}}"
bind:tap="handleSelect"
>
{{item}}
</view>
</view>
<view class="custom-input">
<input
type="number"
class="input"
placeholder-class="palce-input"
confirm-type="done"
maxlength="{{3}}"
placeholder="请输入"
cursor-spacing="{{140}}"
value="{{form[question['nav32'].key]}}"
bindblur="handleBlur"
data-key="{{question['nav32'].key}}"
/>
<view class="sub">mg</view>
</view>
</view>
<view class="end">
<view class="pre" bind:tap="handlePrev">上一步</view>
<view class="submit" bind:tap="handleSubmit">提交</view>
</view>
</view>
</swiper-item>
</block>
</swiper>
</view>
<van-popup show="{{ popupShow }}" position="bottom" bind:close="handlePopupCancel" round>
<view class="popup">
<view class="p-title">请输入当天的激素用量</view>
<view class="input-wrap">
<input
class="input"
type="number"
maxlength="{{3}}"
placeholder="请输入"
focus="{{popupFocus}}"
cursor-spacing="{{140}}"
always-embed
data-key="{{question['nav12'].key}}"
value="{{form.dosage}}"
bind:input="handleBlur"
/>
<view class="sub">mg/天</view>
</view>
<view class="p-footer">
<view class="cancel" bind:tap="handlePopupCancel">取消</view>
<view class="sure" bind:tap="handlePopupSure">确认</view>
</view>
</view>
</van-popup>

12
src/patient/pages/hormonesResult/index.scss

@ -41,7 +41,7 @@ page {
} }
} }
.footer { .footer {
margin-top: 22rpx; margin-top: 12rpx;
border-top: 1px solid rgba(255, 255, 255, 0.44); border-top: 1px solid rgba(255, 255, 255, 0.44);
padding-top: 22rpx; padding-top: 22rpx;
font-size: 32rpx; font-size: 32rpx;
@ -108,6 +108,9 @@ page {
.content { .content {
font-size: 36rpx; font-size: 36rpx;
color: #211d2e; color: #211d2e;
.a {
color: #b982ff;
}
} }
.container { .container {
margin-top: 32rpx; margin-top: 32rpx;
@ -153,6 +156,11 @@ page {
} }
} }
} }
.link {
margin-top: 32rpx;
font-size: 36rpx;
color: #b982ff;
}
.t-footer { .t-footer {
margin-top: 34rpx; margin-top: 34rpx;
font-size: 32rpx; font-size: 32rpx;
@ -172,7 +180,7 @@ page {
.btn { .btn {
height: 88rpx; height: 88rpx;
font-size: 32rpx; font-size: 32rpx;
color: #FFFFFF; color: #ffffff;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;

39
src/patient/pages/hormonesResult/index.ts

@ -1,13 +1,46 @@
const _app = getApp<IAppOption>() const app = getApp<IAppOption>()
Page({ Page({
data: {}, data: {
onLoad() {}, picText: {
picTextId: '',
},
report: false,
},
onLoad(options) {
this.setData({
medicationMethod: options.medicationMethod,
oralMonth: options.oralMonth,
injectionWeek: options.injectionWeek,
injectionTimes: options.injectionTimes,
dosage: options.dosage,
report: options.report == '1',
})
app.waitLogin({ type: [1] }).then(() => {
this.getPicText(options.medicationMethod)
})
},
getPicText(mid) {
wx.ajax({
method: 'GET',
url: '?r=xd/hormone-dosage/get-pic-text',
data: { medicationMethod: mid },
}).then((res) => {
this.setData({
picText: res,
})
})
},
handleReport() { handleReport() {
wx.redirectTo({ wx.redirectTo({
url: '/patient/pages/qolReport/index', url: '/patient/pages/qolReport/index',
}) })
}, },
handlePic() {
wx.navigateTo({
url: `/patient/pages/repositoryDetail/index?id=${this.data.picText.picTextId}`,
})
},
handleBack() { handleBack() {
wx.navigateBack({ wx.navigateBack({
fail() { fail() {

47
src/patient/pages/hormonesResult/index.wxml

@ -7,24 +7,27 @@
class="page" class="page"
style="background: url('{{imageUrl}}bg10.png?t={{Timestamp}}') no-repeat top center/100% 610rpx;padding-top:{{pageTop+22}}px;" style="background: url('{{imageUrl}}bg10.png?t={{Timestamp}}') no-repeat top center/100% 610rpx;padding-top:{{pageTop+22}}px;"
> >
<view class="banner" style="background: url('/images/bg39.png') no-repeat center/100%"> <view class="banner" style="background: url('{{imageUrl}}bg39.png?t={{Timestamp}}') no-repeat center/100%">
<view class="title">本次激素用量为</view> <view class="title">本次激素用量为</view>
<view class="content"> <view class="content">
<view class="num"> <view class="num">
30 {{dosage}}
<view class="sub">mg/周</view> <view class="sub">mg/周</view>
</view> </view>
<view class="tip">*周用量=日用量*7天</view> <view class="tip" wx:if="{{medicationMethod==1}}">*周用量=日用量*7天</view>
</view> </view>
<view class="footer">您已持续口服1-2个月</view> <view class="footer" wx:if="{{medicationMethod==1}}">您已持续口服{{oralMonth}}</view>
<view class="footer" wx:elif="{{medicationMethod==2}}">您已进行{{injectionWeek}}周激素冲击治疗疗程</view>
<view class="footer" wx:elif="{{medicationMethod==3}}">您已进行{{injectionTimes}}次激素局部注射治疗</view>
</view> </view>
<block wx:if="{{medicationMethod==1}}">
<view class="warmth"> <view class="warmth">
<view class="w-header">温馨提醒</view> <view class="w-header">温馨提醒</view>
<view class="w-body"> <view class="w-body">
全身应用糖皮质激素可引起不良反应,程度与用药剂量和用药时间相关。 全身应用糖皮质激素可引起不良反应,程度与用药剂量和用药时间相关。
长期糖皮质激素口服治疗的不良反应发生率大于静脉冲击治疗。 长期糖皮质激素口服治疗的不良反应发生率大于静脉冲击治疗。
</view> </view>
<view class="w-footer">一文了解糖皮质激素的不良反应</view> <view class="w-footer" wx:if="{{picText.picTextTitle}}" bind:tap="handlePic">{{picText.picTextTitle}}</view>
</view> </view>
<view class="tips"> <view class="tips">
<view class="t-header">健康小贴士</view> <view class="t-header">健康小贴士</view>
@ -72,7 +75,39 @@
<view>*提示:本内容仅作参考,如有不适请尽快 线下就医并遵医嘱。</view> <view>*提示:本内容仅作参考,如有不适请尽快 线下就医并遵医嘱。</view>
</view> </view>
</view> </view>
<view class="page-footer"> </block>
<view class="tips" wx:if="{{medicationMethod==2}}">
<view class="t-header">不良反应</view>
<view class="t-body">
<view class="content">
剂量越高短期效果越好,但不良反应也越大,推荐
<text class="a">同一个疗程的累积剂量不超过8.0g</text>
(8000mg)。
<view></view>
若病情需要第二个疗程,建议至少间隔4周。
</view>
</view>
<view class="link" wx:if="{{picText.picTextTitle}}" bind:tap="handlePic">{{picText.picTextTitle}}</view>
<view class="t-footer">
<view>*以上内容参考文献:《中国甲状腺相关眼 病诊断和治疗指南(2022 年)》</view>
<view>*提示:本内容仅作参考,如有不适请尽快 线下就医并遵医嘱。</view>
</view>
</view>
<view class="tips" wx:if="{{medicationMethod==3}}">
<view class="t-header">健康小贴士</view>
<view class="t-body">
<view class="content">
眶内注射可改善眼外肌增粗、复视等症状。眼睑注射可改善眼睑肿胀、上睑退缩等症状。
局部注射可能出现局部皮下组织萎缩、局部药物沉积等不良反应。其中,眶内注射还可能出现眼球破裂、动脉阻塞、视网膜毒性作用、眼压增高等不良反应,应慎重使用。
</view>
</view>
<view class="link" wx:if="{{picText.picTextTitle}}" bind:tap="handlePic">{{picText.picTextTitle}}</view>
<view class="t-footer">
<view>*以上内容参考文献:《中国甲状腺相关眼 病诊断和治疗指南(2022 年)》</view>
<view>*提示:本内容仅作参考,如有不适请尽快 线下就医并遵医嘱。</view>
</view>
</view>
<view class="page-footer" wx:if="{{!report}}">
<view class="btn" bind:tap="handleReport">查看我的健康报告</view> <view class="btn" bind:tap="handleReport">查看我的健康报告</view>
</view> </view>
</view> </view>

34
src/patient/pages/index/index.scss

@ -161,6 +161,40 @@ page {
} }
} }
} }
.hormones {
margin: $page-margin;
position: relative;
height: 228rpx;
.date {
position: absolute;
top: -28rpx;
right: 0;
padding: 0 28rpx;
line-height: 52rpx;
font-size: 24rpx;
color: #ffffff;
border-radius: 86rpx;
background: linear-gradient(177deg, #ffd650 0%, #f48e00 100%);
&::after {
position: absolute;
right: 86rpx;
bottom: -24rpx;
content: '';
width: 0;
height: 0;
border-style: solid;
border-width: 32rpx 16rpx 0 16rpx;
border-color: #f59609 transparent transparent transparent;
}
}
.btn {
position: absolute;
right: 54rpx;
bottom: 18rpx;
width: 236rpx;
height: 80rpx;
}
}
.banner { .banner {
margin: $page-margin; margin: $page-margin;
.swiper { .swiper {

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

@ -15,6 +15,7 @@ Page({
isLogin: 1, isLogin: 1,
qolDetail: {}, qolDetail: {},
hormoneDetail: { recordId: '' },
adlList: [], adlList: [],
adlNum: '', adlNum: '',
@ -176,6 +177,9 @@ Page({
if (item.code == 'adl') { if (item.code == 'adl') {
this.getQol() this.getQol()
} }
if (item.code == 'hormone') {
this.getHormone()
}
if (item.code == 'activity2') { if (item.code == 'activity2') {
this.getActivity(item.configId, item.showNum, 'liveList') this.getActivity(item.configId, item.showNum, 'liveList')
} }
@ -223,6 +227,20 @@ Page({
}) })
}) })
}, },
getHormone() {
wx.ajax({
method: 'GET',
url: '?r=xd/hormone-dosage/get-last-record',
data: {},
}).then((res) => {
this.setData({
hormoneDetail: {
...res,
createTime: dayjs(res.createTime).format('YYYY-MM-DD'),
},
})
})
},
getActivity(ConfigId: string, count: number, key: string) { getActivity(ConfigId: string, count: number, key: string) {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',

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

@ -79,6 +79,22 @@
<image class="icon" src="{{imageUrl}}icon73.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}icon73.png?t={{Timestamp}}"></image>
</view> </view>
</view> </view>
<view
class="hormones"
wx:if="{{card.code == 'hormone' && card.showStatus == 1}}"
style="background: url('{{imageUrl}}bg36.png?t={{Timestamp}}') no-repeat top center/100%"
bind:tap="routerTo"
data-url="/patient/pages/qolReport/index"
>
<view class="date" wx:if="{{hormoneDetail && hormoneDetail.createTime}}">
最近一次录入时间 {{hormoneDetail.createTime}}
</view>
<view
class="btn"
catch:tap="routerTo"
data-url="/patient/pages/hormones/index?id={{hormoneDetail.recordId}}"
></view>
</view>
<view class="live-up-new" wx:if="{{card.code == 'activity2' && card.showStatus == 1 }}"> <view class="live-up-new" wx:if="{{card.code == 'activity2' && card.showStatus == 1 }}">
<view class="header" wx:if="{{card.name}}"> <view class="header" wx:if="{{card.name}}">
<view class="title">{{card.name}}</view> <view class="title">{{card.name}}</view>

13
src/patient/pages/nrdl/index.json

@ -1,13 +0,0 @@
{
"navigationBarTitleText": "艾加莫德医保报销全知道",
"navigationStyle": "custom",
"usingComponents": {
"navBar": "/components/zd-navBar/navBar",
"van-divider": "@vant/weapp/divider/index",
"van-cascader": "@vant/weapp/cascader/index",
"van-popup": "@vant/weapp/popup/index",
"van-icon": "@vant/weapp/icon/index",
"toast": "/components/toast/index",
"timeOut": "/components/timeOut/index"
}
}

286
src/patient/pages/nrdl/index.scss

@ -1,286 +0,0 @@
page {
background-color: #fafafa;
padding-bottom: 80rpx;
}
.page {
.tip {
margin: 708rpx 40rpx 0;
padding: 62rpx 40rpx 38rpx;
background: linear-gradient(180deg, #ffe0ea 0%, #fff 60%, #ffffff 100%);
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.09);
border-radius: 24rpx;
border: 2rpx solid rgba(224, 71, 117, 0.25);
.title {
font-size: 36rpx;
color: #14265d;
font-weight: bold;
&.mt {
margin-top: 44rpx;
}
}
.faild {
margin-top: 16rpx;
padding: 0 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
height: 88rpx;
background: #ffffff;
border-radius: 24rpx;
border: 1rpx solid rgba(224, 71, 117, 0.25);
.input {
flex: 1;
font-size: 32rpx;
}
.placeholder-input {
font-size: 32rpx;
color: #b0b0b0;
}
.btn {
font-size: 32rpx;
color: #cd355f;
}
}
.submit {
position: relative;
margin-top: 66rpx;
height: 96rpx;
text-align: center;
line-height: 96rpx;
font-size: 40rpx;
color: #ffffff;
background: linear-gradient(138deg, #cf5375 0%, #cd355f 100%);
border-radius: 24rpx;
border: 1rpx solid rgba(224, 71, 117, 0.25);
}
.num {
margin-top: 24rpx;
font-size: 32rpx;
color: #ce3962;
text-align: center;
}
.swiper {
margin: 10rpx auto 0;
height: 48rpx;
text-align: center;
.siper-item {
font-size: 30rpx;
color: #666666;
line-height: 87rpx;
display: flex;
align-items: center;
justify-content: center;
}
}
}
.policy {
position: relative;
margin: 38px 40rpx 0;
padding: 68rpx 40rpx;
background: #ffffff;
border-radius: 24rpx;
border: 2rpx solid rgba(224, 71, 117, 0.25);
&-title {
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%, -50%);
font-size: 40rpx;
color: #ffffff;
width: 318rpx;
height: 72rpx;
text-align: center;
line-height: 72rpx;
background: linear-gradient(138deg, #cf5375 0%, #cd355f 100%);
border-radius: 36rpx;
}
&-card {
margin-bottom: 32rpx;
padding: 34rpx 30rpx 0;
border-radius: 24rpx;
background: linear-gradient(180deg, #F5E0E6 0%, #ffffff 100%);
background-size: 100% 100rpx;
background-repeat: no-repeat;
border: 2rpx solid #f4cbd8;
.pc-title {
padding-bottom: 20rpx;
display: flex;
justify-content: space-between;
.name {
font-size: 36rpx;
color: #15275e;
font-weight: bold;
}
.status {
padding: 6rpx 24rpx;
font-size: 30rpx;
line-height: 44rpx;
border-radius: 28rpx;
color: #e04775;
background-color: #f5d7df;
&.active {
color: #ffffff;
background-color: #cd3861;
}
}
}
.none {
padding: 30rpx 0;
font-size: 32rpx;
color: #b0b0b0;
border-top: 1px solid #eeeeee;
}
.row {
margin-top: 24rpx;
.name {
flex-shrink: 0;
font-size: 32rpx;
color: #b0b0b0;
}
.content {
font-size: 32rpx;
color: #15275e;
line-height: 44rpx;
padding-bottom: 32rpx;
}
&:not(:last-of-type) {
border-bottom: 1px solid #efefef;
}
}
.row1 {
display: flex;
justify-content: space-between;
}
.row2 {
.content {
margin-top: 16rpx;
}
}
}
.statement {
margin-top: 32rpx;
&-title {
font-size: 36rpx;
color: #15275e;
font-weight: bold;
}
&-content {
font-size: 32rpx;
color: #b4b4b4;
}
}
&-btn {
margin-top: 32rpx;
width: 590rpx;
height: 84rpx;
font-size: 36rpx;
color: #ffffff;
line-height: 84rpx;
text-align: center;
background: linear-gradient(138deg, #cf5375 0%, #cd355f 100%);
border-radius: 24rpx;
border: 1rpx solid rgba(224, 71, 117, 0.25);
}
}
.module1 {
margin: 32px 40rpx 0;
height: 249rpx;
position: relative;
.money {
position: absolute;
top: 0;
top: 0;
}
.label {
margin-top: 35rpx;
width: 243rpx;
height: 50rpx;
}
.title {
margin-top: 8rpx;
padding-left: 47rpx;
font-size: 40rpx;
font-weight: bold;
color: #12245c;
line-height: 54rpx;
}
.content {
padding-left: 47rpx;
font-size: 40rpx;
color: #12245c;
line-height: 54rpx;
}
}
.module2 {
margin: 24rpx 40rpx 0;
width: calc(100% - 80rpx);
height: 248rpx;
position: relative;
.content {
margin-top: 8rpx;
padding-left: 47rpx;
font-size: 40rpx;
color: #12245c;
line-height: 54rpx;
}
.title {
padding-top: 58rpx;
padding-left: 47rpx;
font-size: 40rpx;
font-weight: bold;
color: #12245c;
line-height: 54rpx;
}
}
.container {
margin: 69rpx 40rpx 0;
padding: 73rpx 43rpx 54rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.09);
border-radius: 24rpx 24rpx 24rpx 24rpx;
.c-title {
margin: -100rpx auto 0;
font-size: 40rpx;
color: #ffffff;
font-weight: bold;
width: 319rpx;
height: 72rpx;
text-align: center;
line-height: 72rpx;
background: linear-gradient(138deg, #cf5375 0%, #cd355f 100%);
border-radius: 36rpx 36rpx 36rpx 36rpx;
}
.module3 {
margin-top: 38rpx;
height: 243rpx;
position: relative;
}
.more {
margin: 48rpx auto 0;
width: 400rpx;
font-size: 32rpx;
color: #666666;
text-align: center;
}
.video1 {
margin: 38rpx auto 0;
display: block;
width: 100%;
height: 331rpx;
object-fit: cover;
border-radius: 24rpx;
}
.video2 {
margin: 38rpx auto 0;
display: block;
width: 100%;
height: 251rpx;
object-fit: cover;
border-radius: 24rpx;
}
}
.img {
display: block;
width: 100%;
}
}

446
src/patient/pages/nrdl/index.ts

@ -1,446 +0,0 @@
const app = getApp<IAppOption>();
import dayjs from "dayjs";
Page({
data: {
NrdlOnePicSwitch: 0,
NrdlCityListSwitch: 0,
NrdlQASwitch: 0,
NrdlOnePicAJMDSwitch: 0,
showProgress: false,
video1Height: null as null | string,
video2Height: null as null | string,
nrdlDetail: {},
cascaderShow: false,
options: [],
areaValue: [],
cascaderName: "",
cascaderValue: "",
fieldNames: { text: "label", value: "value", children: "children" },
hosList: [] as { HospitalName: string; HospitalId: string }[],
hosName: "",
hosIndex: "",
hosValue: "",
OtherHospitalName: "",
toastShow: false,
toastType: "popupNdrlFollow",
toastParams: {} as any,
LAT: "",
LNG: "",
follow: false,
asideOut: false,
asideType: "11",
score: [],
medicalInsurancePolicy: null,
timeToastType: "19",
},
onLoad() {
const SystemInfo = app.globalSystemInfo;
if (SystemInfo) {
const { bottom } = SystemInfo.capsulePosition;
this.setData({
bottom: bottom,
});
}
app.zdWaitLogin().then((_res) => {
this.addOpenRecord();
this.getConfig();
this.getCode();
this.getArea();
this.getNrdlDetail();
this.getAdlScore();
});
},
getAdlScore() {
wx.ajax({
method: "GET",
url: "?r=zd/nrdl/get-score",
data: {},
}).then((res) => {
this.setData({
score: res,
});
});
},
getConfig() {
wx.ajax({
method: "GET",
url: "?r=zd/common/get-config",
data: {},
}).then((res) => {
this.setData({
NrdlOnePicSwitch: res.NrdlOnePicSwitch,
NrdlCityListSwitch: res.NrdlCityListSwitch,
NrdlQASwitch: res.NrdlQASwitch,
NrdlOnePicAJMDSwitch: res.NrdlOnePicAJMDSwitch,
});
});
},
addOpenRecord() {
wx.ajax({
method: "POST",
url: "?r=zd/nrdl/add-open-record&OpenType=1",
data: {},
}).then((res) => {
if (res.CanGetScore) {
this.setData({
asideOut: true,
});
}
});
},
handleDetail(e) {
const { id } = e.currentTarget.dataset;
if (id == 3) {
wx.navigateTo({
url: "/patient/pages/nrdlTable/index",
});
return;
}
wx.navigateTo({
url: `/patient/pages/nrdlDetail/index?id=${id}`,
});
},
getCode() {
wx.ajax({
method: "GET",
url: "?r=zd/common/get-channel-wx-code",
data: { ChannelType: 12 },
}).then((res) => {
this.setData({
["toastParams.code"]: res,
});
});
},
getNrdlDetail() {
wx.ajax({
method: "GET",
url: "?r=zd/nrdl-hospital/detail",
data: {},
}).then((res) => {
res.last10Records = res.last10Records.map((item) => {
return {
...item,
telephone: item.Telephone.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"),
timeNow: dayjs(item.CreateTime).fromNow().replace(" ", ""),
};
});
this.setData({
nrdlDetail: res,
["toastParams.follow"]: res.isFollow,
});
const newRecord = res.newRecord;
if (!Array.isArray(newRecord) && newRecord) {
this.setData({
areaValue: [newRecord.ProvinceId, newRecord.CityId],
cascaderName: `${newRecord.ProvinceName}/${newRecord.CityName}`,
cascaderValue: newRecord.CityId,
hosName:
{
"0": "暂无选定医院",
"-1": "其它医院",
}[newRecord.HospitalId] || newRecord.HospitalName,
hosValue: newRecord.HospitalId,
OtherHospitalName: newRecord.OtherHospitalName,
follow: true,
});
this.getHospitalList();
}
const medicalInsurancePolicy = res.medicalInsurancePolicy;
this.setData({
medicalInsurancePolicy,
});
});
},
handlePlay(e) {
const { id, width, height } = e.currentTarget.dataset;
let query = wx.createSelectorQuery();
query
.select(`#${id}`)
.boundingClientRect((rect) => {
let videoWidth = rect.width;
let videoHeight = videoWidth * (height / width);
if (id === "video1") {
this.setData({
video1Height: videoHeight + "px",
});
}
if (id === "video2") {
this.setData({
video2Height: videoHeight + "px",
});
}
})
.exec();
},
getArea() {
wx.ajax({
method: "GET",
url: "/js/area.json",
isJSON: true,
}).then((res) => {
this.setData({
options: res.map((item) => {
return {
...item,
children: item.children.map((item2) => {
return {
label: item2.label,
value: item2.value,
};
}),
};
}),
});
});
},
handleGetSite() {
const that = this;
wx.getSetting({
success(res) {
if (
res.authSetting["scope.userFuzzyLocation"] != undefined &&
res.authSetting["scope.userFuzzyLocation"] == true
) {
//获取当前位置
that.getFuzzyLocation();
} else if (res.authSetting["scope.userFuzzyLocation"] == undefined) {
//获取当前位置
that.getFuzzyLocation();
} else {
wx.showModal({
title: "请求授权当前位置",
content: "需要获取您的地理位置,请确认授权",
confirmColor: "#cf5375",
success: function (res) {
if (res.cancel) {
//取消授权
wx.showToast({
title: "拒绝授权",
icon: "none",
duration: 1000,
});
} else if (res.confirm) {
//确定授权,通过wx.openSetting发起授权请求
wx.openSetting({
success: function (res) {
if (res.authSetting["scope.userFuzzyLocation"] == true) {
//再次授权,调用wx.getLocation的API
that.getFuzzyLocation();
} else {
wx.showToast({
title: "授权失败",
icon: "none",
duration: 1000,
});
}
},
});
}
},
});
}
},
});
},
getFuzzyLocation() {
const that = this;
wx.getFuzzyLocation({
success(res) {
that.setData({
LNG: res.longitude,
LAT: res.latitude,
});
that.getLocationInfo();
},
fail(err) {
console.log(err);
},
});
},
handleCascader() {
this.setData({
cascaderShow: true,
});
},
onFinish(e) {
console.log(e);
const selectedOptions = e.detail.selectedOptions;
this.setData({
cascaderName: `${selectedOptions[0].label}/${selectedOptions[1].label}`,
cascaderValue: e.detail.value,
areaValue: [selectedOptions[0].value, selectedOptions[1].value],
hosName: "",
hosIndex: "",
hosValue: "",
follow: false,
});
this.getHospitalList();
this.onClose();
},
onClose() {
this.setData({
cascaderShow: false,
});
},
handleToggleSite() {
const that = this;
if (!this.data.LNG) {
} else {
that.setData({
LNG: "",
LAT: "",
});
this.getLocationInfo();
}
},
getLocationInfo() {
wx.ajax({
method: "GET",
url: "?r=zd/nrdl-hospital/location-info",
data: {
lat: this.data.LAT,
lng: this.data.LNG,
},
loading: true,
}).then((res) => {
this.setData({
cascaderName: `${res.ProvinceName}/${res.CityName}`,
cascaderValue: res.CityId,
areaValue: [res.ProvinceId, res.CityId],
hosIndex: "",
hosValue: "",
hosName: "",
follow: false,
});
this.getHospitalList();
});
},
getHospitalList() {
const areaValue = this.data.areaValue;
wx.ajax({
method: "GET",
url: "?r=zd/nrdl-hospital/list",
data: {
ProvinceId: areaValue[0],
CityId: areaValue[1],
},
}).then((res) => {
this.setData({
hosList: [
{
HospitalName: "暂无选定医院",
HospitalId: "0",
},
...res,
{
HospitalName: "其它医院",
HospitalId: "-1",
},
],
});
});
},
handleChangeHos(e) {
const index = e.detail.value;
const hos = this.data.hosList[index];
this.setData({
hosIndex: index,
hosName: hos.HospitalName,
hosValue: hos.HospitalId,
follow: false,
});
if (hos.HospitalId !== "-1") {
this.setData({
OtherHospitalName: "",
});
}
},
handleToastCancel() {
this.setData({
toastShow: false,
});
},
handleSubmit() {
const { areaValue, cascaderName, hosName, hosValue, OtherHospitalName } = this.data;
let title = "";
if (!areaValue.length) {
title = "请选择地区";
}
if (!hosName) {
title = "请选择医院";
}
if (title) {
wx.showToast({
title,
icon: "none",
});
return;
}
wx.ajax({
method: "POST",
url: "?r=zd/nrdl-hospital/add",
data: {
ProvinceId: areaValue[0], //省Id
ProvinceName: cascaderName.split("/")[0], //省份名
CityId: areaValue[1], //城市Id
CityName: cascaderName.split("/")[1], //城市名
HospitalId: hosValue || undefined, //医院id 为空时填0
HospitalName: hosName || undefined, //医院名 为空时,空字符串
OtherHospitalName: OtherHospitalName,
},
}).then((res) => {
this.setData({
follow: true,
});
if (res.rewardScore > 0) {
this.setData({
timeToast: true,
timeToastParams: {
rewardScore: res.rewardScore,
},
});
setTimeout(() => {
this.setData({
timeToast: false,
});
}, 3000);
}
this.getAdlScore();
this.getNrdlDetail();
});
},
handleHos() {
wx.navigateTo({
url: "/patient/pages/doctor/index",
});
this.handleDtpRecord();
},
handleDtpRecord() {
wx.ajax({
method: "POST",
url: "?r=zd/nrdl/add-dtp-pharmacy-click-record",
data: {},
}).then((res) => {
console.log("res: ", res);
});
},
handleBack() {
wx.navigateBack();
},
catchtouchmove() {
return false;
},
});

248
src/patient/pages/nrdl/index.wxml

@ -1,248 +0,0 @@
<view
class="page"
style="background: url({{imageUrl}}za-images//nrdl/nrdl-bg.png?t={{Timestamp}}) no-repeat top center / 100%;padding-top:{{bottom}}px"
>
<navBar color="#364E9E" fixed title="" home="{{false}}" back bind:back="handleBack"></navBar>
<view class="tip">
<view class="title">我的医保所在地</view>
<view class="faild">
<input
class="input"
value="{{cascaderName}}"
bind:tap="handleCascader"
placeholder-class="placeholder-input"
type="text"
disabled
placeholder="请选择查询省份、城市"
/>
<view class="btn" bind:tap="handleGetSite">一键获取</view>
</view>
<view class="title mt">我计划就诊的医院</view>
<picker range="{{hosList}}" range-key="HospitalName" bindchange="handleChangeHos">
<view class="faild">
<input
class="input"
value="{{hosName}}"
placeholder-class="placeholder-input"
type="text"
disabled
placeholder="请选择医院"
/>
<van-icon class="icon" name="arrow-down" color="#CD355F" />
</view>
</picker>
<block wx:if="{{hosValue==='-1'}}">
<view class="title mt">其它医院</view>
<view class="faild">
<input
class="input"
model:value="{{OtherHospitalName}}"
placeholder-class="placeholder-input"
type="text"
maxlength="{{30}}"
focus="{{!OtherHospitalName}}"
cursor-spacing="{{20}}"
placeholder="请输入医院名称"
/>
</view>
</block>
<view class="submit" wx:if="{{follow}}">已关注</view>
<view class="submit" bind:tap="handleSubmit" wx:else>抢先关注</view>
<view class="num">已有{{nrdlDetail.totalPatientNum}}人抢先关注</view>
<swiper class="swiper" autoplay interval="{{1500}}" circular vertical>
<swiper-item
class="siper-item"
wx:for="{{nrdlDetail.last10Records}}"
wx:key="index"
catchtouchmove="catchtouchmove"
>
{{item.telephone}} {{item.timeNow}}关注
</swiper-item>
</swiper>
</view>
<block wx:if="{{follow}}">
<view class="policy" wx:if="{{medicalInsurancePolicy}}">
<view class="policy-title">医保政策</view>
<view class="policy-card">
<view class="pc-title">
<view class="name">住院报销政策</view>
<view class="status active" wx:if="{{medicalInsurancePolicy.IsLocalExecuted==1}}">本地已执行</view>
<view class="status" wx:else>本地待执行</view>
</view>
<view class="row1 row">
<view class="name">可报销日期</view>
<view class="content">{{medicalInsurancePolicy.HospitalizationPolicyReimbursementDate}}</view>
</view>
</view>
<view class="policy-card">
<view class="pc-title">
<view class="name">门诊报销政策</view>
<view class="status active" wx:if="{{medicalInsurancePolicy.OutpatientPolicyIsLocalExecuted==1}}">
本地已执行
</view>
<view class="status" wx:else>本地待执行</view>
</view>
<view class="row1 row">
<view class="name">可报销日期</view>
<view class="content">{{medicalInsurancePolicy.OutpatientPolicyReimbursementDate}}</view>
</view>
<view class="row1 row">
<view class="name">落地政策</view>
<view class="content">{{medicalInsurancePolicy.OutpatientPolicy}}</view>
</view>
<view class="row2 row" wx:if="{{medicalInsurancePolicy.OutpatientPolicyIntroduction}}">
<view class="name">{{medicalInsurancePolicy.OutpatientPolicy}}</view>
<view class="content">{{medicalInsurancePolicy.OutpatientPolicyIntroduction}}</view>
</view>
<view class="row2 row" wx:if="{{medicalInsurancePolicy.OutpatientPolicyRemark}}">
<view class="name">备注说明</view>
<view class="content">{{medicalInsurancePolicy.OutpatientPolicyRemark}}</view>
</view>
</view>
<view class="policy-card">
<view class="pc-title">
<view class="name">双通道药店政策</view>
<view class="status active" wx:if="{{medicalInsurancePolicy.IsDTP==1}}">本地已执行</view>
<view class="status" wx:else>本地待执行</view>
</view>
<view class="row1 row">
<view class="name">可报销日期</view>
<view class="content">{{medicalInsurancePolicy.DTPReimbursementDate}}</view>
</view>
<view class="row2 row" wx:if="{{medicalInsurancePolicy.DTPIntroduction}}">
<view class="name">双通道药店</view>
<view class="content">{{medicalInsurancePolicy.DTPIntroduction}}</view>
</view>
<view class="row2 row" wx:if="{{medicalInsurancePolicy.DTPRemark}}">
<view class="name">备注说明</view>
<view class="content">{{medicalInsurancePolicy.DTPRemark}}</view>
</view>
</view>
<view class="statement">
<view class="statement-title">免责声明</view>
<view class="statement-content">各地医保报销比例和具体政策请以当地执行为准</view>
</view>
<view class="policy-btn" bind:tap="handleHos">我想详细了解就诊医院和药店</view>
</view>
<view class="policy" wx:else>
<view class="policy-title">医保政策</view>
<view class="policy-card">
<view class="pc-title">
<view class="name">住院政策</view>
</view>
<view class="none">暂无相关政策</view>
</view>
<view class="policy-card">
<view class="pc-title">
<view class="name">门诊政策</view>
</view>
<view class="none">暂无相关政策</view>
</view>
<view class="policy-card">
<view class="pc-title">
<view class="name">双通道药店政策</view>
</view>
<view class="none">暂无相关政策</view>
</view>
<view class="statement">
<view class="statement-title">免责声明</view>
<view class="statement-content">各地医保报销比例和具体政策请以当地执行为准</view>
</view>
<view class="policy-btn" bind:tap="handleHos">我想详细了解就诊医院和药店</view>
</view>
</block>
<view
class="module1"
style="background: url({{imageUrl}}za-images//nrdl/nm-bg1.png?t={{Timestamp}}) no-repeat top center / cover;"
wx:if="{{NrdlOnePicSwitch==='1'}}"
bind:tap="handleDetail"
data-id="2"
>
<image class="label" src="{{imageUrl}}za-images//nrdl/nm1-label.png?t={{Timestamp}})"></image>
<view class="title">艾加莫德医保报销</view>
<view class="content">你要知道的事</view>
</view>
<view
class="module2"
style="background: url({{imageUrl}}za-images//nrdl/nm-bg2.png?t={{Timestamp}}) no-repeat center / 100% 100% "
wx:if="{{NrdlCityListSwitch==='1'}}"
bind:tap="handleDetail"
data-id="3"
>
<view class="title">城市惠民保</view>
<view class="content">自付费用报销list</view>
</view>
<view class="container">
<view class="c-title">关于艾加莫德</view>
<view
class="module3"
style="background: url({{imageUrl}}za-images//nrdl/nm-bg4.png?t={{Timestamp}}) no-repeat center / 100% 100% "
wx:if="{{NrdlOnePicAJMDSwitch==='1'}}"
bind:tap="handleDetail"
data-id="5"
></view>
<view
class="module3"
style="background: url({{imageUrl}}za-images//nrdl/nm-bg3.png?t={{Timestamp}}) no-repeat center / 100% 100% "
wx:if="{{NrdlQASwitch==='1'}}"
bind:tap="handleDetail"
data-id="4"
></view>
<view class="more">
<van-divider contentPosition="center" custom-style="color:#666666;font-size:32rpx;border-color:#666666">
有力人生,患者心声
</van-divider>
</view>
<video
id="video1"
class="video1"
style="height: {{video1Height}};"
src="https://circlehbsaas.oss-cn-beijing.aliyuncs.com/video/20231201494_1111%E6%82%A3%E8%80%85%E6%95%85%E4%BA%8B%E5%AE%9A%E7%A8%BF%E7%BA%BF%E4%B8%8B%E7%89%88.mov"
poster="https://picsissiok-10049618.cos.ap-shanghai.myqcloud.com/9511cb6d9589f10dfa31451b2bbf0166_17026223015357.png"
bind:play="handlePlay"
data-id="video1"
data-width="640"
data-height="360"
></video>
<video
id="video2"
class="video2"
src="https://circlehbsaas.oss-cn-beijing.aliyuncs.com/video/20231201892_20230725761_20230713397_%E4%BD%A0%E7%AC%91%E8%B5%B7%E6%9D%A5%E7%9C%9F%E7%BE%8E-%E9%87%8D%E7%97%87%E8%82%8C%E6%97%A0%E5%8A%9B%E5%85%AC%E7%9B%8A%E7%9F%AD%E7%89%87%EF%BC%880613%E5%AE%9A%EF%BC%89.mp4"
poster="https://picsissiok-10049618.cos.ap-shanghai.myqcloud.com/85255132fa3628865517fa45b262162a_17026084477448.png"
bind:play="handlePlay"
data-id="video2"
data-width="640"
data-height="272"
></video>
</view>
</view>
<van-popup show="{{ cascaderShow }}" round position="bottom">
<van-cascader
wx:if="{{ cascaderShow }}"
value="{{ cascaderValue }}"
title="请选择所在地区"
options="{{ options }}"
field-names="{{fieldNames}}"
bind:close="onClose"
bind:finish="onFinish"
/>
</van-popup>
<toast
bind:cancel="handleToastCancel"
bind:ok="handleToastOk"
show="{{toastShow}}"
type="{{toastType}}"
params="{{toastParams}}"
></toast>
<timeOut
bind:timeOut="handleTimeOut"
asideOut="{{asideOut}}"
asideType="{{asideType}}"
timeToast="{{timeToast}}"
timeToastType="{{timeToastType}}"
timeToastParams="{{timeToastParams}}"
></timeOut>

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

@ -1,7 +0,0 @@
{
"navigationStyle": "custom",
"usingComponents": {
"navBar": "/components/zd-navBar/navBar",
"timeOut": "/components/timeOut/index"
}
}

10
src/patient/pages/nrdlDetail/index.scss

@ -1,10 +0,0 @@
page {
background-color: #fafafa;
}
.img {
width: 100%;
display: block;
&.hide {
opacity: 0;
}
}

94
src/patient/pages/nrdlDetail/index.ts

@ -1,94 +0,0 @@
const app = getApp<IAppOption>()
Page({
data: {
id: '',
NrdlCityListSwitch: '0',
isLoad: false,
asideOut: false,
timeToast: false,
asideType: '11',
},
onLoad(options) {
this.setData({
id: options.id,
asideType: {
2: '12',
3: '13',
4: '14',
5: '15',
}[options.id as string],
})
const titles = {
2: '一图读懂报销热点问题',
3: '报销城市一览',
4: '艾加莫德常见问题答疑',
5: '一图读懂艾加莫德',
}
if (options.id) {
wx.setNavigationBarTitle({
title: titles[options.id],
})
}
app.zdWaitLogin().then((_res) => {
if (options.id == '2') {
}
if (options.id == '4') {
}
if (options.id == '5') {
}
this.addOpenRecord()
this.getConfig()
})
},
addOpenRecord() {
wx.ajax({
method: 'POST',
url: `?r=zd/nrdl/add-open-record&OpenType=${this.data.id}`,
data: {},
}).then((res) => {
if (res.CanGetScore) {
this.setData({
asideOut: true,
})
}
})
},
getConfig() {
wx.ajax({
method: 'GET',
url: '?r=zd/common/get-config',
data: {},
}).then((res) => {
this.setData({
NrdlCityListSwitch: res.NrdlCityListSwitch,
})
})
},
handleSwitch() {
if (this.data.id == '2') {
if (this.data.NrdlCityListSwitch == '1') {
wx.navigateTo({
url: '/patient/pages/nrdlTable/index',
})
} else {
wx.showToast({
icon: 'none',
title: '敬请期待',
})
}
}
},
bindload() {
this.setData({
isLoad: true,
})
},
handleBack() {
wx.navigateBack()
},
})

21
src/patient/pages/nrdlDetail/index.wxml

@ -1,21 +0,0 @@
<navBar color="#364E9E" fixed title="" home="{{false}}" back bind:back="handleBack"></navBar>
<block wx:if="{{id==4}}">
<image
class="img"
mode="widthFix"
wx:for="{{4}}"
wx:key="index"
src="{{imageUrl}}za-images/nrdl/qa{{item+1}}.png?t={{Timestamp}}"
bind:tap="handleSwitch"
></image>
</block>
<image
wx:else
class="img {{isLoad ? '' : 'hide'}}"
mode="widthFix"
src="{{imageUrl}}za-images/nrdl/{{id}}.png?t={{Timestamp}}"
bind:tap="handleSwitch"
bindload="bindload"
></image>
<timeOut asideOut="{{asideOut}}" asideType="{{asideType}}"></timeOut>

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

@ -1,7 +0,0 @@
{
"navigationBarTitleText": "城市惠民保自付费用报销list",
"navigationStyle": "default",
"usingComponents": {
"timeOut": "/components/timeOut/index"
}
}

63
src/patient/pages/nrdlTable/index.scss

@ -1,63 +0,0 @@
.page {
padding: 478rpx 20rpx 20rpx;
border-color:#fff;
.table {
border-collapse: collapse;
border-top: 1px solid #ece9ea;
border-left: 1px solid #ece9ea;
border-bottom: 1px solid #ece9ea;
border-radius: 20rpx 20rpx 0 0;
.t-header {
display: flex;
border-collapse: collapse;
background-color: #e5829f;
color: #fff !important;
border-radius: 20rpx 20rpx 0 0;
.item7 {
border-right: 0 20rpx 0 0;
}
}
.t-body {
.row {
display: flex;
border-collapse: collapse;
background-color: #fbf0f4;
}
.row:nth-of-type(2n) {
background-color: #f6e0e8;
.item {
border-right: 1px solid #fff7fa;
}
}
}
.item {
padding: 20rpx 5rpx;
font-size: 20rpx;
border-right: 1px solid #f0d5dd;
display: flex;
align-items: center;
justify-content: center;
}
.item1 {
width: 5%;
}
.item2 {
width: 10%;
}
.item3 {
width: 15%;
}
.item4 {
width: 20%;
}
.item5 {
width: 20%;
}
.item6 {
width: 20%;
}
.item7 {
width: 20%;
}
}
}

876
src/patient/pages/nrdlTable/index.ts

@ -1,876 +0,0 @@
const app = getApp<IAppOption>();
Page({
data: {
list: [
{
index: 2,
provide: "江苏",
city: "南京",
name: "南京宁惠保",
date1: "2023.9.19-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院、门特、",
},
{
index: 2,
provide: "江苏",
city: "南京",
name: "南京宁惠保",
date1: "2023.9.19-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "国谈药(住院)",
},
{
index: 3,
provide: "江苏",
city: "苏州",
name: "苏惠保",
date1: "2023.10.18-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门诊",
},
{
index: 4,
provide: "江苏",
city: "徐州",
name: "惠徐保",
date1: "2023.10.24-2024.1.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 5,
provide: "江苏",
city: "镇江",
name: "镇江惠民保",
date1: "2023.10.30-2023.12.28",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 6,
provide: "江苏",
city: "无锡",
name: "医惠锡城升级版",
date1: "2023.10.18-2023.12.29",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 7,
provide: "浙江",
city: "杭州",
name: "西湖益联保",
date1: "2023.11.8-2024.1.20",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 8,
provide: "浙江",
city: "嘉兴",
name: "嘉兴大病无忧",
date1: "2023.11.6-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "通赔",
},
{
index: 9,
provide: "浙江",
city: "衢州",
name: "惠衢保",
date1: "2023.10.19-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 10,
provide: "浙江",
city: "绍兴",
name: "越惠保",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 11,
provide: "浙江",
city: "丽水",
name: "浙丽保",
date1: "2023.11.29-2024.1.31",
date2: "2024.1.1-2024.12.31",
content: "通赔",
},
{
index: 12,
provide: "浙江",
city: "温州",
name: "温州益康保",
date1: "2023.9.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 13,
provide: "浙江",
city: "湖州",
name: "南太湖健康保",
date1: "2023.11.10-2024.1.20",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 14,
provide: "浙江",
city: "台州",
name: "台州利民保",
date1: "2023.10.11-2024.1.10",
date2: "2024.1.1-2024.12.31",
content: "通赔",
},
{
index: 15,
provide: "浙江",
city: "舟山",
name: "舟惠保",
date1: "2023.11.17-2024.2.29",
date2: "2024.1.1-2024.12.31",
content: "通赔",
},
{
index: 16,
provide: "广东",
city: "广州",
name: "穗岁康",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 16,
provide: "广东",
city: "广州",
name: "穗岁康",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特、门急诊",
},
{
index: 17,
provide: "广东",
city: "广州",
name: "广州惠民保",
date1: "2023.11.15-2024.1.15",
date2: "2024.1.1-2024.12.31",
content: "基础版:住院",
},
{
index: 17,
provide: "广东",
city: "广州",
name: "广州惠民保",
date1: "2023.11.15-2024.1.15",
date2: "2024.1.1-2024.12.31",
content: "升级版:住院和门特",
},
{
index: 18,
provide: "广东",
city: "珠海",
name: "大爱无疆",
date1: "2023.1.1起-2023.12.30",
date2: "投保生效日-2023.12.31",
content: "住院和门特",
},
{
index: 19,
provide: "广东",
city: "珠海",
name: "大爱无疆",
date1: "2023.1.1起-2023.12.30",
date2: "投保生效日-2023.12.31",
content: "住院",
},
{
index: 20,
provide: "广东",
city: "珠海",
name: "大爱无疆",
date1: "2023.1.1起-2023.12.30",
date2: "投保生效日-2023.12.31",
content: "国谈药品",
},
{
index: 19,
provide: "广东",
city: "深圳",
name: "深圳专属医疗险",
date1: "全年可投保,等待期30日",
date2: "1年期或6年期",
content: "国谈药品",
},
{
index: 20,
provide: "广东",
city: "梅州",
name: "梅州惠民保",
date1: "2023.10.18-2023.12.29",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 21,
provide: "广东",
city: "河源",
name: "河源市民保",
date1: "2023.11.21-2023.12.29",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 22,
provide: "广东",
city: "茂名",
name: "茂名市民保",
date1: "2023.10.11-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 23,
provide: "广东",
city: "潮州",
name: "益安保",
date1: "2023.11.16-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 24,
provide: "广东",
city: "云浮",
name: "云浮云福保",
date1: "2023.11.22-2024.1.10",
date2: "2024.1.1-2024.12.31",
content: "基础版:住院",
},
{
index: 24,
provide: "广东",
city: "云浮",
name: "云浮云福保",
date1: "2023.11.22-2024.1.10",
date2: "2024.1.1-2024.12.31",
content: "升级版:住院和门特",
},
{
index: 25,
provide: "广东",
city: "惠州",
name: "惠州惠医保",
date1: "2023.11.13-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 26,
provide: "广东",
city: "汕尾",
name: "善美保",
date1: "2023.10.11-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 27,
provide: "广东",
city: "肇庆",
name: "肇福保",
date1: "2023.11.16-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 28,
provide: "广东",
city: "肇庆",
name: "肇福保",
date1: "2023.11.16-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 28,
provide: "广东",
city: "阳江",
name: "阳江市惠民保",
date1: "2023.11.14-2023.12.29",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 29,
provide: "广东",
city: "清远",
name: "清远惠民保",
date1: "2023.11.12-2024.1.12",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 30,
provide: "广东",
city: "中山",
name: "中山博爱康",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 31,
provide: "山东",
city: "济南",
name: "齐鲁保",
date1: "2023.10.10-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 32,
provide: "山东",
city: "潍坊",
name: "潍坊惠民保",
date1: "2023.11.15-2024.1.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 33,
provide: "山东",
city: "烟台",
name: "烟台市民健康保",
date1: "2023.10.26-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 34,
provide: "山东",
city: "全省",
name: "山东新民保",
date1: "2023.11.1-2023.12.30",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 35,
provide: "山东",
city: "菏泽",
name: "惠荷保",
date1: "2023.11.9-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 36,
provide: "山东",
city: "德州",
name: "德州惠民保",
date1: "2023.11.15-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 37,
provide: "山东",
city: "日照",
name: "日照暖心保",
date1: "2023.11.16-2024.1.31",
date2: "2023.12.1-2024.11.30",
content: "住院和门特慢",
},
{
index: 38,
provide: "山东",
city: "枣庄",
name: "枣惠保",
date1: "2023.11.17-2024.1.15",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 39,
provide: "山东",
city: "聊城",
name: "聊惠保",
date1: "2023.11.15-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 40,
provide: "四川",
city: "德阳",
name: "德e保",
date1: "2023.11.8-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院、门特、单行支付药品",
},
{
index: 41,
provide: "四川",
city: "宜宾",
name: "惠宜保",
date1: "2023.11.15-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院、门特、国家谈判药品、单行支付药品、高值药品",
},
{
index: 42,
provide: "四川",
city: "广安",
name: "广安e惠保",
date1: "2023.11.10-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和",
},
{
index: 42,
provide: "四川",
city: "广安",
name: "广安e惠保",
date1: "2023.11.10-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "参照住院报销的门诊费用",
},
{
index: 43,
provide: "四川",
city: "雅安",
name: "惠雅保",
date1: "2023.12.8-2024.2.24",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 44,
provide: "四川",
city: "攀枝花",
name: "花城保",
date1: "2023.11.28-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和一类门诊",
},
{
index: 45,
provide: "四川",
city: "巴中",
name: "巴惠保",
date1: "2023.11.8-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 46,
provide: "四川",
city: "乐山",
name: "乐山惠嘉保",
date1: "2023.12.18-2024.2.29",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 47,
provide: "重庆市",
city: "重庆",
name: "重庆渝快保",
date1: "2023.10.26-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 48,
provide: "湖北",
city: "黄冈",
name: "黄惠保",
date1: "2023.9.6-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 49,
provide: "湖北",
city: "宜昌",
name: "宜昌市民保",
date1: "2023.11.8-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 50,
provide: "湖北",
city: "咸宁",
name: "咸惠保",
date1: "2023.1.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 51,
provide: "湖北",
city: "荆门",
name: "惠荆保",
date1: "2023.9.19-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 52,
provide: "湖北",
city: "鄂州",
name: "鄂州惠民保",
date1: "2023.10.17-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 53,
provide: "湖北",
city: "荆州",
name: "荆州惠民保",
date1: "2023.10.23-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 54,
provide: "湖北",
city: "襄阳",
name: "襄阳惠民保",
date1: "2023.11.8-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 55,
provide: "湖北",
city: "黄石",
name: "黄石石惠保",
date1: "2023.12.18-2024.3.31",
date2: "2024.1.1-2024.12.31",
content: "住院、门特慢、单独支付药品",
},
{
index: 56,
provide: "广西",
city: "全省",
name: "桂民保",
date1: "2023.12.1-2024.1.31",
date2: "2024.1.18-2025.1.17",
content: "住院",
},
{
index: 57,
provide: "广西",
city: "桂林",
name: "惠桂保",
date1: "长期投保",
date2: "次月1日起一年",
content: "住院",
},
{
index: 58,
provide: "广西",
city: "桂林",
name: "桂林惠民保",
date1: "2023.11.15-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 59,
provide: "广西",
city: "钦州",
name: "钦州钦惠保",
date1: "2023.12.20-",
date2: "2023.12.31-2024.12.30",
content: "住院",
},
{
index: 60,
provide: "广西",
city: "柳州",
name: "柳州惠民保",
date1: "2023.11.29-2024.1.15",
date2: "2024.1.16-2025.1.15",
content: "住院",
},
{
index: 61,
provide: "福建",
city: "莆田",
name: "莆仙保",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 62,
provide: "福建",
city: "三明",
name: "三明普惠医联保",
date1: "2023.9.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 63,
provide: "福建",
city: "三明",
name: "三明普惠医联保",
date1: "2023.9.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 64,
provide: "福建",
city: "三明",
name: "三明普惠医联保",
date1: "2023.9.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "门特",
},
{
index: 63,
provide: "辽宁",
city: "全省",
name: "惠辽保",
date1: "2023.12.28-2024.12.29",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 64,
provide: "辽宁",
city: "丹东",
name: "丹惠保",
date1: "2023.12.12-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 65,
provide: "辽宁",
city: "大连",
name: "大连工惠保",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 66,
provide: "河北",
city: "全省",
name: "冀惠保",
date1: "一期:2023.11.10-2024.1.10",
date2: "一期:2024.1.11-2025.1.10",
content: "住院",
},
{
index: 66,
provide: "河北",
city: "全省",
name: "冀惠保",
date1: "二期:2024.1.11-2024.2.29",
date2: "二期:2024.3.1-2025.2.28",
content: "住院",
},
{
index: 67,
provide: "河北",
city: "唐山",
name: "惠唐保",
date1: "2023.11.13-2023.1.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 68,
provide: "河北",
city: "张家口",
name: "张家口家惠保",
date1: "2023.12.10-2024.2.15",
date2: "2024.2.16-2025.2.15",
content: "住院",
},
{
index: 69,
provide: "江西",
city: "抚州",
name: "抚惠保",
date1: "2023.12.20-2024.2.29",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 70,
provide: "江西",
city: "赣州",
name: "赣州惠民保",
date1: "2023.12.12-2024.1.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门慢",
},
{
index: 71,
provide: "河南",
city: "郑州",
name: "郑州医惠保",
date1: "2023.12.20-2024.3.20",
date2: "2024.3.21-2025.3.20",
content: "住院和门特",
},
{
index: 72,
provide: "河南",
city: "安阳",
name: "安阳惠民保",
date1: "2023.10.16-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 73,
provide: "河南",
city: "鹤壁",
name: "惠鹤保",
date1: "2023.11.13-2024.2.29",
date2: "2024.3.1-2025.2.28",
content: "住院",
},
{
index: 74,
provide: "海南",
city: "全省",
name: "惠琼保",
date1: "2023.11.29-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 75,
provide: "海南",
city: "全省",
name: "惠琼保",
date1: "2023.11.29-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 75,
provide: "安徽",
city: "全省",
name: "安徽惠民保",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 76,
provide: "黑龙江",
city: "全省",
name: "龙江惠民保",
date1: "2023.11.8-2023.12.28",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
{
index: 77,
provide: "北京",
city: "北京",
name: "北京普惠健康保",
date1: "2023.11.1-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门诊",
},
{
index: 78,
provide: "陕西",
city: "全省",
name: "惠秦保",
date1: "2023.6.25-2023.12.31",
date2: "一期:2023.6.30-2023.12.30",
content: "住院和门特",
},
{
index: 78,
provide: "陕西",
city: "全省",
name: "惠秦保",
date1: "2023.6.25-2023.12.31",
date2: "二期:2024.1.1-2024.12.31",
content: "住院和门特",
},
{
index: 79,
provide: "宁夏",
city: "全省",
name: "平安宁康保",
date1: "2023.12.5-2023.12.30",
date2: "2023.12.31-2024.12.30",
content: "住院和门特慢",
},
{
index: 80,
provide: "甘肃",
city: "兰州",
name: "金城·惠医保",
date1: "2023.10.26-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "住院和门特慢",
},
{
index: 81,
provide: "新疆",
city: "阿克苏",
name: "阿克苏惠民保",
date1: "2023.10.12-2023.12.31",
date2: "2024.1.1-2024.12.31",
content: "通赔",
},
{
index: 82,
provide: "青海",
city: "全省",
name: "青海健康保",
date1: "2023.12.5-2024.2.29",
date2: "2024.1.1-2024.12.31",
content: "住院",
},
],
asideOut: false,
asideType: "13",
},
onLoad() {
app.zdWaitLogin().then((_res) => {
this.addOpenRecord();
});
},
addOpenRecord() {
wx.ajax({
method: "POST",
url: `?r=zd/nrdl/add-open-record&OpenType=${3}`,
data: {},
}).then((res) => {
if (res.CanGetScore) {
this.setData({
asideOut: true,
});
}
});
},
});

29
src/patient/pages/nrdlTable/index.wxml

@ -1,29 +0,0 @@
<view
class="page"
style="background: url({{imageUrl}}za-images//nrdl/nrdl-table-bg.png?t={{Timestamp}}) no-repeat top center / 100%;padding-top:{{bottom}}px"
>
<view class="table">
<view class="t-header">
<view class="item item1">编号</view>
<view class="item item2">省份</view>
<view class="item item3">城市</view>
<view class="item item4">惠民保名称</view>
<view class="item item5">投保时间</view>
<view class="item item6">报销时间</view>
<view class="item item7">医院内可自付报销范围</view>
</view>
<view class="t-body">
<view class="row" wx:for="{{list}}" wx:key="index">
<view class="item item1">{{index+1}}</view>
<view class="item item2">{{item.provide}}</view>
<view class="item item3">{{item.city}}</view>
<view class="item item4">{{item.name}}</view>
<view class="item item5">{{item.date1}}</view>
<view class="item item6">{{item.date1}}</view>
<view class="item item7">{{item.content}}</view>
</view>
</view>
</view>
</view>
<timeOut bind:timeOut="handleTimeOut" asideOut="{{asideOut}}" asideType="{{asideType}}"></timeOut>

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

@ -38,13 +38,42 @@ page {
padding: 32rpx; padding: 32rpx;
background-color: #fff; background-color: #fff;
border-radius: 24rpx; border-radius: 24rpx;
&.chart-card-legend {
.chart {
padding-top: 40rpx;
}
}
.title { .title {
font-size: 32rpx; font-size: 32rpx;
color: #211d2e; color: #211d2e;
font-weight: bold; font-weight: bold;
} }
.chart { .chart {
position: relative;
height: 420rpx; height: 420rpx;
.legend {
position: absolute;
top: 0;
right: 0;
display: flex;
align-items: center;
gap: 12rpx;
justify-content: flex-end;
.dot {
width: 18rpx;
height: 18rpx;
border-radius: 50%;
&.dot4 {
background-color: #1ec580;
}
&.dot5 {
background-color: #b982ff;
}
&.dot6 {
background-color: #ffa300;
}
}
}
} }
} }
} }
@ -151,6 +180,48 @@ page {
} }
} }
} }
.r-card-hormones {
margin-top: 16rpx;
padding: 26rpx 32rpx;
background: linear-gradient(11deg, #ffffff 0%, #ffffff 49%, #f6efff 100%);
border-radius: 24rpx 24rpx 24rpx 24rpx;
border: 2rpx solid #ffffff;
.rch-title {
font-size: 32rpx;
color: #211d2e;
}
.rch-content {
margin-top: 6rpx;
display: flex;
align-items: baseline;
gap: 48rpx;
.num {
font-size: 72rpx;
color: #b982ff;
font-weight: bold;
display: flex;
align-items: baseline;
.sub {
font-size: 32rpx;
font-weight: normal;
}
}
.tip {
font-size: 28rpx;
color: #211d2e;
}
}
.rch-footer {
margin-top: 22rpx;
border-top: 1px solid rgba(33, 29, 46, 0.05);
padding-top: 22rpx;
font-size: 32rpx;
color: #211d2e;
.range {
color: #b982ff;
}
}
}
} }
} }
} }

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

@ -25,11 +25,17 @@ Page({
chartComponent1: null as any, chartComponent1: null as any,
chartComponent2: null as any, chartComponent2: null as any,
chartComponent3: null as any, chartComponent3: null as any,
chartComponent4: null as any,
chartComponent5: null as any,
chartComponent6: null as any,
async onLoad() { async onLoad() {
echarts = await require.async('../../../gift/compontnts/echart/echarts.js') echarts = await require.async('../../../gift/compontnts/echart/echarts.js')
this.chartComponent1 = this.selectComponent('#chart1') this.chartComponent1 = this.selectComponent('#chart1')
this.chartComponent2 = this.selectComponent('#chart2') this.chartComponent2 = this.selectComponent('#chart2')
this.chartComponent3 = this.selectComponent('#chart3') this.chartComponent3 = this.selectComponent('#chart3')
this.chartComponent4 = this.selectComponent('#chart4')
this.chartComponent5 = this.selectComponent('#chart5')
this.chartComponent6 = this.selectComponent('#chart6')
app.waitLogin({ type: [1] }).then(() => { app.waitLogin({ type: [1] }).then(() => {
this.handleChangeType() this.handleChangeType()
@ -58,8 +64,6 @@ Page({
EndMonth = dayjs().format('YYYY') EndMonth = dayjs().format('YYYY')
BeginMonth = dayjs().subtract(1, 'y').format('YYYY') BeginMonth = dayjs().subtract(1, 'y').format('YYYY')
} }
else if (type == '4' && e) {
}
this.setData({ this.setData({
page: 0, page: 0,
type, type,
@ -68,6 +72,7 @@ Page({
BeginMonth, BeginMonth,
}) })
this.getChatData() this.getChatData()
this.getHormoneData()
}, },
handleChange() { handleChange() {
this.getChatData() this.getChatData()
@ -107,6 +112,41 @@ Page({
this.initChart(list2, 'chartComponent3') this.initChart(list2, 'chartComponent3')
}) })
}, },
getHormoneData() {
const { type, BeginMonth, EndMonth } = this.data
wx.ajax({
method: 'GET',
url: '?r=xd/hormone-dosage/graph',
data: {
DateType: type,
StartDate: BeginMonth,
EndDate: EndMonth,
count: 0,
},
}).then((res) => {
const list4: any[] = []
const list5: any[] = []
const list6: any[] = []
res.forEach((item: any) => {
list4.push({
Date: item.recordDate,
value: item.medicationMethod == 1 ? item.dosage : '',
})
list5.push({
Date: item.recordDate,
value: item.medicationMethod == 2 ? item.dosage : '',
})
list6.push({
Date: item.recordDate,
value: item.medicationMethod == 3 ? item.dosage : '',
})
})
this.initChartHormone(list4, 'chartComponent4', '#1ec580')
this.initChartHormone(list5, 'chartComponent5', '#B982FF')
this.initChartHormone(list6, 'chartComponent6', '#FFA300')
})
},
initChart(defaultList = [] as any[], key) { initChart(defaultList = [] as any[], key) {
return new Promise((reslove) => { return new Promise((reslove) => {
this[key].init((canvas, width, height, dpr) => { this[key].init((canvas, width, height, dpr) => {
@ -263,6 +303,127 @@ Page({
}) })
}) })
}, },
initChartHormone(defaultList = [] as any[], key, color) {
return new Promise((reslove) => {
this[key].init((canvas, width, height, dpr) => {
const chart = echarts.init(canvas, null, {
width,
height,
devicePixelRatio: dpr, // new
})
canvas.setChart(chart)
const option: any = {
tooltip: {
show: false,
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
confine: true,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
textStyle: {
color: '#fff',
fontSize: 10,
},
order: 'seriesDesc',
},
grid: {
top: '30',
left: '0',
right: '0',
bottom: '10',
containLabel: true,
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
inside: true,
length: 1,
alignWithLabel: true,
lineStyle: {
type: 'dotted',
color: '#D8D8D8',
width: 4,
cap: 'round',
},
},
axisLine: {
lineStyle: {
color: '#8C8C8C',
type: 'dashed',
},
},
splitLine: {
show: true,
showMinLine: false,
lineStyle: {
type: 'dotted',
color: 'rgba(137, 141, 151, 0.23)',
},
},
data: defaultList.map(item => dayjs(item.Date).format('MM-DD')),
},
],
yAxis: [
{
type: 'value',
minInterval: 20,
min: 0,
axisLine: {
show: false,
lineStyle: {
type: 'solid',
color: 'rgba(161, 164, 172, 1)',
},
},
splitLine: {
show: true,
showMinLine: false,
lineStyle: {
type: 'dotted',
color: 'rgba(137, 141, 151, 0.23)',
},
},
},
],
series: [
{
name: '总分',
data: defaultList.length ? defaultList.map(item => item.value) : [25],
barWidth: '16',
label: {
show: true,
position: 'top',
color,
fontSize: 14,
},
type: 'line',
symbolSize: 4,
showSymbol: defaultList.length >= 1,
connectNulls: true,
z: 10,
itemStyle: {
color,
},
},
],
dataZoom: {
type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。
startValue: 0,
endValue: 4,
filterMode: 'none',
},
}
chart.setOption(option)
reslove(chart)
return chart
})
})
},
getList(newPage = 1) { getList(newPage = 1) {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
@ -322,6 +483,14 @@ Page({
url: '/patient/pages/qol/index', url: '/patient/pages/qol/index',
}) })
}, },
handleHormoneDetail(e) {
const { index } = e.currentTarget.dataset
const { list } = this.data
const form: any = list[index]
wx.navigateTo({
url: `/patient/pages/hormonesResult/index?medicationMethod=${form.medicationMethod}&oralMonth=${form.oralMonthName}&injectionWeek=${form.injectionWeek}&injectionTimes=${form.injectionTimes}&dosage=${form.dosage}&report=1`,
})
},
handleHome() { handleHome() {
wx.reLaunch({ wx.reLaunch({
url: '/patient/pages/index/index', url: '/patient/pages/index/index',

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

@ -61,6 +61,30 @@
<ec-canvas id="chart3" ec="{{ ec }}"></ec-canvas> <ec-canvas id="chart3" ec="{{ ec }}"></ec-canvas>
</view> </view>
</view> </view>
<view class="chart-card chart-card-legend">
<view class="title">我的激素周用量记录曲线</view>
<view class="chart">
<view class="legend">
<view class="dot dot4"></view>
口服
</view>
<ec-canvas id="chart4" ec="{{ ec }}"></ec-canvas>
</view>
<view class="chart">
<view class="legend">
<view class="dot dot5"></view>
大剂量冲击治疗
</view>
<ec-canvas id="chart5" ec="{{ ec }}"></ec-canvas>
</view>
<view class="chart">
<view class="legend">
<view class="dot dot6"></view>
眶内或眼睑局部注射
</view>
<ec-canvas id="chart6" ec="{{ ec }}"></ec-canvas>
</view>
</view>
</view> </view>
<view class="list"> <view class="list">
@ -70,10 +94,6 @@
class="row {{item.TotalScore>=0 && 'status1'}} {{item.TotalScore>=40 && 'status2'}} {{item.TotalScore>=80 && 'status3'}}" class="row {{item.TotalScore>=0 && 'status1'}} {{item.TotalScore>=40 && 'status2'}} {{item.TotalScore>=80 && 'status3'}}"
wx:for="{{list}}" wx:for="{{list}}"
wx:key="index" wx:key="index"
bind:tap="handleDetail"
data-id="{{item.Id}}"
data-index="{{index}}"
bind:longpress="handleDelete"
> >
<view class="aside"> <view class="aside">
<view class="line-top" style="opacity: 0"></view> <view class="line-top" style="opacity: 0"></view>
@ -81,8 +101,15 @@
<view class="line"></view> <view class="line"></view>
</view> </view>
<view class="r-container"> <view class="r-container">
<view class="date">评估日期:{{item.Date}}</view> <view class="date">评估日期:{{item.Date || item.recordDate}}</view>
<view class="r-card"> <view
class="r-card"
wx:if="{{item.dataType == 1}}"
bind:tap="handleDetail"
data-id="{{item.Id}}"
data-index="{{index}}"
bind:longpress="handleDelete"
>
<view class="wrap"> <view class="wrap">
<view class="num">{{item.TotalScore}}</view> <view class="num">{{item.TotalScore}}</view>
<view class="inner"> <view class="inner">
@ -103,6 +130,35 @@
</view> </view>
</view> </view>
</view> </view>
<view
class="r-card-hormones"
wx:elif="{{item.dataType == 2}}"
bind:tap="handleHormoneDetail"
data-index="{{index}}"
>
<view class="rch-title">本次激素用量为</view>
<view class="rch-content">
<view class="num">
{{item.dosage}}
<view class="sub">mg/周</view>
</view>
<view class="tip" wx:if="{{item.medicationMethod == 1}}">*周用量=日用量*7天</view>
</view>
<view class="rch-footer" wx:if="{{item.medicationMethod == 1}}">
您已持续口服
<text class="range">{{item.oralMonthName}}</text>
</view>
<view class="rch-footer" wx:elif="{{item.medicationMethod == 2}}">
您已进行
<text class="range">{{item.injectionWeek}}周</text>
激素冲击治疗疗程
</view>
<view class="rch-footer" wx:elif="{{item.medicationMethod == 3}}">
您已进行
<text class="range">{{item.injectionTimes}}次</text>
激素局部注射治疗
</view>
</view>
</view> </view>
</view> </view>
<pagination pagination="{{pagination}}"></pagination> <pagination pagination="{{pagination}}"></pagination>

Loading…
Cancel
Save