feat(editor): http数据源请求体配置支持写json

This commit is contained in:
roymondchen 2023-11-28 17:12:12 +08:00
parent f8125aa149
commit 141e1c7130
3 changed files with 79 additions and 30 deletions

View File

@ -1,37 +1,60 @@
<template> <template>
<div class="m-fields-key-value"> <div class="m-fields-key-value">
<div class="m-fields-key-value-item" v-for="(item, index) in records" :key="index"> <div v-if="!showCode">
<TMagicInput <div class="m-fields-key-value-item" v-for="(item, index) in records" :key="index">
placeholder="key" <TMagicInput
v-model="records[index][0]" placeholder="key"
:disabled="disabled" v-model="records[index][0]"
:size="size" :disabled="disabled"
@change="keyChangeHandler" :size="size"
></TMagicInput> @change="keyChangeHandler"
<span class="m-fileds-key-value-delimiter">:</span> ></TMagicInput>
<TMagicInput <span class="m-fileds-key-value-delimiter">:</span>
placeholder="value" <TMagicInput
v-model="records[index][1]" placeholder="value"
:disabled="disabled" v-model="records[index][1]"
:size="size" :disabled="disabled"
@change="valueChangeHandler" :size="size"
></TMagicInput> @change="valueChangeHandler"
></TMagicInput>
<TMagicButton <TMagicButton
class="m-fileds-key-value-delete" class="m-fileds-key-value-delete"
type="danger" type="danger"
:size="size" :size="size"
:disabled="disabled" :disabled="disabled"
circle circle
plain plain
:icon="Delete" :icon="Delete"
@click="deleteHandler(index)" @click="deleteHandler(index)"
></TMagicButton> ></TMagicButton>
</div>
<TMagicButton type="primary" :size="size" :disabled="disabled" plain :icon="Plus" @click="addHandler"
>添加</TMagicButton
>
</div> </div>
<TMagicButton type="primary" :size="size" :disabled="disabled" plain :icon="Plus" @click="addHandler" <MagicCodeEditor
>添加</TMagicButton v-if="config.advanced && showCode"
> height="200px"
:init-values="model[name]"
language="json"
:options="{
readOnly: disabled,
}"
:parse="true"
@save="save"
></MagicCodeEditor>
<TMagicButton
v-if="config.advanced"
size="default"
:disabled="disabled"
text
:icon="CodeIcon"
@click="showCode = !showCode"
></TMagicButton>
</div> </div>
</template> </template>
@ -42,6 +65,9 @@ import { Delete, Plus } from '@element-plus/icons-vue';
import { TMagicButton, TMagicInput } from '@tmagic/design'; import { TMagicButton, TMagicInput } from '@tmagic/design';
import type { FieldProps } from '@tmagic/form'; import type { FieldProps } from '@tmagic/form';
import CodeIcon from '@editor/icons/CodeIcon.vue';
import MagicCodeEditor from '@editor/layouts/CodeEditor.vue';
defineOptions({ defineOptions({
name: 'MEditorKeyValue', name: 'MEditorKeyValue',
}); });
@ -52,6 +78,7 @@ const props = withDefaults(
type: 'key-value'; type: 'key-value';
name: string; name: string;
text: string; text: string;
advanced?: boolean;
}> }>
>(), >(),
{ {
@ -62,9 +89,19 @@ const props = withDefaults(
const emit = defineEmits<(e: 'change', value: Record<string, any>) => void>(); const emit = defineEmits<(e: 'change', value: Record<string, any>) => void>();
const records = ref<[string, string][]>([]); const records = ref<[string, string][]>([]);
const showCode = ref(false);
watchEffect(() => { watchEffect(() => {
records.value = Object.entries(props.model[props.name] || {}); const initValues: [string, any][] = Object.entries(props.model[props.name] || {});
for (const [, value] of initValues) {
if (typeof value !== 'string') {
showCode.value = true;
break;
}
}
records.value = initValues;
}); });
const getValue = () => { const getValue = () => {
@ -93,4 +130,8 @@ const deleteHandler = (index: number) => {
records.value.splice(index, 1); records.value.splice(index, 1);
emit('change', getValue()); emit('change', getValue());
}; };
const save = (v: string | any) => {
emit('change', v);
};
</script> </script>

View File

@ -1,3 +1,10 @@
.m-fields-key-value {
display: flex;
justify-items: center;
align-items: top;
width: 100%;
}
.m-fields-key-value-item { .m-fields-key-value-item {
display: flex; display: flex;
margin-bottom: 10px; margin-bottom: 10px;

View File

@ -46,6 +46,7 @@ export default [
name: 'data', name: 'data',
type: 'key-value', type: 'key-value',
defaultValue: {}, defaultValue: {},
advanced: true,
text: '请求体', text: '请求体',
}, },
{ {