amis 可视化编辑器示例 https://aisuda.github.io/amis-editor-demo
amis , https://aisuda.github.io/amis-editor-demo
npm i
npm run dev
npm i amis-editor
import {Editor} from 'amis-editor';
render() {
return (
<Editor
{...props}
/>
)
}
value: any
amis jsononChange: (value: any) => void
preview?: boolean
autoFocus?: boolean
plugins
name
name my-renderer
@Renderer({
test: /\bmy-renderer$/,
name: 'my-renderer'
})
export default class MyRenderer extends React.Component<MyRendererProps> {
static defaultProps = {
target: 'world'
};
render() {
const {target} = this.props;
return <p>Hello {target}!</p>;
}
}
import {RendererEditor, BasicEditor} from 'amis-editor';
@RendererEditor('my-renderer', {
name: '',
description: '',
// docLink: '/docs/renderers/Nav',
type: 'my-renderer', // scaffold
previewSchema: {
//
type: 'my-renderer',
target: 'demo'
},
scaffold: {
//
type: 'my-renderer',
target: '233'
}
})
export default class MyRendererEditor extends BasicEditor {
tipName = '';
settingsSchema = {
title: '',
body: [
{
type: 'tabs',
tabsMode: 'line',
className: 'm-t-n-xs',
contentClassName: 'no-border p-l-none p-r-none',
tabs: [
{
title: '',
controls: [
{
name: 'target',
label: 'Target',
type: 'text'
}
]
},
{
title: '',
controls: []
}
]
}
]
};
}
https://github.com/fex-team/amis-editor my-renderer
amis-editor deprecated
<Editor>
plugins
Plugin
import {BasePlugin} from 'amis-editor';
export class MyRendererPlugin extends BasePlugin {
rendererName = 'my-renderer';
//
$schema = '/schemas/UnkownSchema.json';
//
name = '';
description = '';
// tag tab
tags = ['', ''];
//
icon = 'fa fa-user';
//
previewSchema = {
type: 'my-renderer',
target: 'demo'
};
//
scaffold = {
type: 'my-renderer',
target: '233'
};
//
panelTitle = '';
panelControls = [
{
type: 'tabs',
tabsMode: 'line',
className: 'm-t-n-xs',
contentClassName: 'no-border p-l-none p-r-none',
tabs: [
{
title: '',
controls: [
{
name: 'target',
label: 'Target',
type: 'text'
}
]
},
{
title: '',
controls: []
}
]
}
];
}
plugin
// 1
import {registerEditorPlugin} from 'amis-editor';
registerEditorPlugin(MyRendererPlugin);
// 2
() => <Editor plugins={[MyRendererPlugin]} />;
, npm .d.ts
export interface PluginEventListener {
onActive?: (event: PluginEvent<ActiveEventContext>) => void;
/**
* event.preventDefault()
*/
beforeInsert?: (event: PluginEvent<InsertEventContext>) => false | void;
afterInsert?: (event: PluginEvent<InsertEventContext>) => void;
/**
*
*/
beforeUpdate?: (event: PluginEvent<ChangeEventContext>) => false | void;
afterUpdate?: (event: PluginEvent<ChangeEventContext>) => void;
/**
*
*/
beforeReplace?: (event: PluginEvent<ReplaceEventContext>) => false | void;
afterReplace?: (event: PluginEvent<ReplaceEventContext>) => void;
/**
*
*/
beforeMove?: (event: PluginEvent<MoveEventContext>) => false | void;
aftterMove?: (event: PluginEvent<MoveEventContext>) => void;
/**
*
*/
beforeDelete?: (event: PluginEvent<BaseEventContext>) => false | void;
afterDelete?: (event: PluginEvent<BaseEventContext>) => void;
beforeResolveEditorInfo?: (event: PluginEvent<RendererInfoResolveEventContext>) => false | void;
afterResolveEditorInfo?: (event: PluginEvent<RendererInfoResolveEventContext>) => void;
beforeResolveJsonSchema?: (event: PluginEvent<RendererJSONSchemaResolveEventContext>) => false | void;
afterResolveJsonSchema?: (event: PluginEvent<RendererJSONSchemaResolveEventContext>) => void;
onDndAccept?: (event: PluginEvent<DragEventContext>) => false | void;
onBuildPanels?: (event: PluginEvent<BuildPanelEventContext>) => void;
onBuildContextMenus?: (event: PluginEvent<ContextMenuEventContext>) => void;
onPreventClick?: (event: PluginEvent<PreventClickEventContext>) => false | void;
}
/**
* interface
*/
export interface PluginInterface extends Partial<BasicRendererInfo>, Partial<BasicSubRenderInfo>, PluginEventListener {
readonly manager: EditorManager;
order?: number;
/**
* getRendererInfo
*/
rendererName?: string;
/**
*
*/
panelIcon?: string;
panelTitle?: string;
panelControls?: Array<any>;
panelDefinitions?: any;
panelApi?: any;
panelSubmitOnChange?: boolean;
panelControlsCreator?: (context: BaseEventContext) => Array<any>;
/**
*
*/
getRendererInfo?: (context: RendererInfoResolveEventContext) => BasicRendererInfo | void;
/**
* JSON Schema uri
*/
buildJSONSchema?: (context: RendererJSONSchemaResolveEventContext) => void | string;
/**
*
*/
buildEditorToolbar?: (context: BaseEventContext, toolbars: Array<BasicToolbarItem>) => void;
/**
*
*/
buildEditorContextMenu?: (context: ContextMenuEventContext, menus: Array<ContextMenuItem>) => void;
/**
*
*/
buildEditorPanel?: (context: BaseEventContext, panels: Array<BasicPanelItem>) => void;
/**
*
*/
buildSubRenderers?: (
context: RendererEventContext,
subRenderers: Array<SubRendererInfo>,
renderers: Array<RendererConfig>
) => BasicSubRenderInfo | Array<BasicSubRenderInfo> | void;
}