holyes-table 1.0.8 → 1.0.9

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.
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # 组件说明
2
2
 
3
- 这个是用@chenglou-pretext开发的虚拟滚动表格组件。
3
+ 这个基于Canvas计算行高的虚拟滚动表格组件。
4
4
 
5
5
  ## 优化
6
6
 
7
- 1. 用div+grid布局, 每一行的行高是通过@chenglou-pretext计算的, 这样不会触发 ResizeObserver 导致重排。
7
+ 1. 用div+grid布局, 每一行的行高是通过Canvas计算的, 这样不会触发重排。
8
8
 
9
9
  2. 大数据时, 会通过worker线程计算高度,然后逐渐渲染最大高度,提升首次渲染性能。
10
10
 
@@ -31,7 +31,6 @@
31
31
 
32
32
  ## 组件依赖
33
33
 
34
- - @chenglou-pretext ^0.0.5
35
34
  - vxe-pc-ui ^4.9.41
36
35
  - xe-utils ^4.0.4
37
36
 
@@ -665,7 +664,7 @@ const columns = [
665
664
  1 **自定义插槽**
666
665
 
667
666
  - 已经默认配置了一些单元格类型 defaultType,不一定都需要自定义插槽。
668
- - 如果确实需要自定义插槽,必须填写插槽的高度defaultHeight,最好定死列宽度,因为整个表格的高度是根据 @chenglou-pretext 计算的,能准确计算出每一行的行高。
667
+ - 如果确实需要自定义插槽,必须填写插槽的高度defaultHeight,最好定死列宽度,因为整个表格的高度是根据 Canvas 计算的,能准确计算出每一行的行高。
669
668
 
670
669
  2 **性能优化**
671
670
 
@@ -678,4 +677,4 @@ const columns = [
678
677
  - 表格使用 CSS Grid 布局,可以通过 CSS 变量自定义样式
679
678
  - 支持斑马纹、悬停高亮、当前行高亮等样式配置
680
679
  - 表头支持固定定位,滚动时保持可见
681
- - 暂不支持自定义文字大小,会影响@chenglou-pretext 计算行高
680
+ - 暂不支持自定义文字大小,会影响计算行高
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@ import { Fragment as e, Teleport as t, createBlock as n, createCommentVNode as r
2
2
  import { VxeButton as k, VxeCheckbox as ee, VxeCheckboxGroup as te, VxeIcon as A, VxeInput as ne, VxeLoading as re, VxeNumberInput as ie, VxeRadioGroup as j, VxeSwitch as ae, VxeTag as oe } from "vxe-pc-ui";
3
3
  import M, { debounce as se, isNaN as N, orderBy as ce, toArrayTree as le } from "xe-utils";
4
4
  //#region lib/pretextTable/worker/pretextTableGetItemHeight.ts?worker&inline
5
- var ue = "(function(){let e=e=>{let t=0;switch(!0){case!e:case typeof e!=`string`:return t;default:break}for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);r>=19968&&r<=40959||r>=12352&&r<=12543||r>=44032&&r<=55215?t+=2:t+=1}return t};self.onmessage=t=>{let{tempData:n,commonStyles:r,itemStyles:i,divLineHeight:a,cellMinHeight:o,keyNames:s,isNoAutoWrap:c,columns:l,treeConfig:u,defaultTreeConfig:d}=t.data,f=0;performance.mark(`start`);let p=new OffscreenCanvas(1,1).getContext(`2d`);p.font=`${i.fontWeight} ${i.fontSize}/${a} ${r?.fontFamily}`;function m(e){return p.measureText(e).width}function h(e,t,n){let r=m(e);return Math.ceil(r/t)*a+n}let g=[],_=new Map,v=e=>{e.slots?.default&&!e.slots?.defaultHeight&&(_.has(e.field)||(console.error(`表格设置了插槽,插槽高度defaultHeight不能为空,否则会导致高度计算错误`,e.field),_.set(e.field,1))),(e.slots.defaultType==`tag`||e.slots.defaultType==`buttons`)&&(e.slots.defaultHeight||(e.slots.defaultHeight=30))},y=u?.childrenField||d.childrenField,b=(t,n)=>{t[y]?.length&&t[y].forEach(e=>{b(e,n+1)});let r=o,i=[],p=0;if(c)for(let e of l)v(e),p=Math.max(p,e.slots?.defaultHeight||0),r=Math.max(r,a);else{for(let r of l){(r.slots?.default||r.slots?.defaultType)&&(v(r),p=Math.max(p,r.slots?.defaultHeight||0));let a=Math.max(r.minWidth||30,r.width||0),o=t[r.field]||``;r.treeNode&&u?.isOpenTree&&(u?.showIcon&&(o+=`图`),u?.indent&&(a-=(u?.indent||d.indent||20)*n));let s=e(o)/a;testLength:for(let e=0;e<3;e++)if((i[e]?.density||0)<s){i[e]={field:r.field,tempWidth:a,density:s,tempText:o};break testLength}}for(let e of i){let t=e.tempWidth,n=h(e.tempText,t,0);r=Math.max(r,n)}}g.push({pretextHeight:Math.max(r,p)+1,id:t[s.id]}),n==0&&(f+=Math.max(r,p)+1)};for(let e of n)b(e,0);performance.mark(`end`),self.postMessage({tempItemHeights:f,heightDatas:g}),self.close()}})();", P = typeof self < "u" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", ue], { type: "text/javascript;charset=utf-8" });
5
+ var ue = "(function(){let e=e=>{let t=0;switch(!0){case!e:case typeof e!=`string`:return t;default:break}for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);r==64||r>=19968&&r<=40959||r>=12352&&r<=12543||r>=44032&&r<=55215?t+=2:t+=1}return t};self.onmessage=t=>{let{tempData:n,commonStyles:r,itemStyles:i,divLineHeight:a,cellMinHeight:o,keyNames:s,isNoAutoWrap:c,columns:l,treeConfig:u,defaultTreeConfig:d}=t.data,f=0;performance.mark(`start`);let p=new OffscreenCanvas(1,1).getContext(`2d`);p.font=`${i.fontWeight} ${i.fontSize}/${a} ${r?.fontFamily}`;function m(e){return p.measureText(e).width}function h(e,t,n){let r=m(e);return Math.ceil(r/t)*a+n}let g=[],_=new Map,v=e=>{e.slots?.default&&!e.slots?.defaultHeight&&(_.has(e.field)||(console.error(`表格设置了插槽,插槽高度defaultHeight不能为空,否则会导致高度计算错误`,e.field),_.set(e.field,1))),(e.slots.defaultType==`tag`||e.slots.defaultType==`buttons`)&&(e.slots.defaultHeight||(e.slots.defaultHeight=30))},y=u?.childrenField||d.childrenField,b=(t,n)=>{t[y]?.length&&t[y].forEach(e=>{b(e,n+1)});let r=o,i=[],p=0;if(c)for(let e of l)v(e),p=Math.max(p,e.slots?.defaultHeight||0),r=Math.max(r,a);else{for(let r of l){(r.slots?.default||r.slots?.defaultType)&&(v(r),p=Math.max(p,r.slots?.defaultHeight||0));let a=Math.max(r.minWidth||30,r.width||0),o=t[r.field]||``;r.treeNode&&u?.isOpenTree&&(u?.showIcon&&(o+=`图`),u?.indent&&(a-=(u?.indent||d.indent||20)*n));let s=e(o)/a;testLength:for(let e=0;e<3;e++)if((i[e]?.density||0)<s){i[e]={field:r.field,tempWidth:a,density:s,tempText:o};break testLength}}for(let e of i){let t=e.tempWidth,n=h(e.tempText,t,0);r=Math.max(r,n)}}g.push({pretextHeight:Math.max(r,p)+1,id:t[s.id]}),n==0&&(f+=Math.max(r,p)+1)};for(let e of n)b(e,0);performance.mark(`end`),self.postMessage({tempItemHeights:f,heightDatas:g}),self.close()}})();", P = typeof self < "u" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", ue], { type: "text/javascript;charset=utf-8" });
6
6
  function de(e) {
7
7
  let t;
8
8
  try {
@@ -24,8 +24,8 @@ function fe(e) {
24
24
  }, i = (e) => {
25
25
  n.value = 0;
26
26
  let r = t.value?.clientWidth || 0, i = [], a = 0, o = () => {
27
- if (r - 20 - a <= 0) return;
28
- let e = Number(((r - 20) / a).toFixed(2));
27
+ if (r - 13 - a <= 0) return;
28
+ let e = Number(((r - 13) / a).toFixed(2));
29
29
  i.forEach((t) => {
30
30
  t.width = Math.round(Number((t.minWidth || 100) * e));
31
31
  });
@@ -377,7 +377,7 @@ function ge(e) {
377
377
  } else {
378
378
  for (let e of f.value) e.value = "", e.type == "listFilter" && (e.listFilter.selectedValue = []), e.isActive = !1;
379
379
  if (o(), !h) return;
380
- h = !1, i(r.value), s();
380
+ h = !1, D();
381
381
  }
382
382
  return Promise.resolve();
383
383
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "holyes-table",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "合力思虚拟滚动表格组件",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
@@ -30,13 +30,11 @@
30
30
  "废弃某个版本": "npm deprecate holyes-table@1.0.3 '请升级到版本1.0.4+' --registry https://registry.npmjs.org"
31
31
  },
32
32
  "peerDependencies": {
33
- "@chenglou/pretext": "^0.0.7",
34
33
  "vue": "^3.3.13",
35
34
  "vxe-pc-ui": "^4.9.41",
36
35
  "xe-utils": "^4.0.4"
37
36
  },
38
37
  "devDependencies": {
39
- "@chenglou/pretext": "^0.0.7",
40
38
  "@vitejs/plugin-vue": "^6.0.6",
41
39
  "less": "^4.6.4",
42
40
  "typescript": "~6.0.2",