mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-12-12 19:52:49 +00:00
79 lines
2.2 KiB
Vue
79 lines
2.2 KiB
Vue
<template>
|
||
<m-form
|
||
:class="`m-editor-props-panel ${propsPanelSize}`"
|
||
popper-class="m-editor-props-panel-popper"
|
||
ref="configForm"
|
||
:size="propsPanelSize"
|
||
:init-values="values"
|
||
:config="curFormConfig"
|
||
@change="submit"
|
||
></m-form>
|
||
</template>
|
||
|
||
<script lang="ts">
|
||
import { computed, defineComponent, getCurrentInstance, inject, onMounted, ref, watchEffect } from 'vue';
|
||
import { ElMessage } from 'element-plus';
|
||
|
||
import type { FormValue, MForm } from '@tmagic/form';
|
||
import type { MNode } from '@tmagic/schema';
|
||
|
||
import type { Services } from '@editor/type';
|
||
|
||
export default defineComponent({
|
||
name: 'm-editor-props-panel',
|
||
|
||
emits: ['mounted'],
|
||
|
||
setup(props, { emit }) {
|
||
const internalInstance = getCurrentInstance();
|
||
const values = ref<FormValue>({});
|
||
const configForm = ref<InstanceType<typeof MForm>>();
|
||
// ts类型应该是FormConfig, 但是打包时会出错,所以暂时用any
|
||
const curFormConfig = ref<any>([]);
|
||
const services = inject<Services>('services');
|
||
const node = computed(() => services?.editorService.get<MNode | null>('node'));
|
||
|
||
const init = async () => {
|
||
if (!node.value) {
|
||
curFormConfig.value = [];
|
||
return;
|
||
}
|
||
|
||
const type = node.value.type || (node.value.items ? 'container' : 'text');
|
||
curFormConfig.value = (await services?.propsService.getPropsConfig(type)) || [];
|
||
values.value = node.value;
|
||
};
|
||
|
||
watchEffect(init);
|
||
services?.propsService.on('props-configs-change', init);
|
||
|
||
onMounted(() => {
|
||
emit('mounted', internalInstance);
|
||
});
|
||
|
||
return {
|
||
values,
|
||
configForm,
|
||
curFormConfig,
|
||
propsPanelSize: computed(() => services?.uiService.get('propsPanelSize') || 'small'),
|
||
|
||
async submit() {
|
||
try {
|
||
const values = await configForm.value?.submitForm();
|
||
services?.editorService.update(values);
|
||
} catch (e: any) {
|
||
console.error(e);
|
||
ElMessage.closeAll();
|
||
ElMessage.error({
|
||
duration: 10000,
|
||
showClose: true,
|
||
message: e.message,
|
||
dangerouslyUseHTMLString: true,
|
||
});
|
||
}
|
||
},
|
||
};
|
||
},
|
||
});
|
||
</script>
|