| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- import PageContainerBehavior from "../../core/behavior/page-container.behavior";
- import { DraggableSheetBehavior, getDraggableSheetContext } from "../../core/behavior/draggableSheet.behavior";
- import { login } from "../../lib/logic";
- import { Post } from "../../lib/request/method";
- const { shared, Easing, timing } = wx.worklet
- const offset = shared(0);
- const styleIds = [];
- // pages/home/home.ts
- import { getPatients, healthReportMethod, healthIndexMethod } from "./request";
- import { toCertificationPage } from "./router";
- Component({
- behaviors: [
- PageContainerBehavior,
- DraggableSheetBehavior('.draggable-sheet-wrapper'),
- ],
- lifetimes: {
- attached() { this.initFabAnimated(); }
- },
- pageLifetimes: {
- show() { this.load(); }
- },
- properties: {
- patientId: { type: String, value: '' },
- next: { type: String, value: '' },
- },
- data: {
- patients: [] as (App.Patient.Model & { isDefault: 'Y' | 'N' })[],
- patient: null as App.Patient.Model | null,
- healthId: '',
- healthReport: { data: null, message: '' },
- healthIndex: { data: [], message: '' },
- position: {} as AnyObject,
- },
- observers: {
- 'patient'(model: { patientId: string }) {
- wx.setStorageSync('patientId', model.patientId);
- this._getHealthReport();
- this._getAbnormalHealthIndex();
- }
- },
- methods: {
- async load() {
- await login();
- wx.showLoading({ title: '加载中' });
- const { patient } = await getPatients(this.data.patientId);
- if (!patient) await toCertificationPage();
- else this.setData({ patient });
- wx.hideLoading();
- },
- async _getHealthReport() {
- wx.showLoading({ title: '加载中' });
- this.setData({ 'healthReport.loading': true, })
- try {
- const data = await healthReportMethod();
- this.setData({
- 'healthReport.data': data,
- 'healthReport.loading': false,
- healthId: data?.healthAnalysisReportId,
- });
- } catch (error) {
- this.setData({
- 'healthReport.data': [],
- 'healthReport.loading': false,
- 'healthReport.message': error.errMsg,
- healthId: '',
- });
- }
- wx.hideLoading();
- },
- async _getAbnormalHealthIndex() {
- this.setData({ 'healthIndex.loading': true, })
- try {
- const data = await healthIndexMethod();
- this.setData({
- 'healthIndex.data': data.map((item: AnyObject) => item.abnormalDesc).filter(Boolean),
- 'healthIndex.loading': false,
- });
- } catch (error) {
- this.setData({
- 'healthIndex.data': [],
- 'healthIndex.loading': false,
- 'healthIndex.message': error.errMsg,
- });
- }
- },
- onBodyModel(event: WechatMiniprogram.TouchEvent) {
- if (event.detail?.position === 'LB') { this.toReportPage(); }
- else if (event.detail?.position === 'LT') {
- const report = this.data.healthReport.data as unknown as AnyObject;
- this.setData({
- position: {
- LT: ['willillState', 'willillDegree', 'willillSocial', 'willillFunction'].map(key => {
- const title = report[`${key}Name`]
- const description = report[`${key}Description`]
- return title || description ? { title, description } : null
- }).filter(Boolean)
- },
- });
- this.showDraggableSheet();
- }
- else if (event.detail?.position === 'RT') {
- const report = this.data.healthReport.data as unknown as AnyObject;
- const get = (key: string) => ({ [key]: report[key] })
- this.setData({
- position: {
- RT: {
- ...get('constitutionGroupName'),
- ...get('constitutionGroupDefinition'),
- ...get('faceImg'),
- ...get('faceAnalysisResult'),
- ...get('tongueAnalysisResult'),
- ...get('upImg'),
- ...get('downImg'),
- }
- },
- });
- this.showDraggableSheet();
- }
- else if (event.detail?.position === 'RB') {
- const report = this.data.healthReport.data as unknown as AnyObject;
- const get = (key: string) => ({ [key]: report[key] })
- this.setData({
- position: {
- RB: {
- ...get('diagnoseSyndromeSummary'),
- ...get('diagnoseSyndromes'),
- ...get('factorItemSummary'),
- ...get('factorItems'),
- }
- },
- });
- this.showDraggableSheet();
- }
- else if (event.detail?.position === 'CT') {
- wx.showModal({
- title: '预警信息',
- content: this.data.healthIndex.data.map((item, index) => `${index + 1}、${item}`).join(''),
- showCancel: false,
- })
- }
- },
- initFabAnimated() {
- (<any>this).applyAnimatedStyle('.fab-1', () => {
- 'worklet'
- return { transform: `translateY(${-offset.value}px)` };
- });
- (<any>this).applyAnimatedStyle('.fab-2', () => {
- 'worklet'
- return { transform: `translateX(${-offset.value}px) translateY(${-offset.value / 2}px)` };
- });
- (<any>this).applyAnimatedStyle('.fab-3', () => {
- 'worklet'
- return { transform: `translateX(${-offset.value}px) translateY(${offset.value / 2}px)` };
- });
- (<any>this).applyAnimatedStyle('.fab-4', () => {
- 'worklet'
- return { transform: `translateY(${offset.value}px)` };
- });
- },
- onFabTap() {
- const value = Math.abs(offset.value - 72);
- offset.value = timing(value, { duration: 300, easing: (<any>Easing).linear }, () => {
- 'worklet'
- if (offset.value > 0) offset.value = 72
- })
- },
- toChatsPage() {
- wx.navigateTo({ url: `/module/chats/pages/index/index` })
- },
- toHealthPage() {
- wx.navigateTo({ url: `/module/health/pages/home/home` })
- },
- toSchemePage() {
- const id = this.data.healthId;
- if (id) wx.navigateTo({ url: `/module/health/pages/scheme/scheme?id=${id}` })
- else wx.showToast({ title: '暂无调理方案', icon: 'none' });
- },
- toReportPage() {
- const id = this.data.healthId;
- if (id) wx.navigateTo({ url: `/module/health/pages/report/report?id=${id}` })
- else wx.showToast({ title: '暂无分析报告', icon: 'none' });
- },
- showDraggableSheet() {
- getDraggableSheetContext.call(this).scrollTo({
- size: 0.5,
- pixels: 600,
- animated: true,
- duration: 300,
- easingFunction: 'ease'
- });
- },
- hideDraggableSheet() {
- getDraggableSheetContext.call(this).scrollTo({
- size: 0,
- pixels: 600,
- animated: true,
- duration: 300,
- easingFunction: 'ease'
- });
- this.setData({ position: {} })
- }
- },
- })
|