components.d.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import Handsontable, { GridSettings } from '@sc/handsontable';
  2. declare namespace ContextMenu {
  3. interface IContextMenuComponent {
  4. // 隐藏
  5. Hide: () => void;
  6. }
  7. // 菜单项的每一个 item
  8. interface IMenuItem {
  9. text: (() => string) | string;
  10. icon?: string;
  11. hidden?: (() => boolean) | boolean;
  12. disable?: (() => Promise<boolean> | boolean) | boolean;
  13. callback?: (inputVal?: number | string) => void;
  14. submenu?: IMenuItem[][];
  15. }
  16. // 菜单项分组
  17. type MenuGroup = IMenuItem[];
  18. }
  19. declare namespace ResizableLayout {
  20. interface IDataParam {
  21. index: number;
  22. instance: any;
  23. minSize: number;
  24. }
  25. interface IMoveParam {
  26. index: number; // 当前layoutItem是父组件的第几个子组件
  27. distance: number; // 鼠标移动的距离,负数代表左移,正数代表右移
  28. moveId: symbol; // move事件的唯一标志
  29. }
  30. interface IResizableLayoutComponent {
  31. Refresh: () => void;
  32. }
  33. }
  34. type Renderer = (
  35. instance: Handsontable,
  36. TD: HTMLElement,
  37. row: number,
  38. col: number,
  39. prop: string | number,
  40. value: any,
  41. cellProperties: GridSettings
  42. ) => HTMLElement;
  43. declare namespace Hot {
  44. interface IHandsontableComponent {
  45. // 重新渲染(如容器宽高发生改变),供外界调用
  46. Render: () => void;
  47. // 更新 Settings,供外界调用(如增加或减少列)
  48. Update: (settings: any) => void;
  49. // 重新加载数据(如引用的数据发生改变),供外界调用
  50. Load: (data?: any) => void;
  51. // 获取 instance,供外界调用
  52. GetInstance: () => Handsontable;
  53. }
  54. interface ICoords {
  55. startRow: number;
  56. startCol: number;
  57. endRow: number;
  58. endCol: number;
  59. }
  60. interface IColumnMeta {
  61. title: string;
  62. data: string;
  63. renderer?: | string | Renderer | ((
  64. instance: Handsontable,
  65. td: HTMLElement,
  66. row: number,
  67. col: number,
  68. prop: string | number,
  69. value: any,
  70. cellProperties: IColumnMeta
  71. ) => void);
  72. editor?: string;
  73. readOnly?: boolean;
  74. showButton?: boolean; // 默认readOnly为true时,右上角的按钮也不显示,对于readOnly为true,又要显示按钮的情况,这里也要设置为true
  75. width: number;
  76. // 小数位数,如果存在此项配置,搭配'wc.numeric' cellType后,会将数值string转换为number,并进行四舍五入
  77. decimal?: number | (() => number);
  78. // 允许输入空值,转换成null
  79. numberAllowEmpty?: boolean;
  80. type?: string;
  81. checkedTemplate?: any;
  82. uncheckedTemplate?: any;
  83. numericFormat?: { pattern?: string; zeroFormat?: string };
  84. source?: string[] | any[];
  85. className?: string;
  86. required?: boolean;
  87. isTemporary?: boolean;
  88. }
  89. type MouseKey = 'left' | 'middle' | 'right';
  90. type ClickPosition = 'outside' | 'barren' | 'content';
  91. interface IGroupHeaderCell {
  92. label: string;
  93. colspan?: number;
  94. rowspan?: number;
  95. }
  96. type GroupHeaderCell = IGroupHeaderCell | string;
  97. interface ISettings extends GridSettings {
  98. columnsMeta?: IColumnMeta[];
  99. /**
  100. * 获取鼠标点击的区域
  101. * @param isOutside 是否在表格外面
  102. * @param isBarren 是否在表格内部的空白区域
  103. * @param isContent 是否在表格内容的内同区域
  104. */
  105. onClickPosition?: (whichKey: MouseKey, clickPosition: ClickPosition) => void;
  106. // 表头分组
  107. groupingHeaders?: GroupHeaderCell[][];
  108. // contextMenu?: { callback: (...args: any) => void; items: any };
  109. }
  110. interface IHandsontableProps {
  111. data: any[];
  112. settings: ISettings;
  113. tree: boolean;
  114. readOnly: boolean;
  115. border: string;
  116. loading: boolean;
  117. }
  118. interface IRenderer {
  119. (
  120. instance: Handsontable,
  121. row: number,
  122. col: number,
  123. prop: string | number,
  124. value: any,
  125. cellProperties: GridSettings
  126. ): HTMLElement;
  127. }
  128. type CellChangeParam = [/* row */ number, /* prop */ string, /* oldValue */ any, /* newValue */ any];
  129. type RendererItem = [string, ComponentObjectPropsOptions | IRenderer];
  130. }