TipsLayer.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import { _decorator, Node, Event } from "cc";
  2. import BaseUI from "../../scripts/base/BaseUI";
  3. import { Hall } from "../hall/Hall";
  4. import { RichText } from "cc";
  5. import { Label } from "cc";
  6. import PayM from "../../scripts/mgr/PayM";
  7. import ShareM from "../../scripts/mgr/ShareM";
  8. import ConfigM from "../../scripts/api/ConfigM";
  9. const { ccclass, property } = _decorator;
  10. export class TipsData {
  11. forceConfirm: boolean = false;
  12. title: string;
  13. content: string;
  14. onConfirm: () => void = null;
  15. onCancel: () => void = null;
  16. singleName: string = "";
  17. link: string = null;
  18. shareLink: string = null;
  19. constructor(content: string) {
  20. this.content = content;
  21. }
  22. async show(): Promise<TipsLayer> {
  23. return await TipsLayer.show(this);
  24. }
  25. }
  26. export interface OnConfirm {
  27. (): void;
  28. }
  29. @ccclass("TipsLayer")
  30. export class TipsLayer extends BaseUI {
  31. static build(content: string): TipsData {
  32. let tipsData: TipsData = new TipsData(content);
  33. return tipsData;
  34. }
  35. static forceConfirm(
  36. title: string,
  37. content: string,
  38. shareLink: string = null
  39. ): Promise<boolean> {
  40. return new Promise((resolve, reject) => {
  41. let tipsData: TipsData = TipsLayer.build(content);
  42. tipsData.title = title;
  43. tipsData.shareLink = shareLink;
  44. tipsData.forceConfirm = true;
  45. tipsData.onConfirm = () => {
  46. resolve(true);
  47. };
  48. tipsData.onCancel = () => {
  49. resolve(false);
  50. };
  51. TipsLayer.show(tipsData);
  52. });
  53. }
  54. private static single: Map<string, Node> = new Map();
  55. static async show(data: TipsData): Promise<TipsLayer> {
  56. if (data.singleName && data.singleName != "") {
  57. if (TipsLayer.single.has(data.singleName)) {
  58. return TipsLayer.single.get(data.singleName).getComponent(TipsLayer);
  59. }
  60. }
  61. let layer = await Hall.ins.showLayer("prefab/layer/TipsLayer");
  62. let comp = layer.getComponent(TipsLayer);
  63. comp.init(data);
  64. if (data.singleName && data.singleName != "") {
  65. TipsLayer.single.set(data.singleName, layer);
  66. }
  67. return comp;
  68. }
  69. static async showConfirm(title: string, content: string): Promise<boolean> {
  70. return new Promise((resolve, reject) => {
  71. let tipsData: TipsData = TipsLayer.build(content);
  72. tipsData.title = title;
  73. tipsData.onConfirm = () => {
  74. resolve(true);
  75. };
  76. tipsData.onCancel = () => {
  77. resolve(false);
  78. };
  79. TipsLayer.show(tipsData);
  80. });
  81. }
  82. private data: TipsData;
  83. init(data: TipsData) {
  84. this.data = data;
  85. let self = this;
  86. if (data.title == null || data.title == "") {
  87. this.FindNode("lbl_title").active = false;
  88. } else {
  89. this.setText("lbl_title", data.title);
  90. }
  91. this.FindAs("lbl_content", RichText).string = data.content;
  92. if (data.forceConfirm) {
  93. setTimeout(() => {
  94. self.FindNode("tap_close").active = false;
  95. self.FindNode("btn_close").active = false;
  96. self.FindNode("btn_close_button").active = false;
  97. }, 500);
  98. }
  99. this.FindNode("btn_share").active = data.shareLink && data.shareLink != "";
  100. this.FindNode("btn_link").active = data.link != null;
  101. this.FindNode("btn_link").getComponent(Label).string = data.link;
  102. // this.setText("btn_link", data.link);
  103. }
  104. protected onLoad(): void {
  105. super.onLoad();
  106. }
  107. public onBtnClick(name: string, event: Event, customEventData: any): void {
  108. console.log(
  109. `111 onBtnClick name == "btn_close_button" || name == "btn_close"`
  110. );
  111. console.error(name);
  112. if (name == "btn_close_button" || name == "btn_close") {
  113. this.data?.onCancel?.();
  114. this.closePage();
  115. }
  116. if (name == "btn_confirm") {
  117. this.data?.onConfirm?.();
  118. this.closePage();
  119. }
  120. switch (name) {
  121. case "btn_share":
  122. ShareM.ins.share(this.data.shareLink);
  123. break;
  124. }
  125. }
  126. protected onDestroy(): void {
  127. if (this.data?.singleName) {
  128. TipsLayer.single.delete(this.data.singleName);
  129. }
  130. }
  131. protected simpleOnBtnClick(name: string): void {
  132. if (name == "btn_link") {
  133. let url = this.FindNode("btn_link").getComponent(Label).string;
  134. ConfigM.ins.openLink(url);
  135. }
  136. }
  137. }