- Create comprehensive milestone documentation with sprint goals and timeline - Add 10 detailed GitHub Issues covering infrastructure, backend, frontend, and DevOps - Create automation scripts for milestone and issue creation - Include risk management, acceptance criteria, and project structure 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
860 lines
23 KiB
Bash
Executable File
860 lines
23 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Claude Enterprise Framework - Template Creation Script
|
|
# 模板创建脚本
|
|
|
|
set -e
|
|
|
|
# 脚本版本
|
|
VERSION="1.0.0"
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
PURPLE='\033[0;35m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 打印带颜色的消息
|
|
print_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
print_step() {
|
|
echo -e "${PURPLE}[STEP]${NC} $1"
|
|
}
|
|
|
|
# 显示帮助信息
|
|
show_help() {
|
|
cat << EOF
|
|
Claude Enterprise Framework - Template Creation Script v${VERSION}
|
|
|
|
Usage: $0 [OPTIONS]
|
|
|
|
Options:
|
|
-t, --type TEMPLATE_TYPE 模板类型 (必填)
|
|
-n, --name PROJECT_NAME 项目名称 (必填)
|
|
-p, --package PACKAGE_NAME 包名 (Java项目必填)
|
|
-b, --backend BACKEND_TEMPLATE 后端模板 (全栈项目必填)
|
|
-f, --frontend FRONTEND_TEMPLATE 前端模板 (全栈项目必填)
|
|
-s, --bigscreen BIGSCREEN_TEMPLATE 大屏模板 (可选)
|
|
-i, --industry INDUSTRY 行业领域 (默认: general)
|
|
-m, --modules MODULES 业务模块列表 (逗号分隔)
|
|
-d, --directory TARGET_DIR 目标目录 (默认: ./PROJECT_NAME)
|
|
--backend-url BACKEND_URL 后端API地址 (默认: http://localhost:8080)
|
|
--database-url DATABASE_URL 数据库连接地址
|
|
--redis-url REDIS_URL Redis连接地址
|
|
--force 强制覆盖已存在的目录
|
|
-v, --version 显示版本信息
|
|
-h, --help 显示帮助信息
|
|
|
|
Template Types:
|
|
backend-only 仅后端项目
|
|
frontend-only 仅前端项目
|
|
fullstack 全栈项目 (后端+前端)
|
|
bigscreen-only 仅大屏项目
|
|
complete-suite 完整套件 (后端+前端+大屏)
|
|
|
|
Backend Templates:
|
|
ruoyi-plus-claude RuoYi-Vue-Plus企业级后端
|
|
jeecg-boot-claude Jeecg-Boot低代码后端
|
|
sa-token-simple Sa-Token轻量级后端
|
|
spring-cloud-claude Spring Cloud微服务
|
|
|
|
Frontend Templates:
|
|
vben-admin-claude Vue-Vben-Admin管理后台
|
|
naive-admin-claude Naive Admin现代后台
|
|
arco-pro-claude Arco Design Pro企业后台
|
|
|
|
Bigscreen Templates:
|
|
datav-vue3-claude DataV Vue3大屏组件
|
|
echarts-bigscreen ECharts专业大屏
|
|
d2admin-bigscreen D2Admin综合大屏
|
|
|
|
Industries:
|
|
general 通用项目
|
|
healthcare 医疗健康
|
|
finance 金融服务
|
|
government 政府公共服务
|
|
education 教育培训
|
|
manufacturing 制造业
|
|
logistics 物流运输
|
|
energy 能源电力
|
|
retail 零售电商
|
|
real-estate 房地产
|
|
|
|
Examples:
|
|
|
|
# 创建企业级全栈项目
|
|
$0 --type fullstack \\
|
|
--name "hospital-management" \\
|
|
--backend ruoyi-plus-claude \\
|
|
--frontend vben-admin-claude \\
|
|
--package "com.hospital.management" \\
|
|
--industry healthcare \\
|
|
--modules "patient,doctor,appointment,medical-record"
|
|
|
|
# 创建微服务后端项目
|
|
$0 --type backend-only \\
|
|
--name "payment-service" \\
|
|
--backend spring-cloud-claude \\
|
|
--package "com.payment.service" \\
|
|
--industry finance
|
|
|
|
# 创建大屏可视化项目
|
|
$0 --type bigscreen-only \\
|
|
--name "iot-dashboard" \\
|
|
--bigscreen datav-vue3-claude \\
|
|
--industry manufacturing \\
|
|
--backend-url "http://api.iot.com"
|
|
|
|
# 创建完整项目套件
|
|
$0 --type complete-suite \\
|
|
--name "smart-city-platform" \\
|
|
--backend jeecg-boot-claude \\
|
|
--frontend arco-pro-claude \\
|
|
--bigscreen echarts-bigscreen \\
|
|
--package "com.smartcity.platform" \\
|
|
--industry government \\
|
|
--modules "citizen,service,monitoring,alert"
|
|
|
|
EOF
|
|
}
|
|
|
|
# 默认值
|
|
TEMPLATE_TYPE=""
|
|
PROJECT_NAME=""
|
|
PACKAGE_NAME=""
|
|
BACKEND_TEMPLATE=""
|
|
FRONTEND_TEMPLATE=""
|
|
BIGSCREEN_TEMPLATE=""
|
|
INDUSTRY="general"
|
|
MODULES=""
|
|
TARGET_DIR=""
|
|
BACKEND_URL="http://localhost:8080"
|
|
DATABASE_URL=""
|
|
REDIS_URL=""
|
|
FORCE_OVERWRITE=false
|
|
|
|
# 获取框架根目录
|
|
FRAMEWORK_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
# 解析命令行参数
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-t|--type)
|
|
TEMPLATE_TYPE="$2"
|
|
shift 2
|
|
;;
|
|
-n|--name)
|
|
PROJECT_NAME="$2"
|
|
shift 2
|
|
;;
|
|
-p|--package)
|
|
PACKAGE_NAME="$2"
|
|
shift 2
|
|
;;
|
|
-b|--backend)
|
|
BACKEND_TEMPLATE="$2"
|
|
shift 2
|
|
;;
|
|
-f|--frontend)
|
|
FRONTEND_TEMPLATE="$2"
|
|
shift 2
|
|
;;
|
|
-s|--bigscreen)
|
|
BIGSCREEN_TEMPLATE="$2"
|
|
shift 2
|
|
;;
|
|
-i|--industry)
|
|
INDUSTRY="$2"
|
|
shift 2
|
|
;;
|
|
-m|--modules)
|
|
MODULES="$2"
|
|
shift 2
|
|
;;
|
|
-d|--directory)
|
|
TARGET_DIR="$2"
|
|
shift 2
|
|
;;
|
|
--backend-url)
|
|
BACKEND_URL="$2"
|
|
shift 2
|
|
;;
|
|
--database-url)
|
|
DATABASE_URL="$2"
|
|
shift 2
|
|
;;
|
|
--redis-url)
|
|
REDIS_URL="$2"
|
|
shift 2
|
|
;;
|
|
--force)
|
|
FORCE_OVERWRITE=true
|
|
shift
|
|
;;
|
|
-v|--version)
|
|
echo "Claude Enterprise Framework Template Creation Script v${VERSION}"
|
|
exit 0
|
|
;;
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
print_error "未知参数: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# 验证必填参数
|
|
if [[ -z "$TEMPLATE_TYPE" ]]; then
|
|
print_error "模板类型不能为空,请使用 -t 或 --type 指定"
|
|
show_help
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$PROJECT_NAME" ]]; then
|
|
print_error "项目名称不能为空,请使用 -n 或 --name 指定"
|
|
show_help
|
|
exit 1
|
|
fi
|
|
|
|
# 验证模板类型
|
|
case "$TEMPLATE_TYPE" in
|
|
backend-only)
|
|
if [[ -z "$BACKEND_TEMPLATE" ]]; then
|
|
print_error "后端模板不能为空,请使用 -b 或 --backend 指定"
|
|
exit 1
|
|
fi
|
|
;;
|
|
frontend-only)
|
|
if [[ -z "$FRONTEND_TEMPLATE" ]]; then
|
|
print_error "前端模板不能为空,请使用 -f 或 --frontend 指定"
|
|
exit 1
|
|
fi
|
|
;;
|
|
fullstack)
|
|
if [[ -z "$BACKEND_TEMPLATE" || -z "$FRONTEND_TEMPLATE" ]]; then
|
|
print_error "全栈项目需要指定后端和前端模板"
|
|
exit 1
|
|
fi
|
|
;;
|
|
bigscreen-only)
|
|
if [[ -z "$BIGSCREEN_TEMPLATE" ]]; then
|
|
print_error "大屏模板不能为空,请使用 -s 或 --bigscreen 指定"
|
|
exit 1
|
|
fi
|
|
;;
|
|
complete-suite)
|
|
if [[ -z "$BACKEND_TEMPLATE" || -z "$FRONTEND_TEMPLATE" || -z "$BIGSCREEN_TEMPLATE" ]]; then
|
|
print_error "完整套件需要指定后端、前端和大屏模板"
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
print_error "不支持的模板类型: $TEMPLATE_TYPE"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# 设置默认值
|
|
if [[ -z "$TARGET_DIR" ]]; then
|
|
TARGET_DIR="./$PROJECT_NAME"
|
|
fi
|
|
|
|
if [[ -z "$PACKAGE_NAME" && ! -z "$BACKEND_TEMPLATE" ]]; then
|
|
# 将项目名转换为包名格式
|
|
PACKAGE_NAME="com.example.$(echo "$PROJECT_NAME" | tr '[:upper:]' '[:lower:]' | tr '-' '.')"
|
|
fi
|
|
|
|
# 验证目标目录
|
|
if [[ -d "$TARGET_DIR" ]]; then
|
|
if [[ "$FORCE_OVERWRITE" == false ]]; then
|
|
print_error "目标目录 '$TARGET_DIR' 已存在,使用 --force 参数强制覆盖"
|
|
exit 1
|
|
else
|
|
print_warning "正在删除已存在的目录 '$TARGET_DIR'"
|
|
rm -rf "$TARGET_DIR"
|
|
fi
|
|
fi
|
|
|
|
# 显示创建信息
|
|
print_step "开始创建项目模板..."
|
|
echo ""
|
|
print_info "项目配置信息:"
|
|
echo " 📁 项目名称: $PROJECT_NAME"
|
|
echo " 🏗️ 模板类型: $TEMPLATE_TYPE"
|
|
echo " 🔧 目标目录: $TARGET_DIR"
|
|
echo " 🏢 行业领域: $INDUSTRY"
|
|
|
|
if [[ ! -z "$BACKEND_TEMPLATE" ]]; then
|
|
echo " 🔙 后端模板: $BACKEND_TEMPLATE"
|
|
echo " 📦 包名: $PACKAGE_NAME"
|
|
fi
|
|
|
|
if [[ ! -z "$FRONTEND_TEMPLATE" ]]; then
|
|
echo " 🎨 前端模板: $FRONTEND_TEMPLATE"
|
|
echo " 🌐 后端地址: $BACKEND_URL"
|
|
fi
|
|
|
|
if [[ ! -z "$BIGSCREEN_TEMPLATE" ]]; then
|
|
echo " 📊 大屏模板: $BIGSCREEN_TEMPLATE"
|
|
fi
|
|
|
|
if [[ ! -z "$MODULES" ]]; then
|
|
echo " 📋 业务模块: $MODULES"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# 函数定义区域
|
|
|
|
# 模板变量替换函数
|
|
replace_template_variables() {
|
|
local target_path="$1"
|
|
|
|
print_info "替换模板变量..."
|
|
|
|
# 生成包路径 (com.example.demo -> com/example/demo)
|
|
local package_path="${PACKAGE_NAME//\./\/}"
|
|
local project_name_underscore=$(echo "$PROJECT_NAME" | tr '-' '_')
|
|
local project_name_short=$(echo "$PROJECT_NAME" | cut -c1-8)
|
|
|
|
# 查找所有需要替换的文件
|
|
find "$target_path" -type f \( -name "*.java" -o -name "*.ts" -o -name "*.vue" -o -name "*.yml" -o -name "*.yaml" -o -name "*.json" -o -name "*.xml" -o -name "*.html" \) | while read -r file; do
|
|
if [[ -f "$file" ]]; then
|
|
# 替换模板变量 (使用 | 作为分隔符避免URL中的/字符冲突)
|
|
sed -i.bak \
|
|
-e "s|{{PROJECT_NAME}}|$PROJECT_NAME|g" \
|
|
-e "s|{{PROJECT_NAME_UNDERSCORE}}|$project_name_underscore|g" \
|
|
-e "s|{{PROJECT_NAME_SHORT}}|$project_name_short|g" \
|
|
-e "s|{{PACKAGE_NAME}}|$PACKAGE_NAME|g" \
|
|
-e "s|{{PACKAGE_PATH}}|$package_path|g" \
|
|
-e "s|{{BACKEND_URL}}|$BACKEND_URL|g" \
|
|
-e "s|{{INDUSTRY}}|$INDUSTRY|g" \
|
|
"$file"
|
|
|
|
# 删除备份文件
|
|
rm -f "$file.bak"
|
|
fi
|
|
done
|
|
|
|
# 重命名包路径目录
|
|
if [[ -d "$target_path/src/main/java" ]]; then
|
|
local java_base="$target_path/src/main/java"
|
|
# 查找包含 {{PACKAGE_PATH}} 模板的目录
|
|
find "$java_base" -type d -name "*{{PACKAGE_PATH}}*" 2>/dev/null | while read -r template_dir; do
|
|
if [[ -d "$template_dir" ]]; then
|
|
# 创建正确的包路径目录
|
|
mkdir -p "$java_base/$package_path"
|
|
# 移动文件到正确的目录
|
|
if [[ -n "$(ls -A "$template_dir" 2>/dev/null)" ]]; then
|
|
cp -r "$template_dir"/* "$java_base/$package_path/" 2>/dev/null || true
|
|
fi
|
|
# 删除模板目录
|
|
rm -rf "$template_dir"
|
|
fi
|
|
done
|
|
|
|
# 清理可能存在的转义字符目录
|
|
find "$java_base" -type d -name "*\\*" -exec rm -rf {} + 2>/dev/null || true
|
|
fi
|
|
|
|
if [[ -d "$target_path/src/test/java" ]]; then
|
|
local test_base="$target_path/src/test/java"
|
|
find "$test_base" -type d -name "*{{PACKAGE_PATH}}*" 2>/dev/null | while read -r template_dir; do
|
|
if [[ -d "$template_dir" ]]; then
|
|
mkdir -p "$test_base/$package_path"
|
|
if [[ -n "$(ls -A "$template_dir" 2>/dev/null)" ]]; then
|
|
cp -r "$template_dir"/* "$test_base/$package_path/" 2>/dev/null || true
|
|
fi
|
|
rm -rf "$template_dir"
|
|
fi
|
|
done
|
|
|
|
find "$test_base" -type d -name "*\\*" -exec rm -rf {} + 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# 创建后端项目
|
|
create_backend_project() {
|
|
local target_path="${1:-$TARGET_DIR}"
|
|
|
|
print_info "创建后端项目: $BACKEND_TEMPLATE"
|
|
|
|
# 复制后端模板
|
|
local template_path="$FRAMEWORK_ROOT/project-templates/enterprise-backend/$BACKEND_TEMPLATE"
|
|
if [[ ! -d "$template_path" ]]; then
|
|
print_error "后端模板 '$BACKEND_TEMPLATE' 不存在"
|
|
exit 1
|
|
fi
|
|
|
|
cp -r "$template_path"/* "$target_path/"
|
|
|
|
# 复制Claude框架
|
|
mkdir -p "$target_path/claude-framework"
|
|
cp -r "$FRAMEWORK_ROOT/framework"/* "$target_path/claude-framework/"
|
|
|
|
# 替换模板变量
|
|
replace_template_variables "$target_path"
|
|
|
|
# 生成后端配置
|
|
generate_backend_config "$target_path"
|
|
}
|
|
|
|
# 创建前端项目
|
|
create_frontend_project() {
|
|
local target_path="${1:-$TARGET_DIR}"
|
|
|
|
print_info "创建前端项目: $FRONTEND_TEMPLATE"
|
|
|
|
# 复制前端模板
|
|
local template_path="$FRAMEWORK_ROOT/project-templates/admin-frontend/$FRONTEND_TEMPLATE"
|
|
if [[ ! -d "$template_path" ]]; then
|
|
print_error "前端模板 '$FRONTEND_TEMPLATE' 不存在"
|
|
exit 1
|
|
fi
|
|
|
|
cp -r "$template_path"/* "$target_path/"
|
|
|
|
# 复制Claude框架
|
|
mkdir -p "$target_path/claude-framework"
|
|
cp -r "$FRAMEWORK_ROOT/framework"/* "$target_path/claude-framework/"
|
|
|
|
# 替换模板变量
|
|
replace_template_variables "$target_path"
|
|
|
|
# 生成前端配置
|
|
generate_frontend_config "$target_path"
|
|
}
|
|
|
|
# 创建大屏项目
|
|
create_bigscreen_project() {
|
|
local target_path="${1:-$TARGET_DIR}"
|
|
|
|
print_info "创建大屏项目: $BIGSCREEN_TEMPLATE"
|
|
|
|
# 复制大屏模板
|
|
local template_path="$FRAMEWORK_ROOT/project-templates/bigscreen-datav/$BIGSCREEN_TEMPLATE"
|
|
if [[ ! -d "$template_path" ]]; then
|
|
print_error "大屏模板 '$BIGSCREEN_TEMPLATE' 不存在"
|
|
exit 1
|
|
fi
|
|
|
|
cp -r "$template_path"/* "$target_path/"
|
|
|
|
# 复制Claude框架
|
|
mkdir -p "$target_path/claude-framework"
|
|
cp -r "$FRAMEWORK_ROOT/framework"/* "$target_path/claude-framework/"
|
|
|
|
# 替换模板变量
|
|
replace_template_variables "$target_path"
|
|
|
|
# 生成大屏配置
|
|
generate_bigscreen_config "$target_path"
|
|
}
|
|
|
|
# 生成后端配置
|
|
generate_backend_config() {
|
|
local target_path="$1"
|
|
|
|
cat > "$target_path/claude-project.yml" << EOF
|
|
# Claude Enterprise Framework 项目配置 - 后端
|
|
version: "1.0"
|
|
|
|
project:
|
|
name: "$PROJECT_NAME"
|
|
type: "backend"
|
|
package: "$PACKAGE_NAME"
|
|
directory: "$target_path"
|
|
industry: "$INDUSTRY"
|
|
|
|
backend:
|
|
template: "$BACKEND_TEMPLATE"
|
|
framework: "Spring Boot"
|
|
language: "Java"
|
|
version: "21"
|
|
|
|
database:
|
|
type: "MySQL"
|
|
url: "${DATABASE_URL:-jdbc:mysql://localhost:3306/$PROJECT_NAME}"
|
|
|
|
cache:
|
|
type: "Redis"
|
|
url: "${REDIS_URL:-redis://localhost:6379}"
|
|
|
|
modules:$(if [[ ! -z "$MODULES" ]]; then
|
|
IFS=',' read -ra MODULE_ARRAY <<< "$MODULES"
|
|
for module in "\${MODULE_ARRAY[@]}"; do
|
|
echo " - name: \"$module\""
|
|
echo " enabled: true"
|
|
done
|
|
fi)
|
|
|
|
claude:
|
|
template_version: "1.0"
|
|
bluebook_version: "1.0"
|
|
prompt_templates: "claude-framework/prompt-templates"
|
|
|
|
created:
|
|
date: "$(date '+%Y-%m-%d %H:%M:%S')"
|
|
by: "Claude Enterprise Framework Template Creation Script v${VERSION}"
|
|
EOF
|
|
}
|
|
|
|
# 生成前端配置
|
|
generate_frontend_config() {
|
|
local target_path="$1"
|
|
|
|
cat > "$target_path/claude-project.yml" << EOF
|
|
# Claude Enterprise Framework 项目配置 - 前端
|
|
version: "1.0"
|
|
|
|
project:
|
|
name: "$PROJECT_NAME"
|
|
type: "frontend"
|
|
directory: "$target_path"
|
|
industry: "$INDUSTRY"
|
|
|
|
frontend:
|
|
template: "$FRONTEND_TEMPLATE"
|
|
framework: "Vue 3"
|
|
language: "TypeScript"
|
|
ui_library: "Ant Design Vue"
|
|
|
|
backend:
|
|
api_url: "$BACKEND_URL"
|
|
api_prefix: "/api"
|
|
|
|
modules:$(if [[ ! -z "$MODULES" ]]; then
|
|
IFS=',' read -ra MODULE_ARRAY <<< "$MODULES"
|
|
for module in "\${MODULE_ARRAY[@]}"; do
|
|
echo " - name: \"$module\""
|
|
echo " enabled: true"
|
|
done
|
|
fi)
|
|
|
|
claude:
|
|
template_version: "1.0"
|
|
bluebook_version: "1.0"
|
|
prompt_templates: "claude-framework/prompt-templates"
|
|
|
|
created:
|
|
date: "$(date '+%Y-%m-%d %H:%M:%S')"
|
|
by: "Claude Enterprise Framework Template Creation Script v${VERSION}"
|
|
EOF
|
|
}
|
|
|
|
# 生成大屏配置
|
|
generate_bigscreen_config() {
|
|
local target_path="$1"
|
|
|
|
cat > "$target_path/claude-project.yml" << EOF
|
|
# Claude Enterprise Framework 项目配置 - 大屏
|
|
version: "1.0"
|
|
|
|
project:
|
|
name: "$PROJECT_NAME"
|
|
type: "bigscreen"
|
|
directory: "$target_path"
|
|
industry: "$INDUSTRY"
|
|
|
|
bigscreen:
|
|
template: "$BIGSCREEN_TEMPLATE"
|
|
framework: "Vue 3"
|
|
chart_library: "ECharts"
|
|
|
|
backend:
|
|
api_url: "$BACKEND_URL"
|
|
api_prefix: "/api"
|
|
websocket_url: "${BACKEND_URL/http/ws}/ws"
|
|
|
|
modules:$(if [[ ! -z "$MODULES" ]]; then
|
|
IFS=',' read -ra MODULE_ARRAY <<< "$MODULES"
|
|
for module in "\${MODULE_ARRAY[@]}"; do
|
|
echo " - name: \"$module\""
|
|
echo " enabled: true"
|
|
done
|
|
fi)
|
|
|
|
claude:
|
|
template_version: "1.0"
|
|
bluebook_version: "1.0"
|
|
prompt_templates: "claude-framework/prompt-templates"
|
|
|
|
created:
|
|
date: "$(date '+%Y-%m-%d %H:%M:%S')"
|
|
by: "Claude Enterprise Framework Template Creation Script v${VERSION}"
|
|
EOF
|
|
}
|
|
|
|
# 创建全栈集成
|
|
create_fullstack_integration() {
|
|
print_info "创建全栈项目集成配置..."
|
|
|
|
# 创建根目录配置
|
|
cat > "$TARGET_DIR/claude-project.yml" << EOF
|
|
# Claude Enterprise Framework 项目配置 - 全栈
|
|
version: "1.0"
|
|
|
|
project:
|
|
name: "$PROJECT_NAME"
|
|
type: "fullstack"
|
|
directory: "$TARGET_DIR"
|
|
industry: "$INDUSTRY"
|
|
|
|
architecture:
|
|
backend:
|
|
path: "./backend"
|
|
template: "$BACKEND_TEMPLATE"
|
|
url: "$BACKEND_URL"
|
|
frontend:
|
|
path: "./frontend"
|
|
template: "$FRONTEND_TEMPLATE"
|
|
url: "http://localhost:3000"
|
|
|
|
modules:$(if [[ ! -z "$MODULES" ]]; then
|
|
IFS=',' read -ra MODULE_ARRAY <<< "$MODULES"
|
|
for module in "\${MODULE_ARRAY[@]}"; do
|
|
echo " - name: \"$module\""
|
|
echo " enabled: true"
|
|
done
|
|
fi)
|
|
|
|
claude:
|
|
template_version: "1.0"
|
|
bluebook_version: "1.0"
|
|
|
|
created:
|
|
date: "$(date '+%Y-%m-%d %H:%M:%S')"
|
|
by: "Claude Enterprise Framework Template Creation Script v${VERSION}"
|
|
EOF
|
|
|
|
# 创建启动脚本
|
|
cat > "$TARGET_DIR/start-dev.sh" << 'EOF'
|
|
#!/bin/bash
|
|
|
|
echo "🚀 启动全栈开发环境..."
|
|
|
|
# 启动后端服务
|
|
echo "📦 启动后端服务..."
|
|
cd backend && mvn spring-boot:run &
|
|
BACKEND_PID=$!
|
|
|
|
# 等待后端启动
|
|
sleep 10
|
|
|
|
# 启动前端服务
|
|
echo "🎨 启动前端服务..."
|
|
cd ../frontend && npm run dev &
|
|
FRONTEND_PID=$!
|
|
|
|
echo "✅ 开发环境启动完成!"
|
|
echo " 🔙 后端地址: http://localhost:8080"
|
|
echo " 🎨 前端地址: http://localhost:3000"
|
|
echo ""
|
|
echo "按 Ctrl+C 停止所有服务"
|
|
|
|
# 等待中断信号
|
|
trap "kill $BACKEND_PID $FRONTEND_PID" EXIT
|
|
wait
|
|
EOF
|
|
|
|
chmod +x "$TARGET_DIR/start-dev.sh"
|
|
}
|
|
|
|
# 创建完整套件集成
|
|
create_complete_integration() {
|
|
print_info "创建完整套件集成配置..."
|
|
|
|
# 创建根目录配置
|
|
cat > "$TARGET_DIR/claude-project.yml" << EOF
|
|
# Claude Enterprise Framework 项目配置 - 完整套件
|
|
version: "1.0"
|
|
|
|
project:
|
|
name: "$PROJECT_NAME"
|
|
type: "complete-suite"
|
|
directory: "$TARGET_DIR"
|
|
industry: "$INDUSTRY"
|
|
|
|
architecture:
|
|
backend:
|
|
path: "./backend"
|
|
template: "$BACKEND_TEMPLATE"
|
|
url: "$BACKEND_URL"
|
|
frontend:
|
|
path: "./frontend"
|
|
template: "$FRONTEND_TEMPLATE"
|
|
url: "http://localhost:3000"
|
|
bigscreen:
|
|
path: "./bigscreen"
|
|
template: "$BIGSCREEN_TEMPLATE"
|
|
url: "http://localhost:3001"
|
|
|
|
modules:$(if [[ ! -z "$MODULES" ]]; then
|
|
IFS=',' read -ra MODULE_ARRAY <<< "$MODULES"
|
|
for module in "\${MODULE_ARRAY[@]}"; do
|
|
echo " - name: \"$module\""
|
|
echo " enabled: true"
|
|
done
|
|
fi)
|
|
|
|
claude:
|
|
template_version: "1.0"
|
|
bluebook_version: "1.0"
|
|
|
|
created:
|
|
date: "$(date '+%Y-%m-%d %H:%M:%S')"
|
|
by: "Claude Enterprise Framework Template Creation Script v${VERSION}"
|
|
EOF
|
|
|
|
# 创建启动脚本
|
|
cat > "$TARGET_DIR/start-dev.sh" << 'EOF'
|
|
#!/bin/bash
|
|
|
|
echo "🚀 启动完整套件开发环境..."
|
|
|
|
# 启动后端服务
|
|
echo "📦 启动后端服务..."
|
|
cd backend && mvn spring-boot:run &
|
|
BACKEND_PID=$!
|
|
|
|
# 等待后端启动
|
|
sleep 10
|
|
|
|
# 启动前端服务
|
|
echo "🎨 启动前端管理后台..."
|
|
cd ../frontend && npm run dev &
|
|
FRONTEND_PID=$!
|
|
|
|
# 启动大屏服务
|
|
echo "📊 启动大屏可视化..."
|
|
cd ../bigscreen && npm run dev -- --port 3001 &
|
|
BIGSCREEN_PID=$!
|
|
|
|
echo "✅ 完整套件启动完成!"
|
|
echo " 🔙 后端服务: http://localhost:8080"
|
|
echo " 🎨 管理后台: http://localhost:3000"
|
|
echo " 📊 可视化大屏: http://localhost:3001"
|
|
echo ""
|
|
echo "按 Ctrl+C 停止所有服务"
|
|
|
|
# 等待中断信号
|
|
trap "kill $BACKEND_PID $FRONTEND_PID $BIGSCREEN_PID" EXIT
|
|
wait
|
|
EOF
|
|
|
|
chmod +x "$TARGET_DIR/start-dev.sh"
|
|
}
|
|
|
|
# 执行项目创建逻辑
|
|
print_step "创建项目目录结构..."
|
|
|
|
case "$TEMPLATE_TYPE" in
|
|
backend-only)
|
|
mkdir -p "$TARGET_DIR"
|
|
create_backend_project
|
|
;;
|
|
frontend-only)
|
|
mkdir -p "$TARGET_DIR"
|
|
create_frontend_project
|
|
;;
|
|
fullstack)
|
|
mkdir -p "$TARGET_DIR"/{backend,frontend}
|
|
create_backend_project "$TARGET_DIR/backend"
|
|
create_frontend_project "$TARGET_DIR/frontend"
|
|
create_fullstack_integration
|
|
;;
|
|
bigscreen-only)
|
|
mkdir -p "$TARGET_DIR"
|
|
create_bigscreen_project
|
|
;;
|
|
complete-suite)
|
|
mkdir -p "$TARGET_DIR"/{backend,frontend,bigscreen}
|
|
create_backend_project "$TARGET_DIR/backend"
|
|
create_frontend_project "$TARGET_DIR/frontend"
|
|
create_bigscreen_project "$TARGET_DIR/bigscreen"
|
|
create_complete_integration
|
|
;;
|
|
esac
|
|
|
|
# 初始化Git仓库
|
|
print_step "初始化Git仓库..."
|
|
cd "$TARGET_DIR"
|
|
git init
|
|
git add .
|
|
git commit -m "Initial commit - Generated by Claude Enterprise Framework v${VERSION}
|
|
|
|
Project: $PROJECT_NAME
|
|
Type: $TEMPLATE_TYPE
|
|
Industry: $INDUSTRY
|
|
|
|
Generated with:
|
|
$(if [[ ! -z "$BACKEND_TEMPLATE" ]]; then echo "- Backend: $BACKEND_TEMPLATE"; fi)
|
|
$(if [[ ! -z "$FRONTEND_TEMPLATE" ]]; then echo "- Frontend: $FRONTEND_TEMPLATE"; fi)
|
|
$(if [[ ! -z "$BIGSCREEN_TEMPLATE" ]]; then echo "- Bigscreen: $BIGSCREEN_TEMPLATE"; fi)
|
|
$(if [[ ! -z "$MODULES" ]]; then echo "- Modules: $MODULES"; fi)"
|
|
|
|
cd - > /dev/null
|
|
|
|
# 完成消息
|
|
print_success "项目模板创建完成!"
|
|
echo ""
|
|
print_info "项目信息:"
|
|
echo " 📁 项目目录: $TARGET_DIR"
|
|
echo " 🏷️ 项目名称: $PROJECT_NAME"
|
|
echo " 🏗️ 模板类型: $TEMPLATE_TYPE"
|
|
echo " 🏢 行业领域: $INDUSTRY"
|
|
|
|
if [[ ! -z "$BACKEND_TEMPLATE" ]]; then
|
|
echo " 🔙 后端模板: $BACKEND_TEMPLATE"
|
|
fi
|
|
|
|
if [[ ! -z "$FRONTEND_TEMPLATE" ]]; then
|
|
echo " 🎨 前端模板: $FRONTEND_TEMPLATE"
|
|
fi
|
|
|
|
if [[ ! -z "$BIGSCREEN_TEMPLATE" ]]; then
|
|
echo " 📊 大屏模板: $BIGSCREEN_TEMPLATE"
|
|
fi
|
|
|
|
echo ""
|
|
print_info "下一步操作:"
|
|
echo " 1. cd $TARGET_DIR"
|
|
echo " 2. 阅读 README.md 了解项目结构"
|
|
echo " 3. 查看 claude-project.yml 了解配置"
|
|
|
|
case "$TEMPLATE_TYPE" in
|
|
fullstack|complete-suite)
|
|
echo " 4. 运行 ./start-dev.sh 启动开发环境"
|
|
;;
|
|
backend-only)
|
|
echo " 4. 运行 mvn spring-boot:run 启动后端服务"
|
|
;;
|
|
frontend-only|bigscreen-only)
|
|
echo " 4. 运行 npm install && npm run dev 启动服务"
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
print_success "享受Claude驱动的高效开发体验!🚀" |