2022-06-13 21:03:34 +08:00

106 lines
2.1 KiB
Vue

<template>
<div style="width: 100%">
<nav-menu :data="menu"></nav-menu>
<div class="table-content">
<m-table class="left-panel" :columns="columns" :data="data" :show-header="true"></m-table>
<el-tabs class="right-panel" modelValue="columns">
<el-tab-pane label="columns" name="columns">
<magic-code-editor class="code-editor-content" :init-values="columns" @save="change"></magic-code-editor>
</el-tab-pane>
<el-tab-pane label="data" name="data">
<magic-code-editor class="code-editor-content" :init-values="data" @save="changeData"></magic-code-editor>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { ElMessage } from 'element-plus';
import { MenuButton } from '@tmagic/editor';
import NavMenu from '../components/NavMenu.vue';
const router = useRouter();
const columns = ref([
{
type: 'expand',
prop: 'b',
table: [
{
prop: 'a',
label: '1',
},
],
},
{
prop: 'a',
label: '1231',
},
]);
const data = ref([
{
a: 'a1',
b: [
{
a: 1,
},
],
},
]);
const menu: MenuButton[] = [
{
type: 'button',
text: 'Editor Playground',
handler: () => router.push('/'),
},
{
type: 'button',
text: 'Form Playground',
handler: () => router.push('form'),
},
];
function change(value: string) {
try {
// eslint-disable-next-line no-eval
columns.value = eval(value);
ElMessage.success('更新成功');
} catch (e: any) {
ElMessage.error(e.message);
}
}
function changeData(value: string) {
try {
// eslint-disable-next-line no-eval
data.value = eval(value);
ElMessage.success('更新成功');
} catch (e: any) {
ElMessage.error(e.message);
}
}
</script>
<style lang="scss">
.table-content {
display: flex;
height: calc(100% - 35px);
.right-panel,
.left-panel {
width: 50%;
}
.code-editor-content {
height: calc(100vh - 100px);
}
}
</style>