Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions components/Navigator/MainNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ const topNavBarMenu = ({ t }: typeof i18n): MenuItem[] => [
href: '/open-library',
title: t('open_library'),
},
{
href: '/wuhan-2020',
title: '武汉 2020',
},
];

export interface MainNavigatorProps {
Expand Down
316 changes: 316 additions & 0 deletions pages/wuhan-2020.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,316 @@
import { observer } from 'mobx-react';
import { FC, useContext } from 'react';
import {
Badge,
Card,
Col,
Container,
Row,
} from 'react-bootstrap';

import { PageHead } from '../components/Layout/PageHead';
import { I18nContext } from '../models/Translation';

interface Category {
icon: string;
title: string;
description: string;
href?: string;
badge?: string;
}

const categories: Category[] = [
{
icon: '🏥',
title: '医院',
description:
'武汉及周边地区医院物资需求信息,包括防护服、口罩、消毒液等医疗物资的供需对接',
href: 'https://github.com/wuhan2020/WebApp',
badge: 'Hospital',
},
{
icon: '🚚',
title: '物流',
description:
'救援物资运输渠道信息,物流公司运力资源、运输路线及配送协调',
href: 'https://github.com/wuhan2020/WebApp',
badge: 'Logistics',
},
{
icon: '🏨',
title: '酒店',
description:
'为医护人员提供免费或优惠住宿的酒店信息,以及酒店资源对接',
href: 'https://github.com/wuhan2020/WebApp',
badge: 'Hotel',
},
{
icon: '🏭',
title: '生产',
description:
'医疗物资生产企业信息,包括产能、原材料需求及供应渠道对接',
href: 'https://github.com/wuhan2020/WebApp',
badge: 'Factory',
},
{
icon: '❤️',
title: '捐赠',
description:
'社会捐赠渠道信息,资金与物资捐赠的对接平台及需求公示',
href: 'https://github.com/wuhan2020/WebApp',
badge: 'Donation',
},
{
icon: '💊',
title: '义诊',
description:
'在线义诊服务平台,连接医疗专家与社区居民的远程问诊渠道',
href: 'https://github.com/wuhan2020/WebApp',
badge: 'Clinic',
},
{
icon: '🗺️',
title: '疫情地图',
description:
'基于实时数据的疫情分布地图,展示各省市确诊、疑似、治愈等统计数据',
href: 'https://github.com/wuhan2020/WebApp/tree/dev/source/page/Map',
badge: 'Map',
},
{
icon: '👥',
title: '开放社区',
description:
'志愿者协作社区,汇聚开发、运维、数据、医疗等各方力量共同抗疫',
href: 'https://github.com/wuhan2020/WebApp',
badge: 'Community',
},
];
Comment on lines +22 to +87

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file list =="
git ls-files | rg '(^pages/|^components/|i18n|messages|lang|translation|web-utility|translation)' || true

echo "== target file excerpt =="
if [ -f pages/wuhan-2020.tsx ]; then
  wc -l pages/wuhan-2020.tsx
  sed -n '1,140p' pages/wuhan-2020.tsx | cat -n
  sed -n '140,330p' pages/wuhan-2020.tsx | cat -n
else
  echo "pages/wuhan-2020.tsx not found"
fi

echo "== t()/I18nContext usages in target =="
rg -n "useI18n|i18n|I18nContext|t\\(" pages/wuhan-2020.tsx || true

echo "== nearby repo i18n examples =="
rg -n "export const t =|createI18n|t=|t\\(|I18nContext|useI18n" --glob '!node_modules/**' --glob '!dist/**' --glob '!build/**' pages components lib src 2>/dev/null | head -200 || true

Repository: Open-Source-Bazaar/Open-Source-Bazaar.github.io

Length of output: 34373


将页面文案改为 t() 翻译键。

pages/wuhan-2020.tsx 仅读取了 I18nContext,但没有实际使用 t()categoriestechStackPageHead 和 JSX 中的用户可见文案都是硬编码字符串,包含中文、英文、徽章名称、按钮文案、统计文本、aria-label 等,需要改为翻译键;纯专有名词(如 GitHub、TypeScript、Apache/AGPL 等)可保留硬编码。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/wuhan-2020.tsx` around lines 22 - 87, Update pages/wuhan-2020.tsx to
use the existing I18nContext translation function t() for all user-visible text
instead of hardcoded Chinese or English strings. Convert labels and descriptions
in categories and techStack, PageHead content, buttons, statistics,
accessibility aria-labels, and other JSX copy to translation keys, while
retaining genuine proper names such as GitHub, TypeScript, and Apache/AGPL.
Ensure every translated value is resolved through t() and remove the
unused-context issue.

Sources: Coding guidelines, Learnings


const techStack = [
{ name: 'TypeScript', icon: '📘' },
{ name: 'React / WebCell', icon: '⚛️' },
{ name: 'MobX', icon: '📦' },
{ name: 'ECharts', icon: '📊' },
{ name: 'Supabase', icon: '🗄️' },
{ name: 'Bootstrap', icon: '🎨' },
];

const Wuhan2020Page: FC = observer(() => {
const { t } = useContext(I18nContext);

return (
<>
<PageHead
title="新冠战疫信息平台 — 武汉 2020"
description="武汉新型冠状病毒防疫信息平台开放数据存档 — 记录 2020 年抗疫期间医疗物资、物流、捐赠、义诊等信息的协作平台"
/>

{/* Hero Section */}
<section className="bg-dark text-white py-5">
<Container>
<Row className="align-items-center">
<Col xs={12} md={8}>
<h1 className="display-4 fw-bold mb-3">
🦠 新冠战疫信息平台
</h1>
<p className="lead mb-4">
武汉新型冠状病毒防疫信息平台 —
开放数据存档
</p>
<p className="fs-5 mb-4">
本页面是 wuhan2020/WebApp 开源项目的存档展示,记录 2020
年抗疫期间,由社区志愿者共同构建的救援信息协作平台。
</p>
<div className="d-flex gap-3 flex-wrap">
<a
className="btn btn-primary btn-lg"
href="https://github.com/wuhan2020/WebApp"
target="_blank"
rel="noreferrer"
>
<span className="me-2">📂</span>
查看原始项目
</a>
<a
className="btn btn-outline-light btn-lg"
href="https://github.com/wuhan2020"
target="_blank"
rel="noreferrer"
>
<span className="me-2">🏛️</span>
访问组织
</a>
</div>
Comment on lines +124 to +143

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== package.react-bootstrap =="
if [ -f package.json ]; then
  node -e "const p=require('./package.json'); console.log(p.dependencies && p.dependencies['react-bootstrap'] || p.devDependencies && p.devDependencies['react-bootstrap'] || '<not found>')"
fi

echo "== target file outline =="
ast-grep outline pages/wuhan-2020.tsx --view compact || true

echo "== relevant snippets =="
sed -n '1,260p' pages/wuhan-2020.tsx | nl -ba | sed -n '1,260p'

echo "== react-bootstrap imports/usages in target =="
python3 - <<'PY'
from pathlib import Path
p = Path('pages/wuhan-2020.tsx')
text = p.read_text(encoding='utf-8').splitlines()
print("imports:")
for i,line in enumerate(text,1):
    if "react-bootstrap" in line or ("<a " in line and "btn " in line):
        print(f"{i:4}: {line}")
PY

Repository: Open-Source-Bazaar/Open-Source-Bazaar.github.io

Length of output: 466


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== target file outline =="
ast-grep outline pages/wuhan-2020.tsx --view compact || true

echo "== relevant snippets =="
sed -n '1,260p' pages/wuhan-2020.tsx | nl -ba | sed -n '1,260p'

echo "== react-bootstrap imports/usages in target =="
python3 - <<'PY'
from pathlib import Path
p = Path('pages/wuhan-2020.tsx')
text = p.read_text(encoding='utf-8').splitlines()
print("imports:")
for i,line in enumerate(text,1):
    if "react-bootstrap" in line or ("<a " in line and "btn " in line):
        print(f"{i:4}: {line}")
PY

Repository: Open-Source-Bazaar/Open-Source-Bazaar.github.io

Length of output: 426


🏁 Script executed:

#!/bin/sh
set -euo pipefail

printf '== target file size and imports/usages ==\n'
wc -l pages/wuhan-2020.tsx
python3 - <<'PY'
from pathlib import Path
text = Path('pages/wuhan-2020.tsx').read_text(encoding='utf-8').splitlines()
for i,line in enumerate(text,1):
    if 'react-bootstrap' in line or '<a className=' in line and 'btn' in line:
        print(f'{i:4}: {line}')
PY

printf '\n== snippets around button lines ==\n'
awk 'NR>=118 && NR<=146 {printf "%5d: %s\n", NR, $0}' pages/wuhan-2020.tsx
printf '\n'
awk 'NR>=223 && NR<=243 {printf "%5d: %s\n", NR, $0}' pages/wuhan-2020.tsx

printf '\n== package react-bootstrap value ==\n'
node -e 'const p=require("./package.json"); console.log((p.dependencies&&p.dependencies["react-bootstrap"])||(p.devDependencies&&p.devDependencies["react-bootstrap"])||(p.peerDependencies&&p.peerDependencies["react-bootstrap"])||"<not found>")'

Repository: Open-Source-Bazaar/Open-Source-Bazaar.github.io

Length of output: 2451


将按钮样式的链接改为 React Bootstrap Button

pages/wuhan-2020.tsx 的 Hero CTA(124-143 行)和卡片 CTA(229-237 行)都使用原生 <a> 加上 btn 类名;改用 Buttonvariantsizehreftargetrel 属性,统一 UI 组件方式。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/wuhan-2020.tsx` around lines 124 - 143, 将 pages/wuhan-2020.tsx 中 Hero
CTA 和卡片 CTA 的原生 a 元素替换为 React Bootstrap Button,使用对应的 variant、size、href、target 和
rel 属性保留现有外部链接及按钮外观;同时移除原有 btn 类名,并保持图标与中文文案不变。

Source: Coding guidelines

</Col>
<Col xs={12} md={4} className="text-center mt-4 mt-md-0">
<div
className="display-1"
aria-label="COVID-19 Rescue Platform"
>
🏥
</div>
Comment on lines +145 to +151

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

修正普通 <div> 上的 aria-label

该元素没有语义角色。WAI-ARIA 将 generic 元素列为禁止命名的角色,因此此处的 aria-label 不是可靠的可访问名称。(w3.org)

如果医院 emoji 仅用于装饰,请使用 aria-hidden="true"。如果它传达信息,请使用 role="img",并将标签改为 t() 文案。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/wuhan-2020.tsx` around lines 145 - 151, Update the emoji container in
the relevant JSX block: if the hospital emoji is decorative, replace its
aria-label with aria-hidden="true"; if it conveys information, add role="img"
and use a translated t() label instead. Do not leave aria-label on the generic
div without an explicit semantic role.

Source: MCP tools

<Badge bg="warning" text="dark" className="mt-2 fs-6">
🌟 392 Stars · 140 Forks
</Badge>
Comment on lines +152 to +154

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== repo files matching wuhan-2020 =="
fd -a 'wuhan-2020\.tsx$' . || true

echo "== relevant file excerpt =="
if [ -f pages/wuhan-2020.tsx ]; then
  cat -n pages/wuhan-2020.tsx | sed -n '120,175p'
fi

echo "== references to Stars/Forks/392/140/139 =="
rg -n "Stars|Forks|星|fork|forks|392|140|139|快照|截至" pages components lib src . 2>/dev/null | head -200 || true

echo "== changed/added context =="
git diff --stat || true
git diff -- pages/wuhan-2020.tsx 2>/dev/null | sed -n '1,220p' || true

Repository: Open-Source-Bazaar/Open-Source-Bazaar.github.io

Length of output: 3992


🌐 Web query:

wuhan2020/WebApp GitHub stars forks current

💡 Result:

As of August 2, 2026, the GitHub repository wuhan2020/WebApp has 393 stars and 139 forks [1].

Citations:


为 GitHub 统计值添加快照日期或改为动态取值。

该页硬编码 392 Stars · 140 Forks,但仓库实时状态是 393 Stars 和 139 Forks。如果是历史快照,使用 Badge 展示 截至 YYYY-MM-DD 并补充来源;否则应在页面加载时从 source 获取或移除这些静态数值。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/wuhan-2020.tsx` around lines 152 - 154, Update the Badge in the
wuhan-2020 page to avoid presenting stale hardcoded GitHub statistics: either
fetch the current star and fork counts dynamically from the source on page load,
or clearly mark the values as a historical snapshot with an “截至 YYYY-MM-DD” date
and source attribution. Do not leave the existing unqualified 392 Stars · 140
Forks text.

Source: MCP tools

</Col>
</Row>
</Container>
</section>

{/* Mission Section */}
<section className="bg-light py-5">
<Container>
<Row className="justify-content-center">
<Col xs={12} md={10} lg={8}>
<h2 className="text-center mb-4">📋 项目简介</h2>
<div className="bg-white p-4 rounded-4 shadow-sm">
<p className="fs-5">
<strong>新冠战疫信息平台</strong>(Wuhan2020
WebApp)是一个在 2020
年新冠疫情爆发期间,由全球华人开发者志愿者自发组织构建的
<strong>渐进式 Web 应用</strong>。
</p>
<p>
平台旨在高效对接救援物资、医疗资源、物流运输、酒店住宿等关键信息,帮助抗疫一线的医护人员和受困群众。采用开源协作模式,汇集了来自全球的开发者、数据科学家、医疗专家等志愿者的力量。
</p>
<p className="mb-0">
本项目作为开放数据存档,保留了原始平台的核心功能展示和数据结构,供历史研究、学术参考和社区纪念。
</p>
</div>
</Col>
</Row>
</Container>
</section>

{/* Tech Stack Section */}
<section className="py-5">
<Container>
<h2 className="text-center mb-4">🛠️ 技术栈</h2>
<Row className="justify-content-center">
{techStack.map(({ name, icon }) => (
<Col key={name} xs={6} sm={4} md={3} lg={2} className="mb-3">
<Card body className="text-center shadow-sm h-100">
<div className="fs-1 mb-2">{icon}</div>
<div className="fw-bold">{name}</div>
</Card>
</Col>
))}
</Row>
</Container>
</section>

{/* Categories Section */}
<section className="bg-light py-5">
<Container>
<h2 className="text-center mb-2">📂 功能模块</h2>
<p className="text-center text-muted mb-5">
平台涵盖以下核心功能模块,覆盖抗疫救援的各个方面
</p>
<Row className="g-4">
{categories.map(
({ icon, title, description, href, badge }) => (
<Col key={title} xs={12} sm={6} lg={4} xl={3}>
<Card className="shadow-sm h-100 border-0">
<Card.Body className="d-flex flex-column">
<div className="d-flex align-items-center mb-3">
<span className="fs-1 me-3">{icon}</span>
<div>
<Card.Title className="mb-1">{title}</Card.Title>
{badge && (
<Badge bg="secondary" className="fs-6">
{badge}
</Badge>
)}
</div>
</div>
<Card.Text className="text-muted flex-grow-1">
{description}
</Card.Text>
{href && (
<a
className="btn btn-outline-primary btn-sm mt-auto"
href={href}
target="_blank"
rel="noreferrer"
>
查看详情 →
</a>
Comment on lines +229 to +237

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

让卡片链接包含模块名称。

八个卡片都显示“查看详情 →”。用户在链接列表中无法直接区分医院、物流或其他模块。W3C 要求链接用途可由链接文本或程序化上下文确定。(w3c.github.io)

请使用“查看医院详情”等上下文相关文本,或为链接添加包含模块名称的 aria-label

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/wuhan-2020.tsx` around lines 229 - 237, Update the card link rendered
in the JSX block around the `href` conditional so its accessible name includes
the corresponding module name, such as “查看医院详情”, while preserving the existing
visual styling and destination. Use the card’s existing module/title data rather
than hardcoding one label for all eight links, or add an equivalent dynamic
`aria-label` if the visible text must remain unchanged.

Source: MCP tools

)}
</Card.Body>
</Card>
</Col>
),
)}
</Row>
</Container>
</section>

{/* Data Sources Section */}
<section className="py-5">
<Container>
<Row className="justify-content-center">
<Col xs={12} md={10} lg={8}>
<h2 className="text-center mb-4">📊 数据源</h2>
<div className="bg-white p-4 rounded-4 shadow-sm">
<ul className="list-unstyled mb-0">
<li className="mb-3">
<strong>🦠 丁香园疫情数据</strong> —{' '}
<a
href="https://github.com/BlankerL/DXY-COVID-19-Data"
target="_blank"
rel="noreferrer"
>
DXY-COVID-19-Data
</a>
,由 BlankerL 维护的丁香园疫情数据集合
</li>
<li className="mb-3">
<strong>🗺️ 高德地图 API</strong> — 地图数据与地理信息
</li>
<li className="mb-3">
<strong>📋 社区贡献数据</strong> — 由志愿者提交的医院、物流、捐赠等信息
</li>
<li className="mb-0">
<strong>📦 Supabase 后端</strong> — 基于 PostgreSQL 的实时数据存储与查询
</li>
</ul>
</div>
</Col>
</Row>
</Container>
</section>

{/* Archive Notice */}
<section className="bg-warning bg-opacity-10 py-5">
<Container>
<Row className="justify-content-center">
<Col xs={12} md={10} lg={8}>
<div className="text-center">
<h2 className="mb-3">📜 存档说明</h2>
<p className="fs-5">
本页面为 wuhan2020/WebApp 项目的存档展示版。
</p>
<p>
原始项目仍托管在{' '}
<a
href="https://github.com/wuhan2020/WebApp"
target="_blank"
rel="noreferrer"
>
GitHub
</a>
,所有代码和数据遵循 AGPL-3.0 开源协议。
Comment on lines +293 to +302

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file outline/size =="
wc -l pages/wuhan-2020.tsx
ast-grep outline pages/wuhan-2020.tsx --view compact || true

echo "== relevant snippets =="
sed -n '230,330p' pages/wuhan-2020.tsx

echo "== repository references =="
rg -n "wuhan2020|DXY-COVID-19-Data|AGPL-3\.0|MIT|高徳|高德|API|数据|license|开源协议" pages/wuhan-2020.tsx

Repository: Open-Source-Bazaar/Open-Source-Bazaar.github.io

Length of output: 4927


🌐 Web query:

github.com wuhan2020 WebApp license AGPL-3.0 DXY-COVID-19-Data MIT

💡 Result:

The following information details the licenses for the specified GitHub repositories: The wuhan2020/WebApp repository, part of the Wuhan2020 open-source community initiative, is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) [1][2]. The DXY-COVID-19-Data repository (managed by user BlankerL) is licensed under the MIT License [3][4]. This repository has been archived and is now read-only [5]. Similarly, the related DXY-COVID-19-Crawler repository is also licensed under the MIT License [6][7] and has been archived [6].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== repository license and usage snippets =="
rg -n "license\\.name|license|licenseFile|readme|README|AGPL|MIT|高德|map" pages/wuhan-2020.tsx || true

echo "== repository files for Wuhan2020 page =="
sed -n '1,130p' pages/wuhan-2020.tsx
sed一n '130,230p' pages/wuhan-2020.tsx

echo "== behavioral check: uniform license string vs discovered source licenses =="
python3 - <<'PY'
text = open("pages/wuhan-2020.tsx", encoding="utf-8").read()
print("has_uniform_all_agpl=", "所有代码和数据遵循 AGPL-3.0" in text)
print("has_source_mentions=", "<i18n>" in text or "GitHub" in text)
PY

Repository: Open-Source-Bazaar/Open-Source-Bazaar.github.io

Length of output: 3657


🌐 Web query:

GitHub wuhan2020 WebApp repository license AGPL-3.0 LICENSE file

💡 Result:

The wuhan2020/WebApp repository on GitHub is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) [1]. While other repositories within the wuhan2020 organization, such as the main wuhan2020/wuhan2020 repository, are licensed under the MIT License [2][3], the WebApp repository specifically identifies its license as AGPL-3.0 [1]. Users should always consult the LICENSE file located directly within the specific repository for the most authoritative and current information regarding its legal terms [1].

Citations:


🌐 Web query:

GitHub BlankerL DXY-COVID-19-Data repository license MIT LICENSE file

💡 Result:

The GitHub repository BlankerL/DXY-COVID-19-Data is licensed under the MIT License [1][2][3]. Authoritative references and secondary documentation, such as the Google Cloud Platform's COVID-19 open data repository, explicitly cite the DXY-COVID-19-Data dataset as being under the MIT license [4]. The repository, which is currently archived [3][5], contains the license information standard to such projects [4]. Additionally, the related repository, DXY-COVID-19-Crawler, also uses the MIT License, which includes a copyright notice for Jiabao Lin [6][7].

Citations:


拆分代码许可与数据许可。

wuhan2020/WebApp 为 AGPL-3.0,但页面引用的 BlankerL/DXY-COVID-19-Data 为 MIT。第 302 行“所有代码和数据遵循 AGPL-3.0”会把第三方数据许可也错误覆盖,需分别列出原始代码许可、第三方数据许可、高德地图 API 条款和社区贡献数据条款;未核实时不要作统一许可声明。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/wuhan-2020.tsx` around lines 293 - 302, 更新 pages/wuhan-2020.tsx
中展示原始项目许可的段落,将代码许可与数据许可分开说明:分别列出 wuhan2020/WebApp 的
AGPL-3.0、BlankerL/DXY-COVID-19-Data 的 MIT、高德地图 API 条款及社区贡献数据条款;移除“所有代码和数据遵循
AGPL-3.0”的统一声明,未核实的内容不要作统一许可表述。

Source: MCP tools

</p>
<p className="mb-0">
感谢所有为抗疫做出贡献的志愿者和开源社区成员。🙏
</p>
</div>
</Col>
</Row>
</Container>
</section>
</>
);
});

export default Wuhan2020Page;