mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-06-16 09:59:24 +08:00
fix(editor): 样式修改,editor pannel使用resize组件
This commit is contained in:
parent
27d8640fbc
commit
c2637b1b0c
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="m-fields-code-select" :key="fieldKey">
|
<div class="m-fields-code-select" :key="fieldKey">
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<m-fields-select
|
<m-fields-select
|
||||||
:config="selectConfig"
|
:config="selectConfig"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="el">
|
<div ref="el" class="m-editor-layout">
|
||||||
<template v-if="typeof props.left !== 'undefined'">
|
<template v-if="typeof props.left !== 'undefined'">
|
||||||
<div class="m-editor-layout-left" :class="leftClass" :style="`width: ${left}px`">
|
<div class="m-editor-layout-left" :class="leftClass" :style="`width: ${left}px`">
|
||||||
<slot name="left"></slot>
|
<slot name="left"></slot>
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="isShowCodeBlockEditor"
|
v-model="isShowCodeBlockEditor"
|
||||||
|
:title="currentTitle"
|
||||||
:fullscreen="true"
|
:fullscreen="true"
|
||||||
:before-close="saveAndClose"
|
:before-close="saveAndClose"
|
||||||
:append-to-body="true"
|
:append-to-body="true"
|
||||||
custom-class="code-editor-dialog"
|
custom-class="code-editor-dialog"
|
||||||
>
|
>
|
||||||
<!-- 左侧列表 -->
|
<layout v-model:left="left" :min-left="45" class="code-editor-layout">
|
||||||
<template v-if="mode === EditorMode.LIST">
|
<!-- 左侧列表 -->
|
||||||
<el-card class="code-editor-side-menu">
|
<template #left v-if="mode === EditorMode.LIST">
|
||||||
<el-tree
|
<el-tree
|
||||||
v-if="!isEmpty(state.codeList)"
|
v-if="!isEmpty(state.codeList)"
|
||||||
ref="tree"
|
ref="tree"
|
||||||
@ -28,46 +29,50 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-tree>
|
</el-tree>
|
||||||
</el-card>
|
</template>
|
||||||
</template>
|
<!-- 右侧区域 -->
|
||||||
<!-- 右侧区域 -->
|
<template #center>
|
||||||
<div
|
<div
|
||||||
v-if="!isEmpty(codeConfig)"
|
v-if="!isEmpty(codeConfig)"
|
||||||
:class="[
|
:class="[
|
||||||
mode === EditorMode.LIST ? 'm-editor-code-block-editor-panel-list-mode' : 'm-editor-code-block-editor-panel',
|
mode === EditorMode.LIST
|
||||||
]"
|
? 'm-editor-code-block-editor-panel-list-mode'
|
||||||
>
|
: 'm-editor-code-block-editor-panel',
|
||||||
<slot name="code-block-edit-panel-header" :id="id"></slot>
|
]"
|
||||||
<el-card shadow="never">
|
>
|
||||||
<template #header>
|
<slot name="code-block-edit-panel-header" :id="id"></slot>
|
||||||
<div class="code-name-wrapper">
|
<el-card shadow="never">
|
||||||
<div class="code-name-label">代码块名称</div>
|
<template #header>
|
||||||
<el-input class="code-name-input" v-model="codeConfig.name" :disabled="!editable" />
|
<div class="code-name-wrapper">
|
||||||
</div>
|
<div class="code-name-label">代码块名称</div>
|
||||||
</template>
|
<el-input class="code-name-input" v-model="codeConfig.name" :disabled="!editable" />
|
||||||
<div class="m-editor-wrapper">
|
</div>
|
||||||
<magic-code-editor
|
</template>
|
||||||
ref="codeEditor"
|
<div class="m-editor-wrapper">
|
||||||
class="m-editor-container"
|
<magic-code-editor
|
||||||
:init-values="`${codeConfig.content}`"
|
ref="codeEditor"
|
||||||
@save="saveCode"
|
class="m-editor-container"
|
||||||
:options="{
|
:init-values="`${codeConfig.content}`"
|
||||||
tabSize: 2,
|
@save="saveCode"
|
||||||
fontSize: 16,
|
:options="{
|
||||||
formatOnPaste: true,
|
tabSize: 2,
|
||||||
readOnly: !editable,
|
fontSize: 16,
|
||||||
}"
|
formatOnPaste: true,
|
||||||
></magic-code-editor>
|
readOnly: !editable,
|
||||||
<div class="m-editor-content-bottom" v-if="editable">
|
}"
|
||||||
<el-button type="primary" class="button" @click="saveCode">保存</el-button>
|
></magic-code-editor>
|
||||||
<el-button type="primary" class="button" @click="saveAndClose">关闭</el-button>
|
<div class="m-editor-content-bottom" v-if="editable">
|
||||||
</div>
|
<el-button type="primary" class="button" @click="saveCode">保存</el-button>
|
||||||
<div class="m-editor-content-bottom" v-else>
|
<el-button type="primary" class="button" @click="saveAndClose">关闭</el-button>
|
||||||
<el-button type="primary" class="button" @click="saveAndClose">关闭</el-button>
|
</div>
|
||||||
</div>
|
<div class="m-editor-content-bottom" v-else>
|
||||||
|
<el-button type="primary" class="button" @click="saveAndClose">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</template>
|
||||||
</div>
|
</layout>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -78,10 +83,13 @@ import { forIn, isEmpty } from 'lodash-es';
|
|||||||
|
|
||||||
import type { CodeBlockContent, CodeDslList, ListState, Services } from '../../../type';
|
import type { CodeBlockContent, CodeDslList, ListState, Services } from '../../../type';
|
||||||
import { EditorMode } from '../../../type';
|
import { EditorMode } from '../../../type';
|
||||||
|
import Layout from '../../Layout.vue';
|
||||||
|
|
||||||
const services = inject<Services>('services');
|
const services = inject<Services>('services');
|
||||||
|
|
||||||
const codeEditor = ref<any | null>(null);
|
const codeEditor = ref<any | null>(null);
|
||||||
|
const left = ref(200);
|
||||||
|
const currentTitle = ref('');
|
||||||
// 编辑器当前需展示的代码块内容
|
// 编辑器当前需展示的代码块内容
|
||||||
const codeConfig = ref<CodeBlockContent | null>(null);
|
const codeConfig = ref<CodeBlockContent | null>(null);
|
||||||
// select选择的内容(ListState)
|
// select选择的内容(ListState)
|
||||||
@ -114,6 +122,7 @@ watchEffect(async () => {
|
|||||||
content: value.content,
|
content: value.content,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
currentTitle.value = state.codeList[0]?.name || '';
|
||||||
});
|
});
|
||||||
|
|
||||||
// 保存代码
|
// 保存代码
|
||||||
@ -148,5 +157,6 @@ const saveAndClose = async () => {
|
|||||||
|
|
||||||
const selectHandler = (data: CodeDslList) => {
|
const selectHandler = (data: CodeDslList) => {
|
||||||
services?.codeBlockService.setId(data.id);
|
services?.codeBlockService.setId(data.id);
|
||||||
|
currentTitle.value = data.name;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
.code-editor-dialog {
|
.code-editor-dialog {
|
||||||
.el-dialog__body {
|
.el-dialog__body {
|
||||||
height: 90%;
|
height: 90%;
|
||||||
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
.el-card {
|
.el-card {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -79,19 +80,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.code-editor-side-menu {
|
.code-editor-layout {
|
||||||
width: 20%;
|
height: 100%;
|
||||||
position: absolute;
|
border: 1px solid #e4e7ed;
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
background: #fff;
|
|
||||||
|
|
||||||
.side-tree {
|
.side-tree {
|
||||||
margin-top: 10px;
|
height: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
.list-container {
|
.list-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin-left: -20px;
|
margin-left: -10px;
|
||||||
.list-item {
|
.list-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
@ -121,13 +121,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.m-editor-code-block-editor-panel-list-mode {
|
.m-editor-code-block-editor-panel-list-mode {
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 20%;
|
|
||||||
width: 80%;
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
.el-card {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.m-editor-code-block-editor-panel {
|
.m-editor-code-block-editor-panel {
|
||||||
@ -146,15 +145,10 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
.m-editor-content-bottom {
|
.m-editor-content-bottom {
|
||||||
text-align: right;
|
|
||||||
height: 40px;
|
height: 40px;
|
||||||
padding-right: 20px;
|
width: 100%;
|
||||||
position: absolute;
|
|
||||||
width: calc(100% - 30px);
|
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
bottom: 20px;
|
|
||||||
right: 0;
|
|
||||||
background: #fff;
|
background: #fff;
|
||||||
> button {
|
> button {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
@ -13,3 +13,4 @@
|
|||||||
@import "./code-editor.scss";
|
@import "./code-editor.scss";
|
||||||
@import "./icon.scss";
|
@import "./icon.scss";
|
||||||
@import "./code-block.scss";
|
@import "./code-block.scss";
|
||||||
|
@import "./layout.scss";
|
||||||
|
5
packages/editor/src/theme/layout.scss
Normal file
5
packages/editor/src/theme/layout.scss
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.m-editor-layout {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-self: space-between;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user