From a5c005fcb8fe3c99fcf7f87f80430066785e2a9d Mon Sep 17 00:00:00 2001 From: yaoyun8 Date: Thu, 16 Nov 2023 00:04:48 -0800 Subject: [PATCH 1/2] fix:loading can't be closed when state is saved --- .../common/component/MetaBindVariable.vue | 5 +-- packages/controller/src/useSaveLocal.js | 4 +-- packages/plugins/data/src/Main.vue | 2 +- packages/plugins/script/src/js/method.js | 2 +- packages/toolbars/save/src/js/index.js | 35 ++++++++++--------- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/common/component/MetaBindVariable.vue b/packages/common/component/MetaBindVariable.vue index 7af2d67a87..e8b53ac778 100644 --- a/packages/common/component/MetaBindVariable.vue +++ b/packages/common/component/MetaBindVariable.vue @@ -395,8 +395,9 @@ export default { // 如果新旧值不一样就显示未保存状态 if (oldValue !== variableContent) { - const { pageState } = useCanvas() - pageState.isSaved = false + const { setSaved } = useCanvas() + + setSaved(false) variableContent = formatString(variableContent, 'javascript') } diff --git a/packages/controller/src/useSaveLocal.js b/packages/controller/src/useSaveLocal.js index f36e1961ac..fdd88c8c94 100644 --- a/packages/controller/src/useSaveLocal.js +++ b/packages/controller/src/useSaveLocal.js @@ -20,7 +20,7 @@ import { getGlobalConfig } from './globalConfig' const bridge = window.vscodeBridge const confirmSaveLocal = async () => { - const { pageState } = useCanvas() + const { pageState, setSaved } = useCanvas() const currentPageId = pageState.currentPageId || pageState.currentPage.id const currentPageName = pageState.currentPageName || pageState.currentPage.name @@ -42,7 +42,7 @@ const confirmSaveLocal = async () => { const message = savePage.data.isSuccess ? '保存文件到本地成功' : errorMsg - savePage.data.isSuccess && (pageState.isSaved = true) + savePage.data.isSuccess && setSaved(true) Modal.message({ message, status: 'error', duration: '5000', top: 60 }) } diff --git a/packages/plugins/data/src/Main.vue b/packages/plugins/data/src/Main.vue index f9cd7acbf9..4143fdf898 100644 --- a/packages/plugins/data/src/Main.vue +++ b/packages/plugins/data/src/Main.vue @@ -189,7 +189,7 @@ export default { // 保存数据 add(name, variable) isPanelShow.value = false - useCanvas().pageState.isSaved = false + setSaved(false) // 触发画布渲染 setState({ [name]: variable }) diff --git a/packages/plugins/script/src/js/method.js b/packages/plugins/script/src/js/method.js index 11e901ba1b..19f6be09eb 100644 --- a/packages/plugins/script/src/js/method.js +++ b/packages/plugins/script/src/js/method.js @@ -113,7 +113,7 @@ const saveMethods = () => { saveMethod({ name, content }) }) - useCanvas().pageState.isSaved = false + useCanvas().setSaved(false) state.isChanged = false useNotify({ type: 'success', diff --git a/packages/toolbars/save/src/js/index.js b/packages/toolbars/save/src/js/index.js index 05135435dd..2f57e54b3e 100644 --- a/packages/toolbars/save/src/js/index.js +++ b/packages/toolbars/save/src/js/index.js @@ -10,13 +10,14 @@ * */ +import { reactive, ref } from 'vue' import { useBlock, useCanvas, useLayout, useNotify, usePage } from '@opentiny/tiny-engine-controller' import { getSchema, setSchema } from '@opentiny/tiny-engine-canvas' import { constants } from '@opentiny/tiny-engine-utils' -import { reactive, ref, watch } from 'vue' import { Loading } from '@opentiny/vue' -const { pageState, isSaved, isBlock } = useCanvas() import { handlePageUpdate } from '@opentiny/tiny-engine-common/js/http' + +const { pageState, isSaved, isBlock } = useCanvas() const { PLUGIN_NAME, getPluginApi } = useLayout() const { getCurrentBlock } = useBlock() const { PAGE_STATUS } = constants @@ -27,7 +28,9 @@ const state = reactive({ originalCode: '', disabled: false }) + export const isLoading = ref(false) + // 保存或新建区块 const saveBlock = async (pageSchema) => { const api = getPluginApi(PLUGIN_NAME.BlockManage) @@ -48,6 +51,7 @@ const savePage = async (pageSchema) => { const params = { page_content: pageSchema } + isLoading.value = true await handlePageUpdate(currentPage.id, { ...currentPage, ...params }) isLoading.value = false @@ -55,29 +59,35 @@ const savePage = async (pageSchema) => { export const saveCommon = (value) => { const pageSchema = JSON.parse(value) + pageState.pageSchema = pageSchema // setSchema 是异步,保存直接传递当前 schema setSchema(pageSchema) + if (pageSettingState?.isAIPage) { if (isTemporaryPage.saved) { isTemporaryPage.saved = false } + // 如果当前页面没有ID,为临时生成的页面,则打开新建页面面板 isTemporaryPage.saved = true const pageContent = 'page_content' + pageSettingState.currentPageData[pageContent] = pageSchema + return } - isBlock() ? saveBlock(pageSchema) : savePage(pageSchema) + + return isBlock() ? saveBlock(pageSchema) : savePage(pageSchema) } export const openCommon = async () => { if (isSaved() || state.disabled) { return } + const pageStatus = useLayout().layoutState?.pageStatus const curPageState = pageStatus?.state const pageInfo = pageStatus?.data - const ERR_MSG = { [PAGE_STATUS.Release]: '当前页面未锁定,请先锁定再保存', [PAGE_STATUS.Empty]: '当前应用无页面,请先新建页面再保存', @@ -103,6 +113,7 @@ export const openCommon = async () => { }) const pageSchema = getSchema() + state.code = JSON.stringify(pageSchema || {}, null, 2) // 获取请求前schema代码,暂时先屏蔽 @@ -119,17 +130,9 @@ export const openCommon = async () => { } */ - saveCommon(state.code) - - if (isLoading.value) { + saveCommon(state.code).finally(() => { state.disabled = false - } - watch( - () => pageState.isSaved, - (value) => { - if (value) { - loadingInstance.close() - } - } - ) + loadingInstance.close() + loadingInstance = null + }) } From 66f1e923b9d95f3a5bbda0e33258c9ea838aa1aa Mon Sep 17 00:00:00 2001 From: yaoyun8 Date: Thu, 16 Nov 2023 00:14:18 -0800 Subject: [PATCH 2/2] fix: remove global loading --- packages/toolbars/save/src/js/index.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/toolbars/save/src/js/index.js b/packages/toolbars/save/src/js/index.js index 2f57e54b3e..33e1532dd2 100644 --- a/packages/toolbars/save/src/js/index.js +++ b/packages/toolbars/save/src/js/index.js @@ -14,7 +14,6 @@ import { reactive, ref } from 'vue' import { useBlock, useCanvas, useLayout, useNotify, usePage } from '@opentiny/tiny-engine-controller' import { getSchema, setSchema } from '@opentiny/tiny-engine-canvas' import { constants } from '@opentiny/tiny-engine-utils' -import { Loading } from '@opentiny/vue' import { handlePageUpdate } from '@opentiny/tiny-engine-common/js/http' const { pageState, isSaved, isBlock } = useCanvas() @@ -106,11 +105,6 @@ export const openCommon = async () => { } state.disabled = true - let loadingInstance = Loading.service({ - lock: true, - text: '保存中', - background: 'rgba(0, 0, 0, 0.5)' - }) const pageSchema = getSchema() @@ -132,7 +126,5 @@ export const openCommon = async () => { saveCommon(state.code).finally(() => { state.disabled = false - loadingInstance.close() - loadingInstance = null }) }