feat: release chat and mindspace UI updates
This commit is contained in:
@@ -476,6 +476,8 @@ export function MindSpaceView({
|
||||
const [pendingDeleteId, setPendingDeleteId] = useState<string | null>(null);
|
||||
const [selectedAssetIds, setSelectedAssetIds] = useState<string[]>([]);
|
||||
const [bulkDeletingAssets, setBulkDeletingAssets] = useState(false);
|
||||
const [selectedDraftPageIds, setSelectedDraftPageIds] = useState<string[]>([]);
|
||||
const [bulkDeletingDraftPages, setBulkDeletingDraftPages] = useState(false);
|
||||
const [newPageOpen, setNewPageOpen] = useState(false);
|
||||
const [newPageTitle, setNewPageTitle] = useState('');
|
||||
const [newPageContent, setNewPageContent] = useState('');
|
||||
@@ -1335,6 +1337,55 @@ export function MindSpaceView({
|
||||
}
|
||||
};
|
||||
|
||||
const selectedDraftPageSet = useMemo(() => new Set(selectedDraftPageIds), [selectedDraftPageIds]);
|
||||
const allDraftPagesSelected =
|
||||
pages.length > 0 && pages.every((p) => selectedDraftPageSet.has(p.id));
|
||||
|
||||
const toggleDraftPageSelected = (pageId: string) => {
|
||||
setSelectedDraftPageIds((ids) =>
|
||||
ids.includes(pageId) ? ids.filter((id) => id !== pageId) : [...ids, pageId],
|
||||
);
|
||||
};
|
||||
|
||||
const toggleAllDraftPagesSelected = () => {
|
||||
if (allDraftPagesSelected) {
|
||||
setSelectedDraftPageIds([]);
|
||||
} else {
|
||||
setSelectedDraftPageIds(pages.map((p) => p.id));
|
||||
}
|
||||
};
|
||||
|
||||
const removeDraftPages = async () => {
|
||||
if (selectedDraftPageIds.length === 0) return;
|
||||
if (previewMode) {
|
||||
setError('预览模式下无法删除页面');
|
||||
return;
|
||||
}
|
||||
setBulkDeletingDraftPages(true);
|
||||
setError(null);
|
||||
const deletingIds = [...selectedDraftPageIds];
|
||||
const failedIds: string[] = [];
|
||||
const failedNames: string[] = [];
|
||||
try {
|
||||
for (const pageId of deletingIds) {
|
||||
try {
|
||||
await deleteMindSpacePage(pageId);
|
||||
if (selectedPageId === pageId) closePage();
|
||||
} catch {
|
||||
failedIds.push(pageId);
|
||||
failedNames.push(pages.find((p) => p.id === pageId)?.title ?? pageId);
|
||||
}
|
||||
}
|
||||
setSelectedDraftPageIds((ids) => ids.filter((id) => failedIds.includes(id)));
|
||||
await load();
|
||||
if (failedNames.length > 0) {
|
||||
setError(`有 ${failedNames.length} 个页面删除失败:${failedNames.slice(0, 3).join('、')}`);
|
||||
}
|
||||
} finally {
|
||||
setBulkDeletingDraftPages(false);
|
||||
}
|
||||
};
|
||||
|
||||
const previewAsset = useMemo(
|
||||
() => assets.find((asset) => asset.id === previewAssetId) ?? null,
|
||||
[assets, previewAssetId],
|
||||
@@ -1362,11 +1413,6 @@ export function MindSpaceView({
|
||||
发布到广场
|
||||
</button>
|
||||
)}
|
||||
{canGenerateWithAgent(asset) && (
|
||||
<button type="button" onClick={() => openAgentGenerator(asset)}>
|
||||
AI 生成页面
|
||||
</button>
|
||||
)}
|
||||
{asset.publicUrl && (
|
||||
<a
|
||||
className="mindspace-asset-share"
|
||||
@@ -1936,7 +1982,7 @@ export function MindSpaceView({
|
||||
{!agentJobsLoading && agentJobsList.length === 0 && (
|
||||
<div className="mindspace-empty">
|
||||
<h2>还没有 AI 生成任务</h2>
|
||||
<p>在 OA 工作区选择资料并点击「AI 生成页面」后,任务会出现在这里。</p>
|
||||
<p>在 OA 工作区选择资料并创建页面任务后,任务会出现在这里。</p>
|
||||
</div>
|
||||
)}
|
||||
{!agentJobsLoading && agentJobsList.length > 0 && (
|
||||
@@ -2004,16 +2050,47 @@ export function MindSpaceView({
|
||||
|
||||
{selectedCategory.code === 'draft' ? (
|
||||
pages.length > 0 ? (
|
||||
<div className="mindspace-feed-grid">
|
||||
{pages.map((page) => (
|
||||
<MindSpaceFeedCard
|
||||
key={page.id}
|
||||
page={page}
|
||||
previewMode={previewMode}
|
||||
onClick={() => showPage(page.id)}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
<>
|
||||
<div className="mindspace-asset-bulkbar">
|
||||
<button
|
||||
type="button"
|
||||
onClick={toggleAllDraftPagesSelected}
|
||||
disabled={bulkDeletingDraftPages}
|
||||
>
|
||||
{allDraftPagesSelected ? '取消全选' : '全选'}
|
||||
</button>
|
||||
<span>已选 {selectedDraftPageIds.length} 项</span>
|
||||
{selectedDraftPageIds.length > 0 && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setSelectedDraftPageIds([])}
|
||||
disabled={bulkDeletingDraftPages}
|
||||
>
|
||||
清空
|
||||
</button>
|
||||
)}
|
||||
<button
|
||||
type="button"
|
||||
className="mindspace-asset-bulk-delete"
|
||||
onClick={() => void removeDraftPages()}
|
||||
disabled={selectedDraftPageIds.length === 0 || bulkDeletingDraftPages}
|
||||
>
|
||||
{bulkDeletingDraftPages ? '删除中…' : '删除选中'}
|
||||
</button>
|
||||
</div>
|
||||
<div className="mindspace-feed-grid">
|
||||
{pages.map((page) => (
|
||||
<MindSpaceFeedCard
|
||||
key={page.id}
|
||||
page={page}
|
||||
previewMode={previewMode}
|
||||
onClick={() => showPage(page.id)}
|
||||
checked={selectedDraftPageSet.has(page.id)}
|
||||
onCheckChange={() => toggleDraftPageSelected(page.id)}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<div className="mindspace-empty">
|
||||
<h2>还没有页面草稿</h2>
|
||||
|
||||
Reference in New Issue
Block a user