index.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /** 一个事件能存储多个回调 */
  2. interface EnentNames {
  3. loadComplete: string; //加载状态名
  4. spotTrade: string; // 挂牌成功,通知报价大厅更新数据
  5. blocsTrade: string; // 贸易圈 挂牌成功
  6. moneyChangedNtf_UI: string; // /接收到资金变化通知 UI 成 使用
  7. financing_manager: string; // 融资摘牌
  8. changeTheme: string; // 切换主题
  9. }
  10. /** 一个事件只能存储一个回调 */
  11. interface EnentNamesOnlyOneValue {
  12. logout: string; //登出名:确认登出时不能进行其它操作了 暂时1s登出状态
  13. loginSuccess: string; // 登录成功
  14. loadAddressList: string; //加载地址列表
  15. loadMylieList: string; //加载闲置列表
  16. custOfflineNtf: string; //接收到账户离线通知
  17. userLogout: string; //接收到用户登出应答
  18. posChangedNtf: string; //接收到头寸变化通知
  19. moneyChangedNtf: string; //接收到资金变化通知
  20. orderCanceledNtf: string; //接收到委托单撤单通知
  21. quoteReceiveNtf: string; // 接收实时行情推送
  22. }
  23. // 事件触发器
  24. export default new (class Bus {
  25. // 收集订阅信息,调度中心
  26. private subscribe: { [key: string]: Array<Function> } = {};
  27. /** 注册事件(一个事件可以存储多个回调) */
  28. $on(enentType: keyof EnentNames, hander: Function): void {
  29. this.subscribe[enentType] = this.subscribe[enentType] || [];
  30. this.subscribe[enentType].push(hander);
  31. }
  32. /** 注册事件(一个事件只能存储一个回调) */
  33. $onOnly(enentType: keyof EnentNamesOnlyOneValue, hander: Function): void {
  34. this.subscribe[enentType] = [];
  35. this.subscribe[enentType].push(hander);
  36. }
  37. /** 发布事件 立即执行*/
  38. $emit(enentType: keyof EnentNames | keyof EnentNamesOnlyOneValue, data?: any): void {
  39. const sub = this.subscribe[enentType];
  40. if (sub) {
  41. sub.forEach((hander: Function) => hander(data));
  42. }
  43. }
  44. // 取消部分订阅
  45. $off(enentType: keyof EnentNames | keyof EnentNamesOnlyOneValue, hander: Function): void {
  46. const sub = this.subscribe[enentType];
  47. if (sub) {
  48. const findIndex = sub.findIndex((fn) => fn === hander);
  49. this.subscribe[enentType].splice(findIndex, 1);
  50. }
  51. }
  52. // 取消所有订阅
  53. $offall(enentType: keyof EnentNames): void {
  54. const sub = this.subscribe[enentType];
  55. if (sub) {
  56. delete this.subscribe[enentType];
  57. }
  58. }
  59. })();