前端转vue
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ControlHelper.ts 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. // 假设这些类型和接口的定义
  2. interface IPage {
  3. // 这里可以定义 IPage 接口的具体属性和方法
  4. }
  5. interface TipAdornerPlacement {
  6. // 这里可以定义 TipAdornerPlacement 接口的具体属性和方法
  7. }
  8. interface TipAdorner {
  9. Placement: TipAdornerPlacement;
  10. Message: string;
  11. // 这里可以定义 TipAdorner 接口的其他方法
  12. }
  13. interface FocusManager {
  14. GetManagerInstance(target: any): FocusManager | null;
  15. CurrentFocusedElement: any;
  16. SetFocus(element: any): void;
  17. IsFocusContinue: boolean;
  18. }
  19. enum FocusHandledResult {
  20. System
  21. }
  22. class ControlHelper {
  23. static ShowTip(target: any, placement: TipAdornerPlacement, message: string): boolean {
  24. if (target instanceof IPage) {
  25. const fm = FocusManager.GetManagerInstance(target);
  26. if (!fm || !fm.CurrentFocusedElement) {
  27. return false;
  28. }
  29. target = fm.CurrentFocusedElement;
  30. }
  31. // 这里假设可以通过某种方式获取 AdornerLayer
  32. const layer = this.getAdornerLayer(target);
  33. if (layer) {
  34. this.RemoveTipAdorner(target, layer);
  35. const tip: TipAdorner = {
  36. Placement: placement,
  37. Message: message ? message.trim() : "输入错误"
  38. };
  39. if (target instanceof HTMLInputElement) {
  40. target.select();
  41. }
  42. // 这里假设可以添加装饰器
  43. this.addTipToLayer(tip, layer);
  44. target.addEventListener('blur', () => this.OnLostFocus(target));
  45. }
  46. return false;
  47. }
  48. static ShowTipSimple(target: any, message: string): boolean {
  49. // 假设存在一个默认的底部位置
  50. const defaultPlacement = {} as TipAdornerPlacement;
  51. return this.ShowTip(target, defaultPlacement, message);
  52. }
  53. static RemoveTipAdorner(target: any, layer: any): void {
  54. if (!layer) {
  55. return;
  56. }
  57. const adorners = this.getAdorners(target, layer);
  58. if (!adorners) {
  59. return;
  60. }
  61. adorners.forEach((ad: any) => {
  62. if (this.isTipAdorner(ad)) {
  63. this.removeAdornerFromLayer(ad, layer);
  64. }
  65. });
  66. }
  67. static OnLostFocus(target: any): void {
  68. target.removeEventListener('blur', () => this.OnLostFocus(target));
  69. const layer = this.getAdornerLayer(target);
  70. this.RemoveTipAdorner(target, layer);
  71. }
  72. static RemoveTip(target: any): void {
  73. if (!target) {
  74. return;
  75. }
  76. const layer = this.getAdornerLayer(target);
  77. if (layer) {
  78. this.RemoveTipAdorner(target, layer);
  79. }
  80. }
  81. static SetFocus(target: IPage, element?: any): void {
  82. const focusManager = FocusManager.GetManagerInstance(target);
  83. if (!focusManager) {
  84. return;
  85. }
  86. if (element) {
  87. focusManager.SetFocus(element);
  88. }
  89. focusManager.IsFocusContinue = false;
  90. }
  91. static get EmptyMouseHandled(): (sender: any, e: any) => void {
  92. return (sender, e) => { };
  93. }
  94. static get EmptyFocusHandled(): (sender: any, e: any) => FocusHandledResult {
  95. return (sender, e) => {
  96. return FocusHandledResult.System;
  97. };
  98. }
  99. // 以下是模拟的辅助方法,需要根据实际情况实现
  100. private static getAdornerLayer(target: any): any {
  101. return null;
  102. }
  103. private static getAdorners(target: any, layer: any): any[] {
  104. return [];
  105. }
  106. private static isTipAdorner(ad: any): boolean {
  107. return false;
  108. }
  109. private static addTipToLayer(tip: TipAdorner, layer: any): void {
  110. // 实现添加装饰器的逻辑
  111. }
  112. private static removeAdornerFromLayer(ad: any, layer: any): void {
  113. // 实现移除装饰器的逻辑
  114. }
  115. }
  116. export default ControlHelper;