import { LEVEL_ENUM, Page, Element, Lifecycle, ActionOptions } from '..'; import Block from './Block'; import { ElementToVueOptions } from './Element'; /** * 子页面类,前端路由控制 */ export declare class View extends Block { /** * 概念类型 */ readonly level: LEVEL_ENUM; /** * 子页面 Id */ readonly id: string; /** * 子页面名称 */ readonly name: string; /** * 前端路径,不带 page 名 */ readonly path: string; /** * 前后端路径 * 由于 name 会改的关系,尽量不要用 * @deprecated */ readonly tempPath: string; /** * 唯一标识码 */ readonly code: string; /** * 标题 */ readonly title: string; /** * 面包屑 */ readonly crumb: string; /** * 是否为默认跳转页 */ readonly first: string; /** * 子页面 Id */ readonly parentId: string; /** * 附加的 script */ readonly script: string; /** * 页面 Id */ readonly pageId: string; /** * 页面模板 Id */ readonly pageTemplateId: number; /** * 所属页面 */ readonly page: Page; /** * 父级子页面 */ readonly parent: View; /** * 子页面 */ readonly children: Array; /** * 正在请求的 Promise * 前端 UI 状态 */ contentPromise: Promise; /** * 输入参数 */ /** * 逻辑列表 */ /** * 树组件的子节点字段 */ readonly moreChildrenFields: Array; /** * @param source 需要合并的部分参数 */ constructor(source?: Partial); private _onChange; /** * 在 mergeBlock 的情况下使用 * 在 loadDetail 的情况下使用 * @returns */ load(): Promise; loadAll(): Promise; isContentLoaded(): boolean; /** * 后续改为根据 id 查找 Element */ attachNodePath(clear?: boolean): void; /** * 根据路径查找子节点 * @param nodePath 节点路径,/1/2 表示根节点的第1个子节点的第2个子节点 * @param node 查找的起始节点 * @examples * - findElementByNodePath('', root) 指根节点本身 * - findElementByNodePath('/', root) 指根节点本身 * - findElementByNodePath('/0', root) 指第0个子节点 * - findElementByNodePath('/2/1', root) 指第2个子节点的第1个子节点 */ findElementByNodePath(nodePath: string, node?: Element): Element; /** * 根据标签查找元素 * @param tag */ findElementByTag(tag: string): Element; /** * 根据属性查找元素 * @param name * @param value */ findElementByAttr(name: string, value: string): Element; addData(res: any): void; importViewCreate(none?: void, actionOptions?: ActionOptions, then?: () => Promise): Promise; /** * 添加子页面 */ create(none?: void, actionOptions?: ActionOptions, then?: () => Promise): Promise; /** * 删除子页面 */ delete(none?: void, actionOptions?: ActionOptions): Promise; /** * 修改子页面 */ update(none?: void, actionOptions?: ActionOptions, then?: () => Promise): Promise; /** * 设置子页面名称 * 如果为顶级子页面,会同时设置 Page 的属性 * @param name 名称 */ setName(name: string): Promise; /** * 设置子页面标题 * 如果为顶级子页面,会同时设置 Page 的属性 * @param title 标题 */ setTitle(title: string): Promise; /** * 设置子页面面包屑 * @param crumb 面包屑 */ setCrumb(crumb: string): Promise; /** * 设置该子页面为默认跳转页 */ setAsFirst(): Promise; canCancelFirst(): boolean; setAsFirstFalse(): Promise; /** * 添加子页面 * @param view */ importView(view: View): Promise; /** * 添加子页面 * @param view */ addView(view: View): Promise; /** * 从模板添加子页面 * @param view 页面名称或页面 Options * @param templateId 页面模板 Id */ addViewFromTemplate(viewName: string | Partial, templateId: number): Promise; /** * 添加页面事件 */ addLifecycle(data: Lifecycle, actionOptions?: ActionOptions): Promise; /** * 删除页面属性 */ removeLifecycle(lifecycle: Lifecycle, actionOptions?: ActionOptions): Promise; /** * 转换成 Vue 中需要的 JS 代码 * @TODO 这一版先做成 componentOptions 式的,后面再美化 */ toScript(options?: ElementToVueOptions): string; /** * 转换成 Vue 文件 */ toVue(options?: ElementToVueOptions): string; /** * 转换成设计器中使用的 Vue 文件 * @param options */ toDesignerVue(options?: ElementToVueOptions): string; /** * 转换成 VueOptions * @TODO 后面 template 可以优化成 render 函数 */ toVueOptions(options?: ElementToVueOptions): { template: string; script: string; }; /** * 合并代码 */ mergeBlock({ code, nodePath, position, parentNodePath }: { code: string; nodePath: string; position: string; parentNodePath: string; }, actionOptions?: ActionOptions, then?: () => Promise): Promise; _removeDef($def: View['$def']): void; undoMergeBlock(res: any): Promise; _addDef($def: View['$def']): void; redoMergeBlock(res: any): Promise; private _syncDef; /** * 从后端 JSON 生成规范的 View 对象 * @param currentView 方便构建子对象时关联,主要在 load 中使用 */ static from(source: any, parent: View, page: Page, currentView?: View): View; /** * 按照模板创建 */ static fromTemplate(templateName: string, source: any, parent: View, page: Page, scope?: 'pc' | 'h5'): Promise; } export default View;