import { Component, VNode } from 'vue'; import { FieldArrayContext, FieldEntry } from 'zan-hook-form'; import { TableV2Column, TableV2Exposes } from '../../components/TableV2'; import { BaseValueTypeMapRename } from '../SchemaForm/SchemaForm.type'; import { FieldDefaultSlotProps, FieldProps } from './Field.type'; type FnCellScopeType = T | ((cellScope: CellScopeType) => T); export type TableRowType = { /** * 第几行 */ idx: number; /** * 整个项目个数 */ length: number; /** * 唯一索引 */ key: number; /** * 同上 */ isFirst: boolean; /** * 同上 */ isLast: boolean; }; export type RowScopeType = TableRowType & { /** * 行数据 */ row: any; }; export type CellScopeType = RowScopeType & { prop?: string; name?: string; column: TableV2Column; cellValue?: any; }; export type EditTableColumn = { /** * 字段名称 */ prop?: string; /** * 次项是否必填 */ required?: boolean; /** * 次项是否可编辑 (不能编辑显示renderView或者莫仍匹配的字段) */ editable?: boolean | ((data: CellScopeType) => boolean); /** * 表单项field的配置项 */ fieldConfig?: FnCellScopeType>; /** * 渲染的 input */ valueType?: D; /** * 渲染的 input props */ inputProps?: FnCellScopeType; /** * 渲染的 input slots */ inputSlots?: FnCellScopeType; /** * 渲染的 input */ renderInput?: (props: FieldDefaultSlotProps & CellScopeType) => VNode; /** * 渲染的view模式 * @param props */ renderView?: (props: CellScopeType) => VNode; } & Pick, 'label' | 'width' | 'minWidth' | 'tooltip' | 'showOverflowTooltip'>; export type EditTableProps = { /** * 最低多少条 */ minLength?: number; /** * 最多可以添加多少条 */ maxLength?: number; /** * 隐藏批量删除按钮 */ hiddenDeleteAction?: boolean; /** * 隐藏下面的添加,删除按钮 */ hiddenAction?: boolean; /** * 隐藏操作列 */ hiddenActionColumn?: boolean; /** * 列配置 */ columns: EditTableColumn[]; /** * 每行的初始化数据 */ rowData?: any; /** * 整个行编辑权限 */ editable?: (scope: RowScopeType) => boolean; /** * 可删除权限 */ deleted?: (scope: RowScopeType) => boolean; /** * 可添加权限 */ added?: (data: { fields: FieldEntry[]; }) => boolean; }; export type EditTableExposes = Omit & TableV2Exposes; export type EditTableSlots = { /** * 表格的前置插槽 */ before: () => VNode; }; export {};