#!/bin/bash # 專案管理工具 # 使用方法: ./drama project [命令] SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" PROJECTS_FILE="$PROJECT_DIR/PROJECTS.md" PROJECTS_DATA_DIR="$PROJECT_DIR/projects" # 顏色定義 GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' RED='\033[0;31m' NC='\033[0m' # 類型圖標和名稱函數 (Bash 3.2 兼容) get_type_icon() { case "$1" in "FE") echo "🎨" ;; "BE") echo "⚙️" ;; "AI") echo "🤖" ;; "MB") echo "📱" ;; "DOC") echo "📚" ;; "ENV") echo "🔧" ;; "TEST") echo "🧪" ;; *) echo "🔧" ;; esac } get_type_name() { case "$1" in "FE") echo "前端開發" ;; "BE") echo "後端開發" ;; "AI") echo "AI整合" ;; "MB") echo "移動端" ;; "DOC") echo "文檔更新" ;; "ENV") echo "環境配置" ;; "TEST") echo "測試驗證" ;; *) echo "環境配置" ;; esac } # 狀態圖標函數 get_status_icon() { case "$1" in "pending") echo "⏳" ;; "in-progress") echo "🔄" ;; "completed") echo "✅" ;; "blocked") echo "❌" ;; "paused") echo "⏸️" ;; *) echo "⏳" ;; esac } # 確保必要文件和目錄存在 init_project_structure() { if [[ ! -f "$PROJECTS_FILE" ]]; then echo -e "${RED}❌ PROJECTS.md 不存在${NC}" exit 1 fi if [[ ! -d "$PROJECTS_DATA_DIR" ]]; then mkdir -p "$PROJECTS_DATA_DIR" fi } # 顯示項目列表 show_project_list() { echo -e "${BLUE}📋 所有專案列表${NC}" echo "==================================" if [[ ! -f "$PROJECTS_FILE" ]]; then echo -e "${RED}❌ 專案文件不存在${NC}" return 1 fi # 從PROJECTS.md中提取項目信息 grep -E "^### " "$PROJECTS_FILE" | while read -r line; do # 提取項目名稱和狀態 project_name=$(echo "$line" | sed 's/^### [^ ]* \(.*\) (.*$/\1/') status_line=$(echo "$line" | grep -o '([^)]*)$' | tr -d '()') if [[ -n "$project_name" ]]; then echo -e " ${GREEN}📁 $project_name${NC} ($status_line)" fi done } # 顯示項目狀態 show_project_status() { local project_name="$1" echo -e "${BLUE}📊 專案執行狀態${NC}" echo "==================================" if [[ -n "$project_name" ]]; then echo -e "${PURPLE}專案: $project_name${NC}" # TODO: 顯示特定項目的詳細狀態 else # 顯示總體統計 echo -e "${GREEN}總體統計:${NC}" echo " 📱 進行中專案: 1 個" echo " ⏳ 待執行項目: 16 個" echo " 🔄 進行中項目: 0 個" echo " ✅ 已完成項目: 0 個" fi } # 初始化新項目 init_new_project() { local project_name="$1" if [[ -z "$project_name" ]]; then echo -e "${RED}❌ 請提供項目名稱${NC}" echo "使用方法: ./drama project init \"項目名稱\"" return 1 fi echo -e "${BLUE}🚀 初始化新專案: $project_name${NC}" # 創建項目數據文件 local project_file="$PROJECTS_DATA_DIR/${project_name}.md" if [[ -f "$project_file" ]]; then echo -e "${YELLOW}⚠️ 專案 '$project_name' 已存在${NC}" return 1 fi # 創建項目詳細文件 cat > "$project_file" << EOF # $project_name **創建日期**: $(date +"%Y-%m-%d") **狀態**: 🔄 進行中 ## 專案描述 請在此處添加專案的詳細描述... ## 執行階段 ### 階段1: 待定義 - ⏳ \`ENV\` 待添加執行項目... ## 專案統計 - **總階段數**: 1 - **執行項目數**: 1 - **完成進度**: 0% --- **最後更新**: $(date +"%Y-%m-%d") EOF echo -e "${GREEN}✅ 專案 '$project_name' 初始化完成${NC}" echo " 📁 專案文件: $project_file" echo " 💡 使用 ./dl phase add \"$project_name\" \"階段名稱\" 新增階段" } # 列出項目類型 show_project_types() { echo -e "${BLUE}🏷️ 專案類型定義${NC}" echo "==================================" local types="FE BE AI MB DOC ENV TEST" for type_code in $types; do local icon=$(get_type_icon "$type_code") local name=$(get_type_name "$type_code") echo -e " ${icon} ${PURPLE}$type_code${NC} - $name" done echo "" echo -e "${BLUE}使用範例:${NC}" echo " ./dl phase add \"專案名\" \"階段名\" FE \"前端任務描述\"" } # 顯示幫助 show_help() { echo -e "${BLUE}🚀 專案管理工具使用指南${NC}" echo "==================================" echo "" echo -e "${PURPLE}基本命令:${NC}" echo " init [項目名稱] - 初始化新專案" echo " list - 列出所有專案" echo " status [項目名稱] - 查看執行狀態" echo " types - 顯示專案類型定義" echo "" echo -e "${PURPLE}範例:${NC}" echo " ./dl project init \"我的新專案\"" echo " ./dl project list" echo " ./dl project status" echo "" echo -e "${BLUE}提示:${NC} 使用 ./dl phase 管理專案階段和執行項目" } # 主邏輯 init_project_structure case "$1" in "init") init_new_project "$2" ;; "list") show_project_list ;; "status") show_project_status "$2" ;; "types") show_project_types ;; "help"|"--help"|"-h"|"") show_help ;; *) echo -e "${RED}❌ 未知命令: $1${NC}" echo "" show_help exit 1 ;; esac