import dayjs from 'dayjs'; const app = getApp(); let echarts: any = null; Page({ data: { toastShow: false, toastType: 'patientDetailSafeDoctor', toastParams: {} as any, showTel: false, doctor: {}, hospital: {}, id: '', remark: '', detail: {} as any, ec: { lazyLoad: true, }, fields: { 1: 'day', 2: 'month', 3: 'year', }, StartDate: '', EndDate: '', typeRange: [ { id: '1', value: '按天', }, { id: '2', value: '按月', }, { id: '3', value: '按年', }, ], type: '3', typeName: '按年', userInfo: {}, popupRemarkShow: false, remarkFocus: false, popupEditShow: false, antibodyTypeRangeList: [ { id: '1', value: 'AchR', }, { id: '2', value: 'MuSK', }, { id: '3', value: 'LRP4', }, { id: '4', value: 'RyR', }, ], thyroidAbnormalRangeList: [ { id: '1', value: '是', }, { id: '2', value: '否', }, ], previousConvulsionRangeList: [ { id: '1', value: '是', }, { id: '2', value: '否', }, ], traditionalImmunosuppressantRangeList: [ { id: '1', value: '他克莫司', }, { id: '2', value: '硫唑嘌呤', }, { id: '3', value: '吗替麦考酚酯', }, { id: '4', value: '其它', }, ], medicalInsuranceTypeRangeList: [ { id: '1', value: '城市职工', }, { id: '2', value: '城市居民', }, { id: '3', value: '新农合', }, ], nav: '0', adlList: [] as any, 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', }, ], pagination: { page: 1, pages: 1, count: 1, }, }, ecDataTrendComponent1: null as any, ecDataTrendComponent2: null as any, ecDataTrendComponent3: null as any, ecDataTrendComponent4: null as any, async onLoad(option) { this.setData({ id: option.id, }); echarts = await require.async('../../gift/compontnts/echart/echarts.js'); this.ecDataTrendComponent1 = this.selectComponent('#chart1'); this.ecDataTrendComponent2 = this.selectComponent('#chart2'); this.ecDataTrendComponent3 = this.selectComponent('#chart3'); this.ecDataTrendComponent4 = this.selectComponent('#chart4'); app.waitLogin({ type: [2] }).then(async (_res) => { app.zdMpBehavior({ doctor: true, PageName: 'PG_DOCTORPATIENTDETAIL' }); this.getDoctorDetail(); await this.getDetail(); this.handleNav({ currentTarget: { dataset: { index: '0' } } }, false); }); }, getDoctorDetail() { wx.ajax({ method: 'GET', url: '?r=zd/doctor/account/info', data: {}, }).then((res) => { this.setData({ doctor: res.doctor, hospital: res.hospital, toastShow: true, toastType: 'patientDetailSafeDoctor', toastParams: { Name: res.doctor.Name, HospitalName: res.hospital.Name, }, }); }); }, getDetail() { return wx .ajax({ method: 'GET', url: '?r=zd/doctor/patient/info', data: { patientId: this.data.id }, }) .then((res) => { if (res.LastAdlTime) { res.LastAdlTimeName = dayjs(res.LastAdlTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', ''); } if (res.LastUseDrugsTime) { res.LastUseDrugsTimeName = dayjs().format('YYYY-MM-DD') === res.LastUseDrugsTime ? '' : dayjs(res.LastUseDrugsTime).from(dayjs().format('YYYY-MM-DD')).replace(' ', ''); } this.setData({ detail: { ...res, hideName: res.Name.replace(/^(.)(.*)$/, (_, first, rest) => first + '*'.repeat(rest.length)), }, }); }); }, handleTypeChange(e) { const index = e.detail.value; const { typeRange, nav } = this.data; const type = typeRange[index].id; const typeName = typeRange[index].value; let EndDate = ''; let StartDate = ''; if (type === '1') { EndDate = dayjs().format('YYYY-MM-DD'); StartDate = dayjs().subtract(6, 'd').format('YYYY-MM-DD'); } else if (type === '2') { EndDate = dayjs().format('YYYY-MM'); StartDate = dayjs().subtract(1, 'M').format('YYYY-MM'); } else if (type === '3') { EndDate = dayjs().format('YYYY'); StartDate = dayjs().subtract(1, 'y').format('YYYY'); } this.setData({ type, typeName, EndDate, StartDate, }); if (nav === '0') { this.getGraph(); } else { this.getAdlList(); } }, handleChange() { const { nav } = this.data; if (nav === '0') { this.getGraph(); } else { this.getAdlList(); } }, getGraph() { wx.ajax({ method: 'GET', url: '?r=zd/doctor/patient/adl-graph', data: { patientId: this.data.id, StartDate: this.data.StartDate, EndDate: this.data.EndDate, DateType: this.data.type, count: 0, }, }).then(async (res) => { this.initChart1(res.adlSummary); this.initChart2(res.adlSummary); const medication = res.medication.map((item) => { return { Date: item.InjectionDate, ...item, }; }); const list = res.list; const newList: any[] = this.mergeArr(list, medication); const chart3 = await this.initChart3(newList as never[]); const chart4 = await this.initChart4(newList as never[]); echarts.connect([chart3, chart4]); }); }, 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; }, initChart1(adlSummary = {}) { this.ecDataTrendComponent1.init((canvas, width, height, dpr) => { const chart = echarts.init(canvas, null, { width, height, devicePixelRatio: dpr, // new }); canvas.setChart(chart); const option = { tooltip: { trigger: 'item', formatter: '{b} \n {c}次,{d}%', }, legend: { show: false, }, color: ['rgba(226, 219, 65, 1)', 'rgba(215, 108, 108, 1)', 'rgba(98, 190, 208, 1)'], series: [ { name: '全部患者', type: 'pie', radius: ['40%', '60%'], center: ['50%', '50%'], label: { show: true, width: 80, alignTo: 'edge', minMargin: 5, edgeDistance: 10, lineHeight: 15, formatter: '{b} \n{time|{d}%}', rich: { time: { fontSize: 10, color: '#999', }, }, }, labelLine: { length: 15, length2: 0, maxSurfaceAngle: 80, }, labelLayout(params) { const isLeft = params.labelRect.x < chart.getWidth() / 2; const points = params.labelLinePoints; // Update the end point. points[2][0] = isLeft ? params.labelRect.x : params.labelRect.x + params.labelRect.width; return { labelLinePoints: points, }; }, data: [ { value: adlSummary.adlNearNum, name: 'ADL接近达标' }, { value: adlSummary.adlUnStandardNum, name: 'ADL未达标' }, { value: adlSummary.adlStandardNum, name: 'ADL达标' }, ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)', }, }, }, ], }; chart.setOption(option); return chart; }); }, initChart2(adlSummary = {}) { this.ecDataTrendComponent2.init((canvas, width, height, dpr) => { const chart = echarts.init(canvas, null, { width, height, devicePixelRatio: dpr, // new }); canvas.setChart(chart); const option = { tooltip: { trigger: 'item', formatter: '{b} \n {c}次,{d}%', }, legend: { show: false, }, color: ['rgba(215, 108, 108, 1)', 'rgba(98, 190, 208, 1)'], series: [ { name: '全部患者', type: 'pie', radius: ['40%', '60%'], center: ['50%', '50%'], label: { show: true, width: 80, alignTo: 'edge', minMargin: 5, edgeDistance: 10, lineHeight: 15, formatter: '{b} \n{time|{d}%}', rich: { time: { fontSize: 10, color: '#999', }, }, }, labelLine: { length: 15, length2: 0, maxSurfaceAngle: 80, }, labelLayout(params) { const isLeft = params.labelRect.x < chart.getWidth() / 2; const points = params.labelLinePoints; // Update the end point. points[2][0] = isLeft ? params.labelRect.x : params.labelRect.x + params.labelRect.width; return { labelLinePoints: points, }; }, data: [ { value: adlSummary.SteroidDailyDoseUnStandardNum, name: '激素未达标' }, { value: adlSummary.SteroidDailyDoseStandardNum, name: '激素达标' }, ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)', }, }, }, ], }; chart.setOption(option); return chart; }); }, initChart3(defaultList = []) { const { userInfo } = this.data; const list: any = defaultList; return new Promise((reslove) => { this.ecDataTrendComponent3.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: list.length - 5, endValue: list.length - 1, filterMode: 'none', }, }; if (this.data.detail.UserType === 4) { 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; }); }); }, initChart4(defaultList = []) { const { userInfo } = this.data; const list: any = defaultList; return new Promise((reslove) => { this.ecDataTrendComponent4.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', }, }, { name: '20', yAxis: 20, label: { formatter: '{b}', position: 'start', color: '#D76C6C', distance: 8, }, lineStyle: { cap: '', color: '#D76C6C', type: 'dashed', }, }, ], }, markArea: { itemStyle: { color: 'rgba(37,217,200,0.19)', }, data: [ [ { yAxis: 0, }, { yAxis: 5, }, ], ], }, }, ], dataZoom: { type: 'inside', // 有type这个属性,滚动条在最下面,也可以不行,写y:36,这表示距离顶端36px,一般就是在图上面。 startValue: list.length - 5, endValue: list.length - 1, filterMode: 'none', }, }; if (this.data.detail.UserType === 4) { 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; }); }); }, handleRemark() { app.zdMpBehavior({ doctor: true, PageName: 'BTN_DOCTORPATIENTDETAILREMARK' }); this.setData({ popupRemarkShow: true, remark: this.data.detail.DoctorRemark, }); setTimeout(() => { this.setData({ remarkFocus: true, }); }, 300); }, handleRemarkClose() { this.setData({ popupRemarkShow: false, remarkFocus: false, remark: '', }); }, handleRemarkSubmit() { if (!this.data.remark) { wx.showToast({ icon: 'none', title: '请输入备注', }); } wx.ajax({ method: 'POST', url: '?r=zd/doctor/patient/remark', data: { PatientId: this.data.id, DoctorRemark: this.data.remark, }, }).then((_res) => { this.handleRemarkClose(); this.getDetail(); }); }, handleEditUser() { app.zdMpBehavior({ doctor: true, PageName: 'BTN_DOCTORPATIENTDETAILEDIT' }); this.setData({ popupEditShow: true, }); }, handleUserCancel() { this.setData({ popupEditShow: false, }); }, handleUserSubmit() { this.handleUserCancel(); this.handlePatientUpdate(); }, handleRadio(e) { const { id, key } = e.currentTarget.dataset; this.setData({ [`detail.${key}`]: id, }); }, handlePatientUpdate() { const { detail } = this.data; wx.ajax({ method: 'POST', url: '?r=zd/doctor/patient/update', data: { PatientId: detail.PatientId, //患者Id AntibodyType: detail.AntibodyType, //抗体类型 1:AChR 2:Musk 3:LRP4 4:RYR ThyroidAbnormal: detail.ThyroidAbnormal, //胸腺异常 1:是 2:否 PreviousConvulsion: detail.PreviousConvulsion, //既往发生危象 1:是 2:否 TraditionalImmunosuppressant: detail.TraditionalImmunosuppressant, //传统免疫抑制剂 1:特克莫苏 2:硫唑嘌呤 3:马替麦考酚酯 4:其他 MedicalInsuranceType: detail.MedicalInsuranceType, //医保类型 1:城市职工 2:城市居民 3:新农合 }, }).then(() => { wx.showToast({ icon: 'none', title: '更新成功', }); this.getDetail(); }); }, handleBack() { wx.navigateBack(); }, handleSend() { app.zdMpBehavior({ doctor: true, PageName: 'BTN_DOCTORPATIENTDETAILMESSAGE' }); wx.navigateTo({ url: `/pages/d_interactiveDoctor/index?patientId=${this.data.detail.PatientId}`, }); }, handleNav(e, mp = true) { const { index } = e.currentTarget.dataset; if (index == 0 && mp) { app.zdMpBehavior({ doctor: true, PageName: 'BTN_DOCTORPATIENTDETAILREPORTGUIDE' }); } if (index == 1 && mp) { app.zdMpBehavior({ doctor: true, PageName: 'BTN_DOCTORPATIENTDETAILNOTEGUIDE' }); } this.setData({ nav: index, }); this.handleTypeChange({ detail: { value: '2' } }); }, getAdlList(newPage = 1) { const { detail, EndDate, StartDate, type } = this.data; wx.ajax({ method: 'GET', url: '?r=zd/doctor/patient/adl-list', data: { DateType: type, PatientId: detail.PatientId, StartDate, EndDate, page: newPage, }, }).then((res) => { res.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 = false; return item; }); const adlList = res.page === 1 ? res.list : [...this.data.adlList, ...res.list]; this.setData({ adlList, pagination: { page: res.page, pages: res.pages, count: res.count, }, }); }); }, onReachBottom() { const { page, pages } = this.data.pagination; const nav = this.data.nav; if (pages > page && nav === '1') { this.getAdlList(page + 1); } }, handleFold(e) { const { index } = e.currentTarget.dataset; this.setData({ [`adlList[${index}].fold`]: !this.data.adlList[index].fold, }); }, handleAdlDetail() {}, handleToastOk() { this.setData({ toastShow: false, }); }, handleToastCancel() { wx.navigateBack(); }, handleToggleTel() { console.log(11111); this.setData({ showTel: !this.data.showTel, }); }, });