feat: 添加E2E测试并优化Docker部署配置

- 新增Playwright E2E测试配置和测试脚本
- 优化Dockerfile和docker-compose.yml配置
- 新增novalon-nginx和novalon-website的docker-compose配置
- 优化contact页面和contact-section组件的代码结构
- 更新多个页面的SEO和元数据配置
- 添加备案图标资源
- 修复ESLint错误:转义引号、添加ESLint禁用注释、移除未使用变量

测试覆盖: 新增website-acceptance.spec.ts E2E测试
This commit is contained in:
张翔
2026-03-27 12:39:30 +08:00
parent 7a38eae6e0
commit df8043c0df
18 changed files with 468 additions and 84 deletions
+5 -13
View File
@@ -7,7 +7,7 @@ import { COMPANY_INFO, STATS } from '@/lib/constants';
import { Card, CardContent } from '@/components/ui/card';
import { PageHeader } from '@/components/ui/page-header';
import { FlipClock } from '@/components/ui/flip-clock';
import { Lightbulb, Users, Target, Award, MapPin, Mail, Phone } from 'lucide-react';
import { Lightbulb, Users, Target, Award, MapPin, Mail } from 'lucide-react';
export function AboutClient() {
const contentRef = useRef(null);
@@ -115,7 +115,7 @@ export function AboutClient() {
<div>
<h3 className="text-xl font-semibold text-[#1C1C1C] mb-3"></h3>
<p className="text-[#5C5C5C] mb-3 leading-relaxed">
"项目交付"
&ldquo;&rdquo;
</p>
<p className="text-[#5C5C5C] mb-3 leading-relaxed">
@@ -124,7 +124,7 @@ export function AboutClient() {
</p>
<p className="text-[#5C5C5C] mt-3 leading-relaxed">
"项目是否按时交付"
&ldquo;&rdquo;
</p>
</div>
</div>
@@ -145,7 +145,7 @@ export function AboutClient() {
</li>
<li className="flex items-start gap-3">
<span className="text-green-600 font-bold"></span>
<span className="text-[#5C5C5C]">"一锤子买卖"</span>
<span className="text-[#5C5C5C]">&ldquo;&rdquo;</span>
</li>
</ul>
<p className="text-[#5C5C5C] leading-relaxed font-medium">
@@ -257,15 +257,7 @@ export function AboutClient() {
<p className="text-sm font-medium text-[#1C1C1C]">{COMPANY_INFO.email}</p>
</div>
</div>
<div className="flex items-center gap-3">
<div className="p-2 bg-white rounded-lg">
<Phone className="w-5 h-5 text-[#C41E3A]" />
</div>
<div>
<p className="text-sm text-[#5C5C5C]"></p>
<p className="text-sm font-medium text-[#1C1C1C]">{COMPANY_INFO.phone}</p>
</div>
</div>
</div>
</motion.div>
</motion.div>