/*
 * @Author: chenqihang 592956383@qq.com
 * @Date: 2024-11-12 09:47:25
 * @LastEditors: chenqihang 592956383@qq.com
 * @LastEditTime: 2024-11-12 11:45:03
 * @FilePath: \admin-web\src\components\PageContainer\interface\index.ts
 * @Description: PageContainer组件类型定义
 */
import type { filterItemProp } from '@/components/PageFilters/interface/index'
import type { PrimaryTableCol, TableProps } from 'tdesign-vue-next'

export interface PageResult {
  code: number
  msg: string
  data: any[]
  recordsFiltered?: number
}
// 表格分页配置
export interface Pagination {
  page: number // 当前页码
  limit: number // 每页条数
  total?: number // 总条数
}

// 表格变更事件参数
export interface TableChangeParams {
  pagination?: Pagination // 分页信息
  filters?: Record<string, any> // 表格列筛选条件
  sorter?: Record<string, any> // 排序信息
  searchParams?: Record<string, any> // 搜索条件
}

export interface PageContainerProps {
  filterConditions: filterItemProp[] // 筛选条件项配置
  showTableHeader?: boolean // 是否显示表格头部
  showPagination?: boolean // 是否显示分页
  pagination?: Pagination // 分页配置
  pageSizes?: number[] // 分页大小选项
  showSetting?: boolean // 是否显示列配置按钮
  filterValue?: Record<string, any> // 表格列筛选的值
  searchParams?: Record<string, any> // 搜索条件的值
  tableData?: any[] // 表格数据
  columns?: PrimaryTableCol[] // 表格列配置
  loading?: boolean // 加载状态
  tableProps?: Partial<TableProps> // t-table原生属性
  filtersProps?: Record<string, any> // PageFilters组件原生属性
}

// 组件事件类型定义
export interface PageContainerEmits {
  'update:pagination': [pagination: Pagination] // 更新分页信息
  'filter-change': [filters: Record<string, any>] // 表格列筛选变化
  'search-change': [params: Record<string, any>] // 搜索条件变化
  'sort-change': [sort: Record<string, any>] // 排序变化
  'page-change': [pageInfo: Pagination] // 分页变化
  change: [changeParams: TableChangeParams] // 表格数据变化的统一回调
}
