diff --git a/packages/designer/src/builtin-simulator/bem-tools/index.tsx b/packages/designer/src/builtin-simulator/bem-tools/index.tsx
index c22951c2f..e719b1917 100644
--- a/packages/designer/src/builtin-simulator/bem-tools/index.tsx
+++ b/packages/designer/src/builtin-simulator/bem-tools/index.tsx
@@ -15,8 +15,14 @@ export class BemTools extends Component<{ host: BuiltinSimulatorHost }> {
}
render() {
- const host = this.props.host;
+ // yiyi
+ // live 模式选中,画布会不会有相关交互
+ const { host } = this.props;
+ const { designMode } = host;
const { scrollX, scrollY, scale } = host.viewport;
+ if (designMode === 'live') {
+ return null;
+ }
return (
diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts
index 054294b81..133049fcb 100644
--- a/packages/designer/src/builtin-simulator/host.ts
+++ b/packages/designer/src/builtin-simulator/host.ts
@@ -288,7 +288,10 @@ export class BuiltinSimulatorHost implements ISimulatorHost
{
doc.removeEventListener('mouseup', checkSelect, true);
+ // 鼠标是否移动
if (!isShaken(downEvent, e)) {
- const id = node.id;
+ let id = node.id;
designer.activeTracker.track({ node, instance: nodeInst?.instance });
- if (isMulti && !isRootNode(node) && selection.has(id)) {
+ if (isMulti && !isRootNode(node) && selection?.has(id)) {
selection.remove(id);
} else {
- selection.select(id);
+ if (node.isPage() && node.getChildren()?.notEmpty()) {
+ const firstChildId = node
+ .getChildren()
+ ?.get(0)
+ ?.getId();
+ if (firstChildId) id = firstChildId;
+ }
+ selection?.select(id);
// dirty code should refector
const editor = this.designer?.editor;
@@ -349,15 +365,15 @@ export class BuiltinSimulatorHost implements ISimulatorHost {
- if (!detecting.enable) {
+ if (!detecting.enable || this.designMode !== 'design') {
return;
}
const nodeInst = this.getNodeInstanceFromElement(e.target as Element);
diff --git a/packages/designer/src/designer/designer-view.tsx b/packages/designer/src/designer/designer-view.tsx
index fa601a994..011eaa80e 100644
--- a/packages/designer/src/designer/designer-view.tsx
+++ b/packages/designer/src/designer/designer-view.tsx
@@ -40,7 +40,7 @@ export class DesignerView extends Component doc.actived);
}
+ @obx private _config: any = {};
+ @computed get config(): any {
+ // TODO: parse layout Component
+ return this._config;
+ }
+ set config(value: any) {
+ this._config = value;
+ }
+
/**
* 获取项目整体 schema
*/
@@ -55,6 +64,7 @@ export class Project {
componentsTree: [],
...schema,
};
+ this.config = schema?.config;
if (autoOpen) {
if (autoOpen === true) {
@@ -91,9 +101,14 @@ export class Project {
| 'i18n'
| 'css'
| 'dataSource'
+ | 'config'
| string,
value: any,
- ): void {}
+ ): void {
+ if (key === 'config') {
+ this.config = value;
+ }
+ }
/**
* 分字段设置储存数据
@@ -108,8 +123,13 @@ export class Project {
| 'i18n'
| 'css'
| 'dataSource'
+ | 'config'
| string,
- ): any {}
+ ): any {
+ if (key === 'config') {
+ return this.config;
+ }
+ }
private documentsMap = new Map();
diff --git a/packages/editor-preset-vision/src/editor.ts b/packages/editor-preset-vision/src/editor.ts
index c73ac6fdb..23d798d8e 100644
--- a/packages/editor-preset-vision/src/editor.ts
+++ b/packages/editor-preset-vision/src/editor.ts
@@ -20,6 +20,7 @@ globalContext.register(editor, Editor);
export const skeleton = new Skeleton(editor);
editor.set(Skeleton, skeleton);
editor.set('skeleton', skeleton);
+editor.set('designMode', 'live');
export const designer = new Designer({ editor: editor });
editor.set(Designer, designer);
@@ -279,6 +280,9 @@ skeleton.add({
name: 'settingsPane',
type: 'Panel',
content: SettingsPrimaryPane,
+ props: {
+ ignoreRoot: true,
+ },
});
skeleton.add({
area: 'leftArea',
diff --git a/packages/editor-preset-vision/src/pages.ts b/packages/editor-preset-vision/src/pages.ts
index 2a4d723b5..de23cbb2b 100644
--- a/packages/editor-preset-vision/src/pages.ts
+++ b/packages/editor-preset-vision/src/pages.ts
@@ -52,6 +52,15 @@ const pages = Object.assign(project, {
version: '1.0.0',
componentsMap: [],
componentsTree,
+ config: {
+ layout: {
+ componentName: 'MiniappTabNav',
+ props: {
+ logo: '',
+ name: '测试网站',
+ },
+ },
+ },
}, true);
},
addPage(data: OldPageData | RootSchema) {
diff --git a/packages/editor-preset-vision/src/project.ts b/packages/editor-preset-vision/src/project.ts
index 9239a9497..e6a1ec47d 100644
--- a/packages/editor-preset-vision/src/project.ts
+++ b/packages/editor-preset-vision/src/project.ts
@@ -1,17 +1,15 @@
-export class Project {
- private schema: any;
+import { designer } from './editor';
- constructor() {
- this.schema = {};
- }
+const { project } = designer;
- getSchema() {
- return this.schema;
- }
+Object.assign(project, {
+ getSchema(): any {
+ return this.schema || {};
+ },
setSchema(schema: any) {
this.schema = schema;
- }
-}
+ },
+});
-export default new Project();
+export default project;
diff --git a/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx b/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx
index 80abfa1c3..d316b62d9 100644
--- a/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx
+++ b/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx
@@ -7,7 +7,7 @@ import { SettingsPane } from './settings-pane';
import { createIcon } from '@ali/lowcode-utils';
@observer
-export class SettingsPrimaryPane extends Component<{ editor: Editor }> {
+export class SettingsPrimaryPane extends Component<{ editor: Editor; config: any }> {
private main = new SettingsMain(this.props.editor);
@obx.ref private _activeKey?: any;
@@ -22,6 +22,8 @@ export class SettingsPrimaryPane extends Component<{ editor: Editor }> {
renderBreadcrumb() {
const { settings } = this.main;
+ const { config } = this.props;
+ const shouldIgnoreRoot = config.props?.ignoreRoot;
if (!settings) {
return null;
}
@@ -43,6 +45,10 @@ export class SettingsPrimaryPane extends Component<{ editor: Editor }> {
let l = 3;
while (l-- > 0 && node) {
const _node = node;
+ if (shouldIgnoreRoot && node.isRoot()) {
+ node = null;
+ continue;
+ }
const props =
l === 2
? {}
diff --git a/packages/plugin-designer/src/index.tsx b/packages/plugin-designer/src/index.tsx
index b23442165..cc1f76748 100644
--- a/packages/plugin-designer/src/index.tsx
+++ b/packages/plugin-designer/src/index.tsx
@@ -13,6 +13,7 @@ interface DesignerPluginState {
extraEnvironment?: any[] | null;
renderEnv?: string;
device?: string;
+ designMode?: string;
}
export default class DesignerPlugin extends PureComponent {
@@ -24,6 +25,7 @@ export default class DesignerPlugin extends PureComponent
);
diff --git a/packages/rax-simulator-renderer/src/renderer-view.tsx b/packages/rax-simulator-renderer/src/renderer-view.tsx
index dee038dfe..b9537f120 100644
--- a/packages/rax-simulator-renderer/src/renderer-view.tsx
+++ b/packages/rax-simulator-renderer/src/renderer-view.tsx
@@ -90,8 +90,13 @@ class Layout extends Component<{ rendererContainer: SimulatorRendererContainer }
const layout = rendererContainer.layout;
if (layout) {
- const { Component, props } = layout;
- return {children};
+ const { Component, props, componentName } = layout;
+ if (Component) {
+ return {children};
+ }
+ if (componentName) {
+ return createElement(rendererContainer.getComponent(componentName), {}, [children]);
+ }
}
return {children};
diff --git a/packages/types/src/app-config.ts b/packages/types/src/app-config.ts
new file mode 100644
index 000000000..6343645c9
--- /dev/null
+++ b/packages/types/src/app-config.ts
@@ -0,0 +1,19 @@
+export interface AppConfig {
+ sdkVersion?: string;
+ historyMode?: string;
+ targetRootID?: string;
+ layout?: Layout;
+ theme?: Theme;
+ [key: string]: any;
+}
+
+interface Theme {
+ package: string;
+ version: string;
+ primary: string;
+}
+
+interface Layout {
+ componentName?: string;
+ props?: Record;
+}
diff --git a/packages/types/src/schema.ts b/packages/types/src/schema.ts
index d3e74f6ea..65e8ae51b 100644
--- a/packages/types/src/schema.ts
+++ b/packages/types/src/schema.ts
@@ -3,6 +3,7 @@ import { CompositeValue, JSExpression, CompositeObject, JSONObject } from './val
import { DataSource } from './data-source';
import { I18nMap } from './i18n';
import { UtilsMap } from './utils';
+import { AppConfig } from './app-config';
export interface NodeSchema {
id?: string;
@@ -83,6 +84,7 @@ export interface ProjectSchema {
constants?: JSONObject;
css?: string;
dataSource?: DataSource;
+ config?: AppConfig;
}
export function isNodeSchema(data: any): data is NodeSchema {