From ea7f0f8820e97a4c35c60299efd1dc55e2d98434 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 26 Feb 2026 18:33:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0"=E6=8A=84=E9=80=81?= =?UTF-8?q?=E6=88=91=E7=9A=84"=E5=AE=A1=E6=89=B9=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端修改: - ApprovalService::getList 添加 'cc' 类型查询 - 从 form_data.cc_users 中查找包含当前用户的订单 - 兼容两种数据格式:[{id:29}] 或 [29] 前端修改: - 添加"抄送我的"标签页 - 更新类型定义支持 'cc' 类型 - approvalListParams 类型添加 'cc' 选项 Co-Authored-By: Claude Opus 4.6 --- backend/app/service/ApprovalService.php | 30 +++++++++++++++++++++++++ frontend/src/modules/approval/types.ts | 2 +- frontend/src/pages/approval/list.tsx | 3 ++- 3 files changed, 33 insertions(+), 2 deletions(-) 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() { +