Browse Source

feat: 完成多主题适配与功能迭代优化

本次提交完成了大量功能更新与体验优化:
1. 新增DRUG主题全套资源与样式适配
2. 重构问卷表单页面,支持多题型与条件显示
3. 统一隐私政策页面路径与文案,优化用户协议展示
4. 重构医生端tabbar,优化未读消息逻辑
5. 移除确诊时间范围选择项,简化患者注册流程
6. 优化多个页面的UI样式与交互细节
7. 修复多处逻辑bug与样式问题
master
kola-web 3 weeks ago
parent
commit
6232bc6218
  1. 28
      src/app.ts
  2. 14
      src/components/pickerArea/index.scss
  3. 2
      src/components/pickerArea/index.ts
  4. 8
      src/components/pickerArea/index.wxml
  5. 37
      src/components/toast/index.scss
  6. 4
      src/components/toast/index.ts
  7. 43
      src/components/toast/index.wxml
  8. 2
      src/doc/pages/doc1/index.json
  9. 2
      src/doc/pages/doc1/index.ts
  10. 6
      src/doc/pages/privacyAgreement/index.ts
  11. 19
      src/doctor/components/tabbar/index.ts
  12. 4
      src/doctor/pages/d_changeDoctor/index.ts
  13. 4
      src/doctor/pages/d_changeDoctor/index.wxml
  14. 2
      src/doctor/pages/d_home/index.ts
  15. 2
      src/doctor/pages/d_home/index.wxml
  16. 1
      src/doctor/pages/d_interactive/index.ts
  17. 2
      src/doctor/pages/d_interactive/index.wxml
  18. 8
      src/doctor/pages/d_login/index.ts
  19. 2
      src/doctor/pages/d_login/index.wxml
  20. 2
      src/doctor/pages/d_my/index.ts
  21. 2
      src/doctor/pages/d_my/index.wxml
  22. 2
      src/doctor/pages/d_patient/index.wxml
  23. 4
      src/doctor/pages/d_patientDetail/index.scss
  24. 4
      src/doctor/pages/d_patientDetail/index.ts
  25. 28
      src/doctor/pages/d_patientDetail/index.wxml
  26. BIN
      src/images/1/drug-man-active.png
  27. BIN
      src/images/1/drug-woman-active.png
  28. BIN
      src/images/bg22.png
  29. BIN
      src/images/bg30.png
  30. BIN
      src/images/bg31.png
  31. BIN
      src/images/bg32.png
  32. BIN
      src/images/bg33.png
  33. BIN
      src/images/icon86.png
  34. BIN
      src/images/icon87.png
  35. BIN
      src/images/icon88.png
  36. BIN
      src/images/icon89.png
  37. BIN
      src/images/kkd2.png
  38. 1
      src/pages/doctor/index.wxml
  39. 2
      src/pages/enterInfo/index.json
  40. 4
      src/pages/enterInfo/index.scss
  41. 11
      src/pages/enterInfo/index.ts
  42. 27
      src/pages/enterInfo/index.wxml
  43. 2
      src/pages/index/index.wxml
  44. 1
      src/pages/login/index.ts
  45. 11
      src/pages/login/index.wxml
  46. 36
      src/pages/personalInformation/index.scss
  47. 9
      src/pages/personalInformation/index.wxml
  48. 5
      src/pages/qaForm/index.json
  49. 277
      src/pages/qaForm/index.scss
  50. 265
      src/pages/qaForm/index.ts
  51. 124
      src/pages/qaForm/index.wxml
  52. 6
      src/pages/signIn/index.scss
  53. 1
      src/pages/signIn/index.ts
  54. 8
      src/pages/signIn/index.wxml
  55. 4
      src/public/pages/informedStart/index.ts
  56. 6
      src/public/pages/informedStart/index.wxml
  57. 2
      typings/index.d.ts
  58. 9
      健康档案-接口文档.md

28
src/app.ts

@ -48,9 +48,10 @@ App<IAppOption>({
loginType: '', // 1:患者 2:医生 loginType: '', // 1:患者 2:医生
first: true, first: true,
// anyWhere: true,
anyWhere: false, anyWhere: false,
doctorUnReadCount: 0,
userInfo: {}, userInfo: {},
DiagnoseType: [ DiagnoseType: [
{ {
@ -135,8 +136,9 @@ App<IAppOption>({
} }
this.startLogin() this.startLogin()
}, },
startLogin() { startLogin(): Promise<void> {
const that = this const that = this
return new Promise((resolve) => {
wx.login({ wx.login({
success(res) { success(res) {
wx.ajax({ wx.ajax({
@ -153,10 +155,13 @@ App<IAppOption>({
if (!Object.keys(that.globalData.scene)?.length) { if (!Object.keys(that.globalData.scene)?.length) {
that.globalData.anyWhere = res.anyWhere that.globalData.anyWhere = res.anyWhere
} }
that.getUserInfo() that.getUserInfo(null, true, () => {
resolve()
})
}) })
}, },
}) })
})
}, },
waitLogin({ isReg = true, loginPage = false, pub = false } = { isReg: true, loginPage: false, pub: false }) { waitLogin({ isReg = true, loginPage = false, pub = false } = { isReg: true, loginPage: false, pub: false }) {
let time: number let time: number
@ -588,6 +593,23 @@ App<IAppOption>({
}) })
}) })
}, },
setTabbarNoticeMessage() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/message-interact/get-unread-count',
data: {},
}).then((res: any) => {
this.globalData.doctorUnReadCount = res || 0
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
if (currentPage) {
const tabbar = (currentPage as any).selectComponent('#doctor-tabbar')
if (tabbar) {
tabbar.setData({ unReadCount: this.globalData.doctorUnReadCount })
}
}
})
},
getTheme() { getTheme() {
return new Promise((resolve) => { return new Promise((resolve) => {
const checkUserType = () => { const checkUserType = () => {

14
src/components/pickerArea/index.scss

@ -135,8 +135,18 @@
} }
} }
.theme1 { .PATIENT {
--color: rgba(224, 71, 117, 1); --color: #0eb66d;
}
.DRUG {
--color: rgba(89, 86, 233, 1);
.btn {
background: linear-gradient(270deg, #5956E9 0%, #B384F4 100%);
}
.s-item.active {
background: linear-gradient(270deg, #5956E9 0%, #B384F4 100%);
}
} }
.theme2 { .theme2 {

2
src/components/pickerArea/index.ts

@ -24,7 +24,7 @@ Component({
}, },
theme: { theme: {
type: String, type: String,
value: 'theme1', value: 'PATIENT',
}, },
}, },
observers: { observers: {

8
src/components/pickerArea/index.wxml

@ -36,7 +36,7 @@
data-name="{{item.label}}" data-name="{{item.label}}"
> >
<view class="left">{{item.label}}</view> <view class="left">{{item.label}}</view>
<image wx:if="{{item.value === CityId}}" class="icon" src="{{imageUrl}}icon7.png?t={{Timestamp}}"></image> <van-icon wx:if="{{item.value === CityId}}" name="success" />
</view> </view>
</scroll-view> </scroll-view>
</block> </block>
@ -73,11 +73,7 @@
<text class="word">{{index===0 ? key : ''}}</text> <text class="word">{{index===0 ? key : ''}}</text>
{{item.name}} {{item.name}}
</view> </view>
<image <van-icon wx:if="{{item.code=== ProvinceId}}" name="success" />
wx:if="{{item.code=== ProvinceId}}"
class="icon"
src="{{imageUrl}}icon7.png?t={{Timestamp}}"
></image>
</view> </view>
</block> </block>
</block> </block>

37
src/components/toast/index.scss

@ -3032,8 +3032,8 @@
border-radius: 24rpx; border-radius: 24rpx;
.title { .title {
margin-top: 24rpx; margin-top: 24rpx;
font-size: 40rpx; font-size: 36rpx;
color: #211d2e; color: rgba(33, 33, 32, 1);
font-weight: bold; font-weight: bold;
line-height: 56rpx; line-height: 56rpx;
text-align: center; text-align: center;
@ -3042,8 +3042,7 @@
margin-top: 24rpx; margin-top: 24rpx;
text-align: center; text-align: center;
.link { .link {
font-size: 32rpx; font-size: 36rpx;
color: #b982ff;
} }
} }
.footer { .footer {
@ -3060,18 +3059,39 @@
} }
.cancel { .cancel {
padding: 18rpx 0; padding: 18rpx 0;
color: #b982ff;
border: 1px solid #b982ff;
} }
.sure { .sure {
padding: 0; padding: 0;
background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%);
color: #ffffff; color: #ffffff;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
} }
.content .link {
color: #0eb66d;
}
.cancel {
color: #0eb66d;
border: 1px solid #0eb66d;
}
.sure {
background: linear-gradient(270deg, #0eb66d 0%, #34d399 100%);
}
&.doctor {
.content .link {
color: rgba(22, 121, 203, 1);
}
.cancel {
color: rgba(22, 121, 203, 1);
border: 1px solid rgba(22, 121, 203, 1);
border-radius: 12rpx;
}
.sure {
background: linear-gradient(90deg, #293b9f 0%, #1679cb 100%);
border-radius: 12rpx;
}
}
} }
.popup9 { .popup9 {
@ -3104,8 +3124,7 @@
} }
} }
.popup10, .popup10 {
.popup11 {
padding: 48rpx 50rpx 48rpx; padding: 48rpx 50rpx 48rpx;
width: 650rpx; width: 650rpx;
box-sizing: border-box; box-sizing: border-box;

4
src/components/toast/index.ts

@ -114,9 +114,9 @@ Component({
this.triggerEvent('del') this.triggerEvent('del')
}, },
routerTo(e) { routerTo(e) {
const { path } = e.currentTarget.dataset const { url } = e.currentTarget.dataset
wx.navigateTo({ wx.navigateTo({
url: path, url: url,
}) })
this.handleCancel() this.handleCancel()
}, },

43
src/components/toast/index.wxml

@ -217,7 +217,7 @@
<view>诺和关怀邀请您分享自己的故事。</view> <view>诺和关怀邀请您分享自己的故事。</view>
</view> </view>
<view class="footer"> <view class="footer">
<view class="submit" bind:tap="routerTo" data-path="/pages/storyGuide/index?storyleadin=1&originsource=2"> <view class="submit" bind:tap="routerTo" data-url="/pages/storyGuide/index?storyleadin=1&originsource=2">
去看看 去看看
</view> </view>
</view> </view>
@ -235,7 +235,7 @@
<view>期待您的故事</view> <view>期待您的故事</view>
</view> </view>
<view class="footer"> <view class="footer">
<view class="submit" bind:tap="routerTo" data-path="/pages/storyGuide/index?storyleadin=1&originsource=3"> <view class="submit" bind:tap="routerTo" data-url="/pages/storyGuide/index?storyleadin=1&originsource=3">
看看我能做些什么 看看我能做些什么
</view> </view>
</view> </view>
@ -261,7 +261,7 @@
</view> </view>
</view> </view>
<view class="footer"> <view class="footer">
<view class="submit" bind:tap="routerTo" data-path="/pages/storyGuide/index?storyleadin=1&originsource=1"> <view class="submit" bind:tap="routerTo" data-url="/pages/storyGuide/index?storyleadin=1&originsource=1">
看看我能做些什么 看看我能做些什么
</view> </view>
</view> </view>
@ -286,7 +286,7 @@
<text class="num">{{params.countIntegralNum}}能量</text> <text class="num">{{params.countIntegralNum}}能量</text>
免费兑换礼品 免费兑换礼品
</view> </view>
<view class="submit" bind:tap="routerTo" data-path="/pages/tfb/index">去领取</view> <view class="submit" bind:tap="routerTo" data-url="/pages/tfb/index">去领取</view>
</view> </view>
</view> </view>
</view> </view>
@ -364,7 +364,7 @@
随访专员定期和您电话沟通 随访专员定期和您电话沟通
<view>提醒您健康管理</view> <view>提醒您健康管理</view>
</view> </view>
<view class="warn" bind:tap="routerTo" data-path="/pages/taskAgreement/index?page=/pages/index/index"> <view class="warn" bind:tap="routerTo" data-url="/pages/taskAgreement/index?page=/pages/index/index">
<image class="icon" mode="aspectFill" src="{{imageUrl}}1.5/warn.png?t={{Timestamp}}"></image> <image class="icon" mode="aspectFill" src="{{imageUrl}}1.5/warn.png?t={{Timestamp}}"></image>
<text class="link">《电话随访知情同意书》</text> <text class="link">《电话随访知情同意书》</text>
</view> </view>
@ -885,11 +885,15 @@
<image class="p-img" src="{{imageUrl}}bg23.png?t={{Timestamp}}"></image> <image class="p-img" src="{{imageUrl}}bg23.png?t={{Timestamp}}"></image>
<image class="code" src="{{params.subscribe_img}}" show-menu-by-longpress></image> <image class="code" src="{{params.subscribe_img}}" show-menu-by-longpress></image>
</view> </view>
<view class="popup11" wx:if="{{type==='popup11'}}"> <view class="popup11 {{params.isDoctor ? 'doctor' : theme}}" wx:if="{{type==='popup11'}}">
<view class="title">我已阅读并同意</view> <view class="title">我已阅读并同意</view>
<view class="content"> <view class="content">
<text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index">《隐私政策》</text> <text class="link" catch:tap="routerTo" data-url="/doc/pages/privacyAgreement/index?active=1">《用户协议》</text>
<text class="link" catch:tap="routerTo" data-url="/doc/pages/privacyAgreement/index">《隐私政策》</text>
<view></view>
<text class="link" catch:tap="routerTo" data-url="/doc/pages/privacyAgreement/index?active=2">《个人信息共享知情同意书》</text>
</view> </view>
<view class="footer"> <view class="footer">
<view class="cancel" bind:tap="handleCancel">取消</view> <view class="cancel" bind:tap="handleCancel">取消</view>
<view wx:if="{{params.customPhone}}" class="sure" bind:tap="handleOk">确定</view> <view wx:if="{{params.customPhone}}" class="sure" bind:tap="handleOk">确定</view>
@ -909,12 +913,7 @@
<view class="popup10" wx:if="{{type==='popup10'}}"> <view class="popup10" wx:if="{{type==='popup10'}}">
<view class="title">我已阅读并同意</view> <view class="title">我已阅读并同意</view>
<view class="content"> <view class="content">
<text class="link" bind:tap="routerTo" data-path="/doc/pages/doc2/index?active=1">《用户协议》</text> <text class="link" bind:tap="routerTo" data-url="/doc/pages/doc1/index">《隐私保护协议》</text>
<text class="link" bind:tap="routerTo" data-path="/doc/pages/doc2/index">《隐私政策》</text>
<view></view>
<text class="link" bind:tap="routerTo" data-path="/doc/pages/doc2/index?active=2">
《个人信息共享知情同意书》
</text>
</view> </view>
<view class="footer"> <view class="footer">
<view class="cancel" bind:tap="handleCancel">取消</view> <view class="cancel" bind:tap="handleCancel">取消</view>
@ -1068,12 +1067,26 @@
</view> </view>
</view> </view>
<view class="popup-feedback" wx:if="{{type==='feedback'}}"> <view class="popup-feedback" wx:if="{{type==='feedback'}}">
<view class="popup-container" style="background:url('{{imageUrl}}bg27.png?t={{Timestamp}}') no-repeat top center/100%"> <view
class="popup-container"
style="background:url('{{imageUrl}}{{theme === 'DRUG' ? 'bg31' : 'bg27'}}.png?t={{Timestamp}}') no-repeat top center/100%"
>
<image class="code" src="{{feedbackQrCode}}" show-menu-by-longpress></image>
</view>
</view>
<view class="popup-feedback" wx:if="{{type==='doctor-feedback'}}">
<view
class="popup-container"
style="background:url('{{imageUrl}}bg33.png?t={{Timestamp}}') no-repeat top center/100%"
>
<image class="code" src="{{feedbackQrCode}}" show-menu-by-longpress></image> <image class="code" src="{{feedbackQrCode}}" show-menu-by-longpress></image>
</view> </view>
</view> </view>
<view class="popup-follow" wx:if="{{type==='follow'}}"> <view class="popup-follow" wx:if="{{type==='follow'}}">
<view class="popup-container" style="background:url('{{imageUrl}}bg28.png?t={{Timestamp}}') no-repeat top center/100%"> <view
class="popup-container"
style="background:url('{{imageUrl}}bg32.png?t={{Timestamp}}') no-repeat top center/100%"
>
<image class="code" src="{{followQrCode}}" show-menu-by-longpress></image> <image class="code" src="{{followQrCode}}" show-menu-by-longpress></image>
</view> </view>
</view> </view>

2
src/doc/pages/doc1/index.json

@ -1,5 +1,5 @@
{ {
"navigationBarTitleText": "个人信息及隐私保护政策", "navigationBarTitleText": "隐私保护协议",
"usingComponents": { "usingComponents": {
"mp-html": "mp-html" "mp-html": "mp-html"
} }

2
src/doc/pages/doc1/index.ts

File diff suppressed because one or more lines are too long

6
src/doc/pages/privacyAgreement/index.ts

File diff suppressed because one or more lines are too long

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

@ -10,7 +10,7 @@ Component({
data: { data: {
imageUrl: app.globalData.imageUrl, imageUrl: app.globalData.imageUrl,
Timestamp: app.globalData.Timestamp, Timestamp: app.globalData.Timestamp,
unReadCount: 0, unReadCount: app.globalData.doctorUnReadCount || 0,
tablist: [ tablist: [
{ {
name: '首页', name: '首页',
@ -32,7 +32,12 @@ Component({
}, },
lifetimes: { lifetimes: {
attached() { attached() {
this.getList() this.setData({ unReadCount: app.globalData.doctorUnReadCount || 0 })
},
},
pageLifetimes: {
show() {
this.setData({ unReadCount: app.globalData.doctorUnReadCount || 0 })
}, },
}, },
methods: { methods: {
@ -44,15 +49,5 @@ Component({
url: tab.path, url: tab.path,
}) })
}, },
getList() {
wx.ajax({
method: 'GET',
url: '?r=igg4/doctor/message-interact/get-interact-patient-list',
}).then((res: any) => {
this.setData({
unReadCount: res.unReadCount,
})
})
},
}, },
}) })

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

@ -93,9 +93,9 @@ Page({
url: '/doctor/pages/d_home/index', url: '/doctor/pages/d_home/index',
}) })
}, },
handleLink() { handleLink(e: any) {
wx.navigateTo({ wx.navigateTo({
url: '/doc/pages/doc1/index', url: e.currentTarget.dataset.url,
}) })
}, },
handleCheck() { handleCheck() {

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

@ -5,7 +5,7 @@
<view class="content">"愈见昕生"是北京白求恩公益基金会发起的 IgG4-RD 患者健康管理平台。</view> <view class="content">"愈见昕生"是北京白求恩公益基金会发起的 IgG4-RD 患者健康管理平台。</view>
<view class="content"> <view class="content">
加入平台前,请您仔细阅读 加入平台前,请您仔细阅读
<text class="link" bind:tap="handleLink">《隐私保护协议》</text> <text class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index">《隐私保护协议》</text>
,了解您的权益及个人信息处理方式。我们将严格依法保护您的个人信息安全。 ,了解您的权益及个人信息处理方式。我们将严格依法保护您的个人信息安全。
</view> </view>
</view> </view>
@ -36,7 +36,7 @@
<image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image> <image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image>
<view class="p"> <view class="p">
我同意依照此 我同意依照此
<text class="link" bind:tap="handleLink">《隐私政策》</text> <text class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index">《隐私政策》</text>
规定收集我的个人敏感信息 规定收集我的个人敏感信息
</view> </view>
</view> </view>

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

@ -37,6 +37,7 @@ Page({
this.getDoctorInfo() this.getDoctorInfo()
this.getDetail() this.getDetail()
this.getList1_1() this.getList1_1()
app.setTabbarNoticeMessage()
}) })
}, },
getDoctorInfo() { getDoctorInfo() {
@ -146,6 +147,7 @@ Page({
name: '患者数', name: '患者数',
type: 'bar', type: 'bar',
stack: 'a', stack: 'a',
barMaxWidth: 40, // 柱子最大不会超过 40px
label: { label: {
show: true, show: true,
color: 'rgba(33, 33, 32, 1)', color: 'rgba(33, 33, 32, 1)',

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

@ -65,6 +65,6 @@
</view> </view>
</view> </view>
<tabbar active="{{0}}"></tabbar> <tabbar id="doctor-tabbar" active="{{0}}"></tabbar>
<van-dialog id="van-dialog" /> <van-dialog id="van-dialog" />

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

@ -16,6 +16,7 @@ Page({
app.waitLogin().then((_res) => { app.waitLogin().then((_res) => {
app.mpBehavior({ doctor: true, PageName: 'PG_DoctorIMList' }) app.mpBehavior({ doctor: true, PageName: 'PG_DoctorIMList' })
this.getList() this.getList()
app.setTabbarNoticeMessage()
}) })
}, },
handleTapSearch() { handleTapSearch() {

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

@ -48,4 +48,4 @@
</view> </view>
</view> </view>
<tabbar active="{{2}}"></tabbar> <tabbar id="doctor-tabbar" active="{{2}}"></tabbar>

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

@ -4,9 +4,10 @@ let timer = null as null | number
Page({ Page({
data: { data: {
popupShow: false, popupShow: false,
popupType: 'popup11', popupType: 'popup10',
popupParams: { popupParams: {
close: false, close: false,
isDoctor: true,
} as any, } as any,
mobile: '', mobile: '',
@ -77,10 +78,11 @@ Page({
} }
this.setData({ this.setData({
popupShow: true, popupShow: true,
popupType: 'popup11', popupType: 'popup10',
popupParams: { popupParams: {
close: false, close: false,
customPhone, customPhone,
isDoctor: true,
}, },
}) })
}) })
@ -166,7 +168,7 @@ Page({
}, },
handlePopupOk() { handlePopupOk() {
const { popupType } = this.data const { popupType } = this.data
if (popupType == 'popup11') { if (popupType == 'popup10') {
this.setData({ this.setData({
check: true, check: true,
popupShow: false, popupShow: false,

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

@ -47,7 +47,7 @@
<image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image> <image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image>
<view class="p"> <view class="p">
我同意依照此 我同意依照此
<text class="link" bind:tap="handleLink">《隐私政策》</text> <text class="link" bind:tap="handleLink">《隐私保护协议》</text>
规定收集我的个人敏感信息 规定收集我的个人敏感信息
</view> </view>
</view> </view>

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

@ -72,7 +72,7 @@ Page({
this.setData({ toastShow: true, toastType: 'follow', toastParams: { close: true } }) this.setData({ toastShow: true, toastType: 'follow', toastParams: { close: true } })
}, },
handleFeedback() { handleFeedback() {
this.setData({ toastShow: true, toastType: 'feedback', toastParams: { close: true } }) this.setData({ toastShow: true, toastType: 'doctor-feedback', toastParams: { close: true } })
}, },
handleToastClose() { handleToastClose() {
this.setData({ toastShow: false, toastType: '' }) this.setData({ toastShow: false, toastType: '' })

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

@ -54,4 +54,4 @@
bind:cancel="handleToastClose" bind:cancel="handleToastClose"
></toast> ></toast>
<tabbar active="{{3}}"></tabbar> <tabbar id="doctor-tabbar" active="{{3}}"></tabbar>

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

@ -37,4 +37,4 @@
</view> </view>
</view> </view>
<tabbar active="{{1}}"></tabbar> <tabbar id="doctor-tabbar" active="{{1}}"></tabbar>

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

@ -60,13 +60,14 @@ page {
} }
} }
.label { .label {
flex-shrink: 0;
width: 7em;
font-size: 36rpx; font-size: 36rpx;
color: rgba(33, 33, 32, 1); color: rgba(33, 33, 32, 1);
font-weight: bold; font-weight: bold;
} }
.content { .content {
text-align: right; text-align: right;
max-width: 6em;
font-size: 36rpx; font-size: 36rpx;
color: rgba(33, 33, 32, 1); color: rgba(33, 33, 32, 1);
} }
@ -92,6 +93,7 @@ page {
font-size: 36rpx; font-size: 36rpx;
color: rgba(22, 121, 203, 1); color: rgba(22, 121, 203, 1);
border: 1px solid rgba(22, 121, 203, 1); border: 1px solid rgba(22, 121, 203, 1);
background-color: #fff;
} }
.send { .send {
flex: 1; flex: 1;

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

@ -240,7 +240,9 @@ Page({
res.DiagnosisTimeRangeName = this.data.diagnosisTimeRangeMap[res.DiagnosisTimeRange] || '' res.DiagnosisTimeRangeName = this.data.diagnosisTimeRangeMap[res.DiagnosisTimeRange] || ''
if (res.HealthQA && res.HealthQA.hasSubmitted && res.HealthQA.questions) { if (res.HealthQA && res.HealthQA.hasSubmitted && res.HealthQA.questions) {
res.HealthQA.questions.forEach((q: any) => { res.HealthQA.questions.forEach((q: any) => {
if (Array.isArray(q.AnswerText)) { q.isAnswerArray = Array.isArray(q.AnswerText)
if (q.isAnswerArray) {
q.AnswerTextArr = q.AnswerText
q.AnswerTextStr = q.AnswerText.join('、') + (q.OtherText ? `${q.OtherText}` : '') q.AnswerTextStr = q.AnswerText.join('、') + (q.OtherText ? `${q.OtherText}` : '')
} else { } else {
q.AnswerTextStr = q.AnswerText + (q.OtherText ? `${q.OtherText}` : '') q.AnswerTextStr = q.AnswerText + (q.OtherText ? `${q.OtherText}` : '')

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

@ -16,22 +16,18 @@
</view> </view>
</view> </view>
<view class="container"> <view class="container">
<view class="row"> <block wx:if="{{detail.HealthQA && detail.HealthQA.hasSubmitted && detail.HealthQA.questions.length > 0}}">
<view class="label">IgG4相关性疾病病程</view> <view class="row" wx:for="{{detail.HealthQA.questions}}" wx:key="QuestionNo">
<view class="content">{{detail.DiagnosisTimeRangeName}}</view> <view class="label">{{item.QuestionContent}}</view>
</view> <view class="content" wx:if="{{item.AnswerTextStr}}">
<view class="row" wx:if="{{detail.HealthQA && detail.HealthQA.hasSubmitted && detail.HealthQA.questions.length > 1}}"> <text wx:if="{{!item.isAnswerArray}}">{{item.AnswerTextStr}}</text>
<view class="label">疾病阶段</view> <block wx:else>
<view class="content">{{detail.HealthQA.questions[1].AnswerTextStr}}</view> <view wx:for="{{item.AnswerTextArr}}" wx:for-item="ans" wx:key="index">{{ans}}<text wx:if="{{item.OtherText && index === item.AnswerTextArr.length - 1}}">({{item.OtherText}})</text></view>
</view> </block>
<view class="row row-vetical" wx:if="{{detail.HealthQA && detail.HealthQA.hasSubmitted && detail.HealthQA.questions.length > 2}}"> </view>
<view class="label">正在使用的药物</view> <view class="content" wx:else>未作答</view>
<view class="content">{{detail.HealthQA.questions[2].AnswerTextStr}}</view> </view>
</view> </block>
<view class="row row-vetical" wx:if="{{detail.HealthQA && detail.HealthQA.hasSubmitted && detail.HealthQA.questions.length > 0}}">
<view class="label">被确诊受累的器官</view>
<view class="content">{{detail.HealthQA.questions[0].AnswerTextStr}}</view>
</view>
<view class="row"> <view class="row">
<view class="label">备注</view> <view class="label">备注</view>
<view class="content">{{detail.DoctorRemark || '无'}}</view> <view class="content">{{detail.DoctorRemark || '无'}}</view>

BIN
src/images/1/drug-man-active.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
src/images/1/drug-woman-active.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/images/bg22.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

BIN
src/images/bg30.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 KiB

BIN
src/images/bg31.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
src/images/bg32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

BIN
src/images/bg33.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

BIN
src/images/icon86.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
src/images/icon87.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

BIN
src/images/icon88.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

BIN
src/images/icon89.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/images/kkd2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 152 KiB

1
src/pages/doctor/index.wxml

@ -8,6 +8,7 @@
pid="{{ProvinceId}}" pid="{{ProvinceId}}"
cid="{{CityId}}" cid="{{CityId}}"
cname="{{CityName}}" cname="{{CityName}}"
theme="{{theme}}"
bind:tap="handleTapSite" bind:tap="handleTapSite"
bind:ok="handleChangeSite" bind:ok="handleChangeSite"
bind:show="handleSiteShareShow" bind:show="handleSiteShareShow"

2
src/pages/enterInfo/index.json

@ -1,5 +1,5 @@
{ {
"navigationBarTitleText": "", "navigationBarTitleText": "注册",
"navigationStyle": "custom", "navigationStyle": "custom",
"disableSwipeBack": true, "disableSwipeBack": true,
"usingComponents": { "usingComponents": {

4
src/pages/enterInfo/index.scss

@ -103,7 +103,7 @@
flex: 1; flex: 1;
padding: 24rpx 32rpx; padding: 24rpx 32rpx;
height: 40rpx; height: 40rpx;
font-size: 32rpx; font-size: 36rpx;
color: #222222; color: #222222;
background: #f6f6f6; background: #f6f6f6;
border-radius: 24rpx; border-radius: 24rpx;
@ -112,7 +112,7 @@
padding: 12rpx 24rpx; padding: 12rpx 24rpx;
opacity: 1; opacity: 1;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
font-size: 28rpx; font-size: 36rpx;
color: #999999; color: #999999;
display: flex; display: flex;
align-items: center; align-items: center;

11
src/pages/enterInfo/index.ts

@ -8,7 +8,6 @@ Page({
gender: '', gender: '',
birth: '', birth: '',
ageRange: '', ageRange: '',
diagnosisTimeRange: '',
diagnosisTime: '', diagnosisTime: '',
diagnoseType: '', diagnoseType: '',
@ -58,12 +57,6 @@ Page({
ageRange: id, ageRange: id,
}) })
}, },
handleSelectDiagnosisTimeRange(e: WechatMiniprogram.CustomEvent) {
const { id } = e.currentTarget.dataset
this.setData({
diagnosisTimeRange: id,
})
},
bindChangeDate(e: WechatMiniprogram.CustomEvent) { bindChangeDate(e: WechatMiniprogram.CustomEvent) {
const { key } = e.currentTarget.dataset const { key } = e.currentTarget.dataset
this.setData({ this.setData({
@ -95,13 +88,12 @@ Page({
handleSubmit() { handleSubmit() {
if (this.data.submiting) return if (this.data.submiting) return
app.mpBehavior({ PageName: 'BTN_PATIENTINFONEXT' }) app.mpBehavior({ PageName: 'BTN_PATIENTINFONEXT' })
const { name, gender, ageRange, diagnosisTimeRange, relationType } = this.data const { name, gender, ageRange, relationType } = this.data
const { registrationSource, registChannel, regBusinessId, WorkerId } = app.globalData const { registrationSource, registChannel, regBusinessId, WorkerId } = app.globalData
const { doctorId, inviteChan, recDoctorId: recommendDoctorId } = app.globalData.scene const { doctorId, inviteChan, recDoctorId: recommendDoctorId } = app.globalData.scene
let toast = '' let toast = ''
if (!gender) toast = '请选择性别' if (!gender) toast = '请选择性别'
if (!ageRange) toast = '请选择年龄范围' if (!ageRange) toast = '请选择年龄范围'
if (!diagnosisTimeRange) toast = '请选择确诊时间范围'
if (!name) toast = '姓名不能为空' if (!name) toast = '姓名不能为空'
if (toast) { if (toast) {
wx.showToast({ title: toast, icon: 'none' }) wx.showToast({ title: toast, icon: 'none' })
@ -121,7 +113,6 @@ Page({
name, name,
gender, gender,
ageRange, ageRange,
diagnosisTimeRange,
relationType, relationType,
registrationSource, registrationSource,
registChannel, registChannel,

27
src/pages/enterInfo/index.wxml

@ -1,9 +1,10 @@
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}"> <view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<navBar background="{{background}}" title="" back="{{false}}" home="{{false}}" slotLeft="{{true}}"> <navBar background="{{background}}" title="注册" back="{{false}}" home="{{false}}" slotLeft="{{true}}">
<van-icon bind:tap="handleBack" class="cross" name="cross" slot="left" /> <van-icon bind:tap="handleBack" class="cross" name="cross" slot="left" />
</navBar> </navBar>
<view class="page-container"> <view class="page-container">
<view class="content"> <view class="content">
<view class="row-title">患者身份</view>
<view class="switch"> <view class="switch">
<view class="item {{relationType==1 && 'active'}}" bind:tap="handleRelationType" data-id="1"> <view class="item {{relationType==1 && 'active'}}" bind:tap="handleRelationType" data-id="1">
<image class="icon" src="{{imageUrl}}icon31.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}icon31.png?t={{Timestamp}}"></image>
@ -34,30 +35,6 @@
<view class="age-item {{ageRange==5 && 'active'}}" data-id="5" bind:tap="handleSelectAge">{{"70 - 79 岁"}}</view> <view class="age-item {{ageRange==5 && 'active'}}" data-id="5" bind:tap="handleSelectAge">{{"70 - 79 岁"}}</view>
<view class="age-item {{ageRange==6 && 'active'}}" data-id="6" bind:tap="handleSelectAge">{{"≥80 岁"}}</view> <view class="age-item {{ageRange==6 && 'active'}}" data-id="6" bind:tap="handleSelectAge">{{"≥80 岁"}}</view>
</view> </view>
<view class="row-title">从首次确诊IgG4相关性疾病,到现在多久了</view>
<view class="row row-age">
<view
class="age-item {{diagnosisTimeRange==1 && 'active'}}"
data-id="1"
bind:tap="handleSelectDiagnosisTimeRange"
>
6个月以内
</view>
<view
class="age-item {{diagnosisTimeRange==2 && 'active'}}"
data-id="2"
bind:tap="handleSelectDiagnosisTimeRange"
>
6个月-3年
</view>
<view
class="age-item {{diagnosisTimeRange==3 && 'active'}}"
data-id="3"
bind:tap="handleSelectDiagnosisTimeRange"
>
3年以上
</view>
</view>
<view class="row-title">输入真实姓名,便于医生识别随访</view> <view class="row-title">输入真实姓名,便于医生识别随访</view>
<view class="row"> <view class="row">
<input <input

2
src/pages/index/index.wxml

@ -175,7 +175,7 @@
<view class="kkd"> <view class="kkd">
<image <image
class="k-item" class="k-item"
src="{{imageUrl}}{{theme === 'DRUG' ? 'kkd3' : 'kkd1'}}.png?t={{Timestamp}}" src="{{imageUrl}}{{theme === 'DRUG' ? 'kkd2' : 'kkd1'}}.png?t={{Timestamp}}"
bind:tap="routerTo" bind:tap="routerTo"
data-url="/pages/doctor/index" data-url="/pages/doctor/index"
></image> ></image>

1
src/pages/login/index.ts

@ -111,6 +111,7 @@ Page({
this.setData({ this.setData({
toastShow: true, toastShow: true,
toastType: 'popup11', toastType: 'popup11',
toastParams: { isDoctor: false },
}) })
}, },
submitCallback() { submitCallback() {

11
src/pages/login/index.wxml

@ -29,7 +29,9 @@
></image> ></image>
<view class="a-content"> <view class="a-content">
我已阅读并同意 我已阅读并同意
<text class="link" bind:tap="handleLink" data-url="/doc/pages/doc2/index">《个人信息及隐私协议政策》</text> <text class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index?active=1">《用户协议》</text>
<text class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index">《隐私政策》</text>
</view> </view>
</view> </view>
<view class="a-col"> <view class="a-col">
@ -48,9 +50,10 @@
data-key="check2" data-key="check2"
></image> ></image>
<view class="a-content"> <view class="a-content">
我特此同意依照此 我同意依照
<text class="link" bind:tap="handleLink" data-url="/doc/pages/doc2/index">《个人信息及隐私保护政策》</text> <text class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index">《隐私政策》</text>
规定收集我的个人敏感信息 <text class="link" bind:tap="handleLink" data-url="/doc/pages/privacyAgreement/index?active=2">《个人信息及隐私保护政策》</text>
规定收集和共享我的个人敏感信息
</view> </view>
</view> </view>
</view> </view>

36
src/pages/personalInformation/index.scss

@ -107,7 +107,7 @@
flex: 1; flex: 1;
padding: 24rpx 32rpx; padding: 24rpx 32rpx;
height: 40rpx; height: 40rpx;
font-size: 32rpx; font-size: 36rpx;
color: #222222; color: #222222;
background: #f6f6f6; background: #f6f6f6;
border-radius: 24rpx; border-radius: 24rpx;
@ -116,7 +116,7 @@
padding: 12rpx 24rpx; padding: 12rpx 24rpx;
opacity: 1; opacity: 1;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
font-size: 28rpx; font-size: 36rpx;
color: #999999; color: #999999;
display: flex; display: flex;
align-items: center; align-items: center;
@ -164,7 +164,7 @@
line-height: 96rpx; line-height: 96rpx;
border-radius: 16rpx; border-radius: 16rpx;
font-size: 36rpx; font-size: 36rpx;
background: #FFFFFF; background: #ffffff;
box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.05); box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(0, 0, 0, 0.05);
color: rgba(34, 34, 34, 1); color: rgba(34, 34, 34, 1);
&.danger { &.danger {
@ -174,3 +174,33 @@
} }
} }
} }
#drug-page {
.switch .item {
background: rgba(246, 246, 246, 1);
}
.switch .item.active {
background-color: #fff;
border-color: rgba(89, 86, 233, 1);
.name {
color: rgba(89, 86, 233, 1);
}
}
.row {
.item {
border-color: rgba(246, 246, 246, 1);
background: rgba(246, 246, 246, 1);
}
.active {
border-color: rgba(89, 86, 233, 1);
background-color: #fff;
color: rgba(89, 86, 233, 1);
}
}
.change-phone {
color: rgba(89, 86, 233, 1);
}
.action-btn {
color: rgba(89, 86, 233, 1);
}
}

9
src/pages/personalInformation/index.wxml

@ -1,6 +1,7 @@
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}"> <view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<view class="page-container"> <view class="page-container">
<view class="content"> <view class="content">
<view class="row-title">患者身份</view>
<view class="switch"> <view class="switch">
<view <view
class="item {{userInfo.RelationType == 1 && 'active'}}" class="item {{userInfo.RelationType == 1 && 'active'}}"
@ -8,7 +9,7 @@
data-key="RelationType" data-key="RelationType"
data-id="1" data-id="1"
> >
<image class="icon" src="{{imageUrl}}icon31.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon88' : 'icon31'}}.png?t={{Timestamp}}"></image>
<view class="name">本人</view> <view class="name">本人</view>
</view> </view>
<view <view
@ -17,7 +18,7 @@
data-key="RelationType" data-key="RelationType"
data-id="2" data-id="2"
> >
<image class="icon" style="margin-right: 10rpx" src="{{imageUrl}}icon32.png?t={{Timestamp}}"></image> <image class="icon" style="margin-right: 10rpx" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon89' : 'icon32'}}.png?t={{Timestamp}}"></image>
<view class="name">亲友</view> <view class="name">亲友</view>
</view> </view>
</view> </view>
@ -26,14 +27,14 @@
<view class="item {{userInfo.Gender == 2 && 'active'}}" bind:tap="handleRadio" data-key="Gender" data-id="2"> <view class="item {{userInfo.Gender == 2 && 'active'}}" bind:tap="handleRadio" data-key="Gender" data-id="2">
<image <image
class="icon" class="icon"
src="{{imageUrl}}1/woman{{userInfo.Gender == 2 ? '-active' : ''}}.png?t={{Timestamp}}" src="{{imageUrl}}1/{{theme === 'DRUG' && userInfo.Gender == 2 ? 'drug-' : ''}}woman{{userInfo.Gender == 2 ? '-active' : ''}}.png?t={{Timestamp}}"
></image> ></image>
</view> </view>
<view class="item {{userInfo.Gender == 1 && 'active'}}" bind:tap="handleRadio" data-key="Gender" data-id="1"> <view class="item {{userInfo.Gender == 1 && 'active'}}" bind:tap="handleRadio" data-key="Gender" data-id="1">
<image <image
class="icon" class="icon"
src="{{imageUrl}}1/man{{userInfo.Gender == 1 ? '-active' : ''}}.png?t={{Timestamp}}" src="{{imageUrl}}1/{{theme === 'DRUG' && userInfo.Gender == 1 ? 'drug-' : ''}}man{{userInfo.Gender == 1 ? '-active' : ''}}.png?t={{Timestamp}}"
></image> ></image>
</view> </view>

5
src/pages/qaForm/index.json

@ -1,4 +1,7 @@
{ {
"navigationBarTitleText": "健康档案", "navigationBarTitleText": "健康档案",
"usingComponents": {} "navigationBarBackgroundColor": "#F6F6F6",
"usingComponents": {
"van-icon": "@vant/weapp/icon/index"
}
} }

277
src/pages/qaForm/index.scss

@ -1,150 +1,233 @@
page { page {
background-color: rgba(246, 246, 246, 1); background-color: #f6f6f6;
} }
.page { .page {
.page-header { padding: 32rpx 32rpx 80rpx;
padding: 32rpx 40rpx; .card {
margin-bottom: 32rpx;
padding: 32rpx;
background-color: #fff; background-color: #fff;
border-radius: 24rpx;
.c-title {
font-size: 36rpx; font-size: 36rpx;
color: rgba(34, 34, 34, 1); color: rgba(34, 34, 34, 1);
} font-weight: bold;
.progress { }
margin: 32rpx 40rpx 0; .tip {
margin-top: 16rpx;
padding: 22rpx 24rpx;
background-color: rgba(248, 248, 248, 1);
border-radius: 16rpx;
font-size: 28rpx;
color: rgba(34, 34, 34, 0.7);
}
.radio-group {
margin-top: 32rpx;
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 24rpx;
.radio-item {
padding: 32rpx;
background-color: rgba(248, 248, 248, 1);
border-radius: 24rpx;
display: flex; display: flex;
gap: 14rpx; align-items: center;
.p-item { gap: 24rpx;
flex: 1; .radio {
height: 12rpx; width: 40rpx;
background-color: #fff; height: 40rpx;
border-radius: 56rpx; border-radius: 50%;
&.active { border: 1px solid rgba(34, 34, 34, 0.2);
background: linear-gradient(94deg, #0eb66d 0%, #00d277 100%); }
.content {
font-size: 36rpx;
color: rgba(34, 34, 34, 0.7);
} }
&.active {
.radio {
position: relative;
border-color: rgba(14, 182, 109, 1);
background-color: rgba(14, 182, 109, 1);
&::after {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
content: '';
width: 20rpx;
height: 20rpx;
border-radius: 50%;
background-color: #fff;
} }
} }
.question-section { .content {
padding-bottom: 220rpx;
.list-title {
margin: 24rpx 40rpx 0;
font-size: 44rpx;
color: rgba(34, 34, 34, 1); color: rgba(34, 34, 34, 1);
} }
.list {
margin: 0 40rpx 0;
padding-bottom: 16rpx;
.list-item {
margin-top: 24rpx;
padding: 38rpx 32rpx;
background-color: #fff;
box-sizing: border-box;
border-radius: 24rpx;
display: flex;
align-items: center;
gap: 20rpx;
border: 2px solid transparent;
&.active {
border-color: #0eb66d;
.check-icon {
border: none;
background: linear-gradient(94deg, #0eb66d 0%, #00d277 100%);
.icon-inner {
opacity: 1;
} }
} }
} }
.check-icon { .check-group {
margin-top: 32rpx;
display: grid;
gap: 24rpx;
&.col1 {
grid-template-columns: repeat(1, 1fr);
}
&.col2 {
grid-template-columns: repeat(2, 1fr);
}
.check-item {
display: flex;
align-items: center;
gap: 24rpx;
padding: 26rpx 24rpx;
border-radius: 16rpx;
background-color: rgba(248, 248, 248, 1);
.check {
flex-shrink: 0; flex-shrink: 0;
width: 44rpx; width: 40rpx;
height: 44rpx; height: 40rpx;
border-radius: 8rpx; border-radius: 8rpx;
border: 1px solid rgba(187, 187, 187, 1); border: 1px solid rgba(34, 34, 34, 0.2);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
box-sizing: border-box; .icon {
.icon-inner { display: none;
width: 22rpx;
height: 12rpx;
border-left: 4rpx solid #fff;
border-bottom: 4rpx solid #fff;
transform: rotate(-45deg) translate(2rpx, -4rpx);
opacity: 0;
} }
} }
.content { .content {
font-size: 40rpx; font-size: 36rpx;
color: rgba(34, 34, 34, 1); color: rgba(34, 34, 34, 1);
} }
&.active {
.check {
border-color: rgba(14, 182, 109, 1);
background-color: rgba(14, 182, 109, 1);
.icon {
color: #fff;
display: block;
}
} }
} }
.other-section { }
margin: 24rpx 40rpx 0; }
.other-input { .date {
width: 100%; margin-top: 32rpx;
padding: 24rpx 32rpx; padding: 28rpx 32rpx;
background-color: #fff; display: flex;
border-radius: 24rpx; align-items: center;
box-sizing: border-box; justify-content: space-between;
background-color: rgba(246, 246, 246, 1);
border-radius: 16rpx;
gap: 20rpx;
color: rgba(34, 34, 34, 0.2);
.icon {
flex-shrink: 0;
width: 40rpx;
height: 40rpx;
}
.content {
flex: 1;
font-size: 36rpx; font-size: 36rpx;
color: rgba(34, 34, 34, 0.7);
&.active {
color: rgba(34, 34, 34, 1); color: rgba(34, 34, 34, 1);
min-height: 120rpx;
} }
} }
} }
.footer { .textarea {
position: fixed; margin-top: 32rpx;
bottom: 0; padding: 26rpx 32rpx;
left: 0; background-color: rgba(248, 248, 248, 1);
border-radius: 24rpx;
min-height: 160rpx;
width: 100%;
box-sizing: border-box; box-sizing: border-box;
padding: 32rpx 40rpx 40rpx; font-size: 32rpx;
background-color: #fff; color: rgba(34, 34, 34, 1);
}
.input {
margin-top: 32rpx;
padding: 26rpx 32rpx;
background-color: rgba(248, 248, 248, 1);
border-radius: 24rpx;
}
.place-input {
color: rgba(34, 34, 34, 0.4);
}
.image-group {
margin-top: 32rpx;
display: flex;
flex-wrap: wrap;
gap: 20rpx;
.image-item {
position: relative;
width: 200rpx;
height: 200rpx;
.img {
width: 100%; width: 100%;
height: 100%;
border-radius: 16rpx;
}
.del {
position: absolute;
top: -12rpx;
right: -12rpx;
width: 44rpx;
height: 44rpx;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 50%;
display: flex; display: flex;
gap: 30rpx; align-items: center;
box-shadow: 0 -10rpx 10rpx rgba(204, 204, 204, 0.3); justify-content: center;
.prev { color: #fff;
flex: 1; font-size: 24rpx;
height: 96rpx; }
box-sizing: border-box; }
border: 1px solid rgba(14, 182, 109, 1); .image-add {
font-size: 40rpx; width: 200rpx;
border-radius: 12rpx; height: 200rpx;
color: rgba(14, 182, 109, 1); background-color: rgba(248, 248, 248, 1);
border-radius: 16rpx;
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 12rpx;
.add-icon {
font-size: 56rpx;
color: rgba(34, 34, 34, 0.3);
} }
.next { .add-text {
flex: 1; font-size: 24rpx;
color: rgba(34, 34, 34, 0.4);
}
}
}
}
.submit {
height: 96rpx; height: 96rpx;
box-sizing: border-box;
font-size: 40rpx;
border-radius: 12rpx;
color: #fff;
background: linear-gradient(0deg, rgba(14, 182, 109, 1), rgba(0, 210, 119, 1));
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} background: linear-gradient(94deg, #0eb66d 0%, #00d277 100%);
border-radius: 16rpx;
font-size: 40rpx;
color: rgba(255, 255, 255, 1);
} }
} }
#drug-page { #drug-page {
.p-item.active { .radio-item.active .radio {
background: linear-gradient(270deg, #b384f4 0%, #5956e9 100%);
}
.list-item.active {
border-color: rgba(89, 86, 233, 1); border-color: rgba(89, 86, 233, 1);
.check-icon { background-color: rgba(89, 86, 233, 1);
border-color: transparent;
background: linear-gradient(270deg, #5956e9 0%, #b384f4 100%);
} }
} .check-item.active .check {
.prev {
border-color: rgba(89, 86, 233, 1); border-color: rgba(89, 86, 233, 1);
color: rgba(89, 86, 233, 1); background-color: rgba(89, 86, 233, 1);
} }
.next { .submit {
background: linear-gradient(90deg, #b384f4 0%, #5956e9 100%); background: linear-gradient(270deg, #5956e9 0%, #b384f4 100%);
} }
} }

265
src/pages/qaForm/index.ts

@ -5,23 +5,33 @@ interface IOption {
value: string value: string
} }
interface ICondition {
questionNo: number
values: number[]
}
interface IQuestion { interface IQuestion {
QuestionNo: number QuestionNo: number
QuestionContent: string QuestionContent: string
QuestionType: number QuestionType: number
HasOther: number HasOther: number
Description: string
Columns: number
Options: Record<string, string> Options: Record<string, string>
Answer: number[] | number
OtherText: string
optionList: IOption[] optionList: IOption[]
Answer: any
OtherText: string
DateValue: string
TextValue: string
Images: any[]
Condition: ICondition | null
visible: boolean
displayNo: number
} }
Page({ Page({
data: { data: {
currentIndex: 0,
questions: [] as IQuestion[], questions: [] as IQuestion[],
hasSubmitted: false,
latestSubmitTime: '',
isSubmitting: false, isSubmitting: false,
backPage: '', backPage: '',
}, },
@ -30,55 +40,141 @@ Page({
this.setData({ this.setData({
backPage: options.backPage || '', backPage: options.backPage || '',
}) })
app.waitLogin().then(() => { app.waitLogin({}).then(() => {
this.getQuestionnaire() this.loadQuestionnaire()
}) })
}, },
getQuestionnaire() { loadQuestionnaire() {
wx.ajax({ wx.ajax({
method: 'GET', method: 'GET',
url: '?r=igg4/health-question/get-patient-questionnaire', url: '?r=igg4/health-question/questionnaire-list',
data: {}, data: {},
}).then((res: any) => { }).then((questionRes: any) => {
const questions: IQuestion[] = (res.questions || []).map((q: any) => { const questionList = questionRes.questions || questionRes.list || []
const questions: IQuestion[] = (Array.isArray(questionList) ? questionList : []).map((q: any) => {
const optionList: IOption[] = Object.entries(q.Options || {}).map(([key, value]) => ({ const optionList: IOption[] = Object.entries(q.Options || {}).map(([key, value]) => ({
key, key,
value: value as string, value: value as string,
})) }))
let Answer: number[] | number = q.QuestionType === 2 ? [] : 0 let condition: ICondition | null = null
let OtherText = '' if (q.Condition && q.Condition.questionNo) {
if (q.Answer !== undefined && q.Answer !== null) { condition = {
Answer = q.Answer questionNo: q.Condition.questionNo,
OtherText = q.OtherText || '' values: q.Condition.values || [],
}
} }
return { return {
QuestionNo: q.QuestionNo, QuestionNo: q.QuestionNo,
QuestionContent: q.QuestionContent, QuestionContent: q.QuestionContent,
QuestionType: q.QuestionType, QuestionType: q.QuestionType,
HasOther: q.HasOther, HasOther: q.HasOther || 0,
Options: q.Options, Description: q.Description || '',
Answer, Columns: q.QuestionNo == 2 ? 2 : 1,
OtherText, Options: q.Options || {},
optionList, optionList,
Answer: q.QuestionType === 2 ? [] : '',
OtherText: '',
DateValue: '',
TextValue: '',
Images: [],
Condition: condition,
visible: !condition,
displayNo: 0,
} }
}) })
this.setData({ this.setData({ questions })
questions, this.updateVisibility()
hasSubmitted: res.hasSubmitted || false, this.loadAnswers()
latestSubmitTime: res.latestSubmitTime || '',
}) })
},
loadAnswers() {
wx.ajax({
method: 'GET',
url: '?r=igg4/health-question/get-patient-questionnaire',
data: {},
}).then((res: any) => {
const answers = res.questions || []
if (!answers.length) return
const questions = this.data.questions
const updates: Record<string, any> = {}
questions.forEach((q, i) => {
const found = answers.find((a: any) => a.QuestionNo === q.QuestionNo)
if (!found) return
const answer = found.Answer
if (answer === null || answer === undefined) return
if (q.QuestionType === 1) {
updates[`questions[${i}].Answer`] = Number(answer)
} else if (q.QuestionType === 2) {
const arr = Array.isArray(answer) ? answer : String(answer).split(',').map(Number)
updates[`questions[${i}].Answer`] = arr
} else if (q.QuestionType === 3) {
updates[`questions[${i}].DateValue`] = answer
updates[`questions[${i}].Answer`] = answer
} else if (q.QuestionType === 4) {
updates[`questions[${i}].TextValue`] = answer
updates[`questions[${i}].Answer`] = answer
} else if (q.QuestionType === 5) {
const imgs = Array.isArray(answer) ? answer : []
updates[`questions[${i}].Images`] = imgs
updates[`questions[${i}].Answer`] = imgs
}
if (found.OtherText) {
updates[`questions[${i}].OtherText`] = found.OtherText
}
})
if (Object.keys(updates).length) {
this.setData(updates)
}
this.updateVisibility()
}) })
}, },
handleSelect(e: any) { updateVisibility() {
const { key } = e.currentTarget.dataset const { questions } = this.data
const { currentIndex, questions } = this.data const updates: Record<string, any> = {}
const question = questions[currentIndex] let no = 0
questions.forEach((q, i) => {
let visible = true
if (q.Condition) {
const parentQ = questions.find((p) => p.QuestionNo === q.Condition.questionNo)
if (parentQ) {
if (parentQ.QuestionType === 2 && Array.isArray(parentQ.Answer)) {
visible = q.Condition.values.some((v) => parentQ.Answer.includes(v))
} else {
visible = q.Condition.values.includes(Number(parentQ.Answer))
}
} else {
visible = false
}
}
if (q.visible !== visible) {
updates[`questions[${i}].visible`] = visible
}
if (visible) no++
if (q.displayNo !== no) {
updates[`questions[${i}].displayNo`] = no
}
})
if (Object.keys(updates).length) {
this.setData(updates)
}
},
handleRadioSelect(e: any) {
const { index, key } = e.currentTarget.dataset
const numKey = Number(key) const numKey = Number(key)
this.setData({
[`questions[${index}].Answer`]: numKey,
})
this.updateVisibility()
},
if (question.QuestionType === 2) { handleCheckSelect(e: any) {
let answer = [...(question.Answer as number[])] const { index, key } = e.currentTarget.dataset
const numKey = Number(key)
const answer = [...this.data.questions[index].Answer]
const idx = answer.indexOf(numKey) const idx = answer.indexOf(numKey)
if (idx > -1) { if (idx > -1) {
answer.splice(idx, 1) answer.splice(idx, 1)
@ -86,80 +182,90 @@ Page({
answer.push(numKey) answer.push(numKey)
} }
this.setData({ this.setData({
[`questions[${currentIndex}].Answer`]: answer, [`questions[${index}].Answer`]: answer,
}) })
} else { this.updateVisibility()
},
handleDateChange(e: any) {
const { index } = e.currentTarget.dataset
this.setData({ this.setData({
[`questions[${currentIndex}].Answer`]: numKey, [`questions[${index}].DateValue`]: e.detail.value,
[`questions[${index}].Answer`]: e.detail.value,
}) })
} this.updateVisibility()
}, },
handleOtherInput(e: any) { handleTextInput(e: any) {
const { currentIndex } = this.data const { index } = e.currentTarget.dataset
this.setData({ this.setData({
[`questions[${currentIndex}].OtherText`]: e.detail.value, [`questions[${index}].TextValue`]: e.detail.value,
[`questions[${index}].Answer`]: e.detail.value,
}) })
}, },
handlePrev() { handleOtherInput(e: any) {
const { currentIndex } = this.data const { index } = e.currentTarget.dataset
if (currentIndex > 0) {
this.setData({ this.setData({
currentIndex: currentIndex - 1, [`questions[${index}].OtherText`]: e.detail.value,
}) })
}
}, },
handleNext() { handleImageUpload(e: any) {
const { currentIndex, questions } = this.data const { index } = e.currentTarget.dataset
const question = questions[currentIndex] const that = this
if (!this.validateQuestion(question)) return wx.chooseMedia({
count: 9 - that.data.questions[index].Images.length,
mediaType: ['image'],
sourceType: ['album', 'camera'],
success(res) {
const newImages = [...that.data.questions[index].Images]
res.tempFiles.forEach((file: any) => {
newImages.push({ url: file.tempFilePath, name: 'image.jpg' })
})
that.setData({
[`questions[${index}].Images`]: newImages,
[`questions[${index}].Answer`]: newImages,
})
},
})
},
if (currentIndex < questions.length - 1) { handleImageDelete(e: any) {
const { index, imgindex } = e.currentTarget.dataset
const images = [...this.data.questions[index].Images]
images.splice(imgindex, 1)
this.setData({ this.setData({
currentIndex: currentIndex + 1, [`questions[${index}].Images`]: images,
[`questions[${index}].Answer`]: images,
}) })
} else {
this.handleSubmit()
}
}, },
validateQuestion(question: IQuestion): boolean { hasAnswer(q: IQuestion): boolean {
if (question.QuestionType === 2) { if (q.QuestionType === 1) return !!q.Answer || q.Answer === 0
const answer = question.Answer as number[] if (q.QuestionType === 2) return Array.isArray(q.Answer) && q.Answer.length > 0
if (!answer || !answer.length) { if (q.QuestionType === 3) return !!q.DateValue
wx.showToast({ title: '请至少选择一项', icon: 'none' }) if (q.QuestionType === 4) return !!q.TextValue && q.TextValue.trim().length > 0
return false if (q.QuestionType === 5) return Array.isArray(q.Images) && q.Images.length > 0
}
if (answer.includes(99) && !question.OtherText.trim()) {
wx.showToast({ title: '请填写其他内容', icon: 'none' })
return false
}
} else {
const answer = question.Answer as number
if (!answer) {
wx.showToast({ title: '请选择一项', icon: 'none' })
return false
}
if (answer === 99 && !question.OtherText.trim()) {
wx.showToast({ title: '请填写其他内容', icon: 'none' })
return false return false
}
}
return true
}, },
handleSubmit() { handleSubmit() {
const { questions, isSubmitting } = this.data const { questions, isSubmitting } = this.data
if (isSubmitting) return if (isSubmitting) return
const answers = questions.map((q) => { const answeredQuestions = questions.filter((q) => q.visible && this.hasAnswer(q))
if (!answeredQuestions.length) {
wx.showToast({ title: '请至少回答一个问题', icon: 'none' })
return
}
const answers = answeredQuestions.map((q) => {
const item: any = { const item: any = {
questionNo: q.QuestionNo, questionNo: q.QuestionNo,
answer: q.Answer, answer: q.Answer,
} }
if (q.HasOther === 1 && q.OtherText) { if (q.OtherText) {
item.otherText = q.OtherText item.otherText = q.OtherText
} }
return item return item
@ -173,15 +279,20 @@ Page({
loading: true, loading: true,
}) })
.then(() => { .then(() => {
app.startLogin().then(() => {
app.getUserInfo(this, true, () => {
app.getTheme().then((res) => {
this.setData({ theme: res })
wx.showToast({ title: '提交成功', icon: 'success' }) wx.showToast({ title: '提交成功', icon: 'success' })
const { backPage } = this.data const { backPage } = this.data
setTimeout(() => {
if (backPage) { if (backPage) {
wx.reLaunch({ url: decodeURIComponent(backPage) }) wx.reLaunch({ url: decodeURIComponent(backPage) })
} else { } else {
wx.navigateBack() wx.navigateBack()
} }
}, 1500) })
})
})
}) })
.finally(() => { .finally(() => {
this.setData({ isSubmitting: false }) this.setData({ isSubmitting: false })

124
src/pages/qaForm/index.wxml

@ -1,45 +1,115 @@
<wxs src="../../utils/tools.wxs" module="tools" /> <wxs src="../../utils/tools.wxs" module="tools" />
<view class="page" id="{{theme === 'DRUG' && 'drug-page'}}"> <view class="page" id="{{theme === 'DRUG' && 'drug-page'}}">
<view class="page-header">您好!为了更好地了解您的病情,请您完成以下{{questions.length}}个简单问题,便于医生评估您的近期状况:</view> <block wx:for="{{questions}}" wx:for-index="qIndex" wx:key="QuestionNo">
<view class="progress"> <view class="card" wx:if="{{item.visible}}">
<view class="c-title">{{item.displayNo}}. {{item.QuestionContent}}</view>
<view wx:if="{{item.Description}}" class="tip">{{item.Description}}</view>
<!-- 单选 QuestionType=1 -->
<view wx:if="{{item.QuestionType === 1}}" class="radio-group">
<view <view
class="p-item {{index <= currentIndex && 'active'}}" wx:for="{{item.optionList}}"
wx:for="{{questions}}" wx:for-item="opt"
wx:key="QuestionNo" wx:key="key"
></view> class="radio-item {{tools.eq(opt.key, item.Answer) && 'active'}}"
bind:tap="handleRadioSelect"
data-index="{{qIndex}}"
data-key="{{opt.key}}"
>
<view class="radio"></view>
<view class="content">{{opt.value}}</view>
</view> </view>
</view>
<input
wx:if="{{item.QuestionType === 1 && item.HasOther === 1 && tools.eq(99, item.Answer)}}"
class="input"
placeholder-class="place-input"
placeholder="请输入其他内容"
value="{{item.OtherText}}"
bindinput="handleOtherInput"
data-index="{{qIndex}}"
/>
<block wx:for="{{questions}}" wx:key="QuestionNo" wx:for-item="question" wx:for-index="qIndex"> <!-- 多选 QuestionType=2 -->
<view class="question-section" wx:if="{{qIndex === currentIndex}}"> <view wx:if="{{item.QuestionType === 2}}" class="check-group {{item.Columns == 2 ? 'col2' : 'col1'}}">
<view class="list-title">{{question.QuestionContent}}</view>
<view class="list">
<view <view
class="list-item {{(question.QuestionType === 2 && tools.include(item.key, question.Answer)) || (question.QuestionType === 1 && tools.eq(question.Answer, item.key)) ? 'active' : ''}}" wx:for="{{item.optionList}}"
wx:for="{{question.optionList}}" wx:for-item="opt"
wx:key="key" wx:key="key"
bind:tap="handleSelect" class="check-item {{tools.include(opt.key, item.Answer) && 'active'}}"
data-key="{{item.key}}" bind:tap="handleCheckSelect"
data-index="{{qIndex}}"
data-key="{{opt.key}}"
> >
<view class="check-icon"> <view class="check">
<view class="icon-inner"></view> <van-icon name="success" class="icon" />
</view> </view>
<view class="content">{{item.value}}</view> <view class="content">{{opt.value}}</view>
</view> </view>
</view> </view>
<view class="other-section" wx:if="{{question.HasOther === 1 && ((question.QuestionType === 2 && tools.include(99, question.Answer)) || (question.QuestionType === 1 && tools.eq(question.Answer, 99)))}}"> <input
<textarea wx:if="{{item.QuestionType === 2 && item.HasOther === 1 && tools.include(99, item.Answer)}}"
class="other-input" class="input"
placeholder-class="place-input"
placeholder="请输入其他内容" placeholder="请输入其他内容"
value="{{question.OtherText}}" value="{{item.OtherText}}"
bindinput="handleOtherInput" bindinput="handleOtherInput"
maxlength="200" data-index="{{qIndex}}"
/>
<!-- 日期 QuestionType=3 -->
<picker
wx:if="{{item.QuestionType === 3}}"
mode="date"
value="{{item.DateValue}}"
bind:change="handleDateChange"
data-index="{{qIndex}}"
>
<view class="date">
<image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon87' : 'icon85'}}.png?t={{Timestamp}}"></image>
<view class="content {{item.DateValue && 'active'}}">{{item.DateValue || '请选择时间'}}</view>
<van-icon name="arrow-down" />
</view>
</picker>
<!-- 文本 QuestionType=4 -->
<textarea
wx:if="{{item.QuestionType === 4}}"
class="textarea"
placeholder-class="place-input"
placeholder="请输入"
value="{{item.TextValue}}"
bindinput="handleTextInput"
data-index="{{qIndex}}"
maxlength="500"
auto-height
></textarea> ></textarea>
<!-- 图片 QuestionType=5 -->
<view wx:if="{{item.QuestionType === 5}}" class="image-group">
<view
wx:for="{{item.Images}}"
wx:for-item="img"
wx:for-index="imgIndex"
wx:key="imgIndex"
class="image-item"
>
<image class="img" mode="aspectFill" src="{{img.url}}"></image>
<view class="del" catch:tap="handleImageDelete" data-index="{{qIndex}}" data-imgindex="{{imgIndex}}">
<van-icon name="cross" />
</view> </view>
</view> </view>
</block> <view
wx:if="{{item.Images.length < 9}}"
<view class="footer"> class="image-add"
<view class="prev" wx:if="{{currentIndex > 0}}" bind:tap="handlePrev">上一步</view> bind:tap="handleImageUpload"
<view class="next" bind:tap="handleNext">{{currentIndex === questions.length - 1 ? '完成' : '继续'}}</view> data-index="{{qIndex}}"
>
<van-icon name="plus" class="add-icon" />
<view class="add-text">添加图片</view>
</view>
</view> </view>
</view> </view>
</block>
<view class="submit" bind:tap="handleSubmit">提交</view>
</view>

6
src/pages/signIn/index.scss

@ -64,3 +64,9 @@ page {
justify-content: center; justify-content: center;
} }
} }
#drug-page{
.submit{
background: linear-gradient(270deg, #5956E9 0%, #B384F4 100%);
}
}

1
src/pages/signIn/index.ts

@ -42,6 +42,7 @@ Page({
}).then(() => { }).then(() => {
wx.showToast({ icon: 'none', title: '保存成功' }) wx.showToast({ icon: 'none', title: '保存成功' })
app.getUserInfo(this, true) app.getUserInfo(this, true)
wx.navigateBack()
}) })
}, },
handleBack() { handleBack() {

8
src/pages/signIn/index.wxml

@ -1,16 +1,16 @@
<view <view
class="page" class="page"
id="{{theme === 'DRUG' && 'drug-page'}}" id="{{theme === 'DRUG' && 'drug-page'}}"
style="background: url('{{imageUrl}}bg29.png?t={{Timestamp}}') no-repeat top center/100%;padding-top: {{pageTop+110}}px;" style="background: url('{{imageUrl}}{{theme === 'DRUG' ? 'bg30': 'bg29'}}.png?t={{Timestamp}}') no-repeat top center/100%;padding-top: {{pageTop+110}}px;"
> >
<navBar background="{{background}}" title="" back bind:back="handleBack" fixed></navBar> <navBar background="{{background}}" title="" back bind:back="handleBack" fixed></navBar>
<view class="page-container"> <view class="page-container">
<image class="badge" src="{{imageUrl}}icon84.png?t={{Timestamp}}"></image> <image class="badge" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon86': 'icon84'}}.png?t={{Timestamp}}"></image>
<view class="form"> <view class="form">
<view class="form-title">我的本次就诊时间</view> <view class="form-title">我的本次就诊时间</view>
<picker mode="date" value="{{currentVisitDate}}" bind:change="handleCurrentVisitDateChange"> <picker mode="date" value="{{currentVisitDate}}" bind:change="handleCurrentVisitDateChange">
<view class="date"> <view class="date">
<image class="icon" src="{{imageUrl}}icon85.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon87' : 'icon85'}}.png?t={{Timestamp}}"></image>
<view class="content {{currentVisitDate && 'active'}}">{{currentVisitDate || '请选择'}}</view> <view class="content {{currentVisitDate && 'active'}}">{{currentVisitDate || '请选择'}}</view>
<van-icon name="arrow-down" /> <van-icon name="arrow-down" />
</view> </view>
@ -18,7 +18,7 @@
<view class="form-title">我的下次就诊时间</view> <view class="form-title">我的下次就诊时间</view>
<picker mode="date" value="{{nextVisitDate}}" bind:change="handleNextVisitDateChange"> <picker mode="date" value="{{nextVisitDate}}" bind:change="handleNextVisitDateChange">
<view class="date no-margin"> <view class="date no-margin">
<image class="icon" src="{{imageUrl}}icon85.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}{{theme === 'DRUG' ? 'icon87' : 'icon85'}}.png?t={{Timestamp}}"></image>
<view class="content {{nextVisitDate && 'active'}}">{{nextVisitDate || '请选择'}}</view> <view class="content {{nextVisitDate && 'active'}}">{{nextVisitDate || '请选择'}}</view>
<van-icon name="arrow-down" /> <van-icon name="arrow-down" />
</view> </view>

4
src/public/pages/informedStart/index.ts

@ -31,9 +31,9 @@ Page({
wx.hideLoading() wx.hideLoading()
}) })
}, },
handleLink1() { handleLink1(e: any) {
wx.navigateTo({ wx.navigateTo({
url: '/doc/pages/doc1/index', url: e.currentTarget.dataset.url,
}) })
}, },
handleCheck() { handleCheck() {

6
src/public/pages/informedStart/index.wxml

@ -16,9 +16,9 @@
愈见昕生是中国罕见病联盟/北京罕见病诊疗与保障学会发起的gMG患者健康全程管理平台; 愈见昕生是中国罕见病联盟/北京罕见病诊疗与保障学会发起的gMG患者健康全程管理平台;
<view style="height: 20rpx"></view> <view style="height: 20rpx"></view>
在您加入愈见昕生平台之前,请您阅读并充分理解 在您加入愈见昕生平台之前,请您阅读并充分理解
<text class="link" bind:tap="handleLink1">《隐私协议保护政策》</text> <text class="link" bind:tap="handleLink1" data-url="/doc/pages/privacyAgreement/index">《隐私协议保护政策》</text>
,了解您的权益及相关数据处理方法,我们将严格按照法律法规及 ,了解您的权益及相关数据处理方法,我们将严格按照法律法规及
<text class="link" bind:tap="handleLink1">《隐私协议保护政策》</text> <text class="link" bind:tap="handleLink1" data-url="/doc/pages/privacyAgreement/index">《隐私协议保护政策》</text>
的相关规定,保证您的个人信息不受侵犯。 的相关规定,保证您的个人信息不受侵犯。
</view> </view>
<view class="check"> <view class="check">
@ -26,7 +26,7 @@
<image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image> <image wx:else class="icon" src="{{imageUrl}}icon13.png?t={{Timestamp}}" bind:tap="handleCheck"></image>
<view class="p"> <view class="p">
我特此同意依照此 我特此同意依照此
<text class="link" bind:tap="handleLink1">《隐私协议保护政策》</text> <text class="link" bind:tap="handleLink1" data-url="/doc/pages/privacyAgreement/index">《隐私协议保护政策》</text>
规定收集我的个人敏感信息 规定收集我的个人敏感信息
</view> </view>
</view> </view>

2
typings/index.d.ts vendored

@ -69,7 +69,7 @@ interface IAppOption {
getCode: () => Promise<any> getCode: () => Promise<any>
doLogin: () => Promise<any> doLogin: () => Promise<any>
waitLogin: (obj?: { isReg?: boolean; loginPage?: boolean; pub?: boolean }) => Promise<any> waitLogin: (obj?: { isReg?: boolean; loginPage?: boolean; pub?: boolean }) => Promise<any>
startLogin: () => void startLogin: () => Promise<void>
getUserInfo: (self?, update?: boolean, callback?: (userinfo) => void) => void getUserInfo: (self?, update?: boolean, callback?: (userinfo) => void) => void
mpBehavior: (data: { PageName: string; doctor?: boolean }) => void mpBehavior: (data: { PageName: string; doctor?: boolean }) => void
globalSystemInfo?: globalSystemInfo globalSystemInfo?: globalSystemInfo

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

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