| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import { v4 } from 'uuid'
- /**
- * 事件消息
- */
- interface EventMessage {
- keys: (keyof typeof EventKey)[];
- callback: (data: unknown) => void;
- }
- /** 事件key */
- enum EventKey {
- loadComplete, //加载状态名
- spotTrade, // 挂牌成功,通知报价大厅更新数据
- blocsTrade, // 贸易圈 挂牌成功
- financing_manager, // 融资摘牌
- changeTheme, // 切换主题
- logout, //登出名:确认登出时不能进行其它操作了 暂时1s登出状态
- loginSuccess, // 登录成功
- loadAddressList, //加载地址列表
- loadMylieList, //加载闲置列表
- marketStatusChangeNtf, // 市场状态变更通知
- custOfflineNtf, //接收到账户离线通知
- userLogout, //接收到用户登出应答
- posChangedNtf, //接收到头寸变化通知
- moneyChangedNtf, //接收到资金变化通知
- taAccountChangedNtf, //接收到资金账户通知
- bargain, // 议价单
- orderCanceledNtf, //接收到委托单撤单通知
- orderDealedNtf, //接收到委托单成交通知
- quoteReceiveNtf, // 接收实时行情推送
- wrTradeDealedNtf, // 接收到仓单贸易成交通知
- }
- /**
- * 事件总线
- */
- export default new (class {
- private eventMap = new Map<string, EventMessage>();
- /** 监听(订阅)事件 */
- $on(eventKey: keyof typeof EventKey | (keyof typeof EventKey)[], callback: EventMessage['callback']) {
- const uuid = v4();
- const keys = Array.isArray(eventKey) ? eventKey : [eventKey];
- this.eventMap.set(uuid, {
- keys,
- callback
- })
- /** 销毁事件,注意离开页面时要手动销毁当前页面的监听事件,防止事件重复触发 */
- return () => {
- this.eventMap.delete(uuid);
- }
- }
- /** 触发(发布)事件 */
- $emit(eventKey: keyof typeof EventKey, data?: unknown) {
- for (const message of this.eventMap.values()) {
- if (message.keys.includes(eventKey)) {
- message.callback(data);
- }
- }
- }
- /** 取消事件 */
- $off(...eventkeys: (keyof typeof EventKey)[]) {
- if (eventkeys.length) {
- for (const [uuid, message] of this.eventMap.entries()) {
- for (let i = message.keys.length - 1; i >= 0; i--) {
- if (eventkeys.includes(message.keys[i])) {
- message.keys.splice(i, 1);
- }
- }
- if (!message.keys.length) {
- this.eventMap.delete(uuid);
- }
- }
- } else {
- this.eventMap.clear();
- }
- }
- })
|