@@ -3,7 +3,7 @@ import apiClient from '../../utils/axios';
33import { getConfig } from '../../utils/config' ;
44import { showToast } from "../../utils/toastManager.jsx" ;
55
6- export default function ArticleInfoForm ( { articleData, onSave, onCancel, uploading } ) {
6+ export default function ArticleInfoForm ( { articleData, initialArticleData , onSave, onCancel, uploading } ) {
77 const [ formData , setFormData ] = useState ( {
88 title : '' ,
99 cover : '' ,
@@ -16,6 +16,7 @@ export default function ArticleInfoForm({ articleData, onSave, onCancel, uploadi
1616 enable_comment : 1
1717 } ) ;
1818
19+ const [ initialData , setInitialData ] = useState ( null ) ;
1920 const [ tags , setTags ] = useState ( [ ] ) ;
2021 const [ categories , setCategories ] = useState ( [ ] ) ;
2122 const [ coverUploading , setCoverUploading ] = useState ( false ) ;
@@ -52,7 +53,7 @@ export default function ArticleInfoForm({ articleData, onSave, onCancel, uploadi
5253 createTime = articleData . create_time . slice ( 0 , 16 ) ;
5354 }
5455
55- setFormData ( {
56+ const initialFormData = {
5657 title : articleData . article_name || articleData . title || '' ,
5758 cover : articleData . article_cover || articleData . cover || '' ,
5859 excerpt : articleData . excerpt || '' ,
@@ -63,8 +64,13 @@ export default function ArticleInfoForm({ articleData, onSave, onCancel, uploadi
6364 create_time : createTime ,
6465 enable_comment : articleData . enable_comment !== undefined && articleData . enable_comment !== null
6566 ? articleData . enable_comment
66- : 1
67- } ) ;
67+ : 1 ,
68+ initialArticleName : articleData . initialArticleName || '' ,
69+ initialArticleContent : articleData . initialArticleContent || ''
70+ } ;
71+
72+ setFormData ( initialFormData ) ;
73+ setInitialData ( initialFormData ) ;
6874 }
6975 } , [ articleData ] ) ;
7076
@@ -231,6 +237,40 @@ export default function ArticleInfoForm({ articleData, onSave, onCancel, uploadi
231237 return ;
232238 }
233239
240+ // 检查文章信息是否有更改
241+ if ( initialData ) {
242+ const normalizeTags = ( tags ) => {
243+ if ( ! tags ) return [ ] ;
244+ if ( Array . isArray ( tags ) ) return [ ...tags ] . sort ( ) ;
245+ if ( typeof tags === 'string' ) return tags . split ( ',' ) . map ( t => t . trim ( ) ) . filter ( Boolean ) . sort ( ) ;
246+ return [ ] ;
247+ } ;
248+
249+ const currentArticleContent = articleData ?. content || '' ;
250+ const currentArticleTitle = articleData ?. title || '' ;
251+
252+ const hasEditorChanges =
253+ currentArticleTitle !== ( initialData . initialArticleName || '' ) ||
254+ currentArticleContent !== ( initialData . initialArticleContent || '' ) ;
255+
256+ const hasInfoChanges =
257+ formData . title !== initialData . title ||
258+ formData . cover !== initialData . cover ||
259+ formData . excerpt !== initialData . excerpt ||
260+ JSON . stringify ( normalizeTags ( formData . tags ) ) !== JSON . stringify ( normalizeTags ( initialData . tags ) ) ||
261+ formData . category !== initialData . category ||
262+ formData . alias !== initialData . alias ||
263+ formData . create_time !== initialData . create_time ||
264+ formData . enable_comment !== initialData . enable_comment ||
265+ ( formData . password && formData . password . trim ( ) !== '' ) ;
266+
267+ if ( ! hasEditorChanges && ! hasInfoChanges ) {
268+ showToast ( '您未进行更改' ) ;
269+ onCancel ( ) ;
270+ return ;
271+ }
272+ }
273+
234274 const saveData = {
235275 ...articleData ,
236276 title : formData . title ,
0 commit comments