@opentiny/tiny-engine-plugin-page 2.5.0 → 2.6.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +11 -5
- package/dist/index.js.map +1 -0
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -174,7 +174,8 @@ function ea(t, a, n, e, o, s) {
|
|
|
174
174
|
default: b(() => a[1] || (a[1] = [
|
|
175
175
|
x("span", null, "设为根元素为Body", -1)
|
|
176
176
|
])),
|
|
177
|
-
_: 1
|
|
177
|
+
_: 1,
|
|
178
|
+
__: [1]
|
|
178
179
|
}, 8, ["modelValue"]),
|
|
179
180
|
a[4] || (a[4] = x("div", { class: "input-output-div" }, "默认为div", -1))
|
|
180
181
|
]);
|
|
@@ -474,7 +475,8 @@ function ra(t, a, n, e, o, s) {
|
|
|
474
475
|
default: b(() => a[1] || (a[1] = [
|
|
475
476
|
_e("保存")
|
|
476
477
|
])),
|
|
477
|
-
_: 1
|
|
478
|
+
_: 1,
|
|
479
|
+
__: [1]
|
|
478
480
|
}, 8, ["onClick"]),
|
|
479
481
|
e.pageSettingState.isNew ? q("", !0) : (v(), L(l, {
|
|
480
482
|
key: 0,
|
|
@@ -698,7 +700,8 @@ function ga(t, a, n, e, o, s) {
|
|
|
698
700
|
default: b(() => a[1] || (a[1] = [
|
|
699
701
|
_e("保存")
|
|
700
702
|
])),
|
|
701
|
-
_: 1
|
|
703
|
+
_: 1,
|
|
704
|
+
__: [1]
|
|
702
705
|
}, 8, ["onClick"]),
|
|
703
706
|
e.pageSettingState.isNew ? q("", !0) : (v(), L(l, {
|
|
704
707
|
key: 0,
|
|
@@ -1915,7 +1918,8 @@ function yn(t, a, n, e, o, s) {
|
|
|
1915
1918
|
default: b(() => a[6] || (a[6] = [
|
|
1916
1919
|
_e(" 静态页面 ")
|
|
1917
1920
|
])),
|
|
1918
|
-
_: 1
|
|
1921
|
+
_: 1,
|
|
1922
|
+
__: [6]
|
|
1919
1923
|
}, 8, ["modelValue"]),
|
|
1920
1924
|
P(r, {
|
|
1921
1925
|
modelValue: e.pageSettingState.currentPageData.group,
|
|
@@ -1926,7 +1930,8 @@ function yn(t, a, n, e, o, s) {
|
|
|
1926
1930
|
default: b(() => a[7] || (a[7] = [
|
|
1927
1931
|
_e(" 公共页面 ")
|
|
1928
1932
|
])),
|
|
1929
|
-
_: 1
|
|
1933
|
+
_: 1,
|
|
1934
|
+
__: [7]
|
|
1930
1935
|
}, 8, ["modelValue"])
|
|
1931
1936
|
]),
|
|
1932
1937
|
_: 1
|
|
@@ -2033,3 +2038,4 @@ export {
|
|
|
2033
2038
|
rn as PageService,
|
|
2034
2039
|
Gn as default
|
|
2035
2040
|
};
|
|
2041
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/http.ts","../src/PageHistory.vue","../src/PageInputOutput.vue","../meta.js","../src/PageSetting.vue","../src/PageFolderSetting.vue","../src/Tree.vue","../src/PageTree.vue","../src/Main.vue","../src/composable/usePage.ts","../src/composable/index.ts","../src/PageGeneral.vue","../index.ts"],"sourcesContent":["/**\n * Copyright (c) 2023 - present TinyEngine Authors.\n * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\n\nimport { getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register'\n\n// 页面管理 -- 获取页面列表\nexport const fetchPageList = (appId) => getMetaApi(META_SERVICE.Http).get(`/app-center/api/pages/list/${appId}`)\n\n// 页面管理 -- 获取页面详情\nexport const fetchPageDetail = (pageId) => getMetaApi(META_SERVICE.Http).get(`/app-center/api/pages/detail/${pageId}`)\n\n// 页面管理 -- 删除页面\nexport const requestDeletePage = (pageId) => getMetaApi(META_SERVICE.Http).get(`/app-center/api/pages/delete/${pageId}`)\n\n// 页面管理 -- 新增页面\nexport const requestCreatePage = (params) => getMetaApi(META_SERVICE.Http).post('/app-center/api/pages/create', params)\n\n// 页面管理 -- 保存页面\nexport const handleRouteHomeUpdate = (pageId, params) =>\n getMetaApi(META_SERVICE.Http).post(`/app-center/api/pages/update/${pageId}`, params)\n\n// 页面管理 -- 复制页面\nexport const requestCopyPage = (params) => getMetaApi(META_SERVICE.Http).post('/app-center/api/pages/copy', params)\n\n// 页面管理 -- 获取页面历史备份列表\nexport const fetchPageHistory = (pageId) =>\n getMetaApi(META_SERVICE.Http).get(`/app-center/api/pages/histories?page=${pageId}`)\n\n// 页面管理 -- 还原历史备份\nexport const requestRestorePageHistory = (params) =>\n getMetaApi(META_SERVICE.Http).post('/app-center/api/pageHistory/restore', params)\n\n// 页面管理 -- 查看历史备份详情\nexport const fetchHistoryDetail = (pageId) =>\n getMetaApi(META_SERVICE.Http).get(`/app-center/api/pages/histories/${pageId}`)\n\nexport const requestUpdatePage = (pageId, params) =>\n getMetaApi(META_SERVICE.Http).post(`/app-center/api/pages/update/${pageId}`, params)\n\nexport default {\n fetchPageList,\n fetchPageDetail,\n requestDeletePage,\n requestCreatePage,\n requestCopyPage,\n fetchPageHistory,\n fetchHistoryDetail,\n handleRouteHomeUpdate,\n requestRestorePageHistory,\n requestUpdatePage\n}\n","<template>\n <block-history-list :history=\"list\" @preview=\"previewHistory\" @restore=\"restoreHistory\"></block-history-list>\n</template>\n\n<script lang=\"ts\">\nimport { ref, watchEffect } from 'vue'\nimport { BlockHistoryList } from '@opentiny/tiny-engine-common'\nimport { previewPage } from '@opentiny/tiny-engine-common/js/preview'\nimport { usePage, useBlock, useModal, getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register'\nimport { fetchPageHistory } from './http'\n\nexport default {\n components: {\n BlockHistoryList\n },\n props: {\n curPageData: {\n type: Object,\n default: () => ({})\n }\n },\n emits: ['restorePage'],\n setup(props, { emit }) {\n const { pageSettingState, getFamily } = usePage()\n const { getDateFromNow } = useBlock()\n const { confirm } = useModal()\n const list = ref([])\n\n const getHistoryList = (pageId) => {\n const { id, version } = getMetaApi(META_SERVICE.GlobalService).getBaseInfo()\n const params = version ? `&app=${id}&version=${version}` : ''\n\n if (pageId) {\n fetchPageHistory(pageId + params).then((data) => {\n if (!data) {\n return\n }\n data.forEach((item) => {\n item.backupTitle = item.message\n item.backupTime = getDateFromNow(new Date(item.time))\n })\n list.value = data.reverse()\n })\n } else {\n list.value = []\n }\n }\n\n watchEffect(() => {\n const pageId = pageSettingState.currentPageData?.id || ''\n getHistoryList(pageId)\n })\n\n const previewHistory = async (item) => {\n if (item) {\n const params = {\n ...item,\n id: Number(item.page),\n history: item.id\n }\n params.ancestors = await getFamily(params)\n previewPage(params, true)\n }\n }\n\n const restoreHistory = (item) => {\n confirm({\n title: '提示',\n message: '您即将还原历史页面,是否继续还原?',\n exec: () => {\n emit('restorePage', item)\n }\n })\n }\n\n return {\n list,\n previewHistory,\n restoreHistory\n }\n }\n}\n</script>\n","<template>\n <div class=\"input-or-output\">\n <meta-code-editor\n :modelValue=\"inputValue\"\n title=\"输入配置\"\n button-text=\"输入配置\"\n language=\"json\"\n :buttonShowContent=\"hasContent(inputValue)\"\n single\n @save=\"saveInputValue\"\n >\n <template #icon>\n <svg-icon class=\"edit-btn-icon\" name=\"to-edit\"></svg-icon>\n </template>\n </meta-code-editor>\n <div class=\"input-output-tips\">传递给页面的参数(类似组件的输入属性)</div>\n <meta-code-editor\n :modelValue=\"outputValue\"\n title=\"输出配置\"\n button-text=\"输出配置\"\n language=\"json\"\n :buttonShowContent=\"hasContent(outputValue)\"\n single\n @save=\"saveOutputValue\"\n >\n <template #icon>\n <svg-icon class=\"edit-btn-icon\" name=\"to-edit\"></svg-icon>\n </template>\n </meta-code-editor>\n <div class=\"input-output-div\">页面传递出的事件(类似组件触发的输出事件)</div>\n\n <tiny-checkbox class=\"selectHome\" v-model=\"pageSettingState.currentPageData.isBody\"\n ><span>设为根元素为Body</span>\n </tiny-checkbox>\n <div class=\"input-output-div\">默认为div</div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { ref, watchEffect, computed } from 'vue'\nimport { Checkbox } from '@opentiny/vue'\nimport { MetaCodeEditor } from '@opentiny/tiny-engine-common'\nimport { usePage, useNotify } from '@opentiny/tiny-engine-meta-register'\n\nexport default {\n components: {\n MetaCodeEditor,\n TinyCheckbox: Checkbox\n },\n setup() {\n const inputValue = ref('')\n const outputValue = ref('')\n const { pageSettingState } = usePage()\n const currentPageData = computed(() => pageSettingState.currentPageData)\n watchEffect(() => {\n inputValue.value = pageSettingState.currentPageData['page_content']?.inputs || ''\n outputValue.value = pageSettingState.currentPageData['page_content']?.outputs || ''\n })\n\n const saveInputValue = (data) => {\n try {\n const inputsData = JSON.parse(data.content)\n inputValue.value = data.content\n currentPageData.value['page_content'].inputs = inputsData\n } catch (err) {\n useNotify({\n title: '输入配置保存失败(必须符合JSON格式)',\n message: `${err?.message || err}`,\n type: 'error'\n })\n }\n }\n const saveOutputValue = (data) => {\n try {\n const outputsData = JSON.parse(data.content)\n outputValue.value = data.content\n currentPageData.value['page_content'].outputs = outputsData\n } catch (err) {\n useNotify({\n title: '输出配置保存失败(必须符合JSON格式)',\n message: `${err?.message || err}`,\n type: 'error'\n })\n }\n }\n\n const hasContent = (value) =>\n (Array.isArray(value) && value.length > 0) || (typeof value === 'object' && Object.keys(value).length > 0)\n\n return {\n inputValue,\n outputValue,\n saveInputValue,\n saveOutputValue,\n pageSettingState,\n hasContent\n }\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n.input-or-output {\n color: var(--te-page-manage-input-or-output-text-color);\n .life-cycle-alert {\n color: var(--te-page-manage-life-cycle-alert-text-color);\n height: 28px;\n padding: 6px;\n border: 0;\n font-size: 11px;\n margin-bottom: 12px;\n :deep(.tiny-alert__close) {\n top: 7px;\n }\n }\n\n .input-output-tips,\n .input-output-div {\n color: var(--te-page-manage-life-cycle-alert-text-color);\n margin-top: 4px;\n height: 16px;\n line-height: 16px;\n }\n .input-output-tips {\n margin-bottom: 12px;\n }\n .selectHome {\n margin-top: 12px;\n }\n .edit-btn-icon {\n color: var(--te-page-manage-icon-color);\n margin-right: 6px;\n }\n :deep(.edit-btn) {\n flex: none;\n display: flex;\n align-items: center;\n }\n}\n</style>\n","export default {\n id: 'engine.plugins.appmanage',\n title: '页面',\n type: 'plugins',\n icon: 'plugin-icon-page',\n align: 'leftTop'\n}\n","<template>\n <plugin-setting\n v-if=\"isShow\"\n :fixed-name=\"PLUGIN_NAME.AppManage\"\n :align=\"align\"\n :title=\"state.title\"\n class=\"page-plugin-setting\"\n >\n <template #header>\n <button-group>\n <tiny-button type=\"primary\" @click=\"savePageSetting\">保存</tiny-button>\n <svg-button\n v-if=\"!pageSettingState.isNew\"\n name=\"text-copy-page\"\n placement=\"bottom\"\n tips=\"复制页面\"\n @click=\"copyPage\"\n ></svg-button>\n <svg-button v-if=\"!pageSettingState.isNew\" name=\"delete\" tips=\"删除页面\" @click=\"deletePage\"></svg-button>\n <svg-button name=\"close\" @click=\"cancelPageSetting\"></svg-button>\n </button-group>\n </template>\n\n <template #content>\n <div class=\"page-setting-content\">\n <tiny-collapse v-model=\"state.activeName\" class=\"page-setting-collapse\">\n <tiny-collapse-item title=\"基本设置\" :name=\"PAGE_SETTING_SESSION.general\">\n <component :is=\"pageGeneral\" ref=\"pageGeneralRef\" :isFolder=\"isFolder\"></component>\n </tiny-collapse-item>\n\n <tiny-collapse-item\n class=\"base-setting\"\n v-if=\"pageSettingState.currentPageData.group !== 'public'\"\n title=\"输入输出\"\n :name=\"PAGE_SETTING_SESSION.inputOutput\"\n >\n <page-input-output></page-input-output>\n </tiny-collapse-item>\n <tiny-collapse-item\n class=\"input-output\"\n v-if=\"pageSettingState.currentPageData.group !== 'public'\"\n title=\"页面生命周期配置\"\n :name=\"PAGE_SETTING_SESSION.lifeCycles\"\n >\n <div class=\"life-cycles-container\">\n <life-cycles\n :bindLifeCycles=\"pageSettingState.currentPageData.page_content?.lifeCycles\"\n @updatePageLifeCycles=\"updatePageLifeCycles\"\n ></life-cycles>\n </div>\n </tiny-collapse-item>\n\n <tiny-collapse-item class=\"history-source\" title=\"历史备份\" :name=\"PAGE_SETTING_SESSION.history\">\n <page-history @restorePage=\"restorePage\"></page-history>\n </tiny-collapse-item>\n </tiny-collapse>\n </div>\n </template>\n </plugin-setting>\n</template>\n\n<script lang=\"jsx\">\nimport { reactive, ref, computed, onActivated, onDeactivated } from 'vue'\nimport { Button, Collapse, CollapseItem, Input } from '@opentiny/vue'\nimport { PluginSetting, ButtonGroup, SvgButton, LifeCycles } from '@opentiny/tiny-engine-common'\nimport {\n useLayout,\n usePage,\n useCanvas,\n useModal,\n useNotify,\n getMergeRegistry,\n getMetaApi,\n META_SERVICE,\n useMessage\n} from '@opentiny/tiny-engine-meta-register'\nimport { extend, isEqual } from '@opentiny/vue-renderless/common/object'\nimport { constants } from '@opentiny/tiny-engine-utils'\nimport { isVsCodeEnv } from '@opentiny/tiny-engine-common/js/environments'\nimport { handlePageUpdate } from '@opentiny/tiny-engine-common/js/http'\nimport { generatePage } from '@opentiny/tiny-engine-common/js/vscodeGenerateFile'\nimport PageHistory from './PageHistory.vue'\nimport PageInputOutput from './PageInputOutput.vue'\nimport meta from '../meta'\nimport http from './http'\n\nconst { COMPONENT_NAME } = constants\nconst isShow = ref(false)\n\nexport const openPageSettingPanel = () => {\n isShow.value = true\n}\n\nexport const closePageSettingPanel = () => {\n isShow.value = false\n\n const { resetPageData } = usePage()\n\n resetPageData()\n}\n\nconst PAGE_SETTING_SESSION = {\n general: 'general',\n inputOutput: 'inputOutput',\n lifeCycles: 'lifeCycles',\n history: 'history'\n}\n\nexport default {\n components: {\n TinyButton: Button,\n TinyCollapse: Collapse,\n TinyCollapseItem: CollapseItem,\n PageInputOutput,\n LifeCycles,\n PageHistory,\n PluginSetting,\n SvgButton,\n ButtonGroup\n },\n props: {\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n emits: ['openNewPage'],\n setup(props, { emit }) {\n const { requestCreatePage, requestDeletePage } = http\n const {\n getDefaultPage,\n pageSettingState,\n changeTreeData,\n isCurrentDataSame,\n initCurrentPageData,\n isTemporaryPage,\n STATIC_PAGE_GROUP_ID,\n updatePageSettingAfterSave\n } = usePage()\n const { pageState, initData } = useCanvas()\n const { confirm } = useModal()\n const registry = getMergeRegistry(meta.type, meta.id)\n const pageGeneral = registry.components.PageGeneral\n const beforeCreatePage = registry?.options?.beforeCreatePage\n const pageGeneralRef = ref(null)\n\n const { PLUGIN_NAME, getPluginByLayout } = useLayout()\n const align = computed(() => getPluginByLayout(PLUGIN_NAME.AppManage))\n const { subscribe, unsubscribe } = useMessage()\n\n // 初始化订阅\n let subscriber = null\n\n // 组件激活时订阅\n onActivated(() => {\n subscriber = subscribe({\n topic: 'page-saved',\n callback: () => {\n // 当收到页面保存事件时,更新页面设置状态\n updatePageSettingAfterSave()\n }\n })\n })\n\n // 组件卸载或失活时取消订阅\n onDeactivated(() => {\n if (subscriber) {\n unsubscribe(subscriber)\n }\n })\n\n const state = reactive({\n activeName: Object.values(PAGE_SETTING_SESSION),\n title: '页面设置',\n historyMessage: ''\n })\n\n const cancelPageSetting = () => {\n if (isEqual(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)) {\n closePageSettingPanel()\n } else {\n confirm({\n title: '提示',\n message: '您即将使用未保存的更改关闭此页。是否要在关闭之前放弃这些更改?',\n exec: () => {\n if (!pageSettingState.isNew) {\n changeTreeData(pageSettingState.oldParentId, pageSettingState.currentPageData.parentId)\n Object.assign(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)\n }\n closePageSettingPanel()\n }\n })\n }\n }\n\n const createPage = async () => {\n const { page_content, ...other } = getDefaultPage()\n const { page_content: page_content_state, ...pageSettingStateOther } = pageSettingState.currentPageData\n const createParams = {\n ...other,\n ...pageSettingStateOther,\n page_content: {\n ...page_content,\n ...page_content_state,\n fileName: pageSettingState.currentPageData.name\n },\n app: getMetaApi(META_SERVICE.GlobalService).getBaseInfo().id,\n isPage: true\n }\n\n if (createParams.id) {\n delete createParams.id\n delete createParams._id\n }\n if (beforeCreatePage) {\n await beforeCreatePage(createParams)\n }\n\n try {\n const data = await requestCreatePage(createParams)\n\n await pageSettingState.updateTreeData()\n pageSettingState.isNew = false\n isTemporaryPage.saved = false\n emit('openNewPage', data)\n closePageSettingPanel()\n useLayout().closePlugin()\n useNotify({\n type: 'success',\n message: '新建页面成功!'\n })\n if (isVsCodeEnv) {\n generatePage(data)\n }\n } catch (err) {\n useNotify({\n type: 'error',\n title: '新建页面失败',\n message: JSON.stringify(err?.message || err)\n })\n }\n }\n\n const updatePage = (id, params, isUpdateTree = true) => {\n const routerChange = pageSettingState.currentPageDataCopy.route !== pageSettingState.currentPageData.route\n const isCurEditPage = pageState?.currentPage?.id === id\n const updateParams = {\n id,\n params,\n routerChange,\n isCurEditPage,\n isUpdateTree\n }\n\n return handlePageUpdate(updateParams)\n }\n\n const restorePage = (pageData) => {\n const currentData = {\n ...pageData,\n id: pageData.page\n }\n\n const unnecessaryFields = ['page', 'backupTime', 'backupTitle', 'time']\n unnecessaryFields.forEach((key) => delete currentData[key])\n\n const params = {\n ...pageSettingState.currentPageData,\n ...currentData,\n message: '还原页面'\n }\n\n updatePage(currentData.id, params).then((data) => {\n // 还原的页面是当前页,需要同步更新画布\n if (pageState?.currentPage?.id === data?.id) {\n initData(data.page_content, data)\n }\n initCurrentPageData(data)\n })\n }\n\n const editPage = async () => {\n // 更新页面\n const { id, name, page_content } = pageSettingState.currentPageData\n const params = {\n ...pageSettingState.currentPageData,\n page_content: {\n ...page_content,\n fileName: name\n }\n }\n\n const res = await updatePage(id, params)\n\n initCurrentPageData(res)\n }\n\n const updatePageLifeCycles = (val) => {\n if (!val) {\n return\n }\n\n const pageContent = pageSettingState.currentPageData.page_content\n\n pageContent.lifeCycles = {\n ...(pageContent.lifeCycles || {}),\n ...val\n }\n }\n\n const copyPageData = () => {\n const data = pageSettingState.currentPageData\n const copyData = extend(true, {}, data)\n\n pageSettingState.isNew = true\n copyData.name = `${copyData.name}Copy`\n copyData.route = `${copyData.route}Copy`\n pageSettingState.currentPageData = copyData\n pageSettingState.currentPageDataCopy = extend(true, {}, copyData)\n pageSettingState.defaultPage = null\n }\n\n const copyPage = () => {\n if (!isCurrentDataSame()) {\n confirm({\n title: '提示',\n message: '您即将复制的页面有更改未保存,是否确定跳过更改直接复制?',\n exec: () => {\n changeTreeData(pageSettingState.oldParentId, pageSettingState.currentPageData.parentId)\n Object.assign(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)\n copyPageData()\n }\n })\n } else {\n copyPageData()\n }\n }\n\n const settingDefaultPage = async () => {\n const params = { ...pageSettingState.defaultPage, isDefault: true }\n updatePage(pageSettingState.defaultPage?.id, params, false).then((res) => {\n if (res) {\n editPage()\n }\n })\n }\n\n const createHistoryMessage = () => {\n if (pageSettingState.isNew) {\n pageSettingState.currentPageData.message = 'Page auto save'\n createPage()\n } else {\n const title = '创建历史备份信息'\n const messageRender = {\n render: () => <Input placeholder=\"历史备份信息\" v-model={state.historyMessage}></Input>\n }\n const exec = () => {\n pageSettingState.currentPageData.message = state.historyMessage.trim() || 'Page auto save'\n if (pageSettingState.defaultPage?.id) {\n settingDefaultPage()\n } else {\n editPage()\n }\n state.historyMessage = ''\n }\n\n confirm({ title, message: messageRender, exec })\n }\n }\n\n const savePageSetting = () => {\n pageGeneralRef.value.validGeneralForm().then(createHistoryMessage)\n }\n\n const collectAllPage = (staticPageList = []) => {\n if (!Array.isArray(staticPageList)) {\n return []\n }\n\n const pageList = []\n\n staticPageList.forEach((pageItem) => {\n if (pageItem?.isPage) {\n pageList.push(pageItem)\n\n return\n }\n\n if (!pageItem?.isPage && pageItem?.children?.length) {\n pageList.push(...collectAllPage(pageItem.children))\n }\n })\n\n return pageList\n }\n\n const deletePage = () => {\n if (pageSettingState.treeDataMapping[pageSettingState.currentPageData.id]?.children?.length) {\n useNotify({\n type: 'error',\n message: '此页面存在子页面或子文件夹,不能删除!'\n })\n\n return\n }\n\n confirm({\n title: '提示',\n message: '您是否要删除页面?',\n exec: () => {\n const id = pageSettingState.currentPageData?.id || ''\n requestDeletePage(id)\n .then(() => {\n pageSettingState.updateTreeData().then((pages) => {\n if (pageState?.currentPage?.id !== id) {\n return\n }\n\n const staticPageList = (pages || []).find(({ groupId }) => groupId === STATIC_PAGE_GROUP_ID)?.data || []\n const pageList = collectAllPage(staticPageList)\n\n const pageHome = pageList.find((page) => page.isHome)\n const firstPage = pageList?.[0]\n const defaultPage = {\n componentName: COMPONENT_NAME.Page\n }\n\n emit('openNewPage', pageHome || firstPage || defaultPage)\n })\n\n closePageSettingPanel()\n useNotify({ message: '删除页面成功!', type: 'success' })\n })\n .catch(() => {\n useNotify({ message: '删除页面失败!', type: 'error' })\n })\n }\n })\n }\n\n return {\n align,\n PLUGIN_NAME,\n state,\n isShow,\n savePageSetting,\n copyPage,\n pageSettingState,\n pageGeneral,\n pageGeneralRef,\n deletePage,\n cancelPageSetting,\n closePageSettingPanel,\n updatePageLifeCycles,\n restorePage,\n PAGE_SETTING_SESSION\n }\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n.block-add-content {\n display: flex;\n flex-direction: column;\n height: calc(100% - 45px);\n}\n\n.page-plugin-setting {\n :deep(.plugin-setting-header) {\n border: 0;\n }\n\n :deep(.plugin-setting-content) {\n padding: 0 0 16px 0;\n }\n\n :deep(.tiny-collapse) {\n border-bottom: 0;\n }\n}\n\n.page-setting-collapse {\n :deep(.tiny-collapse-item__header) {\n &,\n &.is-active {\n &::before {\n border: none;\n }\n }\n\n .svg-icon {\n margin-right: 6px;\n }\n }\n :deep(.tiny-collapse-item__content) {\n padding: 0 12px 12px;\n }\n}\n</style>\n","<template>\n <plugin-setting\n v-if=\"isShow\"\n :fixed-name=\"PLUGIN_NAME.AppManage\"\n :align=\"align\"\n :title=\"state.title\"\n class=\"pageFolder-plugin-setting\"\n >\n <template #header>\n <button-group>\n <tiny-button type=\"primary\" @click=\"saveFolderSetting\">保存</tiny-button>\n <svg-button\n v-if=\"!pageSettingState.isNew\"\n name=\"delete\"\n placement=\"bottom\"\n tips=\"删除\"\n @click=\"deleteFolder\"\n ></svg-button>\n <svg-button class=\"close-plugin-setting-icon\" name=\"close\" @click=\"closeFolderSetting\"></svg-button>\n </button-group>\n </template>\n\n <template #content>\n <div class=\"page-setting-content\">\n <tiny-collapse v-model=\"state.activeName\">\n <tiny-collapse-item title=\"基本设置\" name=\"folderGeneralRef\">\n <component :is=\"pageGeneral\" ref=\"folderGeneralRef\" :isFolder=\"isFolder\"></component>\n </tiny-collapse-item>\n </tiny-collapse>\n </div>\n </template>\n </plugin-setting>\n</template>\n\n<script lang=\"ts\">\nimport { reactive, ref, computed } from 'vue'\nimport { Button, Collapse, CollapseItem } from '@opentiny/vue'\nimport { PluginSetting, SvgButton, ButtonGroup } from '@opentiny/tiny-engine-common'\nimport {\n usePage,\n useLayout,\n useModal,\n useNotify,\n getMergeRegistry,\n getMetaApi,\n META_SERVICE\n} from '@opentiny/tiny-engine-meta-register'\nimport { isEqual } from '@opentiny/vue-renderless/common/object'\nimport throttle from '@opentiny/vue-renderless/common/deps/throttle'\nimport meta from '../meta'\nimport http from './http'\n\nconst isShow = ref(false)\nexport const openFolderSettingPanel = () => {\n isShow.value = true\n}\n\nexport const closeFolderSettingPanel = () => {\n isShow.value = false\n\n const { resetPageData } = usePage()\n\n resetPageData()\n}\n\nexport default {\n components: {\n TinyButton: Button,\n TinyCollapse: Collapse,\n TinyCollapseItem: CollapseItem,\n PluginSetting,\n SvgButton,\n ButtonGroup\n },\n props: {\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n setup() {\n const state = reactive({\n activeName: ['folderGeneralRef'],\n title: '文件夹设置'\n })\n const { requestCreatePage, requestUpdatePage, requestDeletePage } = http\n const { pageSettingState, changeTreeData } = usePage()\n const { confirm } = useModal()\n const registry = getMergeRegistry(meta.type, meta.id)\n const pageGeneral = registry.components.PageGeneral\n const folderGeneralRef = ref(null)\n\n const { PLUGIN_NAME, getPluginByLayout } = useLayout()\n const align = computed(() => getPluginByLayout(PLUGIN_NAME.AppManage))\n\n const closeFolderSetting = () => {\n if (isEqual(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)) {\n closeFolderSettingPanel()\n } else {\n confirm({\n title: '提示',\n message: '您即将使用未保存的更改关闭此页。是否要在关闭之前放弃这些更改?',\n exec: () => {\n if (!pageSettingState.isNew) {\n changeTreeData(pageSettingState.oldParentId, pageSettingState.currentPageData.parentId)\n Object.assign(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)\n }\n closeFolderSettingPanel()\n }\n })\n }\n }\n\n const createFolder = () => {\n const data = pageSettingState.currentPageData\n const createParams = {\n ...data,\n app: getMetaApi(META_SERVICE.GlobalService).getBaseInfo().id,\n isPage: false\n }\n\n requestCreatePage(createParams)\n .then(() => {\n pageSettingState.updateTreeData()\n pageSettingState.isNew = false\n closeFolderSettingPanel()\n useNotify({\n type: 'success',\n message: '新建文件夹成功!'\n })\n })\n .catch((error) => {\n useNotify({\n type: 'error',\n title: '新建文件夹失败',\n message: JSON.stringify(error?.message || error)\n })\n })\n }\n\n const updateFolder = () => {\n const { id } = pageSettingState.currentPageData\n\n requestUpdatePage(id, { ...pageSettingState.currentPageData, page_content: null })\n .then(() => {\n pageSettingState.updateTreeData()\n pageSettingState.isNew = false\n closeFolderSettingPanel()\n useNotify({\n type: 'success',\n message: '更新文件夹成功!'\n })\n })\n .catch((error) => {\n useNotify({\n type: 'error',\n title: '更新文件夹失败',\n message: JSON.stringify(error?.message || error)\n })\n })\n }\n\n const saveFolderSetting = () => {\n folderGeneralRef.value.validGeneralForm().then(() => {\n if (pageSettingState.isNew) {\n createFolder()\n } else {\n updateFolder()\n }\n })\n }\n\n const deleteFolder = () => {\n if (pageSettingState.treeDataMapping[pageSettingState.currentPageData.id]?.children?.length) {\n useNotify({\n type: 'error',\n message: '此文件夹不是空文件夹,不能删除!'\n })\n\n return\n }\n\n confirm({\n title: '提示',\n message: '您是否要删除文件夹?',\n exec: () => {\n const id = pageSettingState.currentPageData?.id || ''\n\n requestDeletePage(id)\n .then(() => {\n pageSettingState.updateTreeData()\n closeFolderSettingPanel()\n useNotify({\n type: 'success',\n message: '删除文件夹成功!'\n })\n })\n .catch((error) => {\n useNotify({\n type: 'success',\n title: '删除文件夹失败!',\n message: JSON.stringify(error?.message || error)\n })\n })\n }\n })\n }\n\n return {\n align,\n PLUGIN_NAME,\n saveFolderSetting,\n deleteFolder: throttle(5000, true, deleteFolder),\n pageGeneral,\n folderGeneralRef,\n closeFolderSettingPanel,\n isShow,\n state,\n pageSettingState,\n closeFolderSetting\n }\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n.pageFolder-plugin-setting {\n :deep(.plugin-setting-header) {\n border: 0;\n }\n :deep(.plugin-setting-content) {\n padding: 0 0 16px 0;\n }\n\n :deep(.tiny-collapse) {\n border-bottom: 0;\n }\n}\n</style>\n","<template>\n <div\n :class=\"['draggable-tree', 'border-transparent', { 'hover-border-color': hoveringNodeId === rootId }]\"\n @dragover=\"handleContainerDragOver\"\n @dragenter=\"handleContainerDragOver\"\n @dragleave=\"handleContainerDragLeave\"\n @drop=\"handleDrop($event, { id: rootId })\"\n >\n <div\n v-for=\"(node, rowIndex) of filteredNodesWithAncestors\"\n :class=\"[\n 'row',\n 'border-transparent',\n {\n active: String(active) === String(node.id),\n ['hover-border-color']: hoveringNodeId === node.id\n }\n ]\"\n :key=\"node.id\"\n :draggable=\"draggable ? 'true' : undefined\"\n @dragstart=\"handleDragStart($event, node)\"\n @dragover=\"handleDragOver($event, node)\"\n @dragenter=\"handleDragOver($event, node)\"\n @drop=\"handleDrop($event, node)\"\n @dragend=\"handleDragEnd\"\n >\n <div class=\"content\" @click=\"handleClickRow(node)\">\n <layer-lines :line-data=\"layerLine[rowIndex]\" :level=\"node.level\"></layer-lines>\n <div class=\"prefix-icon\">\n <svg-icon v-if=\"node.rawData.isPage\" name=\"text-page-common\"></svg-icon>\n <svg-icon v-else name=\"text-page-folder-closed\"></svg-icon>\n </div>\n <label>{{ node.label }}</label>\n </div>\n <slot name=\"row-suffix\" :node=\"node\"></slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, defineEmits, defineProps, ref } from 'vue'\nimport LayerLines from './LayerLines.vue'\n\nconst props = defineProps({\n data: {\n type: Object,\n required: true\n },\n idKey: {\n type: String,\n default: 'id'\n },\n labelKey: {\n type: String,\n default: 'label'\n },\n childrenKey: {\n type: String,\n default: 'children'\n },\n active: {\n type: String\n },\n filterValue: {\n type: String,\n default: ''\n },\n rootId: {\n type: [String, Number],\n default: 'root'\n },\n draggable: {\n type: Boolean,\n default: false\n }\n})\n\nconst emit = defineEmits(['clickRow', 'moveNode'])\n\nconst flattenTreeData = (node, parentId, level = 0) => {\n const { idKey, labelKey, childrenKey } = props\n\n const currentNode = {\n id: node[idKey],\n label: node[labelKey],\n parentId,\n level,\n rawData: node\n }\n const result = [currentNode]\n\n const children = node[childrenKey]\n\n if (Array.isArray(children)) {\n for (const child of children) {\n result.push(...flattenTreeData(child, currentNode.id, level + 1))\n }\n }\n\n return result\n}\n\nconst nodes = computed(() => {\n return flattenTreeData({ [props.idKey]: props.rootId, [props.childrenKey]: props.data }).slice(1)\n})\n\nconst nodesMap = computed(() => {\n return nodes.value.reduce((result, node) => {\n result[node.id] = node\n return result\n }, {})\n})\n\nconst filteredNodes = computed(() => {\n return nodes.value.filter((node) => node.label.toLowerCase().includes(props.filterValue.toLowerCase()))\n})\n\nconst getAncestorIds = (nodeId) => {\n const currentNode = nodesMap.value[nodeId]\n\n if (!currentNode || !currentNode.parentId) {\n return []\n }\n\n const ancestors = getAncestorIds(currentNode.parentId)\n\n ancestors.push(currentNode.parentId)\n\n return ancestors\n}\n\nconst filteredNodesWithAncestors = computed(() => {\n const idSet = new Set()\n\n for (const node of filteredNodes.value) {\n idSet.add(node.id)\n for (const id of getAncestorIds(node.id)) {\n idSet.add(id)\n }\n }\n\n return nodes.value.filter((node) => idSet.has(node.id))\n})\n\nconst lines = {\n node: 0b01, // └\n layer: 0b10, // │\n layerNode: 0b11 // ├\n}\n\nconst layerLine = computed(() => {\n const result = {}\n\n const nodes = filteredNodesWithAncestors.value\n\n for (const [index, node] of nodes.entries()) {\n result[index] = result[index] || {}\n result[index][node.level - 1] = lines.node\n\n if (node.parentId !== props.rootId) {\n const parentIndex = nodes.findIndex((item) => item.id === node.parentId)\n for (let i = parentIndex + 1; i < index; i++) {\n result[i][node.level - 1] = (result[i][node.level - 1] || 0) | lines.layer\n }\n }\n }\n\n return result\n})\n\nconst handleClickRow = (node) => {\n emit('clickRow', node)\n}\n\nconst draggedNode = ref(null)\nconst hoveringNodeId = ref(null)\n\nconst handleDragStart = (event, node) => {\n if (!props.draggable) {\n return\n }\n\n draggedNode.value = node\n}\n\n// dragover和dragenter事件回调函数都为handleDragOver。跨行拖动时,禁止拖拽图标可能会闪一下,所以将dragenter事件也加上回调函数\nconst handleDragOver = (event, node) => {\n if (!props.draggable) {\n return\n }\n\n const isDescendant = getAncestorIds(node.id).includes(draggedNode.value.id)\n\n if (!isDescendant) {\n // 阻止默认行为以允许放置\n event.preventDefault()\n hoveringNodeId.value = node.id\n } else {\n hoveringNodeId.value = null\n }\n}\n\nconst handleDrop = (event, node) => {\n event.preventDefault()\n\n const dragged = draggedNode.value\n draggedNode.value = null\n\n if (!dragged) {\n return\n }\n\n const isDescendant = getAncestorIds(node.id).includes(dragged.id)\n\n if (!isDescendant && dragged.id !== node.id && dragged.parentId !== node.id) {\n emit('moveNode', dragged, node)\n }\n}\n\nconst handleDragEnd = () => {\n hoveringNodeId.value = null\n}\n\nconst handleContainerDragOver = (event) => {\n if (!props.draggable) {\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n event.preventDefault()\n // 拖拽到根节点\n hoveringNodeId.value = props.rootId\n}\n\nconst handleContainerDragLeave = (event) => {\n if (!props.draggable) {\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n // drag时光标超出了drag zone,清除悬停框\n hoveringNodeId.value = null\n}\n</script>\n\n<style lang=\"less\" scoped>\n.draggable-tree {\n padding: 6px 0;\n .row {\n height: 24px;\n padding: 0 12px;\n margin: 0 -1px;\n display: flex;\n align-items: center;\n &,\n * {\n cursor: pointer;\n }\n &:hover {\n background-color: var(--te-page-manage-draggable-row-bg-color-hover);\n }\n\n .content {\n flex: 1;\n display: flex;\n align-items: center;\n overflow: hidden;\n }\n label {\n flex: 1;\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .prefix-icon {\n display: flex;\n align-items: center;\n margin-right: 8px;\n svg {\n color: var(--te-page-manage-draggable-icon-color);\n }\n }\n &.active {\n background-color: var(--te-page-manage-draggable-row-bg-color-hover);\n color: var(--te-page-manage-draggable-text-color);\n svg {\n color: var(--te-page-manage-draggable-icon-color);\n }\n }\n }\n}\n.border-transparent {\n border: 1px solid transparent;\n}\n.hover-border-color {\n border-color: var(--te-page-manage-draggable-border-color);\n overflow: hidden;\n}\n</style>\n","<template>\n <div class=\"app-manage-search\">\n <tiny-search v-model=\"state.pageSearchValue\" clearable placeholder=\"搜索\">\n <template #prefix>\n <tiny-icon-search />\n </template>\n </tiny-search>\n </div>\n\n <tiny-collapse v-model=\"state.collapseValue\" class=\"page-manage-collapse lowcode-scrollbar\">\n <tiny-collapse-item v-for=\"(groupItem, index) in pageSettingState.pages\" :key=\"index\" :name=\"groupItem.groupId\">\n <template #title>\n <span class=\"title\">{{ groupItem.groupName }}</span>\n </template>\n <div class=\"app-manage-tree\">\n <draggable-tree\n :data=\"groupItem.data\"\n label-key=\"name\"\n :active=\"state.currentNodeData.id\"\n :filter-value=\"state.pageSearchValue\"\n :root-id=\"pageSettingState.ROOT_ID\"\n :draggable=\"groupItem.groupId === STATIC_PAGE_GROUP_ID\"\n @click-row=\"handleClickRow\"\n @move-node=\"handleMoveNode\"\n >\n <template #row-suffix=\"{ node }\">\n <div :class=\"['actions']\">\n <svg-button v-if=\"isPageLocked(node.rawData)\" name=\"locked\" :hoverBgColor=\"false\"></svg-button>\n <svg-button v-if=\"node.rawData.isHome\" name=\"home\" :hoverBgColor=\"false\"></svg-button>\n <tiny-popover\n :ref=\"(el) => setPopoverRef(el, node.id)\"\n placement=\"bottom-start\"\n :visible-arrow=\"false\"\n popper-class=\"page-tree-row-operation-list\"\n >\n <div class=\"operation-list\">\n <div\n v-for=\"(operation, index) in getRowOperations(groupItem.groupId, node)\"\n :key=\"index\"\n :class=\"[operation.type === 'divider' ? 'divider' : 'item'].concat(operation.class || [])\"\n @click=\"operation.action?.(node)\"\n >\n {{ operation.label }}\n </div>\n </div>\n <template #reference>\n <svg-button name=\"ellipsis\" class=\"auto-hidden\" :hoverBgColor=\"false\"></svg-button>\n </template>\n </tiny-popover>\n </div>\n </template>\n </draggable-tree>\n </div>\n </tiny-collapse-item>\n </tiny-collapse>\n</template>\n\n<script lang=\"tsx\">\nimport { reactive, onMounted, onUnmounted } from 'vue'\nimport { Search, Collapse, CollapseItem, Popover } from '@opentiny/vue'\nimport { IconFolderOpened, IconFolderClosed, IconSearch } from '@opentiny/vue-icon'\nimport {\n useCanvas,\n useModal,\n usePage,\n useNotify,\n useMessage,\n getMetaApi,\n META_SERVICE\n} from '@opentiny/tiny-engine-meta-register'\nimport { isEqual } from '@opentiny/vue-renderless/common/object'\nimport { getCanvasStatus } from '@opentiny/tiny-engine-common/js/canvas'\nimport { handlePageUpdate } from '@opentiny/tiny-engine-common/js/http'\nimport { constants } from '@opentiny/tiny-engine-utils'\nimport { closePageSettingPanel } from './PageSetting.vue'\nimport { closeFolderSettingPanel } from './PageFolderSetting.vue'\nimport http from './http'\nimport DraggableTree from './Tree.vue'\nimport { SvgButton } from '@opentiny/tiny-engine-common'\n\nconst { PAGE_STATUS } = constants\n\nexport default {\n components: {\n TinySearch: Search,\n TinyCollapse: Collapse,\n TinyCollapseItem: CollapseItem,\n TinyIconSearch: IconSearch(),\n TinyPopover: Popover,\n DraggableTree,\n SvgButton\n },\n props: {\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n emits: ['openSettingPanel', 'add', 'createPage', 'createFolder', 'settingHome'],\n setup(props, { emit }) {\n const { confirm } = useModal()\n const { pageState, isBlock, isSaved } = useCanvas()\n const {\n pageSettingState,\n changeTreeData,\n isCurrentDataSame,\n getPageList,\n resetPageData,\n STATIC_PAGE_GROUP_ID,\n COMMON_PAGE_GROUP_ID,\n switchPage: switchPageById\n } = usePage()\n const { fetchPageDetail, requestUpdatePage } = http\n const getAppId = () => getMetaApi(META_SERVICE.GlobalService).getBaseInfo().id\n\n const state = reactive({\n pageSearchValue: '',\n collapseValue: [STATIC_PAGE_GROUP_ID, COMMON_PAGE_GROUP_ID],\n currentNodeData: { id: getMetaApi(META_SERVICE.GlobalService).getBaseInfo().pageId }\n })\n\n const { subscribe, unsubscribe } = useMessage()\n\n let subscriber = null\n\n onMounted(() => {\n subscriber = subscribe({\n topic: 'locationHistoryChanged',\n callback: (data) => {\n if (data.pageId) {\n state.currentNodeData = { id: data.pageId }\n } else if (isBlock()) {\n state.currentNodeData = {}\n }\n },\n subscriber: 'pageTree'\n })\n })\n\n onUnmounted(() => {\n if (subscriber) {\n unsubscribe(subscriber)\n }\n })\n\n const refreshPageList = async (appId) => {\n const pages = await getPageList(appId)\n\n return pages\n }\n\n pageSettingState.updateTreeData = async () => {\n const pageList = await refreshPageList(getAppId())\n return pageList\n }\n\n const switchPage = (data) => {\n state.currentNodeData = data\n\n switchPageById(data.id).then(() => {\n closePageSettingPanel()\n closeFolderSettingPanel()\n })\n }\n\n const nodeClick = (e, pageData) => {\n e?.stopPropagation()\n\n const { id, isPage } = pageData\n\n // 区块切换回页面需要重新加载页面\n if ((!isBlock() && id === state?.currentNodeData?.id) || !isPage) {\n return\n }\n\n if (isSaved() && isCurrentDataSame()) {\n switchPage(pageData)\n } else {\n confirm({\n title: '提示',\n message: `${isBlock() ? '区块' : '页面'}尚未保存,是否要继续切换?`,\n exec: () => {\n changeTreeData(pageSettingState.oldParentId, pageSettingState.currentPageData.parentId)\n Object.assign(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)\n switchPage(pageData)\n }\n })\n }\n }\n\n const openSettingPanel = (e, pageData, isPageLocked) => {\n e?.stopPropagation()\n\n if (isPageLocked && pageData.isPage) {\n const username = pageData.occupier?.username || ''\n\n useModal().message({\n message: `您点击的页面被${username}锁定,暂时无法编辑,请联系解锁`\n })\n\n return\n }\n\n if (isEqual(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)) {\n emit('openSettingPanel', pageData)\n } else {\n confirm({\n title: '提示',\n message: `当前页面或文件夹${pageSettingState.currentPageData.name}尚未保存,是否要继续切换?`,\n exec: () => {\n changeTreeData(pageSettingState.oldParentId, pageSettingState.currentPageData.parentId)\n Object.assign(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)\n emit('openSettingPanel', pageData)\n }\n })\n }\n }\n\n const popoverRefs = {}\n const setPopoverRef = (el, nodeId) => {\n popoverRefs[nodeId] = el\n }\n\n const handleClickRow = (node) => {\n nodeClick(null, node.rawData)\n }\n\n const isPageLocked = (pageData) => {\n return getCanvasStatus(pageData.occupier).state === PAGE_STATUS.Lock\n }\n\n const handleClickPageSettings = (node) => {\n openSettingPanel(null, node.rawData, isPageLocked(node.rawData))\n }\n\n const createPage = (node) => {\n emit('createPage', 'staticPages', node.id)\n }\n\n const createFolder = (node) => {\n emit('createFolder', node.id)\n }\n\n const settingHome = (node) => {\n emit('settingHome', node)\n }\n\n const rowOperations = [\n { type: 'settings', label: '设置', action: handleClickPageSettings },\n { type: 'divider' },\n { type: 'createPage', label: '新建子页面', action: createPage },\n { type: 'createFolder', label: '新建子文件夹', action: createFolder },\n { type: 'settingHome', label: '设置为主页', action: settingHome }\n // TODO 复制和删除的逻辑耦合在其他组件内,暂时屏蔽\n // { type: 'divider' },\n // { type: 'copy', label: '复制页面', action: copyPage },\n // { type: 'delete', label: '删除', class: ['danger'], action: deleteNode }\n ].map((item) => ({\n ...item,\n action: (node) => {\n item.action?.(node)\n // 点击 action 后,关闭 popover 弹窗\n popoverRefs[node.id]?.doClose?.()\n }\n }))\n\n const getRowOperations = (groupId, node) => {\n if (groupId === COMMON_PAGE_GROUP_ID) {\n return rowOperations.slice(0, 1)\n }\n if (!node.rawData.isPage || node.rawData.group === 'public') {\n return rowOperations.filter((item) => item.type !== 'settingHome')\n }\n // TODO 复制逻辑暂时屏蔽\n // if (!node.rawData.isPage) {\n // return rowOperations.filter((item) => item.type !== 'copy')\n // }\n\n return rowOperations\n }\n\n const updatePage = (pageDetail) => {\n const { id, name, page_content } = pageDetail\n const params = {\n ...pageDetail,\n page_content: {\n ...page_content,\n fileName: name\n }\n }\n\n const isCurEditPage = pageState?.currentPage?.id === id\n const updateParams = {\n id,\n params,\n isCurEditPage\n }\n\n return handlePageUpdate(updateParams)\n }\n\n const updateFolder = (pageDetail) => {\n const { id } = pageDetail\n\n // requestUpdatePage加了then和catch回调函数,而handlePageUpdate没有加,是因为handlePageUpdate内部都已经有了类似逻辑\n return requestUpdatePage(id, { ...pageDetail, page_content: null })\n .then(() => {\n useNotify({\n type: 'success',\n message: '更新文件夹成功!'\n })\n })\n .catch((error) => {\n useNotify({\n type: 'error',\n title: '更新文件夹失败',\n message: JSON.stringify(error?.message || error)\n })\n })\n .finally(() => {\n pageSettingState.updateTreeData()\n pageSettingState.isNew = false\n })\n }\n\n const handleMoveNode = (dragged, newParent) => {\n if (isEqual(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)) {\n closePageSettingPanel()\n closeFolderSettingPanel()\n pageSettingState.currentPageData.id = dragged.id\n changeTreeData(newParent.id, dragged.parentId)\n resetPageData()\n // TODO 页面更换父节点后,原来每次变更需要填写变更信息\n fetchPageDetail(dragged.id)\n .then((pageDetail) => {\n pageDetail.parentId = newParent.id\n if (pageDetail.isPage) {\n pageDetail.isDefault = false\n updatePage(pageDetail)\n } else {\n updateFolder(pageDetail)\n }\n })\n .catch((error) => {\n useNotify({\n type: 'error',\n title: '移动页面文件/文件夹失败',\n message: JSON.stringify(error?.message || error)\n })\n })\n } else {\n confirm({\n title: '提示',\n message: '更改尚未保存,是否要放弃这些更改?',\n exec: () => {\n if (!pageSettingState.isNew) {\n changeTreeData(pageSettingState.oldParentId, pageSettingState.currentPageData.parentId)\n Object.assign(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)\n }\n closePageSettingPanel()\n }\n })\n }\n }\n\n useMessage().subscribe({\n topic: 'app_id_changed',\n subscriber: 'page_tree_app_id_changed',\n callback: (appId) => {\n refreshPageList(appId)\n }\n })\n\n const createPublicPage = (e) => {\n e.stopPropagation()\n e.preventDefault()\n emit('add')\n }\n\n onUnmounted(() => {\n useMessage().unsubscribe({\n topic: 'app_id_changed',\n subscriber: 'page_tree_app_id_changed'\n })\n })\n\n return {\n createPublicPage,\n state,\n switchPage,\n pageSettingState,\n setPopoverRef,\n IconFolderOpened: IconFolderOpened(),\n IconFolderClosed: IconFolderClosed(),\n getRowOperations,\n handleClickRow,\n handleMoveNode,\n isPageLocked,\n handleClickPageSettings,\n STATIC_PAGE_GROUP_ID\n }\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n.app-manage-search {\n padding: 0 12px 12px 12px;\n}\n\n.page-manage-collapse {\n height: calc(100% - 95px);\n overflow-y: auto;\n .app-manage-public-page {\n position: absolute;\n right: 0;\n cursor: pointer;\n svg {\n font-size: 22px;\n }\n }\n :deep(.tiny-collapse-item__header) {\n &,\n &.is-active {\n &::before {\n border: none;\n }\n }\n }\n :deep(.tiny-collapse-item) {\n border-left: 0;\n border-right: 0;\n }\n :deep(.tiny-collapse-item__content) {\n padding: 0 0 12px 0;\n }\n}\n\n.page-manage-collapse.page-manage-collapse {\n :deep(.tiny-collapse-item__content) {\n padding-top: 0;\n }\n}\n\n.app-manage-tree {\n .actions {\n display: flex;\n align-items: center;\n svg {\n color: var(--te-page-manage-icon-color);\n outline: none;\n }\n .auto-hidden {\n display: none;\n }\n }\n .row:hover .actions .auto-hidden {\n display: unset;\n }\n}\n</style>\n\n<style lang=\"less\">\n.tiny-popover.tiny-popper[x-placement].page-tree-row-operation-list {\n padding: 0;\n margin-top: 4px;\n .operation-list {\n min-width: 110px;\n padding: 8px 0;\n & > div {\n padding: 0 12px;\n }\n .item {\n height: 24px;\n font-size: 12px;\n line-height: 18px;\n cursor: pointer;\n display: flex;\n align-items: center;\n &:hover {\n background-color: var(--te-page-manage-operation-list-item-bg-color-hover);\n }\n }\n .divider {\n height: 8px;\n display: flex;\n align-items: center;\n &::after {\n content: '';\n display: block;\n width: 100%;\n height: 1px;\n background-color: var(--te-page-manage-operation-list-item-border-color-divider);\n }\n }\n .danger {\n color: var(--te-page-manage-operation-list-text-color-error);\n }\n }\n}\n</style>\n","<template>\n <div class=\"plugin-page\">\n <plugin-panel\n :title=\"title\"\n :fixed-name=\"PLUGIN_NAME.AppManage\"\n :fixedPanels=\"fixedPanels\"\n @close=\"pluginPanelClosed\"\n :docsUrl=\"docsUrl\"\n :isShowDocsIcon=\"true\"\n >\n <template #header>\n <svg-button\n class=\"add-folder-icon\"\n name=\"add-folder\"\n placement=\"bottom\"\n tips=\"新建文件夹\"\n @click=\"createNewFolder()\"\n ></svg-button>\n <svg-button\n class=\"new-page-icon\"\n name=\"new-page\"\n placement=\"bottom\"\n tips=\"新建页面\"\n @click=\"createNewPage('staticPages')\"\n ></svg-button>\n </template>\n <template #content>\n <page-tree\n ref=\"pageTreeRef\"\n :isFolder=\"state.isFolder\"\n @add=\"createNewPage('publicPages')\"\n @openSettingPanel=\"openSettingPanel\"\n @createPage=\"createNewPage\"\n @createFolder=\"createNewFolder\"\n @settingHome=\"settingHome\"\n ></page-tree>\n </template>\n </plugin-panel>\n <page-setting :isFolder=\"state.isFolder\" @openNewPage=\"openNewPage\"></page-setting>\n <page-folder-setting :isFolder=\"state.isFolder\"></page-folder-setting>\n </div>\n</template>\n\n<script lang=\"tsx\">\nimport { reactive, ref, watchEffect, provide } from 'vue'\nimport { useCanvas, usePage, useHelp, useModal, useNotify, useLayout } from '@opentiny/tiny-engine-meta-register'\nimport { PluginPanel, SvgButton } from '@opentiny/tiny-engine-common'\nimport { extend } from '@opentiny/vue-renderless/common/object'\nimport PageSetting, { openPageSettingPanel, closePageSettingPanel } from './PageSetting.vue'\nimport PageFolderSetting, { openFolderSettingPanel, closeFolderSettingPanel } from './PageFolderSetting.vue'\nimport PageTree from './PageTree.vue'\nimport { fetchPageDetail, handleRouteHomeUpdate } from './http'\n\nexport const api = {\n getPageById: async (id) => {\n if (id) {\n return fetchPageDetail(id)\n }\n\n return undefined\n },\n openPageSettingPanel\n}\n\nexport default {\n components: {\n PageSetting,\n PluginPanel,\n SvgButton,\n PageFolderSetting,\n PageTree\n },\n props: {\n title: {\n type: String,\n default: '页面'\n },\n fixedPanels: {\n type: Array\n }\n },\n emits: ['close'],\n setup(props, { emit }) {\n const { confirm } = useModal()\n const { pageState } = useCanvas()\n const { pageSettingState, getDefaultPage, isTemporaryPage, initCurrentPageData } = usePage()\n\n const { PLUGIN_NAME } = useLayout()\n\n const panelState = reactive({\n emitEvent: emit\n })\n\n provide('panelState', panelState)\n\n const pageTreeRef = ref(null)\n const ROOT_ID = pageSettingState.ROOT_ID\n const docsUrl = useHelp().getDocsUrl('page')\n\n const state = reactive({\n isFolder: false\n })\n\n const createNewPage = (group, parentId = ROOT_ID) => {\n closeFolderSettingPanel()\n pageSettingState.isNew = true\n try {\n const defaultPage = getDefaultPage()\n if (!defaultPage) {\n throw new Error('Failed to get default page configuration')\n }\n pageSettingState.currentPageData = {\n ...getDefaultPage(),\n ...defaultPage,\n parentId,\n route: '',\n name: 'Untitled',\n page_content: {\n lifeCycles: {}\n },\n group\n }\n } catch (error) {\n throw new Error(error)\n // console.error('Failed to create new page:', error)\n }\n pageSettingState.currentPageDataCopy = extend(true, {}, pageSettingState.currentPageData)\n state.isFolder = false\n openPageSettingPanel()\n }\n\n const createNewFolder = (parentId = ROOT_ID) => {\n closePageSettingPanel()\n pageSettingState.isNew = true\n pageSettingState.currentPageData = { parentId, route: '', name: 'untitled' }\n pageSettingState.currentPageDataCopy = extend(true, {}, pageSettingState.currentPageData)\n state.isFolder = true\n openFolderSettingPanel()\n }\n\n const settingHome = (node) => {\n confirm({\n title: '提示',\n type: 'warning ',\n message: '是否确定要将此页面设置为主页?',\n exec: () => {\n const params = { ...node.rawData, isHome: true }\n\n handleRouteHomeUpdate(node.id, params)\n .then(() => {\n pageSettingState.updateTreeData()\n pageSettingState.isNew = false\n useNotify({ message: '主页设置成功!', type: 'success' })\n })\n .catch(() => {\n useNotify({ message: '主页设置失败!', type: 'error' })\n })\n }\n })\n }\n\n watchEffect(() => {\n if (isTemporaryPage.saved) {\n openPageSettingPanel()\n }\n })\n\n const openSettingPanel = async (pageData) => {\n state.isFolder = !pageData.isPage\n pageSettingState.isNew = false\n\n const isPageChange = pageData.id !== pageSettingState.currentPageData.id\n\n if (state.isFolder) {\n if (isPageChange) {\n closePageSettingPanel()\n }\n openFolderSettingPanel()\n } else {\n if (isPageChange) {\n closeFolderSettingPanel()\n }\n openPageSettingPanel()\n }\n const pageDetail = await fetchPageDetail(pageData?.id)\n initCurrentPageData(pageDetail)\n }\n\n provide('openSettingPanel', openSettingPanel)\n\n const pluginPanelClosed = () => {\n emit('close')\n closePageSettingPanel()\n closeFolderSettingPanel()\n }\n\n const openNewPage = (data) => {\n pageTreeRef.value.switchPage(data)\n }\n\n return {\n PLUGIN_NAME,\n state,\n pageState,\n openNewPage,\n pageTreeRef,\n pluginPanelClosed,\n openSettingPanel,\n createNewFolder,\n createNewPage,\n docsUrl,\n settingHome\n }\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n:deep(.tiny-button) {\n border-radius: 4px;\n height: 24px;\n line-height: 24px;\n}\n.plugin-page {\n height: 100%;\n}\n</style>\n","/**\n * Copyright (c) 2023 - present TinyEngine Authors.\n * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\n\nimport { reactive, ref } from 'vue'\nimport { extend, isEqual as isValuesEqual } from '@opentiny/vue-renderless/common/object'\nimport { constants } from '@opentiny/tiny-engine-utils'\nimport { getCanvasStatus } from '@opentiny/tiny-engine-common/js/canvas'\nimport {\n useCanvas,\n useLayout,\n useBreadcrumb,\n useModal,\n useNotify,\n getMetaApi,\n META_SERVICE\n} from '@opentiny/tiny-engine-meta-register'\nimport http from '../http'\n\nconst { ELEMENT_TAG, COMPONENT_NAME } = constants\n\nimport { getOptions } from '@opentiny/tiny-engine-meta-register'\n\nconst DEFAULT_PAGE = {\n app: '',\n name: '',\n route: '',\n page_content: {\n componentName: 'Page',\n css: '',\n props: {},\n lifeCycles: {},\n children: [],\n dataSource: {\n list: []\n },\n state: {},\n methods: {},\n utils: [],\n bridge: [],\n inputs: [],\n outputs: []\n },\n isHome: false,\n parentId: 'none',\n isBody: false,\n group: 'staticPages'\n}\n\nconst selectedTemplateCard = ref(null)\n\nexport interface PageData {\n id: string | number\n parentId: string | number\n [x: string]: any\n}\n\nexport interface PageNode {\n id: string | number\n parentId: string | number\n children?: PageNode[]\n}\n\nexport interface PageSettingState {\n currentPageDataCopy: PageData\n currentPageData: PageData\n pages: any[]\n oldParentId?: string | number | null\n isNew: boolean\n ROOT_ID: string\n updateTreeData?: any\n treeDataMapping: Record<string, any>\n defaultPage?: any\n}\n\nconst pageSettingState = reactive<PageSettingState>({\n currentPageDataCopy: {} as PageData, // 记录当前页最开始的状态,当用户点击取消按钮的时候恢复到初始状态\n currentPageData: {} as PageData, // 当前配置页面的数据\n pages: [],\n oldParentId: null,\n isNew: false,\n ROOT_ID: '0', // 根节点ID\n updateTreeData: null,\n treeDataMapping: {},\n defaultPage: null // 当前页设置的默认页\n})\n\nconst isTemporaryPage = reactive({\n saved: false\n})\n\nconst STATIC_PAGE_GROUP_ID = 0\nconst COMMON_PAGE_GROUP_ID = 1\n\nexport interface PageOptions {\n pageBaseStyle: {\n className: string\n style: string\n }\n}\n\nexport interface MaterialsOptions {\n useBaseStyle: any\n blockBaseStyle: { className: string; style: string }\n componentBaseStyle: { className: string; style: string }\n}\n\nconst generateCssString = (pageOptions: PageOptions, materialsOptions: MaterialsOptions) => {\n if (!pageOptions?.pageBaseStyle?.className || !pageOptions?.pageBaseStyle?.style) {\n return ''\n }\n\n const formatCssRule = (className: string, style: string) => `.${className} {\\n ${style.trim()}\\n}\\n`\n const baseStyle = `.${pageOptions.pageBaseStyle.className}{\\r\\n ${pageOptions.pageBaseStyle.style}\\r\\n}\\r\\n`\n\n if (!materialsOptions.useBaseStyle) {\n return baseStyle\n }\n\n return [\n formatCssRule(pageOptions.pageBaseStyle.className, pageOptions.pageBaseStyle.style),\n formatCssRule(materialsOptions.blockBaseStyle.className, materialsOptions.blockBaseStyle.style),\n formatCssRule(materialsOptions.componentBaseStyle.className, materialsOptions.componentBaseStyle.style)\n ].join('\\n')\n}\n\nconst getDefaultPage = () => {\n const materialsOptions = getOptions('engine.plugins.materials')\n const pageOptions = getOptions('engine.plugins.appmanage')\n\n if (!materialsOptions || !pageOptions || !pageOptions.pageBaseStyle) {\n return { ...DEFAULT_PAGE }\n }\n\n return {\n ...DEFAULT_PAGE,\n page_content: {\n ...DEFAULT_PAGE.page_content,\n props: {\n ...DEFAULT_PAGE.page_content.props,\n className: pageOptions.pageBaseStyle.className\n },\n css: generateCssString(pageOptions, materialsOptions)\n }\n }\n}\n\n/**\n * 更新配置页面数据\n */\nconst syncPageContent = () => {\n const { getBaseInfo } = getMetaApi(META_SERVICE.GlobalService)\n\n // 只有当前页面设置的ID与正在编辑的页面ID一致时才同步内容\n // 避免将正在编辑的页面内容错误同步到其他打开的页面设置中\n if (pageSettingState.currentPageData.id === Number.parseInt(getBaseInfo().pageId)) {\n const pageContent = useCanvas().getPageSchema()\n\n // 此处赋值是确保页面内容与当前画布保持同步。\n // 当用户在画布中编辑页面内容时,这些变更存储在Canvas内部状态,\n // 但pageSettingState中的currentPageData.page_content并不会自动更新。\n // 不同步会导致:\n // 1. 保存检测失效 - isCurrentDataSame()无法检测到真实变更\n // 2. 未保存提示缺失 - 用户离开页面时不会收到未保存变更警告\n pageSettingState.currentPageData.page_content = pageContent\n }\n}\n\n/**\n * 在页面保存后更新页面设置状态\n * 当用户通过工具栏保存按钮保存页面时,需要调用此方法来同步currentPageDataCopy\n * 以确保isCurrentDataSame()能够正确判断页面是否被修改\n */\nconst updatePageSettingAfterSave = () => {\n syncPageContent()\n pageSettingState.currentPageDataCopy = extend(true, {}, pageSettingState.currentPageData)\n}\n\nconst isCurrentDataSame = () => {\n syncPageContent()\n\n const data: Record<string, any> = pageSettingState.currentPageData || {}\n const dataCopy: Record<string, any> = pageSettingState.currentPageDataCopy || {}\n let isEqual = true\n\n Object.keys(dataCopy).some((item) => {\n // 页面比较是否更改,为了减少判断次数,不需要判断以下字段\n if (['children', 'label', 'createdBy', 'assets', 'occupier'].includes(item)) {\n return false\n } else if (item === 'page_content') {\n const obj = {\n inputs: dataCopy[item].inputs,\n outputs: dataCopy[item].outputs,\n lifeCycles: dataCopy[item].lifeCycles,\n children: dataCopy[item].children\n }\n const objCopy = {\n inputs: data[item].inputs,\n outputs: data[item].outputs,\n lifeCycles: data[item].lifeCycles,\n children: data[item].children\n }\n\n if (JSON.stringify(obj) !== JSON.stringify(objCopy)) {\n isEqual = false\n }\n } else {\n if (!isValuesEqual(dataCopy[item], data[item])) {\n isEqual = false\n }\n }\n\n return !isEqual\n })\n\n return isEqual\n}\n\nconst getParentNode = (parentId: string) => {\n return parentId === pageSettingState.ROOT_ID\n ? { id: pageSettingState.ROOT_ID, children: pageSettingState.pages[STATIC_PAGE_GROUP_ID].data }\n : pageSettingState.treeDataMapping[parentId]\n}\n\nconst changeTreeData = (newParentId: string, oldParentId: string) => {\n if (newParentId && oldParentId && String(newParentId) !== String(oldParentId)) {\n const folderData = getParentNode(newParentId)\n const parentData = getParentNode(oldParentId)\n\n if (!folderData || !parentData) {\n return\n }\n\n const currentPageDataId = pageSettingState.currentPageData.id\n const curDataIndex = parentData.children?.findIndex?.(({ id }: { id: string }) => id === currentPageDataId)\n\n if (curDataIndex > -1) {\n const splicedPageData = parentData.children.splice(curDataIndex, 1)[0]\n if (!folderData.children) {\n folderData.children = []\n }\n folderData.children.unshift(splicedPageData)\n }\n }\n}\n\nconst getPageContent = () => {\n return pageSettingState.currentPageData.page_content || {}\n}\n\nconst initCurrentPageData = (pageDetail: PageData) => {\n pageSettingState.currentPageData = pageDetail\n pageSettingState.currentPageDataCopy = extend(true, {}, pageDetail)\n pageSettingState.oldParentId = pageDetail.parentId\n}\n\nconst resetPageData = () => {\n pageSettingState.currentPageData = {} as PageData\n pageSettingState.currentPageDataCopy = {} as PageData\n pageSettingState.oldParentId = null\n pageSettingState.defaultPage = null\n}\n\n// 判断当前页面内容是否有修改\nconst isChangePageData = () => !isValuesEqual(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)\n\nconst generateTree = (data: PageData[]) => {\n const { ROOT_ID } = pageSettingState\n\n const treeDataMapping: Record<string, PageNode> = { [ROOT_ID]: { id: ROOT_ID, parentId: '' } }\n\n data.forEach((item) => {\n treeDataMapping[item.id] = item\n })\n\n data.forEach((item) => {\n const parentNode = treeDataMapping[item.parentId]\n\n if (!parentNode) {\n return\n }\n\n parentNode.children = parentNode.children || []\n parentNode.children.push(item)\n })\n\n return treeDataMapping\n}\n\ninterface GroupData {\n groupName: string\n groupId: number\n data: PageData[]\n}\n\nconst getPageList = async (appId?: string) => {\n const pagesData: any[] = await http.fetchPageList(appId || getMetaApi(META_SERVICE.GlobalService).getBaseInfo().id)\n\n const firstGroupData: GroupData = { groupName: '静态页面', groupId: STATIC_PAGE_GROUP_ID, data: [] }\n const secondGroupData: GroupData = { groupName: '公共页面', groupId: COMMON_PAGE_GROUP_ID, data: [] }\n\n pagesData.forEach((item) => {\n const namedNode = item.name ? item : { ...item, name: item.folderName, group: 'staticPages' }\n const node = item.meta\n ? {\n ...item,\n ...item.meta,\n name: item.fileName,\n isPage: true,\n isBody: item.meta.rootElement === ELEMENT_TAG.Body\n }\n : namedNode\n\n const { children, ...other } = node\n\n if (node.group === 'staticPages') {\n firstGroupData.data.push(other)\n } else {\n secondGroupData.data.push(other)\n }\n })\n\n const firstGroupTreeData = generateTree(firstGroupData.data)\n const secondGroupTreeData = generateTree(secondGroupData.data)\n pageSettingState.treeDataMapping = { ...firstGroupTreeData, ...secondGroupTreeData }\n firstGroupData.data = firstGroupTreeData[pageSettingState.ROOT_ID].children || []\n pageSettingState.pages = [firstGroupData, secondGroupData]\n return pageSettingState.pages\n}\n\nconst getAncestorsRecursively = (id: string): any[] => {\n if (id === pageSettingState.ROOT_ID) {\n return []\n }\n\n const pageNode = pageSettingState.treeDataMapping[id]\n\n return [pageNode].concat(getAncestorsRecursively(pageNode.parentId))\n}\n\n/**\n * @param {string | number} id page Id\n * @param {boolean} withFolders default `false`\n * @returns {(string | number)[]}\n */\nconst getAncestors = async (id: string, withFolders?: boolean) => {\n if (pageSettingState.pages.length === 0) {\n await getPageList()\n }\n\n if (!pageSettingState.treeDataMapping[id]) {\n return null\n }\n\n const ancestorsWithSelf = getAncestorsRecursively(id)\n const ancestors = ancestorsWithSelf.slice(1).reverse()\n\n const predicate = withFolders ? () => true : (item: { isPage: boolean }) => item.isPage\n\n return ancestors.filter(predicate).map((item) => item.id)\n}\n\n/**\n * 打平数组内的文件夹,确保返回的数组每个都是页面而不是文件夹\n * @param {Array<{isPage: boolean, children?: any[]} & Record<string, any>} pagesOrFolders 页面或者文件夹数组\n * @returns\n */\nconst flatternFolder = (pagesOrFolders: Array<{ isPage: boolean; children?: any[] } & Record<string, any>>) => {\n // 页面数组中没有文件夹,无需处理\n if (pagesOrFolders.every((item) => item.isPage)) {\n return pagesOrFolders\n }\n\n const flattened = pagesOrFolders\n .map((page) => {\n if (page.isPage) {\n return page\n }\n // 如果是文件夹,返回子节点数组,后面flat会打平这一层\n return (page.children || []).map((child) => ({\n ...child,\n routePath: `${page.routePath || page.route}/${child.route}`\n }))\n })\n .flat()\n\n return flatternFolder(flattened)\n}\n\n/**\n * 获取所有的页面直接子节点,如果子节点是文件夹,则文件夹下的节点也算直接子节点\n * @param {string | number} id\n * @returns\n */\nconst getPageChildren = async (id: string) => {\n if (pageSettingState.pages.length === 0) {\n await getPageList()\n }\n\n const pageNode = pageSettingState.treeDataMapping[id]\n\n if (!Array.isArray(pageNode?.children)) {\n return []\n }\n\n return flatternFolder(pageNode.children)\n}\n\nconst clearCurrentState = () => {\n const { pageState } = useCanvas()\n\n pageState.currentVm = null\n pageState.hoverVm = null\n pageState.properties = {}\n pageState.pageSchema = null\n}\n\nconst switchPage = (pageId: string | number, clearPreview = false) => {\n // 切换页面时清空 选中节点信息状态\n clearCurrentState()\n\n // pageId !== 0 防止 pageId 为 0 的时候判断不出来\n if (pageId !== 0 && !pageId) {\n if (clearPreview) {\n getMetaApi(META_SERVICE.GlobalService).updateParams({ pageId: '', previewId: '' })\n } else {\n getMetaApi(META_SERVICE.GlobalService).updatePageId('')\n }\n useCanvas().initData({ componentName: COMPONENT_NAME.Page, props: {} }, {})\n useLayout().layoutState.pageStatus = {\n state: 'empty',\n data: {}\n }\n\n return\n }\n\n return http\n .fetchPageDetail(pageId)\n .then((data: { [x: string]: any; isPage: boolean; name: string; occupier: any }) => {\n if (data.isPage) {\n // 应该改成让 Breadcrumb 插件去监听变化\n useBreadcrumb().setBreadcrumbPage([data.name])\n }\n\n if (clearPreview) {\n getMetaApi(META_SERVICE.GlobalService).updateParams({ pageId, previewId: '' })\n } else {\n getMetaApi(META_SERVICE.GlobalService).updatePageId(pageId)\n }\n useLayout().closePlugin()\n useLayout().layoutState.pageStatus = getCanvasStatus(data.occupier)\n useCanvas().initData(data['page_content'], data)\n })\n .catch(() => {\n useNotify({\n type: 'error',\n message: '切换页面失败,目标页面不存在'\n })\n })\n}\n\nconst switchPageWithConfirm = (pageId: string, clearPreview = false) => {\n const checkPageSaved = () => {\n const { isSaved, isBlock } = useCanvas()\n\n return new Promise((resolve) => {\n if (isSaved()) {\n resolve(true)\n return\n }\n\n useModal().confirm({\n title: '提示',\n message: `${isBlock() ? '区块' : '页面'}尚未保存,是否要继续切换?`,\n exec: () => {\n resolve(true)\n },\n cancel: () => {\n resolve(false)\n }\n })\n })\n }\n\n checkPageSaved().then((proceed) => {\n if (proceed) {\n switchPage(pageId, clearPreview)\n }\n })\n}\n\nconst updatePageContent = (\n familyPages: { id: any; page_content: any }[],\n currentPage: { id: string; page_content?: any }\n) => {\n const currentPageSchema = familyPages.find((item) => item.id === currentPage.id)\n // 替换为当前页面最新的 schema\n if (currentPageSchema) {\n currentPageSchema.page_content = currentPage.page_content\n }\n}\n\nconst fetchPageDetailIfNeeded = async (page: { page_content: any; id: string }) => {\n if (!page.page_content) {\n try {\n const pageDetail = await http.fetchPageDetail(page.id)\n page.page_content = pageDetail.page_content\n } catch (error) {\n page.page_content = {}\n throw new Error(String(error))\n }\n }\n}\n\nconst updateParentId = (page: { parentId: any }, pages: any[], index: number, ROOT_ID: string) => {\n if (page.parentId !== ROOT_ID && !pages.find((item) => item.id === page.parentId)) {\n page.parentId = pages[index - 1]?.id ? pages[index - 1].id : ROOT_ID\n }\n}\n\nconst handlePageDetail = async (pages: any[]) => {\n const { ROOT_ID } = pageSettingState\n\n if (pages.length > 0) {\n await Promise.all(\n pages.map(async (page, index) => {\n await fetchPageDetailIfNeeded(page)\n updateParentId(page, pages, index, ROOT_ID)\n })\n )\n }\n}\n\nconst getFamily = async (currentPage: { id: string }) => {\n if (pageSettingState.pages.length === 0) {\n await getPageList()\n }\n\n const familyPages = getAncestorsRecursively(currentPage.id)\n .filter((item) => item.isPage)\n .reverse()\n .map((item) => ({\n id: item.id,\n page_content: item.page_content,\n name: item.name,\n parentId: item.parentId,\n route: item.route,\n isPage: item.isPage,\n isBody: item.isBody,\n isHome: item.isHome,\n group: item.group,\n isDefault: item.isDefault,\n depth: item.depth\n }))\n\n await handlePageDetail(familyPages)\n\n updatePageContent(familyPages, currentPage)\n\n return familyPages\n}\n\nexport default () => {\n return {\n getDefaultPage,\n selectedTemplateCard,\n pageSettingState,\n isTemporaryPage,\n isCurrentDataSame,\n changeTreeData,\n getPageContent,\n resetPageData,\n initCurrentPageData,\n isChangePageData,\n getPageList,\n getAncestors,\n switchPage,\n switchPageWithConfirm,\n getFamily,\n getPageChildren,\n updatePageSettingAfterSave,\n STATIC_PAGE_GROUP_ID,\n COMMON_PAGE_GROUP_ID\n }\n}\n","import { HOOK_NAME } from '@opentiny/tiny-engine-meta-register'\nimport usePage from './usePage'\n\nexport const PageService = {\n id: 'engine.service.page',\n type: 'MetaService',\n apis: usePage(),\n composable: {\n name: HOOK_NAME.usePage\n }\n}\n","<template>\n <div class=\"general-config\">\n <tiny-form\n ref=\"generalForm\"\n :model=\"pageSettingState.currentPageData\"\n :rules=\"isFolder ? folderRules : pageRules\"\n label-width=\"120px\"\n validate-type=\"text\"\n :inline-message=\"true\"\n :label-align=\"true\"\n label-position=\"top\"\n class=\"general-config-form\"\n >\n <tiny-form-item v-if=\"!isFolder\" prop=\"group\" label=\"页面类型\" class=\"form-item-page-type\">\n <tiny-radio v-model=\"pageSettingState.currentPageData.group\" class=\"page-type-radio\" label=\"staticPages\">\n 静态页面\n </tiny-radio>\n <tiny-radio v-model=\"pageSettingState.currentPageData.group\" class=\"page-type-radio\" label=\"publicPages\">\n 公共页面\n </tiny-radio>\n </tiny-form-item>\n <tiny-form-item prop=\"name\" :label=\"`${isFolder ? '文件夹' : '页面'}名称`\">\n <tiny-input\n v-model=\"pageSettingState.currentPageData.name\"\n :placeholder=\"`请设置${isFolder ? '文件夹' : '页面'}名称`\"\n ></tiny-input>\n </tiny-form-item>\n\n <tiny-form-item\n v-if=\"pageSettingState.currentPageData.group !== 'publicPages'\"\n label=\"父文件夹/父页面\"\n prop=\"parentId\"\n >\n <tiny-select\n v-model=\"pageParentId\"\n value-field=\"id\"\n render-type=\"tree\"\n :tree-op=\"treeFolderOp\"\n text-field=\"name\"\n placeholder=\"请选择父文件夹/父页面\"\n popper-class=\"parent-fold-select-dropdown\"\n @change=\"changeParentForderId\"\n ></tiny-select>\n </tiny-form-item>\n\n <tiny-form-item label=\"页面路由\" prop=\"route\">\n <tiny-input v-model=\"pageSettingState.currentPageData.route\" placeholder=\"请设置路由\"> </tiny-input>\n <div class=\"tip\">\n <span class=\"text\" v-if=\"!pageSettingState.currentPageData.route\">路由将以website.com开头</span>\n <span class=\"route-text\" v-else>\n <span class=\"tip-text\">website.com/</span>\n <span class=\"tip-text-dim\">{{ currentRoute }}</span>\n </span>\n </div>\n </tiny-form-item>\n <tiny-form-item\n v-if=\"pageSettingState.currentPageData.group !== 'publicPages' && !isFolder && state.childPageOp?.length\"\n label=\"设置默认跳转页\"\n prop=\"isDefault\"\n >\n <tiny-select\n v-model=\"state.defaultPageId\"\n :options=\"state.childPageOp\"\n placeholder=\"请选择默认跳转页\"\n @change=\"changeDefaultPage\"\n ></tiny-select>\n <div v-if=\"state.defaultPageId\" class=\"tip\">\n <div class=\"tip-text\">访问</div>\n <span class=\"tip-text-dim\">/{{ currentRoute }}</span>\n <div class=\"tip-text\">路由,默认跳转</div>\n <span class=\"tip-text-dim\">/{{ currentRoute }}/{{ pageSettingState?.defaultPage?.route }}</span>\n </div>\n </tiny-form-item>\n </tiny-form>\n </div>\n</template>\n\n<script lang=\"tsx\">\nimport { ref, computed, watchEffect, reactive } from 'vue'\nimport { Form, FormItem, Input, Select, Radio } from '@opentiny/vue'\nimport { iconFile } from '@opentiny/vue-icon'\nimport { usePage } from '@opentiny/tiny-engine-meta-register'\nimport { REGEXP_PAGE_NAME, REGEXP_FOLDER_NAME, REGEXP_ROUTE } from '@opentiny/tiny-engine-common/js/verification'\n\nexport default {\n components: {\n TinyForm: Form,\n TinyFormItem: FormItem,\n TinyInput: Input,\n TinySelect: Select,\n TinyRadio: Radio\n },\n props: {\n modelValue: {\n type: Object,\n default: () => ({})\n },\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n setup() {\n const { pageSettingState, changeTreeData, STATIC_PAGE_GROUP_ID, getPageChildren } = usePage()\n const ROOT_ID = pageSettingState.ROOT_ID\n\n const pageParentId = computed({\n get() {\n return String(pageSettingState.currentPageData.parentId)\n },\n set(value) {\n pageSettingState.currentPageData.parentId = value\n }\n })\n\n const oldParentId = ref(pageParentId.value)\n const state = reactive({\n childPageList: [],\n childPageOp: [],\n defaultPageId: ''\n })\n\n const setChildAndDefaultPage = async (id) => {\n if (pageSettingState.isNew) {\n state.childPageList = []\n state.childPageOp = []\n state.defaultPageId = ''\n } else {\n state.childPageList = await getPageChildren(id)\n const defaultPage = state.childPageList?.find((item) => item.isDefault)\n pageSettingState.defaultPage = defaultPage ? defaultPage : null\n state.defaultPageId = defaultPage ? defaultPage.id : ''\n state.childPageOp = state.childPageList.map((item) => {\n return {\n value: item.id,\n label: item.name,\n icon: iconFile()\n }\n })\n }\n }\n\n const changeDefaultPage = () => {\n pageSettingState.defaultPage = state.childPageList.find((item) => item.id === state.defaultPageId)\n }\n\n watchEffect(() => {\n oldParentId.value = pageSettingState.oldParentId\n setChildAndDefaultPage(pageSettingState.currentPageData?.id)\n })\n\n const currentRoute = computed(() => {\n let route = pageSettingState.currentPageData.route || ''\n let parentId = pageParentId.value\n\n while (parentId !== ROOT_ID) {\n const parent = pageSettingState.treeDataMapping[parentId]\n if (!parent) {\n break\n }\n route = `${parent.route}/${route}`\n parentId = parent.parentId\n }\n if (route.startsWith('/')) {\n route = route.slice(1)\n }\n\n return route\n })\n\n // 新建页面/更新页面校验规则\n const pageRules = {\n name: [\n { required: true, message: '请输入页面 ID' },\n {\n pattern: REGEXP_PAGE_NAME,\n message: '只允许包含英文字母,且为大写开头驼峰格式, 如DemoPage'\n },\n {\n min: 3,\n max: 25,\n message: '长度在 3 到 25 个字符'\n }\n ],\n route: [\n {\n required: true,\n message: '请输入页面路由'\n },\n {\n pattern: REGEXP_ROUTE,\n message: '只允许包含英文字母、数字、下横线_、中横线-、正斜杠/, 且以英文字母开头'\n }\n ]\n }\n const folderRules = {\n name: [\n { required: true, message: '请输入页面文件夹 ID' },\n {\n pattern: REGEXP_FOLDER_NAME,\n message: '只允许包含英文字母、数字、下横线_、中横线-, 且以英文字母开头'\n },\n { min: 3, max: 25, message: '长度在 3 到 25 个字符' }\n ],\n route: [\n { required: true, message: '请输入页面文件夹路由' },\n {\n pattern: REGEXP_ROUTE,\n message: '只允许包含英文字母、数字、下横线_、中横线-、正斜杠/, 且以英文字母开头'\n }\n ],\n group: [{ required: true, message: '必须选择页面类型' }]\n }\n\n const pageToTreeData = (page) => {\n const { id, name, isPage, children } = page\n\n const result = { id: String(id), name, isPage }\n\n if (Array.isArray(children)) {\n result.children = children\n .filter((page) => page.id !== pageSettingState.currentPageData.id)\n .map((page) => pageToTreeData(page))\n }\n\n return result\n }\n\n const getNodeIcon = (data) => {\n if (data.id === ROOT_ID) {\n return null\n }\n\n if (data.isPage) {\n return <SvgIcon name=\"text-page-common\"></SvgIcon>\n }\n\n return <SvgIcon name=\"text-page-folder\"></SvgIcon>\n }\n\n const treeFolderOp = computed(() => {\n const staticPages = pageSettingState.pages[STATIC_PAGE_GROUP_ID]?.data || []\n const dummyRoot = pageToTreeData({ children: [{ name: '无', id: ROOT_ID }].concat(staticPages) })\n const data = dummyRoot.children\n const options = {\n data: data,\n shrinkIcon: null,\n expandIcon: null,\n renderContent: (_h, { node, data }) => {\n return (\n <>\n {getNodeIcon(data)}\n <div>{node.label}</div>\n </>\n )\n }\n }\n\n return options\n })\n\n const generalForm = ref(null)\n\n const validGeneralForm = () => {\n return new Promise((resolve) => {\n generalForm.value.validate((valid) => {\n if (valid) {\n resolve(valid)\n }\n })\n })\n }\n\n const changeParentForderId = (value) => {\n changeTreeData(value.id, oldParentId.value)\n oldParentId.value = value.id\n }\n\n return {\n pageRules,\n folderRules,\n pageSettingState,\n pageParentId,\n generalForm,\n validGeneralForm,\n treeFolderOp,\n currentRoute,\n changeParentForderId,\n state,\n changeDefaultPage\n }\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n.general-config {\n .general-config-form {\n .input-head {\n color: var(--te-page-manage-input-head-text-color);\n }\n :deep(.tiny-form-item) {\n margin-bottom: 16px;\n .tiny-input-group__prepend {\n border: 1px solid var(--te-page-manage-input-border-color);\n background: var(--te-page-manage-input-bg-color);\n }\n .page-type-radio {\n color: var(--te-page-manage-title-text-color);\n }\n .tiny-form-item__label {\n height: 24px;\n line-height: 18px;\n font-size: 12px;\n color: var(--te-page-manage-text-color);\n }\n }\n }\n .tip {\n color: var(--te-page-manage-tip-color);\n font-size: 12px;\n border-radius: 3px;\n margin-top: 4px;\n width: 100%;\n word-wrap: break-word;\n height: auto;\n line-height: 16px;\n .tip-text {\n width: 100%;\n color: var(--te-page-manage-tip-text-color);\n }\n .tip-text-dim {\n color: var(--te-page-manage-tip-dim-text-color);\n }\n }\n}\n</style>\n<style lang=\"less\">\n.tiny-select-dropdown.parent-fold-select-dropdown {\n padding: 8px 0;\n .tiny-tree {\n .tiny-tree-node {\n .tiny-tree-node__content {\n padding: 0;\n background-color: var(--te-page-manage-tree-node-bg-color);\n &:hover {\n background-color: var(--te-page-manage-tree-node-bg-color-hover);\n }\n // 移除子节点的的背景色,才能保证鼠标hover到.tiny-tree-node__content节点任意位置时,整行都有hover状态的背景色\n .tiny-tree-node__content-left,\n .tiny-tree-node__content-left .tiny-tree-node__content-box {\n background-color: unset;\n &:hover {\n background-color: unset;\n }\n }\n .tiny-tree-node__content-left {\n padding: 0;\n .tree-node-icon {\n margin: 0;\n }\n .tiny-tree-node__content-box {\n padding: 0 12px;\n svg {\n margin-right: 8px;\n }\n }\n .tiny-tree-node__label {\n font-size: 12px;\n }\n }\n }\n }\n }\n}\n</style>\n","/**\n * Copyright (c) 2023 - present TinyEngine Authors.\n * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\n\nimport entry, { api } from './src/Main.vue'\nimport metaData from './meta'\nimport { PageService } from './src/composable/index'\nimport PageGeneral from './src/PageGeneral.vue'\nimport './src/styles/vars.less'\n\nexport default {\n ...metaData,\n apis: api,\n entry,\n options: {\n pageBaseStyle: {\n className: 'page-base-style',\n style: 'padding: 24px;background: #FFFFFF;'\n }\n },\n components: {\n PageGeneral\n },\n metas: [PageService]\n}\n\nexport { PageService }\n"],"names":["fetchPageList","appId","getMetaApi","META_SERVICE","fetchPageDetail","pageId","requestDeletePage","requestCreatePage","params","handleRouteHomeUpdate","requestCopyPage","fetchPageHistory","requestRestorePageHistory","fetchHistoryDetail","requestUpdatePage","http","_sfc_main$8","BlockHistoryList","props","emit","pageSettingState","getFamily","usePage","getDateFromNow","useBlock","confirm","useModal","list","ref","getHistoryList","id","version","data","item","watchEffect","_a","previewPage","_createBlock","_component_block_history_list","$setup","_sfc_main$7","MetaCodeEditor","Checkbox","inputValue","outputValue","currentPageData","computed","_b","inputsData","err","useNotify","outputsData","value","_hoisted_1","_openBlock","_createElementBlock","_createVNode","_component_meta_code_editor","_withCtx","_component_svg_icon","_cache","_createElementVNode","_component_tiny_checkbox","$event","metaData","COMPONENT_NAME","constants","isShow","openPageSettingPanel","closePageSettingPanel","resetPageData","PAGE_SETTING_SESSION","general","inputOutput","lifeCycles","history","_sfc_main$6","components","TinyButton","Button","TinyCollapse","Collapse","TinyCollapseItem","CollapseItem","PageInputOutput","LifeCycles","PageHistory","PluginSetting","SvgButton","ButtonGroup","isFolder","type","Boolean","default","emits","setup","getDefaultPage","changeTreeData","isCurrentDataSame","initCurrentPageData","isTemporaryPage","STATIC_PAGE_GROUP_ID","updatePageSettingAfterSave","pageState","initData","useCanvas","registry","getMergeRegistry","meta","pageGeneral","PageGeneral","beforeCreatePage","options","pageGeneralRef","PLUGIN_NAME","getPluginByLayout","useLayout","align","AppManage","subscribe","unsubscribe","useMessage","subscriber","onActivated","topic","callback","onDeactivated","state","reactive","activeName","Object","values","title","historyMessage","cancelPageSetting","isEqual","currentPageDataCopy","message","exec","isNew","oldParentId","parentId","assign","createPage","page_content","other","page_content_state","pageSettingStateOther","createParams","fileName","name","app","GlobalService","getBaseInfo","isPage","_id","updateTreeData","saved","closePlugin","isVsCodeEnv","generatePage","JSON","stringify","updatePage","isUpdateTree","routerChange","route","isCurEditPage","currentPage","handlePageUpdate","restorePage","pageData","currentData","page","unnecessaryFields","forEach","key","then","editPage","res","updatePageLifeCycles","val","pageContent","copyPageData","copyData","extend","defaultPage","copyPage","settingDefaultPage","isDefault","createHistoryMessage","render","Input","trim","savePageSetting","validGeneralForm","collectAllPage","staticPageList","Array","isArray","pageList","pageItem","push","children","length","deletePage","treeDataMapping","pages","find","groupId","pageHome","isHome","firstPage","componentName","Page","catch","_hoisted_2","_component_plugin_setting","_component_button_group","_component_tiny_button","_createTextVNode","_createCommentVNode","_component_svg_button","_component_tiny_collapse","_component_tiny_collapse_item","_resolveDynamicComponent","$props","_component_page_input_output","_component_life_cycles","_component_page_history","openFolderSettingPanel","closeFolderSettingPanel","_sfc_main$5","folderGeneralRef","closeFolderSetting","createFolder","error","updateFolder","throttle","__props","__emit","flattenTreeData","node","level","idKey","labelKey","childrenKey","currentNode","result","child","nodes","nodesMap","filteredNodes","getAncestorIds","nodeId","ancestors","filteredNodesWithAncestors","idSet","lines","layerLine","index","parentIndex","i","handleClickRow","draggedNode","hoveringNodeId","handleDragStart","event","handleDragOver","handleDrop","dragged","handleDragEnd","handleContainerDragOver","handleContainerDragLeave","PAGE_STATUS","_sfc_main$2","TinySearch","Search","TinyIconSearch","IconSearch","TinyPopover","Popover","DraggableTree","isBlock","isSaved","getPageList","COMMON_PAGE_GROUP_ID","switchPage","switchPageById","getAppId","pageSearchValue","collapseValue","currentNodeData","onMounted","onUnmounted","refreshPageList","nodeClick","e","openSettingPanel","isPageLocked","username","occupier","popoverRefs","setPopoverRef","el","rawData","getCanvasStatus","Lock","handleClickPageSettings","rowOperations","label","action","map","doClose","getRowOperations","slice","group","filter","pageDetail","finally","handleMoveNode","newParent","createPublicPage","stopPropagation","preventDefault","IconFolderOpened","IconFolderClosed","_hoisted_3","_hoisted_5","_hoisted_6","_Fragment","_component_tiny_search","_component_tiny_icon_search","_renderList","groupItem","_toDisplayString","_component_draggable_tree","_hoisted_4","_component_tiny_popover","operation","_normalizeClass","api","getPageById","_sfc_main$1","PageSetting","PluginPanel","PageFolderSetting","PageTree","String","fixedPanels","panelState","emitEvent","provide","pageTreeRef","ROOT_ID","docsUrl","useHelp","getDocsUrl","createNewPage","Error","createNewFolder","settingHome","isPageChange","openNewPage","pluginPanelClosed","_component_plugin_panel","_component_page_tree","_component_page_setting","_component_page_folder_setting","ELEMENT_TAG","DEFAULT_PAGE","selectedTemplateCard","generateCssString","pageOptions","materialsOptions","formatCssRule","className","style","baseStyle","getOptions","syncPageContent","dataCopy","obj","objCopy","isValuesEqual","getParentNode","newParentId","folderData","parentData","currentPageDataId","curDataIndex","splicedPageData","getPageContent","isChangePageData","generateTree","parentNode","pagesData","firstGroupData","secondGroupData","namedNode","firstGroupTreeData","secondGroupTreeData","getAncestorsRecursively","pageNode","getAncestors","withFolders","predicate","flatternFolder","pagesOrFolders","flattened","getPageChildren","clearCurrentState","clearPreview","useBreadcrumb","switchPageWithConfirm","resolve","proceed","updatePageContent","familyPages","currentPageSchema","fetchPageDetailIfNeeded","updateParentId","handlePageDetail","PageService","HOOK_NAME","_sfc_main","TinyForm","Form","TinyFormItem","FormItem","TinyInput","TinySelect","Select","TinyRadio","Radio","modelValue","pageParentId","get","set","childPageList","childPageOp","defaultPageId","setChildAndDefaultPage","icon","iconFile","changeDefaultPage","currentRoute","parent","startsWith","pageRules","required","pattern","REGEXP_PAGE_NAME","min","max","REGEXP_ROUTE","folderRules","REGEXP_FOLDER_NAME","pageToTreeData","getNodeIcon","_resolveComponent","treeFolderOp","staticPages","concat","shrinkIcon","expandIcon","renderContent","_h","generalForm","Promise","validate","valid","changeParentForderId","_hoisted_7","_hoisted_8","_component_tiny_form","_component_tiny_form_item","_component_tiny_radio","_component_tiny_input","_component_tiny_select","entry"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentiny/tiny-engine-plugin-page",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0-alpha.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"homepage": "https://opentiny.design/tiny-engine",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@opentiny/tiny-engine-common": "2.
|
|
29
|
-
"@opentiny/tiny-engine-meta-register": "2.
|
|
30
|
-
"@opentiny/tiny-engine-utils": "2.
|
|
28
|
+
"@opentiny/tiny-engine-common": "2.6.0-alpha.1",
|
|
29
|
+
"@opentiny/tiny-engine-meta-register": "2.6.0-alpha.1",
|
|
30
|
+
"@opentiny/tiny-engine-utils": "2.6.0-alpha.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@opentiny/tiny-engine-vite-plugin-meta-comments": "2.
|
|
33
|
+
"@opentiny/tiny-engine-vite-plugin-meta-comments": "2.6.0-alpha.1",
|
|
34
34
|
"@vitejs/plugin-vue": "^5.1.2",
|
|
35
35
|
"@vitejs/plugin-vue-jsx": "^4.0.1",
|
|
36
36
|
"vite": "^5.4.2"
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"@opentiny/vue-renderless": "^3.20.0",
|
|
42
42
|
"vue": "^3.4.15"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "b5693cf65046219d54993c50047b932d96eaf91e"
|
|
45
45
|
}
|