diff --git a/packages/amis-editor/src/plugin/Page.tsx b/packages/amis-editor/src/plugin/Page.tsx index cd2e7177d..f28a4b62e 100644 --- a/packages/amis-editor/src/plugin/Page.tsx +++ b/packages/amis-editor/src/plugin/Page.tsx @@ -1,13 +1,13 @@ import {ContainerWrapper} from 'amis-editor-core'; import {registerEditorPlugin} from 'amis-editor-core'; -import {BaseEventContext, BasePlugin} from 'amis-editor-core'; -import {getSchemaTpl} from 'amis-editor-core'; +import {BaseEventContext, BasePlugin, getSchemaTpl, defaultValue} from 'amis-editor-core'; import {getEventControlConfig} from '../renderer/event-control/helper'; import { RendererPluginAction, RendererPluginEvent } from 'amis-editor-core'; import type {SchemaObject} from 'amis/lib/Schema'; +import { tipedLabel } from '../component/BaseControl'; export class PagePlugin extends BasePlugin { // 关联渲染器名字 @@ -26,6 +26,9 @@ export class PagePlugin extends BasePlugin { // pluginIcon = 'page-plugin'; // 暂无新 icon scaffold: SchemaObject = { type: 'page', + regions: [ + "body" + ], body: [ { type: 'tpl', @@ -90,170 +93,168 @@ export class PagePlugin extends BasePlugin { wrapper = ContainerWrapper; panelTitle = '页面'; + panelJustify = true; + panelBodyCreator = (context: BaseEventContext) => { return [ getSchemaTpl('tabs', [ { - title: '常规', + title: '属性', body: [ - { - type: 'checkboxes', - name: 'regions', - label: '区域展示', - pipeIn: (value: any) => - Array.isArray(value) - ? value - : ['auto', 'body', 'toolbar', 'aside', 'header'], - pipeOut: (value: any) => { - return Array.isArray(value) && ~value.indexOf('auto') - ? undefined - : value.length - ? value - : ['auto', 'body', 'toolbar', 'aside', 'header']; + getSchemaTpl('collapseGroup', [ + { + title: '基本', + body: [ + { + type: 'checkboxes', + name: 'regions', + label: '区域展示', + pipeIn: (value: any) => + Array.isArray(value) + ? value + : ['body', 'toolbar', 'aside', 'header'], + pipeOut: (value: any) => { + return Array.isArray(value) && value.length ? + value + : ['body', 'toolbar', 'aside', 'header']; + }, + joinValues: false, + extractValue: true, + inline: false, + options: [ + { + label: '内容区', + value: 'body', + }, + { + label: '标题栏', + value: 'header', + }, + { + label: '工具栏', + value: 'toolbar', + }, + { + label: '边栏', + value: 'aside', + } + ] + }, + { + label: '页面标题', + name: 'title', + type: 'input-text' + }, + { + label: '副标题', + name: 'subTitle', + type: 'textarea' + }, + getSchemaTpl('remark', { + label: '标题提示', + hiddenOn: 'data.regions && !data.regions.includes("header") || !data.title' + }), + { + type: 'ae-Switch-More', + name: 'asideResizor', + mode: 'normal', + label: '边栏宽度可调节', + hiddenOn: 'data.regions && !data.regions.includes("aside")', + value: false, + hiddenOnDefault: true, + formType: 'extend', + form: { + body: [ + { + type: 'input-number', + label: '最小宽度', + min: 0, + name: 'asideMinWidth', + pipeIn: defaultValue(160), + pipeOut: (value:any) => value || 0 + }, + { + type: 'input-number', + label: '最大宽度', + min:0, + name: 'asideMaxWidth', + pipeIn: defaultValue(350), + pipeOut: (value:any) => value || 0 + } + ] + } + }, + { + type: 'switch', + label: tipedLabel( + '边栏固定', + '边栏内容是否固定,即不跟随内容区滚动' + ), + name: 'asideSticky', + inputClassName: 'is-inline', + pipeIn: defaultValue(true), + hiddenOn: 'data.regions && !data.regions.includes("aside")' + } + ] }, - joinValues: false, - extractValue: true, - inline: false, - options: [ - { - label: '自动', - value: 'auto' - }, - { - label: '内容区', - value: 'body', - disabledOn: - '!Array.isArray(this.regions) || ~this.regions.indexOf("auto")' - }, - { - label: '边栏', - value: 'aside', - disabledOn: - '!Array.isArray(this.regions) ||~this.regions.indexOf("auto")' - }, - { - label: '工具栏', - value: 'toolbar', - disabledOn: - '!Array.isArray(this.regions) ||~this.regions.indexOf("auto")' - }, - { - label: '顶部', - value: 'header', - disabledOn: - '!Array.isArray(this.regions) ||~this.regions.indexOf("auto")' - } - ] - }, - - { - label: '标题', - name: 'title', - type: 'input-text' - }, - - { - label: '副标题', - name: 'subTitle', - type: 'input-text' - }, - - { - label: '提示', - name: 'remark', - type: 'textarea', - visibleOn: 'this.title', - description: - '标题附近会出现一个提示图标,鼠标放上去会提示该内容。' - }, - getSchemaTpl('data') - ] - }, - - { - title: '接口', - body: [ - getSchemaTpl('api', { - label: '数据初始化接口', - name: 'initApi', - sampleBuilder: (schema: any) => `{ - "status": 0, - "msg": "", - - data: { - // 示例数据 - "id": 1, - "a": "sample" - } -}` - }), - - getSchemaTpl('initFetch'), - - getSchemaTpl('switch', { - label: '开启定时刷新', - name: 'interval', - visibleOn: 'data.initApi', - pipeIn: (value: any) => !!value, - pipeOut: (value: any) => (value ? 3000 : undefined) - }), - - { - name: 'interval', - type: 'input-number', - visibleOn: 'typeof this.interval === "number"', - step: 500 - }, - - getSchemaTpl('switch', { - name: 'silentPolling', - label: '静默刷新', - visibleOn: '!!data.interval', - description: '设置自动定时刷新时是否显示loading' - }), - - { - name: 'stopAutoRefreshWhen', - label: '停止定时刷新检测表达式', - type: 'input-text', - visibleOn: '!!data.interval', - description: - '定时刷新一旦设置会一直刷新,除非给出表达式,条件满足后则不刷新了。' - }, - - { - label: '默认消息提示', - type: 'combo', - name: 'messages', - multiLine: true, - description: - '设置 ajax 默认提示信息,当 ajax 没有返回 msg 信息时有用,如果 ajax 返回携带了 msg 值,则还是以 ajax 返回为主', - items: [ - { - label: '获取成功提示', - type: 'input-text', - name: 'fetchSuccess' - }, - - { - label: '获取失败提示', - type: 'input-text', - name: 'fetchFailed' - }, - - { - label: '保存成功提示', - type: 'input-text', - name: 'saveSuccess' - }, - - { - label: '保存失败提示', - type: 'input-text', - name: 'saveFailed' - } - ] - } + { + title: '数据', + body: [ + // getSchemaTpl('combo-container', { + // type: 'input-kv', + // mode: 'normal', + // name: 'data', + // label: '初始化静态数据' + // }), + getSchemaTpl('apiControl', { + name: 'initApi', + label: tipedLabel( + '初始化接口', + '用来获取初始数据的 api, 返回的数据可以整个 page 级别使用' + ) + }) + ] + }, + , + { + title: '移动端', + body: [ + { + type: 'combo', + name: 'pullRefresh', + mode: 'normal', + noBorder: true, + items: [ + { + type: 'ae-Switch-More', + mode: 'normal', + label: '下拉刷新', + name: 'disabled', + formType: 'extend', + value: true, + trueValue: false, + falseValue: true, + autoFocus: false, + form: { + body: [ + { + name: 'pullingText', + label: tipedLabel('下拉文案', '下拉过程提示文案'), + type: 'input-text' + }, + { + name: 'loosingText', + label: tipedLabel('释放文案', '释放过程提示文案'), + type: 'input-text' + } + ] + } + } + ] + } + ] + } + ]) ] }, { @@ -262,26 +263,26 @@ export class PagePlugin extends BasePlugin { body: [ getSchemaTpl('collapseGroup', [ ...getSchemaTpl('style:common'), - getSchemaTpl('style:className', { + getSchemaTpl('style:classNames', { isFormItem: false, schema: [ getSchemaTpl('className', { name: 'headerClassName', - label: '头部CSS类名' + label: '顶部' }), getSchemaTpl('className', { name: 'bodyClassName', - label: '内容CSS类名' + label: '内容区' }), getSchemaTpl('className', { name: 'asideClassName', - label: '边栏CSS类名' + label: '边栏' }), getSchemaTpl('className', { name: 'toolbarClassName', - label: '工具栏CSS类名' + label: '工具栏' }) ] }) @@ -297,100 +298,65 @@ export class PagePlugin extends BasePlugin { ...getEventControlConfig(this.manager, context) }) ] - }, - { - title: '其他', - body: [ - { - type: 'combo', - name: 'pullRefresh', - multiLine: true, - noBorder: true, - items: [ - { - type: 'switch', - label: '移动端下拉刷新', - name: 'disabled', - mode: 'horizontal', - horizontal: { - justify: true, - left: 8 - }, - inputClassName: 'is-inline ', - trueValue: false, - falseValue: true - }, - { - name: 'pullingText', - label: '下拉过程提示文案', - type: 'input-text', - visibleOn: '!this.disabled' - }, - { - name: 'loosingText', - label: '释放过程提示文案', - type: 'input-text', - visibleOn: '!this.disabled' - } - ] - } - - // { - // type: 'combo', - // name: 'definitions', - // multiple: true, - // multiLine: true, - // label: '定义', - // description: '定义类型,定义完成后可被子节点引用。', - // pipeIn: (value: any) => - // value - // ? Object.keys(value).map(key => ({ - // key, - // value: value[key] - // })) - // : [], - // pipeOut: (value: any) => - // Array.isArray(value) - // ? value.reduce( - // (obj, current) => ({ - // ...obj, - // [current.key || '']: current.value - // ? current.value - // : {type: 'tpl', tpl: '内容'} - // }), - // {} - // ) - // : undefined, - // items: [ - // { - // type: 'input-text', - // name: 'key', - // label: 'Key', - // required: true - // }, - - // { - // children: ({index}: any) => ( - // - // ) - // } - // ] - // } - ] } + + // { + // type: 'combo', + // name: 'definitions', + // multiple: true, + // multiLine: true, + // label: '定义', + // description: '定义类型,定义完成后可被子节点引用。', + // pipeIn: (value: any) => + // value + // ? Object.keys(value).map(key => ({ + // key, + // value: value[key] + // })) + // : [], + // pipeOut: (value: any) => + // Array.isArray(value) + // ? value.reduce( + // (obj, current) => ({ + // ...obj, + // [current.key || '']: current.value + // ? current.value + // : {type: 'tpl', tpl: '内容'} + // }), + // {} + // ) + // : undefined, + // items: [ + // { + // type: 'input-text', + // name: 'key', + // label: 'Key', + // required: true + // }, + + // { + // children: ({index}: any) => ( + // + // ) + // } + // ] + // } + // ] + // } ]) ]; }; } registerEditorPlugin(PagePlugin); +