feat(studio/robot-authors): manual edit form

Adds an "编辑" action opening a sheet form to edit a robot author's status,
persona, positioning, target readers, and the article/image/publishing style
objects (JSON-validated as objects). Saves via the existing admin PUT endpoint,
then refetches the enriched list.
This commit is contained in:
2026-07-08 22:12:34 +08:00
parent a809e8bb6b
commit a84e5dcb54
2 changed files with 225 additions and 0 deletions
@@ -11,6 +11,7 @@ import { useListPage } from '@/lib/list-page'
import { CategoryPicker } from '@/features/categories/category-picker'
import { useCategoryOptions } from '@/features/categories/use-categories'
import { DetailSheet } from '@/features/studio/detail-sheet'
import { RobotAuthorEditSheet } from '@/features/studio/robot-author-edit-sheet'
import { DataTable } from '@/components/data-table/data-table'
import { PageHeader } from '@/components/page-header'
import { StatusPill } from '@/components/status-pill'
@@ -37,6 +38,7 @@ function RobotAuthorsPage() {
const [status, setStatus] = useState('all')
const [categoryId, setCategoryId] = useState<string | null>(null)
const [detail, setDetail] = useState<StudioRobotAuthor | null>(null)
const [editing, setEditing] = useState<StudioRobotAuthor | null>(null)
const { nameOf } = useCategoryOptions()
const filters: ListParams = {}
@@ -112,6 +114,9 @@ function RobotAuthorsPage() {
<Button size="sm" variant="ghost" onClick={() => setDetail(row.original)}>
</Button>
<Button size="sm" variant="outline" onClick={() => setEditing(row.original)}>
</Button>
{row.original.status === 'paused' ? (
<Button size="sm" variant="outline" onClick={() => setAuthorStatus(row.original, 'ready')}>
@@ -189,6 +194,8 @@ function RobotAuthorsPage() {
{ label: '发布规则', value: detail?.publishing_rules },
]}
/>
<RobotAuthorEditSheet author={editing} onOpenChange={(open) => !open && setEditing(null)} />
</div>
)
}