feat: implement soft delete, task editing fixes, and UI improvements

Backend:
- Add soft delete for spaces and projects (is_active flag)
- Add status_id and assignee_id to TaskUpdate schema
- Fix task PATCH endpoint to update status and assignee
- Add validation for assignee_id and status_id in task updates
- Fix health service to count tasks with "Blocked" status as blockers
- Filter out deleted spaces/projects from health dashboard
- Add workload cache invalidation on assignee changes

Frontend:
- Add delete confirmation dialogs for spaces and projects
- Fix UserSelect to display selected user name (valueName prop)
- Fix task detail modal to refresh data after save
- Enforce 2-level subtask depth limit in UI
- Fix timezone bug in date formatting (use local timezone)
- Convert NotificationBell from Tailwind to inline styles
- Add i18n translations for health, workload, settings pages
- Add parent_task_id to Task interface across components

OpenSpec:
- Archive add-delete-capability change

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
beabigegg
2026-01-10 01:32:13 +08:00
parent 2796cbb42d
commit 55f85d0d3c
44 changed files with 1854 additions and 297 deletions

View File

@@ -2,6 +2,21 @@
"title": "設定",
"projectSettings": "專案設定",
"backToTasks": "返回任務",
"mySettings": {
"title": "個人設定",
"profile": "個人資訊",
"email": "電子郵件",
"department": "部門",
"role": "角色",
"workloadSettings": "工作負載設定",
"capacityDescription": "設定您每週可用的工作時數,用於計算工作負載百分比。",
"weeklyCapacity": "每週容量",
"hoursPerWeek": "小時/週",
"capacityHelp": "建議值40 小時標準工時。最大值168 小時(一週總時數)。",
"capacitySaved": "容量設定已儲存",
"capacityError": "儲存容量設定失敗",
"capacityInvalid": "請輸入有效的時數0-168"
},
"tabs": {
"general": "一般",
"members": "成員",
@@ -37,16 +52,58 @@
"add": "新增欄位",
"edit": "編輯欄位",
"delete": "刪除欄位",
"create": "建立欄位",
"fieldName": "欄位名稱",
"fieldNamePlaceholder": "例如:故事點數、衝刺編號",
"fieldType": "欄位類型",
"required": "必填",
"requiredField": "必填欄位",
"requiredHelp": "建立或更新任務時必須填寫必填欄位。",
"cannotChangeType": "無法變更",
"description": "自訂欄位允許您為任務新增額外資料。每個專案最多可建立 20 個欄位。",
"loading": "載入自訂欄位中...",
"loadError": "載入自訂欄位失敗",
"retry": "重試",
"empty": "尚未定義任何自訂欄位。",
"emptyHint": "點擊「新增欄位」建立您的第一個自訂欄位。",
"deleteConfirmTitle": "刪除自訂欄位?",
"deleteConfirmMessage": "這將永久刪除此欄位及所有任務中儲存的值。此操作無法復原。",
"deleting": "刪除中...",
"deleted": "自訂欄位已刪除",
"deleteError": "刪除欄位失敗",
"saving": "儲存中...",
"saveChanges": "儲存變更",
"saveError": "儲存欄位失敗",
"options": "選項",
"optionPlaceholder": "選項 {{index}}",
"addOption": "新增選項",
"optionRequired": "下拉欄位至少需要一個選項",
"formula": "公式運算式",
"formulaPlaceholder": "例如:{time_spent} / {original_estimate} * 100",
"formulaRequired": "公式運算式為必填",
"formulaHelp": {
"intro": "使用大括號來參照其他欄位:",
"customField": "參照自訂數字欄位",
"estimate": "任務預估時間",
"timeSpent": "已記錄時間",
"operators": "支援的運算子:+, -, *, /"
},
"types": {
"text": "文字",
"textDesc": "單行文字輸入",
"number": "數字",
"numberDesc": "數值",
"date": "日期",
"select": "下拉選單",
"multiSelect": "多選",
"checkbox": "核取方塊"
"dateDesc": "日期選擇器",
"dropdown": "下拉選單",
"dropdownDesc": "從預設選項中選擇",
"person": "人員",
"personDesc": "使用者指派",
"formula": "公式",
"formulaDesc": "從其他欄位計算"
},
"validation": {
"nameRequired": "欄位名稱為必填"
}
},
"notifications": {