From 11252b8739d6b467bc5dce82972dd6319974c7fe Mon Sep 17 00:00:00 2001 From: GuanMo <13216698987@163.com> Date: Sat, 8 Mar 2025 14:05:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86=E5=92=8C=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构 global-state.ts 中的状态处理,支持数组和对象类型的状态计算 - 修改 VariableConfigurator.vue 中的变量加载方式 - 更新 useResource 中的应用状态获取逻辑,增加兼容性 --- .../src/application-function/global-state.ts | 45 +++++++++++++++---- .../VariableConfigurator.vue | 19 ++++---- .../materials/src/composable/useResource.js | 4 +- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/packages/canvas/render/src/application-function/global-state.ts b/packages/canvas/render/src/application-function/global-state.ts index 9e8f84ae82..3e1623967b 100644 --- a/packages/canvas/render/src/application-function/global-state.ts +++ b/packages/canvas/render/src/application-function/global-state.ts @@ -13,14 +13,43 @@ export function useGlobalState() { watchEffect(() => { reset(stores) globalState.value.forEach(({ id, state = {}, getters = {} }) => { - const computedGetters = Object.keys(getters).reduce( - (acc, key) => ({ - ...acc, - [key]: new Func('return ' + getters[key])().call(acc, state) // parseData(getters[key], null, acc)?.call?.(acc, state) //理论上不应该走parseData, unibuy代码遗留 - }), - {} - ) - stores[id] = { ...state, ...computedGetters } + const hasGetters = Object.keys(getters).length > 0 + + if (Array.isArray(state)) { + if (!hasGetters) { + stores[id] = [...state] + } else { + const computedGetters = {} + Object.keys(getters).forEach((key) => { + try { + computedGetters[key] = new Func('return ' + getters[key])().call(computedGetters, state) + } catch (error) { + computedGetters[key] = undefined + } + }) + + const arrayWithGetters = [...state] + Object.assign(arrayWithGetters, computedGetters) + stores[id] = arrayWithGetters + } + } else if (typeof state !== 'object' || state === null) { + stores[id] = state + } else { + if (!hasGetters) { + stores[id] = { ...state } + } else { + const computedGetters = {} + Object.keys(getters).forEach((key) => { + try { + computedGetters[key] = new Func('return ' + getters[key])().call(computedGetters, state) + } catch (error) { + computedGetters[key] = undefined + } + }) + + stores[id] = Object.assign({}, state, computedGetters) + } + } }) }) return { diff --git a/packages/configurator/src/variable-configurator/VariableConfigurator.vue b/packages/configurator/src/variable-configurator/VariableConfigurator.vue index 43860532d5..6246572531 100644 --- a/packages/configurator/src/variable-configurator/VariableConfigurator.vue +++ b/packages/configurator/src/variable-configurator/VariableConfigurator.vue @@ -505,14 +505,17 @@ export default { state.variables = {} const stores = useResource().appSchemaState.globalState - stores.forEach(({ id, state: storeState = {}, getters = {} }) => { - const loadProp = (prop) => { - const propBinding = `${id}.${prop}` - state.variables[propBinding] = propBinding - } - - Object.keys(storeState).forEach(loadProp) - Object.keys(getters).forEach(loadProp) + stores.forEach(({ id, state: _storeState = {}, _getters = {} }) => { + state.variables[id] = id + // fix: store 列表错误渲染成子属性列表 + // store 值处理迁移到 global-state.ts 进行处理 + // const loadProp = (prop) => { + // const propBinding = `${id}.${prop}` + // state.variables[propBinding] = propBinding + // } + + // Object.keys(storeState).forEach(loadProp) + // Object.keys(getters).forEach(loadProp) }) } else if (item.id === 'loop') { state.bindPrefix = '' diff --git a/packages/plugins/materials/src/composable/useResource.js b/packages/plugins/materials/src/composable/useResource.js index 10577ebd3f..9cfab9a4a4 100644 --- a/packages/plugins/materials/src/composable/useResource.js +++ b/packages/plugins/materials/src/composable/useResource.js @@ -143,8 +143,8 @@ const fetchAppState = async () => { appSchemaState.bridge = appData.bridge appSchemaState.utils = appData.utils - appSchemaState.isDemo = appData.meta?.is_demo - appSchemaState.globalState = appData?.meta.global_state + appSchemaState.isDemo = appData.meta?.isDemo || appData.meta?.is_demo + appSchemaState.globalState = appData?.meta.globalState || appData?.meta.global_state // 词条语言为空时使用默认的语言 const defaultLocales = [ From 8f0642a9003675ae7555bb5a40a96693d082361f Mon Sep 17 00:00:00 2001 From: GuanMo <13216698987@163.com> Date: Thu, 13 Mar 2025 14:30:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=20VariableConfigurator.v?= =?UTF-8?q?ue=20=E4=B8=AD=E7=9A=84=20store=20=E5=88=97=E8=A1=A8=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=86=97?= =?UTF-8?q?=E4=BD=99=E4=BB=A3=E7=A0=81=EF=BC=9B=E6=9B=B4=E6=96=B0=20store.?= =?UTF-8?q?js=20=E4=B8=AD=E7=9A=84=20store=20=E7=8A=B6=E6=80=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=96=B9=E5=BC=8F=EF=BC=8C=E7=A1=AE=E4=BF=9D=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=AD=A3=E7=A1=AE=E8=BF=94=E5=9B=9E=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/variable-configurator/VariableConfigurator.vue | 9 --------- .../templateFiles/src/lowcodeConfig/store.js | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/configurator/src/variable-configurator/VariableConfigurator.vue b/packages/configurator/src/variable-configurator/VariableConfigurator.vue index 02e3cda72b..46700b05ab 100644 --- a/packages/configurator/src/variable-configurator/VariableConfigurator.vue +++ b/packages/configurator/src/variable-configurator/VariableConfigurator.vue @@ -505,15 +505,6 @@ export default { const stores = useResource().appSchemaState.globalState stores.forEach(({ id, state: _storeState = {}, _getters = {} }) => { state.variables[id] = id - // fix: store 列表错误渲染成子属性列表 - // store 值处理迁移到 global-state.ts 进行处理 - // const loadProp = (prop) => { - // const propBinding = `${id}.${prop}` - // state.variables[propBinding] = propBinding - // } - - // Object.keys(storeState).forEach(loadProp) - // Object.keys(getters).forEach(loadProp) }) } else if (item.id === 'loop') { state.bindPrefix = '' diff --git a/packages/vue-generator/src/templates/vue-template/templateFiles/src/lowcodeConfig/store.js b/packages/vue-generator/src/templates/vue-template/templateFiles/src/lowcodeConfig/store.js index f7f39c7a84..d1de82c190 100644 --- a/packages/vue-generator/src/templates/vue-template/templateFiles/src/lowcodeConfig/store.js +++ b/packages/vue-generator/src/templates/vue-template/templateFiles/src/lowcodeConfig/store.js @@ -4,7 +4,7 @@ const useStores = () => { const stores = {} Object.values({ ...useDefinedStores }).forEach((store) => { - stores[store.$id] = store() + stores[store.$id] = store().$state }) return stores