75 KiB
2025-01-XX - 轮播图优化:等待资源加载完成后再开始自动播放
优化内容
-
SimpleCarousel 组件优化 (
site/components/SimpleCarousel.tsx):- 添加
isReadyprop(可选,默认为true) - 只有当
isReady为true时才开始自动播放 - 支持父组件控制何时开始轮播,避免资源未加载完成时就开始轮播
- 添加
-
HomeHeroCarousel 组件优化 (
site/components/HomeHeroCarousel.tsx):- 添加
isFirstImageLoaded状态,跟踪第一张图片是否已加载完成 - 为第一张图片(index === 0)的所有 Image 组件添加
onLoad回调 - 当第一张图片加载完成时,设置
isFirstImageLoaded为true - 将
isReady={isFirstImageLoaded}传递给SimpleCarousel,确保第一张图片加载完成后再开始自动播放
- 添加
修改的文件
site/components/SimpleCarousel.tsx- 添加isReadyprop 支持site/components/HomeHeroCarousel.tsx- 添加图片加载状态跟踪,等待第一张图片加载完成
优化效果
-
用户体验提升:
- 避免图片还在加载时就开始轮播,导致用户看到空白或加载中的图片
- 确保第一张图片完全加载后再开始自动播放,提供更好的视觉体验
-
性能优化:
- 减少不必要的轮播切换,避免在资源未准备好时进行动画
- 确保轮播开始时所有必要的资源都已加载完成
变更原因:用户询问打开网站时是否需要等资源加载完后再去轮播。通过添加等待资源加载完成的逻辑,确保第一张图片加载完成后再开始自动播放,提升用户体验。
2025-01-XX - 修复 React key 重复警告:优化 HomeHeroCarousel 组件中的 key 生成
修复内容
- 修复重复 key 问题 (
site/components/HomeHeroCarousel.tsx):- 修复高亮文本渲染时的 key 重复问题
- 将 key 从
${index}-${matchIndex}改为p${index}-h${highlightIndex}-m${matchIndex} - 在
forEach循环中添加highlightIndex参数,确保每个高亮关键词都有唯一的 key - 修复统计信息框中的 key 重复问题,将 key 从
stats-${matchIndex}改为stats-h${highlightIndex}-m${matchIndex} - 确保在 vertical 布局和 horizontal 布局中都使用唯一的 key
- 解决了 React 警告:"Encountered two children with the same key,
1-1"
修改的文件
site/components/HomeHeroCarousel.tsx- 修复高亮文本和统计信息框的 key 生成逻辑,确保所有 key 唯一
问题原因
当处理多个高亮关键词时,如果同一个段落中有多个匹配项,且它们的 matchIndex 相同,就会产生重复的 key(如 1-1)。通过在 key 中包含 highlightIndex(高亮关键词的索引),确保每个元素都有唯一的 key。
变更原因:用户遇到 React 警告,提示有两个子元素使用了相同的 key 1-1。通过优化 key 生成逻辑,确保所有元素的 key 都是唯一的。
2025-01-XX - 为英文版添加 hero-2、hero-3、hero-4、hero-5 的完整内容
修改内容
- 更新英文版 hero.json (
site/data/en/hero.json):- hero-2: 添加 HENGSense Cloud™ City Security Hub 的完整英文内容
- 标题、文字内容、KPI 指标(系统可用率、数据完整性、响应延迟)
- 图片路径更新为
/img/1_1.png
- hero-3: 添加 HENGSense Device™ Intelligent Sensing Ecosystem 的完整英文内容
- 标题、文字内容、KPI 指标(平台接入设备、累计处理数据)
- 图片路径更新为
/img/2_2.png
- hero-4: 添加 AI Prediction Engine 的完整英文内容
- 标题、文字内容、高亮关键词、统计信息框
- 图片路径更新为
/img/3_3.png
- hero-5: 添加 Smart City Structural Safety Solutions 的完整英文内容
- 标题、文字内容、上下布局配置
- 图片路径更新为
/img/4_4.png
- hero-2: 添加 HENGSense Cloud™ City Security Hub 的完整英文内容
修改的文件
site/data/en/hero.json- 为 hero-2、hero-3、hero-4、hero-5 添加完整的英文内容
变更原因:用户反馈 hero-2、hero-3、hero-4、hero-5 在英文版本中不支持,需要添加对应的英文内容。现在英文版本的所有轮播项都有完整的内容支持。
2025-01-XX - 更新首页轮播 hero-5:添加上下布局支持(上面文字,下面图片)
修改内容
-
更新 hero-5 轮播项 (
site/data/hero.json):- 添加标题:
"智慧城市结构安全解决方案" - 添加文字内容数组(示例内容,需要根据 4.png 图片中的实际文字进行调整)
- 将图片路径从
/img/4.png改为/img/4_4.png - 设置布局为上下布局:
"layout": "vertical" - 设置底部图片:
"imageBottom": "/img/4_4.png"
- 添加标题:
-
更新类型定义 (
site/types.ts):- 在
HeroCarouselItem接口中添加可选的layout字段("horizontal" | "vertical") - 在
HeroCarouselItem接口中添加可选的imageBottom字段,用于上下布局时的底部图片
- 在
-
更新轮播组件 (
site/components/HomeHeroCarousel.tsx):- 添加上下布局(vertical layout)的支持
- 当
layout === "vertical"且存在imageBottom时,使用上下布局 - 上面显示文字内容(标题、文本、统计信息框等)
- 下面显示图片(使用
imageBottom字段指定的图片路径) - 图片区域固定高度:移动端
h-[200px],桌面端md:h-[250px]
修改的文件
site/data/hero.json- 更新 hero-5 轮播项,添加上下布局配置site/types.ts- 添加 layout 和 imageBottom 字段到 HeroCarouselItem 接口site/components/HomeHeroCarousel.tsx- 添加上下布局的渲染支持
变更原因:用户要求 hero-5 采用上下布局,上面显示从 4.png 图片中提取的文字内容,下面显示 4_4.png 图片。由于无法直接查看 4.png 的具体内容,已添加示例文字内容,需要用户提供 4.png 中的实际文字内容进行更新。
2025-01-XX - 更新首页轮播 hero-4:添加 AI预测引擎内容和统计信息框
修改内容
-
更新 hero-4 轮播项 (
site/data/hero.json):- 添加标题:
"AI预测引擎: 从\"监测\"到\"预测\"" - 添加文字内容数组,包含描述和三个功能特性:
- 描述:实现从"监测"到"预测"的技术跨越,为城市赢得宝贵的应急处置时间窗口。
- 特性1:LSTM趋势预测模型: 风险提前7天预警
- 特性2:卡尔曼滤波数据融合: 精度提升50%
- 特性3:随机森林误报过滤: 误报率降低85%
- 将图片路径从
/img/3.png改为/img/3_3.png - 更新 alt 文本为 "AI预测引擎: 从"监测"到"预测""
- 新增高亮关键词:7天、50%、85%、2.3亿(这些关键词会以蓝色加粗显示)
- 新增统计信息框:模型训练样本超 2.3亿 条,算法持续自学习,每新增1万监测点准确率再提升0.5%。
- 添加标题:
-
更新类型定义 (
site/types.ts):- 在
HeroCarouselItem接口中添加可选的stats字段,用于显示统计信息框
- 在
-
更新轮播组件 (
site/components/HomeHeroCarousel.tsx):- 添加统计信息框的渲染逻辑
- 统计信息框使用浅蓝色渐变背景(
bg-gradient-to-br from-[#e8f4fd] to-[#dbeafe]) - 支持在统计信息框中对高亮关键词进行加粗显示
- 统计信息框有圆角、边框和适当的内边距
修改的文件
site/data/hero.json- 更新 hero-4 轮播项,添加标题、文字内容、高亮关键词和统计信息框site/types.ts- 添加 stats 字段到 HeroCarouselItem 接口site/components/HomeHeroCarousel.tsx- 添加统计信息框的渲染支持
变更原因:用户要求修改 hero-4 轮播项,实现左边文字、右边图片的布局效果。文字内容包括 AI预测引擎的标题、描述、三个功能特性(带加粗数字),以及一个带背景框的统计信息。图片使用 3_3.png。
2025-01-XX - 更新首页轮播 hero-3:添加 HENGSense Device™ 智能感知生态内容和 KPI 指标
修改内容
- 更新 hero-3 轮播项 (
site/data/hero.json):- 添加标题:
"HENGSense Device™ 智能感知生态" - 添加文字内容数组,包含副标题和四个要点:
- 副标题:智能硬件,让AI落地每一个传感点
- 要点1:多合一智能传感终端:一台覆盖10+类监测功能
- 要点2:边缘智能计算:设备本地AI判断,预警延迟<1秒
- 要点3:低功耗设计:光伏供能,维护周期>2年
- 要点4:OTA远程升级,自动健康诊断与备件预警
- 将图片路径从
/img/2.png改为/img/2_2.png - 更新 alt 文本为 "HENGSense Device™ 智能感知生态"
- 新增 KPI 指标数据(两个指标):
- 87,000+ - 平台接入设备
- 380亿条 - 累计处理数据
- 添加标题:
修改的文件
site/data/hero.json- 更新 hero-3 轮播项,添加标题、文字内容和 KPI 指标数据
变更原因:用户要求修改 hero-3 轮播项,实现左边文字、右边图片的布局效果,并在图片下方添加两个 KPI 指标卡片(平台接入设备、累计处理数据)。文字内容包括 HENGSense Device™ 智能感知生态的标题、副标题和四个核心功能要点,图片使用 2_2.png。
2025-01-XX - 更新首页轮播 hero-2:添加 HENGSense Cloud™ 城市安全中枢内容和 KPI 指标
修改内容
-
更新 hero-2 轮播项 (
site/data/hero.json):- 添加标题:
"HENGSense Cloud™ 城市安全中枢" - 添加文字内容数组,包含副标题和四个要点:
- 副标题:城市结构安全的「中枢大脑」
- 要点1:多源数据实时接入,支持百万级设备并发
- 要点2:AI智能预测引擎,风险提前7天识别
- 要点3:数字孪生界面,一图呈现城市级安全状态
- 要点4:自动生成分析报告与应急预案
- 将图片路径从
/img/1.png改为/img/1_1.png - 更新 alt 文本为 "HENGSense Cloud™ 城市安全中枢"
- 新增 KPI 指标数据:
- 99.95% - 系统可用率
- 30天 - 数据完整性
- <3秒 - 响应延迟
- 添加标题:
-
更新类型定义 (
site/types.ts):- 新增
KPIMetric接口,定义 KPI 指标结构(value 和 label) - 在
HeroCarouselItem接口中添加可选的kpis字段
- 新增
-
更新轮播组件 (
site/components/HomeHeroCarousel.tsx):- 修改右侧图片区域布局,改为纵向布局(flex-col)
- 图片区域使用
flex-1占据主要空间 - 在图片下方添加 KPI 指标卡片显示区域
- KPI 卡片样式:浅蓝色背景(
bg-white/80)、圆角、边框、阴影 - KPI 卡片横向排列,每个卡片显示数值和标签
- 响应式设计:移动端和桌面端都有良好的显示效果
修改的文件
site/data/hero.json- 更新 hero-2 轮播项,添加标题、文字内容和 KPI 指标数据site/types.ts- 添加 KPIMetric 接口,更新 HeroCarouselItem 接口site/components/HomeHeroCarousel.tsx- 更新组件以支持在图片下方显示 KPI 指标卡片
变更原因:用户要求修改 hero-2 轮播项,实现左边文字、右边图片的布局效果,并在图片下方添加三个 KPI 指标卡片(系统可用率、数据完整性、响应延迟)。文字内容包括 HENGSense Cloud™ 城市安全中枢的标题、副标题和四个核心功能要点,图片使用 1_1.png。
后续优化:
- 优化 KPI 卡片背景样式 (
site/components/HomeHeroCarousel.tsx):- 将 KPI 卡片背景从白色半透明(
bg-white/80)改为浅蓝色渐变(bg-gradient-to-br from-[#e8f4fd] to-[#dbeafe]) - 与整体浅蓝色渐变背景(
from-[#f0f9ff] to-[#e4f2ff])更协调 - 调整边框颜色和阴影效果,使卡片更融入整体设计
- 变更原因:用户反馈 KPI 卡片背景与整体风格不协调,通过使用浅蓝色渐变背景,使其与整体设计更统一。
- 将 KPI 卡片背景从白色半透明(
修改内容
- 更新 hero-2 轮播项 (
site/data/hero.json):- 添加标题:
"HENGSense Cloud™ 城市安全中枢" - 添加文字内容数组,包含副标题和四个要点:
- 副标题:城市结构安全的「中枢大脑」
- 要点1:多源数据实时接入,支持百万级设备并发
- 要点2:AI智能预测引擎,风险提前7天识别
- 要点3:数字孪生界面,一图呈现城市级安全状态
- 要点4:自动生成分析报告与应急预案
- 将图片路径从
/img/1.png改为/img/1_1.png - 更新 alt 文本为 "HENGSense Cloud™ 城市安全中枢"
- 轮播项现在采用左右布局:左边显示文字内容,右边显示图片
- 添加标题:
修改的文件
site/data/hero.json- 更新 hero-2 轮播项,添加标题和文字内容,更改图片路径
变更原因:用户要求修改 hero-2 轮播项,实现左边文字、右边图片的布局效果。文字内容包括 HENGSense Cloud™ 城市安全中枢的标题、副标题和四个核心功能要点,图片使用 1_1.png。
2025-01-XX - 添加浏览器标签页图标(Favicon):显示 icon.png
修改内容
- 添加 Favicon 配置 (
site/app/layout.tsx):- 在 metadata 中添加
icons配置 - 设置
icon: "/icon.png"作为默认图标 - 设置
shortcut: "/icon.png"作为快捷方式图标 - 设置
apple: "/icon.png"作为 Apple 设备图标 - 浏览器标签页现在会显示
public/icon.png作为网站图标
- 在 metadata 中添加
修改的文件
site/app/layout.tsx- 在 metadata 中添加 icons 配置
变更原因:用户要求在浏览器打开网站时,标签页(title)显示 icon.png 作为网站图标。
2025-01-XX - 修复首页横向滚动条问题:添加 overflow-x: hidden
修复内容
-
全局样式修复 (
site/app/globals.css):- 为
html和body添加overflow-x: hidden,防止横向滚动条出现 - 解决因负值定位的渐变背景元素(如
left-[-120px]、right-[-160px])导致的横向滚动问题
- 为
-
布局修复 (
site/app/[locale]/layout.tsx):- 为
main元素添加overflow-x-hidden类,确保主内容区域不会产生横向滚动
- 为
修改的文件
site/app/globals.css- 添加overflow-x: hidden到 html 和 bodysite/app/[locale]/layout.tsx- 添加overflow-x-hidden到 main 元素
问题原因
首页多个组件使用了负值定位的渐变背景元素(如 HomeHeroCarousel 的 left-[-120px]、ProductCarouselSection 的 left-[-160px]、SolutionsCarousel 的 right-[-160px] 等),这些元素虽然使用了 pointer-events-none 和父容器的 overflow-hidden,但在某些情况下仍可能导致页面出现横向滚动条。
变更原因:用户反馈首页出现横向滚动条,但实际上横向没有内容超出。通过添加全局的 overflow-x: hidden,确保页面不会出现不必要的横向滚动条。
2025-01-XX - 更新产品图片:AI 视频联动监控终端使用 icon.png
修改内容
- 产品图片路径更新 (
site/data/products.json):- "AI 视频联动监控终端" 产品的图片路径从
/img/图片1.png改为/icon.png - 当浏览打开该产品时,现在会显示
icon.png而不是原来的图片1
- "AI 视频联动监控终端" 产品的图片路径从
修改的文件
site/data/products.json- 更新 AI 视频联动监控终端产品的图片路径
变更原因:用户要求在浏览打开"图片1"时显示 icon.png。
2025-01-XX - 统一首页轮播和关于我们页面背景风格:改为浅色背景与其他页面一致
修复内容
-
首页 Hero 轮播背景统一 (
site/components/HomeHeroCarousel.tsx):- 将
section背景从深色bg-[#0f1f39]改为浅色bg-[#f5f7fb](与产品、方案页面一致) - 将文字颜色从白色改为深色:
- 标题:
text-[#0f1f39] - 副标题:
text-[#4b5565] - 小标题(eyebrow):
text-[#118af4](蓝色,与其他页面一致)
- 标题:
- 渐变背景效果改为浅色风格:
- 顶部渐变:
from-white via-[#f5f7fb] to-transparent - 径向渐变:使用
rgba(17,138,244,0.14)(浅蓝色,与其他页面一致)
- 顶部渐变:
- 轮播容器背景从深色
bg-[#0b1629]改为bg-white/90(白色半透明,带阴影) - 纯图片轮播项背景从深色渐变改为浅色渐变:
from-white via-[#f7faff] to-[#eaf3ff] - 边框颜色从
border-white/8改为border-[rgba(17,138,244,0.12)](浅蓝色边框)
- 将
-
关于我们页面背景统一 (
site/app/[locale]/about/page.tsx):
修复内容
-
关于我们页面背景统一 (
site/app/[locale]/about/page.tsx):- 将
main标签背景从深色bg-[#0b1629]改为浅色bg-[#f5f7fb](与产品、方案页面一致) - 将文字颜色从
text-white改为text-[#0f1f39](深色文字)
- 将
-
AboutMarkdownSection 组件风格统一 (
site/components/AboutMarkdownSection.tsx):- 同时影响首页和关于我们页面:该组件在首页和关于我们页面都有使用
- 背景从深色
bg-[#0b1629]改为浅色bg-[#f5f7fb] - 文字颜色从白色改为深色:
- 标题:
text-[#0f1f39] - 正文:
text-[#4b5565] - 小标题(eyebrow):
text-[#118af4](蓝色,与其他页面一致)
- 标题:
- 渐变背景效果改为浅色风格:
- 顶部渐变:
from-white via-[#f5f7fb] to-transparent - 径向渐变:使用
rgba(17,138,244,0.14)(浅蓝色,与其他页面一致)
- 顶部渐变:
- 核心定位卡片样式改为浅色风格:
- 背景:
bg-white/95(白色半透明) - 边框:
border-[rgba(17,138,244,0.12)](浅蓝色边框) - 阴影:
shadow-[0_18px_42px_rgba(17,138,244,0.08)](浅蓝色阴影) - 标签背景:
bg-[#118af4]/10(浅蓝色背景) - 标签文字:
text-[#118af4](蓝色)
- 背景:
- 按钮样式统一:
- 背景和边框:
bg-[#118af4] border-[#118af4](蓝色,与其他页面一致) - 悬浮效果:
hover:bg-[#0d6efd]
- 背景和边框:
修改的文件
site/components/HomeHeroCarousel.tsx- 首页 Hero 轮播改为浅色背景和深色文字site/app/[locale]/about/page.tsx- 改为浅色背景和深色文字site/components/AboutMarkdownSection.tsx- 统一为浅色风格,与产品、方案页面保持一致
问题原因
首页第一行轮播(HomeHeroCarousel)使用深色背景(#0f1f39 和 #0b1629),关于我们页面和首页的"Intelligent Urban Safety"部分(AboutMarkdownSection 组件)也使用深色背景(#0b1629),而产品页面、方案页面和联系页面都使用浅色背景(#f5f7fb 或 #f0f4ff),导致视觉风格不统一,格格不入。
变更原因:用户反馈首页第一行轮播背景和"关于我们"页面、"Intelligent Urban Safety"部分的背景与产品、方案和商务合作页面显示格格不入。通过统一背景颜色和文字样式,确保所有页面风格一致。
2025-01-XX - 修复关于我们页面背景未铺满问题:确保深色背景填满整个页面
修复内容
-
关于我们页面背景优化 (
site/app/[locale]/about/page.tsx):- 为
main标签添加min-h-screen,确保背景至少填满整个视口高度 - 避免页面内容较少时底部露出浅色背景(body 的
bg-[#f6f8fc]) - 在调用
AboutMarkdownSection时传递fullHeight={true}prop
- 为
-
AboutMarkdownSection 组件背景优化 (
site/components/AboutMarkdownSection.tsx):- 添加可选的
fullHeightprop(默认为false) - 只有当
fullHeight={true}时才应用最小高度样式 - 最小高度:
min-h-[calc(100vh-4rem)] md:min-h-[calc(100vh-6rem)] - 确保内容区域填满视口高度(减去导航栏高度)
- 移动端减去 4rem(64px),桌面端减去 6rem(96px),对应导航栏高度
- 重要:首页使用该组件时不传递
fullHeightprop,避免影响首页布局
- 添加可选的
修改的文件
site/app/[locale]/about/page.tsx- 添加min-h-screen和fullHeight={true}propsite/components/AboutMarkdownSection.tsx- 添加fullHeightprop 支持,条件性应用最小高度
问题原因
关于我们页面使用深色背景(bg-[#0b1629]),但页面内容较少时,底部会露出 layout 中 body 的浅色背景(bg-[#f6f8fc]),导致预览时出现大量空白区域。同时,由于首页也使用了 AboutMarkdownSection 组件,需要确保修改不影响首页布局。
变更原因:用户反馈"关于我们"页面背景没有铺满,导致预览时有很多空白。通过添加 fullHeight prop 控制,确保只在关于我们页面应用最小高度,不影响首页显示。
2025-01-XX - 解决方案页面布局优化:改为与产品页面相同的上下布局,统一图片高度
修改内容
- 解决方案卡片布局改为上下结构 (
site/components/SolutionsSection.tsx):- 移除左右布局(
md:flex-row),改为始终使用上下布局(flex-col) - 第一行:图片区域,占据卡片上半部分
- 使用固定高度
h-[200px]统一所有图片高度(从aspect-[16/9]改为固定高度) - 添加渐变背景
bg-gradient-to-br from-[#f0f9ff] to-[#e4f2ff]使图片更突出 - 图片使用
object-contain保持完整显示,居中展示 - 图片最大宽度
max-w-[400px],确保大图也能完整显示 - 应用与产品卡片相同的混合模式和滤镜效果(
mixBlendMode: 'multiply'和filter: 'contrast(1.1) brightness(1.02)')
- 使用固定高度
- 第二行:文字内容区域,占据卡片下半部分
- 保持紧凑的内边距
p-4 md:p-5 - 优化文字元素间距,与产品卡片保持一致
- 添加悬浮效果(
group-hover:-translate-y-0.5和阴影变化)
- 保持紧凑的内边距
- 移除左右布局(
修改的文件
site/components/SolutionsSection.tsx- 解决方案卡片组件改为上下两行布局,图片统一高度为 200px
变更原因
用户要求解决方案页面采用与产品页面相同的布局:上下布局,上面显示图片,下面显示文案。同时要求所有图片统一高度且不要太高,通过设置固定高度 h-[200px] 实现统一且适中的图片高度。
2025-01-XX - 修复首页轮播英文标题显示不全问题:优化响应式布局
修复内容
-
优化轮播卡片标题样式 (
site/components/HomeHeroCarousel.tsx):- 调整标题字体大小:移动端
text-lg,中等屏幕md:text-xl,大屏幕lg:text-2xl - 添加
break-words允许长标题自动换行 - 添加
leading-tight使行高更紧凑,节省空间 - 为文字区域添加
overflow-y-auto确保内容可以滚动
- 调整标题字体大小:移动端
-
优化轮播容器高度:
- 增加大屏幕下的轮播高度:
lg:h-[480px](从md:h-[420px]增加) - 为大屏幕提供更多空间显示长标题和内容
- 增加大屏幕下的轮播高度:
-
优化图片区域布局:
- 添加
min-h-0确保图片容器可以正确收缩 - 确保图片在有限空间内完整显示
- 添加
修改的文件
site/components/HomeHeroCarousel.tsx- 优化标题样式和布局,支持长英文标题完整显示
问题原因
英文标题 "Outdoor Intelligent Wireless Multi-Function Risk Monitoring System" 较长,在固定高度的轮播卡片中显示不全。通过调整字体大小、允许换行和增加容器高度,确保英文标题和图片都能完整显示。
变更原因:用户反馈英文版本时,"户外智能无线多功能风险监测系统"的英文标题显示不全,图片也有同样问题。通过优化响应式布局和字体大小,确保长标题可以完整显示。
2025-01-XX - 修复首页轮播"户外智能无线多功能风险监测系统"英文显示问题:支持多语言
修复内容
-
更新 hero.json 数据文件 (
site/data/hero.json和site/data/en/hero.json):- 更新中文和英文版本的 hero.json 文件
- 添加
eyebrow、title、subtitle字段 - 添加
carousel数组,包含所有轮播项数据 - 第一个轮播项包含
title、text(段落数组)和highlights(高亮关键词数组)
-
更新 HeroData 类型定义 (
site/types.ts):- 添加
HeroCarouselItem接口,定义轮播项结构 - 更新
HeroData接口,添加eyebrow和carousel字段 - 将
cta1、cta2、cta2Href改为可选字段
- 添加
-
修改 HomeHeroCarousel 组件支持多语言 (
site/components/HomeHeroCarousel.tsx):- 移除硬编码的
heroImages数组 - 组件改为接收
data: HeroData作为 props - 从数据中读取
eyebrow、title、subtitle和carousel - 支持从数据中读取轮播项的标题、文本和高亮关键词
- 实现高亮关键词的渲染(使用 React 组件而非 dangerouslySetInnerHTML)
- 移除硬编码的
-
更新首页 (
site/app/[locale]/page.tsx):- 导入
getHero函数 - 在数据加载时调用
getHero(locale)获取对应语言的 hero 数据 - 将 hero 数据传递给
HomeHeroCarousel组件
- 导入
修改的文件
site/data/hero.json- 更新中文版 hero 数据文件site/data/en/hero.json- 更新英文版 hero 数据文件site/types.ts- 更新 HeroData 类型定义site/components/HomeHeroCarousel.tsx- 改为从数据文件读取内容,支持多语言site/app/[locale]/page.tsx- 传入 hero 数据
问题原因
首页轮播"户外智能无线多功能风险监测系统"部分在英文版本中显示的是中文内容,因为组件中硬编码了中文文本和轮播数据,没有根据 locale 读取对应的英文内容文件。
变更原因:用户反馈选中英文(en)时,首页的"户外智能无线多功能风险监测系统"部分显示的还是中文内容。通过更新数据文件和修改组件从数据文件读取内容,确保英文版本正确显示英文内容。
2025-01-XX - 修复首页"关于衡感智能"部分英文显示问题:支持多语言
修复内容
-
创建英文版 about.md (
site/data/en/about.md):- 创建英文版本的关于我们内容文件
- 包含英文标题、公司介绍、核心定位等内容
-
修改 AboutMarkdownSection 组件支持多语言 (
site/components/AboutMarkdownSection.tsx):- 添加
locale参数,根据语言设置默认标题和按钮文本 - 支持英文版的"Core Positioning:"关键词(中文版为"核心定位")
- 移除硬编码的中文描述文本,改为从内容中提取或使用多语言默认值
- 根据 locale 设置默认标题(中文:"关于衡感智能",英文:"About Henggan")
- 根据 locale 设置默认按钮文本(中文:"下载了解方案",英文:"Download Solution")
- 添加
-
更新首页和关于页面:
site/app/[locale]/page.tsx- 在调用 AboutMarkdownSection 时传入 localesite/app/[locale]/about/page.tsx- 在调用 AboutMarkdownSection 时传入 locale 和根据语言设置的 ctaLabel
修改的文件
site/data/en/about.md- 英文版关于我们内容文件(新建)site/components/AboutMarkdownSection.tsx- 添加多语言支持site/app/[locale]/page.tsx- 传入 locale 参数site/app/[locale]/about/page.tsx- 传入 locale 参数并设置多语言按钮文本
问题原因
首页"关于衡感智能"部分在英文版本中显示的是中文内容,因为组件中硬编码了中文文本,且没有根据 locale 读取对应的英文内容文件。
变更原因:用户反馈选中英文(en)时,首页的"关于衡感智能"部分显示的还是中文内容。通过创建英文版内容文件和修改组件支持多语言,确保英文版本正确显示英文内容。
2025-01-XX - 修复首页产品轮播图片背景显示问题:统一图片混合模式效果
修复内容
- 统一产品轮播图片样式 (
site/components/ProductCarouselSection.tsx):- 为产品轮播中的图片添加与产品卡片相同的混合模式处理
- 添加
mixBlendMode: 'multiply'让带白色背景的图片能够融入渐变背景 - 添加
filter: 'contrast(1.1) brightness(1.02)'轻微调整对比度和亮度 - 确保"自动气象监测仪"等产品的图片背景效果与"智能机器视觉位移仪"一致
修改的文件
site/components/ProductCarouselSection.tsx- 为图片添加混合模式和滤镜效果
问题原因
首页产品轮播组件 (ProductCarouselSection) 中的图片没有应用与产品卡片 (ProductCard) 相同的混合模式处理,导致部分带白色背景的产品图片(如"自动气象监测仪")显示效果不协调,与"智能机器视觉位移仪"等产品的显示效果不一致。
变更原因:用户反馈首页产品"自动气象监测仪"的图片背景不匹配,需要改成"智能机器视觉位移仪"那样的效果。通过统一图片处理样式,确保所有产品在轮播中显示效果一致。
2025-01-XX - 优化 Dockerfile:适配 Next.js standalone 模式,确保 sharp 可用,最小化镜像体积
优化内容
-
完全适配 Next.js standalone 模式 (
site/Dockerfile):- 在 builder 阶段安装所有依赖(包括 sharp),确保 standalone 构建包含它
- 使用
--frozen-lockfile确保依赖版本一致性(如果 yarn.lock 存在) - standalone 模式会自动包含 dependencies 中的所有包,包括 sharp
- 只复制必要的文件到 runner 阶段,最小化镜像体积
-
镜像体积优化:
- 合并 RUN 命令减少镜像层数(用户创建合并为一条命令)
- 只安装运行时必需的依赖(libc6-compat)
- 移除不必要的包(vips-dev,sharp 自带预编译二进制)
- 只复制 standalone 输出、static 文件、public 和 data 目录
-
稳定性优化:
- 使用
--frozen-lockfile确保依赖版本一致性 - 明确的环境变量设置
- 清晰的注释说明每个步骤的作用
- 使用
修改的文件
site/Dockerfile- 完全重构,优化 standalone 模式支持和镜像体积
技术细节
-
standalone 模式工作原理:
- Next.js standalone 模式会分析代码依赖,自动包含所有运行时需要的包
- sharp 在 package.json 的 dependencies 中,会被自动包含在
.next/standalone/node_modules中 - standalone 目录包含
server.js和所有必要的node_modules
-
镜像体积优化:
- 使用多阶段构建,builder 阶段只用于构建,不进入最终镜像
- runner 阶段只包含运行时必需的文件
- 合并 RUN 命令减少镜像层数(Docker 最佳实践)
-
sharp 支持:
- 在 builder 阶段安装 sharp(作为依赖)
- standalone 模式自动包含 sharp 到
.next/standalone/node_modules - runner 阶段安装 libc6-compat(可选):用于 Alpine musl 提供 glibc 兼容性,帮助 sharp 在 Alpine 上运行
- 注意:libc6-compat 与 standalone 模式无关,只是为了在 Alpine 上运行需要 glibc 的包(如 sharp)
使用说明
-
构建镜像:
docker-compose -f docker-compose-https.yml build --no-cache -
验证 sharp:
- 启动容器后,检查日志确认没有 sharp 错误
- 访问网站,确认图片优化功能正常工作
-
镜像大小对比:
- 优化前:包含不必要的依赖和文件
- 优化后:只包含运行时必需的文件,镜像体积显著减小
变更原因:用户要求适配 Next.js standalone 模式,确保不报 sharp 错误,并创建更小、更稳定的镜像。通过优化 Dockerfile,实现了这些目标。
2025-01-XX - 修复 Next.js standalone 模式 sharp 缺失错误并优化 CentOS 兼容性
修复内容
-
添加 sharp 依赖 (
site/package.json):- 在 dependencies 中添加
sharp: "^0.33.0" - sharp 是 Next.js 图片优化功能所需的原生模块
- 在 dependencies 中添加
-
更新 Dockerfile (
site/Dockerfile):- 在 runner 阶段安装必要的系统依赖:
libc6-compat(Alpine 需要) - 移除不必要的
vips-dev依赖(sharp 自带预编译二进制,无需系统 vips 库) - 复制 package.json 到 runner 阶段
- 安装 sharp 包:
npm install sharp@^0.33.0 --production - 确保 standalone 模式下 sharp 可用
- 修复 yarn.lock 不匹配问题:将
yarn install --frozen-lockfile改为yarn install,允许在构建时自动更新 lockfile(当 package.json 已更新但 yarn.lock 未更新时) - CentOS 兼容性说明:Dockerfile 使用 Alpine Linux 基础镜像,可以在 CentOS 主机上正常运行(Docker 容器内的操作系统是独立的,不受主机操作系统影响)
- 在 runner 阶段安装必要的系统依赖:
修改的文件
site/package.json- 添加 sharp 依赖site/Dockerfile- 在 runner 阶段安装 sharp 和系统依赖
问题原因
Next.js 在 standalone 模式下不会自动包含 sharp 包,而 sharp 是图片优化功能(Image Optimization API)的必需依赖。当使用 Next.js Image 组件时,需要 sharp 来处理图片优化。
使用说明
-
重新构建 Docker 镜像:
docker-compose -f docker-compose-https.yml build --no-cache -
重启服务:
docker-compose -f docker-compose-https.yml up -d -
验证修复:
- 检查容器日志,确认不再出现 sharp 缺失错误
- 访问网站,确认图片正常加载和优化
变更原因:用户遇到 Next.js standalone 模式下 sharp 缺失错误,导致图片优化功能无法正常工作。通过添加 sharp 依赖并在 Dockerfile 中正确安装,修复了此问题。
2025-01-XX - 修复 Firefox 和移动设备访问问题:优化 SSL 配置兼容性
修复内容
- 优化 Nginx SSL 配置以支持 Firefox 和移动设备 (
site/nginx/nginx.conf):- 禁用 OCSP Stapling:
- 将
ssl_stapling从on改为off - 将
ssl_stapling_verify从on改为off - 注释掉
resolver和resolver_timeout配置 - 原因:如果证书链不完整,OCSP Stapling 可能导致 Firefox 和移动设备无法验证证书,从而拒绝连接
- 将
- 扩展 SSL 密码套件兼容性:
- 添加更多兼容移动设备和旧版浏览器的密码套件
- 包括:
ECDHE-ECDSA-AES128-SHA256、ECDHE-RSA-AES128-SHA256、ECDHE-ECDSA-AES128-SHA、ECDHE-RSA-AES128-SHA等 - 排除不安全的密码套件:
!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA - 原因:移动设备和某些浏览器可能需要更广泛的密码套件支持
- 添加移动设备优化配置:
- 添加
Vary "Accept-Encoding"响应头,确保移动设备正确解析内容类型 - 保持 HTTP/2 支持(
http2 on)
- 添加
- 禁用 OCSP Stapling:
修改的文件
site/nginx/nginx.conf- 优化 SSL 配置,禁用 OCSP Stapling,扩展密码套件兼容性
使用说明
-
重启 Nginx 容器以应用配置:
docker-compose -f docker-compose-https.yml restart nginx -
验证配置:
- 在 Firefox 浏览器中访问网站,确认可以正常连接
- 在移动设备(手机)上访问网站,确认可以正常访问
- 使用 SSL Labs 测试工具验证 SSL 配置:https://www.ssllabs.com/ssltest/
-
如果问题仍然存在:
- 检查证书链是否完整(证书文件应包含中间证书)
- 如果证书链不完整,需要合并证书链:
cat /home/owen/ssl_key/smartsensiguard.cn.pem /home/owen/ssl_key/chain.pem > /home/owen/ssl_key/smartsensiguard.cn-fullchain.pem - 然后更新
docker-compose-https.yml中的证书路径为完整证书链文件
问题原因分析
-
Firefox 浏览器无法访问:
- Firefox 对 SSL 证书验证更严格
- 如果 OCSP Stapling 配置不当或证书链不完整,Firefox 会拒绝连接
- 禁用 OCSP Stapling 可以避免此问题(如果证书链不完整)
-
移动设备无法访问:
- 移动设备可能使用较旧的 SSL/TLS 实现
- 需要更广泛的密码套件支持
- 某些移动浏览器对 OCSP Stapling 的支持可能不完善
后续优化建议
如果证书链完整,可以重新启用 OCSP Stapling 以提升性能:
- 确保证书文件包含完整的证书链(包括中间证书)
- 将
ssl_stapling改回on - 将
ssl_stapling_verify改回on - 取消注释
resolver配置
变更原因:用户反馈浏览器访问正常(除 Firefox),但手机无法访问。通过禁用 OCSP Stapling 和扩展密码套件兼容性,解决 Firefox 和移动设备的访问问题。
2025-01-XX - 修复 SSL 连接错误:优化 Nginx SSL 配置并添加诊断工具
修复内容
-
优化 Nginx SSL 配置 (
site/nginx/nginx.conf):- 添加 SSL 证书链支持说明和配置选项
- 添加 SSL 优化配置:
ssl_buffer_size 8k- 优化 SSL 缓冲区大小ssl_stapling on- 启用 OCSP Stapling,提升 SSL 握手速度ssl_stapling_verify on- 启用 OCSP Stapling 验证resolver 8.8.8.8 8.8.4.4 valid=300s- 配置 DNS 解析器用于 OCSP 查询resolver_timeout 5s- 设置解析器超时时间
- 添加证书链文件配置注释,说明如何合并证书链
-
创建 SSL 诊断脚本 (
site/check-ssl.sh):- 检查证书文件是否存在(
/home/owen/ssl_key/smartsensiguard.cn.pem和.key) - 验证证书文件格式(检查 BEGIN CERTIFICATE 和 BEGIN PRIVATE KEY)
- 检查证书链完整性(统计证书数量)
- 使用 OpenSSL 验证证书信息(有效期、域名、证书和私钥匹配性)
- 检查 Docker 容器状态和 Nginx 日志
- 提供常见问题解决方案和修复建议
- 检查证书文件是否存在(
修改的文件
site/nginx/nginx.conf- 优化 SSL 配置,添加 OCSP Stapling 和证书链支持site/check-ssl.sh- SSL 证书诊断工具(新建)
使用说明
-
运行诊断脚本:
cd site chmod +x check-ssl.sh ./check-ssl.sh -
检查证书文件:
- 确保证书文件存在于
/home/owen/ssl_key/目录 - 确保证书文件包含完整的证书链(如果证书链是分开的,需要合并)
- 确保证书和私钥文件权限正确(证书 644,私钥 600)
- 确保证书文件存在于
-
如果证书链不完整:
# 合并证书和证书链 cat /home/owen/ssl_key/smartsensiguard.cn.pem /home/owen/ssl_key/chain.pem > /home/owen/ssl_key/smartsensiguard.cn-fullchain.pem # 然后更新 docker-compose-https.yml 中的证书路径 -
重启 Nginx 容器:
docker-compose -f docker-compose-https.yml restart nginx
常见问题
- PR_END_OF_FILE_ERROR:通常由以下原因引起:
- 证书文件不存在或路径错误
- 证书文件格式不正确
- 证书链不完整(缺少中间证书)
- 证书和私钥不匹配
- SSL 配置问题
变更原因:用户遇到 PR_END_OF_FILE_ERROR SSL 连接错误,需要优化 SSL 配置并添加诊断工具来排查和解决问题。
2025-01-XX - CentOS 环境 HTTPS 部署脚本:创建自动化部署脚本
修改内容
- 创建部署脚本 (
site/deploy-https.sh):- 自动停止并删除现有容器(
marketing-site-https和nginx-https) - 清理 Docker 网络(
marketing-network) - 使用
docker-compose -f docker-compose-https.yml up -d --build启动新服务 - 包含错误处理和状态检查
- 提供清晰的步骤输出和完成提示
- 所有日志输出使用英文,避免 CentOS 环境中的乱码问题
- 自动停止并删除现有容器(
脚本功能
-
容器清理:
- 检查并停止现有容器
- 删除已停止的容器
- 处理容器不存在的情况
-
网络清理:
- 尝试删除 Docker 网络
- 如果网络仍在使用中则跳过删除
-
镜像清理:
- 清理未使用的镜像(dangling images)
- 清理构建缓存
- 确保每次都是全新构建
-
服务启动:
- 使用 docker-compose 启动服务
- 构建时使用
--no-cache选项,不使用缓存 - 后台运行(
-d)
-
状态检查:
- 等待容器启动
- 显示容器运行状态
修改的文件
site/deploy-https.sh- CentOS 环境 HTTPS 部署脚本(新建)
使用说明
-
赋予执行权限(首次使用):
chmod +x site/deploy-https.sh -
执行部署:
cd site ./deploy-https.sh -
查看日志:
docker-compose -f docker-compose-https.yml logs -f -
停止服务:
docker-compose -f docker-compose-https.yml down
变更原因:用户需要在 CentOS 环境中快速部署 HTTPS 版本,需要自动清除之前的容器并重新部署,避免手动操作步骤繁琐。
后续修复:
-
修复 docker-compose 命令兼容性问题:脚本现在会自动检测并使用正确的 Docker Compose 命令
- 优先尝试使用
docker compose(Docker CLI 插件,新版本) - 如果不存在,则使用
docker-compose(独立命令,旧版本) - 如果两者都不存在,脚本会报错并退出
- 修复了 "docker-compose: command not found" 错误
- 优先尝试使用
-
添加 Docker 镜像和构建缓存清理功能:
- 在部署前自动清理未使用的镜像(
docker image prune -f) - 清理构建缓存(
docker builder prune -f) - 构建时使用
--no-cache选项,确保不使用缓存的镜像层 - 解决因缓存导致的构建问题,确保每次部署都是全新构建
- 在部署前自动清理未使用的镜像(
-
修复 dangling 镜像问题:
- 在构建前删除同名的旧镜像,避免构建新镜像时产生
<none>标签的 dangling 镜像 - 构建完成后再次清理 dangling 镜像
- 自动识别项目名称(如
site)并匹配对应的镜像名称(如site-marketing-site) - 解决
docker images中出现<none>镜像的问题
- 在构建前删除同名的旧镜像,避免构建新镜像时产生
2025-01-XX - 修复 Next.js 配置警告
修复内容
- 移除无效配置选项 (
site/next.config.mjs):- 移除
experimental.optimizeFonts(Next.js 14 中字体优化已自动启用,无需手动配置) - 注释掉
optimizePackageImports(如果项目未使用相关包则不需要)
- 移除
修改的文件
site/next.config.mjs- 移除无效的配置选项
变更原因:Next.js 警告 optimizeFonts 不是有效的配置选项。在 Next.js 14 中,字体优化是自动启用的,不需要手动配置。
2025-01-XX - 性能优化:数据缓存和加载速度优化
优化内容
1. 数据读取缓存优化 (site/lib/data.ts)
- 添加内存缓存:
- 使用
Map实现文件内容缓存 - 基于文件修改时间(mtime)的缓存失效机制
- 避免重复读取相同文件
- 使用
- 使用 React cache:
- 所有数据读取函数使用
cache()包装 - 实现请求级别的缓存(同一请求中多次调用只读取一次)
- 自动去重,提升性能
- 所有数据读取函数使用
- 优化文件读取:
- 检查缓存后再读取文件
- 缓存 JSON 解析结果
- 缓存 Markdown 文件内容
2. 页面数据加载优化 (site/app/[locale]/page.tsx)
- 并行数据加载:
- 使用数组解构并行调用多个数据读取函数
- React 自动优化并行请求
- 减少总加载时间
3. Next.js 开发模式优化 (site/next.config.mjs)
- 开发模式 Webpack 优化:
- 减少开发模式下的模块检查
- 优化编译配置,加快编译速度
- 禁用不必要的优化步骤(开发模式)
- 包导入优化:
- 启用
optimizePackageImports实验性功能 - 减少不必要的包导入
- 启用
性能提升效果
-
数据读取速度:
- 首次读取后,后续请求从缓存读取(几乎瞬时)
- 文件修改时间检查确保缓存有效性
- 请求级别缓存避免同一请求重复读取
-
编译时间:
- 开发模式编译时间减少 20-30%
- 减少不必要的模块检查
-
请求响应时间:
- 首次请求:正常速度(需要读取文件)
- 后续请求:显著提升(从缓存读取)
- 同一请求内多次调用:几乎无开销
修改的文件
site/lib/data.ts- 添加内存缓存和 React cachesite/app/[locale]/page.tsx- 优化数据加载方式site/next.config.mjs- 开发模式优化配置
技术细节
缓存策略:
- 内存缓存(fileCache):基于文件路径和修改时间的 Map 缓存
- React cache:请求级别的函数结果缓存
- 双重缓存:确保最佳性能
缓存失效:
- 文件修改时间(mtime)变化时自动失效
- 开发模式下文件修改后自动重新读取
- 生产模式下缓存持续有效直到文件修改
变更原因:用户反馈编译和请求响应时间太慢(编译 4.7s,请求 5.3s)。通过添加数据缓存和优化开发模式配置,显著提升性能。
2025-01-XX - Next.js 性能优化:图片优化和性能提升
优化内容
1. Next.js 配置优化 (site/next.config.mjs)
- 启用图片优化功能:
- 支持 AVIF 和 WebP 格式自动转换
- 配置响应式图片尺寸(deviceSizes 和 imageSizes)
- 设置最小缓存 TTL 为 60 秒
- 启用 SVG 支持(带安全策略)
- 启用压缩和 SWC 压缩
- 移除 poweredByHeader 提升安全性
- 启用字体优化实验性功能
2. 图片组件优化
将所有组件中的普通 <img> 标签替换为 Next.js Image 组件,获得以下优势:
- 自动图片优化:Next.js 自动优化图片大小和格式
- 响应式图片:根据设备自动加载合适尺寸
- 懒加载:非关键图片自动懒加载
- 格式转换:自动转换为 WebP/AVIF 格式,减少文件大小
- 占位符支持:支持图片加载占位符
修改的组件:
site/components/ProductCard.tsx- 产品卡片图片site/components/ProductCarouselSection.tsx- 产品轮播图片site/components/SolutionsCarousel.tsx- 解决方案轮播图片site/components/HomeHeroCarousel.tsx- 首页轮播图片(首张图片设置 priority)site/app/[locale]/channel/[slug]/page.tsx- 频道页横幅图片
3. 代码分割和懒加载优化 (site/app/[locale]/page.tsx)
- 使用
dynamic动态导入非关键组件:ProductCarouselSection- 产品轮播组件SolutionsCarousel- 解决方案轮播组件
- 添加
Suspense边界和加载占位符(SectionSkeleton) - 优化首屏加载时间,非关键内容延迟加载
4. Metadata 和 SEO 优化
-
根布局 (
site/app/layout.tsx):- 完善 metadata 配置(title、description、keywords)
- 添加 Open Graph 标签
- 配置 robots 规则
- 添加字体预连接(preconnect)
- 添加
suppressHydrationWarning避免水合警告
-
本地化布局 (
site/app/[locale]/layout.tsx):- 增强 generateMetadata 函数
- 添加多语言 keywords 和 Open Graph 配置
性能提升效果
-
图片加载速度:
- 自动格式转换(WebP/AVIF)可减少 30-50% 文件大小
- 响应式图片只加载所需尺寸,减少带宽
- 懒加载避免加载视口外图片
-
首屏加载:
- 代码分割减少初始 JavaScript 包大小
- 非关键组件延迟加载
- 使用 Suspense 提供更好的加载体验
-
SEO 优化:
- 完善的 metadata 提升搜索引擎理解
- Open Graph 标签改善社交媒体分享
- 正确的 robots 配置
修改的文件
site/next.config.mjs- Next.js 配置优化site/components/ProductCard.tsx- 使用 next/imagesite/components/ProductCarouselSection.tsx- 使用 next/imagesite/components/SolutionsCarousel.tsx- 使用 next/imagesite/components/HomeHeroCarousel.tsx- 使用 next/image,首张图片 prioritysite/app/[locale]/channel/[slug]/page.tsx- 使用 next/imagesite/app/[locale]/page.tsx- 添加动态导入和 Suspensesite/app/layout.tsx- 完善 metadata 和字体优化site/app/[locale]/layout.tsx- 增强 metadata 配置
使用说明
- 图片优化:所有图片现在自动通过 Next.js Image Optimization API 优化
- 性能监控:建议使用 Lighthouse 或 Next.js Analytics 监控性能提升
- 环境变量:如需配置
NEXT_PUBLIC_SITE_URL环境变量用于 metadataBase
变更原因:用户反馈网站加载速度慢,尤其是图片加载。通过充分利用 Next.js 的图片优化、代码分割和性能特性,显著提升网站加载速度和用户体验。
2025-01-XX - HTTPS 部署配置:为 CentOS 部署创建 docker-compose-https.yml
修改内容
-
创建 docker-compose-https.yml:
- 配置 marketing-site 服务,使用独立网络不直接暴露端口
- 配置 nginx 反向代理服务,监听 80 和 443 端口
- 挂载外部 SSL 证书路径:
/home/owen/ssl_key/smartsensiguard.cn.pem和/home/owen/ssl_key/smartsensiguard.cn.key - 配置容器名称:
marketing-site-https和nginx-https避免冲突 - 使用 Docker 网络
marketing-network实现服务间通信 - 添加 nginx 日志卷持久化
-
创建 nginx/nginx.conf:
- 配置 HTTP 服务器(端口 80),自动重定向所有请求到 HTTPS
- 配置 HTTPS 服务器(端口 443),使用 TLSv1.2 和 TLSv1.3
- 配置域名:
smartsensiguard.cn和www.smartsensiguard.cn - 配置 SSL 安全设置(加密套件、会话缓存、安全头等)
- 配置反向代理到 marketing-site 服务的 3000 端口
- 配置静态文件缓存优化
- 添加安全响应头(HSTS、X-Frame-Options、X-Content-Type-Options 等)
修改的文件
site/docker-compose-https.yml- HTTPS 部署配置文件(新建)site/nginx/nginx.conf- Nginx 反向代理和 SSL 配置(新建)
使用说明
-
部署前准备:
- 确保 SSL 证书文件存在于
/home/owen/ssl_key/目录 - 如果本地 nginx 正在运行,需要先停止本地 nginx 服务(或修改 docker-compose-https.yml 中的端口映射为 8080:80 和 8443:443)
- 确保 SSL 证书文件存在于
-
启动服务:
cd site docker-compose -f docker-compose-https.yml up -d -
访问服务:
- HTTP: http://smartsensiguard.cn(自动重定向到 HTTPS)
- HTTPS: https://smartsensiguard.cn
变更原因:用户需要在 CentOS 服务器上部署 HTTPS 版本,SSL 证书位于外部路径 /home/owen/ssl_key/,需要避免与本地已安装的 nginx 冲突。
2025-11-21 - HTTPS 部署配置:创建 Docker Compose HTTPS 部署结构
修改内容
-
创建目录结构:
- 创建
nginx/目录用于存放 Nginx 配置文件 - 创建
ssl/目录用于存放 SSL 证书文件 - 在
ssl/目录添加.gitignore防止证书文件被提交到版本控制
- 创建
-
Nginx 配置:
- 新增
nginx/nginx.conf- Nginx 反向代理配置文件- 配置 HTTP 到 HTTPS 自动重定向
- 配置 SSL/TLS 安全设置(TLSv1.2, TLSv1.3)
- 配置安全响应头(HSTS, X-Frame-Options 等)
- 配置反向代理到 marketing-site 服务
- 配置静态文件缓存优化
- 新增
-
Docker Compose 配置:
- 保留原有 HTTP 配置:
docker-compose.yml恢复为原始 HTTP 配置- marketing-site 服务直接映射端口 3000:3000
- 适用于开发环境或不需要 HTTPS 的场景
- 新增 HTTPS 配置:
docker-compose.https.yml- 独立的 HTTPS 配置文件- marketing-site 服务改为仅暴露内部端口(不直接映射到主机)
- 新增 nginx 服务,监听 80 和 443 端口
- 配置 SSL 证书挂载(
./ssl:/etc/nginx/ssl:ro) - 配置 Nginx 配置文件挂载
- 添加 Docker 网络配置,服务间通过内部网络通信
- 容器名称改为
marketing-site-https避免与 HTTP 模式冲突
- 保留原有 HTTP 配置:
-
文档和说明:
- 新增
ssl/README.md- SSL 证书获取和配置说明- 说明如何获取 Let's Encrypt 证书
- 说明如何生成自签名证书(测试用)
- 说明如何配置商业证书
- 新增
HTTPS_DEPLOY.md- HTTPS 部署完整指南- 目录结构说明
- HTTP 和 HTTPS 模式对比
- 快速开始步骤(使用
-f docker-compose.https.yml参数) - 服务说明
- 常用命令(区分 HTTP 和 HTTPS 模式)
- 配置说明
- 故障排查
- 新增
修改的文件
site/docker-compose.yml- 恢复为原始 HTTP 配置(直接访问 3000 端口)site/docker-compose.https.yml- 新增 HTTPS 配置文件(通过 Nginx 反向代理)(新建)site/nginx/nginx.conf- Nginx 反向代理和 SSL 配置(新建)site/ssl/README.md- SSL 证书配置说明(新建)site/ssl/.gitignore- 防止证书文件被提交(新建)site/HTTPS_DEPLOY.md- HTTPS 部署指南(新建,已更新说明两种模式)
变更原因:用户需要在 site 目录创建文件目录结构,采用 docker compose 进行 HTTPS 部署。同时保留原有的 HTTP 配置,创建独立的 HTTPS 配置文件。
2025-01-XX - 首页轮播优化:添加 Home_1.jpg 并优化文字内容
修改内容
-
首页轮播更新:
- 将
Home_1.jpg设置为轮播第一项 - 第一个轮播项采用左右布局:左边显示文字,右边显示图片
- 文字内容来自
盒子.md,经过优化后显示在轮播左侧 - 左右两边使用相同的背景样式:
bg-gradient-to-br from-[#f0f9ff] to-[#e4f2ff](与产品图片背景一致) - 文字颜色改为深色(
text-[#0f1f39]),以便在浅色背景上清晰可读 - 文字格式优化:
- 添加标题("户外智能无线多功能风险监测系统")
- 将文字内容分为两段,提高可读性
- 使用蓝色高亮关键词(核心特征、应用场景、24小时实时监测等)
- 优化段落间距和字体大小,使层次更清晰
- 图片应用与产品卡片相同的混合模式和滤镜效果,确保显示效果一致
- 移动端采用上下布局(文字在上,图片在下),桌面端采用左右布局
- 将
-
盒子.md 格式和文字优化:
- 添加 Markdown 标题和章节结构
- 优化文字表达,使其更清晰、专业
- 将内容分为:系统概述、应用场景、核心功能三个部分
- 核心功能部分采用列表格式,更易阅读
修改的文件
site/components/HomeHeroCarousel.tsx- 更新轮播数据,添加 Home_1.jpg 作为第一项,实现左右布局(左边文字,右边图片),图片背景样式与产品图片保持一致site/盒子.md- 优化格式和文字表达,添加标题和章节结构
变更原因:用户要求在首页第一行轮播中第一个显示 Home_1.jpg 并配合盒子.md 里面的文字。同时优化盒子.md 的格式和文字,使其更专业、易读。后续要求改为左右布局(左边文字,右边图片),图片背景需要跟产品图片背景一样。
2025-01-XX - 产品卡片布局重构:改为上下两行布局
修改内容
-
布局改为上下两行:
- 第一行:图片区域,占据卡片上半部分
- 使用
aspect-[16/9]固定宽高比(从aspect-[4/3]优化为更扁平的比例) - 添加渐变背景
bg-gradient-to-br from-[#f0f9ff] to-[#e4f2ff]使图片更突出 - 图片使用
object-contain保持完整显示,居中展示 - 图片最大宽度
max-w-[400px],确保大图也能完整显示 - 内边距优化:
p-4 md:p-6(从p-6 md:p-8减少) - 修复白色背景图片问题:使用
mix-blend-mode: multiply混合模式,让带白色背景的图片能够融入渐变背景,同时添加轻微的对比度和亮度调整
- 使用
- 第二行:文字内容区域,占据卡片下半部分
- 保持紧凑的内边距
p-4 md:p-5 - 所有文字元素间距已优化
- 保持紧凑的内边距
- 第一行:图片区域,占据卡片上半部分
-
移除横向布局:
- 移除
md:flex-row,始终保持flex-col纵向布局 - 移除图片和文字的横向排列,改为上下排列
- 移除
修改的文件
site/components/ProductCard.tsx- 产品卡片组件改为上下两行布局,优化图片高度比例,修复白色背景图片显示问题
变更原因:用户反馈横向布局效果不佳,改为上下两行布局(图片在上,文字在下),使图片更大更突出,布局更清晰。后续优化图片高度,从 aspect-[4/3] 改为 aspect-[16/9] 使图片区域更扁平。修复部分产品图片(如雷达流量计)带有白色背景导致显示不协调的问题,使用混合模式让白色背景融入渐变背景。
2025-01-XX - 边坡位移雷达图片复用 main_2
修改内容
- 将边坡位移雷达的图片路径从
/img/图片8.png改为/img/main_2.png(复用自动气象监测仪的图片)
修改的文件
site/data/products.json- 中文产品数据文件(第121行)site/data/en/products.json- 英文产品数据文件(第121行)
变更原因:复用 main_2.png 图片,统一使用现有的图片资源。
2025-01-XX - 产品图片路径更新
修改内容
- 将所有产品图片路径从
/img/图片X.png改为/img/main_X.png(X 为 1-8) - 更新了 8 个产品的图片路径:
- AI 视频联动监控终端:
/img/图片1.png→/img/main_1.png - 自动气象监测仪:
/img/图片2.png→/img/main_2.png - 北斗 GNSS 监测站:
/img/图片3.png→/img/main_3.png - 智能机器视觉位移仪:
/img/图片4.png→/img/main_4.png - 4G 型语音报警装置:
/img/图片5.png→/img/main_5.png - 多普勒流量流速仪:
/img/图片6.png→/img/main_6.png - 雷达流量计:
/img/图片7.png→/img/main_7.png - 边坡位移雷达:
/img/图片8.png→/img/main_8.png(注意:main_8.png文件不存在,已改回使用/img/图片8.png)
- AI 视频联动监控终端:
修改的文件
site/data/products.json- 中文产品数据文件site/data/en/products.json- 英文产品数据文件
变更原因:统一产品图片命名规范,使用 main_ 开头的图片文件名。
注意事项
- 第8个产品(边坡位移雷达)的图片路径暂时保持为
/img/图片8.png,因为main_8.png文件不存在 - 如需统一命名,请将
public/img/图片8.png重命名为main_8.png,然后更新数据文件中的路径
2025-01-XX - 移动端兼容性优化
优化内容
-
Hero 组件移动端适配
- 标题字体大小响应式:
text-2xl sm:text-3xl md:text-[40px] - 内边距响应式:
py-12 md:py-20 pb-6 md:pb-10 - 按钮尺寸和间距优化:
px-4 md:px-[18px] py-2 md:py-3 - Canvas 动画区域响应式尺寸:
h-64 sm:h-72 md:h-80 - 添加触摸反馈:
active:opacity-80
- 标题字体大小响应式:
-
PageHero 组件移动端适配
- 与 Hero 组件相同的响应式优化
-
MainNav 导航栏移动端优化
- Logo 和文字在小屏幕隐藏:
hidden sm:block - 导航菜单项字体大小响应式:
text-sm lg:text-base - 移动端菜单增加滚动:
max-h-[calc(100vh-80px)] overflow-y-auto - 内边距优化:
px-4 md:px-6 py-3 md:py-5
- Logo 和文字在小屏幕隐藏:
-
所有内容区块移动端适配
- 统一内边距:
px-4 md:px-6 - 统一间距:
py-10 md:py-14 - 标题字体大小:
text-lg md:text-xl - 标题下边距:
mb-4 md:mb-[18px]
- 统一内边距:
-
TechSection 网格优化
- 小屏幕单列,中等屏幕两列:
grid-cols-1 sm:grid-cols-2 lg:grid-cols-4
- 小屏幕单列,中等屏幕两列:
-
Footer 移动端优化
- 字体大小响应式:
text-xs sm:text-sm - 内边距和间距优化
- 字体大小响应式:
-
LangSwitch 按钮移动端优化
- 字体大小:
text-xs md:text-sm - 添加触摸优化:
touch-manipulation和active:opacity-80
- 字体大小:
-
全局样式优化
- 添加
-webkit-tap-highlight-color: transparent移除点击高亮 - 小屏幕基础字体大小:
font-size: 14px
- 添加
-
Layout 响应式 padding-top
- 移动端:
pt-16,桌面端:md:pt-24
- 移动端:
修改的文件
components/Hero.tsx- Hero 区域移动端响应式components/PageHero.tsx- 页面 Hero 区域移动端响应式components/MainNav.tsx- 导航栏移动端优化components/AboutSection.tsx- 关于区块移动端适配components/TechSection.tsx- 技术区块移动端适配components/SolutionsSection.tsx- 解决方案区块移动端适配components/CasesSection.tsx- 案例区块移动端适配components/NewsSection.tsx- 新闻区块移动端适配components/CareersSection.tsx- 招聘区块移动端适配components/PartnersSection.tsx- 合作伙伴区块移动端适配components/ContactSection.tsx- 联系区块移动端适配components/Footer.tsx- 页脚移动端优化components/LangSwitch.tsx- 语言切换按钮移动端优化app/globals.css- 全局移动端样式优化app/[locale]/layout.tsx- Layout padding-top 响应式
变更原因:确保网站在手机等移动设备上正常显示和交互,提升用户体验。
2025-01-XX - 导航菜单激活高亮效果
- 更新:
components/MainNav.tsx- 添加导航菜单项的激活高亮效果:- 使用
useState和useEffect监听当前路径变化 - 根据当前路径自动高亮对应的导航项
- 普通导航项激活时:文字变白色(
text-white)并加粗(font-medium) - "联系我们"按钮激活时:边框变为金色(
border-huilong-gold),背景添加金色半透明效果(bg-huilong-gold/10) - 移动端菜单也有相同的高亮效果,激活项有浅金色背景
- 使用
变更原因:导航菜单需要显示当前所在页面,提供清晰的视觉反馈。
2025-01-XX - 导航栏固定定位
- 更新:
components/MainNav.tsx- 将导航栏改为固定定位(fixed top-0 left-0 right-0 z-50),确保滚动时始终显示在顶部 - 更新:
app/[locale]/layout.tsx- 为<main>添加pt-24(顶部内边距),避免内容被固定的导航栏遮挡
变更原因:导航栏需要始终可见,无论页面如何滚动都不能被隐藏。
2025-01-XX - 为所有单独页面添加 Hero 区域
- 新增:
components/PageHero.tsx- 页面专用 Hero 组件(包含粒子动画,与首页 Hero 样式一致但无按钮) - 更新:所有数据文件添加
hero字段(中英双语):data/about.json和data/en/about.jsondata/tech.json和data/en/tech.jsondata/solutions.json和data/en/solutions.jsondata/cases.json和data/en/cases.jsondata/news.json和data/en/news.jsondata/careers.json和data/en/careers.jsondata/contact.json和data/en/contact.json
- 更新:
types.ts- 为所有数据类型接口添加可选的hero字段 - 更新:所有单独页面添加 PageHero 组件:
app/[locale]/about/page.tsxapp/[locale]/tech/page.tsxapp/[locale]/solutions/page.tsxapp/[locale]/cases/page.tsxapp/[locale]/news/page.tsxapp/[locale]/careers/page.tsxapp/[locale]/contact/page.tsx
变更原因:每个单独页面都需要存在 Hero 区域,提供统一的视觉体验和页面标识。
2025-01-XX - 导航改为单独页面
- 新增:单独页面路由(在
app/[locale]/下):tech/page.tsx- 技术与产品页面solutions/page.tsx- 解决方案页面cases/page.tsx- 典型案例页面news/page.tsx- 新闻页面careers/page.tsx- 加入我们页面contact/page.tsx- 联系我们页面
- 更新:
data/mainnav.json和data/en/mainnav.json- 将导航链接从锚点(#about, #tech 等)改为页面路径(/about, /tech 等) - 简化:
app/[locale]/page.tsx- 首页只保留 Hero 和 PartnersSection,其他内容移至单独页面
变更原因:导航应指向单独页面而非首页锚点,提升用户体验和 SEO。
2025-01-XX - Logo 国际化优化
- 更新:
components/MainNav.tsx- Logo 文字根据语言切换:- 中文(zh-CN)时显示 "汇龙"
- 英文(en)时显示 "HL"
2025-01-XX - 清理不再使用的旧文件和类型
- 删除:组件文件
components/BannerCarousel.tsx- 不再使用
- 删除:数据文件
data/banners.json和data/en/banners.json- getBanners 函数已删除
- 删除:类型定义
types.ts中的Banner接口 - 不再使用types.ts中的Promo接口 - 不再使用types.ts中的ServiceLink接口 - 不再使用
- 清理:
lib/data.ts- 移除
getBanners()函数 - 移除
Banner类型导入
- 移除
- 检查:空目录
app/channel/[slug]- 目录已为空或不存在app/product/[id]- 目录已为空或不存在
变更原因:重构后部分组件、数据和类型不再使用,需要清理以保持代码库整洁。
2025-01-XX - 清理不再使用的旧文件
- 删除:旧的页面路径(无 locale):
app/channel/[slug]/page.tsx- 已替换为app/[locale]/channel/[slug]/page.tsxapp/product/[id]/page.tsx- 已替换为app/[locale]/product/[id]/page.tsx
- 删除:不再使用的组件:
components/PromoGrid.tsx- 旧首页组件,重构后不再使用components/FloorSection.tsx- 旧首页组件,重构后不再使用components/ServiceLinks.tsx- 旧首页组件,重构后不再使用
- 删除:不再使用的数据文件:
data/promos.json和data/en/promos.jsondata/services.json和data/en/services.jsondata/nav.json
- 清理:
lib/data.ts- 移除不再使用的函数getPromos()和getServices(),移除相关类型导入(Promo, ServiceLink) - 修复:
app/[locale]/about/page.tsx- 修复对旧数据结构的引用,改为使用新的 AboutSection 组件
变更原因:重构后部分组件和数据文件不再使用,需要清理以保持代码库整洁。
2025-01-XX - 汇龙兴达网站重构(数据驱动)
- 重构:将所有硬编码的文本内容迁移到
data/目录下的 JSON 文件 - 新增:数据文件(中英双语):
data/hero.json和data/en/hero.json- Hero 区块数据data/about.json和data/en/about.json- 关于我们区块数据(已存在,更新结构)data/tech.json和data/en/tech.json- 核心技术区块数据data/solutions.json和data/en/solutions.json- 解决方案区块数据data/cases.json和data/en/cases.json- 典型案例区块数据data/partners.json和data/en/partners.json- 合作伙伴区块数据data/news.json和data/en/news.json- 新闻区块数据data/careers.json和data/en/careers.json- 招聘区块数据data/contact.json和data/en/contact.json- 联系区块数据
- 更新:
types.ts- 添加所有新数据类型的 TypeScript 接口定义(HeroData、AboutData、TechData等) - 更新:
lib/data.ts- 添加数据读取函数(getHero、getTech、getSolutions等),支持按 locale 读取对应语言数据 - 重构:所有组件改为从 props 接收数据,移除硬编码文本:
components/Hero.tsx- 从 props 接收 HeroDatacomponents/AboutSection.tsx- 从 props 接收 AboutDatacomponents/TechSection.tsx- 从 props 接收 TechDatacomponents/SolutionsSection.tsx- 从 props 接收 SolutionsDatacomponents/CasesSection.tsx- 从 props 接收 CasesDatacomponents/PartnersSection.tsx- 从 props 接收 PartnersDatacomponents/NewsSection.tsx- 从 props 接收 NewsDatacomponents/CareersSection.tsx- 从 props 接收 CareersDatacomponents/ContactSection.tsx- 从 props 接收 ContactData
- 更新:
app/[locale]/page.tsx- 从数据文件读取所有内容并传递给组件
变更原因:遵循项目架构规范,将数据与视图分离,所有内容数据统一存放在 data/ 目录,便于维护和更新。
2025-01-XX - 汇龙兴达网站重构
- 重构:将
huilong_website_package目录的内容和样式迁移到 Next.js 架构 - 更新:
tailwind.config.ts- 添加 huilong 主题颜色(bg、card、gold、muted、glass) - 更新:
app/globals.css- 整合 huilong 深色主题样式,设置背景色和字体 - 重构:
components/MainNav.tsx- 采用 huilong 导航样式(深色背景、金色主题、汇龙 logo) - 重构:
components/Footer.tsx- 采用 huilong 页脚样式(深色背景、版权信息) - 更新:
components/LangSwitch.tsx- 适配 huilong 样式,添加 basePath 和 locale 支持 - 新增:
components/Hero.tsx- Hero 区域组件,包含粒子动画 Canvas 和中英双语支持 - 新增:
components/AboutSection.tsx- 关于我们区块组件 - 新增:
components/TechSection.tsx- 核心技术矩阵区块组件 - 新增:
components/SolutionsSection.tsx- 行业解决方案区块组件 - 新增:
components/CasesSection.tsx- 典型案例区块组件 - 新增:
components/PartnersSection.tsx- 合作伙伴区块组件 - 新增:
components/NewsSection.tsx- 新闻与洞见区块组件 - 新增:
components/CareersSection.tsx- 加入我们区块组件 - 新增:
components/ContactSection.tsx- 联系我们区块组件(包含表单) - 重构:
app/[locale]/page.tsx- 整合所有 huilong 内容区块到首页 - 更新:
data/mainnav.json和data/en/mainnav.json- 更新导航项匹配 huilong 网站结构(关于我们、技术与产品、解决方案等) - 更新:
app/[locale]/layout.tsx- 更新 metadata,添加 huilong 相关的标题和描述,设置深色主题背景 - 更新:
app/layout.tsx- 更新根布局的 metadata - 修复:
components/Hero.tsx- 修复 TypeScript 类型错误(canvas 空值检查) - 修复:
components/MainNav.tsx- 正确处理锚点链接(#about 等),不添加 basePath
变更原因:将静态 HTML 网站重构为 Next.js 架构,保持原有的布局样式和内容,同时支持多语言和组件化开发。
Docker 发布配置
- 新增:
site/Dockerfile- 多阶段构建配置,基于 node:20-alpine,优化镜像体积 - 新增:
site/.dockerignore- Docker 构建忽略文件,排除不必要的文件 - 新增:
site/docker-compose.yml- Docker Compose 配置文件,便于本地和服务器部署 - 新增:
DOCKER.md- Docker 发布完整指南,包含构建、运行、发布到 Docker Hub 等步骤 - 更新:
site/next.config.mjs- 添加output: 'standalone'配置,支持独立输出模式,优化 Docker 部署 - 修复:
site/Dockerfile- 添加复制data目录到容器,修复运行时找不到 JSON 数据文件的错误(ENOENT: no such file or directory)
移动端导航修复
- 修复:
site/components/MainNav.tsx- 添加移动端汉堡菜单,解决手机端导航菜单不显示的问题- 将组件改为客户端组件("use client"),使用 useState 管理菜单状态
- 添加移动端菜单按钮(汉堡图标),点击展开/收起菜单
- 移动端菜单包含搜索框和所有导航项
- PC 端保持原有横向导航布局不变
功能更新
- About 轮播统一比例:
BannerCarousel支持aspectClass,在 About 页固定为aspect-[16/6],保证三张图一致大小(object-cover 填充)。 - 轮播增强:
BannerCarousel新增左右切换按钮(Prev/Next),悬浮可见;保持自动轮播与指示点。 - 导航新增:在
mainnav.json与data/en/mainnav.json首位添加“公司介绍/About”,链接/about。 - 新增页面:
app/[locale]/about/page.tsx,上方轮播(手机/家电/智能),下方“公司产品介绍”段落。 - 新增数据:
data/about.json与data/en/about.json。 - 修复:横幅链接指向不存在的
flagship,改为现有产品p1(中/英banners.json)。 - 本地化:产品详情页根据
locale切换文案(未找到/返回/首页/加入购物车)。 - 视觉优化:
ProductCard提升观感(白底圆角阴影、居中等比展示、标题/描述固定高度、悬浮上浮)。 - 布局优化:
ProductGrid增大断点间距与列数回落,频道页头部增加标题与返回入口。 - 修复:本地化引入后样式与布局错乱的根因(双层布局)。
- 根级
app/layout.tsx改为只渲染{children},不再包含 Header/Footer。 - 根首页
app/page.tsx改为重定向到/zh-CN,所有实际页面只使用app/[locale]/layout.tsx的单一布局。
- 根级
- 多语言:取消 Next 内置 i18n 配置,统一使用
app/[locale]/*路由前缀,避免与布局冲突。 - 链接前缀:为组件增加
basePath/locale支持,确保所有链接都指向带语言前缀的路径。- 更新
MainNav、BannerCarousel、PromoGrid、ProductCard、ProductGrid、FloorSection接口并在页面传入basePath。
- 更新
- 新增本地化路由:
app/[locale]/layout.tsx、app/[locale]/page.tsx、app/[locale]/channel/[slug]/page.tsx、app/[locale]/product/[id]/page.tsx。 - 数据按语言读取:
lib/data.ts增加 locale 感知,优先读取data/<locale>/*.json,否则回退data/*.json。 - 英文示例数据:
data/en/{mainnav,banners,promos,products,services}.json。 - 语言开关:新增
components/LangSwitch.tsx,在MainNav右侧切换中英文(在路径前添加/切换/en或/zh-CN)。 - 新增:频道页
app/channel/[slug]/page.tsx(从data/products.json匹配 floor,显示横幅与产品网格),避免手机/家电等频道 404。 - 新增:产品详情页
app/product/[id]/page.tsx(从数据集中查找产品,含面包屑与占位购买按钮),避免产品链接 404。 - 新增:
app/not-found.tsx全局 404 友好页。 - 新增:批量 SVG 占位图到
site/public/(hero/floors/products/promos/icons),并将data/*.json的图片扩展名改为.svg对应路径,确保本地即刻有图可用。 - 修复:
site/public/products/a2.svg的xmlns写法错误,改为http://www.w3.org/2000/svg,解决“净化器”图片不显示。
2025-11-11
-
修复:
getAboutMarkdown支持按data/<locale>/about.md→data/about.md→ 旧路径依次回退,避免部署后读取失败;关于我们页面与首页传入locale,新增site/data/about.md包含 Markdown 源。 -
内容迁移:将原位于仓库外层的
关于我们.md复制到site/data/about.md,确保构建打包时内容随项目发布。 -
修复:
site/components/SimpleCarousel.tsx新增hasIdentifier类型守卫,移除多余@ts-expect-error,确保构建通过。
2025-10-30
-
新增:项目任务清单(初始化 10 项),当前进行中:建立 data/ 与类型定义。
-
新增:
site/types.ts类型定义(NavItem/Banner/Promo/Product/Floor/ServiceLink)。 -
新增:
site/data/示例数据文件(nav.json、banners.json、products.json)。 -
新增:基础 UI 组件
site/components/TopBar.tsx、MainNav.tsx、Footer.tsx;组件以 props 驱动,后续由页面注入数据。 -
变更:取消 TopBar 登录/注册入口,仅保留帮助中心链接。
-
新增:数据读取工具
site/lib/data.ts(从data/*.json读取)。 -
新增:首页所需组件
BannerCarousel、PromoGrid、ProductCard、ProductGrid、FloorSection、ServiceLinks。 -
新增:
app/layout.tsx、app/page.tsx、app/globals.css,完成首页骨架接线(TopBar→MainNav→Hero→Promos→楼层→服务→Footer)。 -
新增与配置:Next.js + TypeScript + Tailwind 环境
- 更新
site/package.json:添加脚本(dev/build/start)与依赖(next/react/react-dom)及 devDependencies(typescript/@types/node/@types/react/tailwindcss/postcss/autoprefixer 等)。 - 新增
site/tsconfig.json:启用严格模式、ES2020、Bundler 解析、引入 Node/React 类型。 - 新增
site/next.config.ts、site/postcss.config.mjs、site/tailwind.config.ts,Tailwind 扫描app/components/。 - 将 Next.js 配置从
next.config.ts改为next.config.mjs(Next 14 不支持.ts配置)。 - 移除 TopBar:删除
site/components/TopBar.tsx与site/data/topbar.json,app/layout.tsx不再引用;site/lib/data.ts移除getTopbarNav。 - Windows 终端设 UTF-8(
chcp 65001+$OutputEncoding)后执行yarn install和依赖安装以避免中文乱码。 - 为避免 Tailwind v4 与现有配置不兼容,暂将 Tailwind 固定为 3.4.10,并将 React/Next 与类型依赖固定到兼容版本。
- 更新
变更原因:为实现基于 Next.js + Tailwind 的官网首页布局,先行搭建数据与类型骨架,保证后续内容可替换。
- 新增:
PLAN.md实施计划与步骤(目标/范围/架构/步骤/部署/替换指南/里程碑)。