Skip to content

Commit d39b04f

Browse files
CopilotOrenZhang
andcommitted
feat: 改进举报功能 - 移动到页面底部左下角并优化状态管理
Co-authored-by: U8F69 <[email protected]>
1 parent 0edd0ab commit d39b04f

File tree

4 files changed

+33
-10
lines changed

4 files changed

+33
-10
lines changed

.gitignore

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ frontend/node_modules/*
1616
frontend/.next/*
1717
frontend/next-env.d.ts
1818
frontend/package-lock.json
19-
frontend/.env
20-
frontend/.env.local
21-
frontend/tsconfig.tsbuildinfo
19+
.env.*
20+
!.env.example
21+
*.tsbuildinfo
2222

2323
# os
2424
.DS_Store

frontend/components/common/receive/ReceiveContent.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {BasicUserInfo} from '@/lib/services/core';
1313
import {GetProjectResponseData} from '@/lib/services/project';
1414
import {formatDateTimeWithSeconds, copyToClipboard} from '@/lib/utils';
1515
import {motion} from 'motion/react';
16-
import {ReportButton} from './ReportButton';
1716

1817

1918
/**
@@ -321,7 +320,6 @@ export function ReceiveContent({data}: ReceiveContentProps) {
321320
receivedContent={receivedContent}
322321
onReceive={handleReceive}
323322
/>
324-
<ReportButton projectId={projectId} user={user} />
325323
</motion.div>
326324

327325
<motion.div className="pt-6 border-t border-gray-200" variants={itemVariants}>

frontend/components/common/receive/ReceiveMain.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {Button} from '@/components/ui/button';
77
import {Skeleton} from '@/components/ui/skeleton';
88
import {ArrowLeftIcon, AlertCircle, RefreshCw} from 'lucide-react';
99
import {ReceiveContent} from '@/components/common/receive';
10+
import {ReportButton} from '@/components/common/receive/ReportButton';
1011
import {EmptyState} from '@/components/common/layout/EmptyState';
1112
import services from '@/lib/services';
1213
import {GetProjectResponseData} from '@/lib/services/project';
@@ -205,6 +206,19 @@ export function ReceiveMain() {
205206
/>
206207
</motion.div>
207208
)}
209+
210+
{/* 页面底部举报按钮 */}
211+
{!Loading && !error && project && (
212+
<div className="fixed bottom-4 left-4 z-50">
213+
<div className="bg-background/80 backdrop-blur-sm border border-border rounded-lg p-2 shadow-lg">
214+
<ReportButton
215+
projectId={projectId || ''}
216+
user={user}
217+
hasReported={false}
218+
/>
219+
</div>
220+
</div>
221+
)}
208222
</motion.div>
209223
);
210224
}

frontend/components/common/receive/ReportButton.tsx

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export function ReportButton({projectId, user, hasReported = false}: ReportButto
3838
const [isOpen, setIsOpen] = useState(false);
3939
const [reason, setReason] = useState('');
4040
const [isSubmitting, setIsSubmitting] = useState(false);
41+
const [hasReportedLocal, setHasReportedLocal] = useState(hasReported);
4142

4243
/**
4344
* 处理举报提交
@@ -60,13 +61,23 @@ export function ReportButton({projectId, user, hasReported = false}: ReportButto
6061

6162
if (result.success) {
6263
toast.success('举报提交成功,感谢您的反馈');
64+
setHasReportedLocal(true);
6365
setIsOpen(false);
6466
setReason('');
6567
} else {
68+
// 检查是否是重复举报的错误
69+
if (result.error && result.error.includes('已举报过当前项目')) {
70+
setHasReportedLocal(true);
71+
}
6672
toast.error(result.error || '举报失败,请稍后重试');
6773
}
6874
} catch (error) {
69-
toast.error(error instanceof Error ? error.message : '举报失败,请稍后重试');
75+
const errorMessage = error instanceof Error ? error.message : '举报失败,请稍后重试';
76+
// 检查是否是重复举报的错误
77+
if (errorMessage.includes('已举报过当前项目')) {
78+
setHasReportedLocal(true);
79+
}
80+
toast.error(errorMessage);
7081
} finally {
7182
setIsSubmitting(false);
7283
}
@@ -88,11 +99,11 @@ export function ReportButton({projectId, user, hasReported = false}: ReportButto
8899
<Button
89100
variant="outline"
90101
size="sm"
91-
disabled={!user || hasReported}
92-
className="w-full mt-2"
102+
disabled={!user || hasReportedLocal}
103+
className="h-8 px-3 text-xs border-muted-foreground/30 text-muted-foreground hover:text-foreground hover:border-muted-foreground"
93104
>
94-
<Flag className="w-4 h-4 mr-2" />
95-
{!user ? '请先登录' : hasReported ? '已举报' : '举报项目'}
105+
<Flag className="w-3 h-3 mr-1" />
106+
{!user ? '请先登录' : hasReportedLocal ? '已举报' : '举报项目'}
96107
</Button>
97108
</DialogTrigger>
98109
<DialogContent className="sm:max-w-[425px]">

0 commit comments

Comments
 (0)