diff --git a/backend/app/service/ApprovalService.php b/backend/app/service/ApprovalService.php index a808891..756750b 100644 --- a/backend/app/service/ApprovalService.php +++ b/backend/app/service/ApprovalService.php @@ -203,6 +203,36 @@ class ApprovalService $query->whereIn('id', $approvedOrderIds) ->whereIn('status', [ApprovalOrder::STATUS_APPROVED, ApprovalOrder::STATUS_REJECTED, ApprovalOrder::STATUS_CANCELLED]); break; + case 'cc': + // 获取抄送给我的订单 + $allOrders = ApprovalOrder::where('status', '!=', ApprovalOrder::STATUS_DRAFT)->get(); + $ccOrderIds = []; + + foreach ($allOrders as $order) { + $formData = $order->form_data ?? []; + $ccUsers = $formData['cc_users'] ?? []; + + // 兼容两种格式:[{id:29, name:'...'}] 或 [29] 或 [{id:29}] + if (!empty($ccUsers)) { + if (is_array($ccUsers[0] ?? null) && isset($ccUsers[0]['id'])) { + // 对象数组格式: [{id:29, name:'...'}] + $ccUserIds = array_column($ccUsers, 'id'); + } else if (is_numeric($ccUsers[0] ?? null)) { + // ID数组格式: [29, 30] + $ccUserIds = $ccUsers; + } else { + $ccUserIds = []; + } + + if (in_array($userId, $ccUserIds)) { + $ccOrderIds[] = $order->id; + } + } + } + + error_log("🔍 Debug 'cc' query: userId={$userId}, ccOrderIds=" . json_encode($ccOrderIds)); + $query->whereIn('id', $ccOrderIds); + break; } $total = $query->count(); diff --git a/frontend/src/modules/approval/types.ts b/frontend/src/modules/approval/types.ts index 8b19cc5..d39c37a 100644 --- a/frontend/src/modules/approval/types.ts +++ b/frontend/src/modules/approval/types.ts @@ -106,7 +106,7 @@ export interface ApprovalActionParams { // 列表查询参数 export interface ApprovalListParams { - type?: 'my' | 'pending' | 'approved' + type?: 'my' | 'pending' | 'approved' | 'cc' page?: number pageSize?: number } diff --git a/frontend/src/pages/approval/list.tsx b/frontend/src/pages/approval/list.tsx index 13c5e8f..3cf1c74 100644 --- a/frontend/src/pages/approval/list.tsx +++ b/frontend/src/pages/approval/list.tsx @@ -46,7 +46,7 @@ export default function ApprovalList() { const { t } = useTranslation() const navigate = useNavigate() - const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved'>('my') + const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved' | 'cc'>('my') const [list, setList] = useState([]) const [loading, setLoading] = useState(false) const [hasMore, setHasMore] = useState(false) @@ -179,6 +179,7 @@ export default function ApprovalList() { +