Files
ALL-teach_sys/start-industry.sh
KQL cd2e307402 初始化12个产业教务系统项目
主要内容:
- 包含12个产业的完整教务系统前端代码
- 智能启动脚本 (start-industry.sh)
- 可视化产业导航页面 (index.html)
- 项目文档 (README.md)

优化内容:
- 删除所有node_modules和.yoyo文件夹,从7.5GB减少到2.7GB
- 添加.gitignore文件避免上传不必要的文件
- 自动依赖管理和智能启动系统

产业列表:
1. 文旅产业 (5150)
2. 智能制造 (5151)
3. 智能开发 (5152)
4. 财经商贸 (5153)
5. 视觉设计 (5154)
6. 交通物流 (5155)
7. 大健康 (5156)
8. 土木水利 (5157)
9. 食品产业 (5158)
10. 化工产业 (5159)
11. 能源产业 (5160)
12. 环保产业 (5161)

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 14:14:14 +08:00

310 lines
8.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ========================================
# 教务系统 - 智能产业启动脚本
# 功能:自动检测依赖、安装、启动服务
# ========================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 产业配置
declare -A industries=(
["1"]="frontend:文旅产业:5150"
["2"]="frontend_智能制造:智能制造:5151"
["3"]="frontend_智能开发:智能开发:5152"
["4"]="frontend_财经商贸:财经商贸:5153"
["5"]="frontend_视觉设计:视觉设计:5154"
["6"]="frontend_交通物流:交通物流:5155"
["7"]="frontend_大健康:大健康:5156"
["8"]="frontend_土木水利:土木水利:5157"
["9"]="frontend_食品:食品产业:5158"
["10"]="frontend_化工:化工产业:5159"
["11"]="frontend_能源:能源产业:5160"
["12"]="frontend_环保:环保产业:5161"
)
# 打印标题
print_header() {
clear
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} 教务系统 - 智能启动脚本 ${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
}
# 检查端口是否被占用
check_port() {
local port=$1
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
return 0 # 端口被占用
else
return 1 # 端口空闲
fi
}
# 停止指定端口的服务
stop_port() {
local port=$1
local pid=$(lsof -Pi :$port -sTCP:LISTEN -t 2>/dev/null)
if [ ! -z "$pid" ]; then
echo -e "${YELLOW}⚠️ 端口 $port 被占用,正在停止进程 $pid...${NC}"
kill $pid 2>/dev/null
sleep 1
echo -e "${GREEN}✅ 已停止端口 $port 的服务${NC}"
fi
}
# 检查并安装依赖
check_and_install_deps() {
local dir=$1
local name=$2
if [ ! -d "$dir/node_modules" ]; then
echo -e "${YELLOW}📦 检测到 $name 依赖未安装,正在安装...${NC}"
echo -e "${BLUE} 这可能需要1-3分钟请稍候...${NC}"
cd "$dir"
npm install > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "${GREEN}$name 依赖安装成功!${NC}"
cd - > /dev/null
return 0
else
echo -e "${RED}$name 依赖安装失败!${NC}"
cd - > /dev/null
return 1
fi
else
echo -e "${GREEN}$name 依赖已存在${NC}"
return 0
fi
}
# 启动单个产业
start_industry() {
local dir=$1
local name=$2
local port=$3
echo ""
echo -e "${BLUE}🚀 启动 $name (端口: $port)${NC}"
echo "----------------------------------------"
# 检查目录是否存在
if [ ! -d "$dir" ]; then
echo -e "${RED}❌ 目录 $dir 不存在!${NC}"
return 1
fi
# 检查端口
if check_port $port; then
echo -e "${YELLOW}⚠️ 端口 $port 已被占用${NC}"
read -p "是否停止现有服务并重启?(y/n): " choice
if [[ "$choice" == "y" || "$choice" == "Y" ]]; then
stop_port $port
else
echo -e "${YELLOW}跳过 $name${NC}"
return 1
fi
fi
# 检查并安装依赖
check_and_install_deps "$dir" "$name"
if [ $? -ne 0 ]; then
return 1
fi
# 启动服务
echo -e "${BLUE}🔄 正在启动 $name...${NC}"
cd "$dir"
npm run dev > /dev/null 2>&1 &
local pid=$!
cd - > /dev/null
# 等待服务启动
sleep 3
# 验证启动
if check_port $port; then
echo -e "${GREEN}$name 启动成功!${NC}"
echo -e "${GREEN} 访问地址: http://localhost:$port${NC}"
return 0
else
echo -e "${RED}$name 启动失败!${NC}"
return 1
fi
}
# 启动所有产业
start_all() {
echo -e "${BLUE}启动所有产业...${NC}"
echo ""
local success_count=0
local fail_count=0
for key in "${!industries[@]}"; do
IFS=':' read -r dir name port <<< "${industries[$key]}"
start_industry "$dir" "$name" "$port"
if [ $? -eq 0 ]; then
((success_count++))
else
((fail_count++))
fi
done
echo ""
echo "========================================"
echo -e "${GREEN}成功启动: $success_count 个产业${NC}"
if [ $fail_count -gt 0 ]; then
echo -e "${RED}启动失败: $fail_count 个产业${NC}"
fi
}
# 停止所有产业
stop_all() {
echo -e "${YELLOW}停止所有产业服务...${NC}"
for key in "${!industries[@]}"; do
IFS=':' read -r dir name port <<< "${industries[$key]}"
if check_port $port; then
stop_port $port
fi
done
echo -e "${GREEN}✅ 所有服务已停止${NC}"
}
# 显示菜单
show_menu() {
echo -e "${BLUE}请选择操作:${NC}"
echo ""
echo " 0) 启动所有产业"
echo " --------------"
for key in $(echo "${!industries[@]}" | tr ' ' '\n' | sort -n); do
IFS=':' read -r dir name port <<< "${industries[$key]}"
printf " %2s) %-12s (端口: %s)" "$key" "$name" "$port"
# 检查运行状态
if check_port $port; then
echo -e " ${GREEN}[运行中]${NC}"
else
echo -e " ${YELLOW}[未启动]${NC}"
fi
done
echo " --------------"
echo " a) 停止所有产业"
echo " s) 查看运行状态"
echo " q) 退出"
echo ""
}
# 显示运行状态
show_status() {
echo ""
echo -e "${BLUE}产业运行状态:${NC}"
echo "========================================"
local running_count=0
local stopped_count=0
for key in $(echo "${!industries[@]}" | tr ' ' '\n' | sort -n); do
IFS=':' read -r dir name port <<< "${industries[$key]}"
printf "%-15s (端口: %s): " "$name" "$port"
if check_port $port; then
echo -e "${GREEN}运行中${NC}"
echo -e " 访问地址: http://localhost:$port"
((running_count++))
else
echo -e "${YELLOW}未启动${NC}"
((stopped_count++))
fi
done
echo "========================================"
echo -e "${GREEN}运行中: $running_count${NC} | ${YELLOW}未启动: $stopped_count${NC}"
echo ""
}
# 主函数
main() {
# 检查是否有参数传入(快速启动模式)
if [ $# -gt 0 ]; then
case "$1" in
all)
print_header
start_all
;;
stop)
print_header
stop_all
;;
status)
print_header
show_status
;;
[0-9]|1[0-2])
print_header
if [ "$1" == "0" ]; then
start_all
else
IFS=':' read -r dir name port <<< "${industries[$1]}"
start_industry "$dir" "$name" "$port"
fi
;;
*)
echo -e "${RED}无效参数!${NC}"
echo "用法: $0 [all|stop|status|1-12]"
;;
esac
exit 0
fi
# 交互模式
while true; do
print_header
show_menu
read -p "请输入选项: " choice
case "$choice" in
0)
start_all
read -p "按回车键继续..."
;;
[1-9]|1[0-2])
IFS=':' read -r dir name port <<< "${industries[$choice]}"
start_industry "$dir" "$name" "$port"
read -p "按回车键继续..."
;;
a|A)
stop_all
read -p "按回车键继续..."
;;
s|S)
show_status
read -p "按回车键继续..."
;;
q|Q)
echo -e "${BLUE}再见!${NC}"
exit 0
;;
*)
echo -e "${RED}无效选项!${NC}"
sleep 1
;;
esac
done
}
# 启动主程序
main "$@"