12345678910111213141516171819202122232425262728293031323334353637383940 |
- import { bindPopover } from '@/components/popover/composables/usePopover';
- import { classLeft } from '@/constants/commonClassName';
- import { getTextWidth } from '@/utils/common/tools';
- import { parse } from '@/utils/frontend/dom';
- import { GridSettings } from '@sc/handsontable';
- let font: string | undefined;
- // 首次获取一次就行,提高性能,所有表格字体应是统一的
- const getFont = (container: HTMLElement) => {
- if (font) return font;
- font = getComputedStyle(container).font;
- return font;
- };
- // 如果字符宽度超过列宽,悬浮提示
- export default function popoverValueRenderer(
- instance: Handsontable,
- td: HTMLElement,
- row: number,
- col: number,
- prop: string | number,
- value: any,
- cellProperties: GridSettings
- ): HTMLElement {
- // 当前行的源数据
- td.innerHTML = ''; // 先清空数据,多次刷新时会出现两行的问题
- td.className = (cellProperties.className as string) || classLeft;
- if (value) {
- const container = parse(`<div>${value}</div>`) as HTMLElement;
- td.appendChild(container);
- setTimeout(() => {
- const colWidth = instance.getColWidth(col) - 4; // 减去padding
- const textWidth = getTextWidth(value, getFont(container));
- if (textWidth > colWidth) bindPopover(td, container, value);
- });
- }
- return td;
- }
|