@@ -45,6 +45,8 @@ import {
4545 regeneratePageDraft ,
4646 savePageDraft ,
4747 unpublishPage ,
48+ bulkPublishPages ,
49+ bulkUnpublishPages ,
4850} from '@/services/api/pages' ;
4951import {
5052 getChangeChain ,
@@ -200,6 +202,43 @@ export default function PageStudio() {
200202 [ loadDrafts , message ] ,
201203 ) ;
202204
205+ // F:一键发布全部(ready/basic 提案走真实 accept-and-publish 链路)
206+ const [ bulkLoading , setBulkLoading ] = useState < 'publish' | 'unpublish' | null > ( null ) ;
207+ const handleBulkPublish = useCallback ( async ( ) => {
208+ setBulkLoading ( 'publish' ) ;
209+ try {
210+ const res = await bulkPublishPages ( ) ;
211+ const published = res . published ?. length ?? 0 ;
212+ const failed = res . failed ?. length ?? 0 ;
213+ if ( failed > 0 ) {
214+ message . warning ( `已发布 ${ published } 个页面,${ failed } 个失败` ) ;
215+ } else {
216+ message . success ( `已发布 ${ published } 个页面` ) ;
217+ }
218+ requestConsoleMenuRefresh ( ) ;
219+ loadDrafts ( ) ;
220+ } catch {
221+ message . error ( '一键发布失败' ) ;
222+ } finally {
223+ setBulkLoading ( null ) ;
224+ }
225+ } , [ loadDrafts ] ) ;
226+
227+ const handleBulkUnpublish = useCallback ( async ( ) => {
228+ setBulkLoading ( 'unpublish' ) ;
229+ try {
230+ const res = await bulkUnpublishPages ( ) ;
231+ const unpublished = res . unpublished ?. length ?? 0 ;
232+ message . success ( `已下架 ${ unpublished } 个页面` ) ;
233+ requestConsoleMenuRefresh ( ) ;
234+ loadDrafts ( ) ;
235+ } catch {
236+ message . error ( '一键下架失败' ) ;
237+ } finally {
238+ setBulkLoading ( null ) ;
239+ }
240+ } , [ loadDrafts ] ) ;
241+
203242 const handleUnpublish = useCallback (
204243 async ( pageKey : string ) => {
205244 try {
@@ -671,7 +710,40 @@ export default function PageStudio() {
671710 pagination = { false }
672711 toolBarRender = { ( ) => [
673712 < Button key = "refresh" icon = { < ReloadOutlined /> } onClick = { loadDrafts } >
674- 刷新草稿
713+ 刷新
714+ </ Button > ,
715+ < Button
716+ key = "bulk-publish"
717+ icon = { < RocketOutlined /> }
718+ loading = { bulkLoading === 'publish' }
719+ onClick = { ( ) => {
720+ Modal . confirm ( {
721+ title : '一键发布全部' ,
722+ content :
723+ '将重算提案并把所有 ready/basic 提案按真实链路发布(同 scope)。确认执行?' ,
724+ okText : '发布' ,
725+ onOk : handleBulkPublish ,
726+ } ) ;
727+ } }
728+ >
729+ 一键发布全部
730+ </ Button > ,
731+ < Button
732+ key = "bulk-unpublish"
733+ danger
734+ loading = { bulkLoading === 'unpublish' }
735+ onClick = { ( ) => {
736+ Modal . confirm ( {
737+ title : '一键下架全部' ,
738+ content :
739+ '将下线当前 scope 内全部已发布页面(运行控制台菜单随之清空)。确认执行?' ,
740+ okText : '下架' ,
741+ okButtonProps : { danger : true } ,
742+ onOk : handleBulkUnpublish ,
743+ } ) ;
744+ } }
745+ >
746+ 一键下架全部
675747 </ Button > ,
676748 ] }
677749 />
0 commit comments