diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 1c8197112..f7925417a 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -263,6 +263,7 @@ "fetchError": "Failed to fetch approvals", "noPendingApprovals": "No pending approvals", "selectApproval": "Select an approval to view details", + "backToList": "Back to list", "previousApproval": "Previous", "nextApproval": "Next", "holdToApproveHint": "Hold button to approve or reject", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index f7a3d70a3..e375aef8f 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -263,6 +263,7 @@ "fetchError": "無法取得授權清單", "noPendingApprovals": "目前無待授權項目", "selectApproval": "請選擇一個待授權項目", + "backToList": "返回列表", "previousApproval": "上一個項目", "nextApproval": "下一個項目", "holdToApproveHint": "長按按鈕以批准或拒絕", diff --git a/apps/web/src/components/approval/conversational-view.tsx b/apps/web/src/components/approval/conversational-view.tsx index 679f78c1d..b098891e9 100644 --- a/apps/web/src/components/approval/conversational-view.tsx +++ b/apps/web/src/components/approval/conversational-view.tsx @@ -70,6 +70,8 @@ export function ConversationalView({ // 選中的 Approval const [selectedId, setSelectedId] = useState(null) const [showShortcuts, setShowShortcuts] = useState(false) + // Phase 11.3: Mobile 詳情面板狀態 + const [showMobileDetail, setShowMobileDetail] = useState(false) // 轉換為前端格式 const approvals = useMemo(() => { @@ -99,9 +101,17 @@ export function ConversationalView({ } else { setSelectedId(null) } + // Phase 11.3: 關閉 Mobile 詳情面板 + setShowMobileDetail(false) } }, [approvals, selectedId]) + // Phase 11.3: Mobile 選擇處理 + const handleMobileSelect = useCallback((id: string) => { + setSelectedId(id) + setShowMobileDetail(true) + }, []) + // 導航函數 const goToPrev = useCallback(() => { if (selectedIndex > 0) { @@ -146,8 +156,15 @@ export function ConversationalView({ return (
- {/* 左側: 對話列表 */} -
+ {/* 左側: 對話列表 - 響應式寬度 */} + {/* Mobile: 全寬 | Tablet: w-64 | Desktop: w-80 */} +
{/* 列表 Header */}
@@ -235,18 +252,39 @@ export function ConversationalView({ key={approval.id} approval={approval} isSelected={approval.id === selectedId} - onSelect={() => setSelectedId(approval.id)} + onSelect={() => handleMobileSelect(approval.id)} /> )) )}
- {/* 右側: 詳情面板 */} -
+ {/* 右側: 詳情面板 - 響應式 */} + {/* Mobile: 全屏覆蓋 | Tablet/Desktop: 右側面板 */} +
+ {/* Mobile 返回按鈕 */} +
+ +
+ {selectedIndex + 1} / {approvals.length} +
+
+ {/* Y 鍵長按進度指示器 */} {isYKeyHolding && ( -
+
+