| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- import PageContainerBehavior from "../../core/behavior/page-container.behavior";
- import { DraggableSheetBehavior, getDraggableSheetContext } from "../../core/behavior/draggableSheet.behavior";
- import { login } from "../../lib/logic";
- import { useRouteQuery } from "../../utils/route-query";
- import { appUpdate } from "../../lib/wx/update";
- const { shared, Easing, timing } = wx.worklet
- const offset = shared(0);
- const menus = ['shareAppMessage', 'shareTimeline'];
- // pages/home/home.ts
- import { getPatients, healthReportMethod, healthIndexMethod, getSolarTerms, getShortScienceList, getPatientDescription } from "./request";
- import { toCertificationPage } from "./router";
- import { useLocation } from "../../lib/use/use-location";
- Page({
- behaviors: [
- PageContainerBehavior,
- DraggableSheetBehavior('.draggable-sheet-wrapper'),
- ],
- onLoad(options) {
- appUpdate();
- const query = useRouteQuery(options.scene!);
- if (query.ys) wx.setStorageSync('doctorId', query.ys);
- this.initFabAnimated();
- },
- onShow() {
- wx.showShareMenu({ withShareTicket: true, menus }).then();
- this.load();
- },
- onHide() {
- wx.hideShareMenu({ menus }).then();
- offset.value = timing(0, { duration: 100, easing: (<any>Easing).linear }, () => { 'worklet' });
- },
- onShareAppMessage(opts): WechatMiniprogram.Page.ICustomShareContent {
- console.log(opts.target)
- return {
- title: `健康为基,从容赏生活之美`,
- imageUrl: `https://wx.hzliuzhi.com/media/healthManager/wx/share.jpg`,
- path: `/pages/home/home`,
- }
- },
- onShareTimeline() {
- return {
- title: `健康为基,从容赏生活之美`,
- }
- },
- data: {
- patients: [] as (App.Patient.Model & { isDefault: 'Y' | 'N' })[],
- patient: null as App.Patient.Model | null,
- patientDescription: '',
- healthId: '',
- healthReport: { data: null, message: '' },
- healthIndex: { data: [], message: '' },
- position: {} as AnyObject,
- location: {} as AnyObject,
- solarTerms: {} as AnyObject,
- sheet: false,
- scienceList: [] as AnyArray,
- _loaded: false,
- },
- async load(forceLogin = false) {
- try {
- await login(forceLogin);
- wx.showLoading({ title: '加载中' });
- const { patient } = await getPatients(/*this.data.patientId*/);
- if (!patient) await toCertificationPage();
- else {
- this.setData({ patient });
- this.observerPatient(patient);
- };
- wx.hideLoading();
- } catch (error) {
- await wx.showModal({
- title: `加载失败`,
- content: `${error?.errMsg ?? error?.message ?? ''}`,
- showCancel: false,
- confirmText: `重新加载`
- }).catch(() => { });
- this.load(true);
- return;
- }
- if (!this.data._loaded) {
- this.loadScienceList();
- useLocation().then((location) => { this.setData({ location }) }).catch(() => { });
- getSolarTerms().then((solarTerms) => { this.setData({ solarTerms }) }).catch(() => { });
- this.setData({ _loaded: true });
- }
- },
- 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') {
- this.setData({
- position: { CT: this.data.healthIndex.data.map((item, index) => `${index + 1}、${item}`) }
- });
- this.showDraggableSheet();
- }
- },
- initFabAnimated() {
- (<any>this).applyAnimatedStyle('.fab-wrapper', () => {
- 'worklet'
- return { right: `${Math.min(offset.value, 36) - 36}px` };
- });
- (<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: 500, easing: (<any>Easing).linear }, () => {
- 'worklet'
- if (offset.value > 0) offset.value = 72
- })
- },
- async toChatsPage() {
- if (!this.data.patient?.patientId) {
- try {
- await this.load();
- } catch (error) {
- wx.showModal({ title: '出错了', content: error?.errMsg ?? error?.message ?? '错误,请重试', showCancel: false })
- return;
- }
- }
- wx.navigateTo({ url: `/module/chats/pages/index/index` })
- },
- toHealthPage() {
- wx.navigateTo({ url: `/module/health/pages/home/home` })
- },
- toDietTonicPage() {
- wx.navigateTo({ url: `/module/article/pages/diet-list/diet-list?classify=tonic` })
- },
- toDietTeaPage() {
- wx.navigateTo({ url: `/module/article/pages/diet-list/diet-list?classify=tea` })
- },
- toSciencePage() {
- wx.navigateTo({ url: `/module/article/pages/science-list/science-list` })
- },
- 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' });
- },
- onDraggableSizeUpdate(e) {
- 'worklet'
- if (e.pixels < 1) {
- wx.worklet.runOnJS(this.hideDraggableSheet.bind(this))()
- }
- },
- showDraggableSheet() {
- getDraggableSheetContext.call(this).scrollTo({
- size: 0.5,
- pixels: 600,
- animated: true,
- duration: 300,
- easingFunction: 'ease'
- });
- this.setData({ sheet: true });
- },
- hideDraggableSheet(event?: any) {
- if (event) {
- getDraggableSheetContext.call(this).scrollTo({
- size: 0,
- animated: true,
- duration: 300,
- easingFunction: 'ease'
- });
- }
- this.setData({ position: {}, sheet: false })
- },
- async loadScienceList() {
- try {
- const { data } = await getShortScienceList();
- this.setData({ scienceList: data })
- } catch (error) {
- }
- },
- observerPatient(model: { patientId: string, sex: '0' | '1' }) {
- wx.setStorageSync('patientId', model.patientId);
- this._getHealthReport();
- this._getAbnormalHealthIndex();
- const patientIcon = { 0: 'gender-male', 1: 'gender-female' }[model.sex];
- const patientIconColor = { 0: '#0f40f5', 1: '#E560B3' }[model.sex];
- this.setData({ patientIcon, patientIconColor })
- getPatientDescription(model).then((patientDescription) => { this.setData({ patientDescription }) })
- },
- })
|