recoverRenderer.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { hover, on, parse, style } from '@/utils/frontend/dom';
  2. import { TreeNode } from '@sc/tree';
  3. import { DeleteEnum, IProject } from '@sc/types';
  4. import { EmitterType, getEmitter } from '@/utils/frontend/emitter';
  5. import { GridSettings } from '@sc/handsontable';
  6. const containerStyle = {
  7. cursor: 'pointer',
  8. padding: '3px',
  9. width: '21px',
  10. height: '27px',
  11. marginLeft: '1px',
  12. color: '#409eff',
  13. transition: 'color 0.2s',
  14. 'font-size': '1rem',
  15. };
  16. const template = `
  17. <span class="recover-renderer iconfont dsk-undo"></>
  18. `;
  19. // 当前行的上下文对象
  20. const getCtx = (instance: Handsontable, row: number) => {
  21. // 当前行的源数据
  22. const rowSourceData = instance.getSourceDataAtRow(row) as TreeNode;
  23. // 当前行的上下文对象
  24. return rowSourceData.getCtx();
  25. };
  26. const hoverEffect = (container: HTMLElement) => {
  27. // 鼠标 hover 变色
  28. hover(
  29. container,
  30. () => {
  31. style(container, { color: '#007bff', fontSize: '16px' });
  32. },
  33. () => {
  34. style(container, { color: '#409eff', fontSize: '1rem' });
  35. }
  36. );
  37. };
  38. const emitter = getEmitter();
  39. // 恢复按钮渲染器
  40. export default function recoverRenderer(
  41. instance: Handsontable,
  42. row: number,
  43. col: number,
  44. prop: string | number,
  45. value: DeleteEnum,
  46. cellProperties: GridSettings
  47. ): HTMLElement {
  48. if (!value || value === DeleteEnum.NORMAL) {
  49. return parse('<span></span>') as HTMLElement;
  50. }
  51. const container = parse(template) as HTMLElement;
  52. // 绑定点击事件
  53. on(container, 'click', () => {
  54. const curProject = instance.getSourceDataAtRow(row) as TreeNode<IProject>;
  55. emitter.emit(EmitterType.RECYCLE, curProject);
  56. });
  57. // 鼠标 hover 变色
  58. hoverEffect(container);
  59. /* == 设置样式 == */
  60. style(container, containerStyle);
  61. return container;
  62. }