From 380592f329634f9f862bbe1ad20b023b53c6a21e Mon Sep 17 00:00:00 2001
From: ziwu7 <263377135@qq.com>
Date: Sat, 3 Aug 2024 17:14:07 +0800
Subject: [PATCH 01/12] Addition of epidemic data statistics page and chart
performance optimization
---
package.json | 2 +-
pnpm-lock.yaml | 69 +++++++++-------
source/page/Statistics/index.tsx | 133 +++++++++++++++++++++++++++++++
source/page/data/menu.ts | 7 +-
source/page/index.tsx | 7 +-
source/service/Epidemic.ts | 13 +++
6 files changed, 198 insertions(+), 33 deletions(-)
create mode 100644 source/page/Statistics/index.tsx
diff --git a/package.json b/package.json
index 15ac71c..1e99f83 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
"classnames": "^2.5.1",
"dom-renderer": "^2.1.8",
"echarts": "^5.5.0",
- "echarts-jsx": "^1.2.0",
+ "echarts-jsx": "^1.2.1",
"github-web-widget": "^4.0.0-rc.2",
"koajax": "^1.1.2",
"mobx": "^6.12.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1218fc1..082dec3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -27,8 +27,8 @@ importers:
specifier: ^5.5.0
version: 5.5.0
echarts-jsx:
- specifier: ^1.2.0
- version: 1.2.0(typescript@5.4.5)
+ specifier: ^1.2.1
+ version: 1.2.1(typescript@5.4.5)
github-web-widget:
specifier: ^4.0.0-rc.2
version: 4.0.0-rc.2(element-internals-polyfill@1.3.11)(typescript@5.4.5)
@@ -802,12 +802,6 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.21.5':
- resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
'@esbuild/linux-ia32@0.21.5':
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
@@ -2022,6 +2016,11 @@ packages:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
+ declarative-shadow-dom-polyfill@0.4.0:
+ resolution: {integrity: sha512-a3c/x43EIo+gzc7ZPY1NuOowPOClqaaU+5G1wwOG7h5xQ8UhZPM6NYcSDsvhTn9Pyc275pmvSUPPY+r4pPTOVA==}
+ peerDependencies:
+ typescript: '>=5.5.3'
+
decompress-response@3.3.0:
resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==}
engines: {node: '>=4'}
@@ -2071,6 +2070,9 @@ packages:
dom-renderer@2.1.8:
resolution: {integrity: sha512-XciJAb8pAFAlpFOBO79njazvbfNzA16+045Uie5kZORSu+NY5X2cecjI4nyT4M4ji0nzRsF8P8KHH8xvKM1cdg==}
+ dom-renderer@2.3.0:
+ resolution: {integrity: sha512-HSYhONmJqFc/wsRmQIm+Lw2DGoVn3T99t0rh3A9/bZvlm82THWM+QYjSC7SyM8EIybvhjPt94LoXnxlyai3ncA==}
+
dom-serializer@1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
@@ -2098,8 +2100,8 @@ packages:
duplexer3@0.1.5:
resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
- echarts-jsx@1.2.0:
- resolution: {integrity: sha512-ZMlNsj8KcQAr6pz1YErPYMkamPqjKMs8cq2dtWdiFHXERDuTgQrK1oulzYHB+iZuqxxkygqhLIjKwTrJNq1OIQ==}
+ echarts-jsx@1.2.1:
+ resolution: {integrity: sha512-epcIsL91qcVbd/3gzKPa1cxSqhBtcG5uphDwse6edzTd8m61WGg3O/Sr/DBI5/nZISuOCKBbT0INdMrw1IzCfQ==}
peerDependencies:
'@webcomponents/webcomponentsjs': ^2.8
@@ -4732,9 +4734,6 @@ snapshots:
'@esbuild/linux-arm64@0.21.5':
optional: true
- '@esbuild/linux-arm@0.21.5':
- optional: true
-
'@esbuild/linux-ia32@0.21.5':
optional: true
@@ -4925,13 +4924,15 @@ snapshots:
'@parcel/utils': 2.11.0
lmdb: 2.8.5
- '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))':
+ '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)':
dependencies:
'@parcel/core': 2.12.0(@swc/helpers@0.5.11)
'@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/logger': 2.12.0
'@parcel/utils': 2.12.0
lmdb: 2.8.5
+ transitivePeerDependencies:
+ - '@swc/helpers'
'@parcel/codeframe@2.11.0':
dependencies:
@@ -4995,7 +4996,7 @@ snapshots:
'@parcel/core@2.12.0(@swc/helpers@0.5.11)':
dependencies:
'@mischnic/json-sourcemap': 0.1.1
- '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
+ '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/diagnostic': 2.12.0
'@parcel/events': 2.12.0
'@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
@@ -5008,7 +5009,7 @@ snapshots:
'@parcel/source-map': 2.1.1
'@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/utils': 2.12.0
- '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
+ '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
abortcontroller-polyfill: 1.7.5
base-x: 3.0.9
browserslist: 4.23.0
@@ -5052,7 +5053,7 @@ snapshots:
'@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/utils': 2.12.0
'@parcel/watcher': 2.4.0
- '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
+ '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
transitivePeerDependencies:
- '@swc/helpers'
@@ -5147,7 +5148,7 @@ snapshots:
'@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
'@parcel/rust': 2.12.0
'@parcel/utils': 2.12.0
- '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
+ '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
'@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))':
dependencies:
@@ -5191,7 +5192,7 @@ snapshots:
'@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
'@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/utils': 2.12.0
- '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
+ '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
'@swc/core': 1.4.1(@swc/helpers@0.5.11)
semver: 7.6.0
transitivePeerDependencies:
@@ -5401,7 +5402,7 @@ snapshots:
'@parcel/core': 2.12.0(@swc/helpers@0.5.11)
'@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
'@parcel/utils': 2.12.0
- '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
+ '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
nullthrows: 1.1.1
'@parcel/transformer-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))':
@@ -5412,7 +5413,7 @@ snapshots:
'@parcel/rust': 2.12.0
'@parcel/source-map': 2.1.1
'@parcel/utils': 2.12.0
- '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
+ '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
'@swc/helpers': 0.5.6
browserslist: 4.23.0
nullthrows: 1.1.1
@@ -5523,12 +5524,12 @@ snapshots:
'@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)':
dependencies:
- '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
+ '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/diagnostic': 2.12.0
'@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/source-map': 2.1.1
- '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
+ '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))
utility-types: 3.11.0
transitivePeerDependencies:
- '@parcel/core'
@@ -5622,7 +5623,7 @@ snapshots:
'@parcel/utils': 2.11.0
nullthrows: 1.1.1
- '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)':
+ '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))':
dependencies:
'@parcel/core': 2.12.0(@swc/helpers@0.5.11)
'@parcel/diagnostic': 2.12.0
@@ -5631,8 +5632,6 @@ snapshots:
'@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)
'@parcel/utils': 2.12.0
nullthrows: 1.1.1
- transitivePeerDependencies:
- - '@swc/helpers'
'@rollup/plugin-babel@5.3.1(@babel/core@7.24.5)(rollup@2.79.1)':
dependencies:
@@ -6262,6 +6261,10 @@ snapshots:
decamelize@1.2.0: {}
+ declarative-shadow-dom-polyfill@0.4.0(typescript@5.4.5):
+ dependencies:
+ typescript: 5.4.5
+
decompress-response@3.3.0:
dependencies:
mimic-response: 1.0.1
@@ -6309,6 +6312,15 @@ snapshots:
transitivePeerDependencies:
- typescript
+ dom-renderer@2.3.0(typescript@5.4.5):
+ dependencies:
+ declarative-shadow-dom-polyfill: 0.4.0(typescript@5.4.5)
+ tslib: 2.6.3
+ web-streams-polyfill: 4.0.0
+ web-utility: 4.4.0(typescript@5.4.5)
+ transitivePeerDependencies:
+ - typescript
+
dom-serializer@1.4.1:
dependencies:
domelementtype: 2.3.0
@@ -6337,9 +6349,9 @@ snapshots:
duplexer3@0.1.5: {}
- echarts-jsx@1.2.0(typescript@5.4.5):
+ echarts-jsx@1.2.1(typescript@5.4.5):
dependencies:
- dom-renderer: 2.1.8(typescript@5.4.5)
+ dom-renderer: 2.3.0(typescript@5.4.5)
echarts: 5.5.0
iterable-observer: 1.0.1
lodash: 4.17.21
@@ -6454,7 +6466,6 @@ snapshots:
'@esbuild/darwin-x64': 0.21.5
'@esbuild/freebsd-arm64': 0.21.5
'@esbuild/freebsd-x64': 0.21.5
- '@esbuild/linux-arm': 0.21.5
'@esbuild/linux-arm64': 0.21.5
'@esbuild/linux-ia32': 0.21.5
'@esbuild/linux-loong64': 0.21.5
diff --git a/source/page/Statistics/index.tsx b/source/page/Statistics/index.tsx
new file mode 100644
index 0000000..9dcf780
--- /dev/null
+++ b/source/page/Statistics/index.tsx
@@ -0,0 +1,133 @@
+import { observable } from 'mobx';
+import {component,observer} from 'web-cell';
+import {Overall,AreaData,getOverall,getArea } from '../../service/Epidemic';
+import 'echarts-jsx/dist/renderers/SVG';
+import 'echarts-jsx/dist/components/title';
+import 'echarts-jsx/dist/components/legend';
+import 'echarts-jsx/dist/components/tooltip';
+import 'echarts-jsx/dist/components/grid';
+import 'echarts-jsx/dist/components/x-axis';
+import 'echarts-jsx/dist/components/y-axis';
+import 'echarts-jsx/dist/charts/line';
+import 'echarts-jsx/dist/charts/bar';
+
+@component({ tagName: 'statistics-page' })
+@observer
+export default class StatisticsPage extends HTMLElement {
+
+ @observable
+ accessor virusData : {
+ overAll: Overall[];
+ areaData:AreaData[];
+ }
+ async mountedCallback() {
+ const [overall,areadata] =await Promise.all([getOverall(),getArea()])
+
+ this.virusData = {
+ overAll:overall,
+ areaData:areadata,
+ }
+ }
+ toMonth(dateString){
+ let date = new Date(dateString);
+ let year = date.getFullYear();
+ let month = date.getMonth();
+ return new Date(year, month);
+ }
+
+ render(){
+ if(this.virusData){
+ let confirmedCount = this.virusData.overAll.map(item=>[this.toMonth(item.updateTime),item.confirmedCount])
+ let suspectedCount = this.virusData.overAll.map(item=>[this.toMonth(item.updateTime),item.suspectedCount])
+ let curedCount = this.virusData.overAll.map(item=>[this.toMonth(item.updateTime),item.curedCount])
+ let deadCount = this.virusData.overAll.map(item=>[this.toMonth(item.updateTime),item.deadCount])
+ let seriousCount = this.virusData.overAll.map(item=>[this.toMonth(item.updateTime),item.seriousCount])
+
+ let cityData = this.virusData.areaData.filter((item)=>{
+ if(item.provinceName==='广东省'){return item}
+ })
+ let city_confirmedCounts = cityData.map((item)=>[item.cityName,item.city_confirmedCount])
+ let city_curedCounts = cityData.map((item)=>[item.cityName,item.city_curedCount])
+ let city_suspectedCounts = cityData.map((item)=>[item.cityName,item.city_suspectedCount])
+ let city_deadCounts = cityData.map((item)=>[item.cityName,item.city_deadCount])
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+ }
+}
diff --git a/source/page/data/menu.ts b/source/page/data/menu.ts
index a69d3d0..b302043 100644
--- a/source/page/data/menu.ts
+++ b/source/page/data/menu.ts
@@ -7,7 +7,8 @@ export enum RouteRoot {
Clinic = 'clinic',
Maps = 'maps',
Admin = 'admin',
- Community = 'community'
+ Community = 'community',
+ Statistics = 'statistics'
}
export default [
@@ -58,5 +59,9 @@ export default [
{
title: '开放社区',
href: RouteRoot.Community
+ },
+ {
+ title: '疫情统计',
+ href: RouteRoot.Statistics
}
];
diff --git a/source/page/index.tsx b/source/page/index.tsx
index 1748aa8..2dc5b02 100644
--- a/source/page/index.tsx
+++ b/source/page/index.tsx
@@ -16,6 +16,7 @@ import logo from '../image/wuhan2020.png';
import { HomePage } from './Home';
import Disclaimer from '../../Disclaimer.md';
+
const HospitalPage = lazy(() => import('./Hospital')),
HospitalEdit = lazy(() => import('./Hospital/Edit')),
LogisticsPage = lazy(() => import('./Logistics')),
@@ -30,8 +31,8 @@ const HospitalPage = lazy(() => import('./Hospital')),
ClinicEdit = lazy(() => import('./Clinic/Edit')),
UserAdmin = lazy(() => import('./Admin/User')),
CommunityPage = lazy(() => import('./Community')),
- MapsPage = lazy(() => import('./Map'));
-
+ MapsPage = lazy(() => import('./Map')),
+ StatisticsPage= lazy(() => import('./Statistics'));
const userMenu = [
{
title: '管理',
@@ -117,6 +118,7 @@ export const PageFrame: FC = () => (
+
(
@@ -127,6 +129,7 @@ export const PageFrame: FC = () => (
/>
)}
/>
+