TipsLayer.ts 4.0 KB

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