feat: 完善项目功能和部署脚本
- 修复页面跳转白屏闪烁问题
- 集成过渡岗位页面(岗位装配中心)
- 添加iframe全屏嵌入(教务系统、就业规划)
- 优化企业资源卡片hover分裂效果
- 添加Windows和macOS快捷部署脚本
- 更新.gitignore忽略测试文件和缓存
🤖 Generated with Claude Code
This commit is contained in:
8
.gitignore
vendored
8
.gitignore
vendored
@@ -5,12 +5,20 @@
|
|||||||
.claude/
|
.claude/
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
|
.serena/
|
||||||
|
|
||||||
# Backup files
|
# Backup files
|
||||||
*.backup_*
|
*.backup_*
|
||||||
|
*.backup
|
||||||
|
|
||||||
# Node
|
# Node
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
|
# Test folders (可以根据需要调整)
|
||||||
|
测试/
|
||||||
|
测试2/
|
||||||
|
测试3/
|
||||||
|
测试4/
|
||||||
|
|
||||||
# Local server (optional, can be included if needed)
|
# Local server (optional, can be included if needed)
|
||||||
# server.js
|
# server.js
|
||||||
|
|||||||
@@ -81,7 +81,7 @@
|
|||||||
max-height: 320px;
|
max-height: 320px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
|
||||||
z-index: 1000;
|
z-index: 10000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 搜索结果项 */
|
/* 搜索结果项 */
|
||||||
|
|||||||
1146
index.html
1146
index.html
File diff suppressed because it is too large
Load Diff
56
js/main.js
56
js/main.js
@@ -8,21 +8,15 @@ import { ListInterface } from './ui/ListInterface.js';
|
|||||||
import { DetailInterface } from './ui/DetailInterface.js';
|
import { DetailInterface } from './ui/DetailInterface.js';
|
||||||
import { SearchController } from './ui/SearchController.js';
|
import { SearchController } from './ui/SearchController.js';
|
||||||
import { UIUtils } from './ui/UIUtils.js';
|
import { UIUtils } from './ui/UIUtils.js';
|
||||||
import { initWebsite, switchPage } from './website.js';
|
|
||||||
|
|
||||||
class App {
|
class App {
|
||||||
constructor() {
|
constructor() {
|
||||||
// 官网 DOM 引用
|
|
||||||
this.websiteContainer = document.getElementById('website-container');
|
|
||||||
this.appContainer = document.getElementById('app-container');
|
|
||||||
this.navbar = document.getElementById('navbar');
|
|
||||||
|
|
||||||
// 3D平台 DOM 引用
|
// 3D平台 DOM 引用
|
||||||
|
this.appContainer = document.getElementById('app-container');
|
||||||
this.canvasContainer = document.getElementById('canvas-container');
|
this.canvasContainer = document.getElementById('canvas-container');
|
||||||
this.mapInterface = document.getElementById('map-interface');
|
this.mapInterface = document.getElementById('map-interface');
|
||||||
this.listInterface = document.getElementById('list-interface');
|
this.listInterface = document.getElementById('list-interface');
|
||||||
this.detailInterface = document.getElementById('detail-interface');
|
this.detailInterface = document.getElementById('detail-interface');
|
||||||
this.mapLogoArea = document.getElementById('map-logo-area');
|
|
||||||
|
|
||||||
// UI 元素
|
// UI 元素
|
||||||
this.uiLayer = document.getElementById('ui-layer');
|
this.uiLayer = document.getElementById('ui-layer');
|
||||||
@@ -44,10 +38,7 @@ class App {
|
|||||||
|
|
||||||
// 初始化应用
|
// 初始化应用
|
||||||
async init() {
|
async init() {
|
||||||
// 1. 优先初始化官网(立即执行,等待CSV加载)
|
// 初始化 3D 平台的控制器(但不启动)
|
||||||
await initWebsite(() => this.switchToApp());
|
|
||||||
|
|
||||||
// 2. 初始化 3D 平台的控制器(但不启动场景)
|
|
||||||
this.mapController = new MapInterface(
|
this.mapController = new MapInterface(
|
||||||
this.mapInterface,
|
this.mapInterface,
|
||||||
(cityName) => this.showList(cityName)
|
(cityName) => this.showList(cityName)
|
||||||
@@ -100,28 +91,15 @@ class App {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 绑定全局函数和事件
|
// 绑定全局函数和事件
|
||||||
this.bindGlobalFunctions();
|
this.bindGlobalFunctions();
|
||||||
|
|
||||||
// 4. 默认显示官网首页
|
// 将应用实例暴露给全局,供页面切换使用
|
||||||
this.showWebsite();
|
window.appInstance = this;
|
||||||
}
|
|
||||||
|
|
||||||
// 显示官网(确保官网可见,3D隐藏)
|
|
||||||
showWebsite() {
|
|
||||||
this.websiteContainer.classList.remove('hidden');
|
|
||||||
this.appContainer.classList.add('hidden');
|
|
||||||
this.navbar.classList.remove('-translate-y-full');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换到 3D 内推平台
|
// 切换到 3D 内推平台
|
||||||
switchToApp() {
|
switchToApp() {
|
||||||
// 隐藏官网
|
|
||||||
this.websiteContainer.classList.add('hidden');
|
|
||||||
|
|
||||||
// 隐藏顶部导航栏(全屏体验)
|
|
||||||
this.navbar.classList.add('-translate-y-full');
|
|
||||||
|
|
||||||
// 显示 3D 容器
|
// 显示 3D 容器
|
||||||
this.appContainer.classList.remove('hidden');
|
this.appContainer.classList.remove('hidden');
|
||||||
|
|
||||||
@@ -165,21 +143,6 @@ class App {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 从 3D 平台返回官网
|
|
||||||
switchToWebsite(pageId = 'news') {
|
|
||||||
// 隐藏 3D 容器
|
|
||||||
this.appContainer.classList.add('hidden');
|
|
||||||
|
|
||||||
// 显示官网
|
|
||||||
this.websiteContainer.classList.remove('hidden');
|
|
||||||
|
|
||||||
// 显示导航栏
|
|
||||||
this.navbar.classList.remove('-translate-y-full');
|
|
||||||
|
|
||||||
// 切换到指定页面
|
|
||||||
switchPage(pageId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 转场完成回调(3D地球 → 2D地图)
|
// 转场完成回调(3D地球 → 2D地图)
|
||||||
onTransitionComplete() {
|
onTransitionComplete() {
|
||||||
this.switchTo2D();
|
this.switchTo2D();
|
||||||
@@ -255,10 +218,11 @@ class App {
|
|||||||
|
|
||||||
// 绑定全局函数和事件
|
// 绑定全局函数和事件
|
||||||
bindGlobalFunctions() {
|
bindGlobalFunctions() {
|
||||||
// 地图界面logo点击返回官网
|
// 地图界面logo点击返回首页
|
||||||
if (this.mapLogoArea) {
|
const mapLogoArea = document.getElementById('map-logo-area');
|
||||||
this.mapLogoArea.addEventListener('click', () => {
|
if (mapLogoArea) {
|
||||||
this.switchToWebsite('news');
|
mapLogoArea.addEventListener('click', () => {
|
||||||
|
window.backToHome();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -138,8 +138,11 @@ export class DetailInterface {
|
|||||||
// 填充业务板块
|
// 填充业务板块
|
||||||
this.renderSegments(company.segments);
|
this.renderSegments(company.segments);
|
||||||
|
|
||||||
// 显示界面
|
// 显示界面 - 先设置为不可见状态,避免闪烁
|
||||||
|
this.container.style.opacity = '0';
|
||||||
this.container.style.display = 'block';
|
this.container.style.display = 'block';
|
||||||
|
|
||||||
|
// 立即淡入
|
||||||
gsap.to(this.container, {
|
gsap.to(this.container, {
|
||||||
opacity: 1,
|
opacity: 1,
|
||||||
duration: CONFIG.animation.ui.fadeDuration
|
duration: CONFIG.animation.ui.fadeDuration
|
||||||
|
|||||||
@@ -51,8 +51,11 @@ export class ListInterface {
|
|||||||
this.cardsContainer.appendChild(card);
|
this.cardsContainer.appendChild(card);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 显示界面
|
// 显示界面 - 先设置为不可见状态,避免闪烁
|
||||||
|
this.container.style.opacity = '0';
|
||||||
this.container.style.display = 'block';
|
this.container.style.display = 'block';
|
||||||
|
|
||||||
|
// 立即淡入
|
||||||
gsap.to(this.container, {
|
gsap.to(this.container, {
|
||||||
opacity: 1,
|
opacity: 1,
|
||||||
duration: CONFIG.animation.ui.fadeDuration
|
duration: CONFIG.animation.ui.fadeDuration
|
||||||
|
|||||||
51
启动服务器.bat
Normal file
51
启动服务器.bat
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 65001 >nul
|
||||||
|
title 多多畅职大专生就业服务平台 - 局域网服务器
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ========================================
|
||||||
|
echo 多多畅职大专生就业服务平台
|
||||||
|
echo 局域网服务器启动脚本 (Windows)
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
:: 检查 Node.js 是否安装
|
||||||
|
where node >nul 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [错误] 未检测到 Node.js!
|
||||||
|
echo.
|
||||||
|
echo 请先安装 Node.js:
|
||||||
|
echo 下载地址: https://nodejs.org/
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 显示 Node.js 版本
|
||||||
|
echo [信息] 检测到 Node.js 版本:
|
||||||
|
node --version
|
||||||
|
echo.
|
||||||
|
|
||||||
|
:: 检查 server.js 是否存在
|
||||||
|
if not exist "server.js" (
|
||||||
|
echo [错误] 找不到 server.js 文件!
|
||||||
|
echo 请确保在项目根目录运行此脚本。
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 启动服务器
|
||||||
|
echo [启动] 正在启动局域网服务器...
|
||||||
|
echo.
|
||||||
|
echo ========================================
|
||||||
|
echo 提示: 按 Ctrl+C 可停止服务器
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
node server.js
|
||||||
|
|
||||||
|
:: 如果服务器意外退出
|
||||||
|
echo.
|
||||||
|
echo [提示] 服务器已停止运行
|
||||||
|
pause
|
||||||
72
启动服务器.sh
Executable file
72
启动服务器.sh
Executable file
@@ -0,0 +1,72 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 设置脚本在遇到错误时不退出(允许自定义错误处理)
|
||||||
|
# set -e
|
||||||
|
|
||||||
|
# 颜色定义
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 清屏
|
||||||
|
clear
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "${CYAN}========================================"
|
||||||
|
echo " 多多畅职大专生就业服务平台"
|
||||||
|
echo " 局域网服务器启动脚本 (macOS/Linux)"
|
||||||
|
echo "========================================${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 检查 Node.js 是否安装
|
||||||
|
if ! command -v node &> /dev/null; then
|
||||||
|
echo "${RED}[错误] 未检测到 Node.js!${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "请先安装 Node.js:"
|
||||||
|
echo "下载地址: ${BLUE}https://nodejs.org/${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "或使用 Homebrew 安装:"
|
||||||
|
echo "${YELLOW}brew install node${NC}"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 显示 Node.js 版本
|
||||||
|
echo "${GREEN}[信息] 检测到 Node.js 版本:${NC}"
|
||||||
|
node --version
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 检查 server.js 是否存在
|
||||||
|
if [ ! -f "server.js" ]; then
|
||||||
|
echo "${RED}[错误] 找不到 server.js 文件!${NC}"
|
||||||
|
echo "请确保在项目根目录运行此脚本。"
|
||||||
|
echo ""
|
||||||
|
echo "当前目录: ${YELLOW}$(pwd)${NC}"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 获取本机局域网IP
|
||||||
|
LOCAL_IP=$(ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1)
|
||||||
|
|
||||||
|
echo "${GREEN}[启动] 正在启动局域网服务器...${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "${CYAN}========================================"
|
||||||
|
echo "提示: 按 Ctrl+C 可停止服务器"
|
||||||
|
echo ""
|
||||||
|
echo "预计访问地址:"
|
||||||
|
echo "📍 本机: ${YELLOW}http://localhost:8080${NC}"
|
||||||
|
echo "📍 局域网: ${YELLOW}http://${LOCAL_IP}:8080${NC}"
|
||||||
|
echo "========================================${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 启动服务器
|
||||||
|
node server.js
|
||||||
|
|
||||||
|
# 如果服务器意外退出
|
||||||
|
echo ""
|
||||||
|
echo "${YELLOW}[提示] 服务器已停止运行${NC}"
|
||||||
|
echo ""
|
||||||
144
快捷部署说明.md
Normal file
144
快捷部署说明.md
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
# 🚀 快捷部署指南
|
||||||
|
|
||||||
|
本项目提供了 Windows 和 macOS 的一键启动脚本,方便快速部署到局域网。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 前置要求
|
||||||
|
|
||||||
|
### 必须安装 Node.js
|
||||||
|
|
||||||
|
- **macOS**:
|
||||||
|
- 官方下载: https://nodejs.org/
|
||||||
|
- Homebrew 安装: `brew install node`
|
||||||
|
|
||||||
|
- **Windows**:
|
||||||
|
- 官方下载: https://nodejs.org/
|
||||||
|
- 建议下载 LTS(长期支持)版本
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🍎 macOS / Linux 使用方法
|
||||||
|
|
||||||
|
### 方法一:双击运行(推荐)
|
||||||
|
1. 找到项目文件夹中的 `启动服务器.sh`
|
||||||
|
2. **双击**运行(系统会自动使用终端打开)
|
||||||
|
3. 如果提示权限问题,请使用方法二
|
||||||
|
|
||||||
|
### 方法二:命令行运行
|
||||||
|
```bash
|
||||||
|
# 1. 打开终端(Terminal)
|
||||||
|
# 2. 进入项目目录
|
||||||
|
cd /Users/apple/Documents/cursor/三合一页面
|
||||||
|
|
||||||
|
# 3. 运行脚本
|
||||||
|
./启动服务器.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 方法三:直接拖拽
|
||||||
|
1. 打开终端(Terminal)
|
||||||
|
2. 拖拽 `启动服务器.sh` 到终端窗口
|
||||||
|
3. 按回车
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🪟 Windows 使用方法
|
||||||
|
|
||||||
|
### 方法一:双击运行(推荐)
|
||||||
|
1. 找到项目文件夹中的 `启动服务器.bat`
|
||||||
|
2. **双击**运行
|
||||||
|
3. 会自动打开命令提示符窗口
|
||||||
|
|
||||||
|
### 方法二:右键管理员运行(可选)
|
||||||
|
1. 右键点击 `启动服务器.bat`
|
||||||
|
2. 选择「以管理员身份运行」
|
||||||
|
3. 点击「是」允许运行
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📱 如何访问
|
||||||
|
|
||||||
|
脚本启动后,会显示访问地址:
|
||||||
|
|
||||||
|
```
|
||||||
|
📍 本机访问: http://localhost:8080
|
||||||
|
📍 局域网访问: http://192.168.2.9:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
### 本机访问
|
||||||
|
- 在启动服务器的电脑上打开浏览器
|
||||||
|
- 输入: `http://localhost:8080`
|
||||||
|
|
||||||
|
### 手机/平板访问
|
||||||
|
1. 确保设备连接到**同一个 WiFi**
|
||||||
|
2. 打开浏览器
|
||||||
|
3. 输入局域网地址(如 `http://192.168.2.9:8080`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⏹️ 如何停止服务器
|
||||||
|
|
||||||
|
- **macOS / Linux**: 按 `Ctrl + C`
|
||||||
|
- **Windows**: 按 `Ctrl + C` 或直接关闭窗口
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❓ 常见问题
|
||||||
|
|
||||||
|
### 1. 提示「找不到 Node.js」
|
||||||
|
**原因**: 未安装 Node.js
|
||||||
|
**解决**: 访问 https://nodejs.org/ 下载安装
|
||||||
|
|
||||||
|
### 2. macOS 提示「权限被拒绝」
|
||||||
|
**解决方法**:
|
||||||
|
```bash
|
||||||
|
chmod +x 启动服务器.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 手机无法访问局域网地址
|
||||||
|
**检查清单**:
|
||||||
|
- ✅ 手机和电脑是否连接到同一个 WiFi
|
||||||
|
- ✅ 服务器是否正在运行
|
||||||
|
- ✅ 电脑防火墙是否阻止了 8080 端口
|
||||||
|
- ✅ IP 地址是否输入正确
|
||||||
|
|
||||||
|
**macOS 防火墙设置**:
|
||||||
|
1. 系统偏好设置 → 安全性与隐私 → 防火墙
|
||||||
|
2. 点击「防火墙选项」
|
||||||
|
3. 确保允许 Node.js 的网络连接
|
||||||
|
|
||||||
|
**Windows 防火墙设置**:
|
||||||
|
1. 控制面板 → Windows Defender 防火墙
|
||||||
|
2. 高级设置 → 入站规则
|
||||||
|
3. 新建规则,允许端口 8080
|
||||||
|
|
||||||
|
### 4. 端口 8080 被占用
|
||||||
|
**解决方法**: 修改 `server.js` 中的端口号
|
||||||
|
```javascript
|
||||||
|
const PORT = 8080; // 改成其他端口,如 3000
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 高级配置
|
||||||
|
|
||||||
|
如需修改端口或其他配置,请编辑 `server.js` 文件:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const PORT = 8080; // 修改端口号
|
||||||
|
```
|
||||||
|
|
||||||
|
修改后重新运行启动脚本即可。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 技术支持
|
||||||
|
|
||||||
|
如遇到其他问题,请检查:
|
||||||
|
1. Node.js 版本: `node --version` (建议 v14 以上)
|
||||||
|
2. 项目文件是否完整
|
||||||
|
3. 防火墙设置
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**祝使用愉快!** 🎉
|
||||||
Reference in New Issue
Block a user