mirror of https://github.com/halo-dev/halo-admin
refactor: save and publishing logic for post and single page (#696)
#### What type of PR is this? /kind improvement /milestone 2.0 #### What this PR does / why we need it: 优化文章和自定义页面的保存内容和发布逻辑。详情可查阅:https://github.com/halo-dev/halo/pull/2709 #### Special notes for your reviewer: /cc @halo-dev/sig-halo-console 测试流程: 1. Halo 需要切换到 https://github.com/halo-dev/halo/pull/2709 分支。 2. 测试文章和自定义页面的新建、更新内容,以及发布。 #### Does this PR introduce a user-facing change? ```release-note 优化文章和自定义页面的保存内容和发布逻辑。 ```pull/697/head
parent
eef8dc3d43
commit
8deb8ee3bb
|
@ -32,7 +32,7 @@
|
|||
"@formkit/themes": "^1.0.0-beta.11",
|
||||
"@formkit/vue": "^1.0.0-beta.11",
|
||||
"@formkit/utils": "^1.0.0-beta.11",
|
||||
"@halo-dev/api-client": "^0.0.47",
|
||||
"@halo-dev/api-client": "^0.0.50",
|
||||
"@halo-dev/components": "workspace:*",
|
||||
"@halo-dev/console-shared": "workspace:*",
|
||||
"@halo-dev/richtext-editor": "^0.0.0-alpha.11",
|
||||
|
|
|
@ -12,7 +12,7 @@ importers:
|
|||
'@formkit/themes': ^1.0.0-beta.11
|
||||
'@formkit/utils': ^1.0.0-beta.11
|
||||
'@formkit/vue': ^1.0.0-beta.11
|
||||
'@halo-dev/api-client': ^0.0.47
|
||||
'@halo-dev/api-client': ^0.0.50
|
||||
'@halo-dev/components': workspace:*
|
||||
'@halo-dev/console-shared': workspace:*
|
||||
'@halo-dev/richtext-editor': ^0.0.0-alpha.11
|
||||
|
@ -104,7 +104,7 @@ importers:
|
|||
'@formkit/themes': 1.0.0-beta.12-e579559_tailwindcss@3.2.4
|
||||
'@formkit/utils': 1.0.0-beta.12-e579559
|
||||
'@formkit/vue': 1.0.0-beta.12-e579559_ior6jr3fpijijuwpr34w2i25va
|
||||
'@halo-dev/api-client': 0.0.47
|
||||
'@halo-dev/api-client': 0.0.50
|
||||
'@halo-dev/components': link:packages/components
|
||||
'@halo-dev/console-shared': link:packages/shared
|
||||
'@halo-dev/richtext-editor': 0.0.0-alpha.11_vue@3.2.45
|
||||
|
@ -1970,8 +1970,8 @@ packages:
|
|||
- windicss
|
||||
dev: false
|
||||
|
||||
/@halo-dev/api-client/0.0.47:
|
||||
resolution: {integrity: sha512-O5Yw7TDpTElCOTKPz98yeaixh5SdfPZ63qOSZlFqO//F3tAvegpjq1ZYHMblJfP1Q/P9GioZB9YYebzzv8PC4g==}
|
||||
/@halo-dev/api-client/0.0.50:
|
||||
resolution: {integrity: sha512-/bf/zv/27Pk2dpyozKeEjFkNy5P5ecGX2064WA2oQVHV8sK0UeCRrzDKQ/bIHrHJWaP9aBAN29fE9ocBXoJMeg==}
|
||||
dev: false
|
||||
|
||||
/@halo-dev/richtext-editor/0.0.0-alpha.11_vue@3.2.45:
|
||||
|
|
|
@ -7,6 +7,7 @@ import {
|
|||
VSpace,
|
||||
VButton,
|
||||
IconSave,
|
||||
Toast,
|
||||
} from "@halo-dev/components";
|
||||
import DefaultEditor from "@/components/editor/DefaultEditor.vue";
|
||||
import SinglePageSettingModal from "./components/SinglePageSettingModal.vue";
|
||||
|
@ -34,7 +35,6 @@ const initialFormState: SinglePageRequest = {
|
|||
pinned: false,
|
||||
allowComment: true,
|
||||
visible: "PUBLIC",
|
||||
version: 1,
|
||||
priority: 0,
|
||||
excerpt: {
|
||||
autoGenerate: true,
|
||||
|
@ -83,19 +83,9 @@ const handleSave = async () => {
|
|||
}
|
||||
|
||||
if (isUpdateMode.value) {
|
||||
// Get latest single page
|
||||
const { data: latestSinglePage } =
|
||||
await apiClient.extension.singlePage.getcontentHaloRunV1alpha1SinglePage(
|
||||
{
|
||||
name: formState.value.page.metadata.name,
|
||||
}
|
||||
);
|
||||
|
||||
formState.value.page = latestSinglePage;
|
||||
|
||||
const { data } = await apiClient.singlePage.updateDraftSinglePage({
|
||||
const { data } = await apiClient.singlePage.updateSinglePageContent({
|
||||
name: formState.value.page.metadata.name,
|
||||
singlePageRequest: formState.value,
|
||||
content: formState.value.content,
|
||||
});
|
||||
|
||||
formState.value.page = data;
|
||||
|
@ -107,9 +97,12 @@ const handleSave = async () => {
|
|||
routeQueryName.value = data.metadata.name;
|
||||
}
|
||||
|
||||
Toast.success("保存成功");
|
||||
|
||||
await handleFetchContent();
|
||||
} catch (error) {
|
||||
console.error("Failed to save single page", error);
|
||||
Toast.error("保存失败,请重试");
|
||||
} finally {
|
||||
saving.value = false;
|
||||
}
|
||||
|
@ -123,45 +116,16 @@ const handlePublish = async () => {
|
|||
formState.value.content.content = formState.value.content.raw;
|
||||
|
||||
if (isUpdateMode.value) {
|
||||
const { headSnapshot } = formState.value.page.spec;
|
||||
const { name: singlePageName } = formState.value.page.metadata;
|
||||
const { data: latestContent } =
|
||||
await apiClient.content.updateSnapshotContent({
|
||||
snapshotName: headSnapshot as string,
|
||||
contentRequest: {
|
||||
raw: formState.value.content.raw as string,
|
||||
content: formState.value.content.content as string,
|
||||
rawType: formState.value.content.rawType as string,
|
||||
headSnapshotName: headSnapshot,
|
||||
subjectRef: {
|
||||
kind: "SinglePage",
|
||||
version: "v1alpha1",
|
||||
group: "content.halo.run",
|
||||
name: singlePageName,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Get latest single page
|
||||
const { data: latestSinglePage } =
|
||||
await apiClient.extension.singlePage.getcontentHaloRunV1alpha1SinglePage(
|
||||
{
|
||||
name: formState.value.page.metadata.name,
|
||||
}
|
||||
);
|
||||
await apiClient.singlePage.updateSinglePageContent({
|
||||
name: singlePageName,
|
||||
content: formState.value.content,
|
||||
});
|
||||
|
||||
formState.value.page = latestSinglePage;
|
||||
formState.value.page.spec.publish = true;
|
||||
formState.value.page.spec.headSnapshot = latestContent.snapshotName;
|
||||
formState.value.page.spec.releaseSnapshot =
|
||||
formState.value.page.spec.headSnapshot;
|
||||
|
||||
await apiClient.extension.singlePage.updatecontentHaloRunV1alpha1SinglePage(
|
||||
{
|
||||
name: singlePageName,
|
||||
singlePage: formState.value.page,
|
||||
}
|
||||
);
|
||||
await apiClient.singlePage.publishSinglePage({
|
||||
name: singlePageName,
|
||||
});
|
||||
} else {
|
||||
formState.value.page.spec.publish = true;
|
||||
await apiClient.singlePage.draftSinglePage({
|
||||
|
@ -169,9 +133,12 @@ const handlePublish = async () => {
|
|||
});
|
||||
}
|
||||
|
||||
Toast.success("发布成功");
|
||||
|
||||
router.push({ name: "SinglePages" });
|
||||
} catch (error) {
|
||||
console.error("Failed to publish single page", error);
|
||||
Toast.error("发布失败,请重试");
|
||||
} finally {
|
||||
publishing.value = false;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ const initialFormState: SinglePage = {
|
|||
pinned: false,
|
||||
allowComment: true,
|
||||
visible: "PUBLIC",
|
||||
version: 1,
|
||||
priority: 0,
|
||||
excerpt: {
|
||||
autoGenerate: true,
|
||||
|
|
|
@ -7,6 +7,7 @@ import {
|
|||
VButton,
|
||||
VPageHeader,
|
||||
VSpace,
|
||||
Toast,
|
||||
} from "@halo-dev/components";
|
||||
import DefaultEditor from "@/components/editor/DefaultEditor.vue";
|
||||
import PostSettingModal from "./components/PostSettingModal.vue";
|
||||
|
@ -34,7 +35,6 @@ const initialFormState: PostRequest = {
|
|||
pinned: false,
|
||||
allowComment: true,
|
||||
visible: "PUBLIC",
|
||||
version: 1,
|
||||
priority: 0,
|
||||
excerpt: {
|
||||
autoGenerate: true,
|
||||
|
@ -84,17 +84,9 @@ const handleSave = async () => {
|
|||
}
|
||||
|
||||
if (isUpdateMode.value) {
|
||||
// Get latest post
|
||||
const { data: latestPost } =
|
||||
await apiClient.extension.post.getcontentHaloRunV1alpha1Post({
|
||||
name: formState.value.post.metadata.name,
|
||||
});
|
||||
|
||||
formState.value.post = latestPost;
|
||||
|
||||
const { data } = await apiClient.post.updateDraftPost({
|
||||
const { data } = await apiClient.post.updatePostContent({
|
||||
name: formState.value.post.metadata.name,
|
||||
postRequest: formState.value,
|
||||
content: formState.value.content,
|
||||
});
|
||||
|
||||
formState.value.post = data;
|
||||
|
@ -106,9 +98,12 @@ const handleSave = async () => {
|
|||
name.value = data.metadata.name;
|
||||
}
|
||||
|
||||
Toast.success("保存成功");
|
||||
|
||||
await handleFetchContent();
|
||||
} catch (e) {
|
||||
console.error("Failed to save post", e);
|
||||
Toast.error("保存失败,请重试");
|
||||
} finally {
|
||||
saving.value = false;
|
||||
}
|
||||
|
@ -122,28 +117,15 @@ const handlePublish = async () => {
|
|||
formState.value.content.content = formState.value.content.raw;
|
||||
|
||||
if (isUpdateMode.value) {
|
||||
const { headSnapshot } = formState.value.post.spec;
|
||||
const { name: postName } = formState.value.post.metadata;
|
||||
const { data: latestContent } =
|
||||
await apiClient.content.updateSnapshotContent({
|
||||
snapshotName: headSnapshot as string,
|
||||
contentRequest: {
|
||||
raw: formState.value.content.raw as string,
|
||||
content: formState.value.content.content as string,
|
||||
rawType: formState.value.content.rawType as string,
|
||||
headSnapshotName: headSnapshot,
|
||||
subjectRef: {
|
||||
kind: "Post",
|
||||
version: "v1alpha1",
|
||||
group: "content.halo.run",
|
||||
name: postName,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await apiClient.post.updatePostContent({
|
||||
name: postName,
|
||||
content: formState.value.content,
|
||||
});
|
||||
|
||||
await apiClient.post.publishPost({
|
||||
name: postName,
|
||||
headSnapshot: latestContent.snapshotName,
|
||||
});
|
||||
} else {
|
||||
const { data } = await apiClient.post.draftPost({
|
||||
|
@ -155,9 +137,12 @@ const handlePublish = async () => {
|
|||
});
|
||||
}
|
||||
|
||||
Toast.success("发布成功", { duration: 2000 });
|
||||
|
||||
router.push({ name: "Posts" });
|
||||
} catch (error) {
|
||||
console.error("Failed to publish post", error);
|
||||
Toast.error("发布失败,请重试");
|
||||
} finally {
|
||||
publishing.value = false;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ const initialFormState: Post = {
|
|||
pinned: false,
|
||||
allowComment: true,
|
||||
visible: "PUBLIC",
|
||||
version: 1,
|
||||
priority: 0,
|
||||
excerpt: {
|
||||
autoGenerate: true,
|
||||
|
|
Loading…
Reference in New Issue