@@ -92,23 +92,8 @@ export default function EditPage() {
9292 const { getFilteredGroups } = useGroupData ( )
9393 const [ summaryModalOpen , setSummaryModalOpen ] = useState ( false )
9494 const [ summaryDraft , setSummaryDraft ] = useState ( '' )
95-
96- const {
97- run,
98- loading,
99- data : discussion ,
100- } = useRequest ( ( ) => getDiscussionDiscId ( { discId : queryId ! } ) , {
101- manual : true ,
102- onSuccess : ( result ) => {
103- reset ( {
104- title : result . title || '' ,
105- summary : result . summary || '' ,
106- content : result . content || '' ,
107- group_ids : result . group_ids || [ ] ,
108- type : ( result . type as ModelDiscussionType ) || ModelDiscussionType . DiscussionTypeBlog ,
109- } )
110- } ,
111- } )
95+ const requestedDiscussionIdRef = useRef < string | undefined > ( undefined )
96+ const hasUserEditedRef = useRef ( false )
11297 const schema = useMemo (
11398 ( ) =>
11499 z . object ( {
@@ -136,7 +121,7 @@ export default function EditPage() {
136121 resolver : zodResolver ( schema ) ,
137122 mode : 'onBlur' ,
138123 defaultValues : {
139- title : urlTitle ? decodeURIComponent ( urlTitle ) : discussion ?. title || '' ,
124+ title : urlTitle ? decodeURIComponent ( urlTitle ) : '' ,
140125 summary : '' ,
141126 content :
142127 urlType === ModelDiscussionType . DiscussionTypeQA && ! queryId && systemConfig ?. content_placeholder
@@ -147,6 +132,25 @@ export default function EditPage() {
147132 } ,
148133 } )
149134
135+ const {
136+ run,
137+ loading,
138+ data : discussion ,
139+ } = useRequest ( ( discId : string ) => getDiscussionDiscId ( { discId } ) , {
140+ manual : true ,
141+ onSuccess : ( result ) => {
142+ if ( hasUserEditedRef . current ) return
143+
144+ reset ( {
145+ title : result . title || '' ,
146+ summary : result . summary || '' ,
147+ content : result . content || '' ,
148+ group_ids : result . group_ids || [ ] ,
149+ type : ( result . type as ModelDiscussionType ) || ModelDiscussionType . DiscussionTypeBlog ,
150+ } )
151+ } ,
152+ } )
153+
150154 // summary 字段没有显式输入框,依赖侧边栏 setValue 写入;
151155 // 这里主动 register,确保 handleSubmit 的 vals 中能拿到最新的 summary。
152156 useEffect ( ( ) => {
@@ -190,9 +194,20 @@ export default function EditPage() {
190194
191195 useEffect ( ( ) => {
192196 if ( ! queryId ) return
193- run ( )
197+ if ( requestedDiscussionIdRef . current === queryId ) return
198+ requestedDiscussionIdRef . current = queryId
199+ hasUserEditedRef . current = false
200+ run ( queryId )
194201 } , [ queryId , run ] )
195202
203+ useEffect ( ( ) => {
204+ const subscription = watch ( ( ) => {
205+ hasUserEditedRef . current = true
206+ } )
207+
208+ return ( ) => subscription . unsubscribe ( )
209+ } , [ watch ] )
210+
196211 // 当systemConfig加载完成时,如果是新建Q&A帖子且内容为空,则设置默认内容
197212 useEffect ( ( ) => {
198213 if (
0 commit comments