dramaling-app/tools/project.sh

221 lines
5.6 KiB
Bash
Executable File

#!/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