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; +}