mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-09-18 03:20:03 +08:00
87 lines
2.3 KiB
Vue
87 lines
2.3 KiB
Vue
<template>
|
|
<a v-if="config.href && !disabled" target="_blank" :href="href" :style="config.css || {}">{{ displayText }}</a>
|
|
<span v-else-if="config.href && disabled" :style="config.disabledCss || {}">{{ displayText }}</span>
|
|
<div v-else class="m-fields-link">
|
|
<TMagicButton link type="primary" @click="editHandler">点击编辑</TMagicButton>
|
|
<FormDialog
|
|
ref="editor"
|
|
:title="config.formTitle || '编辑扩展配置'"
|
|
:width="config.formWidth"
|
|
:values="formValue"
|
|
:config="formConfig"
|
|
:parentValues="values"
|
|
:fullscreen="config.fullscreen"
|
|
@submit="action"
|
|
></FormDialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { computed, inject, ref } from 'vue';
|
|
|
|
import { TMagicButton } from '@tmagic/design';
|
|
|
|
import FormDialog from '../FormDialog.vue';
|
|
import type { FieldProps, FormState, LinkConfig } from '../schema';
|
|
import { useAddField } from '../utils/useAddField';
|
|
|
|
defineOptions({
|
|
name: 'MFormLink',
|
|
});
|
|
|
|
const props = defineProps<FieldProps<LinkConfig>>();
|
|
|
|
const emit = defineEmits(['change']);
|
|
|
|
useAddField(props.prop);
|
|
|
|
const formValue = ref({});
|
|
const editor = ref<InstanceType<typeof FormDialog>>();
|
|
const mForm = inject<FormState | undefined>('mForm');
|
|
|
|
const href = computed(() => {
|
|
if (typeof props.config.href === 'function' && props.model) {
|
|
return props.config.href(props.model);
|
|
}
|
|
return props.config.href || props.model?.[props.name];
|
|
});
|
|
|
|
const init = () => {
|
|
formValue.value = props.model?.[props.name] || {};
|
|
};
|
|
|
|
const formConfig = computed(() => {
|
|
if (typeof props.config.form === 'function') {
|
|
return props.config.form(mForm, {
|
|
model: props.model || {},
|
|
values: props.values || {},
|
|
});
|
|
}
|
|
return props.config.form;
|
|
});
|
|
|
|
const displayText = computed(() => {
|
|
if (typeof props.config.displayText === 'function') {
|
|
return props.config.displayText(mForm, { model: props.model || {} });
|
|
}
|
|
if (props.config.displayText) {
|
|
return props.config.displayText;
|
|
}
|
|
return '跳转';
|
|
});
|
|
|
|
const editHandler = () => {
|
|
init();
|
|
editor.value && (editor.value.dialogVisible = true);
|
|
};
|
|
|
|
const action = (data: any) => {
|
|
if (props.model) {
|
|
props.model[props.name] = data;
|
|
formValue.value = data;
|
|
emit('change', props.model[props.name]);
|
|
}
|
|
editor.value && (editor.value.dialogVisible = false);
|
|
};
|
|
</script>
|