import { Ref, Slots, VNode, WritableComputedRef } from 'vue'; import { FieldType, OperatorType, TableRowHeightType, ViewConfigBaseFields } from './constants'; import { ApiType } from './api'; import { UsePaginationReturn } from '../hooks/usePagination'; import { TagAction } from '../components/hooks/useTag'; import { Locale } from '../locale/types'; import { Translator } from '../hooks/useLocale'; import { useViewActions } from '../hooks/useViewActions'; import { useRecordActions } from '../hooks/useRecordActions'; import { EventCallback } from '../hooks/useEvent'; export type BooleanLike = 0 | 1 | boolean; export interface ColumnConfig { column_id?: number; view_id?: number; site_id?: number; is_custom?: BooleanLike; is_system?: BooleanLike; name: string; title: string; icon: string; type: FieldType; type_props: Record; group: BooleanLike; accessible: BooleanLike; searchable: BooleanLike; search_index: number; search_visible: BooleanLike; search_locked: BooleanLike; search_default: string; filterable: BooleanLike; filter_index: number; filter_condition: [OperatorType, any]; filter_operators: OperatorType[]; filter_default_operator: OperatorType; sortable: BooleanLike; sort_order: "asc" | "desc"; sort_index: number; sort_type?: "numeric" | "alphabet"; index: number; visible: BooleanLike; editable_visible: BooleanLike; fixed: "left" | "right" | ""; width: number; editable: BooleanLike; form_visible: BooleanLike; form_index: number; form_colspan: number; } /** * 列配置项 */ export interface ColumnConfig2 { column_id?: number; site_id?: number; view_id?: number; view_key?: string; is_system?: BooleanLike; allow_order?: 0 | 1; display_in_form?: boolean | 0 | 1; source_code?: string; /** 字段名称 */ name: string; /** 字段标题 */ title: string; /** 字段类型(如 'text'、'number'、'date' 等) */ type: string; /** 字段类型属性(结构取决于具体 type,通常为对象) */ type_props: Record; /** 排序索引,为 null 时表示不参与排序 */ order_index: number; /** 排序方式 */ order: "asc" | "desc"; /** 搜索条件的sort */ filter_index: number; /** 是否显示过滤条件,默认为 1(1 = 显示,0 = 隐藏) */ filter_visible: 0 | 1; /** 过滤条件:[条件类型, 条件值] */ filter?: [string, any] | null; /** 状态:1 表示启用,0 表示禁用 */ status?: 0 | 1; /** 是否可见,默认为 1(1 = 可见,0 = 隐藏) */ visible: 0 | 1; /** 是否固定列:'' 表示不固定,'left' 表示左固定 */ fixed: "" | "left"; /** 显示顺序(数值越小越靠前) */ index: number; /** 列宽度 */ width: number; /** 默认索引(用于恢复默认布局等场景) */ default_index: number; /** 表单中占用的列数(如栅格系统中的 span) */ span?: number; /** 默认搜索条件(结构与 filter 类似,可为 null) */ default_condition: [string, any] | null | ""; /** 视图编辑时允许的搜索条件(如 ['eq', 'like', 'between']) */ allow_condition: string[]; locked: boolean; } export interface ViewConfig { /** 视图ID */ view_id: number; /** 视图键名 */ view_key: string; /** 视图名称 */ name: string; /** 视图唯一标识 */ key: string; /** 分配的用户 */ assign_users?: string[]; /** 分配的部门 */ assign_depts?: string[]; /** 是否分配给所有人 */ assign_all?: 0 | 1; /** 视图颜色 */ color?: string; /** 表格高度 */ height?: TableRowHeightType; /** 列配置列表 */ column_list: ColumnConfig[]; group_column?: string; group_column_default?: any; group_column_options?: string; } export interface FieldBaseProps { required: boolean; placeholder: string; description: string; default: any; readonly: boolean; sortType?: "alphabet" | "numeric"; } export interface TextField { type: "text"; display_in_form: 0 | 1; type_props: FieldBaseProps & { readonly: boolean; required: boolean; placeholder: string; description: string; max_length: number; multiple_line: boolean; }; } export type ViewGroupOptions = { view_key: string; field_name: string; }; export type ViewGroup = { value: string; label: string; count: number; }; export type BaseConfig = Pick; export type LocalConfig = "group_column_value"; export type ColumnRenderer = Slots | Record VNode>; export interface TableColumn { title: string; dataIndex: string; key?: string; } export interface Context { type: Ref; setType(val: string): void; views: Ref>; baseConfig: BaseConfig; currentViewId: Ref; columns: Readonly>; searchParams: Readonly>; maxFixedColsCount: number; apis: ApiType; columnRenderers: Record; reload(): void; setView(viewId: number): any; setBaseConfig(vals: Partial): any; bindConfig(key: K): WritableComputedRef; bindColumns(cb?: () => any): Ref; setSearchParams(val: Record): void; addColumnRenderer(name: string, renderer: ColumnRenderer): void; t: Translator; render: any; ContextHolder: any; loading: Ref; inited: Ref; actions: { view: ReturnType; tag: TagAction; table: UsePaginationReturn; record: ReturnType; }; onViewUpdated(cb: EventCallback): any; } export interface ConfigContext { source?: Partial; lang?: Locale; endpoint?: string; siteId?: string; token?: string; } export interface CustomRenderer { register(name: string, renderFn: (scope: any) => any): void; } export type Key = string | number; export interface RowSelection { rowKey?: string | number; type?: "checkbox" | "radio"; selectedRowKeys?: Key[]; hideSelectAll?: boolean; reserve?: boolean; onChange?: (keys: Key[], rows?: T[]) => void; }