import React, { ReactNode } from 'react'; import Step, { StepConfig } from '../common'; import { ParamConfig } from '../../interface'; import { StatementConfig } from '../../util/statement'; import { EnumerationOptionsConfig } from '../../util/enumeration'; import { InterfaceHelper } from '../..'; import OperationHelper, { OperationConfig } from '../../util/operation'; import { DetailFieldConfigs } from '../../components/detail'; import DetailStep from '../detail'; /** * header页头配置文件格式定义 * - breadcrumb: 面包屑内容定义 * - title: 主标题 * - subTitle: 副标题 * - back: 返回按钮 * -- enable: 启用 * - mainContent: 主内容 * - extraContent: 扩展内容 */ export interface HeaderConfig extends StepConfig { type: 'header'; breadcrumb?: { enable?: boolean; separator?: string; items?: breadcrumbConfig[]; }; title?: StatementConfig; subTitle?: StatementConfig; back?: { enable?: boolean; }; mainContent?: plainContentConfig | markdownContentConfig | htmlContentConfig | detailContentConfig | statisticContentConfig; extraContent?: statisticContentConfig | imageContentConfig; } /** * 面包屑内容 */ export interface breadcrumbConfig { label?: string; type?: 'normal' | 'bold'; action?: OperationConfig; } interface basicContentConfig { enable?: boolean; } export interface plainContentConfig extends basicContentConfig { type: 'plain'; content?: string; params?: { field: string; data: ParamConfig; }[]; } export interface markdownContentConfig extends basicContentConfig { type: 'markdown'; content?: string; params?: { field: string; data: ParamConfig; }[]; } export interface htmlContentConfig extends basicContentConfig { type: 'html'; content?: string; params?: { field: string; data: ParamConfig; }[]; } export interface detailContentConfig extends basicContentConfig { type: 'detail'; fields?: DetailFieldConfigs[]; defaultValue?: ParamConfig; } export interface statisticContentConfig extends basicContentConfig { type: 'statistic'; statistics?: (valueStatisticConfig | enumerationStatisticConfig)[]; } interface basicStatisticConfig { label?: string; value?: ParamConfig; } export interface valueStatisticConfig extends basicStatisticConfig { type: 'value'; } export interface enumerationStatisticConfig extends basicStatisticConfig { type: 'enumeration'; options?: EnumerationOptionsConfig; } export interface imageContentConfig extends basicContentConfig { type: 'image'; image?: { maxWidth?: string; maxHeight?: string; src?: string; }; } /** * 面包屑元素config * - label: 文案 * - type: 展示形式 * - onClick: 点击事件 */ export interface IBreadcurmbItemProps { label: string; type: 'normal' | 'bold'; onClick: () => void; } /** * 面包屑内容config * - items: 面包屑内容 * - separator: 分割符 */ export interface IBreadcurmbProps { items: Array; separator: string; } /** * 绘制统计内容config * - label: 统计标题 * - value: 统计数值 */ export interface IStatisticProps { label: string; value: string | number; } /** * 头部组件config * - breadcrumb:面包屑内容 * - title: 主标题 * - subTitle: 副标题 * - onBack: 返回按钮点击事件 * - mainContent: 主内容 * - extraContent: 扩展内容 */ export interface IHeaderProps { breadcrumb?: ReactNode; title?: string; subTitle?: string; onBack?: () => void; mainContent?: ReactNode; extraContent?: ReactNode; } export default class HeaderStep extends Step { interfaceHelper: InterfaceHelper; OperationHelper: typeof OperationHelper; DetailStep: typeof DetailStep; stepPush: () => Promise; /** * 用于展示面包屑元素 * @param props * @returns */ renderBreadcurmbItemComponent: (props: IBreadcurmbItemProps) => JSX.Element; /** * 用于展示面包屑 * @param props * @returns */ renderBreadcurmbComponent: (props: IBreadcurmbProps) => JSX.Element; /** * 用于展示统计内容 * @param props * @returns */ renderStatisticComponent: (props: IStatisticProps) => JSX.Element; renderComponent: (props: IHeaderProps) => JSX.Element; handlePlainContent: (config: plainContentConfig, _position: string) => string; handleMarkdownContent: (config: markdownContentConfig, _position: string) => JSX.Element; handleHTMLContent: (config: htmlContentConfig, _position: string) => JSX.Element; handleDetailContent: (config: detailContentConfig, _position: string) => JSX.Element; handleStatisticContent: (config: statisticContentConfig, _position: string) => (JSX.Element | null)[]; handleImageContent: (config: imageContentConfig, _position: string) => JSX.Element | null; render(): JSX.Element; } export {};