holyes-table 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,258 @@
1
+ import { VxeIconPropTypes } from 'vxe-pc-ui';
2
+ export * from './useHolyesTable';
3
+ export * from './hook/useFooter';
4
+ export * from './hook/useFilter';
5
+ export * from './hook/useTree';
6
+ export * from './hook/useExpand';
7
+ /** 列插槽类型 */
8
+ export type HolyesTableSlotDefaultType = "a" | "tag" | "icon" | "buttons" | "switch";
9
+ /** 表格列属性,额外属性 */
10
+ export type HolyesTableColumnPropsTypeOption = {
11
+ /** 列宽度 */
12
+ width?: number;
13
+ /** 列最小宽度 */
14
+ minWidth?: number;
15
+ /** 列固定位置 */
16
+ fixed?: "left" | "right" | "";
17
+ /** 列是否可排序 */
18
+ sortable?: boolean;
19
+ /** 列类型 */
20
+ type?: "seq" | "checkbox" | "expand";
21
+ /** 列样式 */
22
+ style?: any;
23
+ /** 列是否可筛选 */
24
+ isFilter?: {
25
+ type: HolyesTableFilterType;
26
+ listOptions?: {
27
+ label: string;
28
+ value: HolyesTableFilterlistOptions;
29
+ }[];
30
+ };
31
+ /** 列是否可调整宽度 */
32
+ resizable?: boolean;
33
+ /** 列插槽 */
34
+ slots?: {
35
+ /** 列自定义插槽 */
36
+ default?: string;
37
+ /** 列自定义插槽高度,有插槽的话必填,插槽单元格不自动换行 */
38
+ defaultHeight?: number;
39
+ /** 列插槽类型 */
40
+ defaultType?: HolyesTableSlotDefaultType;
41
+ /** 列插槽默认属性 */
42
+ defaultProps?: {
43
+ /** 标签 插槽默认属性 */
44
+ tag?: {
45
+ /** 标签匹配规则 */
46
+ options?: {
47
+ /** 标签状态 */
48
+ status?: "primary" | "success" | "info" | "warning" | "error";
49
+ /** 标签颜色 */
50
+ color?: any;
51
+ /** 标签显示的文本 */
52
+ label?: string;
53
+ /** 标签对比的值 */
54
+ value: any;
55
+ }[];
56
+ };
57
+ /** 图标 插槽默认属性 */
58
+ icon?: {
59
+ /** 图标名称, 参考 vxe-icon 图标名称 */
60
+ name?: VxeIconPropTypes.Name;
61
+ /** 图标样式 */
62
+ style?: any;
63
+ };
64
+ /** 按钮 插槽默认属性 */
65
+ buttons?: {
66
+ /** 按钮组数组, 每个元素是一行div的按钮数组 */
67
+ options?: {
68
+ /** 按钮内容*/
69
+ title?: string;
70
+ /** 按钮提示 */
71
+ tip?: string;
72
+ /** 按钮前缀图标 */
73
+ prefixIcon?: any;
74
+ /** 按钮大小 */
75
+ size?: "medium" | "small" | "mini";
76
+ /** 按钮类型 */
77
+ type?: "primary" | "danger";
78
+ /** 按钮样式, 默认button */
79
+ mode?: "text" | "button";
80
+ /** 按钮是否显示,取决于row的哪个字段 */
81
+ showField?: string;
82
+ /** 按钮是否禁用,取决于row的哪个字段 */
83
+ disabledField?: string;
84
+ /** 按钮是否加载中,取决于row的哪个字段 */
85
+ loadingField?: string;
86
+ /** 按钮点击事件 */
87
+ onClick?: (row: any, index: number) => void;
88
+ /** 其他参数 */
89
+ params?: any;
90
+ }[][];
91
+ };
92
+ /** 开关 插槽默认属性 */
93
+ switch?: {
94
+ /** 开关选中时显示的文本 */
95
+ checkedChildren?: string;
96
+ /** 开关选中时显示的文本 */
97
+ openLabel?: string;
98
+ /** 开关未选中时显示的文本 */
99
+ uncheckedChildren?: string;
100
+ /** 开关未选中时显示的文本 */
101
+ closeLabel?: string;
102
+ /** 开关选中时的值 */
103
+ checkedValue?: any;
104
+ /** 开关未选中时的值 */
105
+ uncheckedValue?: any;
106
+ /** 开关选中时的值 */
107
+ openValue?: any;
108
+ /** 开关未选中时的值 */
109
+ closeValue?: any;
110
+ /** 按钮是否显示,取决于row的哪个字段 */
111
+ showField?: string;
112
+ /** 按钮是否禁用,取决于row的哪个字段 */
113
+ disabledField?: string;
114
+ /** 按钮是否加载中,取决于row的哪个字段 */
115
+ loadingField?: string;
116
+ /** 开关点击事件 */
117
+ onChange?: (row: any, index: number) => void;
118
+ };
119
+ };
120
+ /** 列表头插槽 */
121
+ header?: string;
122
+ /** 列表头插槽类型 */
123
+ headerType?: "a";
124
+ /** 表尾插槽 */
125
+ footer?: string;
126
+ };
127
+ footer?: {
128
+ /** 表尾行高度 */
129
+ height?: number;
130
+ /** 表尾类型 */
131
+ type?: HolyesTableFooterType;
132
+ dataType?: "number0" | "number1" | "number2" | "string";
133
+ /** 表尾文本 */
134
+ text?: string;
135
+ }[];
136
+ /** 表头分组 */
137
+ children?: HolyesTableColumnPropsType[];
138
+ /** 只对 treeConfig 配置时有效,指定为树节点 */
139
+ treeNode?: boolean;
140
+ };
141
+ /** 表格列属性 */
142
+ export interface HolyesTableColumnPropsType extends HolyesTableColumnPropsTypeOption {
143
+ /** 列标题 */
144
+ title: string;
145
+ /** 列字段 */
146
+ field: string;
147
+ }
148
+ /** 表格列属性 */
149
+ export interface HolyesTableKeyNames {
150
+ /** 行id */
151
+ id: string;
152
+ /** 序号 */
153
+ seq: string;
154
+ /** 斑马纹 */
155
+ stripe: string;
156
+ /** 行高 */
157
+ height: string;
158
+ /** 树是否展开 */
159
+ isCollapsed: string;
160
+ /** 树层级 */
161
+ level: string;
162
+ /** 树懒加载是否加载中 */
163
+ lazyLoading: string;
164
+ /** 设置数据后, 真实的序号 */
165
+ index: string;
166
+ /** 筛选后的子项数据 */
167
+ filterChildren: string;
168
+ /** 展开行是否展开 */
169
+ isRowExpanded: string;
170
+ /** 这行数据是否展开行的子项 */
171
+ isExpandRow: string;
172
+ /** 展开行是否有子展开项 */
173
+ expandChildren: string;
174
+ }
175
+ /** 展开行配置项 */
176
+ export interface HolyesTableExpandConfig {
177
+ /** 是否开启展开行功能 */
178
+ isExpand: boolean;
179
+ /** 展开行高度(像素), 必填 */
180
+ height: number;
181
+ /** 展开/收起的触发方式, 默认是default(点击按钮触发) */
182
+ trigger?: "default" | "cell" | "row";
183
+ /** 展开行模式, 默认是undefined(展开行随着x轴滚动条滚动);
184
+ * inside(不随着x轴滚动条滚动) */
185
+ mode?: "inside" | undefined;
186
+ /** 插槽名称 */
187
+ slotName: string;
188
+ }
189
+ /** 筛选字段 类型 */
190
+ export type HolyesTableFilterType = "inputFilter" | "numberFilter" | "numberFilter%" | "listFilter" | "";
191
+ /** 筛选字段 列表选项 */
192
+ export type HolyesTableFilterlistOptions = string | number | boolean;
193
+ /** 表尾类型 */
194
+ export type HolyesTableFooterType = "合计" | "文本";
195
+ /** 表尾行数据类型 */
196
+ export type HolyesTableFooterDataType = "number0" | "number1" | "number2" | "string";
197
+ /** 表尾行字段类型 */
198
+ export type HolyesTableFooterFieldTypes = {
199
+ /** 表尾行字段 */
200
+ field: string;
201
+ /** 表尾行类型 */
202
+ type: HolyesTableFooterType;
203
+ /** 表尾行文本 */
204
+ text?: string;
205
+ /** 表尾行数据类型 */
206
+ dataType?: HolyesTableFooterDataType;
207
+ };
208
+ /** 外面传入的表尾行属性 */
209
+ export type HolyesTableFooterProps = {
210
+ height?: number;
211
+ fieldTypes?: HolyesTableFooterFieldTypes[];
212
+ };
213
+ /** 表尾行属性 */
214
+ export type HolyesTableFooterColumns = {
215
+ /** 表尾行高度 */
216
+ height?: number;
217
+ /** 表尾行字段 */
218
+ field: string;
219
+ /** 表尾行固定位置 */
220
+ fixed?: string;
221
+ /** 表尾行类型 */
222
+ type?: HolyesTableFooterType;
223
+ /** 表尾行文本 */
224
+ text?: string;
225
+ /** 表尾行数据类型 */
226
+ dataType?: HolyesTableFooterDataType;
227
+ /** 表尾行数据 */
228
+ data: any;
229
+ /** 插槽 */
230
+ slot?: string;
231
+ };
232
+ /** 树形结构配置项 */
233
+ export type HolyesTableTreeConfig = {
234
+ /** 是否开启展开行功能 */
235
+ isOpenTree: boolean;
236
+ /** 自动将列表转为树结构 */
237
+ transform?: boolean;
238
+ /** 节点id字段, 默认是id */
239
+ idField?: string;
240
+ /** 父节点字段, 默认是parentId */
241
+ parentField?: string;
242
+ /** 子节点字段, 默认是children */
243
+ childrenField?: string;
244
+ /** 树节点的缩进, 默认是20px */
245
+ indent?: number;
246
+ /** 展开/收起的触发方式, 默认是default(点击按钮触发) */
247
+ trigger?: "default" | "cell" | "row";
248
+ /** 是否懒加载 */
249
+ lazy?: boolean;
250
+ /** 只对 lazy 启用后有效,标识是否存在子节点,从而控制是否允许被点击, 默认是hasChild */
251
+ hasChildField?: string;
252
+ /** 懒加载方法 */
253
+ loadMethod?: (node: any) => any;
254
+ /** 数据刷新后, 是否保留展开状态, 默认是false;如果是true, 需要有idField */
255
+ reserve?: boolean;
256
+ /** 是否显示树形图标, 默认是true */
257
+ showIcon?: boolean;
258
+ };
@@ -0,0 +1,171 @@
1
+ import { HolyesTableColumnPropsType, HolyesTableKeyNames } from './type';
2
+ export declare const useHolyesTable: (dataObj: {
3
+ props: any;
4
+ emits: any;
5
+ }) => {
6
+ keyNames: HolyesTableKeyNames;
7
+ nowDataSource: import('vue').ShallowRef<any[], any[]>;
8
+ pretextTableRef: import('vue').Ref<HTMLDivElement | null | undefined, HTMLDivElement | null | undefined>;
9
+ tableRef: import('vue').Ref<HTMLDivElement | null | undefined, HTMLDivElement | null | undefined>;
10
+ isLoading: import('vue').Ref<boolean, boolean>;
11
+ visibleData: import('vue').Ref<any[], any[]>;
12
+ visibleWidthStartColumnIndex: import('vue').Ref<number, number>;
13
+ visibleWidthEndColumnIndex: import('vue').Ref<number, number>;
14
+ gridTemplateColumns: import('vue').Ref<string, string>;
15
+ blurAnyElement: () => void;
16
+ columns: import('vue').ShallowRef<HolyesTableColumnPropsType[], HolyesTableColumnPropsType[]>;
17
+ onScroll: (e: Event) => void;
18
+ onWheel: (e: WheelEvent) => void;
19
+ topEmptyHeight: import('vue').Ref<number, number>;
20
+ scrollbarHeight: import('vue').Ref<number, number>;
21
+ headerHeight: import('vue').Ref<number, number>;
22
+ headerStyles: {
23
+ fontWeight: string;
24
+ fontSize: string;
25
+ };
26
+ realColumns: import('vue').ShallowRef<(HolyesTableColumnPropsType | null)[][], (HolyesTableColumnPropsType | null)[][]>;
27
+ headerRef: import('vue').Ref<HTMLDivElement | undefined, HTMLDivElement | undefined>;
28
+ updateFooter: (field?: string) => void;
29
+ updateFooterCellLabel: (field: string, rowIndex: number, label: string) => void;
30
+ footerHeight: import('vue').Ref<number, number>;
31
+ footerColumns: import('vue').Ref<{
32
+ height?: number | undefined;
33
+ field: string;
34
+ fixed?: string | undefined;
35
+ type?: import('./type').HolyesTableFooterType | undefined;
36
+ text?: string | undefined;
37
+ dataType?: import('./type').HolyesTableFooterDataType | undefined;
38
+ data: any;
39
+ slot?: string | undefined;
40
+ }[][], import('./type').HolyesTableFooterColumns[][] | {
41
+ height?: number | undefined;
42
+ field: string;
43
+ fixed?: string | undefined;
44
+ type?: import('./type').HolyesTableFooterType | undefined;
45
+ text?: string | undefined;
46
+ dataType?: import('./type').HolyesTableFooterDataType | undefined;
47
+ data: any;
48
+ slot?: string | undefined;
49
+ }[][]>;
50
+ getFooterHeight: (footerProps: import('./type').HolyesTableFooterProps[]) => void;
51
+ itemStyles: {
52
+ fontWeight: string;
53
+ fontSize: string;
54
+ };
55
+ fixedLeftIndex: import('vue').Ref<number, number>;
56
+ fixedRightIndex: import('vue').Ref<number, number>;
57
+ fixedColumnsLeft: import('vue').Ref<string[], string[]>;
58
+ fixedColumnsRight: import('vue').Ref<string[], string[]>;
59
+ getGridStyles: () => void;
60
+ divLineHeightOffset: number;
61
+ currentRow: import('vue').ShallowRef<any, any>;
62
+ cellClick: (item: any, column: HolyesTableColumnPropsType) => void;
63
+ headerClick: (column: any) => void;
64
+ hoverRow: import('vue').ShallowRef<any, any>;
65
+ cellMousemove: (item: any) => void;
66
+ headerChecked: import('vue').Ref<boolean, boolean>;
67
+ headerCheckedIndeterminate: import('vue').Ref<boolean, boolean>;
68
+ onHeaderChecked: () => void;
69
+ onCellChecked: (item: any) => void;
70
+ getCheckboxRecords: (isFull: boolean) => any[];
71
+ clearCheckboxRow: () => void;
72
+ sortField: import('vue').Ref<string, string>;
73
+ sortOrder: import('vue').Ref<"asc" | "desc" | null, "asc" | "desc" | null>;
74
+ sort: (field: string, order: "desc" | "asc" | null | "auto") => void;
75
+ filterPopupWidth: number;
76
+ filterPopupId: string;
77
+ inputFilterOptions: {
78
+ label: string;
79
+ value: string;
80
+ }[];
81
+ numberFilterOptions: {
82
+ label: string;
83
+ value: string;
84
+ }[];
85
+ filterFields: import('vue').Ref<{
86
+ field: string;
87
+ type: import('./type').HolyesTableFilterType;
88
+ isShow: boolean;
89
+ clientX: number;
90
+ clientY: number;
91
+ isActive: boolean;
92
+ value: string | number | null;
93
+ inputFilter?: {
94
+ type: "\u6A21\u7CCA" | "\u7CBE\u786E";
95
+ } | undefined;
96
+ numberFilter?: {
97
+ type: ">" | "\u2265" | "=" | "<" | "\u2264";
98
+ } | undefined;
99
+ listFilter?: {
100
+ listOptions: {
101
+ label: string;
102
+ value: import('./type').HolyesTableFilterlistOptions;
103
+ }[];
104
+ selectedValue: import('./type').HolyesTableFilterlistOptions[];
105
+ } | undefined;
106
+ }[], import('./type').FilterFieldsType[] | {
107
+ field: string;
108
+ type: import('./type').HolyesTableFilterType;
109
+ isShow: boolean;
110
+ clientX: number;
111
+ clientY: number;
112
+ isActive: boolean;
113
+ value: string | number | null;
114
+ inputFilter?: {
115
+ type: "\u6A21\u7CCA" | "\u7CBE\u786E";
116
+ } | undefined;
117
+ numberFilter?: {
118
+ type: ">" | "\u2265" | "=" | "<" | "\u2264";
119
+ } | undefined;
120
+ listFilter?: {
121
+ listOptions: {
122
+ label: string;
123
+ value: import('./type').HolyesTableFilterlistOptions;
124
+ }[];
125
+ selectedValue: import('./type').HolyesTableFilterlistOptions[];
126
+ } | undefined;
127
+ }[]>;
128
+ getFilterFields: () => void;
129
+ filterClick: (index: number, e: any) => void;
130
+ setFilter: (field: string, value?: any) => Promise<void>;
131
+ clearFilter: (field?: string) => Promise<void>;
132
+ setListFilterAll: (item: any) => void;
133
+ isDragging: import('vue').Ref<boolean, boolean>;
134
+ dragLineLeft: import('vue').Ref<number, number>;
135
+ startResize: (e: MouseEvent, column: HolyesTableColumnPropsType) => void;
136
+ /** 用于 tree-config,设置展开树形节点,二个参数设置这一行展开与否 */
137
+ setTreeExpand: (rows: any[], expanded: boolean) => Promise<void>;
138
+ /** 用于 tree-config,设置所有树节点的展开与否 */
139
+ setAllTreeExpand: (isExpand: boolean) => void;
140
+ /** 清除树形结构展开状态 */
141
+ clearTreeExpand: () => void;
142
+ /** 默认的树形结构配置项 */
143
+ defaultTreeConfig: {
144
+ isOpenTree: boolean;
145
+ transform: boolean;
146
+ idField: string;
147
+ parentField: string;
148
+ childrenField: string;
149
+ indent: number;
150
+ trigger: string;
151
+ lazy: boolean;
152
+ hasChildField: string;
153
+ showIcon: boolean;
154
+ };
155
+ /** 用于 expand-config,设置展开行,二个参数设置这一行展开与否 */
156
+ setRowExpand: (rows: any[], expanded: boolean) => void;
157
+ slotShowTimestamp: import('vue').Ref<number, number>;
158
+ isRefresh: import('vue').Ref<boolean, boolean>;
159
+ realTableHeight: import('vue').Ref<number, number>;
160
+ realTableWidth: import('vue').Ref<number, number>;
161
+ /** 加载数据 */
162
+ loadData: (tempData: any[]) => Promise<void>;
163
+ /** 重新设置数据 */
164
+ reloadData: (tempData: any[]) => Promise<void>;
165
+ getTableData: () => {
166
+ /** 全部数据 */
167
+ fullData: any[];
168
+ /** 当前筛选后数据 */
169
+ visibleData: any[];
170
+ };
171
+ };
@@ -0,0 +1,6 @@
1
+ /** 等待指定时间 */
2
+ export declare function sleep(time: number): Promise<unknown>;
3
+ /** 失去焦点 */
4
+ export declare const blurAnyElement: () => void;
5
+ /** 估算文本字符单元数(英文/符号算1,中文等算2) */
6
+ export declare const estimateCharUnits: (text: any) => number;
@@ -0,0 +1,50 @@
1
+ import { HolyesTableSlotDefaultType, HolyesTableKeyNames, HolyesTableTreeConfig } from '../type';
2
+ /** 计算表格每行的高度的 worker 选项 */
3
+ export type HolyesTableGetItemHeightOptions = {
4
+ /** 表格内容 */
5
+ tempData: any[];
6
+ /** 表格内容的索引 */
7
+ index: number;
8
+ /** 表格内容的样式 */
9
+ commonStyles: any;
10
+ /** 表格内容的样式 */
11
+ itemStyles: any;
12
+ /** 表格内容的高度 */
13
+ divLineHeight: number;
14
+ /** 每行的最小高度 */
15
+ cellMinHeight: number;
16
+ /** 行id的字段 */
17
+ keyNames: HolyesTableKeyNames;
18
+ /** 是否不自动换行 */
19
+ isNoAutoWrap: boolean;
20
+ /** 表格列属性 */
21
+ columns: {
22
+ title: string;
23
+ field: string;
24
+ minWidth: number | undefined;
25
+ width: number | undefined;
26
+ type: string;
27
+ slots?: {
28
+ /** 列自定义插槽 */
29
+ default?: string;
30
+ /** 列自定义插槽类型 */
31
+ defaultType?: HolyesTableSlotDefaultType;
32
+ /** 列自定义插槽高度,有插槽的话必填,插槽单元格不自动换行 */
33
+ defaultHeight?: number;
34
+ };
35
+ /** 是否树节点 */
36
+ treeNode?: boolean;
37
+ }[];
38
+ /** 树形结构配置项 */
39
+ treeConfig: HolyesTableTreeConfig;
40
+ /** 默认的树形结构配置项 */
41
+ defaultTreeConfig: any;
42
+ };
43
+ /** 计算表格每行的高度的 worker 回调 */
44
+ export type HolyesTableGetItemHeightCallbackData = {
45
+ tempItemHeights: number;
46
+ heightDatas: {
47
+ pretextHeight: number;
48
+ id: string;
49
+ }[];
50
+ };
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "holyes-table",
3
- "version": "0.0.1",
4
- "type": "module",
3
+ "version": "1.0.0",
5
4
  "description": "合力思虚拟滚动表格组件",
6
5
  "main": "./dist/index.js",
7
6
  "module": "./dist/index.js",
@@ -29,12 +28,15 @@
29
28
  "大版本更新": "npm version major --registry https://registry.npmjs.org"
30
29
  },
31
30
  "peerDependencies": {
31
+ "@chenglou/pretext": "^0.0.7",
32
32
  "vue": "^3.3.13",
33
- "xe-utils": "^4.0.4",
34
- "vxe-pc-ui": "^4.9.41"
33
+ "vxe-pc-ui": "^4.9.41",
34
+ "xe-utils": "^4.0.4"
35
35
  },
36
36
  "devDependencies": {
37
+ "@chenglou/pretext": "^0.0.7",
37
38
  "@vitejs/plugin-vue": "^6.0.6",
39
+ "less": "^4.6.4",
38
40
  "typescript": "~6.0.2",
39
41
  "vite": "^8.0.3",
40
42
  "vite-plugin-dts": "^5.0.0",
package/dist/index.js DELETED
@@ -1,21 +0,0 @@
1
- import { createElementBlock as e, openBlock as t } from "vue";
2
- //#region lib/aa/aa.vue?vue&type=script&lang.ts
3
- var n = {
4
- inheritAttrs: !1,
5
- name: "aa"
6
- }, r = (e, t) => {
7
- let n = e.__vccOpts || e;
8
- for (let [e, r] of t) n[e] = r;
9
- return n;
10
- };
11
- //#endregion
12
- //#region lib/aa/aa.vue
13
- function i(n, r, i, a, o, s) {
14
- return t(), e("div", null, " 123 ");
15
- }
16
- var a = /* @__PURE__ */ r(n, [["render", i]]), o = a;
17
- o.install = (e) => {
18
- e.component("HolyesTable", o);
19
- };
20
- //#endregion
21
- export { a as aa, o as default };
@@ -1,2 +0,0 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
- export default _default;