import { APP_MAIL_CHECK, APP_MAIL_DELETE, APP_MAIL_LIST, APP_MAIL_READ, APP_MAIL_TAKE, success, } from '../../api'; import { Http } from '../../request'; import { IMailActionData, IMailCheckData, IMailItem, IMailPageData } from './data'; class MailStore { private _pageData: IMailPageData = null; private _newMailCount = 0; private _mailList: IMailItem[] = []; private _readMailID = 0; public get pageData() { return this._pageData; } public get newMailCount() { return this._newMailCount; } public get mailList() { return this._mailList; } public get readMailID() { return this._readMailID; } getMail(mailID: number) { return this._mailList.find(item => Number(item.MailID) === Number(mailID)) || null; } selectMail(mailID: number) { this._readMailID = mailID; } async reqMailList() { const res = await Http.call(APP_MAIL_LIST); if (success(res) && res.data) { this._pageData = res.data; this._mailList = Array.isArray(res.data.data) ? res.data.data : []; return true; } return false; } async reqMailCheck() { const res = await Http.call(APP_MAIL_CHECK); if (success(res) && res.data) { const count = Number(res.data.new || 0); this._newMailCount = Number.isFinite(count) ? Math.max(0, count) : 0; return true; } return false; } async reqMailRead(mailID: number) { const res = await Http.call(APP_MAIL_READ, { MailID: mailID }); if (success(res)) { const responseMailID = Number(res.data?.MailID ?? mailID); const item = this.getMail(responseMailID); if (item && Number(item.MailStatus) < 2) { item.MailStatus = '2'; this._newMailCount = Math.max(0, this._newMailCount - 1); } return true; } return false; } async reqMailDelete(mailID: number) { const res = await Http.call(APP_MAIL_DELETE, { MailID: mailID }); if (success(res)) { if (mailID === 0) { this._mailList = []; } else { this._mailList = this._mailList.filter(item => Number(item.MailID) !== Number(mailID)); } if (this._readMailID === mailID) this._readMailID = 0; return true; } return false; } async reqMailTake(mailID: number) { const res = await Http.call(APP_MAIL_TAKE, { MailID: mailID }); if (success(res)) { const responseMailID = Number(res.data?.MailID ?? mailID); const item = this.getMail(responseMailID); if (item) item.MailStatus = '3'; return true; } return false; } clear() { this._pageData = null; this._newMailCount = 0; this._mailList = []; this._readMailID = 0; } } export const mailStore = new MailStore();