#!/bin/bash # 階段管理工具 # 使用方法: ./drama phase [命令] 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_status_icon() { case "$1" in "pending") echo "⏳" ;; "in-progress") echo "🔄" ;; "completed") echo "✅" ;; "blocked") echo "❌" ;; "paused") echo "⏸️" ;; *) echo "⏳" ;; esac } # 確保必要文件和目錄存在 init_phase_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 } # 列出所有階段 list_phases() { local project_name="$1" if [[ -z "$project_name" ]]; then echo -e "${BLUE}📋 所有專案的階段列表${NC}" echo "==================================" # 從PROJECTS.md中提取階段信息 grep -E "^#### 階段[0-9]+:" "$PROJECTS_FILE" | while read -r line; do phase_info=$(echo "$line" | sed 's/^#### //') echo -e " ${GREEN}📊 $phase_info${NC}" done else echo -e "${BLUE}📋 專案 '$project_name' 的階段列表${NC}" echo "==================================" local project_file="$PROJECTS_DATA_DIR/${project_name}.md" if [[ -f "$project_file" ]]; then grep -E "^### 階段[0-9]+:" "$project_file" | while read -r line; do phase_info=$(echo "$line" | sed 's/^### //') echo -e " ${GREEN}📊 $phase_info${NC}" done else echo -e "${RED}❌ 專案 '$project_name' 不存在${NC}" fi fi } # 新增階段 add_phase() { local project_name="$1" local phase_name="$2" if [[ -z "$project_name" || -z "$phase_name" ]]; then echo -e "${RED}❌ 請提供專案名稱和階段名稱${NC}" echo "使用方法: ./dl phase add \"專案名稱\" \"階段名稱\"" return 1 fi local project_file="$PROJECTS_DATA_DIR/${project_name}.md" if [[ ! -f "$project_file" ]]; then echo -e "${RED}❌ 專案 '$project_name' 不存在${NC}" echo "使用 ./dl project init \"$project_name\" 先建立專案" return 1 fi echo -e "${BLUE}➕ 為專案 '$project_name' 新增階段: $phase_name${NC}" # 計算新階段編號 local phase_count=$(grep -c "^### 階段[0-9]*:" "$project_file") local new_phase_num=$((phase_count + 1)) # 在項目文件中新增階段 cat >> "$project_file" << EOF ### 階段$new_phase_num: $phase_name ⏳ - ⏳ \`ENV\` 請使用 ./drama phase items 新增執行項目... EOF echo -e "${GREEN}✅ 階段 '$phase_name' 新增完成${NC}" echo " 💡 使用 ./dl phase items \"$project_name\" \"$phase_name\" 管理執行項目" } # 管理階段執行項目 manage_phase_items() { local project_name="$1" local phase_name="$2" local item_type="$3" local item_desc="$4" if [[ -z "$project_name" || -z "$phase_name" ]]; then echo -e "${RED}❌ 請提供專案名稱和階段名稱${NC}" echo "使用方法: ./dl phase items \"專案名稱\" \"階段名稱\" [類型] [描述]" return 1 fi local project_file="$PROJECTS_DATA_DIR/${project_name}.md" if [[ ! -f "$project_file" ]]; then echo -e "${RED}❌ 專案 '$project_name' 不存在${NC}" return 1 fi if [[ -n "$item_type" && -n "$item_desc" ]]; then # 新增執行項目 local type_icon=$(get_type_icon "$item_type") echo -e "${BLUE}➕ 新增執行項目到階段 '$phase_name'${NC}" echo " ${type_icon} [$item_type] $item_desc" # TODO: 實作新增項目到特定階段的邏輯 echo -e "${YELLOW}⚠️ 此功能開發中...${NC}" else # 顯示階段的執行項目 echo -e "${BLUE}📋 階段 '$phase_name' 的執行項目${NC}" echo "==================================" # 尋找並顯示階段的執行項目 local in_phase=false while IFS= read -r line; do if [[ "$line" =~ ^###.*$phase_name ]]; then in_phase=true continue elif [[ "$line" =~ ^###.*階段[0-9]+: ]] && [[ "$in_phase" == true ]]; then break elif [[ "$in_phase" == true && "$line" =~ ^-.*\`.*\` ]]; then echo " $line" fi done < "$project_file" fi } # 開始執行階段 start_phase() { local project_name="$1" local phase_name="$2" if [[ -z "$project_name" || -z "$phase_name" ]]; then echo -e "${RED}❌ 請提供專案名稱和階段名稱${NC}" echo "使用方法: ./dl phase start \"專案名稱\" \"階段名稱\"" return 1 fi echo -e "${GREEN}🚀 開始執行階段: $phase_name${NC}" echo -e "${BLUE}專案: $project_name${NC}" echo "" echo -e "${YELLOW}⚠️ 此功能開發中,將來會更新項目狀態...${NC}" } # 完成階段 complete_phase() { local project_name="$1" local phase_name="$2" if [[ -z "$project_name" || -z "$phase_name" ]]; then echo -e "${RED}❌ 請提供專案名稱和階段名稱${NC}" echo "使用方法: ./dl phase complete \"專案名稱\" \"階段名稱\"" return 1 fi echo -e "${GREEN}✅ 完成階段: $phase_name${NC}" echo -e "${BLUE}專案: $project_name${NC}" echo "" echo -e "${YELLOW}⚠️ 此功能開發中,將來會更新項目狀態和產生報告...${NC}" } # 顯示階段狀態 show_phase_status() { echo -e "${BLUE}📊 階段執行狀態總覽${NC}" echo "==================================" echo "" echo -e "${GREEN}當前進行中的階段:${NC}" echo " 🔄 環境配置 (Drama Ling 手機APP開發)" echo "" echo -e "${PURPLE}階段統計:${NC}" echo " 📊 總階段數: 4" echo " 🔄 進行中: 1" echo " ⏳ 待執行: 3" echo " ✅ 已完成: 0" } # 顯示幫助 show_help() { echo -e "${BLUE}🚀 階段管理工具使用指南${NC}" echo "==================================" echo "" echo -e "${PURPLE}階段管理命令:${NC}" echo " list [專案名] - 列出階段" echo " add \"專案\" \"階段名\" - 新增階段" echo " items \"專案\" \"階段\" [類型] [描述] - 管理執行項目" echo " start \"專案\" \"階段\" - 開始執行階段" echo " complete \"專案\" \"階段\" - 完成階段" echo " status - 查看階段狀態" echo "" echo -e "${PURPLE}範例:${NC}" echo " ./dl phase add \"我的專案\" \"開發階段\"" echo " ./dl phase items \"我的專案\" \"開發階段\" FE \"建立登入頁面\"" echo " ./dl phase start \"我的專案\" \"開發階段\"" echo "" echo -e "${BLUE}提示:${NC} 使用 ./dl project types 查看所有項目類型" } # 主邏輯 init_phase_structure case "$1" in "list") list_phases "$2" ;; "add") add_phase "$2" "$3" ;; "items") manage_phase_items "$2" "$3" "$4" "$5" ;; "start") start_phase "$2" "$3" ;; "complete") complete_phase "$2" "$3" ;; "status") show_phase_status ;; "help"|"--help"|"-h"|"") show_help ;; *) echo -e "${RED}❌ 未知命令: $1${NC}" echo "" show_help exit 1 ;; esac