import dayjs from 'dayjs' const app = getApp() const licia = require('miniprogram-licia') let echarts: any = null Page({ data: { calendarDate: '', fold: true, ec: { lazyLoad: true, }, calendarConfig: { multi: false, hideSelectYear: true, autoChoosedWhenJump: true, firstDayOfWeek: 'Mon', theme: 'nuohe', takeoverTap: true, highlightToday: true, onlyShowCurrentMonth: true, disableMode: { type: 'after', // [‘before’, 'after'] }, }, foldAll: true, BeginMonth: '', EndMonth: '', Type: '2', Num: '' as string | number, fields: { 1: 'day', 2: 'month', 3: 'year', }, detail: {}, alertAdl: {}, partNameList: app.globalData.partNameList, list: [], pagination: { page: 1, pages: 1, count: 1, }, defaultList: [], count: 0, defaultListLast: {}, mList: [], zdUserInfo: {} as any, todayBg: '', page: 0, tableData: [ { title: '说话', key: 'TalkingScore', }, { title: '咀嚼', key: 'ChewScore', }, { title: '吞咽', key: 'SwallowScore', }, { title: '呼吸', key: 'BreathScore', }, { title: '刷牙梳头能力受损', key: 'BrushTeethAndCombHairScore', }, { title: '从椅子上起身能力受损', key: 'GetUpFromChairScore', }, { title: '复视/重影', key: 'DoubleVisionScore', }, { title: '眼睑下垂', key: 'DroopyEyelidsScore', }, ], selectLegends: { 呼吸: false, 延髓: false, 眼肌: false, 肢体: false, 总分: true, }, tab: 1, theme: '', }, ecDataTrendComponent: null as any, ecDataHormoneComponent: null as any, onLoad() { app.zdGetTheme().then((res) => { this.setData({ theme: res, }) }) }, async onShow() { echarts = await require.async('../../compontnts/echart/echarts.js') this.ecDataTrendComponent = this.selectComponent('#mychart-dom-bar') this.ecDataHormoneComponent = this.selectComponent('#mychart-hormone') this.setData({ calendarDate: dayjs().format('YYYY-MM'), }) this.handleChangeType() app.waitLogin().then(() => { // 强制疾病患者以上身份 app.zdPermissionVerification(3, 0, `/gift/pages/myHealthRecord/index`).then(() => { app.mpBehavior({ PageName: 'PG_PATIENTHEALTHRECORD' }) app.getZdUserInfo(this, true, (res) => { if (res.UserType != 4) { this.setData({ tab: 2, }) } this.getCale() this.handleTabCallBack() this.getMedicationAlertAdl() }) }) }) }, handleChangeInput() { if (Number(this.data.Num) > 100) { this.setData({ Num: 100, }) } }, getCale() { wx.ajax({ method: 'GET', url: '?r=zd/adl/cale', data: { Month: this.data.calendarDate, }, }).then((res) => { this.setCalendarTodos(res) }) }, setCalendarTodos({ adl = [], medication = [] }: { adl: any[]; medication: string[] }) { const theme = this.data.theme const calendar = this.selectComponent('#calendar').calendar const adlDate = adl.map((item) => item.Date) const dates: any[] = [] const intersectDate = licia.intersect(adlDate, medication) const filterAdlDate = adl.filter((item) => !intersectDate.includes(item.Date)) const filterMedication = medication.filter((item) => !intersectDate.includes(item)) const intersectAdlDate = adl.filter((item) => intersectDate.includes(item.Date)) const doc = theme === 'DRUG' ? 'doc' : ' ' filterMedication.forEach((Date: string) => { dates.push({ year: Date.split('-')[0], month: Date.split('-')[1], date: Date.split('-')[2], class: doc, }) }) intersectAdlDate.forEach(({ Date, TotalScore, LastTotalScore }) => { dates.push({ year: Date.split('-')[0], month: Date.split('-')[1], date: Date.split('-')[2], class: TotalScore > 5 || TotalScore - LastTotalScore >= 2 ? `error ${doc}` : `primary ${doc}`, }) }) filterAdlDate.forEach(({ Date, TotalScore, LastTotalScore }) => { dates.push({ year: Date.split('-')[0], month: Date.split('-')[1], date: Date.split('-')[2], class: TotalScore > 5 || TotalScore - LastTotalScore >= 2 ? 'error' : 'primary', }) }) calendar.setDateStyle(dates) }, getMedicationAlertAdl() { wx.ajax({ method: 'GET', url: '?r=zd/medication/medication-alert-adl', data: {}, }).then((res) => { this.setData({ alertAdl: res, }) }) }, handleWhenChangeMonth(e: { detail: { next: any } }) { const current = e.detail.next this.setData({ calendarDate: dayjs(`${current.year}-${current.month}`).format('YYYY-MM'), }) this.getCale() }, handleChangeType(e?: WechatMiniprogram.CustomEvent) { let type = '' let callback = true if (e) { type = e.currentTarget.dataset.type } else { type = this.data.Type callback = false } let EndMonth = '' let BeginMonth = '' if (type == '1') { if (e) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDDAILYCURVE' }) } EndMonth = dayjs().format('YYYY-MM-DD') BeginMonth = dayjs().subtract(6, 'd').format('YYYY-MM-DD') } else if (type == '2') { if (e) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDMONTHLYCURVE' }) } EndMonth = dayjs().format('YYYY-MM') BeginMonth = dayjs().subtract(1, 'M').format('YYYY-MM') } else if (type == '3') { if (e) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDYEARLYCURVE' }) } EndMonth = dayjs().format('YYYY') BeginMonth = dayjs().subtract(1, 'y').format('YYYY') } else if (type == '4' && e) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDTIMECURVE' }) } this.setData({ page: 0, Type: type, Num: '5', EndMonth, BeginMonth, }) if (callback) { this.handleTabCallBack() } }, handleChange() { this.handleTabCallBack() }, handleTab(e) { const { index } = e.currentTarget.dataset this.setData({ tab: index, }) if (index == 1) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDCOMPREHENSIVEREPORT' }) } if (index == 2) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDDUALCOMPLIANCENOTES' }) } if (index == 3) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDMEDICATIONRECORD' }) } this.handleTabCallBack() }, handleTabCallBack() { const tab = this.data.tab this.setData({ pagination: { page: 1, pages: 1, count: 1, }, }) if (tab == 1) { this.getAllList() } if (tab == 2) { this.getList() } if (tab == 3) { this.getMedicationList() } this.getChart() }, getAllList(newPage = 1) { const { BeginMonth, EndMonth, Type, Num } = this.data wx.ajax({ method: 'GET', url: '?r=zd/adl/composite-list', data: { Type: Number(Type) === 4 ? 2 : 1, DateType: Number(Type) === 4 ? '' : Number(Type), StartDate: BeginMonth, EndDate: EndMonth, Num, page: newPage, }, }).then((res) => { const list = res.list list.map((item) => { let grade = 1 if (item.TotalScore < 5) { grade = 1 } else if (item.TotalScore >= 5 && item.TotalScore < 15) { grade = 2 } else { grade = 3 } item.grade = grade item.fold = true return item }) const newList = res.page === 1 ? res.list : [...this.data.list, ...res.list] this.setData({ list: newList, pagination: { page: res.page, pages: res.pages, count: res.count, }, }) }) }, onReachBottom() { const { page, pages } = this.data.pagination const tab = this.data.tab if (pages > page) { if (tab == 1) { this.getAllList(page + 1) } if (tab == 2) { this.getList(page + 1) } if (tab == 3) { this.getMedicationList(page + 1) } } }, getList(newPage = 1) { const { BeginMonth, EndMonth, Type, Num } = this.data wx.ajax({ method: 'GET', url: '?r=zd/adl/list', data: { Type: Number(Type) === 4 ? 2 : 1, DateType: Number(Type) === 4 ? '' : Number(Type), StartDate: BeginMonth, EndDate: EndMonth, Num, page: newPage, }, }).then((res) => { const list = res.list list.map((item) => { let grade = 1 if (item.TotalScore < 5) { grade = 1 } else if (item.TotalScore >= 5 && item.TotalScore < 15) { grade = 2 } else { grade = 3 } item.grade = grade item.fold = true item.Type = 1 return item }) const newList = res.page === 1 ? res.list : [...this.data.list, ...res.list] this.setData({ list: newList, pagination: { page: res.page, pages: res.pages, count: res.count, }, }) }) }, getMedicationList(newPage = 1) { const { BeginMonth, EndMonth, Type, Num } = this.data wx.ajax({ method: 'GET', url: '?r=zd/medication/list', data: { Type: Number(Type) === 4 ? 2 : 1, DateType: Number(Type) === 4 ? '' : Number(Type), StartDate: BeginMonth, EndDate: EndMonth, Num, page: newPage, }, }).then((res) => { const list = res.list list.map((item) => { let grade = 1 if (item.TotalScore < 5) { grade = 1 } else if (item.TotalScore >= 5 && item.TotalScore < 15) { grade = 2 } else { grade = 3 } item.grade = grade item.fold = true item.Type = 2 return item }) const newList = res.page === 1 ? res.list : [...this.data.list, ...res.list] this.setData({ list: newList, pagination: { page: res.page, pages: res.pages, count: res.count, }, }) }) }, getChart() { const { BeginMonth, EndMonth, Type, Num } = this.data wx.ajax({ method: 'GET', url: '?r=zd/adl/list', data: { Type: Number(Type) === 4 ? 2 : 1, DateType: Number(Type) === 4 ? '' : Number(Type), StartDate: BeginMonth, EndDate: EndMonth, Num, count: 0, IsAsc: 1, }, }).then(async (res) => { if (Number(Type) == 4) { this.setData({ defaultList: res.list, count: res.list.length, defaultListLast: res.list.at(-1), }) const chart1 = await this.initChart(res.list) const chart2 = await this.initHormoneChart(res.list) echarts.connect([chart1, chart2]) } }) if (Number(Type) != 4) { wx.ajax({ method: 'GET', url: '?r=zd/adl/graph', data: { Type: Number(Type) === 4 ? 2 : 1, DateType: Number(Type) === 4 ? '' : Number(Type), StartDate: BeginMonth, EndDate: EndMonth, count: 0, }, }).then(async (res) => { const medication = res.medication.map((item) => { return { Date: item.InjectionDate, ...item, } }) const list = res.list const newList: any[] = this.mergeArr(list, medication) if (Number(Type) != 4) { this.setData({ defaultList: newList as never[], defaultListLast: newList.at(-1), count: list.length, }) const chart1 = await this.initChart(newList as never[]) const chart2 = await this.initHormoneChart(newList as never[]) echarts.connect([chart1, chart2]) } }) } }, mergeArr(array1: any[] = [], array2: any[] = []) { // 合并两个数组中相同Date字段的对象 const mergedArray: any[] = [] const mergedMap = new Map() array1.concat(array2).forEach((obj) => { const date = obj.Date if (mergedMap.has(date)) { mergedMap.get(date).push(obj) } else { mergedMap.set(date, [obj]) } }) mergedMap.forEach((objs: any) => { if (objs.length === 1) { mergedArray.push(objs[0]) } else { const mergedObj = objs.reduce((acc, cur) => ({ ...acc, ...cur })) mergedArray.push(mergedObj) } }) // 按照Date字段对合并后的数组进行排序 mergedArray.sort((a, b) => { return a.Date.localeCompare(b.Date) }) return mergedArray }, initChart(defaultList = []) { const { theme } = this.data const list: any = defaultList return new Promise((reslove) => { this.ecDataTrendComponent.init((canvas, width, height, dpr) => { const chart = echarts.init(canvas, null, { width, height, devicePixelRatio: dpr, // new }) canvas.setChart(chart) const option: any = { tooltip: { show: false, trigger: 'axis', axisPointer: { type: 'shadow', }, confine: true, backgroundColor: 'rgba(0, 0, 0, 0.5)', textStyle: { color: '#fff', fontSize: 10, }, order: 'seriesDesc', }, grid: { top: '30', left: '0', right: '0', bottom: '10', containLabel: true, }, xAxis: [ { type: 'category', axisTick: { show: true, inside: true, length: 1, alignWithLabel: true, lineStyle: { type: 'dotted', color: '#D8D8D8', width: 4, cap: 'round', }, }, axisLine: { lineStyle: { color: '#8C8C8C', type: 'dashed', }, }, data: list.map((item) => dayjs(item.Date).format('MM-DD')), axisLabel: { formatter() { return '' }, }, }, ], yAxis: [ { type: 'value', minInterval: 1, }, ], series: [ { name: '总分', data: list.length ? list.map((item) => item.TotalScore) : [25], barWidth: '16', label: { show: true, position: 'top', color: '#CF5375', }, type: 'line', symbol: 'circle', symbolSize: 8, showSymbol: list.length >= 1, connectNulls: true, z: 10, itemStyle: { color: '#CF5375', }, markLine: { symbol: ['none', 'none'], data: [ { name: '达标区(1分)', yAxis: 1, label: { formatter: '{b}', position: 'insideMiddle', color: '#24D8C8', fontSize: '10', }, lineStyle: { cap: '', color: '#34D7C7', type: 'dashed', }, }, ], }, markArea: { itemStyle: { color: 'rgba(37,217,200,0.19)', }, data: [ [ { yAxis: 0, }, { yAxis: 1, }, ], ], }, }, ], dataZoom: { type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。 startValue: 0, endValue: 4, filterMode: 'none', }, } if (theme === 'DRUG') { const markLineData = list .filter((item) => item.InjectionBottles) .map((item) => { return { name: '', xAxis: dayjs(item.Date).format('MM-DD'), lineStyle: { color: 'rgba(37, 217, 200,0.5)', cap: '', type: 'solid', }, label: { formatter: '', position: 'insideEndBottom', rotate: 0, color: '#25D9C8', offset: [60, 0], }, } }) option.series.push({ name: '用药', data: list.map((item) => (item.InjectionBottles ? 0 : null)), type: 'line', symbol: 'image://data:image/png;base64,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', symbolSize: [11, 16], symbolOffset: [0, 0], itemStyle: { color: '#25D9C8', }, lineStyle: { width: 0, }, tooltip: { show: false, }, z: 11, markLine: { symbol: ['none', 'none'], data: markLineData, }, }) // option.series.push({ // name: "用药时间", // data: list.map((item: any) => (item.InjectionBottles ? item.TotalScore : 0)), // type: "line", // symbol: // "image://data:image/png;base64,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", // symbolSize: [11, 16], // symbolOffset: [0, "100%"], // itemStyle: { // color: "#25D9C8", // }, // tooltip: { // show: false, // }, // lineStyle: { // width: 0, // }, // z: 1, // }); } chart.setOption(option) reslove(chart) return chart }) }) }, initHormoneChart(defaultList = []) { const { theme } = this.data const list: any = defaultList return new Promise((reslove) => { this.ecDataHormoneComponent.init((canvas, width, height, dpr) => { const chart = echarts.init(canvas, null, { width, height, devicePixelRatio: dpr, // new }) canvas.setChart(chart) const option: any = { tooltip: { show: false, trigger: 'axis', axisPointer: { type: 'shadow', }, confine: true, backgroundColor: 'rgba(0, 0, 0, 0.5)', textStyle: { color: '#fff', fontSize: 10, }, order: 'seriesDesc', }, grid: { top: '30', left: '0', right: '0', bottom: '10', containLabel: true, }, xAxis: [ { type: 'category', axisTick: { show: true, inside: true, length: 1, alignWithLabel: true, lineStyle: { type: 'dotted', color: '#D8D8D8', width: 4, cap: 'round', }, }, axisLine: { lineStyle: { color: '#8C8C8C', type: 'dashed', }, }, data: list.map((item) => dayjs(item.Date).format('MM-DD')), }, ], yAxis: [ { type: 'value', minInterval: 1, max(value) { return value.max + 20 > 999 ? 999 : value.max + 20 }, axisLabel: { // width: 20, formatter(value: number) { return value }, }, }, ], series: [ { name: '激素用量', data: list.length ? list.map((item) => item.SteroidDailyDose) : [20], barWidth: '16', type: 'line', symbol: 'circle', symbolSize: 8, connectNulls: true, showSymbol: list.length >= 1, z: 10, label: { show: true, position: 'top', color: '#18474e', z: 11, formatter({ value }) { return `${value}mg` }, }, itemStyle: { color: '#3192A1', }, markLine: { symbol: ['none', 'none'], data: [ { name: '达标区(5mg)', yAxis: 5, label: { formatter: '{b}', position: 'insideMiddle', color: '#24D8C8', fontSize: '10', }, lineStyle: { cap: '', color: '#34D7C7', type: 'dashed', }, }, ], }, markArea: { itemStyle: { color: 'rgba(37,217,200,0.19)', }, data: [ [ { yAxis: 0, }, { yAxis: 5, }, ], ], }, }, ], dataZoom: { type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。 startValue: 0, endValue: 4, filterMode: 'none', }, } if (theme === 'DRUG') { const markLineData = list .filter((item) => item.InjectionBottles) .map((item) => { return { name: '', xAxis: dayjs(item.Date).format('MM-DD'), lineStyle: { color: 'rgba(37, 217, 200,0.5)', cap: '', type: 'solid', }, label: { formatter: '', position: 'insideEndBottom', rotate: 0, color: '#25D9C8', offset: [60, 0], }, } }) const maxValue = Math.max(...list.map((item) => item.SteroidDailyDose)) option.series.push({ name: '用药', data: list.map((item) => (item.InjectionBottles ? 0 : null)), type: 'line', symbol: 'image://data:image/png;base64,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', symbolSize: [11, 16], symbolOffset: [0, 0], itemStyle: { color: '#25D9C8', }, lineStyle: { width: 0, }, tooltip: { show: false, }, z: 11, markLine: { symbol: ['none', 'none'], data: markLineData, }, }) // option.series.push({ // name: "用药时间", // data: list.map((item: any) => (item.InjectionBottles ? item.TotalScore : 0)), // type: "line", // symbol: // "image://data:image/png;base64,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", // symbolSize: [11, 16], // symbolOffset: [0, "100%"], // itemStyle: { // color: "#25D9C8", // }, // tooltip: { // show: false, // }, // lineStyle: { // width: 0, // }, // z: 1, // }); } chart.setOption(option) reslove(chart) return chart }) }) }, touchend(e) { const { type } = e.currentTarget.dataset const { page, defaultList } = this.data if (type == 'left' && page > 0) { this.setData({ page: page - 1, }) this.initChart(defaultList) this.initHormoneChart(defaultList) } else if (type == 'right' && page < defaultList.length / 5 - 1) { this.setData({ page: page + 1, }) this.initChart(defaultList) this.initHormoneChart(defaultList) } }, handleFoldAll() { const { list } = this.data this.setData({ list: list.map((item) => { item.fold = !this.data.foldAll return item }), foldAll: !this.data.foldAll, }) }, handleFold(e) { const { index } = e.currentTarget.dataset this.setData({ [`list[${index}].fold`]: !this.data.list[index].fold, }) }, handleDetail(e) { const { id, isi } = e.currentTarget.dataset const tab = this.data.tab if (isi == 1) { return } if (tab == 1) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDREPORTLIST' }) } if (tab == 2) { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDNOTESLIST' }) } wx.navigateTo({ url: `/pages/adlResult/index?id=${id}`, }) }, handleDel(e) { const { id, index, isi } = e.currentTarget.dataset if (isi == 1) { return } if (index != 0) return wx.showModal({ title: '确认删除?', confirmColor: '#cf5375', success: (res) => { if (res.confirm) { wx.ajax({ method: 'POST', url: '?r=zd/adl/delete', data: { Id: id, }, }).then(() => { this.handleTabCallBack() }) } }, }) }, handleAdd() { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDASSESSMENT' }) wx.navigateTo({ url: '/pages/adl/index', }) }, handleAddDrug() { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDMEDICATION' }) wx.navigateTo({ url: '/pages/drugRecord/index', }) }, handleChartDetail() { const that = this wx.navigateTo({ url: '/gift/pages/myHealthRecordChart/index', success(res) { res.eventChannel.emit('acceptDataFromOpenerPage', { list: that.data.defaultList, selectLegends: that.data.selectLegends, }) }, }) }, handleDetailDrug(e) { const { id, isi } = e.currentTarget.dataset app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDMEDICATIONLIST' }) if (isi == 1) { return } wx.navigateTo({ url: `/pages/drugRecord/index?id=${id}`, }) }, handleDelDrug(e) { const { id, isi } = e.currentTarget.dataset if (isi == 1) { return } wx.showModal({ title: '确认删除?', confirmColor: '#cf5375', success: (res) => { if (res.confirm) { wx.ajax({ method: 'POST', url: '?r=zd/medication/delete', data: { Id: id, }, }).then(() => { this.handleTabCallBack() }) } }, }) }, toggleFold() { this.setData({ fold: !this.data.fold, }) }, handleShare() { app.mpBehavior({ PageName: 'BTN_PATIENTHEALTHRECORDSHAREDUALCOMPLIANCEPOSTER' }) wx.navigateTo({ url: '/pages/adlShare/index', }) }, handleBack() { wx.navigateBack({ fail() { wx.reLaunch({ url: '/pages/index/index' }) }, }) }, onShareAppMessage() { return { title: 'MG-ADL测评表:评估重症肌无力患者症状对生活质量的影响', path: '/pages/adl/index', } }, })