mirror of
https://github.com/halo-dev/docs.git
synced 2025-10-21 18:24:58 +00:00
docs: add documentation for singlePage extension (#501)
Signed-off-by: Ryan Wang <i@ryanc.cc>
This commit is contained in:
@@ -0,0 +1,70 @@
|
|||||||
|
```ts
|
||||||
|
export interface ListedSinglePage {
|
||||||
|
contributors: Array<{ // 页面的贡献者集合
|
||||||
|
avatar: string; // 贡献者头像
|
||||||
|
displayName: string; // 贡献者名称
|
||||||
|
name: string; // 贡献者唯一标识
|
||||||
|
}>;
|
||||||
|
owner: { // 页面的作者信息
|
||||||
|
avatar: string; // 作者头像
|
||||||
|
displayName: string; // 作者名称
|
||||||
|
name: string; // 作者唯一标识
|
||||||
|
};
|
||||||
|
page: { // 页面信息
|
||||||
|
apiVersion: "content.halo.run/v1alpha1";
|
||||||
|
kind: "SinglePage";
|
||||||
|
metadata: {
|
||||||
|
annotations: {};
|
||||||
|
creationTimestamp: string;
|
||||||
|
labels: {};
|
||||||
|
name: string; // 页面的唯一标识
|
||||||
|
version: number;
|
||||||
|
};
|
||||||
|
spec: {
|
||||||
|
allowComment: boolean; // 是否允许评论
|
||||||
|
baseSnapshot: string; // 内容基础快照
|
||||||
|
cover: string; // 页面封面图
|
||||||
|
deleted: boolean; // 是否已删除
|
||||||
|
excerpt: { // 页面摘要
|
||||||
|
autoGenerate: boolean; // 是否自动生成
|
||||||
|
raw: string; // 摘要内容
|
||||||
|
};
|
||||||
|
headSnapshot: string; // 内容最新快照
|
||||||
|
htmlMetas: Array<{}>;
|
||||||
|
owner: string; // 页面作者的唯一标识
|
||||||
|
pinned: boolean; // 是否置顶
|
||||||
|
priority: number; // 页面优先级
|
||||||
|
publish: boolean; // 是否发布
|
||||||
|
publishTime: string; // 发布时间
|
||||||
|
releaseSnapshot: string; // 已发布的内容快照
|
||||||
|
slug: string; // 页面别名
|
||||||
|
template: string; // 页面渲染模板
|
||||||
|
title: string; // 页面标题
|
||||||
|
visible: string; // 页面可见性
|
||||||
|
};
|
||||||
|
status: {
|
||||||
|
commentsCount: number; // 页面评论总数
|
||||||
|
conditions: Array<{
|
||||||
|
lastTransitionTime: string;
|
||||||
|
message: string;
|
||||||
|
reason: string;
|
||||||
|
status: string;
|
||||||
|
type: string;
|
||||||
|
}>;
|
||||||
|
contributors: Array<string>;
|
||||||
|
excerpt: string; // 最终的页面摘要,根据是否自动生成计算
|
||||||
|
inProgress: boolean; // 是否有未发布的内容
|
||||||
|
lastModifyTime: string; // 页面最后修改时间
|
||||||
|
permalink: string; // 页面的永久链接
|
||||||
|
phase: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
stats: {
|
||||||
|
approvedComment: number; // 已审核的评论数
|
||||||
|
totalComment: number; // 评论总数
|
||||||
|
upvote: number; // 点赞数
|
||||||
|
visit: number; // 访问数
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 文章数据列表显示字段
|
title: 文章数据列表显示字段
|
||||||
description: 扩展文章数据列表显示字段 - plugin:list-item:field:create
|
description: 扩展文章数据列表显示字段 - post:list-item:field:create
|
||||||
---
|
---
|
||||||
|
|
||||||
此扩展点用于扩展文章数据列表的显示字段。
|
此扩展点用于扩展文章数据列表的显示字段。
|
||||||
|
@@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
title: 页面数据列表显示字段
|
||||||
|
description: 扩展页面数据列表显示字段 - single-page:list-item:field:create
|
||||||
|
---
|
||||||
|
|
||||||
|
此扩展点用于扩展页面数据列表的显示字段。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 定义方式
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export default definePlugin({
|
||||||
|
extensionPoints: {
|
||||||
|
"single-page:list-item:field:create": (singlePage: Ref<ListedSinglePage>): EntityFieldItem[] | Promise<EntityFieldItem[]> => {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
priority: 0,
|
||||||
|
position: "start",
|
||||||
|
component: markRaw(FooComponent),
|
||||||
|
props: {},
|
||||||
|
permissions: [],
|
||||||
|
hidden: false,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
```ts title="EntityFieldItem"
|
||||||
|
export interface EntityFieldItem {
|
||||||
|
priority: number;
|
||||||
|
position: "start" | "end";
|
||||||
|
component: Raw<Component>;
|
||||||
|
props?: Record\<string, unknown\>;
|
||||||
|
permissions?: string[];
|
||||||
|
hidden?: boolean;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
此示例将添加一个显示页面 slug(别名)的字段。
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { definePlugin } from "@halo-dev/console-shared";
|
||||||
|
import { markRaw, type Ref } from "vue";
|
||||||
|
import type { ListedSinglePage } from "@halo-dev/api-client";
|
||||||
|
import { VEntityField } from "@halo-dev/components";
|
||||||
|
|
||||||
|
export default definePlugin({
|
||||||
|
extensionPoints: {
|
||||||
|
"single-page:list-item:field:create": (singlePage: Ref<ListedSinglePage>) => {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
priority: 0,
|
||||||
|
position: "end",
|
||||||
|
component: markRaw(VEntityField),
|
||||||
|
props: {
|
||||||
|
description: singlePage.value.page.spec.slug,
|
||||||
|
},
|
||||||
|
permissions: [],
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## 类型定义
|
||||||
|
|
||||||
|
### ListedSinglePage
|
||||||
|
|
||||||
|
```mdx-code-block
|
||||||
|
import ListedSinglePage from "./interface/ListedSinglePage.md";
|
||||||
|
|
||||||
|
<ListedSinglePage />
|
||||||
|
```
|
@@ -0,0 +1,92 @@
|
|||||||
|
---
|
||||||
|
title: 页面数据列表操作菜单
|
||||||
|
description: 扩展页面数据列表操作菜单 - single-page:list-item:operation:create
|
||||||
|
---
|
||||||
|
|
||||||
|
此扩展点用于扩展页面数据列表的操作菜单项。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 定义方式
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export default definePlugin({
|
||||||
|
extensionPoints: {
|
||||||
|
"single-page:list-item:operation:create": (
|
||||||
|
singlePage: Ref<ListedSinglePage>
|
||||||
|
): OperationItem<ListedSinglePage>[] | Promise<OperationItem<ListedSinglePage>[]> => {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
priority: 10,
|
||||||
|
component: markRaw(VDropdownItem),
|
||||||
|
props: {},
|
||||||
|
action: (item?: ListedSinglePage) => {
|
||||||
|
// do something
|
||||||
|
},
|
||||||
|
label: "foo",
|
||||||
|
hidden: false,
|
||||||
|
permissions: [],
|
||||||
|
children: [],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
```mdx-code-block
|
||||||
|
import OperationItem from "./interface/OperationItem.md";
|
||||||
|
|
||||||
|
<OperationItem />
|
||||||
|
```
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
此示例将实现一个操作菜单项,点击后会将页面内容作为文件下载到本地。
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import type { ListedSinglePage } from "@halo-dev/api-client";
|
||||||
|
import { VDropdownItem } from "@halo-dev/components";
|
||||||
|
import { definePlugin } from "@halo-dev/console-shared";
|
||||||
|
import axios from "axios";
|
||||||
|
import { markRaw } from "vue";
|
||||||
|
|
||||||
|
export default definePlugin({
|
||||||
|
extensionPoints: {
|
||||||
|
"single-page:list-item:operation:create": () => {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
priority: 21,
|
||||||
|
component: markRaw(VDropdownItem),
|
||||||
|
label: "下载到本地",
|
||||||
|
visible: true,
|
||||||
|
permissions: [],
|
||||||
|
action: async (singlePage: ListedSinglePage) => {
|
||||||
|
const { data } = await axios.get(
|
||||||
|
`/apis/api.console.halo.run/v1alpha1/single-pages/${singlePage.page.metadata.name}/head-content`
|
||||||
|
);
|
||||||
|
const blob = new Blob([data.raw], {
|
||||||
|
type: "text/plain;charset=utf-8",
|
||||||
|
});
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
const link = document.createElement("a");
|
||||||
|
link.href = url;
|
||||||
|
link.download = `${singlePage.page.spec.title}.${data.rawType}`;
|
||||||
|
link.click();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## 类型定义
|
||||||
|
|
||||||
|
### ListedSinglePage
|
||||||
|
|
||||||
|
```mdx-code-block
|
||||||
|
import ListedSinglePage from "./interface/ListedSinglePage.md";
|
||||||
|
|
||||||
|
<ListedSinglePage />
|
||||||
|
```
|
@@ -287,6 +287,7 @@ module.exports = {
|
|||||||
"developer-guide/plugin/extension-points/ui/plugin-installation-tabs-create",
|
"developer-guide/plugin/extension-points/ui/plugin-installation-tabs-create",
|
||||||
"developer-guide/plugin/extension-points/ui/theme-list-tabs-create",
|
"developer-guide/plugin/extension-points/ui/theme-list-tabs-create",
|
||||||
"developer-guide/plugin/extension-points/ui/post-list-item-operation-create",
|
"developer-guide/plugin/extension-points/ui/post-list-item-operation-create",
|
||||||
|
"developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create",
|
||||||
"developer-guide/plugin/extension-points/ui/comment-list-item-operation-create",
|
"developer-guide/plugin/extension-points/ui/comment-list-item-operation-create",
|
||||||
"developer-guide/plugin/extension-points/ui/reply-list-item-operation-create",
|
"developer-guide/plugin/extension-points/ui/reply-list-item-operation-create",
|
||||||
"developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create",
|
"developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create",
|
||||||
@@ -295,6 +296,7 @@ module.exports = {
|
|||||||
"developer-guide/plugin/extension-points/ui/theme-list-item-operation-create",
|
"developer-guide/plugin/extension-points/ui/theme-list-item-operation-create",
|
||||||
"developer-guide/plugin/extension-points/ui/plugin-list-item-field-create",
|
"developer-guide/plugin/extension-points/ui/plugin-list-item-field-create",
|
||||||
"developer-guide/plugin/extension-points/ui/post-list-item-field-create",
|
"developer-guide/plugin/extension-points/ui/post-list-item-field-create",
|
||||||
|
"developer-guide/plugin/extension-points/ui/single-page-list-item-field-create",
|
||||||
"developer-guide/plugin/extension-points/ui/user-detail-tabs-create",
|
"developer-guide/plugin/extension-points/ui/user-detail-tabs-create",
|
||||||
"developer-guide/plugin/extension-points/ui/uc-user-profile-tabs-create",
|
"developer-guide/plugin/extension-points/ui/uc-user-profile-tabs-create",
|
||||||
"developer-guide/plugin/extension-points/ui/dashboard-widgets",
|
"developer-guide/plugin/extension-points/ui/dashboard-widgets",
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 62 KiB |
Binary file not shown.
After Width: | Height: | Size: 68 KiB |
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 文章数据列表显示字段
|
title: 文章数据列表显示字段
|
||||||
description: 扩展文章数据列表显示字段 - plugin:list-item:field:create
|
description: 扩展文章数据列表显示字段 - post:list-item:field:create
|
||||||
---
|
---
|
||||||
|
|
||||||
此扩展点用于扩展文章数据列表的显示字段。
|
此扩展点用于扩展文章数据列表的显示字段。
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 文章数据列表显示字段
|
title: 文章数据列表显示字段
|
||||||
description: 扩展文章数据列表显示字段 - plugin:list-item:field:create
|
description: 扩展文章数据列表显示字段 - post:list-item:field:create
|
||||||
---
|
---
|
||||||
|
|
||||||
此扩展点用于扩展文章数据列表的显示字段。
|
此扩展点用于扩展文章数据列表的显示字段。
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 文章数据列表显示字段
|
title: 文章数据列表显示字段
|
||||||
description: 扩展文章数据列表显示字段 - plugin:list-item:field:create
|
description: 扩展文章数据列表显示字段 - post:list-item:field:create
|
||||||
---
|
---
|
||||||
|
|
||||||
此扩展点用于扩展文章数据列表的显示字段。
|
此扩展点用于扩展文章数据列表的显示字段。
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 文章数据列表显示字段
|
title: 文章数据列表显示字段
|
||||||
description: 扩展文章数据列表显示字段 - plugin:list-item:field:create
|
description: 扩展文章数据列表显示字段 - post:list-item:field:create
|
||||||
---
|
---
|
||||||
|
|
||||||
此扩展点用于扩展文章数据列表的显示字段。
|
此扩展点用于扩展文章数据列表的显示字段。
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 文章数据列表显示字段
|
title: 文章数据列表显示字段
|
||||||
description: 扩展文章数据列表显示字段 - plugin:list-item:field:create
|
description: 扩展文章数据列表显示字段 - post:list-item:field:create
|
||||||
---
|
---
|
||||||
|
|
||||||
此扩展点用于扩展文章数据列表的显示字段。
|
此扩展点用于扩展文章数据列表的显示字段。
|
||||||
|
Reference in New Issue
Block a user