--- name: cms-react description: | CMS React components (CMS React 元件). Use when building CMS admin interfaces with article management (文章管理), approval workflows (審核流程), permission-based actions, or Mezzanine UI integration. Covers StandardCMSTable, modals, and article stage management. Keywords: CMS, React, 文章管理, 審核, 表格, table, modal, Mezzanine UI, article, workflow --- # CMS React Components (CMS React 元件) ## Overview `@rytass/cms-react-components` 提供基於 Mezzanine UI 的 CMS 管理介面元件,支援文章生命週期管理、權限控制和審核流程。 ## Quick Start ### 安裝 ```bash npm install @rytass/cms-react-components @mezzanine-ui/react @mezzanine-ui/core ``` ### Provider 設定 ```tsx import { DialogProvider, ModalProvider } from '@rytass/cms-react-components'; function App() { return ( ); } ``` ## Core Components ### StandardCMSTable 進階資料表格,支援排序、過濾、分頁、批次操作: ```tsx import { StandardCMSTable, ArticleStage, ArticlesPermissions, ArticleTableActions, } from '@rytass/cms-react-components'; const ArticleList = () => { const columns = [ { title: '標題', dataIndex: 'title' }, { title: '建立時間', dataIndex: 'createdAt' }, { title: '狀態', dataIndex: 'stage' }, ]; return ( columns={columns} dataSource={articles} currentStage={ArticleStage.DRAFT} userPermissions={[ ArticlesPermissions.CreateArticle, ArticlesPermissions.UpdateArticleInDraft, ArticlesPermissions.DeleteArticleInDraft, ArticlesPermissions.SubmitPutBackArticle, ]} // 可選:自訂各階段可用操作 actions={{ [ArticleStage.DRAFT]: [ ArticleTableActions.Update, ArticleTableActions.Submit, ArticleTableActions.Delete, ], }} actionsEvents={{ onView: async (article) => router.push(`/articles/${article.id}`), onSubmit: async (article) => await submitArticle(article.id), onDelete: async (article) => await deleteArticle(article.id), onPutBack: async (article) => await putBackArticle(article.id), onRelease: async (article, releasedAt) => await releaseArticle(article.id, releasedAt), onWithdraw: async (article) => await withdrawArticle(article.id), onApprove: async (article) => await approveArticle(article.id), onReject: async (article, reason) => await rejectArticle(article.id, reason), }} /> ); }; ``` ### StandardCMSFormActions 表單操作按鈕,根據權限和階段顯示: ```tsx import { StandardCMSFormActions, ArticleStage, ArticlesPermissions, } from '@rytass/cms-react-components'; import { useForm } from 'react-hook-form'; interface ArticleFormData { title: string; content: string; } const ArticleForm = () => { const methods = useForm(); return ( methods={methods} // react-hook-form 的 UseFormReturn currentStage={ArticleStage.DRAFT} // 當前文章階段 userPermissions={[ // 使用者權限 ArticlesPermissions.CreateArticle, ArticlesPermissions.UpdateArticleInDraft, ArticlesPermissions.SubmitPutBackArticle, ]} createMode={true} // 建立模式 (vs 編輯模式) actionsEvents={{ // 建立模式下的操作 onCreateToDraft: async (data) => await saveToDraft(data), onCreateAndSubmit: async (data) => await createAndSubmit(data), onCreateAndRelease: async (data, releasedAt) => { await createAndRelease(data, releasedAt); }, onCreateAndApprove: async (data) => await createAndApprove(data), // 編輯模式下的操作 onUpdateToDraft: async (data) => await updateToDraft(data), onUpdateAndSubmit: async (data) => await updateAndSubmit(data), onUpdateAndRelease: async (data, releasedAt) => { await updateAndRelease(data, releasedAt); }, onUpdateAndApprove: async (data) => await updateAndApprove(data), // 通用操作 onSubmit: async (data) => await submitForReview(data), onRelease: async (data, releasedAt) => await release(data, releasedAt), onApprove: async (data) => await approve(data), onReject: async (data, reason) => await reject(data, reason), onLeave: async (data) => router.back(), onGoToEdit: async (data) => router.push(`/articles/${data.id}/edit`), }} leaveButtonText="返回列表" // 可選:自訂離開按鈕文字 actionButtonText="儲存草稿" // 可選:自訂操作按鈕文字 submitButtonText="送審" // 可選:自訂送出按鈕文字 disableLeaveButton={(values) => methods.formState.isSubmitting} disableActionButton={(values) => !values.title} disableSubmitButton={(values) => !values.title || !values.content} > {/* 表單欄位 */}