| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- import {
- APP_EMAIL_BIND_CODE,
- APP_EMAIL_BIND_CONFIRM,
- APP_EMAIL_CHANGE_CODE,
- APP_EMAIL_CHANGE_CONFIRM,
- APP_EMAIL_RESET_PSD,
- APP_EMAIL_SEND_CODE,
- APP_MAIL_CHECK,
- APP_MAIL_DELETE,
- APP_MAIL_LIST,
- APP_MAIL_READ,
- APP_MAIL_TAKE,
- APP_REGISTER,
- } from '../../api';
- import { Http } from '../../request';
- import { success } from '@scripts/api/ApiHelper';
- import { IMailActionData, IMailCheckData, IMailItem, IMailPageData } from './data';
- import { APP_LOGIN_TYPE } from '@scripts/define/Define';
- import { mainStore } from '../mainStore/MainStore';
- import { AppKernel } from '@scripts/app/AppKernel';
- import { IUserData } from '../mainStore/data';
- const APP_OTP_INTERVAL = 60;
- export enum MailOtpType {
- Register,
- Reset,
- Bind,
- ChangeOld,
- ChangeNew,
- }
- class MailStore {
- private _pageData: IMailPageData = null;
- private _newMailCount = 0;
- private _mailList: IMailItem[] = [];
- private _readMailID = 0;
- // private _lastOtpTs = 0;
- // private _lastOtpTs_bindEmail = 0;
- // private _lastOtpTs_changeEmail_old = 0;
- // private _lastOtpTs_changeEmail_new = 0;
- private _otpTsMap: Record<MailOtpType, number> = {
- [MailOtpType.Register]: 0,
- [MailOtpType.Reset]: 0,
- [MailOtpType.Bind]: 0,
- [MailOtpType.ChangeOld]: 0,
- [MailOtpType.ChangeNew]: 0,
- };
- private calcOtpCD(lastTs: number): number {
- const times = Math.floor((Date.now() - lastTs) / 1000);
- if (times > APP_OTP_INTERVAL) return 0;
- return APP_OTP_INTERVAL - times;
- }
- public setOtpTs(type: MailOtpType): void {
- this._otpTsMap[type] = Date.now();
- }
- public getOtpCD(type: MailOtpType): number {
- return this.calcOtpCD(this._otpTsMap[type]);
- }
- 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<IMailPageData>(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<IMailCheckData>(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<IMailActionData>(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<IMailActionData>(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;
- }
- async reqSendCode(account: string, purpose: string) {
- const send_type = purpose == "register"
- ? MailOtpType.Register
- : MailOtpType.Reset;
- const cd = this.getOtpCD(send_type);
- if (cd > 0) return false;
- const params = {
- email: account,
- confirm_email: account,
- purpose
- }
- const res = await Http.call(APP_EMAIL_SEND_CODE, params);
- if (success(res)) {
- this.setOtpTs(send_type);
- return true;
- }
- return false;
- }
- async reqRegister({ account, code, password, act }) {
- const params = {
- type: APP_LOGIN_TYPE.MAIL,
- email: account,
- country: 1,
- code,
- password,
- act
- }
- const res = await Http.call(APP_REGISTER, params);
- if (success(res)) {
- return true;
- }
- return false;
- }
- async reqResetPsd({ account, code, newpassword }) {
- const params = {
- email: account,
- code,
- newpassword,
- renewpassword: newpassword
- }
- const res = await Http.call(APP_EMAIL_RESET_PSD, params);
- if (success(res)) {
- return true;
- }
- return false;
- }
- async reqBindEmailCode({ account }) {
- const params = {
- email: account,
- confirm_email: account,
- }
- const res = await Http.call(APP_EMAIL_BIND_CODE, params);
- if (success(res)) {
- this.setOtpTs(MailOtpType.Bind);
- return true;
- }
- return false;
- }
- async reqBindEmailConfirm({ account, code, password }) {
- const params = {
- email: account,
- code,
- password,
- }
- const res = await Http.call<IUserData>(APP_EMAIL_BIND_CONFIRM, params);
- if (success(res)) {
- mainStore.updateUserInfo(res.data);
- AppKernel.events.emit('user:update');
- return true;
- }
- return false;
- }
- async reqChangeEmailCode({ account, target }) {
- const send_type = target == "new"
- ? MailOtpType.ChangeNew
- : MailOtpType.ChangeOld;
- const params = {
- target,
- email: account,
- confirm_email: account
- }
- const res = await Http.call(APP_EMAIL_CHANGE_CODE, params);
- if (success(res)) {
- this.setOtpTs(send_type);
- return true;
- }
- return false;
- }
- async reqChangeEmailConfirm({ account, old_code, new_code, password }) {
- const params = {
- email: account,
- old_code,
- new_code,
- password,
- }
- const res = await Http.call(APP_EMAIL_CHANGE_CONFIRM, params);
- if (success(res)) {
- await mainStore.reqUserInfo();
- AppKernel.events.emit('user:update');
- return true;
- }
- return false;
- }
- }
- export const mailStore = new MailStore();
|