diff --git a/project.private.config.json b/project.private.config.json index 703c707..64cb977 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -23,13 +23,27 @@ "miniprogram": { "list": [ { - "name": "patient/pages/hormonesResult/index", - "pathName": "patient/pages/hormonesStart/index", - "query": "", + "name": "patient/pages/liveDetail/index", + "pathName": "patient/pages/liveDetail/index", + "query": "id=35", "scene": null, "launchMode": "default" }, { + "name": "医保-详情", + "pathName": "patient/pages/medicalDetail/index", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "患者-医保", + "pathName": "patient/pages/medical/index", + "query": "", + "launchMode": "default", + "scene": null + }, + { "name": "医生-激素用药详情", "pathName": "pages/d_patientHormones/index", "query": "", @@ -65,13 +79,6 @@ "scene": null }, { - "name": "patient/pages/liveDetail/index", - "pathName": "patient/pages/liveDetail/index", - "query": "id=33", - "launchMode": "default", - "scene": null - }, - { "name": "患者-个人信息", "pathName": "patient/pages/personalInformation/index", "query": "bottom=1", @@ -79,13 +86,6 @@ "scene": null }, { - "name": "patient/pages/liveResult/index", - "pathName": "patient/pages/liveResult/index", - "query": "id=30&rewardScore=undefined", - "launchMode": "default", - "scene": null - }, - { "name": "医生-患者详情", "pathName": "pages/d_patientDetail/index", "query": "id=21", diff --git a/src/app.json b/src/app.json index 7179316..1933a37 100644 --- a/src/app.json +++ b/src/app.json @@ -68,7 +68,9 @@ "pages/qolReport/index", "pages/hormonesStart/index", "pages/hormones/index", - "pages/hormonesResult/index" + "pages/hormonesResult/index", + "pages/medical/index", + "pages/medicalDetail/index" ] }, { diff --git a/src/components/popup/index.scss b/src/components/popup/index.scss index dbf4649..a95a6cc 100644 --- a/src/components/popup/index.scss +++ b/src/components/popup/index.scss @@ -288,6 +288,157 @@ } } +.popup12 { + .popup-container { + padding: 0 40rpx 40rpx; + width: 630rpx; + height: 860rpx; + box-sizing: border-box; + .container { + padding: 236rpx 0 0; + .c-header { + display: flex; + align-items: center; + justify-content: center; + .avatar { + width: 76rpx; + height: 76rpx; + border-radius: 50%; + } + .name { + margin-left: 20rpx; + font-size: 32rpx; + color: #211d2e; + font-weight: bold; + line-height: 44rpx; + } + } + .code { + margin: 60rpx auto 0; + display: block; + width: 260rpx; + height: 260rpx; + border-radius: 24rpx; + } + .tip { + margin-top: 60rpx; + text-align: center; + font-size: 32rpx; + color: #211d2e; + line-height: 44rpx; + } + } + } +} + +.popup13 { + .popup-container { + padding: 48rpx 32rpx 32rpx; + width: 670rpx; + height: 1124rpx; + background: linear-gradient(180deg, #f1e6ff 0%, #ffffff 12.03%, #ffffff 100%); + border-radius: 32rpx 32rpx 32rpx 32rpx; + border: 2rpx solid #ffffff; + box-sizing: border-box; + .title { + font-size: 44rpx; + color: #b982ff; + text-align: center; + font-weight: bold; + } + .scroll { + margin-top: 32rpx; + padding: 32rpx 32rpx 32rpx 0; + background: #f6f8f9; + border-radius: 32rpx 32rpx 32rpx 32rpx; + height: 844rpx; + overflow-y: auto; + box-sizing: border-box; + .s-title { + font-size: 36rpx; + line-height: 60rpx; + padding: 0 32rpx; + color: #ffffff; + border-radius: 0 32rpx 32rpx 0; + display: inline-block; + background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%); + margin-top: 28rpx; + &:first-of-type { + margin-top: 0; + } + } + .content { + margin-top: 32rpx; + padding: 0 32rpx; + font-size: 32rpx; + color: #69686e; + line-height: 48rpx; + .high { + color: #b982ff; + font-weight: bold; + } + } + .title { + margin-top: 32rpx; + padding: 0 32rpx; + font-size: 32rpx; + color: #211d2e; + line-height: 48rpx; + display: flex; + align-items: center; + gap: 8rpx; + &::before { + content: ''; + width: 8rpx; + height: 30rpx; + background: #b982ff; + border-radius: 2rpx 2rpx 2rpx 2rpx; + } + } + .row { + padding: 0 32rpx; + .col { + margin-top: 24rpx; + display: flex; + gap: 12rpx; + .order { + margin-top: 10rpx; + flex-shrink: 0; + width: 36rpx; + height: 36rpx; + text-align: center; + line-height: 36rpx; + font-size: 28rpx; + color: #ffffff; + border-radius: 50%; + background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%); + } + .c-content { + font-size: 32rpx; + color: #69686e; + line-height: 48rpx; + .high { + color: #b982ff; + font-weight: bold; + } + } + } + } + } + .btn { + margin-top: 32rpx; + width: 606rpx; + height: 88rpx; + font-size: 36rpx; + color: #ffffff; + line-height: 88rpx; + text-align: center; + background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%); + border-radius: 100rpx 100rpx 100rpx 100rpx; + } + } +} + .close { margin: 48rpx auto 0; display: block; diff --git a/src/components/popup/index.wxml b/src/components/popup/index.wxml index db8f18f..2d215d1 100644 --- a/src/components/popup/index.wxml +++ b/src/components/popup/index.wxml @@ -105,6 +105,93 @@ + + + + + + 客服小张 + + + + 长按识别二维码 + + 添加客服人员 + + + + + + + 了解双通道临采/院内用药 + + 什么是“双通道”? + + “双通道”是指除了医院,患者还能去 + 指定药店 + 买药,而且 + 报销比例和医院一样。 + + “双通道”报销需要注意以下两点: + + + 1 + + 外配处方通常存在 + 有效期 + ,我们要在有效期内去药店购药; + + + + 2 + + 药店必须是纳入“双通道”管理的 + 定点药店 + ,才能享受同等报销待遇。 + + + + 什么是“临采”? + + “临采”全称是临时采购,适用场景主要是:医院暂时缺货、有突发的治疗需求、或者有特种病例需要紧急用药的情况。 + + + 整个流程有 + 明确的时间限制 + ,是短期解决“缺药”问题的办法, + 不适合长期 + 常规用药。 + + + 什么是“院内用药”? + + 院内用药就是“在医院看诊-拿药-直接报销”的一站式全流程,也是最传统、最省心的方式,全程 + 自动报销 + 。 + + “院内用药”报销需满足两个条件: + + + 1 + + 医院必须是 + 医保定点机构 + ; + + + + 2 + + 医生开具的处方要符合药品说明书适应症和医保限定支付范围(即: + 中重度甲状腺眼病 + )。 + + + + + 了解更多详情 + + { + app.waitLogin({ type: [0, 1, 2] }).then(() => { + // 拦截医生直接访问直播详情页 + if (app.globalData.loginType == 2 && app.globalData.isLogin == 1) { + this.doctorLoginOut() + return + } app.mpBehavior({ PageName: 'PG_PatientLiveDetails', detailId: this.data.id, @@ -77,6 +82,35 @@ Page({ }) }) }, + doctorLoginOut() { + wx.showModal({ + title: '访问直播活动页需切换至患者端', + content: '请问是否继续', + confirmColor: '#8c75d0', + cancelText: '取消', + confirmText: '继续', + success: (res) => { + if (res.confirm) { + wx.ajax({ + method: 'POST', + url: '?r=xd/user/reg-logout', + data: {}, + }).then(() => { + app.startLogin(() => { + wx.restartMiniProgram({ + path: `/patient/pages/liveDetail/index?id=${this.data.id}`, + }) + }) + }) + } + if (res.cancel) { + wx.reLaunch({ + url: '/pages/home/index', + }) + } + }, + }) + }, onReady() { this.videoContext = wx.createVideoContext('video') }, @@ -335,25 +369,24 @@ Page({ }) }, handleDownload() { - const that = this wx.getSetting({ - success(res) { + success: (res) => { if ( res.authSetting['scope.writePhotosAlbum'] != undefined && res.authSetting['scope.writePhotosAlbum'] == true ) { - that.saveImage() + this.saveImage() } else if (res.authSetting['scope.writePhotosAlbum'] == undefined) { // 获取当前位置 - that.saveImage() + this.saveImage() } else { wx.showModal({ title: '请求授权相册权限', content: '需要保存海报到相册,请确认授权', confirmColor: '#8c75d0', - success(res) { + success: (res) => { if (res.cancel) { // 取消授权 wx.showToast({ @@ -365,9 +398,9 @@ Page({ else if (res.confirm) { // 确定授权,通过wx.openSetting发起授权请求 wx.openSetting({ - success(res) { + success: (res) => { if (res.authSetting['scope.writePhotosAlbum'] == true) { - that.saveImage() + this.saveImage() } else { wx.showToast({ diff --git a/src/patient/pages/medical/index.json b/src/patient/pages/medical/index.json new file mode 100644 index 0000000..5c3ccc3 --- /dev/null +++ b/src/patient/pages/medical/index.json @@ -0,0 +1,6 @@ +{ + "usingComponents": { + "navbar": "/components/navbar/index", + "pickerArea": "/components/pickerArea/index" + } +} diff --git a/src/patient/pages/medical/index.scss b/src/patient/pages/medical/index.scss new file mode 100644 index 0000000..4ddecba --- /dev/null +++ b/src/patient/pages/medical/index.scss @@ -0,0 +1,112 @@ +page { + background-color: #f6f8f9; +} + +.page { + padding-bottom: 80rpx; + .page-title { + padding-top: 78rpx; + padding-left: 60rpx; + font-size: 56rpx; + color: #b982ff; + font-weight: bold; + } + .page-sub-title { + margin-top: 12rpx; + padding-left: 60rpx; + font-size: 32rpx; + color: #4c426b; + display: flex; + align-items: center; + gap: 8rpx; + .icon { + width: 36rpx; + height: 36rpx; + } + } + .form { + margin: 32rpx 40rpx 0; + padding: 0 32rpx 48rpx; + background: linear-gradient(180deg, rgba(243, 233, 255, 0.64) 0%, #ffffff 15.75%, #ffffff 100%); + box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(70, 67, 81, 0.06); + border-radius: 32rpx 32rpx 32rpx 32rpx; + border: 2rpx solid #ffffff; + .form-item { + padding: 48rpx 0 0; + .title { + display: flex; + align-items: center; + gap: 16rpx; + font-size: 36rpx; + color: #211d2e; + font-weight: bold; + .icon { + width: 16rpx; + height: 24rpx; + } + } + .picker-content { + position: relative; + margin-top: 16rpx; + padding: 20rpx 32rpx; + background: #f6f8f9; + border-radius: 24rpx 24rpx 24rpx 24rpx; + display: flex; + align-items: center; + justify-content: space-between; + color: #adacb2; + font-size: 36rpx; + .disable{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + } + } + .submit-btn { + margin-top: 48rpx; + height: 88rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 36rpx; + color: #ffffff; + background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%); + border-radius: 100rpx 100rpx 100rpx 100rpx; + } + } + .list { + margin: 24rpx 40rpx 0; + padding: 32rpx; + background: linear-gradient(0, #ffffff 0%, #ffffff 83.92%, #f4effd 100%); + box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(70, 67, 81, 0.06); + border-radius: 32rpx 32rpx 32rpx 32rpx; + border: 2rpx solid #ffffff; + .list-title { + display: flex; + align-items: center; + justify-content: center; + gap: 16rpx; + .content { + font-size: 36rpx; + color: #211d2e; + font-weight: bold; + } + .icon { + width: 68rpx; + height: 12rpx; + } + .icon-rotate { + transform: rotate(180deg); + } + } + .card { + margin: 24rpx 0 0; + display: block; + height: 208rpx; + border-radius: 24rpx; + } + } +} diff --git a/src/patient/pages/medical/index.ts b/src/patient/pages/medical/index.ts new file mode 100644 index 0000000..faf4821 --- /dev/null +++ b/src/patient/pages/medical/index.ts @@ -0,0 +1,57 @@ +const _app = getApp() + +Page({ + data: { + ProvinceName: '', + ProvinceId: '', + CityName: '', + CityId: '', + + hostipalName: '', + hostipalId: '', + hostipalList: [ + { + id: '1', + name: '北京医院', + }, + ], + }, + onLoad() {}, + handleChangeSite(e: WechatMiniprogram.CustomEvent) { + const detail = e.detail + this.setData({ + ProvinceId: detail.ProvinceId, + ProvinceName: detail.ProvinceName, + CityId: detail.CityId, + CityName: detail.CityName, + }) + }, + handleChange(e) { + const { hostipalList } = this.data + const hItem = hostipalList[e.detail.value] + this.setData({ + hostipalName: hItem.name, + hostipalId: hItem.id, + }) + }, + handleHostipalDisable() { + wx.showToast({ + title: '请先选择所在城市', + icon: 'none', + }) + }, + handleSubmit() { + if (!this.data.hostipalId) { + wx.showToast({ + icon: 'none', + title: '请先选择医院', + }) + return + } + wx.navigateTo({ + url: '/patient/pages/medicalDetail/index', + }) + }, +}) + +export {} diff --git a/src/patient/pages/medical/index.wxml b/src/patient/pages/medical/index.wxml new file mode 100644 index 0000000..9b85ed6 --- /dev/null +++ b/src/patient/pages/medical/index.wxml @@ -0,0 +1,57 @@ + + + + + 医保报销查询 + + + 医保政策轻松查询 + + + + + + 我的医保所在城市 + + + + {{ProvinceName}}{{CityName}} + 选择省份城市 + + + + + + + + 我就诊的医院 + + + + {{hostipalName}} + 选择就诊医院 + + + + + + 医保查询 + + + + + 关于替妥尤单抗 + + + + + diff --git a/src/patient/pages/medicalDetail/index.json b/src/patient/pages/medicalDetail/index.json new file mode 100644 index 0000000..c81a320 --- /dev/null +++ b/src/patient/pages/medicalDetail/index.json @@ -0,0 +1,8 @@ +{ + "usingComponents": { + "navbar": "/components/navbar/index", + "pickerArea": "/components/pickerArea/index", + "van-popup": "@vant/weapp/popup/index", + "popup": "/components/popup/index" + } +} diff --git a/src/patient/pages/medicalDetail/index.scss b/src/patient/pages/medicalDetail/index.scss new file mode 100644 index 0000000..272f57d --- /dev/null +++ b/src/patient/pages/medicalDetail/index.scss @@ -0,0 +1,189 @@ +page { + background-color: #f6f8f9; +} + +.page { + padding-bottom: 200rpx; + background: linear-gradient(to bottom, #f3ecf8 0%, #f6f8f9 100%) no-repeat top center/100% 412rpx; + .banner { + margin: 0 40rpx 0; + position: relative; + padding: 102rpx 32rpx 32rpx; + background: linear-gradient(0, #ffffff 0%, #ffffff 81.72%, #f2ebff 100%); + box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(70, 67, 81, 0.04); + border-radius: 32rpx 32rpx 32rpx 32rpx; + border: 2rpx solid #ffffff; + .badge { + position: absolute; + top: -78rpx; + left: calc(50% - 78rpx); + width: 156rpx; + height: 156rpx; + background: #ffffff; + border-radius: 0rpx 0rpx 0rpx 0rpx; + border: 2rpx solid #ece4fa; + border-radius: 50%; + overflow: hidden; + padding: 10rpx; + box-sizing: border-box; + .b-img { + width: 100%; + height: 100%; + } + } + .name { + font-size: 36rpx; + color: #211d2e; + text-align: center; + font-weight: bold; + } + .title { + padding-top: 12rpx; + padding-left: 12rpx; + margin-left: -12rpx; + margin-top: 32rpx; + font-size: 36rpx; + color: #211d2e; + font-weight: bold; + } + .content { + margin-top: 24rpx; + padding: 20rpx 32rpx; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 32rpx; + color: #211d2e; + line-height: 48rpx; + background: #f6f8f9; + border-radius: 24rpx 24rpx 24rpx 24rpx; + border: 2rpx solid #ffffff; + .icon { + width: 32rpx; + height: 32rpx; + } + } + } + .container { + margin: 24rpx 40rpx 0; + position: relative; + padding: 0 32rpx 32rpx; + background: linear-gradient(0, #ffffff 0%, #ffffff 81.72%, #f2ebff 100%); + box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(70, 67, 81, 0.04); + border-radius: 32rpx 32rpx 32rpx 32rpx; + border: 2rpx solid #ffffff; + .c-header { + padding: 12rpx 0 12rpx 12rpx; + margin-left: -12rpx; + margin-top: 32rpx; + font-size: 36rpx; + color: #211d2e; + font-weight: bold; + display: flex; + align-items: center; + justify-content: space-between; + .status { + font-size: 32rpx; + color: #1ec580; + font-weight: normal; + display: flex; + align-items: center; + gap: 12rpx; + .icon { + width: 36rpx; + height: 36rpx; + } + } + } + .row { + margin-top: 32rpx; + .r-title { + font-size: 32rpx; + color: #211d2e; + font-weight: bold; + display: flex; + align-items: center; + gap: 12rpx; + &::before { + content: ''; + width: 6rpx; + height: 32rpx; + background-color: #b982ff; + border-radius: 32rpx; + } + } + .r-content { + margin-top: 24rpx; + padding-bottom: 32rpx; + font-size: 32rpx; + color: #211d2e; + line-height: 40rpx; + white-space: pre-line; + word-break: break-all; + border-bottom: 1px solid #f6f8f9; + } + } + .tip { + margin-top: 32rpx; + font-size: 28rpx; + color: #211d2e; + } + .feedback { + margin: 24rpx 0 0; + font-size: 32rpx; + color: #b982ff; + text-align: center; + } + } + .page-footer { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + box-sizing: border-box; + padding: 12rpx 40rpx 80rpx; + background-color: #fff; + display: flex; + align-items: center; + justify-content: space-between; + gap: 22rpx; + box-shadow: 0 -10rpx 10rpx #f6f8f9; + .btn { + height: 88rpx; + text-align: center; + line-height: 88rpx; + flex: 1; + font-size: 36rpx; + color: #ffffff; + background: linear-gradient(344deg, #ffbcf9 0%, #b982ff 100%); + border-radius: 100rpx 100rpx 100rpx 100rpx; + } + } +} + +.popup-consult { + padding: 88rpx 50rpx 80rpx; + display: flex; + align-content: inherit; + gap: 30rpx; + background: #f6f8f9 linear-gradient(180deg, #f1e6ff 0%, #f6f8f9 49.07%, #f6f8f9 100%); + .item { + flex: 1; + padding: 20rpx; + background: #ffffff; + border-radius: 24rpx 24rpx 24rpx 24rpx; + border: 2rpx solid #ffffff; + text-align: center; + .icon { + margin: 0 auto; + display: block; + width: 116rpx; + height: 104rpx; + } + .name { + margin-top: 10rpx; + font-size: 32rpx; + color: #211d2e; + } + } +} diff --git a/src/patient/pages/medicalDetail/index.ts b/src/patient/pages/medicalDetail/index.ts new file mode 100644 index 0000000..040a6a5 --- /dev/null +++ b/src/patient/pages/medicalDetail/index.ts @@ -0,0 +1,68 @@ +const _app = getApp() + +Page({ + data: { + show: false, + + popupShow: false, + // popupType: 'popup12', // 医保客服弹窗 + popupType: 'popup13', // 医保介绍弹窗 + popupParams: { + close: true, + } as any, + }, + onLoad() {}, + handleInfo() { + this.setData({ + popupShow: true, + popupType: 'popup13', + }) + }, + handleFeedback() { + wx.showToast({ + title: '已收到您的报错反馈', + icon: 'none', + }) + }, + handleConsult() { + this.setData({ + show: true, + }) + }, + onClose() { + this.setData({ + show: false, + }) + }, + handlePhone() { + wx.makePhoneCall({ + phoneNumber: '123', + }) + this.onClose() + }, + handleCustomerService() { + this.setData({ + popupShow: true, + popupType: 'popup12', + }) + this.onClose() + }, + handleHostipal() { + wx.navigateTo({ + url: `/patient/pages/hospital/index?id=1`, + }) + }, + handlePopupOk() { + const { popupType } = this.data + if (popupType === 'popup13') { + } + this.handlePopupCancel() + }, + handlePopupCancel() { + this.setData({ + popupShow: false, + }) + }, +}) + +export {} diff --git a/src/patient/pages/medicalDetail/index.wxml b/src/patient/pages/medicalDetail/index.wxml new file mode 100644 index 0000000..14bffe7 --- /dev/null +++ b/src/patient/pages/medicalDetail/index.wxml @@ -0,0 +1,74 @@ + + + + + + + + 用药方式 + + + 可报销 + + + + 起付线 + 600元,第二次及以上,起付线300元 + + + 个人先行自付比例 + 20% + + + 职工医保 + 报销比例:90%(退休95%) + + + 居民医保 + + 参保人一个年度内因同一病种在同一家医疗机构住院的支付一次起付标准,未经转诊跨县(市)域在省属三级医疗机构住院治疗的,起付线增加0.5倍。报销比例:三级医院75%,省属三级医院70%。 + + + + 其他信息 + 1号以后可以申请使用高值药品备案备案成功后方可报销 + + 注:各地医保报销比例和具体政策请以当地执行为准 + + + + 我要咨询 + 了解就诊医院 + + + + + + + + 电话咨询 + + + + 咨询客服 + + + + +