R89 A4-A5 移动导航与工作台重排

这个提交包含在:
2026-05-05 19:51:55 +08:00
父节点 bf6deac6d0
当前提交 ee64909811
共修改 6 个文件,包含 116 行新增和 23 行删除
+42 -11
查看文件
@@ -315,14 +315,45 @@ export function MobilePortalPage() {
const teamStatusItems = teamStatusQuery.data ?? [];
const pendingTasks = pendingCountQuery.data?.items ?? [];
const notifications = notificationsQuery.data?.items ?? [];
const pendingApprovalCount = canAccessApprovals ? pendingCountQuery.data?.total ?? 0 : 0;
const unreadNotificationCount = notifications.filter((item) => !item.readAt).length;
return (
<PageScaffold className="space-y-4">
<PageHeader
title="移动首页"
subtitle="处理今日考勤、审批和高频入口。"
title="今天"
subtitle="先处理待办,再进入报销、票据和团队事项。"
/>
<section className="card-std space-y-4 p-4" data-testid="mobile-today-focus">
<div className="flex items-start justify-between gap-3">
<div>
<div className="text-sm font-semibold text-zinc-900">今日重点</div>
<div className="mt-1 text-xs leading-5 text-zinc-500">移动端只保留高频动作,低频模块放到“我的”。</div>
</div>
<span className={pendingApprovalCount > 0 ? "badge-warning" : "badge-success"}>
{pendingApprovalCount > 0 ? `${pendingApprovalCount} 条待审批` : "暂无审批待办"}
</span>
</div>
<div className="grid grid-cols-2 gap-3">
<div className="rounded-2xl border border-zinc-200 bg-white px-4 py-4">
<div className="text-2xl font-semibold text-zinc-900">{pendingApprovalCount}</div>
<div className="mt-1 text-xs text-zinc-500">审批待办</div>
</div>
<div className="rounded-2xl border border-zinc-200 bg-white px-4 py-4">
<div className="text-2xl font-semibold text-zinc-900">{unreadNotificationCount}</div>
<div className="mt-1 text-xs text-zinc-500">未读通知</div>
</div>
</div>
<div className="grid gap-3">
<QuickLinkCard label="处理审批" description="查看待办并快速处理" to="/mobile/approvals" disabled={!canAccessApprovals} />
<QuickLinkCard label="发起报销" description="提交报销和查看进度" to="/reimbursements" disabled={!canAccessReimbursements} />
<QuickLinkCard label="上传票据" description="拍照或选择文件上传" to="/mobile/capture" disabled={!canAccessCapture} />
</div>
</section>
{!attendanceFeatureDisabled ? (
<section className="card-std space-y-4 p-4">
<div className="flex items-center justify-between gap-3">
@@ -524,15 +555,15 @@ export function MobilePortalPage() {
)}
</section>
<section className="card-std space-y-3 p-4">
<div className="text-sm font-semibold text-zinc-900">快捷入口</div>
<div className="grid gap-3 sm:grid-cols-2">
<QuickLinkCard label="提交请假" description="进入请假申请页" to="/leave-requests" disabled={!canAccessLeave} />
<QuickLinkCard label="提交报销" description="进入报销申请页" to="/reimbursements" disabled={!canAccessReimbursements} />
<QuickLinkCard label="拍照上传" description="打开移动拍照上传" to="/mobile/capture" disabled={!canAccessCapture} />
<QuickLinkCard label="资产扫描" description="进入扫码与盘点" to="/mobile/assets/scan" disabled={!canAccessAssetScan} />
</div>
</section>
{(canAccessLeave || canAccessAssetScan) ? (
<section className="card-std space-y-3 p-4">
<div className="text-sm font-semibold text-zinc-900">其他快捷入口</div>
<div className="grid gap-3 sm:grid-cols-2">
<QuickLinkCard label="提交请假" description="进入请假申请页" to="/leave-requests" disabled={!canAccessLeave} />
<QuickLinkCard label="资产扫描" description="进入扫码与盘点" to="/mobile/assets/scan" disabled={!canAccessAssetScan} />
</div>
</section>
) : null}
<section className="card-std space-y-3 p-4">
<div className="flex items-center justify-between gap-3">