@@ -29,18 +29,31 @@ const MarkdownEditor: React.FC<MarkdownEditorProps> = ({ruleContent, roleContent
29
29
const saved = localStorage . getItem ( 'markdownContent' ) ;
30
30
return saved || '' ;
31
31
} ) ;
32
- const [ files , setFiles ] = useState < FileInfo [ ] > ( [ ] ) ;
32
+ const [ files , setFiles ] = useState < FileInfo [ ] > ( ( ) => {
33
+ const savedFiles = localStorage . getItem ( 'uploadedFiles' ) ;
34
+ return savedFiles ? JSON . parse ( savedFiles ) : [ ] ;
35
+ } ) ;
33
36
const [ previewFile , setPreviewFile ] = useState < FileInfo | null > ( null ) ;
34
37
const [ isDialogOpen , setIsDialogOpen ] = useState ( false ) ;
35
38
const previewContentRef = useRef < HTMLDivElement > ( null ) ;
36
39
40
+ // 持久化markdown内容
37
41
useEffect ( ( ) => {
38
42
const timer = setTimeout ( ( ) => {
39
43
localStorage . setItem ( 'markdownContent' , markdownContent ) ;
40
44
} , 500 ) ;
41
45
return ( ) => clearTimeout ( timer ) ;
42
46
} , [ markdownContent ] ) ;
43
47
48
+ // 持久化上传文件
49
+ useEffect ( ( ) => {
50
+ const timer = setTimeout ( ( ) => {
51
+ localStorage . setItem ( 'uploadedFiles' , JSON . stringify ( files ) ) ;
52
+ } , 500 ) ;
53
+ return ( ) => clearTimeout ( timer ) ;
54
+ } , [ files ] ) ;
55
+
56
+ // 恢复滚动位置
44
57
useEffect ( ( ) => {
45
58
if ( previewFile && previewContentRef . current ) {
46
59
const savedScrollTop = parseInt (
@@ -52,7 +65,17 @@ const MarkdownEditor: React.FC<MarkdownEditorProps> = ({ruleContent, roleContent
52
65
} , [ previewFile ] ) ;
53
66
54
67
const handleFilesUploaded = ( newFiles : FileInfo [ ] ) => {
55
- setFiles ( prev => [ ...prev , ...newFiles ] ) ;
68
+ setFiles ( prev => {
69
+ const updatedFiles = [ ...prev , ...newFiles ] ;
70
+ // 去重逻辑
71
+ const uniqueFiles = updatedFiles . reduce ( ( acc , current ) => {
72
+ if ( ! acc . some ( file => file . path === current . path ) ) {
73
+ acc . push ( current ) ;
74
+ }
75
+ return acc ;
76
+ } , [ ] as FileInfo [ ] ) ;
77
+ return uniqueFiles ;
78
+ } ) ;
56
79
} ;
57
80
58
81
const formatFileSize = ( bytes : number ) => {
@@ -69,8 +92,10 @@ const MarkdownEditor: React.FC<MarkdownEditorProps> = ({ruleContent, roleContent
69
92
} ;
70
93
71
94
const handleDeleteFile = ( index : number ) => {
72
- const newFiles = files . filter ( ( _ , i ) => i !== index ) ;
73
- setFiles ( newFiles ) ;
95
+ setFiles ( prev => {
96
+ const newFiles = prev . filter ( ( _ , i ) => i !== index ) ;
97
+ return newFiles ;
98
+ } ) ;
74
99
if ( previewFile ?. name === files [ index ] ?. name ) {
75
100
setIsDialogOpen ( false ) ;
76
101
}
0 commit comments