MailStore.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import {
  2. APP_MAIL_CHECK,
  3. APP_MAIL_DELETE,
  4. APP_MAIL_LIST,
  5. APP_MAIL_READ,
  6. APP_MAIL_TAKE,
  7. success,
  8. } from '../../api';
  9. import { Http } from '../../request';
  10. import { IMailActionData, IMailCheckData, IMailItem, IMailPageData } from './data';
  11. class MailStore {
  12. private _pageData: IMailPageData = null;
  13. private _newMailCount = 0;
  14. private _mailList: IMailItem[] = [];
  15. private _readMailID = 0;
  16. public get pageData() { return this._pageData; }
  17. public get newMailCount() { return this._newMailCount; }
  18. public get mailList() { return this._mailList; }
  19. public get readMailID() { return this._readMailID; }
  20. getMail(mailID: number) {
  21. return this._mailList.find(item => Number(item.MailID) === Number(mailID)) || null;
  22. }
  23. selectMail(mailID: number) {
  24. this._readMailID = mailID;
  25. }
  26. async reqMailList() {
  27. const res = await Http.call<IMailPageData>(APP_MAIL_LIST);
  28. if (success(res) && res.data) {
  29. this._pageData = res.data;
  30. this._mailList = Array.isArray(res.data.data) ? res.data.data : [];
  31. return true;
  32. }
  33. return false;
  34. }
  35. async reqMailCheck() {
  36. const res = await Http.call<IMailCheckData>(APP_MAIL_CHECK);
  37. if (success(res) && res.data) {
  38. const count = Number(res.data.new || 0);
  39. this._newMailCount = Number.isFinite(count) ? Math.max(0, count) : 0;
  40. return true;
  41. }
  42. return false;
  43. }
  44. async reqMailRead(mailID: number) {
  45. const res = await Http.call<IMailActionData>(APP_MAIL_READ, { MailID: mailID });
  46. if (success(res)) {
  47. const responseMailID = Number(res.data?.MailID ?? mailID);
  48. const item = this.getMail(responseMailID);
  49. if (item && Number(item.MailStatus) < 2) {
  50. item.MailStatus = '2';
  51. this._newMailCount = Math.max(0, this._newMailCount - 1);
  52. }
  53. return true;
  54. }
  55. return false;
  56. }
  57. async reqMailDelete(mailID: number) {
  58. const res = await Http.call(APP_MAIL_DELETE, { MailID: mailID });
  59. if (success(res)) {
  60. if (mailID === 0) {
  61. this._mailList = [];
  62. } else {
  63. this._mailList = this._mailList.filter(item => Number(item.MailID) !== Number(mailID));
  64. }
  65. if (this._readMailID === mailID) this._readMailID = 0;
  66. return true;
  67. }
  68. return false;
  69. }
  70. async reqMailTake(mailID: number) {
  71. const res = await Http.call<IMailActionData>(APP_MAIL_TAKE, { MailID: mailID });
  72. if (success(res)) {
  73. const responseMailID = Number(res.data?.MailID ?? mailID);
  74. const item = this.getMail(responseMailID);
  75. if (item) item.MailStatus = '3';
  76. return true;
  77. }
  78. return false;
  79. }
  80. clear() {
  81. this._pageData = null;
  82. this._newMailCount = 0;
  83. this._mailList = [];
  84. this._readMailID = 0;
  85. }
  86. }
  87. export const mailStore = new MailStore();