基于Python的各类企业排行数据可视化分析系统 --- 技术文档
一、项目概述
1.1 项目简介
本系统是一个面向企业排行榜数据的可视化分析平台,整合了胡润百富榜 、中国民营企业500强 、福布斯全球2000强三大权威企业排名数据源,提供多维度的数据查询、统计分析和可视化展示功能。
系统支持从2022年至2025年共4个年度的数据,涵盖691+条胡润品牌数据、760+条民营企业数据、169+条福布斯全球企业数据,并通过40+个API接口和50+个ECharts图表实现丰富的交互式可视化分析。
1.2 核心功能
| 功能模块 |
说明 |
| 数据概览首页 |
三大排行榜综合统计卡片 + 9个概览图表 |
| 胡润百富榜分析 |
按年份/行业筛选,5个图表 + 分页数据表 |
| 民营企业500强分析 |
按年份/省份筛选,5个图表 + 分页数据表 |
| 福布斯全球2000强分析 |
按年份/国家/行业三维筛选,7个图表 + 分页数据表 |
| 中国地图 |
省级企业分布热力图 + 柱状图 |
| 世界地图 |
国家企业分布地图 + 行业玫瑰图 + 散点图 |
| 数据分析仪表盘 |
20个ECharts图表的综合看板 |
| 全屏可视化大屏 |
适配大屏展示的独立页面,60秒自动刷新 |
| 用户认证系统 |
注册/登录/JWT鉴权/个人中心/修改密码 |
1.3 数据覆盖范围
| 排行榜 |
年份 |
记录数 |
数据维度 |
| 胡润百富榜 |
2022/2023/2024/2025 |
592条 |
排名、姓名、财富(元)、公司、行业 |
| 民营企业500强 |
2023/2024/2025 |
810条 |
排名、企业名、省份、营收(万元) |
| 福布斯全球2000 |
2024/2025 |
169条 |
排名、企业名、国家、行业、营收、利润、资产、市值(十亿美元) |



























二、技术栈
2.1 后端技术
| 技术 |
版本 |
用途 |
| Python |
3.10+ |
主开发语言 |
| FastAPI |
0.104+ |
Web框架,提供RESTful API和页面路由 |
| Uvicorn |
0.24+ |
ASGI服务器,支持热重载 |
| SQLAlchemy |
2.0+ |
ORM框架,数据库模型定义和查询 |
| PyMySQL |
1.1+ |
MySQL数据库驱动 |
| Pydantic |
2.5+ |
数据验证和序列化(Schemas) |
| python-jose |
3.3+ |
JWT令牌生成和验证 |
| passlib[bcrypt] |
1.7+ |
密码哈希(BCrypt算法) |
2.2 前端技术
| 技术 |
版本 |
用途 |
| Jinja2 |
3.1+ |
HTML模板引擎(FastAPI内置) |
| Bootstrap |
5.3.2 |
响应式UI框架(栅格、组件、工具类) |
| Bootstrap Icons |
1.11.3 |
图标库(300+图标) |
| ECharts |
5.5.0 |
数据可视化图表库(40+图表实例) |
| Google Fonts |
--- |
字体加载(Cormorant Garamond、DM Sans、JetBrains Mono) |
2.3 数据库
| 技术 |
说明 |
| MySQL |
8.0+ 关系型数据库 |
| 数据库名 |
design_119_company |
| 字符集 |
utf8mb4(支持中文和特殊字符) |
| 连接串 |
mysql+pymysql://root:123456@localhost:3306/design_119_company?charset=utf8mb4 |
2.4 数据采集工具
| 工具 |
用途 |
| Firecrawl |
网页抓取和结构化数据提取 |
| Pandas |
CSV/Excel数据文件读取 |
| openpyxl |
Excel文件解析引擎 |
三、系统架构
3.1 整体架构
复制代码
┌──────────────────────────────────────────────────────────┐
│ 浏览器 (Client) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 首页概览 │ │ 排行分析 │ │ 地图可视化│ │ 大屏展示 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │
│ └──────────────┴──────────────┴──────────────┘ │
│ │ AJAX / fetch │
└─────────────────────────┼──────────────────────────────────┘
│ HTTP (JSON)
┌─────────────────────────┼──────────────────────────────────┐
│ FastAPI Server │
│ ┌──────────┐ ┌───────────────────────────────────────┐ │
│ │ Page │ │ API Routers │ │
│ │ Routes │ │ /auth /api/hurun /api/private │ │
│ │ (Jinja2) │ │ /api/forbes /api/analysis │ │
│ └──────────┘ └───────────────────┬───────────────────┘ │
│ │ │
│ ┌──────────────────────────────────┴──────────────────┐ │
│ │ SQLAlchemy ORM │ │
│ │ Models: User, HurunBrand, PrivateEnterprise, │ │
│ │ ForbesGlobal │ │
│ └──────────────────────────┬──────────────────────────┘ │
└─────────────────────────────┼──────────────────────────────┘
│
┌─────────────────────────────┼──────────────────────────────┐
│ MySQL Database │
│ design_119_company │
│ ┌────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ users │ │hurun_brand │ │private_enterprise│ │
│ └────────┘ └──────────────┘ └────────────────┘ │
│ ┌────────────┐ │
│ │forbes_global│ │
│ └────────────┘ │
└────────────────────────────────────────────────────────────┘
3.2 目录结构
复制代码
119-基于Python的各类企业排行数据可视化分析系统/
├── code/
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI应用入口,路由注册
│ │ ├── config.py # 配置常量(DB连接、JWT密钥)
│ │ ├── database.py # SQLAlchemy引擎和会话工厂
│ │ ├── models.py # ORM模型定义(4张表)
│ │ ├── schemas.py # Pydantic请求/响应模型
│ │ ├── routers/
│ │ │ ├── auth.py # 认证路由(注册/登录/鉴权)
│ │ │ ├── hurun.py # 胡润榜数据API
│ │ │ ├── private.py # 民营企业数据API
│ │ │ ├── forbes.py # 福布斯数据API
│ │ │ └── analysis.py # 跨排行榜分析API(17个接口)
│ │ ├── services/
│ │ │ ├── crawler.py # Firecrawl网页爬虫
│ │ │ └── data_loader.py # CSV/Excel批量导入
│ │ └── static/
│ │ └── css/
│ │ └── style.css # 全局样式(Luxury Dark主题)
│ ├── templates/
│ │ ├── base.html # 基础布局模板(侧边栏+顶栏)
│ │ ├── index.html # 首页数据概览
│ │ ├── login.html # 登录页
│ │ ├── register.html # 注册页
│ │ ├── profile.html # 个人中心
│ │ ├── hurun.html # 胡润百富榜分析
│ │ ├── private.html # 民营企业500强分析
│ │ ├── forbes.html # 福布斯全球2000强分析
│ │ ├── map_china.html # 中国地图
│ │ ├── map_world.html # 全球地图
│ │ ├── dashboard.html # 数据分析仪表盘(20图表)
│ │ └── screen.html # 全屏可视化大屏
│ ├── run.py # 启动脚本(uvicorn)
│ ├── import_scraped2.py # 数据导入: 胡润2022/2023, 民营2023
│ ├── import_scraped_data.py # 数据导入: 胡润2024, 福布斯2024
│ ├── import_2025_data.py # 数据导入: 2025年三大榜单
│ ├── scraped_data.py # 原始数据定义(硬编码)
│ └── import_data.py # 通用数据导入工具
└── 技术文档.md # 本文档
3.3 请求处理流程
复制代码
用户访问页面 ──→ FastAPI Page Route ──→ Jinja2渲染HTML ──→ 浏览器
│
JS加载后
│
checkAuth()验证token
│
┌───────────┴───────────┐
│ │
有token且有效 无token或无效
│ │
加载数据(ECharts) 跳转到 /login
│
fetch('/api/...')
│
Authorization: Bearer <token>
│
FastAPI API Route
│
SQLAlchemy查询MySQL
│
返回JSON ──→ ECharts渲染图表
四、数据库设计
4.1 数据模型
users --- 用户表
| 字段 |
类型 |
约束 |
说明 |
| id |
INTEGER |
PK, AUTO_INCREMENT |
用户ID |
| username |
VARCHAR(50) |
UNIQUE, NOT NULL |
用户名 |
| password |
VARCHAR(255) |
NOT NULL |
BCrypt哈希密码 |
| email |
VARCHAR(100) |
NULLABLE |
邮箱 |
| created_at |
DATETIME |
DEFAULT NOW() |
注册时间 |
hurun_brand --- 胡润品牌榜
| 字段 |
类型 |
约束 |
说明 |
| id |
INTEGER |
PK, AUTO_INCREMENT |
记录ID |
| year |
INTEGER |
NOT NULL |
年份 |
| ranking |
INTEGER |
--- |
排名 |
| brand_name |
VARCHAR(100) |
--- |
品牌/个人名称 |
| brand_value |
NUMERIC(15,2) |
--- |
品牌价值(元) |
| parent_company |
VARCHAR(200) |
--- |
母公司 |
| industry |
VARCHAR(100) |
--- |
行业 |
private_enterprise --- 民营企业500强
| 字段 |
类型 |
约束 |
说明 |
| id |
INTEGER |
PK, AUTO_INCREMENT |
记录ID |
| year |
INTEGER |
NOT NULL |
年份 |
| ranking |
INTEGER |
--- |
排名 |
| company_name |
VARCHAR(200) |
--- |
企业名称 |
| province |
VARCHAR(50) |
--- |
省份 |
| revenue |
NUMERIC(15,2) |
--- |
营收(万元) |
forbes_global --- 福布斯全球2000强
| 字段 |
类型 |
约束 |
说明 |
| id |
INTEGER |
PK, AUTO_INCREMENT |
记录ID |
| year |
INTEGER |
NOT NULL |
年份 |
| ranking |
INTEGER |
--- |
排名 |
| company_name |
VARCHAR(200) |
--- |
企业名称 |
| country |
VARCHAR(100) |
--- |
国家 |
| industry |
VARCHAR(100) |
--- |
行业 |
| revenue |
NUMERIC(15,2) |
--- |
营收(十亿美元) |
| profit |
NUMERIC(15,2) |
--- |
利润(十亿美元) |
| assets |
NUMERIC(15,2) |
--- |
总资产(十亿美元) |
| market_value |
NUMERIC(15,2) |
--- |
市值(十亿美元) |
4.2 数据量统计
| 表 |
2022 |
2023 |
2024 |
2025 |
合计 |
| hurun_brand |
100 |
340 |
102 |
50 |
592 |
| private_enterprise |
--- |
260 |
500 |
50 |
810 |
| forbes_global |
--- |
--- |
119 |
50 |
169 |
五、API接口文档
5.1 认证接口 /auth
| 方法 |
路径 |
说明 |
认证 |
| POST |
/auth/register |
用户注册 |
否 |
| POST |
/auth/login |
用户登录,返回JWT |
否 |
| GET |
/auth/me |
获取当前用户信息 |
是 |
| PUT |
/auth/password |
修改密码 |
是 |
登录响应示例:
json
复制代码
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"user": {"id": 1, "username": "admin", "email": null}
}
5.2 胡润榜接口 /api/hurun
| 方法 |
路径 |
参数 |
说明 |
| GET |
/list |
year, industry, page, size |
分页查询,支持年份和行业筛选 |
| GET |
/years |
--- |
获取可用年份列表 |
| GET |
/industries |
year |
获取行业列表 |
| GET |
/stats/industry |
year |
行业分布统计(数量+总价值) |
| GET |
/stats/top |
year, limit |
品牌价值Top N(去重) |
5.3 民营企业接口 /api/private
| 方法 |
路径 |
参数 |
说明 |
| GET |
/list |
year, province, page, size |
分页查询,支持年份和省份筛选 |
| GET |
/years |
--- |
获取可用年份列表 |
| GET |
/provinces |
year |
获取省份列表(标准化短名) |
| GET |
/stats/province |
year |
省份分布统计(数量+总营收) |
| GET |
/stats/top |
year, limit |
营收Top N(去重) |
5.4 福布斯接口 /api/forbes
| 方法 |
路径 |
参数 |
说明 |
| GET |
/list |
year, country, industry, page, size |
分页查询,三维筛选 |
| GET |
/years |
--- |
获取可用年份列表 |
| GET |
/countries |
year |
获取国家列表 |
| GET |
/industries |
year |
获取行业列表 |
| GET |
/stats/country |
year |
国家分布统计 |
| GET |
/stats/industry |
year |
行业分布统计 |
| GET |
/stats/top |
year, limit |
营收Top N(中英文去重) |
5.5 分析接口 /api/analysis (17个)
| 方法 |
路径 |
说明 |
| GET |
/overview |
三大排行榜综合概览(总记录数、年均值、极值) |
| GET |
/industry-comparison |
胡润 vs 福布斯行业对比 |
| GET |
/province-map |
省份企业分布(数量+营收) |
| GET |
/country-map |
国家企业分布(数量+营收) |
| GET |
/hurun/year-trend |
胡润年度趋势(数量、总值、均值) |
| GET |
/private/year-trend |
民营企业年度趋势 |
| GET |
/forbes/year-trend |
福布斯年度趋势 |
| GET |
/revenue-distribution |
民营企业营收分布(8个区间) |
| GET |
/forbes/profit-ranking |
福布斯利润排名 |
| GET |
/forbes/assets-ranking |
福布斯资产排名 |
| GET |
/hurun/parent-company |
胡润母公司品牌统计Top 15 |
| GET |
/private/top-revenue-by-province |
省份营收排名Top 15 |
| GET |
/forbes/country-industry |
国家×行业交叉统计 |
| GET |
/cross-rank/industry |
跨排行榜行业分析 |
| GET |
/yoy/growth |
三大排行榜同比增长率 |
| GET |
/forbes/profit-margin |
福布斯利润率排名 |
| GET |
/forbes/market-value-dist |
福布斯市值分布 |
| GET |
/kpis |
仪表盘KPI指标 |
| GET |
/forbes/industry-country-heatmap |
行业×国家热力矩阵 |
六、前端页面详解
6.1 页面路由
| 路径 |
页面 |
认证 |
说明 |
/ |
首页 |
否 |
数据概览,4个统计卡片+9个图表 |
/login |
登录 |
否 |
JWT登录表单 |
/register |
注册 |
否 |
用户注册表单 |
/profile |
个人中心 |
是 |
用户信息+修改密码 |
/hurun |
胡润分析 |
是 |
5图表+筛选+分页表 |
/private |
民营分析 |
是 |
5图表+筛选+分页表 |
/forbes |
福布斯分析 |
是 |
7图表+三维筛选+分页表 |
/map-china |
中国地图 |
是 |
ECharts地图+热力图 |
/map-world |
全球地图 |
是 |
ECharts世界地图+玫瑰图 |
/dashboard |
仪表盘 |
是 |
20个图表综合看板 |
/screen |
全屏大屏 |
是 |
独立大屏展示,60秒自动刷新 |
6.2 图表类型统计
| 图表类型 |
使用场景 |
数量 |
| 饼图/环形图 |
行业分布、省份分布、国家分布 |
8 |
| 柱状图(竖向) |
省份统计、行业统计、年度趋势 |
12 |
| 柱状图(横向) |
Top N排名(品牌价值/营收) |
10 |
| 折线图 |
年度趋势、同比增长 |
4 |
| 散点图 |
营收vs利润、品牌价值分布 |
3 |
| 雷达图 |
母公司品牌对比、企业综合指标 |
2 |
| 树图 |
跨排行榜行业分析 |
1 |
| 漏斗图 |
营收分布区间 |
1 |
| 热力图 |
行业×国家矩阵 |
1 |
| 仪表盘 |
KPI指标展示 |
3 |
| 地图 |
中国省份/全球国家分布 |
2 |
| 组合图(柱+线) |
年度趋势双轴展示 |
2 |
| 合计 |
|
49 |
6.3 ECharts图表类型清单
本系统使用了以下12种ECharts图表类型:
- pie --- 饼图/环形图 (行业、省份、国家分布)
- bar --- 柱状图 (统计、排名、趋势)
- line --- 折线图 (趋势、增长率)
- scatter --- 散点图 (相关性分析)
- radar --- 雷达图 (多维对比)
- treemap --- 树图 (层级分布)
- funnel --- 漏斗图 (区间分布)
- heatmap --- 热力图 (交叉矩阵)
- gauge --- 仪表盘 (KPI)
- map --- 地图 (地理分布)
- bar+line --- 组合图 (双轴展示)
- roseType --- 南丁格尔玫瑰图 (面积等比)
七、核心功能实现
7.1 JWT认证机制
复制代码
注册流程:
用户提交 ──→ POST /auth/register
├── 校验用户名唯一性
├── BCrypt哈希密码
└── 写入users表
登录流程:
用户提交 ──→ POST /auth/login
├── 查询用户名
├── BCrypt验证密码
├── 生成JWT(sub=username, exp=60min)
└── 返回 {token, user}
鉴权流程:
API请求 ──→ Authorization: Bearer <token>
├── jwt.decode(token, SECRET_KEY, HS256)
├── 查询users表获取用户
└── 注入到路由参数
前端Token管理:
- 登录成功后存储到
localStorage.setItem('token', token)
- 页面加载时
checkAuth() 检查token,无token跳转 /login
- API请求通过
getAuthHeaders() 自动附加 Authorization 头
7.2 省份名称标准化
民营企业数据中省份名称存在"北京市"和"北京"两种格式,系统统一标准化为短名:
python
复制代码
PROVINCE_SHORT = {
'北京市': '北京', '天津市': '天津', '河北省': '河北',
'山西省': '山西', '内蒙古自治区': '内蒙古', ...
}
def norm_province(name):
return PROVINCE_SHORT.get(name, name.rstrip('省市'))
7.3 福布斯中英文去重
福布斯数据中同一企业可能以中文和英文两种名称存在,系统通过映射表去重:
python
复制代码
CN_TO_EN = {
'中国石油': 'PetroChina', '阿里巴巴': 'Alibaba Group',
'中国银行': 'Bank of China', '腾讯': 'Tencent Holdings', ...
}
查询时先SQL过滤中文名,再内存合并中英文记录。
7.4 数据采集方案
| 数据源 |
采集方式 |
工具 |
| 胡润百富榜2025 |
PDF抓取+人工校正 |
Firecrawl + sxhhy.com |
| 福布斯202000 2025 |
开源数据集 |
Kaggle |
| 民营企业500强2025 |
新浪财经Top 10 + 2024数据增长推算 |
Sina Finance |
| 胡润2022/2023 |
硬编码数据导入 |
Python脚本 |
| 民营企业2023/2024 |
CSV/Excel导入 |
Pandas |
7.5 图表主题系统
系统采用"奢华暗黑"(Luxury Dark)主题,CSS变量定义:
css
复制代码
:root {
--bg-primary: #06060b; /* 页面背景(近黑) */
--bg-card: #151520; /* 卡片背景(深灰) */
--accent-primary: #c9a84c; /* 主色调(暖金) */
--text-primary: #f0ece2; /* 主文字(暖白) */
--font-display: 'Cormorant Garamond'; /* 标题字体 */
--font-body: 'DM Sans'; /* 正文字体 */
--font-mono: 'JetBrains Mono'; /* 等宽字体 */
}
ECharts图表统一使用金色渐变和深色配色:
- 15色调色板
chartColors
- 金色渐变工具
getGoldGradient()
- 暗色悬浮提示框
chartTooltipStyle
八、安装与运行
8.1 环境要求
- Python 3.10+
- MySQL 8.0+
- Node.js (可选,用于前端开发)
8.2 安装步骤
bash
复制代码
# 1. 克隆项目
cd "119-基于Python的各类企业排行数据可视化分析系统/code"
# 2. 安装依赖
pip install fastapi uvicorn sqlalchemy pymysql pydantic python-jose[cryptography] passlib[bcrypt] pandas openpyxl
# 3. 创建MySQL数据库
mysql -u root -p -e "CREATE DATABASE design_119_company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 4. 修改数据库配置 (如需)
# 编辑 app/config.py 中的 DB_USER, DB_PASSWORD, DB_HOST 等
# 5. 导入数据
python import_scraped2.py # 胡润2022/2023, 民营2023
python import_scraped_data.py # 胡润2024, 福布斯2024
python import_2025_data.py # 2025年三大榜单
# 6. 启动服务
python run.py
8.3 访问地址
复制代码
http://127.0.0.1:8000 # 首页
http://127.0.0.1:8000/login # 登录页
http://127.0.0.1:8000/docs # Swagger API文档
九、页面功能清单
9.1 首页 (/)
| 区域 |
内容 |
数据源 |
| 统计卡片 |
胡润总数、民营总数、福布斯总数、合计 |
/api/analysis/overview |
| 图表1 |
胡润行业分布饼图 |
/api/hurun/stats/industry |
| 图表2 |
民营省份分布饼图 |
/api/private/stats/province |
| 图表3 |
福布斯国家分布饼图 |
/api/forbes/stats/country |
| 图表4 |
胡润Top 10品牌价值 |
/api/hurun/stats/top |
| 图表5 |
民营Top 10营收 |
/api/private/stats/top |
| 图表6 |
省份排名柱状图 |
/api/analysis/private/top-revenue-by-province |
| 图表7 |
营收分布柱状图 |
/api/analysis/revenue-distribution |
| 图表8 |
福布斯Top 10营收 |
/api/forbes/stats/top |
| 图表9 |
胡润年度趋势(柱+线) |
/api/analysis/hurun/year-trend |
9.2 胡润百富榜 (/hurun)
| 区域 |
内容 |
| 筛选栏 |
年份下拉、行业下拉、筛选/重置按钮 |
| 图表1 |
行业分布饼图 |
| 图表2 |
行业品牌价值柱状图 |
| 图表3 |
Top 20品牌价值横向柱状图 |
| 图表4 |
母公司雷达图 |
| 图表5 |
品牌价值散点图 |
| 数据表 |
排名、品牌名、母公司、行业、品牌价值(20条/页) |
9.3 民营企业500强 (/private)
| 区域 |
内容 |
| 筛选栏 |
年份下拉、省份下拉、筛选/重置按钮 |
| 图表1 |
省份分布饼图 |
| 图表2 |
省份企业数量柱状图 |
| 图表3 |
Top 20营收横向柱状图 |
| 图表4 |
省份总营收折线图 |
| 图表5 |
营收散点图 |
| 数据表 |
排名、企业名、省份、营收(20条/页) |
9.4 福布斯全球2000强 (/forbes)
| 区域 |
内容 |
| 筛选栏 |
年份、国家、行业三个下拉,筛选/重置按钮 |
| 图表1 |
国家分布饼图 |
| 图表2 |
行业分布饼图 |
| 图表3 |
国家企业数量柱状图 |
| 图表4 |
行业营收柱状图 |
| 图表5 |
Top 20营收横向柱状图 |
| 图表6 |
营收 vs 利润散点图 |
| 图表7 |
Top 5企业综合雷达图 |
| 数据表 |
排名、企业名、国家、行业、营收、利润、资产、市值(20条/页) |
9.5 中国地图 (/map-china)
| 区域 |
内容 |
| 筛选栏 |
年份下拉 |
| 地图 |
省级热力图(企业数量) |
| 图表1 |
各省企业数量柱状图 |
| 图表2 |
各省营收总额柱状图 |
9.6 全球地图 (/map-world)
| 区域 |
内容 |
| 筛选栏 |
年份下拉 |
| 地图 |
世界地图(国家企业数量) |
| 图表1 |
各国企业数量柱状图 |
| 图表2 |
各国营收总额柱状图 |
| 图表3 |
行业分布玫瑰图 |
| 图表4 |
营收 vs 利润散点图 |
9.7 数据分析仪表盘 (/dashboard)
8个KPI卡片 + 20个ECharts图表,覆盖所有分析维度。包含:饼图、柱状图、折线图、散点图、雷达图、树图、漏斗图、热力图、仪表盘、组合图共10种图表类型。
9.8 全屏大屏 (/screen)
独立页面(不继承base.html),适配大屏投影。6个KPI指标 + 6个图表,60秒自动刷新,带浮动粒子动画背景。
十、UI设计规范
10.1 设计语言
系统采用 "Bloomberg Terminal × Art Deco × Cinematic" 的奢华暗黑主题:
- 背景 : 近黑色 (
#06060b),多层渐变叠加
- 强调色 : 暖金色 (
#c9a84c),用于标题、边框、高亮
- 文字 : 暖白色 (
#f0ece2) 层级分明
- 卡片 : 深灰 (
#151520),带金色阴影光晕
- 特效: 胶片颗粒纹理、浮动粒子、入场动画
10.2 字体方案
| 用途 |
字体 |
说明 |
| 标题/展示 |
Cormorant Garamond |
衬线体,高端感 |
| 正文/导航 |
DM Sans |
无衬线体,现代感 |
| 数据/代码 |
JetBrains Mono |
等宽体,精确感 |
10.3 响应式断点
| 断点 |
宽度 |
布局 |
| 桌面 |
≥992px |
侧边栏展开,双列图表 |
| 平板 |
768-991px |
侧边栏折叠,单列图表 |
| 手机 |
<768px |
侧边栏隐藏,全宽布局 |
十一、安全设计
11.1 认证安全
- 密码使用 BCrypt 算法哈希存储,不可逆
- JWT令牌使用 HS256 签名,有效期60分钟
- 前端通过
localStorage 存储token,页面加载时验证
11.2 页面保护
- 非公开页面(除首页、登录、注册外)均需JWT认证
- 前端
checkAuth() 在页面加载第一时间检查token
- 无token时立即重定向到登录页,不渲染页面内容
11.3 API保护
- 数据API(如
/api/hurun/list)当前为开放访问
- 认证API(如
/auth/me)通过 get_current_user 依赖注入验证
十二、扩展能力
12.1 数据扩展
系统支持通过编写Python导入脚本增加新年度数据:
python
复制代码
# 示例: 导入新年度数据
from app.models import HurunBrand
from decimal import Decimal
record = HurunBrand(
year=2026,
ranking=1,
brand_name="某品牌",
brand_value=Decimal("10000000000"),
parent_company="某公司",
industry="某行业"
)
db.add(record)
db.commit()
12.2 图表扩展
新增图表只需在对应HTML模板中:
- 添加
<div id="new-chart" class="chart-container"></div>
- 在JS中初始化ECharts实例并调用API
12.3 API扩展
新增API端点遵循现有模式:
python
复制代码
@router.get("/new-endpoint")
def new_endpoint(year: int = None, db: Session = Depends(get_db)):
query = db.query(Model)
if year:
query = query.filter(Model.year == year)
return query.all()