import React from 'react'; import { DetailField, DetailFieldConfig, IDetailField, DetailFieldProps } from '../common'; import { ColumnConfigs } from '../../tableColumns'; import CCMS, { CCMSConfig } from '../../../main'; import InterfaceHelper, { InterfaceConfig } from '../../../util/interface'; import { ConditionConfig } from '../../../util/condition'; import { ParamConfig } from '../../../interface'; import Column from '../../tableColumns/common'; export interface TableFieldConfig extends DetailFieldConfig { type: 'table'; primary: string; width?: number; tableColumns: ColumnConfigs[]; operations?: { rowOperations?: Array; }; pagination?: { mode: 'none' | 'client' | 'server'; current?: string; pageSize?: string; total?: string; }; } /** * 表格步骤-菜单配置 */ export declare type TableOperationsType = TableOperationConfig | TableOperationGroupConfig | TableOperationDropdownConfig; /** * 表格步骤-操作配置文件格式 */ export interface TableOperationGroupConfig { type: 'group'; label?: string; level?: 'normal' | 'primary' | 'danger'; operations: Array; } /** * 表格步骤-操作配置文件下拉菜单 */ 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; } export interface TableCCMSOperationConfig { type: 'ccms'; page: any; target: 'current' | 'page' | 'open' | 'handle'; targetURL: string; data: { [key: string]: ParamConfig; }; params?: { field: string; data: ParamConfig; }[]; callback?: 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; } /** * 表格步骤组件 - 列 - 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 ITableDetailRowOperation { children: (React.ReactNode | undefined)[]; } /** * 表格步骤组件 - 操作 - UI渲染方法 - 入参 */ export interface ITableDetailTableOperation { children: (React.ReactNode | undefined)[]; } /** * 表格步骤组件 - 操作按钮 - UI渲染方法 - 入参 */ export interface ITableDetailRowOperationButton { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作按钮组 - UI渲染方法 - 入参 */ export interface ITableDetailRowOperationGroup { label?: string; children: React.ReactNode[]; } /** * 表格步骤组件 - 操作按钮组元素 - UI渲染方法 - 入参 */ export interface ITableDetailRowOperationGroupItem { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作按钮 - UI渲染方法 - 入参 */ export interface ITableDetailTableOperationButton { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作按钮组 - UI渲染方法 - 入参 */ export interface ITableDetailTableOperationGroup { label?: string; children: React.ReactNode[]; } /** * 表格步骤组件 - 操作按钮组元素 - UI渲染方法 - 入参 */ export interface ITableDetailTableOperationGroupItem { label: string; level: 'normal' | 'primary' | 'danger'; disabled?: boolean; onClick: () => Promise; } /** * 表格步骤组件 - 操作 - 二次确认 - UI渲染方法 - 入参 */ export interface ITableDetailOperationConfirm { title: string; okText: string; cancelText: string; onOk: () => void; onCancel: () => void; } export interface ITableDetailOperationModal { title: string; visible: boolean; width: string; children: React.ReactNode; onClose: () => void; } interface TableState { operation: { enable: boolean; target: 'current' | 'handle'; title: string; visible: boolean; config: CCMSConfig; data: any; callback?: boolean; }; pageAuth: { [page: string]: boolean; }; } /** * 表格步骤组件 - UI渲染方法 - 入参 * - data: 数据 */ export interface ITableField { title: string | null; primary: string; width?: number; data: { [field: string]: any; }[]; tableColumns: ITableColumn[]; pagination?: { current: number; pageSize: number; total: number; onChange: (page: number, pageSize: number) => void; }; description?: { type: 'text' | 'tooltip' | 'modal'; label: string | undefined; content: React.ReactNode; showIcon: boolean; }; } export default class TableField extends DetailField implements IDetailField { CCMS: typeof CCMS; getALLComponents: (type: any) => typeof Column; interfaceHelper: InterfaceHelper; /** * 页面权限获取状态 * fulfilled |pending */ pageAuth: { [page: string]: boolean; }; pageOverflow: boolean; constructor(props: DetailFieldProps); /** * 执行操作 * @param operation * @param record * @returns */ handleRowOperation: (operation: TableOperationConfig, record: { [field: string]: any; }) => Promise; /** * 渲染 操作二次确认弹窗 * @param props */ renderOperationConfirm: (props: ITableDetailOperationConfirm) => void; checkPageAuth: (page: string) => void; /** * 渲染 表格 * @param props * @returns */ renderComponent: (props: ITableField) => JSX.Element; renderRowOperationComponent: (props: ITableDetailRowOperation) => JSX.Element; renderRowOperationButtonComponent: (props: ITableDetailRowOperationButton) => JSX.Element; renderRowOperationGroupComponent: (props: ITableDetailRowOperationGroup) => JSX.Element; renderRowOperationGroupItemComponent: (props: ITableDetailRowOperationGroupItem) => JSX.Element; renderRowOperationDropdownComponent: (props: ITableDetailRowOperationGroup) => JSX.Element; renderRowOperationDropdownItemComponent: (props: ITableDetailRowOperationGroupItem) => JSX.Element; renderOperationModal: (props: ITableDetailOperationModal) => void; render: () => JSX.Element; } export {};