diff --git a/packages/editor/src/Editor.vue b/packages/editor/src/Editor.vue
index 3e03d789..33854800 100644
--- a/packages/editor/src/Editor.vue
+++ b/packages/editor/src/Editor.vue
@@ -22,6 +22,10 @@
+
+
+
+
@@ -43,6 +47,9 @@
+
+
+
diff --git a/packages/editor/src/layouts/PropsPanel.vue b/packages/editor/src/layouts/PropsPanel.vue
index 31a6409a..a265621b 100644
--- a/packages/editor/src/layouts/PropsPanel.vue
+++ b/packages/editor/src/layouts/PropsPanel.vue
@@ -1,6 +1,9 @@
-
+
+
+
+
+
+
+
+
@@ -41,7 +45,7 @@ export default defineComponent({
props: {
data: {
type: Object as PropType,
- default: () => ({ type: 'tabs', status: '组件', items: ['component-list', 'layer'] }),
+ default: () => ({ type: 'tabs', status: '组件', items: ['component-list', 'layer', 'code-block'] }),
},
},
diff --git a/packages/editor/src/layouts/sidebar/TabPane.vue b/packages/editor/src/layouts/sidebar/TabPane.vue
index 7eec23f2..73dd2633 100644
--- a/packages/editor/src/layouts/sidebar/TabPane.vue
+++ b/packages/editor/src/layouts/sidebar/TabPane.vue
@@ -48,11 +48,12 @@
diff --git a/packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue b/packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue
new file mode 100644
index 00000000..da1f2dad
--- /dev/null
+++ b/packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/packages/editor/src/layouts/sidebar/code-block/useCodeBlock.ts b/packages/editor/src/layouts/sidebar/code-block/useCodeBlock.ts
new file mode 100644
index 00000000..56f582ac
--- /dev/null
+++ b/packages/editor/src/layouts/sidebar/code-block/useCodeBlock.ts
@@ -0,0 +1,37 @@
+import { reactive } from 'vue';
+
+import { CodeBlockConfig } from '../../../type';
+interface State {
+ /** 是否展示代码块编辑区 */
+ isShowCodeBlockEditor: boolean;
+ /** 代码块配置 */
+ codeConfig: CodeBlockConfig | null;
+}
+
+const state = reactive({
+ isShowCodeBlockEditor: false,
+ codeConfig: null,
+});
+
+const getUniqueId = () => Date.now().toString(36) + Math.random().toString(36).substring(2);
+
+// 关闭代码块面板
+const closePanel = () => (state.isShowCodeBlockEditor = false);
+
+// 新增代码块
+const createCodeBlock = () => {
+ // todo 如果已有代码块打开,需要先保存关闭
+ closePanel();
+ state.isShowCodeBlockEditor = true;
+ state.codeConfig = {
+ id: getUniqueId(),
+ name: '代码块',
+ content: `(app) => {\n // place your code here\n}`,
+ };
+};
+
+export default () => ({
+ state,
+ closePanel,
+ createCodeBlock,
+});
diff --git a/packages/editor/src/theme/code-block.scss b/packages/editor/src/theme/code-block.scss
new file mode 100644
index 00000000..bd9a5e29
--- /dev/null
+++ b/packages/editor/src/theme/code-block.scss
@@ -0,0 +1,67 @@
+.m-editor-code-block-list {
+ padding-top: 20px;
+ .create-code-button {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ .divider {
+ margin: 20px 0;
+ }
+}
+.m-editor-code-block-editor-panel {
+ position: absolute;
+ top: 0;
+ left: 4px;
+ width: 100%;
+ height: 100%;
+ z-index: 10;
+ background: #fff;
+
+ .header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 8px 20px;
+ h3.title {
+ font-size: 16px;
+ font-weight: bold;
+ }
+ }
+ .close-btn {
+ background: rgb(213, 71, 71);
+ color: #fff;
+ }
+ .code-name-wrapper {
+ padding: 10px 20px;
+ display: flex;
+ align-items: center;
+ }
+ .m-editor-content {
+ &.fullScreen {
+ height: 100%;
+ width: 100%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 100;
+ }
+ }
+ .m-editor-content-bottom {
+ text-align: right;
+ padding-right: 20px;
+ height: 40px;
+ position: absolute;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ bottom: 0;
+ right: 0;
+ background: #fff;
+ > button {
+ height: 30px;
+ margin-top: 4px;
+ }
+ }
+}
diff --git a/packages/editor/src/theme/index.scss b/packages/editor/src/theme/index.scss
index 6b09990d..1afcfb87 100644
--- a/packages/editor/src/theme/index.scss
+++ b/packages/editor/src/theme/index.scss
@@ -12,3 +12,4 @@
@import "./stage.scss";
@import "./code-editor.scss";
@import "./icon.scss";
+@import "./code-block.scss";
diff --git a/packages/editor/src/type.ts b/packages/editor/src/type.ts
index 86308ed2..b179fb87 100644
--- a/packages/editor/src/type.ts
+++ b/packages/editor/src/type.ts
@@ -243,7 +243,7 @@ export interface SideComponent extends MenuComponent {
* component-list: 组件列表
* layer: 已选组件树
*/
-export type SideItem = 'component-list' | 'layer' | SideComponent;
+export type SideItem = 'component-list' | 'layer' | 'code-block' | SideComponent;
/** 工具栏 */
export interface SideBarData {
@@ -305,3 +305,12 @@ export interface ScrollViewerEvent {
scrollHeight: number;
scrollWidth: number;
}
+
+export interface CodeBlockConfig {
+ /** 代码块唯一id */
+ id: string;
+ /** 代码块名称 */
+ name: string;
+ /** 代码块内容 */
+ content: string;
+}