MailStore.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import {
  2. APP_EMAIL_RESET_PSD,
  3. APP_EMAIL_SEND_CODE,
  4. APP_MAIL_CHECK,
  5. APP_MAIL_DELETE,
  6. APP_MAIL_LIST,
  7. APP_MAIL_READ,
  8. APP_MAIL_TAKE,
  9. APP_REGISTER,
  10. } from '../../api';
  11. import { Http } from '../../request';
  12. import { success } from '@scripts/api/ApiHelper';
  13. import { IMailActionData, IMailCheckData, IMailItem, IMailPageData } from './data';
  14. import { APP_LOGIN_TYPE } from '@scripts/define/Define';
  15. const APP_OTP_INTERVAL = 60;
  16. class MailStore {
  17. private _pageData: IMailPageData = null;
  18. private _newMailCount = 0;
  19. private _mailList: IMailItem[] = [];
  20. private _readMailID = 0;
  21. private _lastOtpTs = 0;
  22. public get pageData() { return this._pageData; }
  23. public get newMailCount() { return this._newMailCount; }
  24. public get mailList() { return this._mailList; }
  25. public get readMailID() { return this._readMailID; }
  26. public get otpCD() {
  27. const times = Math.floor((Date.now() - this._lastOtpTs) / 1000);
  28. if (times > APP_OTP_INTERVAL) return 0;
  29. return APP_OTP_INTERVAL - times;
  30. }
  31. getMail(mailID: number) {
  32. return this._mailList.find(item => Number(item.MailID) === Number(mailID)) || null;
  33. }
  34. selectMail(mailID: number) {
  35. this._readMailID = mailID;
  36. }
  37. async reqMailList() {
  38. const res = await Http.call<IMailPageData>(APP_MAIL_LIST);
  39. if (success(res) && res.data) {
  40. this._pageData = res.data;
  41. this._mailList = Array.isArray(res.data.data) ? res.data.data : [];
  42. return true;
  43. }
  44. return false;
  45. }
  46. async reqMailCheck() {
  47. const res = await Http.call<IMailCheckData>(APP_MAIL_CHECK);
  48. if (success(res) && res.data) {
  49. const count = Number(res.data.new || 0);
  50. this._newMailCount = Number.isFinite(count) ? Math.max(0, count) : 0;
  51. return true;
  52. }
  53. return false;
  54. }
  55. async reqMailRead(mailID: number) {
  56. const res = await Http.call<IMailActionData>(APP_MAIL_READ, { MailID: mailID });
  57. if (success(res)) {
  58. const responseMailID = Number(res.data?.MailID ?? mailID);
  59. const item = this.getMail(responseMailID);
  60. if (item && Number(item.MailStatus) < 2) {
  61. item.MailStatus = '2';
  62. this._newMailCount = Math.max(0, this._newMailCount - 1);
  63. }
  64. return true;
  65. }
  66. return false;
  67. }
  68. async reqMailDelete(mailID: number) {
  69. const res = await Http.call(APP_MAIL_DELETE, { MailID: mailID });
  70. if (success(res)) {
  71. if (mailID === 0) {
  72. this._mailList = [];
  73. } else {
  74. this._mailList = this._mailList.filter(item => Number(item.MailID) !== Number(mailID));
  75. }
  76. if (this._readMailID === mailID) this._readMailID = 0;
  77. return true;
  78. }
  79. return false;
  80. }
  81. async reqMailTake(mailID: number) {
  82. const res = await Http.call<IMailActionData>(APP_MAIL_TAKE, { MailID: mailID });
  83. if (success(res)) {
  84. const responseMailID = Number(res.data?.MailID ?? mailID);
  85. const item = this.getMail(responseMailID);
  86. if (item) item.MailStatus = '3';
  87. return true;
  88. }
  89. return false;
  90. }
  91. clear() {
  92. this._pageData = null;
  93. this._newMailCount = 0;
  94. this._mailList = [];
  95. this._readMailID = 0;
  96. }
  97. async reqSendCode(account: string, purpose: string) {
  98. const cd = this.otpCD;
  99. if (cd > 0) return false;
  100. const params = {
  101. email: account,
  102. confirm_email: account,
  103. purpose
  104. }
  105. const res = await Http.call(APP_EMAIL_SEND_CODE, params);
  106. if (success(res)) {
  107. this._lastOtpTs = Date.now();
  108. return true;
  109. }
  110. return false;
  111. }
  112. async reqRegister({ account, code, password, act }) {
  113. const params = {
  114. type: APP_LOGIN_TYPE.MAIL,
  115. email: account,
  116. country: 1,
  117. code,
  118. password,
  119. act
  120. }
  121. const res = await Http.call(APP_REGISTER, params);
  122. if (success(res)) {
  123. return true;
  124. }
  125. return false;
  126. }
  127. async reqResetPsd({ account, code, newpassword }) {
  128. const params = {
  129. email: account,
  130. code,
  131. newpassword,
  132. renewpassword: newpassword
  133. }
  134. const res = await Http.call(APP_EMAIL_RESET_PSD, params);
  135. if (success(res)) {
  136. return true;
  137. }
  138. return false;
  139. }
  140. }
  141. export const mailStore = new MailStore();