diff --git a/src/@core/utils/index.ts b/src/@core/utils/index.ts index 2a8ad636..3da0fb91 100644 --- a/src/@core/utils/index.ts +++ b/src/@core/utils/index.ts @@ -73,3 +73,12 @@ export function isContained(subArray: any[], mainArray: any[]): boolean { export function isIntersected(array1: any[], array2: any[]): boolean { return array1.some(element => array2.includes(element)) } + +export function isNullOrEmptyObject(obj: any): boolean { + // 首先判断是否为 null 或 undefined + if (obj === null || obj === undefined) + return true + + // 然后判断是否为空对象 + return !!(typeof obj === 'object' && Object.keys(obj).length === 0) +} diff --git a/src/components/cards/PluginCard.vue b/src/components/cards/PluginCard.vue index e2947952..756c3263 100644 --- a/src/components/cards/PluginCard.vue +++ b/src/components/cards/PluginCard.vue @@ -3,6 +3,7 @@ import { useToast } from 'vue-toast-notification' import api from '@/api' import type { Plugin } from '@/api/types' import FormRender from '@/components/render/FormRender.vue' +import { isNullOrEmptyObject } from '@core/utils' // 输入参数 const props = defineProps({ @@ -60,7 +61,8 @@ async function loadPluginForm() { const result: { [key: string]: any } = await api.get(`plugin/form/${props.plugin?.id}`) if (result) { pluginFormItems.value = result.conf - pluginConfigForm.value = result.model + if (result.model) + pluginConfigForm.value = result.model } } catch (error) { @@ -84,7 +86,7 @@ async function loadPluginPage() { async function loadPluginConf() { try { const result: { [key: string]: any } = await api.get(`plugin/${props.plugin?.id}`) - if (result) + if (!isNullOrEmptyObject(result)) pluginConfigForm.value = result } catch (error) { @@ -116,9 +118,9 @@ function showPluginInfo() { } // 显示插件配置 -function showPluginConfig() { +async function showPluginConfig() { // 加载插件表单 - loadPluginForm() + await loadPluginForm() // 加载插件配置 loadPluginConf() // 加载详情数据 @@ -203,7 +205,7 @@ const dropdownItems = ref([ > - + diff --git a/src/components/render/FormRender.vue b/src/components/render/FormRender.vue index 82bce909..08d684a0 100644 --- a/src/components/render/FormRender.vue +++ b/src/components/render/FormRender.vue @@ -11,18 +11,28 @@ interface RenderProps { // 输入参数 const elementProps = defineProps({ config: Object as PropType, + form: Object as PropType, }) -// 配置表单 +// 配置元素 const formItem = ref(elementProps.config || { component: 'div', props: {}, content: [], }) + +// 配置数据 +const formData = ref(elementProps.form || {})