import { CompatibleProcessing } from "./CompatibleProcessing"; import { QmsgDefaultConfig } from "./QmsgDefaultConfig"; import { QmsgIcon } from "./QmsgIcon"; import { QmsgInstStorage } from "./QmsgInstStorage"; import { QmsgUtils } from "./QmsgUtils"; import { QmsgInstHandler } from "./QmsgInstHandler"; import { QmsgEvent } from "./QmsgEvent"; import type { QmsgMsg } from "./QmsgInst"; import type { QmsgConfig } from "./types/config"; import { version } from "./../package.json"; /** 实例配置(可选) */ export type QmsgConfigPartial = Partial; // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type type QmsgConfigContent = string | boolean | number | symbol | Function | bigint | null | undefined; // 执行兼容 CompatibleProcessing(); class Qmsg { /** 数据 */ $data: { /** 版本号 */ version: string; /** 数据 */ config: typeof QmsgDefaultConfig; /** 图标svg */ icon: typeof QmsgIcon; /** 每个Qmsg实例 */ instanceStorage: typeof QmsgInstStorage; }; /** * 事件工具类 */ $eventUtils: typeof QmsgEvent; /** * 实例化 * @param config 配置 */ constructor(config?: QmsgConfigPartial) { this.$data = { version: version, config: QmsgDefaultConfig, icon: QmsgIcon, instanceStorage: QmsgInstStorage, }; this.$eventUtils = QmsgEvent; this.$eventUtils.visibilitychange.addEvent(); this.config(config); } /** * 修改全局的默认配置,该配置会覆盖掉上一次修改的配置 * @param globalConfig 自定义全局配置 */ config(globalConfig?: QmsgConfigPartial) { const that = QmsgDefaultConfig; if (globalConfig == null) return that.INS_DEFAULT; if (typeof globalConfig !== "object") return that.INS_DEFAULT; for (const key in globalConfig) { if (!Object.hasOwn(globalConfig, key)) continue; const descriptor = Object.getOwnPropertyDescriptor(globalConfig, key); if (descriptor) { if ("get" in descriptor) { Reflect.deleteProperty(that.INS_DEFAULT, key); Object.defineProperty(that.INS_DEFAULT, key, { get: descriptor.get, configurable: true, enumerable: true, }); } else if ("value" in descriptor) { Reflect.deleteProperty(that.INS_DEFAULT, key); Object.defineProperty(that.INS_DEFAULT, key, { get: () => descriptor.value, configurable: true, enumerable: true, }); } else { throw new TypeError("Qmsg.config: descriptor.get or descriptor.value is null"); } } else { Reflect.set(that.INS_DEFAULT, key, globalConfig[key as keyof typeof globalConfig]); } } return that.INS_DEFAULT; } /** * 信息Toast * @param content 内容 */ info(content: QmsgConfigContent): QmsgMsg; /** * 信息Toast * @param config 配置 */ info(config: QmsgConfigPartial): QmsgMsg; /** * 信息Toast * @param content 内容 * @param config 配置 */ info(content: QmsgConfigContent, config: QmsgConfigPartial): QmsgMsg; info(content: any, config?: QmsgConfigPartial): QmsgMsg { const params = QmsgUtils.mergeArgs(content, config); params.type = "info"; return QmsgInstHandler.call(this, params); } /** * 警告Toast * @param content 内容 */ warning(content: QmsgConfigContent): QmsgMsg; /** * 警告Toast * @param config 配置 */ warning(config: QmsgConfigPartial): QmsgMsg; /** * 警告Toast * @param content 内容 * @param config 配置 */ warning(content: QmsgConfigContent, config: QmsgConfigPartial): QmsgMsg; warning(content: any, config?: QmsgConfigPartial): QmsgMsg { const params = QmsgUtils.mergeArgs(content, config); params.type = "warning"; return QmsgInstHandler.call(this, params); } /** * 成功Toast * @param content 内容 */ success(content: QmsgConfigContent): QmsgMsg; /** * 成功Toast * @param config 配置 */ success(config: QmsgConfigPartial): QmsgMsg; /** * 成功Toast * @param content 内容 * @param config 配置 */ success(content: QmsgConfigContent, config: QmsgConfigPartial): QmsgMsg; success(content: any, config?: QmsgConfigPartial) { const params = QmsgUtils.mergeArgs(content, config); params.type = "success"; return QmsgInstHandler.call(this, params); } /** * 失败Toast * @param content 内容 */ error(content: QmsgConfigContent): QmsgMsg; /** * 失败Toast * @param config 配置 */ error(config: QmsgConfigPartial): QmsgMsg; /** * 失败Toast * @param content 内容 * @param config 配置 */ error(content: QmsgConfigContent, config: QmsgConfigPartial): QmsgMsg; error(content: any, config?: QmsgConfigPartial) { const params = QmsgUtils.mergeArgs(content, config); params.type = "error"; return QmsgInstHandler.call(this, params); } /** * 加载中Toast * @param content 内容 */ loading(content: QmsgConfigContent): QmsgMsg; /** * 加载中Toast * @param config 配置 */ loading(config: QmsgConfigPartial): QmsgMsg; /** * 加载中Toast * @param content 内容 * @param config 配置 * @returns */ loading(content: QmsgConfigContent, config: QmsgConfigPartial): QmsgMsg; loading(content: any, config?: QmsgConfigPartial): QmsgMsg { const params = QmsgUtils.mergeArgs(content, config); params.type = "loading"; params.autoClose = false; return QmsgInstHandler.call(this, params); } /** * 根据uuid删除Qmsg实例和元素 * @param uuid 唯一值 */ remove(uuid: string) { QmsgInstStorage.remove(uuid); } /** * 关闭当前Qmsg创建的所有的实例 */ closeAll() { for (let index = QmsgInstStorage.insInfoList.length - 1; index >= 0; index--) { const item = QmsgInstStorage.insInfoList[index]; item && item.inst && item.inst.close(); } } } const qmsg = new Qmsg(); export { qmsg as Qmsg };