feat: 完善订单班路由系统,支持全部12个订单班

详细说明:
- 更新routes.yaml配置,将所有订单班状态设为completed
- 重构app.js静态文件路由,使用循环简化代码
- 更新订单班图标映射,匹配实际目录名称
- 修复订单班路由跳转,支持以下订单班:
  * wenlu(文旅) - 会展策划
  * food(食品) - 轻食经营
  * finance(财经商贸) - 电商运营
  * health(大健康) - 智慧养老
  * chemical(化工) - 废水处理
  * environmental(环保) - 水质监测
  * transportation(交通物流) - 冷链物流
  * energy(能源) - 光伏发电
  * visual-design(视觉设计) - 宣传片策划
  * civil(土木) - 室内设计
  * developer(智能开发) - AI检测
  * manufacturing(智能制造) - 系统集成

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Yep_Q
2025-10-09 10:06:58 +08:00
parent 36199371d4
commit 4287a35826
11 changed files with 309 additions and 152 deletions

View File

@@ -24,21 +24,17 @@ app.use('/js', express.static('js'));
app.use('/data', express.static('data'));
app.use('/order-classes', express.static('order-classes'));
// 为每个订单班提供独立的静态文件服务
app.use('/order-class/wenlu/css', express.static('order-classes/wenlu/css'));
app.use('/order-class/wenlu/js', express.static('order-classes/wenlu/js'));
app.use('/order-class/wenlu/data', express.static('order-classes/wenlu/data'));
// 为所有订单班提供独立的静态文件服务
const orderClassDirs = ['wenlu', 'food', 'finance', 'health', 'chemical', 'environmental',
'transportation', 'energy', 'visual-design', 'civil', 'developer', 'manufacturing'];
// 由于HTML中使用相对路径还需要从父路径提供静态文件
app.use('/order-class/css', express.static('order-classes/wenlu/css'));
app.use('/order-class/js', express.static('order-classes/wenlu/js'));
app.use('/order-class/data', express.static('order-classes/wenlu/data'));
app.use('/order-class/food/css', express.static('order-classes/food/css'));
app.use('/order-class/food/js', express.static('order-classes/food/js'));
app.use('/order-class/food/data', express.static('order-classes/food/data'));
app.use('/order-class/food/images', express.static('order-classes/food/images'));
app.use('/order-class/food/agent-avatars', express.static('order-classes/food/agent-avatars'));
orderClassDirs.forEach(dir => {
app.use(`/order-class/${dir}/css`, express.static(`order-classes/${dir}/css`));
app.use(`/order-class/${dir}/js`, express.static(`order-classes/${dir}/js`));
app.use(`/order-class/${dir}/data`, express.static(`order-classes/${dir}/data`));
app.use(`/order-class/${dir}/images`, express.static(`order-classes/${dir}/images`));
app.use(`/order-class/${dir}/agent-avatars`, express.static(`order-classes/${dir}/agent-avatars`));
});
// 日志中间件
app.use((req, res, next) => {
@@ -259,16 +255,16 @@ function getClassIcon(key) {
const icons = {
'wenlu': '🚗',
'food': '🍽️',
'caijing': '💰',
'jiankang': '🏥',
'huagong': '⚗️',
'huanbao': '🌱',
'jiaotong': '🚚',
'nengyuan': '⚡',
'shijue': '🎨',
'tumu': '🏗️',
'zhineng-dev': '💻',
'zhineng-mfg': '🏭'
'finance': '💰',
'health': '🏥',
'chemical': '⚗️',
'environmental': '🌱',
'transportation': '🚚',
'energy': '⚡',
'visual-design': '🎨',
'civil': '🏗️',
'developer': '💻',
'manufacturing': '🏭'
};
return icons[key] || '📦';
}

View File

@@ -329,6 +329,15 @@ body.dark-theme .hero {
background-attachment: fixed;
}
.section:nth-child(7) {
background-image:
linear-gradient(to bottom, rgba(240, 249, 255, 0.9) 0%, rgba(224, 242, 254, 1) 100%),
url('https://images.unsplash.com/photo-1600210492486-724fe5c67fb0?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
}
/* 深色主题下的区块背景 */
body.dark-theme .section:nth-child(2) {
background-image:
@@ -375,6 +384,15 @@ body.dark-theme .section:nth-child(6) {
background-attachment: fixed;
}
body.dark-theme .section:nth-child(7) {
background-image:
linear-gradient(to bottom, rgba(120, 53, 15, 0.92) 0%, rgba(161, 98, 7, 0.88) 100%),
url('https://images.unsplash.com/photo-1600210492486-724fe5c67fb0?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
}
/* 深色主题下的特定元素调整 */
body.dark-theme .stat-item {
background: rgba(161, 98, 7, 0.8);

View File

@@ -661,7 +661,7 @@
</section>
<!-- Footer: 项目成果总结 -->
<section class="section" style="background: var(--bg-semi-dark); padding: var(--spacing-3xl) 0;">
<section class="section" style="padding: var(--spacing-3xl) 0;">
<div class="container">
<h2 class="section-title text-center" style="margin-bottom: var(--spacing-2xl);">
<i data-lucide="award"></i> 项目成果总结

View File

@@ -5,7 +5,7 @@ order_classes:
wenlu:
name: "文旅订单班"
title: "2024长三角国际新能源汽车与智能交通产业博览会"
path: "/order-classes/wenlu/"
path: "order-classes/wenlu"
entry: "index.html"
description: "会展策划完整方案"
status: "completed"
@@ -20,7 +20,7 @@ order_classes:
food:
name: "食品订单班"
title: "中高端个性化轻食店铺经营方案"
path: "/order-classes/food/"
path: "order-classes/food"
entry: "index.html"
description: "轻食创业全流程指导"
status: "completed"
@@ -33,95 +33,134 @@ order_classes:
- "餐饮团队人员管理专家"
- "财务预算专家"
caijing:
finance:
name: "财经商贸订单班"
title: "财经商贸综合解决方案"
path: "/order-classes/caijing/"
title: "化妆品电商运营综合方案"
path: "order-classes/finance"
entry: "index.html"
description: "财经商贸领域专业方案"
status: "pending"
agents: []
description: "电商运营全流程解决方案"
status: "completed"
agents:
- "电商运营专家"
- "市场分析师"
- "品牌策划专家"
- "供应链管理专家"
- "数据分析师"
- "客服管理专家"
jiankang:
health:
name: "大健康订单班"
title: "大健康产业发展方案"
path: "/order-classes/jiankang/"
title: "医养结合智慧养老服务方案"
path: "order-classes/health"
entry: "index.html"
description: "健康产业综合解决方案"
status: "pending"
agents: []
description: "智慧养老综合解决方案"
status: "completed"
agents:
- "养老服务专家"
- "医疗顾问"
- "智能设备专家"
- "运营管理专家"
huagong:
chemical:
name: "化工订单班"
title: "化工产业升级方案"
path: "/order-classes/huagong/"
title: "工业废水处理与资源化方案"
path: "order-classes/chemical"
entry: "index.html"
description: "化工领域专业解决方案"
status: "pending"
agents: []
description: "化工废水处理专业方案"
status: "completed"
agents:
- "环保工程师"
- "化工工艺专家"
- "设备选型专家"
- "运营管理专家"
huanbao:
environmental:
name: "环保订单班"
title: "环保产业创新方案"
path: "/order-classes/huanbao/"
title: "地表水环境质量监测方案"
path: "order-classes/environmental"
entry: "index.html"
description: "环保领域综合解决方案"
status: "pending"
agents: []
description: "水质监测专业解决方案"
status: "completed"
agents:
- "环境监测专家"
- "水质分析师"
- "数据管理专家"
jiaotong:
transportation:
name: "交通物流订单班"
title: "智慧物流解决方案"
path: "/order-classes/jiaotong/"
title: "区域冷链物流网络优化方案"
path: "order-classes/transportation"
entry: "index.html"
description: "交通物流智能化方案"
status: "pending"
agents: []
description: "冷链物流智能化方案"
status: "completed"
agents:
- "物流规划专家"
- "供应链优化专家"
- "运营管理专家"
nengyuan:
energy:
name: "能源订单班"
title: "新能源产业发展方案"
path: "/order-classes/nengyuan/"
title: "分布式光伏发电系统方案"
path: "order-classes/energy"
entry: "index.html"
description: "能源产业转型升级方案"
status: "pending"
agents: []
description: "光伏发电系统解决方案"
status: "completed"
agents:
- "光伏系统工程师"
- "电气设计师"
- "项目管理专家"
shijue:
visual-design:
name: "视觉设计订单班"
title: "视觉设计创新方案"
path: "/order-classes/shijue/"
title: "同里古镇宣传片策划方案"
path: "order-classes/visual-design"
entry: "index.html"
description: "视觉设计专业解决方案"
status: "pending"
agents: []
description: "视频宣传策划专业方案"
status: "completed"
agents:
- "导演/策划"
- "摄影指导"
- "后期制作专家"
tumu:
civil:
name: "土木订单班"
title: "土木工程智能化方案"
path: "/order-classes/tumu/"
title: "室内CAD整体方案设计"
path: "order-classes/civil"
entry: "index.html"
description: "土木工程领域解决方案"
status: "pending"
agents: []
description: "室内设计专业解决方案"
status: "completed"
agents:
- "需求分析师"
- "平面设计师"
- "效果图设计师"
- "施工图设计师"
- "预算工程师"
- "项目经理"
zhineng-dev:
developer:
name: "智能开发订单班"
title: "智能软件开发方案"
path: "/order-classes/zhineng-dev/"
title: "半导体AI综合检测项目"
path: "order-classes/developer"
entry: "index.html"
description: "AI驱动的软件开发方案"
status: "pending"
agents: []
description: "AI检测系统开发方案"
status: "completed"
agents:
- "AI算法工程师"
- "视觉系统工程师"
- "软件架构师"
- "测试工程师"
zhineng-mfg:
manufacturing:
name: "智能制造订单班"
title: "智能制造升级方案"
path: "/order-classes/zhineng-mfg/"
title: "智能制造系统集成方案"
path: "order-classes/manufacturing"
entry: "index.html"
description: "制造业智能化转型方案"
status: "pending"
agents: []
description: "制造业智能化升级方案"
status: "completed"
agents:
- "自动化工程师"
- "系统集成专家"
- "工艺优化专家"
# 服务器配置
server:
@@ -133,4 +172,4 @@ server:
default:
order_class: "wenlu" # 默认显示文旅订单班
404_page: "/404.html"
index_page: "/index.html"
index_page: "/index.html"

View File

@@ -24,3 +24,44 @@
[2025-10-03T11:20:28.064Z] GET /order-class/food/
[2025-10-03T11:20:29.177Z] GET /favicon.ico
[2025-10-03T11:20:31.728Z] GET /order-class/food/images/%E9%9D%92%E8%8E%B3%E5%87%8F%E8%84%82%E4%B8%93%E5%B1%9E%E5%A5%97%E9%A4%90(%E5%8F%AF%E6%8D%A2%E9%85%B1%E6%B1%81).jpg
[2025-10-07T05:56:45.978Z] GET /favicon.ico
[2025-10-07T05:56:59.096Z] GET /favicon.ico
[2025-10-07T05:57:38.765Z] GET /order-classes/
[2025-10-07T05:58:25.873Z] GET /
[2025-10-07T06:09:03.840Z] GET /order-class/wenlu
[2025-10-07T06:09:07.630Z] GET /order-class/food
[2025-10-07T06:09:07.649Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%B8%82%E5%9C%BA%E8%B0%83%E7%A0%94%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:07.651Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%93%81%E7%89%8C%E8%AE%BE%E8%AE%A1%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:07.973Z] GET /order-class/agent-avatars/%E9%A4%90%E5%8E%85%E9%80%89%E5%9D%80%E8%A3%85%E4%BF%AE%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:07.979Z] GET /order-class/agent-avatars/%E8%8F%9C%E5%93%81%E7%A0%94%E5%8F%91%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:07.983Z] GET /order-class/agent-avatars/%E8%BD%BB%E9%A3%9F%E5%BA%97%E7%BB%8F%E8%90%A5%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:07.994Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%9B%A2%E9%98%9F%E4%BA%BA%E5%91%98%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:07.995Z] GET /order-class/agent-avatars/%E8%B4%A2%E5%8A%A1%E9%A2%84%E7%AE%97%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:07.996Z] GET /order-class/agent-avatars/%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:08.070Z] GET /order-class/images/%E5%81%A5%E8%BA%AB%E5%AE%A3%E4%BC%A0%E4%BB%A3%E8%A8%80.jpg
[2025-10-07T06:09:08.072Z] GET /order-class/images/%E5%B8%82%E5%9C%BA%E5%AE%A3%E4%BC%A0%E8%90%A5%E9%94%80.jpg
[2025-10-07T06:09:08.074Z] GET /order-class/images/%E5%BA%97%E9%9D%A2%E5%9B%BE%E7%89%87_%E6%AD%A3%E9%97%A8.jpg
[2025-10-07T06:09:09.051Z] GET /order-class/food
[2025-10-07T06:09:09.068Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%B8%82%E5%9C%BA%E8%B0%83%E7%A0%94%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.071Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%93%81%E7%89%8C%E8%AE%BE%E8%AE%A1%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.375Z] GET /order-class/agent-avatars/%E9%A4%90%E5%8E%85%E9%80%89%E5%9D%80%E8%A3%85%E4%BF%AE%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.377Z] GET /order-class/agent-avatars/%E8%8F%9C%E5%93%81%E7%A0%94%E5%8F%91%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.384Z] GET /order-class/agent-avatars/%E8%BD%BB%E9%A3%9F%E5%BA%97%E7%BB%8F%E8%90%A5%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.387Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%9B%A2%E9%98%9F%E4%BA%BA%E5%91%98%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.388Z] GET /order-class/agent-avatars/%E8%B4%A2%E5%8A%A1%E9%A2%84%E7%AE%97%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.388Z] GET /order-class/agent-avatars/%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:09.434Z] GET /order-class/images/%E5%81%A5%E8%BA%AB%E5%AE%A3%E4%BC%A0%E4%BB%A3%E8%A8%80.jpg
[2025-10-07T06:09:09.436Z] GET /order-class/images/%E5%B8%82%E5%9C%BA%E5%AE%A3%E4%BC%A0%E8%90%A5%E9%94%80.jpg
[2025-10-07T06:09:09.437Z] GET /order-class/images/%E5%BA%97%E9%9D%A2%E5%9B%BE%E7%89%87_%E6%AD%A3%E9%97%A8.jpg
[2025-10-07T06:09:29.757Z] GET /order-class/food
[2025-10-07T06:09:29.773Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%B8%82%E5%9C%BA%E8%B0%83%E7%A0%94%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:29.774Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%93%81%E7%89%8C%E8%AE%BE%E8%AE%A1%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:30.082Z] GET /order-class/agent-avatars/%E9%A4%90%E5%8E%85%E9%80%89%E5%9D%80%E8%A3%85%E4%BF%AE%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:30.084Z] GET /order-class/agent-avatars/%E8%8F%9C%E5%93%81%E7%A0%94%E5%8F%91%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:30.086Z] GET /order-class/agent-avatars/%E8%BD%BB%E9%A3%9F%E5%BA%97%E7%BB%8F%E8%90%A5%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:30.089Z] GET /order-class/agent-avatars/%E9%A4%90%E9%A5%AE%E5%9B%A2%E9%98%9F%E4%BA%BA%E5%91%98%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:30.090Z] GET /order-class/agent-avatars/%E8%B4%A2%E5%8A%A1%E9%A2%84%E7%AE%97%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:30.092Z] GET /order-class/agent-avatars/%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86%E4%B8%93%E5%AE%B6.jpeg
[2025-10-07T06:09:30.146Z] GET /order-class/images/%E5%81%A5%E8%BA%AB%E5%AE%A3%E4%BC%A0%E4%BB%A3%E8%A8%80.jpg
[2025-10-07T06:09:30.147Z] GET /order-class/images/%E5%B8%82%E5%9C%BA%E5%AE%A3%E4%BC%A0%E8%90%A5%E9%94%80.jpg
[2025-10-07T06:09:30.148Z] GET /order-class/images/%E5%BA%97%E9%9D%A2%E5%9B%BE%E7%89%87_%E6%AD%A3%E9%97%A8.jpg

View File

@@ -1,36 +0,0 @@
#!/bin/bash
# 订单班AI生成方案展示系统 - 启动脚本
echo "=========================================="
echo " 订单班AI生成方案展示系统"
echo "=========================================="
echo ""
# 检查是否安装了依赖
if [ ! -d "node_modules" ]; then
echo "首次运行,正在安装依赖..."
npm install
echo ""
fi
# 启动服务器
echo "启动服务器..."
echo ""
echo "服务器地址: http://localhost:4155"
echo ""
echo "访问示例:"
echo " • 首页: http://localhost:4155/"
echo " • 文旅: http://localhost:4155/order-class/wenlu"
echo " • 食品: http://localhost:4155/order-class/food"
echo ""
echo "或使用URL参数:"
echo " • http://localhost:4155/?class=wenlu"
echo " • http://localhost:4155/?class=food"
echo ""
echo "按 Ctrl+C 停止服务器"
echo "=========================================="
echo ""
# 启动Node.js服务器
node app.js

View File

@@ -1,15 +1,17 @@
@echo off
chcp 65001 >nul 2>&1
REM Web Result 静态服务器启动脚本 (Node.js版)
REM 订单班AI生成方案展示系统 - Windows启动脚本
REM 端口: 4155
REM 支持局域网访问
setlocal enabledelayedexpansion
REM 显示启动横幅
echo ======================================
echo Web Result 静态服务器
echo ==========================================
echo 订单班AI生成方案展示系统
echo 端口: 4155
echo ======================================
echo 支持局域网访问
echo ==========================================
echo.
REM 获取脚本所在目录
@@ -32,6 +34,19 @@ echo [信息] Node.js 版本:
node --version
echo.
REM 检查是否安装了依赖
if not exist "node_modules" (
echo [信息] 首次运行,正在安装依赖...
call npm install
if errorlevel 1 (
echo [错误] 依赖安装失败
pause
exit /b 1
)
echo [成功] 依赖安装完成
echo.
)
REM 检查端口 4155 是否被占用
netstat -ano | findstr :4155 >nul 2>&1
if not errorlevel 1 (
@@ -39,7 +54,7 @@ if not errorlevel 1 (
echo [信息] 正在查看占用进程...
netstat -ano | findstr :4155
echo.
set /p "kill_process=是否终止占用进程?(y/N): "
if /I "!kill_process!"=="y" (
echo [信息] 正在终止占用进程...
@@ -57,11 +72,29 @@ if not errorlevel 1 (
REM 启动服务器
echo [信息] 正在启动服务器...
echo [信息] 访问地址: http://localhost:4155
echo.
echo ╔═══════════════════════════════════════════════╗
echo ║ 订单班AI生成方案展示系统 ║
echo ╠═══════════════════════════════════════════════╣
echo ║ 🏠 本地访问:
echo ║ http://localhost:4155
echo
echo ║ 📋 访问示例:
echo ║ • 首页: http://localhost:4155/
echo ║ • 文旅: http://localhost:4155/order-class/wenlu
echo ║ • 食品: http://localhost:4155/order-class/food
echo ║ • 财经: http://localhost:4155/order-class/finance
echo ║ • 土木: http://localhost:4155/order-class/civil
echo
echo ║ 🔗 或使用URL参数:
echo ║ http://localhost:4155/?class=wenlu
echo ║ http://localhost:4155/?class=food
echo ╚═══════════════════════════════════════════════╝
echo.
echo [提示] 按 Ctrl+C 停止服务器
echo.
REM 使用 Node.js 启动服务器
node server.js
REM 启动Node.js服务器
node app.js
pause
pause

View File

@@ -1,15 +1,15 @@
#!/bin/bash
# Web Result 静态服务器启动脚本 (Node.js版)
# 订单班AI生成方案展示系统 - 启动脚本
# 端口: 4155
# 支持局域网访问
# 颜色定义
GREEN=''
BLUE=''
YELLOW=''
RED=''
NC=''
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
# 获取脚本所在目录
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -23,11 +23,11 @@ get_lan_ip() {
fi
}
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE} Web Result 静态服务器${NC}"
echo -e "${BLUE}==========================================${NC}"
echo -e "${BLUE} 订单班AI生成方案展示系统${NC}"
echo -e "${BLUE} 端口: 4155${NC}"
echo -e "${BLUE} 支持局域网访问${NC}"
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}==========================================${NC}"
echo
# 切换到脚本所在目录
@@ -42,6 +42,19 @@ fi
echo -e "${GREEN}[信息] Node.js 版本: $(node --version)${NC}"
# 检查是否安装了依赖
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}[信息] 首次运行,正在安装依赖...${NC}"
npm install
if [ $? -eq 0 ]; then
echo -e "${GREEN}[成功] 依赖安装完成${NC}"
else
echo -e "${RED}[错误] 依赖安装失败${NC}"
exit 1
fi
echo
fi
# 获取局域网IP
LAN_IP=$(get_lan_ip)
if [ -z "$LAN_IP" ]; then
@@ -54,7 +67,7 @@ if lsof -Pi :4155 -sTCP:LISTEN -t >/dev/null 2>&1; then
echo -e "${YELLOW}[警告] 端口 4155 已被占用${NC}"
echo -e "${BLUE}[信息] 正在查看占用进程...${NC}"
lsof -i :4155
read -p "是否终止占用进程?(y/N): " kill_process
if [[ $kill_process =~ ^[Yy]$ ]]; then
echo -e "${BLUE}[信息] 正在终止占用进程...${NC}"
@@ -70,9 +83,9 @@ fi
# 启动服务器
echo -e "${GREEN}[信息] 正在启动服务器...${NC}"
echo
echo -e "${GREEN}╔════════════════════════════════════════╗${NC}"
echo -e "${GREEN}服务器访问信息 ${NC}"
echo -e "${GREEN}╠════════════════════════════════════════╣${NC}"
echo -e "${GREEN}╔═══════════════════════════════════════════════${NC}"
echo -e "${GREEN}订单班AI生成方案展示系统${NC}"
echo -e "${GREEN}╠═══════════════════════════════════════════════${NC}"
echo -e "${GREEN}${NC} 🏠 本地访问:"
echo -e "${GREEN}${NC} ${BLUE}http://localhost:4155${NC}"
echo -e "${GREEN}${NC}"
@@ -82,11 +95,22 @@ if [ "$LAN_IP" != "localhost" ]; then
echo -e "${GREEN}${NC}"
echo -e "${GREEN}${NC} 📱 移动设备访问:"
echo -e "${GREEN}${NC} ${BLUE}http://${LAN_IP}:4155${NC}"
echo -e "${GREEN}${NC}"
fi
echo -e "${GREEN}╚════════════════════════════════════════╝${NC}"
echo -e "${GREEN}${NC} 📋 访问示例:"
echo -e "${GREEN}${NC} • 首页: ${BLUE}http://localhost:4155/${NC}"
echo -e "${GREEN}${NC} • 文旅: ${BLUE}http://localhost:4155/order-class/wenlu${NC}"
echo -e "${GREEN}${NC} • 食品: ${BLUE}http://localhost:4155/order-class/food${NC}"
echo -e "${GREEN}${NC} • 财经: ${BLUE}http://localhost:4155/order-class/finance${NC}"
echo -e "${GREEN}${NC} • 土木: ${BLUE}http://localhost:4155/order-class/civil${NC}"
echo -e "${GREEN}${NC}"
echo -e "${GREEN}${NC} 🔗 或使用URL参数:"
echo -e "${GREEN}${NC} ${BLUE}http://localhost:4155/?class=wenlu${NC}"
echo -e "${GREEN}${NC} ${BLUE}http://localhost:4155/?class=food${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════╝${NC}"
echo
echo -e "${YELLOW}[提示] 按 Ctrl+C 停止服务器${NC}"
echo
# 使用 Node.js 启动服务器
node server.js
# 启动Node.js服务器
node app.js