import React from 'react'; import { ColumnConfigs } from '../../components/tableColumns'; import Column from '../../components/tableColumns/common'; import Step, { StepConfig, StepProps } from '../common'; import { ParamConfig } from '../../interface'; import CCMS, { CCMSConfig } from '../../main'; import InterfaceHelper, { InterfaceConfig } from '../../util/interface'; import { ConditionConfig } from '../../util/condition'; import { StatementConfig } from '../../util/statement'; /** * 表格步骤配置文件格式定义 * - field: 表格列表数据来源字段 * - columns: 表格列配置列表 */ export interface TableConfig extends StepConfig { type: 'table'; width: string; field: string; label: string; primary: string; columns: ColumnConfigs[]; rowOperationsPosition: 'left'; operations?: { tableOperations?: Array; leftTableOperations?: Array; rowOperations?: Array; multirowOperations?: Array; }; pagination?: { mode: 'none' | 'client' | 'server'; current?: string; pageSize?: string; total?: string; }; description?: { type: 'text' | 'tooltip' | 'modal'; label?: StatementConfig; mode: 'plain' | 'markdown' | 'html'; content?: StatementConfig; showIcon: boolean; }; } /** * 表格步骤-菜单配置 */ export declare type TableOperationsType = TableOperationConfig | TableOperationGroupConfig | TableOperationDropdownConfig; /** * 表格步骤-操作配置文件格式 */ export interface TableOperationGroupConfig { type: 'group'; label?: string; level?: 'normal' | 'primary' | 'danger'; operations: Array; condition?: ConditionConfig; } /** * 表格步骤-操作配置文件下拉菜单 */ export interface TableOperationDropdownConfig { type: 'dropdown'; label?: string; level?: 'normal' | 'primary' | 'danger'; operations: Array; condition?: ConditionConfig; } /** * 表格步骤-操作配置文件格式 */ export interface TableOperationConfig { type: 'button'; label: string; level?: 'normal' | 'primary' | 'danger'; check?: { enable: false; } | TableOperationCheckConfig; confirm?: { enable: false; } | TableOperationConfirmConfig; handle: TableCCMSOperationConfig | TableLinkOperationConfig; condition?: ConditionConfig; modalWidthMode?: 'none' | 'percentage' | 'pixel'; modalWidthValue?: string | number; } export interface TableCCMSOperationConfig { type: 'ccms'; page: any; target: 'current' | 'page' | 'open' | 'handle'; replaceHistory?: boolean; targetURL: string; width: string; data: { [key: string]: ParamConfig; }; params?: { field: string; data: ParamConfig; }[]; callback?: boolean; closeCallback?: boolean; debug?: boolean; } export interface TableLinkOperationConfig { type: 'link'; target: '_blank' | '_self'; targetURL: string; params?: { field: string; data: ParamConfig; }[]; callback?: boolean; debug?: boolean; } interface TableOperationCheckConfig { enable: true; interface: InterfaceConfig; } interface TableOperationConfirmConfig { enable: true; titleText: string; titleParams?: Array<{ field: string; data: ParamConfig; }>; okText: string; cancelText: string; } export interface DescriptionConfig { type: 'text' | 'tooltip' | 'modal'; label: string | undefined; content: React.ReactNode; showIcon: boolean; } /** * 表格步骤组件 - UI渲染方法 - 入参 * - data: 数据 */ export interface ITable { title: string | null; primary: string; width: string; data: { [field: string]: any; }[]; columns: ITableColumn[]; pagination?: { current: number; pageSize: number; total: number; onChange: (page: number, pageSize: number) => void; }; tableOperations: React.ReactNode | null; leftTableOperations: React.ReactNode | null; multirowOperations: React.ReactNode | null; description?: DescriptionConfig; } /** * 表格步骤组件 - 列 - UI渲染方法 - 入参 */ export interface ITableColumn { field: string; label: string; align: 'left' | 'center' | 'right'; render: (value: any, record: { [type: string]: any; }, index: number) => React.ReactNode; } /** * 表格步骤组件 - 操作 - UI渲染方法 - 入参 */ export interface ITableStepRowOperation { children: (React.ReactNode | undefined)[]; } /** * 表格步骤组件 - 操作 - UI渲染方法 - 入参 */ export interface ITableStepTableOperation { children: (React.ReactNode | undefined)[]; } /** * 表格步骤组件 - 操作按钮 - UI渲染方法 - 入参 */ export interface ITableStepRowOperationButton { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作按钮组 - UI渲染方法 - 入参 */ export interface ITableStepRowOperationGroup { label?: string; children: React.ReactNode[]; } /** * 表格步骤组件 - 操作按钮组元素 - UI渲染方法 - 入参 */ export interface ITableStepRowOperationGroupItem { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作按钮 - UI渲染方法 - 入参 */ export interface ITableStepTableOperationButton { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作按钮组 - UI渲染方法 - 入参 */ export interface ITableStepTableOperationGroup { label?: string; children: React.ReactNode[]; } /** * 表格步骤组件 - 操作按钮组元素 - UI渲染方法 - 入参 */ export interface ITableStepTableOperationGroupItem { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作 - 二次确认 - UI渲染方法 - 入参 */ export interface ITableStepOperationConfirm { title: string; okText: string; cancelText: string; onOk: () => void; onCancel: () => void; } export interface ITableStepOperationModal { title: string; visible: boolean; width: string; children: React.ReactNode; onClose: () => void; modalWidthMode?: 'none' | 'percentage' | 'pixel'; modalWidthValue?: string | number; } export interface TableState { operation: { enable: boolean; target: 'current' | 'handle'; width: string; title: string; visible: boolean; modalWidthMode?: 'none' | 'percentage' | 'pixel'; modalWidthValue?: string | number; config: CCMSConfig; data: any; callback?: boolean; closeCallback?: boolean; }; pageAuth: { [page: string]: boolean; }; } /** * 表格步骤组件 */ export default class TableStep extends Step { CCMS: typeof CCMS; getALLComponents: (type: any) => typeof Column; interfaceHelper: InterfaceHelper; /** * 页面权限获取状态 * fulfilled |pending */ pageAuth: { [page: string]: boolean; }; pageOverflow: boolean; constructor(props: StepProps); /** * 执行操作 * @param operation * @param record * @returns */ handleRowOperation: (operation: TableOperationConfig, record: { [field: string]: any; }) => Promise; /** * 渲染 操作二次确认弹窗 * @param props */ renderOperationConfirm: (props: ITableStepOperationConfirm) => void; checkPageAuth: (page: string) => void; /** * 渲染 表格 * @param props * @returns */ renderComponent: (props: ITable) => JSX.Element; renderRowOperationComponent: (props: ITableStepRowOperation) => JSX.Element; renderRowOperationButtonComponent: (props: ITableStepRowOperationButton) => JSX.Element; renderRowOperationGroupComponent: (props: ITableStepRowOperationGroup) => JSX.Element; renderRowOperationGroupItemComponent: (props: ITableStepRowOperationGroupItem) => JSX.Element; renderRowOperationDropdownComponent: (props: ITableStepRowOperationGroup) => JSX.Element; renderRowOperationDropdownItemComponent: (props: ITableStepRowOperationGroupItem) => JSX.Element; renderTableOperationComponent: (props: ITableStepTableOperation) => JSX.Element; renderTableOperationButtonComponent: (props: ITableStepTableOperationButton) => JSX.Element; renderTableOperationGroupComponent: (props: ITableStepTableOperationGroup) => JSX.Element; renderTableOperationGroupItemComponent: (props: ITableStepTableOperationGroupItem) => JSX.Element; renderTableOperationDropdownComponent: (props: ITableStepTableOperationGroup) => JSX.Element; renderTableOperationDropdownItemComponent: (props: ITableStepTableOperationGroupItem) => JSX.Element; renderOperationModal: (props: ITableStepOperationModal) => void; tableOperations: (tableOperationsList: Array, getDate: Array<{}>) => JSX.Element | null; render(): JSX.Element; } export {};