Compare commits
	
		
			4 Commits
		
	
	
		
			27ac19141f
			...
			a5dc26cd17
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a5dc26cd17 | |||
| 464a9d3e59 | |||
| 292a4c26c5 | |||
| e97514a67f | 
| @ -1,7 +1,7 @@ | ||||
| import { API, IAnyData, GeneralCallbackResult } from "../core/Api"; | ||||
| import { EventType } from "../core/Emitter"; | ||||
| import { EventType, Emitter } from "../core/Emitter"; | ||||
| 
 | ||||
| interface ILoginEvent { | ||||
| type ILoginEvent = { | ||||
| 
 | ||||
|     /** | ||||
|      * session 过期 | ||||
| @ -56,37 +56,37 @@ abstract class EduBase< | ||||
|             if(!info) { | ||||
|                 isSuccess = false; | ||||
|                 errMsg = "Bad Data"; | ||||
|                 this.emit("badData", { errMsg }); | ||||
|                 (this as Emitter<IAnyData>).emit("badData", { errMsg }); | ||||
|             } | ||||
| 
 | ||||
|             if (isSuccess) switch (info.code) { | ||||
|                 case (1): | ||||
|                     res = parseFunction(info.data); | ||||
|                     errMsg = info.err_msg ?? "Success"; | ||||
|                     this.emit("ok", res!); | ||||
|                     (this as Emitter<IAnyData>).emit("ok", res!); | ||||
|                     break; | ||||
| 
 | ||||
|                 case (2): | ||||
|                     isSuccess = false; | ||||
|                     errMsg = info.err_msg ?? "Session Expire"; | ||||
|                     this.emit("expire", { errMsg }); | ||||
|                     (this as Emitter<IAnyData>).emit("expire", { errMsg }); | ||||
|                     break; | ||||
| 
 | ||||
|                 case (3): | ||||
|                     isSuccess = false; | ||||
|                     errMsg = info.err_msg ?? "Unauthorized"; | ||||
|                     this.emit("unauthorized", { errMsg }); | ||||
|                     (this as Emitter<IAnyData>).emit("unauthorized", { errMsg }); | ||||
|                     break; | ||||
| 
 | ||||
|                 case (4): | ||||
|                     isSuccess = false; | ||||
|                     errMsg = info.err_msg ?? "Error"; | ||||
|                     this.emit("error", { errMsg }); | ||||
|                     (this as Emitter<IAnyData>).emit("error", { errMsg }); | ||||
|                     break; | ||||
|             } | ||||
| 
 | ||||
|             if (!isSuccess) this.emit("no", { errMsg }); | ||||
|             this.emit("done", { errMsg, data: res }); | ||||
|             if (!isSuccess) (this as Emitter<IAnyData>).emit("no", { errMsg }); | ||||
|             (this as Emitter<IAnyData>).emit("done", { errMsg, data: res }); | ||||
|         }); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| import { Emitter, EventType } from "./Emitter"; | ||||
| import { Emitter, EventType, EventMixin } from "./Emitter"; | ||||
| import { API_FAILED_SHOW_MESSAGE } from "./Config"; | ||||
| import { Logger, LogLabel, LevelLogLabel, colorRadio, StatusLabel } from "./Logger"; | ||||
| interface IAppAPIParam { | ||||
| @ -156,16 +156,7 @@ class API< | ||||
|     O extends IAnyData = IAnyData, | ||||
|     E extends Record<EventType, any> = Record<EventType, any>, | ||||
|     U extends IAnyData = IAnyData | ||||
| > extends Emitter < | ||||
|     { | ||||
|         // 这个复杂的泛型是为了 MixIn 用户自定义事件类型
 | ||||
|         // 懂得如何使用就可以了
 | ||||
|         // 不要试图去理解下面这三行代码,真正的恶魔在等着你
 | ||||
|         [P in (keyof (IAPIEvent<I, O> & IAPIResultEvent<O, U>) | keyof E)] :  | ||||
|         P extends keyof IAPIEvent<I, O> ? IAPIEvent<I, O>[P] :  | ||||
|         P extends keyof IAPIResultEvent<O, U> ? IAPIResultEvent<O, U>[P] : E[P] | ||||
|     } | ||||
| > { | ||||
| > extends Emitter<EventMixin<IAPIEvent<I, O> & IAPIResultEvent<O, U>, E>> { | ||||
| 
 | ||||
|     /** | ||||
|      * 默认调试标签 | ||||
| @ -316,7 +307,7 @@ class API< | ||||
|         } | ||||
| 
 | ||||
|         // 触发数据初始化事件
 | ||||
|         this.emit("initData", this.data); | ||||
|         (this as Emitter<IAnyData>).emit("initData", this.data); | ||||
| 
 | ||||
|         // 重置请求数据
 | ||||
|         const requestData:IWxRequestOption<O> = this.requestData = { | ||||
| @ -343,7 +334,7 @@ class API< | ||||
|         } | ||||
| 
 | ||||
|         // 触发数据解析
 | ||||
|         this.emit("parseRequestData", this.data); | ||||
|         (this as Emitter<IAnyData>).emit("parseRequestData", this.data); | ||||
| 
 | ||||
|         // 数据收集
 | ||||
|         for (let key in this.params) { | ||||
| @ -461,18 +452,18 @@ class API< | ||||
|         let request = () => { | ||||
| 
 | ||||
|             // 触发请求发送事件
 | ||||
|             this.emit("request", this.requestData!) | ||||
|             (this as Emitter<IAnyData>).emit("request", this.requestData!) | ||||
| 
 | ||||
|             wx.request<O>({ | ||||
|                 ...this.requestData!, | ||||
|                 success: (e) => { | ||||
|                     this.emit("success", e); | ||||
|                     (this as Emitter<IAnyData>).emit("success", e); | ||||
|                 }, | ||||
|                 fail: (e) => { | ||||
|                     this.emit("fail", e); | ||||
|                     (this as Emitter<IAnyData>).emit("fail", e); | ||||
|                 }, | ||||
|                 complete: (e) => { | ||||
|                     this.emit("complete", e); | ||||
|                     (this as Emitter<IAnyData>).emit("complete", e); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
| @ -490,12 +481,12 @@ class API< | ||||
|                 // 使用上次请求结果
 | ||||
|                 if (this.policy === RequestPolicy.useLastRequest) { | ||||
|                     lastAPI.on("success", (e) => { | ||||
|                         this.emit("success", e as SuccessCallbackResult<O>); | ||||
|                         this.emit("complete", {errMsg: e.errMsg}); | ||||
|                         (this as Emitter<IAnyData>).emit("success", e as SuccessCallbackResult<O>); | ||||
|                         (this as Emitter<IAnyData>).emit("complete", {errMsg: e.errMsg}); | ||||
|                     }); | ||||
|                     lastAPI.on("fail", (e) => { | ||||
|                         this.emit("fail", e); | ||||
|                         this.emit("complete", {errMsg: e.errMsg}); | ||||
|                         (this as Emitter<IAnyData>).emit("fail", e); | ||||
|                         (this as Emitter<IAnyData>).emit("complete", {errMsg: e.errMsg}); | ||||
|                     }); | ||||
|                 } | ||||
| 
 | ||||
| @ -605,8 +596,8 @@ class API< | ||||
|      */ | ||||
|     public addFailedCallBack(): this { | ||||
|         this.on("fail", (e) => { | ||||
|             this.emit("no", e as any); | ||||
|             this.emit("done", e as any); | ||||
|             (this as Emitter<IAnyData>).emit("no", e as any); | ||||
|             (this as Emitter<IAnyData>).emit("done", e as any); | ||||
|         }); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @ -15,7 +15,18 @@ export type EventHandlerMap<Events extends Record<EventType, any>> = Map< | ||||
| 
 | ||||
| // Emitter function type
 | ||||
| type IEmitParamType<E extends Record<EventType, any>, K extends keyof E> =  | ||||
| 	E[K] extends ( undefined | void ) ? [K] : [K, E[K]]; | ||||
| 	E[K] extends ( undefined | void ) ? [type: K] : [type: K, evt: E[K]]; | ||||
| 
 | ||||
| // Mixin to event object
 | ||||
| export type EventMixin<A extends Record<EventType, any>, B extends Record<EventType, any>> = { | ||||
| 	[P in (keyof A | keyof B)] : | ||||
| 		P extends (keyof A & keyof B) ?  | ||||
| 			A[P] :  | ||||
| 			P extends keyof A ?  | ||||
| 				A[P] :  | ||||
| 				P extends keyof B ? B[P] :  | ||||
| 			never; | ||||
| } | ||||
| 
 | ||||
| export class Emitter<Events extends Record<EventType, any>> { | ||||
| 	 | ||||
|  | ||||
| @ -106,8 +106,8 @@ class Mask<M extends Manager> extends Modular<M, {}, IMaskEvent> { | ||||
|      * 处理蒙版点击事件 | ||||
|      */ | ||||
| 	private handleClickMask() { | ||||
| 		if (this.autoCloseOnClick) this.emit("hide", void 0); | ||||
|         this.emit("click", void 0); | ||||
| 		if (this.autoCloseOnClick) this.emit("hide"); | ||||
|         this.emit("click"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -10,10 +10,10 @@ import { Mask } from "../../modular/Mask/Mask"; | ||||
|     const { manager, query } = await Manager.PageAsync(); | ||||
| 
 | ||||
|     // 添加蒙版 Modular
 | ||||
|     const mask = manager.addModule(Mask, "mask"); | ||||
|     // const mask = manager.addModule(Mask, "mask");
 | ||||
| 
 | ||||
|     // 添加 UserCard Modular
 | ||||
|     manager.addModule(UserCard, "userCard", { mask }); | ||||
|     manager.addModule(UserCard, "userCard"); | ||||
| 
 | ||||
|     // 添加 MainFunction Modular
 | ||||
|     manager.addModule(MainFunction, "mainFunction"); | ||||
|  | ||||
| @ -2,7 +2,7 @@ import { Modular, Manager } from "../../core/Module"; | ||||
| import { Mask } from "../../modular/Mask/Mask"; | ||||
| 
 | ||||
| type IUserCardDependent<M extends Manager> = { | ||||
|     mask: Mask<M> | ||||
|     // mask: Mask<M>
 | ||||
| } | ||||
| 
 | ||||
| type IUserCardEvent = { | ||||
| @ -23,8 +23,8 @@ class UserCard<M extends Manager> extends Modular<M, IUserCardDependent<M>, IUse | ||||
|      * 处理主题更换 | ||||
|      */ | ||||
|     private handleChangeTheme() { | ||||
|         this.depends?.mask.emit("show", void 0); | ||||
|         this.emit("clickChangeTheme", void 0); | ||||
|         // this.depends?.mask.emit("show", void 0);
 | ||||
|         this.emit("clickChangeTheme"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user