From 49d970c7cfc679e32d420da80e0d59303ec70b22 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Wed, 28 Sep 2022 23:50:18 +0800 Subject: [PATCH] feat: singlePage management adds filtering support (halo-dev/console#625) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind feature /milestone 2.0 #### What this PR does / why we need it: 自定义页面管理支持筛选,适配 https://github.com/halo-dev/halo/pull/2481 #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/2469 #### Special notes for your reviewer: 测试方式: 1. Halo 需要切换到 https://github.com/halo-dev/halo/pull/2481 PR 的分支。 2. Console 需要 `pnpm install` 3. 创建多个自定义页面。 4. 测试筛选功能是否符合预期 #### Does this PR introduce a user-facing change? ```release-note 自定义页面管理支持筛选 ``` --- package.json | 2 +- pnpm-lock.yaml | 8 +- src/modules/contents/pages/SinglePageList.vue | 256 +++++++++++++++--- 3 files changed, 228 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index ac0a1eb79..2c23c8142 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@formkit/themes": "1.0.0-beta.10", "@formkit/vue": "1.0.0-beta.10", "@halo-dev/admin-shared": "workspace:*", - "@halo-dev/api-client": "^0.0.27", + "@halo-dev/api-client": "^0.0.29", "@halo-dev/components": "workspace:*", "@halo-dev/richtext-editor": "^0.0.0-alpha.7", "@tiptap/extension-character-count": "2.0.0-beta.31", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1e6d5da3..4898a93b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ importers: '@formkit/themes': 1.0.0-beta.10 '@formkit/vue': 1.0.0-beta.10 '@halo-dev/admin-shared': workspace:* - '@halo-dev/api-client': ^0.0.27 + '@halo-dev/api-client': ^0.0.29 '@halo-dev/components': workspace:* '@halo-dev/richtext-editor': ^0.0.0-alpha.7 '@iconify-json/mdi': ^1.1.33 @@ -101,7 +101,7 @@ importers: '@formkit/themes': 1.0.0-beta.10_tailwindcss@3.1.8 '@formkit/vue': 1.0.0-beta.10_jhzixbi2r7n2xnmwczrcaimaey '@halo-dev/admin-shared': link:packages/shared - '@halo-dev/api-client': 0.0.27 + '@halo-dev/api-client': 0.0.29 '@halo-dev/components': link:packages/components '@halo-dev/richtext-editor': 0.0.0-alpha.7_vue@3.2.39 '@tiptap/extension-character-count': 2.0.0-beta.31 @@ -1894,8 +1894,8 @@ packages: - windicss dev: false - /@halo-dev/api-client/0.0.27: - resolution: {integrity: sha512-ghEz442I8zPrORfCxUdxILgaieHA8v5Pr4k9urL0i19Yeqg179PjXsFHVXkmGUxMzXi5J6F/65D3Qcbq8nHB+Q==} + /@halo-dev/api-client/0.0.29: + resolution: {integrity: sha512-3wM0pEp/CSWIEwpmn3KOQUMhjnuWcZJpIpjFtq2XDj5XJio935P+ix6Va4VL/z32uxyt9pBMNW1/wHfuZQo/0A==} dev: false /@halo-dev/richtext-editor/0.0.0-alpha.7_vue@3.2.39: diff --git a/src/modules/contents/pages/SinglePageList.vue b/src/modules/contents/pages/SinglePageList.vue index 87c92d318..00c21d7d2 100644 --- a/src/modules/contents/pages/SinglePageList.vue +++ b/src/modules/contents/pages/SinglePageList.vue @@ -60,9 +60,22 @@ const checkAll = ref(false); const handleFetchSinglePages = async () => { try { loading.value = true; + + let contributors: string[] | undefined; + + if (selectedContributor.value) { + contributors = [selectedContributor.value.metadata.name]; + } + const { data } = await apiClient.singlePage.listSinglePages({ page: singlePages.value.page, size: singlePages.value.size, + visible: selectedVisibleItem.value.value, + sort: selectedSortItem.value?.sort, + publishPhase: selectedPublishPhaseItem.value.value, + sortOrder: selectedSortItem.value?.sortOrder, + keyword: keyword.value, + contributor: contributors, }); singlePages.value = data; } catch (error) { @@ -188,12 +201,109 @@ const finalStatus = (singlePage: SinglePage) => { onMounted(handleFetchSinglePages); // Filters -const selectedUser = ref(); + +interface VisibleItem { + label: string; + value?: "PUBLIC" | "INTERNAL" | "PRIVATE"; +} + +interface PublishPhaseItem { + label: string; + value?: "DRAFT" | "PENDING_APPROVAL" | "PUBLISHED"; +} + +interface SortItem { + label: string; + sort: "PUBLISH_TIME" | "CREATE_TIME"; + sortOrder: boolean; +} + +const VisibleItems: VisibleItem[] = [ + { + label: "全部", + value: undefined, + }, + { + label: "公开", + value: "PUBLIC", + }, + { + label: "内部成员可访问", + value: "INTERNAL", + }, + { + label: "私有", + value: "PRIVATE", + }, +]; + +const PublishPhaseItems: PublishPhaseItem[] = [ + { + label: "全部", + value: undefined, + }, + { + label: "已发布", + value: "PUBLISHED", + }, + { + label: "未发布", + value: "DRAFT", + }, + { + label: "待审核", + value: "PENDING_APPROVAL", + }, +]; + +const SortItems: SortItem[] = [ + { + label: "较近发布", + sort: "PUBLISH_TIME", + sortOrder: false, + }, + { + label: "较早发布", + sort: "PUBLISH_TIME", + sortOrder: true, + }, + { + label: "较近创建", + sort: "CREATE_TIME", + sortOrder: false, + }, + { + label: "较早创建", + sort: "CREATE_TIME", + sortOrder: true, + }, +]; + +const selectedContributor = ref(); +const selectedVisibleItem = ref(VisibleItems[0]); +const selectedPublishPhaseItem = ref(PublishPhaseItems[0]); +const selectedSortItem = ref(); +const keyword = ref(""); + +function handleVisibleItemChange(visibleItem: VisibleItem) { + selectedVisibleItem.value = visibleItem; + handleFetchSinglePages(); +} const handleSelectUser = (user?: User) => { - selectedUser.value = user; + selectedContributor.value = user; handleFetchSinglePages(); }; + +function handlePublishPhaseItemChange(publishPhaseItem: PublishPhaseItem) { + selectedPublishPhaseItem.value = publishPhaseItem; + handleFetchSinglePages(); +} + +function handleSortItemChange(sortItem?: SortItem) { + selectedSortItem.value = sortItem; + handleFetchSinglePages(); +}