@ibiz-template/core 0.2.15 → 0.2.18-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.system.min.js","sources":["index.esm.js"],"sourcesContent":["var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// ../../node_modules/.pnpm/loglevel@1.8.1/node_modules/loglevel/lib/loglevel.js\nvar require_loglevel = __commonJS({\n \"../../node_modules/.pnpm/loglevel@1.8.1/node_modules/loglevel/lib/loglevel.js\"(exports, module) {\n \"use strict\";\n (function(root, definition) {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(definition);\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n })(exports, function() {\n \"use strict\";\n var noop = function() {\n };\n var undefinedType = \"undefined\";\n var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\\/|MSIE /.test(window.navigator.userAgent);\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === \"function\") {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace)\n console.trace();\n }\n function realMethod(methodName) {\n if (methodName === \"debug\") {\n methodName = \"log\";\n }\n if (typeof console === undefinedType) {\n return false;\n } else if (methodName === \"trace\" && isIE) {\n return traceForIE;\n } else if (console[methodName] !== void 0) {\n return bindMethod(console, methodName);\n } else if (console.log !== void 0) {\n return bindMethod(console, \"log\");\n } else {\n return noop;\n }\n }\n function replaceLoggingMethods(level, loggerName) {\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = i < level ? noop : this.methodFactory(methodName, level, loggerName);\n }\n this.log = this.debug;\n }\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function() {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n function defaultMethodFactory(methodName, level, loggerName) {\n return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n function Logger2(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n defaultLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = void 0;\n }\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || \"silent\").toUpperCase();\n if (typeof window === undefinedType || !storageKey)\n return;\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {\n }\n try {\n window.document.cookie = encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {\n }\n }\n function getPersistedLevel() {\n var storedLevel;\n if (typeof window === undefinedType || !storageKey)\n return;\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {\n }\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\"\n );\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {\n }\n }\n if (self.levels[storedLevel] === void 0) {\n storedLevel = void 0;\n }\n return storedLevel;\n }\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey)\n return;\n try {\n window.localStorage.removeItem(storageKey);\n return;\n } catch (ignore) {\n }\n try {\n window.document.cookie = encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {\n }\n }\n self.name = name;\n self.levels = {\n \"TRACE\": 0,\n \"DEBUG\": 1,\n \"INFO\": 2,\n \"WARN\": 3,\n \"ERROR\": 4,\n \"SILENT\": 5\n };\n self.methodFactory = factory || defaultMethodFactory;\n self.getLevel = function() {\n return currentLevel;\n };\n self.setLevel = function(level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== void 0) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) {\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n self.setDefaultLevel = function(level) {\n defaultLevel = level;\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n self.resetLevel = function() {\n self.setLevel(defaultLevel, false);\n clearPersistedLevel();\n };\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n var defaultLogger = new Logger2();\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if (typeof name !== \"symbol\" && typeof name !== \"string\" || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n var logger2 = _loggersByName[name];\n if (!logger2) {\n logger2 = _loggersByName[name] = new Logger2(\n name,\n defaultLogger.getLevel(),\n defaultLogger.methodFactory\n );\n }\n return logger2;\n };\n var _log = typeof window !== undefinedType ? window.log : void 0;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType && window.log === defaultLogger) {\n window.log = _log;\n }\n return defaultLogger;\n };\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n defaultLogger[\"default\"] = defaultLogger;\n return defaultLogger;\n });\n }\n});\n\n// ../../node_modules/.pnpm/loglevel-plugin-prefix@0.8.4/node_modules/loglevel-plugin-prefix/lib/loglevel-plugin-prefix.js\nvar require_loglevel_plugin_prefix = __commonJS({\n \"../../node_modules/.pnpm/loglevel-plugin-prefix@0.8.4/node_modules/loglevel-plugin-prefix/lib/loglevel-plugin-prefix.js\"(exports, module) {\n \"use strict\";\n (function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.prefix = factory(root);\n }\n })(exports, function(root) {\n \"use strict\";\n var merge4 = function(target) {\n var i = 1;\n var length = arguments.length;\n var key;\n for (; i < length; i++) {\n for (key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n target[key] = arguments[i][key];\n }\n }\n }\n return target;\n };\n var defaults = {\n template: \"[%t] %l:\",\n levelFormatter: function(level) {\n return level.toUpperCase();\n },\n nameFormatter: function(name) {\n return name || \"root\";\n },\n timestampFormatter: function(date) {\n return date.toTimeString().replace(/.*(\\d{2}:\\d{2}:\\d{2}).*/, \"$1\");\n },\n format: void 0\n };\n var loglevel;\n var configs = {};\n var reg2 = function(rootLogger) {\n if (!rootLogger || !rootLogger.getLogger) {\n throw new TypeError(\"Argument is not a root logger\");\n }\n loglevel = rootLogger;\n };\n var apply2 = function(logger2, config) {\n if (!logger2 || !logger2.setLevel) {\n throw new TypeError(\"Argument is not a logger\");\n }\n var originalFactory = logger2.methodFactory;\n var name = logger2.name || \"\";\n var parent = configs[name] || configs[\"\"] || defaults;\n function methodFactory(methodName, logLevel, loggerName) {\n var originalMethod = originalFactory(methodName, logLevel, loggerName);\n var options = configs[loggerName] || configs[\"\"];\n var hasTimestamp = options.template.indexOf(\"%t\") !== -1;\n var hasLevel = options.template.indexOf(\"%l\") !== -1;\n var hasName = options.template.indexOf(\"%n\") !== -1;\n return function() {\n var content = \"\";\n var length = arguments.length;\n var args = Array(length);\n var key = 0;\n for (; key < length; key++) {\n args[key] = arguments[key];\n }\n if (name || !configs[loggerName]) {\n var timestamp = options.timestampFormatter(/* @__PURE__ */ new Date());\n var level = options.levelFormatter(methodName);\n var lname = options.nameFormatter(loggerName);\n if (options.format) {\n content += options.format(level, lname, timestamp);\n } else {\n content += options.template;\n if (hasTimestamp) {\n content = content.replace(/%t/, timestamp);\n }\n if (hasLevel)\n content = content.replace(/%l/, level);\n if (hasName)\n content = content.replace(/%n/, lname);\n }\n if (args.length && typeof args[0] === \"string\") {\n args[0] = content + \" \" + args[0];\n } else {\n args.unshift(content);\n }\n }\n originalMethod.apply(void 0, args);\n };\n }\n if (!configs[name]) {\n logger2.methodFactory = methodFactory;\n }\n config = config || {};\n if (config.template)\n config.format = void 0;\n configs[name] = merge4({}, parent, config);\n logger2.setLevel(logger2.getLevel());\n if (!loglevel) {\n logger2.warn(\n \"It is necessary to call the function reg() of loglevel-plugin-prefix before calling apply. From the next release, it will throw an error. See more: https://github.com/kutuluk/loglevel-plugin-prefix/blob/master/README.md\"\n );\n }\n return logger2;\n };\n var api = {\n reg: reg2,\n apply: apply2\n };\n var save;\n if (root) {\n save = root.prefix;\n api.noConflict = function() {\n if (root.prefix === api) {\n root.prefix = save;\n }\n return api;\n };\n }\n return api;\n });\n }\n});\n\n// ../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/parse.js\nasync function getBytes(stream, onChunk) {\n const reader = stream.getReader();\n let result;\n while (!(result = await reader.read()).done) {\n onChunk(result.value);\n }\n}\nfunction getLines(onLine) {\n let buffer;\n let position;\n let fieldLength;\n let discardTrailingNewline = false;\n return function onChunk(arr) {\n if (buffer === void 0) {\n buffer = arr;\n position = 0;\n fieldLength = -1;\n } else {\n buffer = concat(buffer, arr);\n }\n const bufLength = buffer.length;\n let lineStart = 0;\n while (position < bufLength) {\n if (discardTrailingNewline) {\n if (buffer[position] === 10) {\n lineStart = ++position;\n }\n discardTrailingNewline = false;\n }\n let lineEnd = -1;\n for (; position < bufLength && lineEnd === -1; ++position) {\n switch (buffer[position]) {\n case 58:\n if (fieldLength === -1) {\n fieldLength = position - lineStart;\n }\n break;\n case 13:\n discardTrailingNewline = true;\n case 10:\n lineEnd = position;\n break;\n }\n }\n if (lineEnd === -1) {\n break;\n }\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\n lineStart = position;\n fieldLength = -1;\n }\n if (lineStart === bufLength) {\n buffer = void 0;\n } else if (lineStart !== 0) {\n buffer = buffer.subarray(lineStart);\n position -= lineStart;\n }\n };\n}\nfunction getMessages(onId, onRetry, onMessage) {\n let message = newMessage();\n const decoder = new TextDecoder();\n return function onLine(line, fieldLength) {\n if (line.length === 0) {\n onMessage === null || onMessage === void 0 ? void 0 : onMessage(message);\n message = newMessage();\n } else if (fieldLength > 0) {\n const field = decoder.decode(line.subarray(0, fieldLength));\n const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1);\n const value = decoder.decode(line.subarray(valueOffset));\n switch (field) {\n case \"data\":\n message.data = message.data ? message.data + \"\\n\" + value : value;\n break;\n case \"event\":\n message.event = value;\n break;\n case \"id\":\n onId(message.id = value);\n break;\n case \"retry\":\n const retry = parseInt(value, 10);\n if (!isNaN(retry)) {\n onRetry(message.retry = retry);\n }\n break;\n }\n }\n };\n}\nfunction concat(a, b) {\n const res = new Uint8Array(a.length + b.length);\n res.set(a);\n res.set(b, a.length);\n return res;\n}\nfunction newMessage() {\n return {\n data: \"\",\n event: \"\",\n id: \"\",\n retry: void 0\n };\n}\n\n// ../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/fetch.js\nvar __rest = function(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar EventStreamContentType = \"text/event-stream\";\nvar DefaultRetryInterval = 1e3;\nvar LastEventId = \"last-event-id\";\nfunction fetchEventSource(input, _a) {\n var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, [\"signal\", \"headers\", \"onopen\", \"onmessage\", \"onclose\", \"onerror\", \"openWhenHidden\", \"fetch\"]);\n return new Promise((resolve, reject) => {\n const headers = Object.assign({}, inputHeaders);\n if (!headers.accept) {\n headers.accept = EventStreamContentType;\n }\n let curRequestController;\n function onVisibilityChange() {\n curRequestController.abort();\n if (!document.hidden) {\n create();\n }\n }\n if (!openWhenHidden) {\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n }\n let retryInterval = DefaultRetryInterval;\n let retryTimer = 0;\n function dispose() {\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n window.clearTimeout(retryTimer);\n curRequestController.abort();\n }\n inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener(\"abort\", () => {\n dispose();\n resolve();\n });\n const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;\n const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;\n async function create() {\n var _a2;\n curRequestController = new AbortController();\n try {\n const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));\n await onopen(response);\n await getBytes(response.body, getLines(getMessages((id) => {\n if (id) {\n headers[LastEventId] = id;\n } else {\n delete headers[LastEventId];\n }\n }, (retry) => {\n retryInterval = retry;\n }, onmessage)));\n onclose === null || onclose === void 0 ? void 0 : onclose();\n dispose();\n resolve();\n } catch (err) {\n if (!curRequestController.signal.aborted) {\n try {\n const interval = (_a2 = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a2 !== void 0 ? _a2 : retryInterval;\n window.clearTimeout(retryTimer);\n retryTimer = window.setTimeout(create, interval);\n } catch (innerErr) {\n dispose();\n reject(innerErr);\n }\n }\n }\n }\n create();\n });\n}\nfunction defaultOnOpen(response) {\n const contentType = response.headers.get(\"content-type\");\n if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {\n throw new Error(\"Expected content-type to be \".concat(EventStreamContentType, \", Actual: \").concat(contentType));\n }\n}\n\n// src/command/utils/linked-list.ts\nvar _Node = class _Node {\n constructor(element) {\n this.element = element;\n this.next = _Node.Undefined;\n this.prev = _Node.Undefined;\n }\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n_Node.Undefined = new _Node(void 0);\nvar Node = _Node;\nvar LinkedList = class {\n constructor() {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n get size() {\n return this._size;\n }\n isEmpty() {\n return this._first === Node.Undefined;\n }\n clear() {\n let node = this._first;\n while (node !== Node.Undefined) {\n const { next } = node;\n node.prev = Node.Undefined;\n node.next = Node.Undefined;\n node = next;\n }\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n unshift(element) {\n return this._insert(element, false);\n }\n push(element) {\n return this._insert(element, true);\n }\n _insert(element, atTheEnd) {\n const newNode = new Node(element);\n if (this._first === Node.Undefined) {\n this._first = newNode;\n this._last = newNode;\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n this._size += 1;\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n shift() {\n if (this._first === Node.Undefined) {\n return void 0;\n }\n const res = this._first.element;\n this._remove(this._first);\n return res;\n }\n pop() {\n if (this._last === Node.Undefined) {\n return void 0;\n }\n const res = this._last.element;\n this._remove(this._last);\n return res;\n }\n _remove(node) {\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n } else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n } else if (node.next === Node.Undefined) {\n this._last = this._last.prev;\n this._last.next = Node.Undefined;\n } else if (node.prev === Node.Undefined) {\n this._first = this._first.next;\n this._first.prev = Node.Undefined;\n }\n this._size -= 1;\n }\n *[Symbol.iterator]() {\n let node = this._first;\n while (node !== Node.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n};\n\n// src/command/utils/util.ts\nfunction once(fn) {\n const _this = this;\n let didCall = false;\n let result;\n return function() {\n if (didCall) {\n return result;\n }\n didCall = true;\n result = fn.apply(_this, arguments);\n return result;\n };\n}\nfunction toDisposable(fn) {\n const self = {\n dispose: once(() => {\n fn();\n })\n };\n return self;\n}\nfunction debounce(func, wait, immediate) {\n let timer;\n return function(...args) {\n if (timer) {\n clearTimeout(timer);\n }\n if (immediate) {\n const callNow = !timer;\n timer = setTimeout(() => {\n timer = null;\n }, wait);\n if (callNow) {\n func.apply(this, args);\n }\n } else {\n timer = setTimeout(() => {\n func.apply(this, args);\n }, wait);\n }\n };\n}\nfunction throttle(fn, wait) {\n let timer = null;\n return function(...args) {\n if (!timer) {\n timer = setTimeout(() => {\n fn.apply(this, args);\n timer = null;\n }, wait);\n }\n };\n}\n\n// src/command/command-register.ts\nvar CommandsRegistry = class {\n constructor() {\n /**\n * 已经注册的所有指令\n *\n * @author chitanda\n * @date 2022-07-21 15:07:47\n * @private\n */\n this.commands = /* @__PURE__ */ new Map();\n }\n /**\n * 注册指令\n *\n * @author chitanda\n * @date 2022-06-27 13:06:31\n * @param {(string | ICommand)} idOrCommand\n * @param {ICommandHandler} [handler]\n * @return {*} {IDisposable}\n */\n registerCommand(idOrCommand, handler, opts) {\n if (!idOrCommand) {\n throw new Error(\"invalid command\");\n }\n if (typeof idOrCommand === \"string\") {\n if (!handler) {\n throw new Error(\"invalid command\");\n }\n return this.registerCommand({ id: idOrCommand, handler, opts });\n }\n const { id } = idOrCommand;\n let commands2 = this.commands.get(id);\n if (!commands2) {\n commands2 = new LinkedList();\n this.commands.set(id, commands2);\n }\n const removeFn = commands2.unshift(idOrCommand);\n const ret = toDisposable(() => {\n removeFn();\n const command = this.commands.get(id);\n if (command == null ? void 0 : command.isEmpty()) {\n this.commands.delete(id);\n }\n });\n return ret;\n }\n /**\n * 指令是否已经注册\n *\n * @author chitanda\n * @date 2022-07-21 15:07:58\n * @param {string} id\n * @return {*} {boolean}\n */\n hasCommand(id) {\n return this.commands.has(id);\n }\n /**\n * 查找指令\n *\n * @author chitanda\n * @date 2022-07-21 16:07:12\n * @param {string} id\n * @return {*} {(ICommand | undefined)}\n */\n getCommand(id) {\n const list = this.commands.get(id);\n if (!list || list.isEmpty()) {\n return void 0;\n }\n return list[Symbol.iterator]().next().value;\n }\n /**\n * 获取所有指令\n *\n * @author chitanda\n * @date 2022-07-21 16:07:20\n * @return {*} {ICommandsMap}\n */\n getCommands() {\n const result = /* @__PURE__ */ new Map();\n const keys = this.commands.keys();\n for (const key of keys) {\n const command = this.getCommand(key);\n if (command) {\n result.set(key, command);\n }\n }\n return result;\n }\n /**\n * 获取指令配置参数\n *\n * @author chitanda\n * @date 2022-07-21 16:07:27\n * @param {string} id\n * @return {*} {(ICommandOption | undefined)}\n */\n getCommandOpt(id) {\n const cmd = this.getCommand(id);\n return cmd == null ? void 0 : cmd.opts;\n }\n};\n\n// src/command/command.ts\nvar CommandController = class {\n constructor() {\n this.commandRegister = new CommandsRegistry();\n }\n /**\n * 注册指令\n *\n * @author chitanda\n * @date 2022-06-28 19:06:45\n * @param {string} id\n * @param {ICommandHandler} handler\n * @param {ICommandOption} [opts]\n * @return {*} {IDisposable}\n */\n register(id, handler, opts) {\n return this.commandRegister.registerCommand(id, handler, opts);\n }\n /**\n * 执行指令\n *\n * @author chitanda\n * @date 2022-06-28 19:06:38\n * @template T\n * @param {string} id\n * @param {...unknown[]} args\n * @return {*} {Promise<T>}\n */\n async execute(id, ...args) {\n const command = this.commandRegister.getCommand(id);\n if (command) {\n return command.handler(...args);\n }\n throw new Error(\"\\u672A\\u6CE8\\u518C\\u6307\\u4EE4: \".concat(id, \"\\uFF0C\\u8BF7\\u5148\\u6CE8\\u518C\\u6307\\u4EE4\"));\n }\n /**\n * 判断指令是否存在,可直接抛出异常\n *\n * @author chitanda\n * @date 2022-06-28 19:06:11\n * @param {string} id\n * @param {boolean} [err]\n * @return {*} {boolean}\n */\n hasCommand(id, err) {\n const bol = !!this.commandRegister.hasCommand(id);\n if (err === true && bol === true) {\n throw new Error(\"\\u672A\\u6CE8\\u518C\\u6307\\u4EE4: \".concat(id, \"\\uFF0C\\u8BF7\\u5148\\u6CE8\\u518C\\u6307\\u4EE4\"));\n }\n return bol;\n }\n /**\n * 获取指令配置参数\n *\n * @author chitanda\n * @date 2022-07-21 17:07:11\n * @param {string} id\n * @return {*} {(ICommandOption | undefined)}\n */\n getCommandOpts(id) {\n return this.commandRegister.getCommandOpt(id);\n }\n};\n\n// src/command/index.ts\nvar commands = new CommandController();\n\n// src/constant/core/core.ts\nvar CoreConst = class {\n};\n/**\n * 默认模型服务标识\n */\nCoreConst.DEFAULT_MODEL_SERVICE_TAG = \"default\";\n/**\n * 访问令牌标识\n *\n * @author chitanda\n * @date 2022-07-20 15:07:28\n * @static\n */\nCoreConst.TOKEN = \"ibzuaa-token\";\n/**\n * 访问令牌标识过期时间\n *\n * @author lxm\n * @date 2023-02-13 07:11:33\n * @static\n * @memberof CoreConst\n */\nCoreConst.TOKEN_EXPIRES = \"ibzuaa-token-expires\";\n\n// src/constant/util/util.ts\nvar NOOP = () => {\n};\n\n// src/constant/http-status-message/http-status-message.ts\nvar HttpStatusMessageConst = {\n 200: \"\\u670D\\u52A1\\u5668\\u6210\\u529F\\u8FD4\\u56DE\\u8BF7\\u6C42\\u7684\\u6570\\u636E\\u3002\",\n 201: \"\\u65B0\\u5EFA\\u6216\\u4FEE\\u6539\\u6570\\u636E\\u6210\\u529F\\u3002\",\n 202: \"\\u4E00\\u4E2A\\u8BF7\\u6C42\\u5DF2\\u7ECF\\u8FDB\\u5165\\u540E\\u53F0\\u6392\\u961F\\uFF08\\u5F02\\u6B65\\u4EFB\\u52A1\\uFF09\\u3002\",\n 204: \"\\u5220\\u9664\\u6570\\u636E\\u6210\\u529F\\u3002\",\n 400: \"\\u53D1\\u51FA\\u7684\\u8BF7\\u6C42\\u6709\\u9519\\u8BEF\\uFF0C\\u670D\\u52A1\\u5668\\u6CA1\\u6709\\u8FDB\\u884C\\u65B0\\u5EFA\\u6216\\u4FEE\\u6539\\u6570\\u636E\\u7684\\u64CD\\u4F5C\\u3002\",\n 401: \"\\u7528\\u6237\\u6CA1\\u6709\\u6743\\u9650\\uFF08\\u4EE4\\u724C\\u3001\\u7528\\u6237\\u540D\\u3001\\u5BC6\\u7801\\u9519\\u8BEF\\uFF09\\u3002\",\n 403: \"\\u7528\\u6237\\u5F97\\u5230\\u6388\\u6743\\uFF0C\\u4F46\\u662F\\u8BBF\\u95EE\\u662F\\u88AB\\u7981\\u6B62\\u7684\\u3002\",\n 404: \"\\u53D1\\u51FA\\u7684\\u8BF7\\u6C42\\u9488\\u5BF9\\u7684\\u662F\\u4E0D\\u5B58\\u5728\\u7684\\u8BB0\\u5F55\\uFF0C\\u670D\\u52A1\\u5668\\u6CA1\\u6709\\u8FDB\\u884C\\u64CD\\u4F5C\\u3002\",\n 406: \"\\u8BF7\\u6C42\\u7684\\u683C\\u5F0F\\u4E0D\\u53EF\\u5F97\\u3002\",\n 410: \"\\u8BF7\\u6C42\\u7684\\u8D44\\u6E90\\u88AB\\u6C38\\u4E45\\u5220\\u9664\\uFF0C\\u4E14\\u4E0D\\u4F1A\\u518D\\u5F97\\u5230\\u7684\\u3002\",\n 422: \"\\u5F53\\u521B\\u5EFA\\u4E00\\u4E2A\\u5BF9\\u8C61\\u65F6\\uFF0C\\u53D1\\u751F\\u4E00\\u4E2A\\u9A8C\\u8BC1\\u9519\\u8BEF\\u3002\",\n 500: \"\\u670D\\u52A1\\u5668\\u53D1\\u751F\\u9519\\u8BEF\\uFF0C\\u8BF7\\u68C0\\u67E5\\u670D\\u52A1\\u5668\\u3002\",\n 502: \"\\u7F51\\u5173\\u9519\\u8BEF\\u3002\",\n 503: \"\\u670D\\u52A1\\u4E0D\\u53EF\\u7528\\uFF0C\\u670D\\u52A1\\u5668\\u6682\\u65F6\\u8FC7\\u8F7D\\u6216\\u7EF4\\u62A4\\u3002\",\n 504: \"\\u7F51\\u5173\\u8D85\\u65F6\\u3002\"\n};\n\n// src/constant/login-mode/login-mode.ts\nvar LoginMode = /* @__PURE__ */ ((LoginMode2) => {\n LoginMode2[\"DEFAULT\"] = \"DEFAULT\";\n LoginMode2[\"CUSTOM\"] = \"CUSTOM\";\n LoginMode2[\"CAS\"] = \"CAS\";\n return LoginMode2;\n})(LoginMode || {});\n\n// src/constant/menu-permission-mode/menu-permission-mode.ts\nvar MenuPermissionMode = /* @__PURE__ */ ((MenuPermissionMode2) => {\n MenuPermissionMode2[\"MIXIN\"] = \"MIXIN\";\n MenuPermissionMode2[\"RESOURCE\"] = \"RESOURCE\";\n MenuPermissionMode2[\"RT\"] = \"RT\";\n return MenuPermissionMode2;\n})(MenuPermissionMode || {});\n\n// src/context/index.ts\nimport { clone } from \"ramda\";\nvar IBizContext = class _IBizContext {\n /**\n * Creates an instance of IBizContext.\n *\n * @author chitanda\n * @date 2022-07-14 10:07:15\n * @param {IData} [context={}] 自身的上下文\n * @param {IContext} [parent]\n */\n // eslint-disable-next-line default-param-last\n constructor(context = {}, parent) {\n Object.defineProperty(this, \"_associationContext\", {\n enumerable: false,\n value: []\n });\n if (parent) {\n this.initWithParent(parent);\n }\n Object.assign(this, context);\n }\n initWithParent(parent) {\n const self = this;\n Object.defineProperty(this, \"_parent\", {\n enumerable: false,\n writable: true,\n value: parent\n });\n Object.defineProperty(this, \"_context\", {\n enumerable: false,\n writable: true,\n value: {}\n });\n const properties = {};\n const keys = Object.keys(parent);\n keys.forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(this, key)) {\n return;\n }\n properties[key] = {\n enumerable: true,\n set(val) {\n if (val == null) {\n self._context[key] = null;\n } else {\n self._context[key] = val;\n }\n },\n get() {\n if (self._context[key] !== void 0) {\n return self._context[key];\n }\n return self._parent[key];\n }\n };\n });\n Object.defineProperties(this, properties);\n }\n /**\n * 返回自身的上下文,独有的和与父有差异的。\n *\n * @author lxm\n * @date 2022-12-08 17:12:26\n * @returns {*} {IData}\n */\n getOwnContext() {\n const result = {};\n Object.keys(this).forEach((key) => {\n if (!this._parent || !Object.prototype.hasOwnProperty.call(this._parent, key) || Object.prototype.hasOwnProperty.call(this._context, key)) {\n result[key] = this[key];\n }\n });\n return result;\n }\n /**\n * 销毁当前上下文对象\n *\n * @author chitanda\n * @date 2023-03-13 15:03:04\n */\n destroy() {\n this._parent = void 0;\n this._context = {};\n this._associationContext.forEach((item) => {\n item.destroy();\n });\n }\n /**\n * 在非视图中,需要断开视图上下文联系时。只能使用 clone 创建新的局部上下文\n *\n * @author chitanda\n * @date 2023-03-13 16:03:13\n * @return {*} {IBizContext}\n */\n clone() {\n const newContext = new _IBizContext(\n clone(this.getOwnContext()),\n this._parent\n );\n this._associationContext.push(newContext);\n return newContext;\n }\n /**\n * 在不改变对象引用的情况下,重置上下文\n * 等效于重新实例化,但是引用不变\n * @author lxm\n * @date 2023-05-24 10:30:40\n * @param {IData} [context={}]\n * @param {IContext} [parent]\n */\n // eslint-disable-next-line default-param-last\n reset(context = {}, parent) {\n this._associationContext.forEach((item) => {\n item.destroy();\n });\n if (this._parent) {\n this._parent = {};\n this._context = {};\n }\n Object.keys(this).forEach((key) => {\n try {\n delete this[key];\n } catch (error) {\n }\n });\n if (parent) {\n this.initWithParent(parent);\n }\n Object.assign(this, context);\n }\n /**\n * 上下文只有在视图初始化时,调用 create 方法\n *\n * @author chitanda\n * @date 2023-03-13 16:03:32\n * @static\n * @param {IData} [context]\n * @param {IContext} [parent]\n * @return {*} {IContext}\n */\n static create(context, parent) {\n return new _IBizContext(context, parent);\n }\n};\n\n// src/params/params.ts\nvar IBizParams = class {\n constructor(params, parent) {\n Object.defineProperty(this, \"_parent\", {\n enumerable: false,\n configurable: true,\n writable: true,\n value: parent\n });\n Object.defineProperty(this, \"_params\", {\n enumerable: false,\n configurable: true,\n writable: true,\n value: params || {}\n });\n return this.createProxy();\n }\n /**\n * 创建代理\n *\n * @author lxm\n * @date 2023-10-27 03:53:14\n * @protected\n * @return {*} {IBizParams}\n */\n createProxy() {\n function updateKeyDefine(target, keys) {\n keys.forEach((key) => {\n if (!Object.prototype.hasOwnProperty.call(target, key)) {\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n }\n });\n }\n return new Proxy(this, {\n set(target, p, value) {\n if ([\"_params\", \"_parent\"].includes(p)) {\n target[p] = value;\n } else {\n target._params[p] = value;\n }\n return true;\n },\n get(target, p, _receiver) {\n if (target[p] !== void 0) {\n return target[p];\n }\n if (target._params[p] !== void 0) {\n return target._params[p];\n }\n if (target._parent && target._parent[p] !== void 0) {\n return target._parent[p];\n }\n },\n ownKeys(target) {\n const allKeys = [\n .../* @__PURE__ */ new Set([\n ...Object.keys(target._params),\n ...Object.keys(target._parent || {})\n ])\n ];\n updateKeyDefine(target, allKeys);\n return allKeys;\n }\n });\n }\n /**\n * 在不改变对象引用的情况下,重置视图参数\n * 等效于重新实例化,但是引用不变\n * @author lxm\n * @date 2023-10-27 05:24:45\n * @param {IParams} [params]\n * @param {IParams} [parent]\n */\n reset(params, parent) {\n this._params = params || {};\n this._parent = parent;\n }\n /**\n * 销毁上下文,避免内存泄漏\n *\n * @author lxm\n * @date 2023-10-27 03:57:44\n */\n destroy() {\n this._params = {};\n this._parent = void 0;\n }\n};\n\n// src/environment/environment.ts\nvar Environment = {\n dev: false,\n hub: true,\n enableMqtt: false,\n mqttUrl: \"/portal/mqtt/mqtt\",\n isEnableMultiLan: false,\n logLevel: \"ERROR\",\n baseUrl: \"/api\",\n appId: \"\",\n pluginBaseUrl: \"./plugins\",\n isLocalModel: false,\n remoteModelUrl: \"/remotemodel\",\n assetsUrl: \"./assets\",\n dcSystem: \"\",\n downloadFileUrl: \"/ibizutil/download\",\n uploadFileUrl: \"/ibizutil/upload\",\n casLoginUrl: \"\",\n loginMode: \"DEFAULT\" /* DEFAULT */,\n menuPermissionMode: \"MIXIN\" /* MIXIN */,\n enablePermission: true,\n routePlaceholder: \"-\",\n enableWfAllHistory: false,\n isMob: false,\n isSaaSMode: true,\n AppTitle: \"\\u5E94\\u7528\",\n favicon: \"./favicon.ico\"\n};\n\n// src/error/http-error/http-error.ts\nvar HttpError = class extends Error {\n constructor(err) {\n super(\"HttpError\");\n this.name = \"HttpError\";\n const res = err.response;\n this.response = err.response;\n if (res) {\n if (res.data) {\n this.message = res.data.message;\n } else {\n this.message = res.statusText;\n }\n if (!this.message) {\n this.message = \"\\u7F51\\u7EDC\\u5F02\\u5E38\\uFF0C\\u8BF7\\u7A0D\\u540E\\u91CD\\u8BD5!\";\n }\n this.status = res.status;\n } else {\n this.message = err.message;\n this.status = 500;\n }\n }\n};\n\n// src/error/model-error/model-error.ts\nvar ModelError = class extends Error {\n /**\n * Creates an instance of ModelError.\n *\n * @author chitanda\n * @date 2022-08-30 16:08:38\n * @param {IModelObject} model 模板未支持的模型\n * @param {string} [msg]\n */\n constructor(model, msg) {\n super(\"\\u300C\".concat(model.id, \"\\u300D\\u6A21\\u578B\").concat(msg ? \"\\uFF1A \".concat(msg) : \"\"));\n this.model = model;\n this.name = \"\\u672A\\u652F\\u6301\\u7684\\u6A21\\u578B\";\n }\n};\n\n// src/error/runtime-error/runtime-error.ts\nvar RuntimeError = class extends Error {\n constructor(message) {\n super(message);\n this.message = message;\n this.name = \"Runtime Error\";\n }\n};\n\n// src/error/runtime-model-error/runtime-model-error.ts\nvar RuntimeModelError = class extends Error {\n /**\n * Creates an instance of DefectModelError.\n *\n * @author chitanda\n * @date 2022-08-30 16:08:58\n * @param {IModelObject} model 丢失配置的模型\n * @param {string} [msg] 缺失配置描述\n */\n constructor(model, msg) {\n super(\"\\u300C\".concat(model.id, \"\\u300D\\u6A21\\u578B\").concat(msg ? \"\\uFF1A \".concat(msg) : \"\"));\n this.model = model;\n this.name = \"\\u6A21\\u578B\\u914D\\u7F6E\\u7F3A\\u5931\";\n }\n};\n\n// src/error/notice-error/notice-error.ts\nvar NoticeError = class extends Error {\n constructor(message, duration) {\n super(message);\n this.message = message;\n this.duration = duration;\n this.name = \"notice Error\";\n }\n};\n\n// src/utils/util/util.ts\nimport { debounce as debounce2 } from \"lodash-es\";\nimport { getCookie } from \"qx-util\";\nimport { isNotNil, isNil } from \"ramda\";\nfunction getToken() {\n return getCookie(CoreConst.TOKEN);\n}\nfunction isOverlap(arr1, arr2) {\n const newArr = Array.from(/* @__PURE__ */ new Set([...arr1, ...arr2]));\n return newArr.length !== arr1.length + arr2.length;\n}\nfunction isElementSame(arr1, arr2, field) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n const allElements = field ? [...arr1.map((item) => item[field]), ...arr2.map((item) => item[field])] : [...arr1, ...arr2];\n const newArr = Array.from(new Set(allElements));\n return newArr.length === arr1.length;\n}\nfunction debounceAndMerge(func, mergeFunc, wait) {\n let oldParams;\n const debounceFunc = debounce2((...params) => {\n oldParams = void 0;\n return func(...params);\n }, wait);\n return (...args) => {\n let newParams = args;\n if (oldParams) {\n newParams = mergeFunc(oldParams, newParams);\n }\n oldParams = newParams;\n return debounceFunc(...newParams);\n };\n}\nfunction debounceAndAsyncMerge(func, mergeFunc, wait) {\n let oldParams;\n let promises = [];\n const debounceFunc = debounce2(async (...params) => {\n oldParams = void 0;\n try {\n const result = await func(...params);\n promises.forEach((promise) => {\n promise.resolve(result);\n });\n promises = [];\n return result;\n } catch (error) {\n promises.forEach((promise) => {\n promise.reject(error);\n });\n promises = [];\n }\n }, wait);\n const fun = async (...args) => {\n let newParams = args;\n if (oldParams) {\n newParams = mergeFunc(oldParams, newParams);\n }\n oldParams = newParams;\n debounceFunc(...newParams);\n return new Promise((resolve, reject) => {\n promises.push({ resolve, reject });\n });\n };\n return fun;\n}\nfunction mergeInLeft(l, r2) {\n Object.keys(r2).forEach((key) => {\n if (isNotNil(r2[key])) {\n l[key] = r2[key];\n }\n });\n}\nfunction mergeDefaultInLeft(l, r2) {\n Object.keys(r2).forEach((key) => {\n if (isNotNil(r2[key]) && isNil(l[key])) {\n l[key] = r2[key];\n }\n });\n}\nfunction compareArr(arr1, arr2, keyField) {\n const all = /* @__PURE__ */ new Set([...arr1, ...arr2]);\n const more = [];\n const less = [];\n const same = [];\n if (keyField) {\n const arr1Keys = arr1.map((item) => item[keyField]);\n const arr2Keys = arr2.map((item) => item[keyField]);\n all.forEach((item) => {\n if (!arr1Keys.includes(item[keyField])) {\n less.push(item);\n return;\n }\n if (!arr2Keys.includes(item[keyField])) {\n more.push(item);\n return;\n }\n same.push(item);\n });\n } else {\n all.forEach((item) => {\n if (!arr1.includes(item)) {\n less.push(item);\n return;\n }\n if (!arr2.includes(item)) {\n more.push(item);\n return;\n }\n same.push(item);\n });\n }\n return {\n more,\n less,\n same\n };\n}\nfunction toNumberOrNil(value) {\n if (isNil(value)) {\n return void 0;\n }\n const num = Number(value);\n if (Number.isNaN(num)) {\n return void 0;\n }\n return num;\n}\nvar SvgPattern = /<svg\\b[^>]*>[\\s\\S]*?<\\/svg>/;\nfunction isSvg(str) {\n return SvgPattern.test(str);\n}\nfunction plus(a, b) {\n let c;\n let d;\n try {\n c = a.toString().split(\".\")[1].length;\n } catch (f) {\n c = 0;\n }\n try {\n d = b.toString().split(\".\")[1].length;\n } catch (f) {\n d = 0;\n }\n const e = 10 ** Math.max(c, d);\n return (a * e + b * e) / e;\n}\n\n// src/utils/interceptor/interceptor.ts\nvar Interceptor = class {\n /**\n * 请求之前处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:41\n * @protected\n * @param {InternalAxiosRequestConfig} config\n * @returns {*} {Promise<InternalAxiosRequestConfig>}\n */\n async onBeforeRequest(config) {\n return config;\n }\n /**\n * 请求失败之后处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:40\n * @protected\n * @param {*} error\n */\n onRequestError(error) {\n return Promise.reject(error);\n }\n /**\n * 响应成功之后处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:38\n * @protected\n * @param {AxiosResponse} config\n * @returns {*} {Promise<AxiosRequestConfig>}\n */\n async onResponseSuccess(config) {\n return config;\n }\n /**\n * 响应失败之后处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:37\n * @protected\n * @param {*} _error\n */\n onResponseError(error) {\n return Promise.reject(error);\n }\n /**\n * 使用拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:28\n * @param {AxiosInstance} instance\n */\n use(instance) {\n this.requestTag = instance.interceptors.request.use(\n this.onBeforeRequest,\n this.onRequestError\n );\n this.responseTag = instance.interceptors.response.use(\n this.onResponseSuccess,\n this.onResponseError\n );\n }\n /**\n * 移出拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:27\n * @param {AxiosInstance} instance\n */\n eject(instance) {\n if (this.requestTag) {\n instance.interceptors.request.eject(this.requestTag);\n }\n if (this.responseTag) {\n instance.interceptors.response.eject(this.responseTag);\n }\n }\n};\n\n// src/utils/interceptor/core-interceptor.ts\nvar CoreInterceptor = class extends Interceptor {\n async onBeforeRequest(config) {\n config = await super.onBeforeRequest(config);\n const { headers } = config;\n headers.set(\"Authorization\", \"Bearer \".concat(getToken()));\n let systemId = ibiz.env.dcSystem;\n const { orgData } = ibiz;\n if (orgData) {\n if (orgData.systemid) {\n systemId = orgData.systemid;\n }\n if (orgData.orgid) {\n headers.set(\"srforgid\", orgData.orgid);\n }\n }\n headers.set(\"srfsystemid\", systemId);\n return config;\n }\n};\n\n// src/utils/message-center/base/message-base.ts\nimport { QXEvent } from \"qx-util\";\nvar MessageBase = class {\n constructor(parent) {\n this.parent = parent;\n /**\n * 事件\n *\n * @author chitanda\n * @date 2023-09-05 16:09:58\n * @protected\n * @type {QXEvent<MessageCenterEvent>}\n */\n this.evt = new QXEvent(1e3);\n }\n /**\n * 推送标准结构消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:40\n * @param {IPortalMessage} msg\n */\n next(msg) {\n this.evt.emit(\"all\", msg);\n if (this.parent) {\n this.nextParent(msg);\n }\n }\n /**\n * 私有方法,专门向父级推送消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:08\n * @protected\n * @param {IPortalMessage} msg\n */\n nextParent(msg) {\n if (this.parent) {\n this.parent.evt.emit(\"all\", msg);\n this.parent.nextParent(msg);\n }\n }\n /**\n * 订阅消息\n *\n * @author chitanda\n * @date 2023-09-05 15:09:21\n * @param {(msg: IPortalMessage) => void} evt\n */\n on(cb) {\n this.evt.on(\"all\", cb);\n }\n /**\n * 取消订阅\n *\n * @author chitanda\n * @date 2023-09-05 15:09:50\n * @param {(msg: IPortalMessage) => void} cb\n */\n off(cb) {\n this.evt.off(\"all\", cb);\n }\n};\n\n// src/utils/message-center/base/message-all.ts\nvar MessageAll = class extends MessageBase {\n};\n\n// src/utils/message-center/command/message-command.ts\nimport { createUUID as createUUID2 } from \"qx-util\";\n\n// src/utils/message-center/command/command-base/command-base.ts\nimport { createUUID } from \"qx-util\";\nvar CommandBase = class extends MessageBase {\n /**\n * 发送指令消息\n * @param data 更新的数据\n * @param subtype 数据更新 | 数据删除 | 数据创建\n */\n sendCommand(data, subtype) {\n const msg = {\n messageid: createUUID(),\n messagename: \"command\",\n type: \"COMMAND\",\n subtype,\n data\n };\n this.next(msg);\n }\n};\n\n// src/utils/message-center/command/create/command-create.ts\nvar CommandCreate = class extends CommandBase {\n /**\n * 发送新建的数据\n *\n * @author chitanda\n * @date 2023-09-05 17:09:13\n * @param {IAppDataEntity} data\n */\n send(data) {\n this.sendCommand(data, \"OBJECTCREATED\");\n }\n};\n\n// src/utils/message-center/command/update/command-update.ts\nvar CommandUpdate = class extends CommandBase {\n /**\n * 发送更新的数据\n *\n * @author chitanda\n * @date 2023-09-05 17:09:37\n * @param {IAppDataEntity} data\n */\n send(data) {\n this.sendCommand(data, \"OBJECTUPDATED\");\n }\n};\n\n// src/utils/message-center/command/remove/command-remove.ts\nvar CommandRemove = class extends CommandBase {\n /**\n * 发送删除的数据\n *\n * @author chitanda\n * @date 2023-09-05 17:09:29\n * @param {IAppDataEntity} data\n */\n send(data) {\n this.sendCommand(data, \"OBJECTREMOVED\");\n }\n};\n\n// src/utils/message-center/command/change/command-change.ts\nvar CommandChange = class extends CommandBase {\n};\n\n// src/utils/message-center/command/async-action/command-async-action.ts\nvar CommandAsyncAction = class extends CommandBase {\n /**\n * 发送 异步作业 指令消息\n *\n * @author chitanda\n * @date 2023-10-23 17:10:46\n * @param {IPortalAsyncAction} data\n */\n send(data) {\n this.sendCommand(data, \"ASYNCACTION\");\n }\n};\n\n// src/utils/message-center/command/message-command.ts\nvar MessageCommand = class extends MessageBase {\n constructor() {\n super(...arguments);\n /**\n * 数据变更指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:15\n * @type {CommandChange}\n */\n this.change = new CommandChange();\n /**\n * 新建消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:55\n * @type {CommandCreate}\n */\n this.create = new CommandCreate(this);\n /**\n * 更新消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:01\n * @type {CommandUpdate}\n */\n this.update = new CommandUpdate(this);\n /**\n * 删除消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:05\n * @type {CommandRemove}\n */\n this.remove = new CommandRemove(this);\n /**\n * 异步作业指令消息\n *\n * @author chitanda\n * @date 2023-10-23 17:10:56\n * @type {CommandAsyncAction}\n */\n this.asyncAction = new CommandAsyncAction(this);\n }\n /**\n * 推送指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:50\n * @param {IPortalMessage} msg\n */\n next(msg) {\n switch (msg.subtype) {\n case \"OBJECTCREATED\":\n this.create.next(msg);\n this.change.next(msg);\n break;\n case \"OBJECTUPDATED\":\n this.update.next(msg);\n this.change.next(msg);\n break;\n case \"OBJECTREMOVED\":\n this.remove.next(msg);\n this.change.next(msg);\n break;\n default:\n super.next(msg);\n }\n }\n nextParent(msg) {\n switch (msg.subtype) {\n case \"OBJECTCREATED\":\n this.change.next(msg);\n break;\n case \"OBJECTUPDATED\":\n this.change.next(msg);\n break;\n case \"OBJECTREMOVED\":\n this.change.next(msg);\n break;\n default:\n }\n super.nextParent(msg);\n }\n /**\n * 发送指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:35\n * @param {IData} data\n * @param {IPortalMessage['subtype']} subtype\n */\n send(data, subtype) {\n const msg = {\n messageid: createUUID2(),\n messagename: \"command\",\n type: \"COMMAND\",\n subtype,\n data\n };\n this.next(msg);\n }\n};\n\n// src/utils/message-center/console/message-console.ts\nimport { createUUID as createUUID3 } from \"qx-util\";\nvar MessageConsole = class extends MessageBase {\n /**\n * 发送日志消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:25\n * @param {(IData | string)} data\n */\n send(data) {\n const msg = {\n messageid: createUUID3(),\n messagename: \"console\",\n type: \"CONSOLE\",\n data\n };\n this.next(msg);\n }\n};\n\n// src/utils/message-center/message-center.ts\nvar MessageCenter = class {\n constructor() {\n /**\n * 所有消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:12\n * @type {MessageAll}\n */\n this.all = new MessageAll();\n /**\n * 指令消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:28\n * @type {MessageCommand}\n */\n this.command = new MessageCommand(this.all);\n /**\n * 日志消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:48\n * @type {MessageConsole}\n */\n this.console = new MessageConsole(this.all);\n }\n /**\n * 发送消息\n *\n * @author chitanda\n * @date 2023-09-05 15:09:49\n * @param {IPortalMessage} msg\n */\n next(msg) {\n if (msg.type === \"COMMAND\") {\n this.command.next(msg);\n } else if (msg.type === \"CONSOLE\") {\n this.console.next(msg);\n } else {\n this.all.next(msg);\n }\n }\n /**\n * 订阅消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:32\n * @param {(msg: IPortalMessage) => void} callback\n */\n on(callback) {\n this.all.on(callback);\n }\n /**\n * 取消订阅\n *\n * @author chitanda\n * @date 2023-09-05 17:09:38\n * @param {(msg: IPortalMessage) => void} callback\n */\n off(callback) {\n this.all.off(callback);\n }\n};\n\n// src/utils/namespace/namespace.ts\nvar defaultNamespace = \"ibiz\";\nvar statePrefix = \"is-\";\nfunction _bem(namespace, block, blockSuffix, element, modifier) {\n let cls = \"\".concat(namespace, \"-\").concat(block);\n if (blockSuffix) {\n cls += \"-\".concat(blockSuffix);\n }\n if (element) {\n cls += \"__\".concat(element);\n }\n if (modifier) {\n cls += \"--\".concat(modifier);\n }\n return cls;\n}\nvar Namespace = class {\n /**\n * Creates an instance of Namespace.\n *\n * @author chitanda\n * @date 2022-09-06 12:09:12\n * @param {string} block 当前命名空间的根模块,例如组件的名称\n * @param {string} [namespace] 指定命名空间,未指定使用默认值 ibiz\n */\n constructor(block, namespace) {\n this.block = block;\n this.namespace = namespace || defaultNamespace;\n }\n /**\n * namespace-block\n * namespace-block-blockSuffix\n *\n * @author chitanda\n * @date 2022-09-06 12:09:08\n * @param {string} [blockSuffix='']\n * @return {*} {string}\n */\n b(blockSuffix = \"\") {\n return _bem(this.namespace, this.block, blockSuffix, \"\", \"\");\n }\n /**\n * namespace-block__element\n *\n * @author chitanda\n * @date 2022-09-06 12:09:48\n * @param {string} [element]\n * @return {*} {string}\n */\n e(element) {\n return element ? _bem(this.namespace, this.block, \"\", element, \"\") : \"\";\n }\n /**\n * namespace-block--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:37\n * @param {string} [modifier]\n * @return {*} {string}\n */\n m(modifier) {\n return modifier ? _bem(this.namespace, this.block, \"\", \"\", modifier) : \"\";\n }\n /**\n * namespace-block-blockSuffix__element\n *\n * @author chitanda\n * @date 2022-09-06 12:09:52\n * @param {string} [blockSuffix]\n * @param {string} [element]\n * @return {*} {string}\n */\n be(blockSuffix, element) {\n return blockSuffix && element ? _bem(this.namespace, this.block, blockSuffix, element, \"\") : \"\";\n }\n /**\n * namespace-block__element--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:19\n * @param {string} [element]\n * @param {string} [modifier]\n * @return {*} {string}\n */\n em(element, modifier) {\n return element && modifier ? _bem(this.namespace, this.block, \"\", element, modifier) : \"\";\n }\n /**\n * namespace-block-blockSuffix--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:59\n * @param {string} [blockSuffix]\n * @param {string} [modifier]\n * @return {*} {string}\n */\n bm(blockSuffix, modifier) {\n return blockSuffix && modifier ? _bem(this.namespace, this.block, blockSuffix, \"\", modifier) : \"\";\n }\n /**\n * namespace-block-blockSuffix__element--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:37\n * @param {string} [blockSuffix]\n * @param {string} [element]\n * @param {string} [modifier]\n * @return {*} {string}\n */\n bem(blockSuffix, element, modifier) {\n return blockSuffix && element && modifier ? _bem(this.namespace, this.block, blockSuffix, element, modifier) : \"\";\n }\n /**\n * 返回状态 class\n *\n * is('loading', false) => '';\n * is('loading', true) => 'is-loading';\n *\n * @author chitanda\n * @date 2022-09-06 12:09:57\n * @param {string} name\n * @param {boolean} [state]\n * @return {*} {string}\n */\n is(name, state) {\n return name && state ? \"\".concat(statePrefix).concat(name) : \"\";\n }\n /**\n * 生成使用到的 css 变量 style 对象\n *\n * @author chitanda\n * @date 2022-09-06 15:09:41\n * @param {Record<string, string>} object\n * @return {*} {Record<string, string>}\n */\n cssVar(object) {\n const styles = {};\n for (const key in object) {\n if (object[key]) {\n styles[this.cssVarName(key)] = object[key];\n }\n }\n return styles;\n }\n /**\n * 生成使用到的 css block 变量 style 对象\n *\n * @author chitanda\n * @date 2022-09-06 15:09:03\n * @param {Record<string, string>} object\n * @return {*} {Record<string, string>}\n */\n cssVarBlock(object) {\n const styles = {};\n for (const key in object) {\n if (object[key]) {\n styles[this.cssVarBlockName(key)] = object[key];\n }\n }\n return styles;\n }\n /**\n * 生成 css var 变量名称\n *\n * @author chitanda\n * @date 2022-09-06 15:09:21\n * @param {string} name\n * @return {*} {string}\n */\n cssVarName(name) {\n return \"--\".concat(this.namespace, \"-\").concat(name);\n }\n /**\n * 生成块 css var 变量名称\n *\n * @author chitanda\n * @date 2022-09-06 15:09:35\n * @param {string} name\n * @return {*} {string}\n */\n cssVarBlockName(name) {\n return \"--\".concat(this.namespace, \"-\").concat(this.block, \"-\").concat(name);\n }\n};\n\n// src/utils/net/http-response.ts\nimport {\n AxiosHeaders\n} from \"axios\";\nvar HttpResponse = class {\n /**\n * Creates an instance of HttpResponse.\n *\n * @author chitanda\n * @date 2022-08-18 15:08:11\n * @param {unknown} [data] 返回的数据\n * @param {number} [status] 状态码 (默认为 200)\n * @param {string} [statusText] 状态描述 (默认为空字符)\n */\n constructor(data, status, statusText) {\n /**\n * 本地仿造响应\n *\n * @author chitanda\n * @date 2022-08-18 15:08:06\n */\n this.local = true;\n this.ok = false;\n this.headers = {};\n this.config = {\n headers: new AxiosHeaders()\n };\n this.data = data;\n this.status = status || 200;\n this.statusText = statusText || \"\";\n if (this.status >= 200 && this.status < 300) {\n this.ok = true;\n }\n }\n};\n\n// src/utils/net/net.ts\nimport axios from \"axios\";\nimport { merge } from \"lodash-es\";\nimport { stringify } from \"qs\";\nimport { notNilEmpty } from \"qx-util\";\nimport { mergeDeepRight } from \"ramda\";\nvar Net = class {\n /**\n * Creates an instance of Net.\n * @author lxm\n * @date 2022-10-27 16:10:05\n * @param {CreateAxiosDefaults} [config] 创建实例用的默认配置\n */\n constructor(config) {\n /**\n * 是否为 http || https 开头\n *\n * @author chitanda\n * @date 2022-11-07 14:11:28\n * @protected\n */\n this.urlReg = /^http[s]?:\\/\\/[^\\s]*/;\n /**\n * 请求等待队列,防止重复请求。当有完全相同请求参数的请求时,会等待上一个请求完成后把结果返回给当前请求,不会重复请求\n * key: 由请求的 config 生成的字符串,用于唯一标识请求\n * value: 当前正在请求的 Promise\n *\n * @author chitanda\n * @date 2023-06-07 14:06:19\n * @protected\n */\n this.waitRequest = /* @__PURE__ */ new Map();\n /**\n * 注册的拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:18\n * @type {Map<string, Interceptor>}\n */\n this.interceptors = /* @__PURE__ */ new Map();\n this.instance = axios.create(config);\n this.addInterceptor(\"Default\", new CoreInterceptor());\n }\n get baseUrl() {\n return this.instance.defaults.baseURL || \"\".concat(ibiz.env.baseUrl, \"/\").concat(ibiz.env.appId);\n }\n /**\n * 添加拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:42\n * @param {string} name 唯一标识\n * @param {Interceptor} interceptor 拦截器\n */\n addInterceptor(name, interceptor) {\n interceptor.use(this.instance);\n this.interceptors.set(name, interceptor);\n }\n /**\n * 删除拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:27\n * @param {string} name 唯一标识\n */\n removeInterceptor(name) {\n const interceptor = this.interceptors.get(name);\n if (interceptor) {\n interceptor.eject(this.instance);\n this.interceptors.delete(name);\n }\n }\n /**\n * 预置config,绑定动态的配置\n *\n * @author lxm\n * @date 2022-10-27 16:10:48\n * @readonly\n * @protected\n * @type {AxiosRequestConfig}\n */\n get presetConfig() {\n return {\n // 请求前缀路径\n baseURL: this.baseUrl,\n headers: {\n \"Content-Type\": \"application/json;charset=UTF-8\",\n Accept: \"application/json\"\n }\n };\n }\n /**\n * 从左到右递归合并配置参数(内置第一个合并的预置参数)\n *\n * @author lxm\n * @date 2022-10-27 16:10:09\n * @protected\n * @param {...AxiosRequestConfig[]} configs\n * @returns {*}\n */\n mergeConfig(...configs) {\n const config = this.presetConfig;\n if (configs.length === 0) {\n return config;\n }\n const { url } = configs[0];\n if (url && this.urlReg.test(url)) {\n delete config.baseURL;\n }\n return merge(config, ...configs);\n }\n /**\n * Post 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:30\n * @param {string} url\n * @param {IData} data\n * @param {IParams} [params={}]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async post(url, data, params = {}, headers = {}) {\n url = this.handleAppPresetParam(url, params);\n try {\n const response = await this.request(url, {\n method: \"post\",\n data,\n headers\n });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error);\n }\n }\n /**\n * Get 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:24\n * @param {string} url\n * @param {IParams} [params={}]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @param {IParams} [option={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async get(url, params = {}, headers = {}, option = {}) {\n url = this.attachUrlParam(url, params);\n try {\n const response = await this.request(\n url,\n merge({ method: \"get\", headers }, option)\n );\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error);\n }\n }\n /**\n * Delete 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:17\n * @param {string} url\n * @param {IParams} [params]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async delete(url, params, headers = {}) {\n url = this.handleAppPresetParam(url, params);\n try {\n const response = await this.request(url, { method: \"delete\", headers });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error);\n }\n }\n /**\n * Put 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:11\n * @param {string} url\n * @param {IData} data\n * @param {IParams} [params={}]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async put(url, data, params = {}, headers = {}) {\n url = this.handleAppPresetParam(url, params);\n try {\n const response = await this.request(url, {\n method: \"put\",\n data,\n headers\n });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error);\n }\n }\n /**\n * 获取模型数据\n *\n * @author chitanda\n * @date 2022-07-14 15:07:15\n * @param {string} url\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async getModel(url, headers = {}) {\n try {\n const response = await this.instance.get(url, {\n headers\n });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error);\n }\n }\n /**\n * 基础请求方法,会合并预置配置\n *\n * @author lxm\n * @date 2022-10-27 14:10:06\n * @param {string} url\n * @param {AxiosRequestConfig} [config={}]\n * @returns {*} {Promise<IHttpResponse>}\n */\n async request(url, config = {}) {\n const cfg = this.mergeConfig({ url }, config);\n const key = JSON.stringify(cfg);\n try {\n let requestPromise = null;\n if (!this.waitRequest.has(key)) {\n requestPromise = this.instance.request(cfg);\n this.waitRequest.set(key, requestPromise);\n } else {\n requestPromise = this.waitRequest.get(key);\n }\n const response = await requestPromise;\n if (this.waitRequest.has(key)) {\n this.waitRequest.delete(key);\n }\n return this.doResponseResult(response);\n } catch (error) {\n if (this.waitRequest.has(key)) {\n this.waitRequest.delete(key);\n }\n throw new HttpError(error);\n }\n }\n /**\n * 创建标准 axios 请求\n *\n * @author chitanda\n * @date 2023-01-30 15:01:27\n * @param {AxiosRequestConfig<IData>} config\n * @return {*}\n */\n axios(config) {\n return axios(config);\n }\n /**\n * 触发 sse 请求\n *\n * @author chitanda\n * @date 2023-10-10 16:10:08\n * @param {string} url\n * @param {IParams} params\n * @param {FetchEventSourceInit} [options={}]\n * @return {*} {Promise<void>}\n */\n async sse(url, params, options = {}) {\n url = this.attachUrlParam(this.baseUrl + url, params);\n if (!options.headers) {\n options.headers = {};\n }\n const headers = options.headers;\n {\n headers.Authorization = \"Bearer \".concat(getToken());\n let systemId = ibiz.env.dcSystem;\n const { orgData } = ibiz;\n if (orgData) {\n if (orgData.systemid) {\n systemId = orgData.systemid;\n }\n if (orgData.orgid) {\n headers.srforgid = orgData.orgid;\n }\n }\n headers.srfsystemid = systemId;\n }\n const config = mergeDeepRight(\n {\n openWhenHidden: true,\n method: \"POST\"\n },\n options\n );\n await fetchEventSource(url, config);\n }\n /**\n * 统一处理请求返回\n *\n * @author chitanda\n * @date 2022-07-14 16:07:23\n * @private\n * @param {AxiosResponse} response\n * @return {*} {IHttpResponse}\n */\n doResponseResult(response) {\n const res = response;\n if (res.status >= 200 && res.status <= 299) {\n res.ok = true;\n }\n return res;\n }\n /**\n * 处理平台预定义参数\n *\n * @author chitanda\n * @date 2022-07-14 15:07:12\n * @private\n * @param {string} url\n * @param {IParams} [params]\n * @return {*} {string}\n */\n handleAppPresetParam(url, params) {\n if (params) {\n const keys = Object.keys(params);\n const tempParam = {};\n keys.forEach((item) => {\n if (item.startsWith(\"srf\") && notNilEmpty(params[item])) {\n tempParam[item] = params[item];\n }\n });\n return this.attachUrlParam(url, params);\n }\n return url;\n }\n /**\n * url 附加请求参数,并处理路径的字符转换 encode\n *\n * @author chitanda\n * @date 2022-07-14 15:07:34\n * @private\n * @param {string} url\n * @param {IParams} params\n * @return {*} {string}\n */\n attachUrlParam(url, params) {\n {\n const urlSplit = url.split(\"?\");\n urlSplit[0] = urlSplit[0].split(\"/\").map((item) => encodeURIComponent(item)).join(\"/\");\n url = urlSplit.length > 1 ? urlSplit.join(\"?\") : urlSplit[0];\n }\n const strParams = stringify(params);\n if (notNilEmpty(strParams)) {\n if (url.endsWith(\"?\")) {\n url = \"\".concat(url).concat(strParams);\n } else if (url.indexOf(\"?\") !== -1 && url.endsWith(\"&\")) {\n url = \"\".concat(url).concat(strParams);\n } else if (url.indexOf(\"?\") !== -1 && !url.endsWith(\"&\")) {\n url = \"\".concat(url, \"&\").concat(strParams);\n } else {\n url = \"\".concat(url, \"?\").concat(strParams);\n }\n }\n return url;\n }\n};\n\n// src/utils/string-util/string-util.ts\nimport { notNilEmpty as notNilEmpty2 } from \"qx-util\";\nvar StringUtil = class {\n /**\n * 填充字符串中的数据\n *\n * @author chitanda\n * @date 2021-04-23 20:04:17\n * @static\n * @param {string} str\n * @param {*} [context]\n * @param {*} [data]\n * @return {*} {string}\n */\n static fill(str, context, data) {\n if (notNilEmpty2(str)) {\n if (notNilEmpty2(context)) {\n const strArr = str.match(this.contextReg);\n strArr == null ? void 0 : strArr.forEach((_key) => {\n const key = _key.slice(10, _key.length - 1);\n str = str.replace(\"${context.\".concat(key, \"}\"), context[key] || \"\");\n });\n }\n if (notNilEmpty2(data)) {\n const strArr = str.match(this.dataReg);\n strArr == null ? void 0 : strArr.forEach((_key) => {\n const key = _key.slice(7, _key.length - 1);\n str = str.replace(\"${data.\".concat(key, \"}\"), data[key] || \"\");\n });\n }\n }\n return str;\n }\n};\n/**\n * 上下文替换正则\n *\n * @author chitanda\n * @date 2021-04-23 20:04:01\n * @static\n */\nStringUtil.contextReg = /\\$\\{context.[a-zA-Z_$][a-zA-Z0-9_$]{1,}\\}/g;\n/**\n * 数据替换正则\n *\n * @author chitanda\n * @date 2021-04-23 20:04:09\n * @static\n */\nStringUtil.dataReg = /\\$\\{data.[a-zA-Z_$][a-zA-Z0-9_$]{1,}\\}/g;\n\n// src/utils/url-helper/url-helper.ts\nvar UrlHelper = class {\n /**\n * 路由路径前面的基础路径\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n * 返回:http://172.16.103.120:30061/portalwebapp/#\n *\n * @author lxm\n * @date 2022-10-11 20:10:29\n * @returns {*}\n */\n static get routeBase() {\n const hashIndex = window.location.href.lastIndexOf(\"#/\");\n return window.location.href.slice(0, hashIndex + 1);\n }\n /**\n * 应用的的基础路径\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n * 返回:http://172.16.103.120:30061/portalwebapp\n *\n * @author lxm\n * @date 2022-10-11 20:10:29\n * @returns {*}\n */\n static get appBase() {\n const { origin, pathname } = window.location;\n return \"\".concat(origin).concat(pathname).replace(/\\/$/, \"\");\n }\n /**\n * #开始到末尾,即路由地址\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n * 返回:/index/appportalview?params=123\n *\n * @author lxm\n * @date 2022-10-11 16:10:40\n * @returns {*}\n */\n static get routePath() {\n return window.location.hash.replace(\"#\", \"\");\n }\n /**\n * 当前地址的全路径,包含域名和参数\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n *\n * @author lxm\n * @date 2022-10-11 21:10:39\n * @readonly\n * @static\n */\n static get fullPath() {\n return window.location.href;\n }\n};\n\n// src/utils/event/event.ts\nfunction eventPath(event) {\n const path = event.composedPath && event.composedPath() || event.path;\n if (path != null)\n return path;\n function getParents(node, memo = []) {\n const parentNode = node.parentNode;\n return parentNode ? getParents(parentNode, memo.concat([parentNode])) : memo;\n }\n return [event.target].concat(getParents(event.target));\n}\nfunction listenJSEvent(target, eventName, listener, options = {}) {\n target.addEventListener(eventName, listener, options);\n let cleanup = () => {\n target.removeEventListener(eventName, listener, options);\n cleanup = NOOP;\n };\n return () => {\n cleanup();\n };\n}\nfunction isEventInside(event, el) {\n return el && (event.target === el || eventPath(event).includes(el));\n}\n\n// src/utils/click-outside/click-outside.ts\nvar defaultWindow = typeof window !== \"undefined\" ? window : void 0;\nfunction onClickOutside(target, handler, options = {}) {\n const { window: window2 = defaultWindow, ignore = [], capture = true } = options;\n if (!target)\n throw new RuntimeError(\"target\\u5143\\u7D20\\u4E0D\\u5B58\\u5728\");\n if (!window2)\n throw new RuntimeError(\"\\u627E\\u4E0D\\u5230window\");\n let shouldListen = true;\n const isOutside = (event) => {\n return ![target, ...ignore].some((el) => {\n return isEventInside(event, el);\n });\n };\n let isPaused = false;\n const pause = () => {\n isPaused = true;\n };\n const proceed = () => {\n isPaused = false;\n };\n let fallback;\n const listener = (event) => {\n if (isPaused)\n return;\n window2.clearTimeout(fallback);\n if (!(shouldListen && isOutside(event)))\n return;\n handler(event);\n };\n const cleanups = [\n listenJSEvent(window2, \"click\", listener, { passive: true, capture }),\n listenJSEvent(\n window2,\n \"pointerdown\",\n (e) => {\n if (isPaused)\n return;\n shouldListen = isOutside(e);\n },\n { passive: true }\n ),\n listenJSEvent(\n window2,\n \"pointerup\",\n (e) => {\n if (isPaused)\n return;\n if (e.button === 0) {\n const path = eventPath(e);\n e.composedPath = () => path;\n fallback = window2.setTimeout(() => listener(e), 50);\n }\n },\n { passive: true }\n )\n ].filter(Boolean);\n const stop = () => cleanups.forEach((fn) => fn());\n return { stop, pause, proceed };\n}\n\n// src/utils/color/color.ts\nvar r = Math.round;\nfunction toRGBA(color) {\n const l = color.length;\n const rgba = [];\n if (color.slice(0, 3).toLowerCase() === \"rgb\") {\n const d = color.match(/([\\d|.%]{1,3})/g);\n rgba[0] = parseInt(d[0], 10);\n rgba[1] = parseInt(d[1], 10);\n rgba[2] = parseInt(d[2], 10);\n rgba[3] = d[3] ? d[3].indexOf(\"%\") !== -1 ? parseInt(d[3], 10) / 100 : parseFloat(d[3]) : 1;\n } else {\n let d;\n if (l < 6)\n d = parseInt(\n String(color[1]) + color[1] + color[2] + color[2] + color[3] + color[3] + (l > 4 ? String(color[4]) + color[4] : \"\"),\n 16\n );\n else\n d = parseInt(color.slice(1), 16);\n rgba[0] = d >> 16 & 255;\n rgba[1] = d >> 8 & 255;\n rgba[2] = d & 255;\n rgba[3] = l === 9 || l === 5 ? r((d >> 24 & 255) / 255 * 1e4) / 1e4 : 1;\n }\n return rgba;\n}\nfunction colorBlend(color1, color2, p = 0.5, format = \"hex\") {\n color1 = color1.trim();\n color2 = color2.trim();\n const c1 = toRGBA(color1);\n const c2 = toRGBA(color2);\n const result = [\n r((1 - p) * c1[0] + p * c2[0]),\n r((1 - p) * c1[1] + p * c2[1]),\n r((1 - p) * c1[2] + p * c2[2]),\n (1 - p) * c1[3] + p * c2[3]\n ];\n if (format === \"hex\") {\n const hex = [\n result[0].toString(16),\n result[1].toString(16),\n result[2].toString(16),\n result[3] === 0 ? \"00\" : r(result[3] * 255).toString(16)\n ];\n return \"#\".concat(hex[0]).concat(hex[1]).concat(hex[2]).concat(hex[3]);\n }\n return \"rgb(\".concat(result[0], \" \").concat(result[1], \" \").concat(result[2], \" / \").concat(result[3], \")\");\n}\n\n// src/utils/download-file/download-file.ts\nfunction calcMimeByFileName(fileName) {\n const ext = fileName.split(\".\").pop();\n let mime = \"\";\n switch (ext) {\n case \".wps\":\n mime = \"application/kswps\";\n break;\n case \".doc\":\n mime = \"application/msword\";\n break;\n case \".docx\":\n mime = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n break;\n case \".txt\":\n mime = \"text/plain\";\n break;\n case \".zip\":\n mime = \"application/zip\";\n break;\n case \".png\":\n mime = \"image/png\";\n break;\n case \".gif\":\n mime = \"image/gif\";\n break;\n case \".jpeg\":\n mime = \"image/jpeg\";\n break;\n case \".jpg\":\n mime = \"image/jpeg\";\n break;\n case \".rtf\":\n mime = \"application/rtf\";\n break;\n case \".avi\":\n mime = \"video/x-msvideo\";\n break;\n case \".gz\":\n mime = \"application/x-gzip\";\n break;\n case \".tar\":\n mime = \"application/x-tar\";\n break;\n case \".xlsx\":\n mime = \"application/vnd.ms-excel\";\n break;\n default:\n mime = \"\";\n }\n return mime;\n}\nfunction isImage(fileName) {\n const ext = fileName.split(\".\").pop();\n if (!ext) {\n return false;\n }\n const imageTypes = [\".jpeg\", \"jpg\", \"gif\", \"png\", \"bmp\", \"svg\"];\n return imageTypes.includes(ext);\n}\nfunction downloadFileFromBlob(file, fileName) {\n const filetype = calcMimeByFileName(fileName);\n const blob = new Blob([file], { type: filetype });\n const href = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = href;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(href);\n}\n\n// src/utils/upload/select-file.ts\nimport { merge as merge2 } from \"lodash-es\";\nfunction fileListToArr(fileList) {\n const files = [];\n for (let i = 0; i < fileList.length; i++) {\n files.push(fileList[i]);\n }\n return files;\n}\nfunction selectFile(_opts) {\n const opts = merge2(\n {\n multiple: true,\n accept: \"\"\n },\n _opts\n );\n const input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"file\");\n input.setAttribute(\"multiple\", \"\".concat(opts.multiple));\n input.setAttribute(\"accept\", opts.accept);\n input.onchange = (e) => {\n const inputEl = e.target;\n const files = inputEl.files ? fileListToArr(inputEl.files) : [];\n if (files.length === 0) {\n return;\n }\n opts.onSelected(files);\n inputEl.value = \"\";\n };\n document.body.appendChild(input);\n input.click();\n document.body.removeChild(input);\n}\n\n// src/utils/upload/upload-file.ts\nimport { cloneDeep, isFunction, merge as merge3, round, uniqueId } from \"lodash-es\";\nfunction uploadFile(_opts) {\n const opts = merge3(\n {\n multiple: true,\n accept: \"\",\n separate: true,\n beforeUpload: (_fileData, _files) => true,\n finish: (_resultFiles) => {\n },\n success: (_resultFiles, _res) => {\n },\n error: (_resultFiles, _error) => {\n },\n progress: (_files) => {\n }\n },\n _opts\n );\n const onUploadProgress = (event, files) => {\n files.forEach((file) => {\n file.percentage = round(event.progress * 100);\n });\n opts.progress(cloneDeep(files));\n };\n const uploadRequest = async (files, _onProgress) => {\n if (opts.request && isFunction(opts.request)) {\n return opts.request(files);\n }\n const data = new FormData();\n files.forEach((file) => {\n data.append(\"file\", file);\n });\n throw new RuntimeError(\"\\u591A\\u5E94\\u7528\\u6A21\\u5F0F\\u7B49\\u5F85\\u91CD\\u65B0\\u5B9E\\u73B0\\u8BF7\\u6C42\");\n };\n const executeSingleUpload = async (files) => {\n const resultFiles = files.map((file) => {\n return {\n status: \"uploading\",\n name: file.name,\n uid: uniqueId(),\n percentage: 0\n };\n });\n const pass = opts.beforeUpload(files, resultFiles);\n if (!pass) {\n resultFiles.forEach((file) => {\n file.status = \"cancel\";\n });\n ibiz.log.debug(\"\\u53D6\\u6D88\\u4E0A\\u4F20\", resultFiles);\n return resultFiles;\n }\n try {\n const res = await uploadRequest(files, (event) => {\n onUploadProgress(event, resultFiles);\n });\n resultFiles.forEach((file) => {\n file.status = \"finished\";\n });\n opts.success(resultFiles, res);\n resultFiles.forEach((file) => {\n file.response = res;\n });\n } catch (error) {\n resultFiles.forEach((file) => {\n file.status = \"fail\";\n });\n opts.error(resultFiles, error);\n resultFiles.forEach((file) => {\n file.error = error;\n });\n ibiz.log.error(error);\n ibiz.log.error(\"\".concat(files.map((file) => file.name).join(\",\"), \"\\u4E0A\\u4F20\\u5931\\u8D25\"));\n }\n return resultFiles;\n };\n const uploadFiles = async (files) => {\n const uploadSequence = opts.separate ? files.map((file) => [file]) : [files];\n const res = await Promise.allSettled(\n uploadSequence.map(async (sequence) => {\n return executeSingleUpload(sequence);\n })\n );\n const resultFiles = [];\n res.forEach((result) => {\n if (result.status === \"fulfilled\") {\n resultFiles.push(...result.value);\n }\n });\n opts.finish(resultFiles);\n };\n const select = () => {\n selectFile({\n accept: opts.accept,\n multiple: opts.multiple,\n onSelected: (files) => {\n uploadFiles(files);\n }\n });\n };\n select();\n}\n\n// src/utils/sync/await-timeout.ts\nasync function awaitTimeout(wait, fun, params) {\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, wait);\n });\n if (fun) {\n return fun(...params || []);\n }\n}\n\n// src/utils/sync/count-latch.ts\nvar CountLatch = class {\n constructor() {\n this.promise = null;\n this.resolve = null;\n /**\n * 计数,当前等待的异步逻辑个数\n *\n * @author lxm\n * @date 2022-11-24 19:11:59\n * @type {number}\n */\n this.count = 0;\n }\n /**\n * 开启promise\n *\n * @author lxm\n * @date 2022-11-24 19:11:32\n * @private\n */\n startPromise() {\n this.promise = new Promise((resolve) => {\n this.resolve = resolve;\n });\n }\n /**\n * 结束promise\n *\n * @author lxm\n * @date 2022-11-24 19:11:44\n * @private\n */\n endPromise() {\n if (this.resolve) {\n this.resolve();\n this.resolve = null;\n this.promise = null;\n }\n }\n /**\n * 上锁,计数加一\n * 第一次计数,开启异步\n *\n * @author lxm\n * @date 2022-11-24 19:11:27\n */\n lock() {\n this.count += 1;\n if (!this.promise) {\n this.startPromise();\n }\n }\n /**\n * 解锁,计数减一\n * 归零时结束异步\n *\n * @author lxm\n * @date 2022-11-24 19:11:47\n */\n unlock() {\n if (this.count < 1) {\n throw new RuntimeError(\"lock\\u548Cunlock\\u6B21\\u6570\\u4E0D\\u5339\\u914D\\uFF01\");\n }\n this.count -= 1;\n if (this.count === 0) {\n this.endPromise();\n }\n }\n /**\n * 等待,计数归零异步结束\n *\n * @author lxm\n * @date 2022-11-24 19:11:20\n */\n async await() {\n if (this.promise) {\n await this.promise;\n }\n }\n};\n\n// src/utils/style/remote-style.ts\nasync function setRemoteStyle(url) {\n try {\n const res = await ibiz.net.get(url);\n const styleDom = document.createElement(\"style\");\n styleDom.setAttribute(\"title\", \"app-style-css\");\n styleDom.innerText = res.data;\n document.head.appendChild(styleDom);\n } catch (error) {\n ibiz.log.debug(\"\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u6837\\u5F0F\\u8868\\u5931\\u8D25\", url);\n }\n}\n\n// src/utils/recursive/find-recursive-child.ts\nimport { mergeDeepRight as mergeDeepRight2 } from \"ramda\";\nvar IterateOpts = {\n /** 子集合属性数组 */\n childrenFields: [\"children\"]\n};\nvar BreakError = new Error(\"\\u4E2D\\u65AD\\u64CD\\u4F5C\");\nfunction getChildField(parent, fields) {\n var _a;\n for (const field of fields) {\n if ((_a = parent[field]) == null ? void 0 : _a.length) {\n return parent[field];\n }\n }\n}\nfunction _recursiveIterate(parent, callback, opts) {\n const { childrenFields } = mergeDeepRight2(IterateOpts, opts || {});\n const children = getChildField(parent, childrenFields);\n if (children == null ? void 0 : children.length) {\n for (const child of children) {\n const isBreak = callback(child);\n if (isBreak) {\n throw BreakError;\n }\n recursiveIterate(child, callback, opts);\n }\n }\n}\nfunction recursiveIterate(parent, callback, opts) {\n try {\n _recursiveIterate(parent, callback, opts);\n } catch (error) {\n if (error !== BreakError) {\n throw error;\n }\n }\n}\nvar CompareOpts = {\n ...IterateOpts,\n /** 比较的属性 */\n compareField: \"name\"\n};\nfunction findRecursiveChild(parent, key, opts) {\n const { compareField, compareCallback } = mergeDeepRight2(\n CompareOpts,\n opts || {}\n );\n const _compareCallback = compareCallback || ((child) => {\n return child[compareField] === key;\n });\n let find;\n recursiveIterate(\n parent,\n (item) => {\n if (_compareCallback(item, key, compareField)) {\n find = item;\n return true;\n }\n },\n opts\n );\n return find;\n}\n\n// src/utils/data-type/data-types.ts\nvar DataTypes = class {\n /**\n * 是否是数值类型\n * @author lxm\n * @date 2023-08-25 04:53:30\n * @static\n * @param {number} dataType 数据类型(数值)\n * @return {*} {boolean}\n */\n static isNumber(dataType) {\n const numberTypes = [\n \"BIGINT\",\n \"BINARY\",\n \"DECIMAL\",\n \"FLOAT\",\n \"INT\",\n \"MONEY\",\n \"NUMERIC\",\n \"REAL\",\n \"SMALLINT\",\n \"SMALLMONEY\",\n \"TINYINT\",\n \"VARBINARY\"\n ];\n return numberTypes.includes(this.toString(dataType));\n }\n /**\n * 是否是日期类型数据\n *\n * @static\n * @param {number} dataType\n * @return {*}\n * @memberof DataTypes\n */\n static isDate(dataType) {\n const dateTypes = [\"DATETIME\", \"SMALLDATETIME\", \"DATE\", \"TIME\"];\n return dateTypes.includes(this.toString(dataType));\n }\n /**\n * 获取字符串数据类型\n * @author lxm\n * @date 2023-08-25 04:53:58\n * @static\n * @param {number} dataType 数据类型(数值)\n * @return {*} {string}\n */\n static toString(dataType) {\n return this.typeMap[dataType];\n }\n};\n/**\n * 数字类型映射字符串类型\n * @author lxm\n * @date 2023-08-25 04:49:52\n * @static\n * @type {{ [p: number]: string }}\n */\nDataTypes.typeMap = {\n 0: \"UNKNOWN\",\n 1: \"BIGINT\",\n 2: \"BINARY\",\n 3: \"BIT\",\n 4: \"CHAR\",\n 5: \"DATETIME\",\n 6: \"DECIMAL\",\n 7: \"FLOAT\",\n 8: \"IMAGE\",\n 9: \"INT\",\n 10: \"MONEY\",\n 11: \"NCHAR\",\n 12: \"NTEXT\",\n 13: \"NVARCHAR\",\n 14: \"NUMERIC\",\n 15: \"REAL\",\n 16: \"SMALLDATETIME\",\n 17: \"SMALLINT\",\n 18: \"SMALLMONEY\",\n 19: \"SQL_VARIANT\",\n 20: \"SYSNAME\",\n 21: \"TEXT\",\n 22: \"TIMESTAMP\",\n 23: \"TINYINT\",\n 24: \"VARBINARY\",\n 25: \"VARCHAR\",\n 26: \"UNIQUEIDENTIFIER\",\n 27: \"DATE\",\n // 纯日期型\n 28: \"TIME\",\n // 纯时间\n 29: \"BIGDECIMAL\"\n // 大数值\n};\n\n// src/utils/clone/clone.ts\nimport { cloneDeepWith, cloneWith, isFunction as isFunction2, isObject } from \"lodash-es\";\nimport { mergeDeepRight as mergeDeepRight3 } from \"ramda\";\nfunction customizeFn(value) {\n if (isObject(value) && isFunction2(value.clone)) {\n return value.clone();\n }\n}\nvar DefaultCloneOpts = {\n deep: true\n};\nfunction clone2(value, opts) {\n const options = mergeDeepRight3(DefaultCloneOpts, opts || {});\n if (options.deep) {\n return cloneDeepWith(value, customizeFn);\n }\n return cloneWith(value, customizeFn);\n}\n\n// src/utils/bit-mask/bit-mask.ts\nfunction validate(permission) {\n return !!permission && !(permission & permission - 1);\n}\nfunction validateAndThrow(permission) {\n const isPowerOf2 = validate(permission);\n if (!isPowerOf2) {\n throw new RuntimeError(\"\".concat(permission, \"\\u4E0D\\u662F2\\u7684\\u5E42\"));\n }\n}\nfunction setPermission(allPermissions = 0, permission) {\n validateAndThrow(permission);\n return allPermissions | permission;\n}\nfunction removePermission(allPermissions = 0, permission) {\n validateAndThrow(permission);\n return allPermissions & ~permission;\n}\nfunction checkPermission(allPermissions = 0, permission) {\n validateAndThrow(permission);\n return (allPermissions & permission) !== 0;\n}\nvar BitMask = {\n validate,\n setPermission,\n removePermission,\n checkPermission\n};\n\n// src/utils/logger/logger.ts\nvar Logger = __toESM(require_loglevel(), 1);\nvar prefix = __toESM(require_loglevel_plugin_prefix(), 1);\nvar logger = Logger.noConflict();\nprefix.reg(logger);\nprefix.apply(logger);\n\n// src/ibizsys.ts\nvar IBizSys = class {\n constructor() {\n /**\n * 环境变量\n *\n * @author chitanda\n * @date 2022-07-19 18:07:04\n */\n this.env = Environment;\n /**\n * 日志输出工具类\n *\n * @author chitanda\n * @date 2023-07-10 18:07:05\n * @type {Logger}\n */\n this.log = logger;\n /**\n * 网络请求工具类(发送默认请求)\n *\n * @author chitanda\n * @date 2022-07-19 17:07:56\n * @type {Net}\n */\n this.net = new Net();\n /**\n * 指令集\n *\n * @author chitanda\n * @date 2022-07-20 10:07:33\n * @type {AuthService}\n */\n this.commands = new CommandController();\n /**\n * 界面消息中心\n *\n * @author chitanda\n * @date 2023-09-05 17:09:38\n * @type {MessageCenter}\n */\n this.mc = new MessageCenter();\n }\n};\n\n// src/install.ts\nfunction install() {\n if (window.ibiz) {\n throw new Error(\"ibiz \\u5DF2\\u7ECF\\u5B58\\u5728, \\u65E0\\u9700\\u91CD\\u590D\\u5B89\\u88C5\");\n }\n window.ibiz = new IBizSys();\n}\nexport {\n BitMask,\n CommandController,\n CommandsRegistry,\n CoreConst,\n CoreInterceptor,\n CountLatch,\n DataTypes,\n Environment,\n EventStreamContentType,\n HttpError,\n HttpResponse,\n HttpStatusMessageConst,\n IBizContext,\n IBizParams,\n IBizSys,\n Interceptor,\n LinkedList,\n LoginMode,\n MenuPermissionMode,\n MessageCenter,\n ModelError,\n NOOP,\n Namespace,\n Net,\n NoticeError,\n RuntimeError,\n RuntimeModelError,\n StringUtil,\n UrlHelper,\n awaitTimeout,\n calcMimeByFileName,\n clone2 as clone,\n colorBlend,\n commands,\n compareArr,\n debounce,\n debounceAndAsyncMerge,\n debounceAndMerge,\n downloadFileFromBlob,\n eventPath,\n fetchEventSource,\n fileListToArr,\n findRecursiveChild,\n getToken,\n install,\n isElementSame,\n isEventInside,\n isImage,\n isOverlap,\n isSvg,\n listenJSEvent,\n mergeDefaultInLeft,\n mergeInLeft,\n onClickOutside,\n plus,\n recursiveIterate,\n selectFile,\n setRemoteStyle,\n throttle,\n toDisposable,\n toNumberOrNil,\n uploadFile\n};\n"],"names":["async","wait","fun","params","Promise","resolve","setTimeout","value","opts","mergeDeepRight3","DefaultCloneOpts","deep","cloneDeepWith","customizeFn","cloneWith","color1","color2","p","format","trim","c1","toRGBA","c2","result","r","hex","toString","concat","arr1","arr2","keyField","all","Set","more","less","same","arr1Keys","map","item","arr2Keys","forEach","includes","push","func","immediate","timer","args","clearTimeout","callNow","apply","this","mergeFunc","oldParams","promises","debounceFunc","debounce2","promise","error","reject","newParams","file","fileName","filetype","calcMimeByFileName","blob","Blob","type","href","URL","createObjectURL","a","document","createElement","download","body","appendChild","click","removeChild","revokeObjectURL","parent","key","compareField","compareCallback","mergeDeepRight2","CompareOpts","_compareCallback","child","find","recursiveIterate","window","ibiz","Error","IBizSys","field","length","allElements","Array","from","ext","split","pop","str","SvgPattern","test","l","r2","Object","keys","isNotNil","isNil","target","handler","options","window2","defaultWindow","ignore","capture","RuntimeError","shouldListen","isOutside","event","some","el","isEventInside","isPaused","fallback","listener","cleanups","listenJSEvent","passive","e","button","path","eventPath","composedPath","filter","Boolean","stop","fn","pause","proceed","b","c","d","f","Math","max","url","res","net","get","styleDom","setAttribute","innerText","data","head","log","debug","num","Number","isNaN","_opts","merge3","multiple","accept","separate","beforeUpload","_fileData","_files","finish","_resultFiles","success","_res","_error","progress","executeSingleUpload","files","resultFiles","status","name","uid","uniqueId","percentage","_onProgress","request","isFunction","FormData","append","uploadRequest","response","join","selectFile","onSelected","uploadSequence","allSettled","sequence","uploadFiles","__create","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__commonJS","cb","mod","exports","__toESM","isNodeMode","to","except","desc","call","enumerable","__copyProps","__esModule","require_loglevel","module","root","definition","noop","undefinedType","isIE","navigator","userAgent","logMethods","bindMethod","obj","methodName","method","bind","Function","arguments","traceForIE","console","trace","replaceLoggingMethods","level","loggerName","i","methodFactory","enableLoggingWhenConsoleArrives","defaultMethodFactory","realMethod","Logger2","defaultLevel","factory","currentLevel","self","storageKey","getPersistedLevel","storedLevel","localStorage","cookie","location","indexOf","encodeURIComponent","exec","slice","levels","TRACE","DEBUG","INFO","WARN","ERROR","SILENT","getLevel","setLevel","persist","toUpperCase","levelNum","levelName","persistLevelIfPossible","setDefaultLevel","resetLevel","removeItem","clearPersistedLevel","enableAll","disableAll","initialLevel","defaultLogger","_loggersByName","getLogger","TypeError","logger2","_log","noConflict","getLoggers","define","amd","require_loglevel_plugin_prefix","loglevel","save","defaults","template","levelFormatter","nameFormatter","timestampFormatter","date","toTimeString","replace","configs","api","reg","rootLogger","config","originalFactory","logLevel","originalMethod","hasTimestamp","hasLevel","hasName","content","timestamp","Date","lname","unshift","merge4","warn","prefix","getLines","onLine","buffer","position","fieldLength","discardTrailingNewline","arr","Uint8Array","set","bufLength","lineStart","lineEnd","subarray","__rest","s","t","getOwnPropertySymbols","propertyIsEnumerable","EventStreamContentType","DefaultRetryInterval","LastEventId","fetchEventSource","input","_a","signal","inputSignal","headers","inputHeaders","onopen","inputOnOpen","onmessage","onclose","onerror","openWhenHidden","fetch","inputFetch","rest","assign","curRequestController","onVisibilityChange","abort","hidden","addEventListener","retryInterval","retryTimer","dispose","removeEventListener","defaultOnOpen","_a2","AbortController","stream","onChunk","reader","getReader","read","done","getBytes","onId","onRetry","onMessage","message","id","retry","decoder","TextDecoder","line","decode","valueOffset","parseInt","getMessages","err","aborted","interval","innerErr","contentType","startsWith","_Node","constructor","element","next","Undefined","prev","Node","LinkedList","_first","_last","_size","size","isEmpty","clear","node","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","shift","anchor","Symbol","iterator","once","_this","didCall","toDisposable","CommandsRegistry","commands","Map","registerCommand","idOrCommand","commands2","removeFn","command","delete","hasCommand","has","getCommand","list","getCommands","getCommandOpt","cmd","CommandController","commandRegister","register","execute","bol","getCommandOpts","CoreConst","DEFAULT_MODEL_SERVICE_TAG","TOKEN","TOKEN_EXPIRES","NOOP","LoginMode","LoginMode2","MenuPermissionMode","MenuPermissionMode2","Environment","_IBizContext","context","initWithParent","writable","properties","val","_context","_parent","defineProperties","getOwnContext","destroy","_associationContext","clone","newContext","reset","configurable","createProxy","Proxy","_params","_receiver","ownKeys","allKeys","updateKeyDefine","dev","hub","enableMqtt","mqttUrl","isEnableMultiLan","baseUrl","appId","pluginBaseUrl","isLocalModel","remoteModelUrl","assetsUrl","dcSystem","downloadFileUrl","uploadFileUrl","casLoginUrl","loginMode","menuPermissionMode","enablePermission","routePlaceholder","enableWfAllHistory","isMob","isSaaSMode","AppTitle","favicon","HttpError","super","statusText","model","msg","duration","getToken","getCookie","Interceptor","onBeforeRequest","onRequestError","onResponseSuccess","onResponseError","use","instance","requestTag","interceptors","responseTag","eject","CoreInterceptor","systemId","env","orgData","systemid","orgid","MessageBase","evt","QXEvent","emit","nextParent","on","off","MessageAll","CommandBase","sendCommand","subtype","messageid","createUUID","messagename","CommandCreate","send","CommandUpdate","CommandRemove","CommandChange","CommandAsyncAction","MessageCommand","change","update","remove","asyncAction","createUUID2","MessageConsole","createUUID3","MessageCenter","callback","_bem","namespace","block","blockSuffix","modifier","cls","m","be","em","bm","bem","is","state","cssVar","object","styles","cssVarName","cssVarBlock","cssVarBlockName","local","ok","AxiosHeaders","Net","urlReg","waitRequest","axios","addInterceptor","baseURL","interceptor","removeInterceptor","presetConfig","Accept","mergeConfig","merge","post","handleAppPresetParam","doResponseResult","option","attachUrlParam","put","getModel","cfg","JSON","stringify","requestPromise","sse","Authorization","srforgid","srfsystemid","mergeDeepRight","notNilEmpty","urlSplit","strParams","endsWith","StringUtil","fill","notNilEmpty2","strArr","match","contextReg","_key","dataReg","routeBase","hashIndex","lastIndexOf","appBase","origin","pathname","routePath","hash","fullPath","getParents","memo","parentNode","eventName","cleanup","round","color","rgba","toLowerCase","parseFloat","String","mime","fileListToArr","fileList","merge2","onchange","inputEl","count","startPromise","endPromise","lock","unlock","await","IterateOpts","childrenFields","BreakError","children","fields","getChildField","_recursiveIterate","isObject","isFunction2","isNumber","dataType","isDate","typeMap","validate","permission","validateAndThrow","setPermission","allPermissions","removePermission","checkPermission","Logger","logger","mc"],"mappings":"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"}
1
+ {"version":3,"file":"index.system.min.js","sources":["../../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/parse.js","../../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/fetch.js","../src/command/utils/linked-list.ts","../src/command/utils/util.ts","../src/command/command-register.ts","../src/command/command.ts","../src/command/index.ts","../src/constant/core/core.ts","../src/constant/util/util.ts","../src/constant/http-status-message/http-status-message.ts","../src/constant/login-mode/login-mode.ts","../src/constant/menu-permission-mode/menu-permission-mode.ts","../src/context/index.ts","../src/params/params.ts","../src/environment/environment.ts","../src/error/http-error/http-error.ts","../src/error/model-error/model-error.ts","../src/error/runtime-error/runtime-error.ts","../src/error/runtime-model-error/runtime-model-error.ts","../src/error/notice-error/notice-error.ts","../src/utils/util/util.ts","../src/utils/interceptor/interceptor.ts","../src/utils/interceptor/core-interceptor.ts","../src/utils/message-center/base/message-base.ts","../src/utils/message-center/base/message-all.ts","../src/utils/message-center/command/command-base/command-base.ts","../src/utils/message-center/command/create/command-create.ts","../src/utils/message-center/command/update/command-update.ts","../src/utils/message-center/command/remove/command-remove.ts","../src/utils/message-center/command/change/command-change.ts","../src/utils/message-center/command/async-action/command-async-action.ts","../src/utils/message-center/command/message-command.ts","../src/utils/message-center/console/message-console.ts","../src/utils/message-center/message-center.ts","../src/utils/namespace/namespace.ts","../src/utils/net/http-response.ts","../src/utils/net/net.ts","../src/utils/string-util/string-util.ts","../src/utils/url-helper/url-helper.ts","../src/utils/event/event.ts","../src/utils/click-outside/click-outside.ts","../src/utils/color/color.ts","../src/utils/download-file/download-file.ts","../src/utils/upload/select-file.ts","../src/utils/upload/upload-file.ts","../src/utils/sync/await-timeout.ts","../src/utils/sync/count-latch.ts","../src/utils/style/remote-style.ts","../src/utils/recursive/find-recursive-child.ts","../src/utils/data-type/data-types.ts","../src/utils/clone/clone.ts","../src/utils/bit-mask/bit-mask.ts","../src/utils/logger/logger.ts","../src/ibizsys.ts","../src/install.ts"],"sourcesContent":["export async function getBytes(stream, onChunk) {\r\n const reader = stream.getReader();\r\n let result;\r\n while (!(result = await reader.read()).done) {\r\n onChunk(result.value);\r\n }\r\n}\r\nexport function getLines(onLine) {\r\n let buffer;\r\n let position;\r\n let fieldLength;\r\n let discardTrailingNewline = false;\r\n return function onChunk(arr) {\r\n if (buffer === undefined) {\r\n buffer = arr;\r\n position = 0;\r\n fieldLength = -1;\r\n }\r\n else {\r\n buffer = concat(buffer, arr);\r\n }\r\n const bufLength = buffer.length;\r\n let lineStart = 0;\r\n while (position < bufLength) {\r\n if (discardTrailingNewline) {\r\n if (buffer[position] === 10) {\r\n lineStart = ++position;\r\n }\r\n discardTrailingNewline = false;\r\n }\r\n let lineEnd = -1;\r\n for (; position < bufLength && lineEnd === -1; ++position) {\r\n switch (buffer[position]) {\r\n case 58:\r\n if (fieldLength === -1) {\r\n fieldLength = position - lineStart;\r\n }\r\n break;\r\n case 13:\r\n discardTrailingNewline = true;\r\n case 10:\r\n lineEnd = position;\r\n break;\r\n }\r\n }\r\n if (lineEnd === -1) {\r\n break;\r\n }\r\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\r\n lineStart = position;\r\n fieldLength = -1;\r\n }\r\n if (lineStart === bufLength) {\r\n buffer = undefined;\r\n }\r\n else if (lineStart !== 0) {\r\n buffer = buffer.subarray(lineStart);\r\n position -= lineStart;\r\n }\r\n };\r\n}\r\nexport function getMessages(onId, onRetry, onMessage) {\r\n let message = newMessage();\r\n const decoder = new TextDecoder();\r\n return function onLine(line, fieldLength) {\r\n if (line.length === 0) {\r\n onMessage === null || onMessage === void 0 ? void 0 : onMessage(message);\r\n message = newMessage();\r\n }\r\n else if (fieldLength > 0) {\r\n const field = decoder.decode(line.subarray(0, fieldLength));\r\n const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1);\r\n const value = decoder.decode(line.subarray(valueOffset));\r\n switch (field) {\r\n case 'data':\r\n message.data = message.data\r\n ? message.data + '\\n' + value\r\n : value;\r\n break;\r\n case 'event':\r\n message.event = value;\r\n break;\r\n case 'id':\r\n onId(message.id = value);\r\n break;\r\n case 'retry':\r\n const retry = parseInt(value, 10);\r\n if (!isNaN(retry)) {\r\n onRetry(message.retry = retry);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n}\r\nfunction concat(a, b) {\r\n const res = new Uint8Array(a.length + b.length);\r\n res.set(a);\r\n res.set(b, a.length);\r\n return res;\r\n}\r\nfunction newMessage() {\r\n return {\r\n data: '',\r\n event: '',\r\n id: '',\r\n retry: undefined,\r\n };\r\n}\r\n//# sourceMappingURL=parse.js.map","var __rest = (this && this.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\nimport { getBytes, getLines, getMessages } from './parse';\r\nexport const EventStreamContentType = 'text/event-stream';\r\nconst DefaultRetryInterval = 1000;\r\nconst LastEventId = 'last-event-id';\r\nexport function fetchEventSource(input, _a) {\r\n var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, [\"signal\", \"headers\", \"onopen\", \"onmessage\", \"onclose\", \"onerror\", \"openWhenHidden\", \"fetch\"]);\r\n return new Promise((resolve, reject) => {\r\n const headers = Object.assign({}, inputHeaders);\r\n if (!headers.accept) {\r\n headers.accept = EventStreamContentType;\r\n }\r\n let curRequestController;\r\n function onVisibilityChange() {\r\n curRequestController.abort();\r\n if (!document.hidden) {\r\n create();\r\n }\r\n }\r\n if (!openWhenHidden) {\r\n document.addEventListener('visibilitychange', onVisibilityChange);\r\n }\r\n let retryInterval = DefaultRetryInterval;\r\n let retryTimer = 0;\r\n function dispose() {\r\n document.removeEventListener('visibilitychange', onVisibilityChange);\r\n window.clearTimeout(retryTimer);\r\n curRequestController.abort();\r\n }\r\n inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener('abort', () => {\r\n dispose();\r\n resolve();\r\n });\r\n const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;\r\n const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;\r\n async function create() {\r\n var _a;\r\n curRequestController = new AbortController();\r\n try {\r\n const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));\r\n await onopen(response);\r\n await getBytes(response.body, getLines(getMessages(id => {\r\n if (id) {\r\n headers[LastEventId] = id;\r\n }\r\n else {\r\n delete headers[LastEventId];\r\n }\r\n }, retry => {\r\n retryInterval = retry;\r\n }, onmessage)));\r\n onclose === null || onclose === void 0 ? void 0 : onclose();\r\n dispose();\r\n resolve();\r\n }\r\n catch (err) {\r\n if (!curRequestController.signal.aborted) {\r\n try {\r\n const interval = (_a = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a !== void 0 ? _a : retryInterval;\r\n window.clearTimeout(retryTimer);\r\n retryTimer = window.setTimeout(create, interval);\r\n }\r\n catch (innerErr) {\r\n dispose();\r\n reject(innerErr);\r\n }\r\n }\r\n }\r\n }\r\n create();\r\n });\r\n}\r\nfunction defaultOnOpen(response) {\r\n const contentType = response.headers.get('content-type');\r\n if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {\r\n throw new Error(`Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`);\r\n }\r\n}\r\n//# sourceMappingURL=fetch.js.map","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable max-classes-per-file */\nclass Node<E> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static readonly Undefined = new Node<any>(undefined);\n\n element: E;\n\n next: Node<E>;\n\n prev: Node<E>;\n\n constructor(element: E) {\n this.element = element;\n this.next = Node.Undefined;\n this.prev = Node.Undefined;\n }\n}\n\nexport class LinkedList<E> {\n private _first: Node<E> = Node.Undefined;\n\n private _last: Node<E> = Node.Undefined;\n\n private _size: number = 0;\n\n get size(): number {\n return this._size;\n }\n\n isEmpty(): boolean {\n return this._first === Node.Undefined;\n }\n\n clear(): void {\n let node = this._first;\n while (node !== Node.Undefined) {\n const { next } = node;\n node.prev = Node.Undefined;\n node.next = Node.Undefined;\n node = next;\n }\n\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n\n unshift(element: E): () => void {\n return this._insert(element, false);\n }\n\n push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new Node(element);\n if (this._first === Node.Undefined) {\n this._first = newNode;\n this._last = newNode;\n } else if (atTheEnd) {\n // push\n const oldLast = this._last!;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n } else {\n // unshift\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n this._size += 1;\n\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n shift(): E | undefined {\n if (this._first === Node.Undefined) {\n return undefined;\n }\n const res = this._first.element;\n this._remove(this._first);\n return res;\n }\n\n pop(): E | undefined {\n if (this._last === Node.Undefined) {\n return undefined;\n }\n const res = this._last.element;\n this._remove(this._last);\n return res;\n }\n\n private _remove(node: Node<E>): void {\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n // middle\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n } else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n // only node\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n } else if (node.next === Node.Undefined) {\n // last\n this._last = this._last!.prev!;\n this._last.next = Node.Undefined;\n } else if (node.prev === Node.Undefined) {\n // first\n this._first = this._first!.next!;\n this._first.prev = Node.Undefined;\n }\n\n // done\n this._size -= 1;\n }\n\n *[Symbol.iterator](): Iterator<E> {\n let node = this._first;\n while (node !== Node.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n","/* eslint-disable func-names */\n/* eslint-disable prefer-rest-params */\n/* eslint-disable no-underscore-dangle */\nimport { IDisposable } from '../interface';\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function once<T extends Function>(this: unknown, fn: T): T {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this;\n let didCall = false;\n let result: unknown;\n\n return function () {\n if (didCall) {\n return result;\n }\n\n didCall = true;\n result = fn.apply(_this, arguments);\n\n return result;\n } as unknown as T;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n const self = {\n dispose: once(() => {\n fn();\n }),\n };\n return self;\n}\n\n/**\n * 函数防抖---“立即执行版本” 和 “非立即执行版本” 的组合版本\n *\n * @author chitanda\n * @date 2022-06-29 19:06:15\n * @export\n * @param {((...args: unknown[]) => void | Promise<void>)} func 处理函数\n * @param {number} wait 延迟执行时间(毫秒)\n * @param {boolean} [immediate] 是否立即执行\n * @return {*} {(...args: unknown[]) => void}\n */\nexport function debounce(\n func: (...args: unknown[]) => void | Promise<void>,\n wait: number,\n immediate?: boolean,\n): (...args: unknown[]) => void {\n let timer: unknown;\n\n return function (this: unknown, ...args: unknown[]): void {\n if (timer) {\n clearTimeout(timer as number);\n }\n if (immediate) {\n const callNow = !timer;\n timer = setTimeout(() => {\n timer = null;\n }, wait);\n if (callNow) {\n func.apply(this, args);\n }\n } else {\n timer = setTimeout(() => {\n func.apply(this, args);\n }, wait);\n }\n };\n}\n\n/**\n * 节流函数\n *\n * @author chitanda\n * @date 2022-06-29 20:06:38\n * @export\n * @param {((...args: unknown[]) => void | Promise<void>)} fn\n * @param {number} wait\n * @return {*} {(...args: unknown[]) => void}\n */\nexport function throttle(\n fn: (...args: unknown[]) => void | Promise<void>,\n wait: number,\n): (...args: unknown[]) => void {\n let timer: unknown = null;\n return function (this: unknown, ...args: unknown[]): void {\n if (!timer) {\n timer = setTimeout(() => {\n fn.apply(this, args);\n timer = null;\n }, wait);\n }\n };\n}\n","import {\n ICommand,\n ICommandHandler,\n ICommandOption,\n ICommandRegistry,\n ICommandsMap,\n IDisposable,\n} from './interface';\nimport { LinkedList, toDisposable } from './utils';\n\n/**\n * 命令注册中心\n *\n * @author chitanda\n * @date 2022-06-27 13:06:50\n * @export\n * @class CommandRegisterService\n * @implements {ICommandRegistry}\n */\nexport class CommandsRegistry implements ICommandRegistry {\n /**\n * 已经注册的所有指令\n *\n * @author chitanda\n * @date 2022-07-21 15:07:47\n * @private\n */\n private readonly commands = new Map<string, LinkedList<ICommand>>();\n\n /**\n * 注册指令\n *\n * @author chitanda\n * @date 2022-06-27 13:06:31\n * @param {(string | ICommand)} idOrCommand\n * @param {ICommandHandler} [handler]\n * @return {*} {IDisposable}\n */\n registerCommand(\n idOrCommand: string | ICommand,\n handler?: ICommandHandler,\n opts?: ICommandOption,\n ): IDisposable {\n if (!idOrCommand) {\n throw new Error(`invalid command`);\n }\n\n if (typeof idOrCommand === 'string') {\n if (!handler) {\n throw new Error(`invalid command`);\n }\n return this.registerCommand({ id: idOrCommand, handler, opts });\n }\n\n const { id } = idOrCommand;\n\n let commands = this.commands.get(id);\n if (!commands) {\n commands = new LinkedList<ICommand>();\n this.commands.set(id, commands);\n }\n\n const removeFn = commands.unshift(idOrCommand);\n\n const ret = toDisposable(() => {\n removeFn();\n const command = this.commands.get(id);\n if (command?.isEmpty()) {\n this.commands.delete(id);\n }\n });\n\n return ret;\n }\n\n /**\n * 指令是否已经注册\n *\n * @author chitanda\n * @date 2022-07-21 15:07:58\n * @param {string} id\n * @return {*} {boolean}\n */\n hasCommand(id: string): boolean {\n return this.commands.has(id);\n }\n\n /**\n * 查找指令\n *\n * @author chitanda\n * @date 2022-07-21 16:07:12\n * @param {string} id\n * @return {*} {(ICommand | undefined)}\n */\n getCommand(id: string): ICommand | undefined {\n const list = this.commands.get(id);\n if (!list || list.isEmpty()) {\n return undefined;\n }\n return list[Symbol.iterator]().next().value;\n }\n\n /**\n * 获取所有指令\n *\n * @author chitanda\n * @date 2022-07-21 16:07:20\n * @return {*} {ICommandsMap}\n */\n getCommands(): ICommandsMap {\n const result = new Map<string, ICommand>();\n const keys = this.commands.keys();\n for (const key of keys) {\n const command = this.getCommand(key);\n if (command) {\n result.set(key, command);\n }\n }\n return result;\n }\n\n /**\n * 获取指令配置参数\n *\n * @author chitanda\n * @date 2022-07-21 16:07:27\n * @param {string} id\n * @return {*} {(ICommandOption | undefined)}\n */\n getCommandOpt(id: string): ICommandOption | undefined {\n const cmd = this.getCommand(id);\n return cmd?.opts;\n }\n}\n","import { ICommandHandler, ICommandOption, IDisposable } from './interface';\nimport { CommandsRegistry } from './command-register';\n\n/**\n * 指令控制器\n *\n * @author chitanda\n * @date 2022-06-28 19:06:51\n * @export\n * @class CommandController\n */\nexport class CommandController {\n private commandRegister = new CommandsRegistry();\n\n /**\n * 注册指令\n *\n * @author chitanda\n * @date 2022-06-28 19:06:45\n * @param {string} id\n * @param {ICommandHandler} handler\n * @param {ICommandOption} [opts]\n * @return {*} {IDisposable}\n */\n register(\n id: string,\n handler: ICommandHandler,\n opts?: ICommandOption,\n ): IDisposable {\n return this.commandRegister.registerCommand(id, handler, opts);\n }\n\n /**\n * 执行指令\n *\n * @author chitanda\n * @date 2022-06-28 19:06:38\n * @template T\n * @param {string} id\n * @param {...unknown[]} args\n * @return {*} {Promise<T>}\n */\n async execute<T = undefined>(id: string, ...args: unknown[]): Promise<T> {\n const command = this.commandRegister.getCommand(id);\n if (command) {\n return command.handler(...args) as T | Promise<T>;\n }\n throw new Error(`未注册指令: ${id},请先注册指令`);\n }\n\n /**\n * 判断指令是否存在,可直接抛出异常\n *\n * @author chitanda\n * @date 2022-06-28 19:06:11\n * @param {string} id\n * @param {boolean} [err]\n * @return {*} {boolean}\n */\n hasCommand(id: string, err?: boolean): boolean {\n const bol = !!this.commandRegister.hasCommand(id);\n if (err === true && bol === true) {\n throw new Error(`未注册指令: ${id},请先注册指令`);\n }\n return bol;\n }\n\n /**\n * 获取指令配置参数\n *\n * @author chitanda\n * @date 2022-07-21 17:07:11\n * @param {string} id\n * @return {*} {(ICommandOption | undefined)}\n */\n getCommandOpts(id: string): ICommandOption | undefined {\n return this.commandRegister.getCommandOpt(id);\n }\n}\n","import { CommandController } from './command';\n\nexport * from './interface';\nexport * from './utils';\nexport { CommandsRegistry } from './command-register';\nexport { CommandController } from './command';\n\n/**\n * 命令控制器\n */\nexport const commands = new CommandController();\n","/**\n * 核心全局静态变量\n *\n * @author chitanda\n * @date 2022-07-14 17:07:25\n * @export\n * @enum {number}\n */\nexport class CoreConst {\n /**\n * 默认模型服务标识\n */\n static readonly DEFAULT_MODEL_SERVICE_TAG = 'default';\n\n /**\n * 访问令牌标识\n *\n * @author chitanda\n * @date 2022-07-20 15:07:28\n * @static\n */\n static readonly TOKEN = 'ibzuaa-token';\n\n /**\n * 访问令牌标识过期时间\n *\n * @author lxm\n * @date 2023-02-13 07:11:33\n * @static\n * @memberof CoreConst\n */\n static readonly TOKEN_EXPIRES = 'ibzuaa-token-expires';\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/**\n * 无操作函数\n */\nexport const NOOP = (): void => {};\n","/**\n * 请求状态码文本\n */\nexport const HttpStatusMessageConst: Record<number, string> = {\n 200: '服务器成功返回请求的数据。',\n 201: '新建或修改数据成功。',\n 202: '一个请求已经进入后台排队(异步任务)。',\n 204: '删除数据成功。',\n 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',\n 401: '用户没有权限(令牌、用户名、密码错误)。',\n 403: '用户得到授权,但是访问是被禁止的。',\n 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',\n 406: '请求的格式不可得。',\n 410: '请求的资源被永久删除,且不会再得到的。',\n 422: '当创建一个对象时,发生一个验证错误。',\n 500: '服务器发生错误,请检查服务器。',\n 502: '网关错误。',\n 503: '服务不可用,服务器暂时过载或维护。',\n 504: '网关超时。',\n};\n","/* eslint-disable no-shadow */\n/**\n * 登录模式\n *\n * @author lxm\n * @date 2022-10-12 14:10:56\n * @export\n * @enum {number}\n */\nexport enum LoginMode {\n /**\n * 默认标准登录\n */\n DEFAULT = 'DEFAULT',\n /**\n * 自定义登录\n */\n CUSTOM = 'CUSTOM',\n /**\n * 中央认证登录\n */\n CAS = 'CAS',\n}\n","/* eslint-disable no-shadow */\n/**\n * 菜单权限校验模式\n *\n * @author lxm\n * @date 2022-10-12 14:10:56\n * @export\n * @enum {number}\n */\nexport enum MenuPermissionMode {\n /**\n * 混合模式(默认)\n */\n MIXIN = 'MIXIN',\n /**\n * 统一资源模式\n */\n RESOURCE = 'RESOURCE',\n /**\n * RT模式\n */\n RT = 'RT',\n}\n","import { clone } from 'ramda';\n\n/**\n * 上下文处理类\n *\n * @author chitanda\n * @date 2022-07-14 10:07:24\n * @export\n * @class IBizContext\n */\nexport class IBizContext implements IContext {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string | symbol]: any;\n\n /**\n * clone 后引用的上下文实例,需要在实例销毁时,同时销毁\n *\n * @author chitanda\n * @date 2023-03-13 16:03:31\n * @protected\n * @type {IBizContext[]}\n */\n protected declare _associationContext: IBizContext[];\n\n /**\n * 修改的父上下文\n *\n * @author lxm\n * @date 2022-12-08 18:12:16\n * @protected\n * @type {IData}\n */\n protected declare _context: IData;\n\n /**\n * 父的上下文源对象\n *\n * @author lxm\n * @date 2022-12-08 18:12:31\n * @type {IContext}\n */\n declare _parent?: IContext;\n\n /**\n * Creates an instance of IBizContext.\n *\n * @author chitanda\n * @date 2022-07-14 10:07:15\n * @param {IData} [context={}] 自身的上下文\n * @param {IContext} [parent]\n */\n // eslint-disable-next-line default-param-last\n private constructor(context: IData = {}, parent?: IContext) {\n Object.defineProperty(this, '_associationContext', {\n enumerable: false,\n value: [],\n });\n\n if (parent) {\n this.initWithParent(parent);\n }\n\n // 合并给入上下文\n Object.assign(this, context);\n }\n\n private initWithParent(parent: IContext): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n\n // 定义私有变量,存放父上下文源对象\n Object.defineProperty(this, '_parent', {\n enumerable: false,\n writable: true,\n value: parent,\n });\n\n // 定义私有变量,用于存储对父已有上下文的修改。\n Object.defineProperty(this, '_context', {\n enumerable: false,\n writable: true,\n value: {},\n });\n // 监控父上下文参数,自身不存在时从父取\n const properties: { [key: string]: PropertyDescriptor } = {};\n const keys = Object.keys(parent);\n keys.forEach(key => {\n if (Object.prototype.hasOwnProperty.call(this, key)) {\n // !已经定义的不重复定义,会报错\n return;\n }\n properties[key] = {\n enumerable: true,\n set(val: unknown): void {\n if (val == null) {\n self._context[key] = null;\n } else {\n self._context[key] = val;\n }\n },\n get(): IContext {\n if (self._context[key] !== undefined) {\n return self._context[key];\n }\n return self._parent![key];\n },\n };\n });\n Object.defineProperties(this, properties);\n }\n\n /**\n * 返回自身的上下文,独有的和与父有差异的。\n *\n * @author lxm\n * @date 2022-12-08 17:12:26\n * @returns {*} {IData}\n */\n getOwnContext(): IData {\n const result: IData = {};\n Object.keys(this).forEach(key => {\n // 父没有的,或者修改了父的上下文\n // 父不存在则返回所有自身的属性\n if (\n !this._parent ||\n !Object.prototype.hasOwnProperty.call(this._parent, key) ||\n Object.prototype.hasOwnProperty.call(this._context, key)\n ) {\n result[key] = this[key];\n }\n });\n return result;\n }\n\n /**\n * 销毁当前上下文对象\n *\n * @author chitanda\n * @date 2023-03-13 15:03:04\n */\n destroy(): void {\n this._parent = undefined;\n this._context = {};\n this._associationContext.forEach(item => {\n item.destroy();\n });\n }\n\n /**\n * 在非视图中,需要断开视图上下文联系时。只能使用 clone 创建新的局部上下文\n *\n * @author chitanda\n * @date 2023-03-13 16:03:13\n * @return {*} {IBizContext}\n */\n clone(): IBizContext {\n const newContext = new IBizContext(\n clone(this.getOwnContext()),\n this._parent,\n );\n this._associationContext.push(newContext);\n return newContext;\n }\n\n /**\n * 在不改变对象引用的情况下,重置上下文\n * 等效于重新实例化,但是引用不变\n * @author lxm\n * @date 2023-05-24 10:30:40\n * @param {IData} [context={}]\n * @param {IContext} [parent]\n */\n // eslint-disable-next-line default-param-last\n reset(context: IData = {}, parent?: IContext): void {\n // 清空_associationContext\n this._associationContext.forEach(item => {\n item.destroy();\n });\n // 置空parent相关属性\n if (this._parent) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._parent = {} as any;\n this._context = {};\n }\n // 删除自身的属性,define的删不掉,上面置空了就不管了\n Object.keys(this).forEach(key => {\n try {\n delete this[key];\n } catch (error) {\n // 删不掉的不管了,上面已经变成uneducated了\n }\n });\n if (parent) {\n this.initWithParent(parent);\n }\n // 合并默认值\n Object.assign(this, context);\n }\n\n /**\n * 上下文只有在视图初始化时,调用 create 方法\n *\n * @author chitanda\n * @date 2023-03-13 16:03:32\n * @static\n * @param {IData} [context]\n * @param {IContext} [parent]\n * @return {*} {IContext}\n */\n static create(context?: IData, parent?: IContext): IBizContext {\n return new IBizContext(context, parent);\n }\n}\n","/* eslint-disable no-constructor-return */\n/**\n * 视图参数类\n * @author lxm\n * @date 2023-10-27 03:39:12\n * @export\n * @class IBizParams\n * @implements {IParams}\n */\nexport class IBizParams implements IParams {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string | symbol]: any;\n\n /**\n * 自身的属性\n * @author lxm\n * @date 2023-10-27 04:09:25\n * @protected\n * @type {IParams}\n */\n protected declare _params: IParams;\n\n /**\n * 父视图参数\n * @author lxm\n * @date 2023-10-27 04:08:59\n * @protected\n * @type {IParams}\n */\n protected declare _parent?: IParams;\n\n constructor(params?: IParams, parent?: IParams) {\n // 定义私有变量,存放父视图参数源对象\n Object.defineProperty(this, '_parent', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: parent,\n });\n\n // 定义私有变量,用于存储对父已有视图参数的修改。\n Object.defineProperty(this, '_params', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: params || {},\n });\n\n return this.createProxy();\n }\n\n /**\n * 创建代理\n *\n * @author lxm\n * @date 2023-10-27 03:53:14\n * @protected\n * @return {*} {IBizParams}\n */\n protected createProxy(): IBizParams {\n // 更新属性,缺的补充定义\n function updateKeyDefine(target: IParams, keys: string[]): void {\n keys.forEach(key => {\n if (!Object.prototype.hasOwnProperty.call(target, key)) {\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined,\n });\n }\n });\n }\n\n return new Proxy(this, {\n set(target: IBizParams, p: string, value: unknown): boolean {\n if (['_params', '_parent'].includes(p)) {\n target[p] = value;\n } else {\n target._params[p] = value;\n }\n return true;\n },\n\n get(target: IBizParams, p: string | symbol, _receiver: unknown): unknown {\n if (target[p] !== undefined) {\n return target[p];\n }\n if (target._params[p] !== undefined) {\n return target._params[p];\n }\n if (target._parent && target._parent[p] !== undefined) {\n return target._parent[p];\n }\n },\n\n ownKeys(target: IBizParams): ArrayLike<string | symbol> {\n // 整合所有并排重\n const allKeys = [\n ...new Set([\n ...Object.keys(target._params),\n ...Object.keys(target._parent || {}),\n ]),\n ];\n updateKeyDefine(target, allKeys);\n return allKeys;\n },\n });\n }\n\n /**\n * 在不改变对象引用的情况下,重置视图参数\n * 等效于重新实例化,但是引用不变\n * @author lxm\n * @date 2023-10-27 05:24:45\n * @param {IParams} [params]\n * @param {IParams} [parent]\n */\n reset(params?: IParams, parent?: IParams): void {\n this._params = params || {};\n this._parent = parent;\n }\n\n /**\n * 销毁上下文,避免内存泄漏\n *\n * @author lxm\n * @date 2023-10-27 03:57:44\n */\n destroy(): void {\n this._params = {};\n this._parent = undefined;\n }\n}\n","import { LoginMode, MenuPermissionMode } from '../constant';\nimport { IEnvironment } from '../interface';\n\n/**\n * 环境变量\n */\nexport const Environment: IEnvironment = {\n dev: false,\n hub: true,\n enableMqtt: false,\n mqttUrl: '/portal/mqtt/mqtt',\n isEnableMultiLan: false,\n logLevel: 'ERROR',\n baseUrl: '/api',\n appId: '',\n pluginBaseUrl: './plugins',\n isLocalModel: false,\n remoteModelUrl: '/remotemodel',\n assetsUrl: './assets',\n dcSystem: '',\n downloadFileUrl: '/ibizutil/download',\n uploadFileUrl: '/ibizutil/upload',\n casLoginUrl: '',\n loginMode: LoginMode.DEFAULT,\n menuPermissionMode: MenuPermissionMode.MIXIN,\n enablePermission: true,\n routePlaceholder: '-',\n enableWfAllHistory: false,\n isMob: false,\n isSaaSMode: true,\n AppTitle: '应用',\n favicon: './favicon.ico',\n};\n","import { AxiosError, AxiosResponse } from 'axios';\n\n/**\n * 请求异常\n *\n * @author chitanda\n * @date 2022-09-18 17:09:10\n * @export\n * @class HttpError\n * @implements {Error}\n */\nexport class HttpError extends Error {\n name: string = 'HttpError';\n\n message: string;\n\n status: number;\n\n response?: AxiosResponse;\n\n constructor(err: AxiosError) {\n super('HttpError');\n const res = err.response;\n this.response = err.response;\n if (res) {\n if (res.data) {\n this.message = (res.data as IData).message;\n } else {\n this.message = res.statusText;\n }\n if (!this.message) {\n this.message = '网络异常,请稍后重试!';\n }\n this.status = res.status;\n } else {\n this.message = err.message;\n this.status = 500;\n }\n }\n}\n","/**\n * 未支持的模型\n *\n * @author chitanda\n * @date 2022-08-30 16:08:03\n * @export\n * @class ModelError\n */\nexport class ModelError extends Error {\n name: string = '未支持的模型';\n\n /**\n * Creates an instance of ModelError.\n *\n * @author chitanda\n * @date 2022-08-30 16:08:38\n * @param {IModelObject} model 模板未支持的模型\n * @param {string} [msg]\n */\n constructor(\n public model: IData,\n msg?: string,\n ) {\n super(`「${model.id}」模型${msg ? `: ${msg}` : ''}`);\n }\n}\n","/**\n * 运行时异常\n *\n * @author lxm\n * @date 2022-09-21 18:09:09\n * @export\n * @class RuntimeError\n * @implements {Error}\n */\nexport class RuntimeError extends Error {\n name: string = 'Runtime Error';\n\n constructor(public message: string) {\n super(message);\n }\n}\n","/**\n * 模型配置缺失\n *\n * @author chitanda\n * @date 2022-08-30 16:08:15\n * @export\n * @class DefectModelError\n * @extends {Error}\n */\nexport class RuntimeModelError extends Error {\n name: string = '模型配置缺失';\n\n /**\n * Creates an instance of DefectModelError.\n *\n * @author chitanda\n * @date 2022-08-30 16:08:58\n * @param {IModelObject} model 丢失配置的模型\n * @param {string} [msg] 缺失配置描述\n */\n constructor(\n public model: IData,\n msg?: string,\n ) {\n super(`「${model.id}」模型${msg ? `: ${msg}` : ''}`);\n }\n}\n","/**\n * 纯输出通知信息的异常\n *\n * @author lxm\n * @date 2022-09-21 18:09:09\n * @export\n * @class NoticeError\n * @implements {Error}\n */\nexport class NoticeError extends Error {\n name: string = 'notice Error';\n\n constructor(\n public message: string,\n public duration?: number,\n ) {\n super(message);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { debounce } from 'lodash-es';\nimport { getCookie } from 'qx-util';\nimport { isNotNil, isNil } from 'ramda';\nimport { CoreConst } from '../../constant';\n\n/**\n * 获取认证令牌\n *\n * @author chitanda\n * @date 2022-07-20 18:07:39\n * @export\n * @return {*} {(string | null)}\n */\nexport function getToken(): string | null {\n return getCookie(CoreConst.TOKEN);\n}\n\n/**\n * 判断两个数组是否有相同的元素\n *\n * @author lxm\n * @date 2022-09-20 19:09:29\n * @export\n * @param {any[]} arr1\n * @param {any[]} arr2\n * @returns {*} {boolean}\n */\nexport function isOverlap(arr1: any[], arr2: any[]): boolean {\n const newArr = Array.from(new Set([...arr1, ...arr2]));\n return newArr.length !== arr1.length + arr2.length;\n}\n\n/**\n * 是否元素相同\n * @author lxm\n * @date 2023-05-22 12:50:53\n * @export\n * @param {any[]} arr1\n * @param {any[]} arr2\n * @param {string} [field] 比较元素里的某个固定属性\n * @return {*} {boolean}\n */\nexport function isElementSame(\n arr1: any[],\n arr2: any[],\n field?: string,\n): boolean {\n if (arr1.length !== arr2.length) {\n return false;\n }\n const allElements = field\n ? [...arr1.map(item => item[field]), ...arr2.map(item => item[field])]\n : [...arr1, ...arr2];\n\n const newArr = Array.from(new Set(allElements));\n return newArr.length === arr1.length;\n}\n\n/**\n * 防抖并合并每次的参数,\n * 最后一次才会执行\n *\n * @author lxm\n * @date 2022-09-20 21:09:53\n * @export\n * @template T\n * @param {T} func 要防抖的函数\n * @param {(\n * oldParams: Parameters<T>,\n * newParams: Parameters<T>,\n * ) => Parameters<T>} mergeFunc 合并的回调函数\n * @param {number} [wait] 防抖的延迟毫秒数\n * @returns {*}\n */\nexport function debounceAndMerge<T extends (...args: any[]) => any>(\n func: T,\n mergeFunc: (\n oldParams: Parameters<T>,\n newParams: Parameters<T>,\n ) => Parameters<T>,\n wait?: number,\n): (...args: Parameters<T>) => any {\n // 缓存上一次的函数参数\n let oldParams: Parameters<T> | undefined;\n const debounceFunc = debounce((...params: Parameters<T>) => {\n // 防抖函数执行的时候清空缓存参数\n oldParams = undefined;\n return func(...params);\n }, wait);\n return (...args: Parameters<T>) => {\n // 合并参数,并把参数缓存到oldParams里,用新参数调用防抖函数\n let newParams = args;\n if (oldParams) {\n newParams = mergeFunc(oldParams, newParams);\n }\n oldParams = newParams;\n return debounceFunc(...newParams);\n };\n}\n\n/**\n * 防抖并合并每次的参数,最后一次才会执行\n * 绑定方法为异步方法,给每次调用返回最终执行那次的结果\n *\n * @author lxm\n * @date 2022-09-20 21:09:53\n * @export\n * @template T\n * @param {T} func 要防抖的函数\n * @param {(\n * oldParams: Parameters<T>,\n * newParams: Parameters<T>,\n * ) => Parameters<T>} mergeFunc 合并的回调函数\n * @param {number} [wait] 防抖的延迟毫秒数\n * @returns {*}\n */\nexport function debounceAndAsyncMerge<\n T extends (...args: any[]) => Promise<any>,\n>(\n func: T,\n mergeFunc: (\n oldParams: Parameters<T>,\n newParams: Parameters<T>,\n ) => Parameters<T>,\n wait?: number,\n): T {\n // 缓存上一次的函数参数\n let oldParams: Parameters<T> | undefined;\n let promises: Array<{ resolve: any; reject: any }> = [];\n const debounceFunc = debounce(async (...params: Parameters<T>) => {\n // 防抖函数执行的时候清空缓存参数\n oldParams = undefined;\n try {\n const result = await func(...params);\n promises.forEach(promise => {\n promise.resolve(result);\n });\n promises = [];\n return result;\n } catch (error) {\n promises.forEach(promise => {\n promise.reject(error);\n });\n promises = [];\n }\n }, wait);\n const fun = async (...args: Parameters<T>): Promise<unknown> => {\n // 合并参数,并把参数缓存到oldParams里,用新参数调用防抖函数\n let newParams = args;\n if (oldParams) {\n newParams = mergeFunc(oldParams, newParams);\n }\n oldParams = newParams;\n // 执行防抖函数\n debounceFunc(...newParams);\n return new Promise((resolve, reject) => {\n // 阻塞当前调用,当防抖函数被执行后返回\n promises.push({ resolve, reject });\n });\n };\n return fun as T;\n}\n\n/**\n * 把右侧的对象里非空的属性合并到左侧对象里\n * @author lxm\n * @date 2023-05-16 02:23:39\n * @param {IData} l\n * @param {IData} r\n */\nexport function mergeInLeft(l: IData, r: IData): void {\n Object.keys(r).forEach(key => {\n if (isNotNil(r[key])) {\n l[key] = r[key];\n }\n });\n}\n\n/**\n * 把右侧的对象里非空的属性合并到左侧对象属性为空里\n *\n * @author zk\n * @date 2023-06-01 02:06:36\n * @export\n * @param {IData} l\n * @param {IData} r\n */\nexport function mergeDefaultInLeft(l: IData, r: IData): void {\n Object.keys(r).forEach(key => {\n if (isNotNil(r[key]) && isNil(l[key])) {\n l[key] = r[key];\n }\n });\n}\n\n/**\n * 比较两个数组集合,找出相同和不同的元素\n * @author lxm\n * @date 2023-05-29 12:33:55\n * @export\n * @param {IData[]} arr1 数组一\n * @param {IData[]} arr2 数组二\n * @param {string} [keyField] 主键属性,有主键比较主键\n * @return {*} {{\n * more: IData[]; arr1多的元素\n * less: IData[]; arr1少的元素\n * same: IData[]; 相同的元素\n * }}\n */\nexport function compareArr(\n arr1: IData[],\n arr2: IData[],\n keyField?: string,\n): {\n more: IData[];\n less: IData[];\n same: IData[];\n} {\n const all = new Set([...arr1, ...arr2]);\n const more: IData[] = [];\n const less: IData[] = [];\n const same: IData[] = [];\n\n if (keyField) {\n const arr1Keys = arr1.map(item => item[keyField]);\n const arr2Keys = arr2.map(item => item[keyField]);\n all.forEach(item => {\n if (!arr1Keys.includes(item[keyField])) {\n less.push(item);\n return;\n }\n if (!arr2Keys.includes(item[keyField])) {\n more.push(item);\n return;\n }\n same.push(item);\n });\n } else {\n all.forEach(item => {\n if (!arr1.includes(item)) {\n less.push(item);\n return;\n }\n if (!arr2.includes(item)) {\n more.push(item);\n return;\n }\n same.push(item);\n });\n }\n\n return {\n more,\n less,\n same,\n };\n}\n\n/**\n * 转换为数字或undefined\n * - 如果是undefined或null 返回undefined\n * - 其他情况转成数字,能转成数字的返回数字,NaN的返回undefined\n * @author lxm\n * @date 2023-06-08 06:30:57\n * @param {unknown} value 值\n * @return {*} {(number | undefined)}\n */\nexport function toNumberOrNil(value: unknown): number | undefined {\n if (isNil(value)) {\n return undefined;\n }\n const num = Number(value);\n if (Number.isNaN(num)) {\n return undefined;\n }\n return num;\n}\n\nconst SvgPattern = /<svg\\b[^>]*>[\\s\\S]*?<\\/svg>/;\n\n/**\n * 判断字符串是否是svg的格式\n * @author lxm\n * @date 2023-10-17 02:04:28\n * @export\n * @param {string} str\n * @return {*} {boolean}\n */\nexport function isSvg(str: string): boolean {\n return SvgPattern.test(str);\n}\n\n/**\n * 处理浮点数相加\n * @param {number} a\n * @param {number} b\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-08 17:04:09\n */\nexport function plus(a: number, b: number): number {\n let c;\n let d;\n try {\n c = a.toString().split('.')[1].length;\n } catch (f) {\n c = 0;\n }\n try {\n d = b.toString().split('.')[1].length;\n } catch (f) {\n d = 0;\n }\n const e = 10 ** Math.max(c, d);\n return (a * e + b * e) / e;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n AxiosInstance,\n InternalAxiosRequestConfig,\n AxiosResponse,\n} from 'axios';\n\n/**\n * 拦截器基类\n *\n * @author chitanda\n * @date 2022-07-20 18:07:11\n * @export\n * @class Interceptor\n */\nexport class Interceptor {\n /**\n * 请求拦截器绑定标识\n *\n * @author lxm\n * @date 2022-10-27 17:10:20\n * @private\n * @type {number}\n */\n private requestTag?: number;\n\n /**\n * 响应拦截器绑定标识\n *\n * @author lxm\n * @date 2022-10-27 17:10:19\n * @private\n * @type {number}\n */\n private responseTag?: number;\n\n /**\n * 请求之前处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:41\n * @protected\n * @param {InternalAxiosRequestConfig} config\n * @returns {*} {Promise<InternalAxiosRequestConfig>}\n */\n protected async onBeforeRequest(\n config: InternalAxiosRequestConfig,\n ): Promise<InternalAxiosRequestConfig> {\n return config;\n }\n\n /**\n * 请求失败之后处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:40\n * @protected\n * @param {*} error\n */\n protected onRequestError(error: Error): Promise<never> {\n // 处理请求错误\n return Promise.reject(error);\n }\n\n /**\n * 响应成功之后处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:38\n * @protected\n * @param {AxiosResponse} config\n * @returns {*} {Promise<AxiosRequestConfig>}\n */\n protected async onResponseSuccess(\n config: AxiosResponse,\n ): Promise<AxiosResponse> {\n return config;\n }\n\n /**\n * 响应失败之后处理\n *\n * @author lxm\n * @date 2022-10-27 17:10:37\n * @protected\n * @param {*} _error\n */\n protected onResponseError(error: Error): Promise<never> {\n // 处理响应错误\n return Promise.reject(error);\n }\n\n /**\n * 使用拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:28\n * @param {AxiosInstance} instance\n */\n use(instance: AxiosInstance): void {\n this.requestTag = instance.interceptors.request.use(\n this.onBeforeRequest,\n this.onRequestError,\n );\n this.responseTag = instance.interceptors.response.use(\n this.onResponseSuccess,\n this.onResponseError,\n );\n }\n\n /**\n * 移出拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:27\n * @param {AxiosInstance} instance\n */\n eject(instance: AxiosInstance): void {\n if (this.requestTag) {\n instance.interceptors.request.eject(this.requestTag);\n }\n if (this.responseTag) {\n instance.interceptors.response.eject(this.responseTag);\n }\n }\n}\n","import { InternalAxiosRequestConfig } from 'axios';\nimport { getToken } from '../util/util';\nimport { Interceptor } from './interceptor';\n\n/**\n * 核心包拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:48\n * @export\n * @class CoreInterceptor\n * @extends {Interceptor}\n */\nexport class CoreInterceptor extends Interceptor {\n protected async onBeforeRequest(\n config: InternalAxiosRequestConfig,\n ): Promise<InternalAxiosRequestConfig> {\n config = await super.onBeforeRequest(config);\n\n const { headers } = config;\n\n // Set the access token.\n headers.set('Authorization', `Bearer ${getToken()}`);\n\n // Set the system ID.\n let systemId = ibiz.env.dcSystem;\n const { orgData } = ibiz;\n if (orgData) {\n if (orgData.systemid) {\n systemId = orgData.systemid;\n }\n if (orgData.orgid) {\n headers.set('srforgid', orgData.orgid);\n }\n }\n headers.set('srfsystemid', systemId);\n\n return config;\n }\n}\n","import { QXEvent } from 'qx-util';\nimport { IPortalMessage } from '../../../interface';\n\n/**\n * 消息事件\n *\n * @author chitanda\n * @date 2023-09-05 16:09:17\n * @interface MessageCenterEvent\n */\ninterface MessageCenterEvent {\n all: (msg: IPortalMessage) => void;\n}\n\n/**\n * 消息基类,各个类型消息继承此类\n *\n * @author chitanda\n * @date 2023-09-05 16:09:41\n * @export\n * @class MessageBase\n */\nexport abstract class MessageBase {\n /**\n * 事件\n *\n * @author chitanda\n * @date 2023-09-05 16:09:58\n * @protected\n * @type {QXEvent<MessageCenterEvent>}\n */\n protected evt: QXEvent<MessageCenterEvent> = new QXEvent(1000);\n\n constructor(protected parent?: MessageBase) {}\n\n /**\n * 推送标准结构消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:40\n * @param {IPortalMessage} msg\n */\n next(msg: IPortalMessage): void {\n this.evt.emit('all', msg);\n if (this.parent) {\n this.nextParent(msg);\n }\n }\n\n /**\n * 私有方法,专门向父级推送消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:08\n * @protected\n * @param {IPortalMessage} msg\n */\n protected nextParent(msg: IPortalMessage): void {\n if (this.parent) {\n this.parent.evt.emit('all', msg);\n this.parent.nextParent(msg);\n }\n }\n\n /**\n * 订阅消息\n *\n * @author chitanda\n * @date 2023-09-05 15:09:21\n * @param {(msg: IPortalMessage) => void} evt\n */\n on(cb: (msg: IPortalMessage) => void): void {\n this.evt.on('all', cb);\n }\n\n /**\n * 取消订阅\n *\n * @author chitanda\n * @date 2023-09-05 15:09:50\n * @param {(msg: IPortalMessage) => void} cb\n */\n off(cb: (msg: IPortalMessage) => void): void {\n this.evt.off('all', cb);\n }\n}\n","import { MessageBase } from './message-base';\n\n/**\n * 所有消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:34\n * @export\n * @class MessageAll\n * @extends {MessageBase}\n */\nexport class MessageAll extends MessageBase {}\n","import { createUUID } from 'qx-util';\nimport { IPortalMessage } from '../../../../interface';\nimport { MessageBase } from '../../base/message-base';\n\n/**\n * 指令消息基类\n *\n * @author chitanda\n * @date 2023-09-05 16:09:11\n * @export\n * @class CommandBase\n * @extends {MessageBase}\n */\nexport class CommandBase extends MessageBase {\n /**\n * 发送指令消息\n * @param data 更新的数据\n * @param subtype 数据更新 | 数据删除 | 数据创建\n */\n protected sendCommand(data: IData, subtype: IPortalMessage['subtype']): void {\n const msg: IPortalMessage = {\n messageid: createUUID(),\n messagename: 'command',\n type: 'COMMAND',\n subtype,\n data,\n };\n this.next(msg);\n }\n}\n","import { IAppDataEntity } from '../../interface';\nimport { CommandBase } from '../command-base/command-base';\n\n/**\n * 创建指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:57\n * @export\n * @class CommandCreate\n * @extends {CommandBase}\n */\nexport class CommandCreate extends CommandBase {\n /**\n * 发送新建的数据\n *\n * @author chitanda\n * @date 2023-09-05 17:09:13\n * @param {IAppDataEntity} data\n */\n send(data: IAppDataEntity): void {\n this.sendCommand(data, 'OBJECTCREATED');\n }\n}\n","import { IAppDataEntity } from '../../interface';\nimport { CommandBase } from '../command-base/command-base';\n\n/**\n * 更新指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:54\n * @export\n * @class CommandUpdate\n * @extends {CommandBase}\n */\nexport class CommandUpdate extends CommandBase {\n /**\n * 发送更新的数据\n *\n * @author chitanda\n * @date 2023-09-05 17:09:37\n * @param {IAppDataEntity} data\n */\n send(data: IAppDataEntity): void {\n this.sendCommand(data, 'OBJECTUPDATED');\n }\n}\n","import { IAppDataEntity } from '../../interface';\nimport { CommandBase } from '../command-base/command-base';\n\n/**\n * 删除指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:03\n * @export\n * @class CommandRemove\n * @extends {CommandBase}\n */\nexport class CommandRemove extends CommandBase {\n /**\n * 发送删除的数据\n *\n * @author chitanda\n * @date 2023-09-05 17:09:29\n * @param {IAppDataEntity} data\n */\n send(data: IAppDataEntity): void {\n this.sendCommand(data, 'OBJECTREMOVED');\n }\n}\n","import { CommandBase } from '../command-base/command-base';\n\n/**\n * 数据变更指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:49\n * @export\n * @class CommandChange\n * @extends {CommandBase}\n */\nexport class CommandChange extends CommandBase {}\n","import { IPortalAsyncAction } from '../../../../interface';\nimport { CommandBase } from '../command-base/command-base';\n\n/**\n * 异步作业指令消息\n *\n * @author chitanda\n * @date 2023-10-23 17:10:28\n * @export\n * @class CommandAsyncAction\n * @extends {CommandBase}\n */\nexport class CommandAsyncAction extends CommandBase {\n /**\n * 发送 异步作业 指令消息\n *\n * @author chitanda\n * @date 2023-10-23 17:10:46\n * @param {IPortalAsyncAction} data\n */\n send(data: IPortalAsyncAction): void {\n this.sendCommand(data, 'ASYNCACTION');\n }\n}\n","import { createUUID } from 'qx-util';\nimport { IPortalMessage } from '../../../interface';\nimport { MessageBase } from '../base/message-base';\nimport { CommandCreate } from './create/command-create';\nimport { CommandUpdate } from './update/command-update';\nimport { CommandRemove } from './remove/command-remove';\nimport { CommandChange } from './change/command-change';\nimport { CommandAsyncAction } from './async-action/command-async-action';\n\n/**\n * 指令消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:41\n * @export\n * @class MessageCommand\n * @extends {MessageBase}\n */\nexport class MessageCommand extends MessageBase {\n /**\n * 数据变更指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:15\n * @type {CommandChange}\n */\n readonly change: CommandChange = new CommandChange();\n\n /**\n * 新建消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:55\n * @type {CommandCreate}\n */\n readonly create: CommandCreate = new CommandCreate(this);\n\n /**\n * 更新消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:01\n * @type {CommandUpdate}\n */\n readonly update: CommandUpdate = new CommandUpdate(this);\n\n /**\n * 删除消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:05\n * @type {CommandRemove}\n */\n readonly remove: CommandRemove = new CommandRemove(this);\n\n /**\n * 异步作业指令消息\n *\n * @author chitanda\n * @date 2023-10-23 17:10:56\n * @type {CommandAsyncAction}\n */\n readonly asyncAction: CommandAsyncAction = new CommandAsyncAction(this);\n\n /**\n * 推送指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:50\n * @param {IPortalMessage} msg\n */\n next(msg: IPortalMessage): void {\n // 消息分子类型,子类型发完消息后,会让父发消息\n // 所以子类型有父时,会一级一级的往上发消息。不需要在此处发全局消息\n // change 特殊处理,不给父发消息\n switch (msg.subtype) {\n case 'OBJECTCREATED':\n this.create.next(msg);\n this.change.next(msg);\n break;\n case 'OBJECTUPDATED':\n this.update.next(msg);\n this.change.next(msg);\n break;\n case 'OBJECTREMOVED':\n this.remove.next(msg);\n this.change.next(msg);\n break;\n default:\n super.next(msg);\n }\n }\n\n protected nextParent(msg: IPortalMessage): void {\n switch (msg.subtype) {\n case 'OBJECTCREATED':\n this.change.next(msg);\n break;\n case 'OBJECTUPDATED':\n this.change.next(msg);\n break;\n case 'OBJECTREMOVED':\n this.change.next(msg);\n break;\n default:\n }\n super.nextParent(msg);\n }\n\n /**\n * 发送指令消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:35\n * @param {IData} data\n * @param {IPortalMessage['subtype']} subtype\n */\n send(data: IData, subtype: IPortalMessage['subtype']): void {\n const msg: IPortalMessage = {\n messageid: createUUID(),\n messagename: 'command',\n type: 'COMMAND',\n subtype,\n data,\n };\n this.next(msg);\n }\n}\n","import { createUUID } from 'qx-util';\nimport { IPortalMessage } from '../../../interface';\nimport { MessageBase } from '../base/message-base';\n\n/**\n * 日志消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:33\n * @export\n * @class MessageConsole\n * @extends {MessageBase}\n */\nexport class MessageConsole extends MessageBase {\n /**\n * 发送日志消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:25\n * @param {(IData | string)} data\n */\n send(data: IData | string): void {\n const msg: IPortalMessage = {\n messageid: createUUID(),\n messagename: 'console',\n type: 'CONSOLE',\n data,\n };\n this.next(msg);\n }\n}\n","import { IPortalMessage } from '../../interface';\nimport { MessageAll } from './base/message-all';\nimport { MessageCommand } from './command/message-command';\nimport { MessageConsole } from './console/message-console';\n\n/**\n * 界面消息中心\n *\n * @author chitanda\n * @date 2023-09-05 15:09:14\n * @export\n * @class MessageCenter\n */\nexport class MessageCenter {\n /**\n * 所有消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:12\n * @type {MessageAll}\n */\n protected all: MessageAll = new MessageAll();\n\n /**\n * 指令消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:28\n * @type {MessageCommand}\n */\n readonly command: MessageCommand = new MessageCommand(this.all);\n\n /**\n * 日志消息\n *\n * @author chitanda\n * @date 2023-09-05 16:09:48\n * @type {MessageConsole}\n */\n readonly console: MessageConsole = new MessageConsole(this.all);\n\n /**\n * 发送消息\n *\n * @author chitanda\n * @date 2023-09-05 15:09:49\n * @param {IPortalMessage} msg\n */\n next(msg: IPortalMessage): void {\n // 消息分子类型,子类型发完消息后,会让父发消息\n // 所以子类型有父时,会一级一级的往上发消息。不需要在此处发全局消息\n if (msg.type === 'COMMAND') {\n this.command.next(msg);\n } else if (msg.type === 'CONSOLE') {\n this.console.next(msg);\n } else {\n this.all.next(msg);\n }\n }\n\n /**\n * 订阅消息\n *\n * @author chitanda\n * @date 2023-09-05 17:09:32\n * @param {(msg: IPortalMessage) => void} callback\n */\n on(callback: (msg: IPortalMessage) => void): void {\n this.all.on(callback);\n }\n\n /**\n * 取消订阅\n *\n * @author chitanda\n * @date 2023-09-05 17:09:38\n * @param {(msg: IPortalMessage) => void} callback\n */\n off(callback: (msg: IPortalMessage) => void): void {\n this.all.off(callback);\n }\n}\n","export const defaultNamespace = 'ibiz';\nconst statePrefix = 'is-';\n\n/**\n * css bem 命名规则拼接\n * _bem('ibiz', 'layout') => ibiz-layout\n * _bem('ibiz', 'layout', '', 'title') => ibiz-layout__title\n * _bem('ibiz', 'layout', '', '', 'right') => ibiz-layout--right\n * _bem('ibiz', 'layout', '', 'title', 'right') => ibiz-layout__title--right\n * _bem('ibiz', 'layout', 'header', 'title', 'right') => ibiz-layout-header__title--right\n *\n * @author chitanda\n * @date 2022-09-06 11:09:42\n * @param {string} namespace 命名空间\n * @param {string} block 块\n * @param {string} blockSuffix 块后缀\n * @param {string} element 元素\n * @param {string} modifier 修饰符\n * @return {*} {string}\n */\nfunction _bem(\n namespace: string,\n block: string,\n blockSuffix?: string,\n element?: string,\n modifier?: string,\n): string {\n let cls = `${namespace}-${block}`;\n if (blockSuffix) {\n cls += `-${blockSuffix}`;\n }\n if (element) {\n cls += `__${element}`;\n }\n if (modifier) {\n cls += `--${modifier}`;\n }\n return cls;\n}\n\n/**\n * 全局样式处理命名空间\n *\n * @author chitanda\n * @date 2022-09-06 11:09:50\n * @export\n * @class Namespace\n */\nexport class Namespace {\n /**\n * 命名空间\n *\n * @author chitanda\n * @date 2022-09-06 12:09:01\n * @type {string}\n */\n namespace: string;\n\n /**\n * Creates an instance of Namespace.\n *\n * @author chitanda\n * @date 2022-09-06 12:09:12\n * @param {string} block 当前命名空间的根模块,例如组件的名称\n * @param {string} [namespace] 指定命名空间,未指定使用默认值 ibiz\n */\n constructor(\n protected block: string,\n namespace?: string,\n ) {\n this.namespace = namespace || defaultNamespace;\n }\n\n /**\n * namespace-block\n * namespace-block-blockSuffix\n *\n * @author chitanda\n * @date 2022-09-06 12:09:08\n * @param {string} [blockSuffix='']\n * @return {*} {string}\n */\n b(blockSuffix: string = ''): string {\n return _bem(this.namespace, this.block, blockSuffix, '', '');\n }\n\n /**\n * namespace-block__element\n *\n * @author chitanda\n * @date 2022-09-06 12:09:48\n * @param {string} [element]\n * @return {*} {string}\n */\n e(element?: string): string {\n return element ? _bem(this.namespace, this.block, '', element, '') : '';\n }\n\n /**\n * namespace-block--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:37\n * @param {string} [modifier]\n * @return {*} {string}\n */\n m(modifier?: string): string {\n return modifier ? _bem(this.namespace, this.block, '', '', modifier) : '';\n }\n\n /**\n * namespace-block-blockSuffix__element\n *\n * @author chitanda\n * @date 2022-09-06 12:09:52\n * @param {string} [blockSuffix]\n * @param {string} [element]\n * @return {*} {string}\n */\n be(blockSuffix?: string, element?: string): string {\n return blockSuffix && element\n ? _bem(this.namespace, this.block, blockSuffix, element, '')\n : '';\n }\n\n /**\n * namespace-block__element--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:19\n * @param {string} [element]\n * @param {string} [modifier]\n * @return {*} {string}\n */\n em(element?: string, modifier?: string): string {\n return element && modifier\n ? _bem(this.namespace, this.block, '', element, modifier)\n : '';\n }\n\n /**\n * namespace-block-blockSuffix--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:59\n * @param {string} [blockSuffix]\n * @param {string} [modifier]\n * @return {*} {string}\n */\n bm(blockSuffix?: string, modifier?: string): string {\n return blockSuffix && modifier\n ? _bem(this.namespace, this.block, blockSuffix, '', modifier)\n : '';\n }\n\n /**\n * namespace-block-blockSuffix__element--modifier\n *\n * @author chitanda\n * @date 2022-09-06 12:09:37\n * @param {string} [blockSuffix]\n * @param {string} [element]\n * @param {string} [modifier]\n * @return {*} {string}\n */\n bem(blockSuffix?: string, element?: string, modifier?: string): string {\n return blockSuffix && element && modifier\n ? _bem(this.namespace, this.block, blockSuffix, element, modifier)\n : '';\n }\n\n /**\n * 返回状态 class\n *\n * is('loading', false) => '';\n * is('loading', true) => 'is-loading';\n *\n * @author chitanda\n * @date 2022-09-06 12:09:57\n * @param {string} name\n * @param {boolean} [state]\n * @return {*} {string}\n */\n is(name: string, state?: boolean): string {\n return name && state ? `${statePrefix}${name}` : '';\n }\n\n /**\n * 生成使用到的 css 变量 style 对象\n *\n * @author chitanda\n * @date 2022-09-06 15:09:41\n * @param {Record<string, string>} object\n * @return {*} {Record<string, string>}\n */\n cssVar(object: Record<string, string>): Record<string, string> {\n const styles: Record<string, string> = {};\n for (const key in object) {\n if (object[key]) {\n styles[this.cssVarName(key)] = object[key];\n }\n }\n return styles;\n }\n\n /**\n * 生成使用到的 css block 变量 style 对象\n *\n * @author chitanda\n * @date 2022-09-06 15:09:03\n * @param {Record<string, string>} object\n * @return {*} {Record<string, string>}\n */\n cssVarBlock(object: Record<string, string>): Record<string, string> {\n const styles: Record<string, string> = {};\n for (const key in object) {\n if (object[key]) {\n styles[this.cssVarBlockName(key)] = object[key];\n }\n }\n return styles;\n }\n\n /**\n * 生成 css var 变量名称\n *\n * @author chitanda\n * @date 2022-09-06 15:09:21\n * @param {string} name\n * @return {*} {string}\n */\n cssVarName(name: string): string {\n return `--${this.namespace}-${name}`;\n }\n\n /**\n * 生成块 css var 变量名称\n *\n * @author chitanda\n * @date 2022-09-06 15:09:35\n * @param {string} name\n * @return {*} {string}\n */\n cssVarBlockName(name: string): string {\n return `--${this.namespace}-${this.block}-${name}`;\n }\n}\n","import axios, {\n AxiosResponse,\n AxiosResponseHeaders,\n InternalAxiosRequestConfig,\n RawAxiosResponseHeaders,\n} from 'axios';\n\n/**\n * Http请求返回接口\n *\n * @author chitanda\n * @date 2022-08-21 17:08:06\n * @export\n * @interface IHttpResponse\n * @extends {AxiosResponse}\n * @template T\n */\nexport interface IHttpResponse<T = IData> extends AxiosResponse {\n /**\n * 是否请求成功\n *\n * @description 当状态码为 200-299 时认为成功\n * @author chitanda\n * @date 2022-07-14 16:07:59\n * @type {boolean}\n */\n ok: boolean;\n /**\n * 是否为本地仿造响应\n *\n * @description 只有当值为 true 时, 才认为是本地仿造响应\n * @author chitanda\n * @date 2022-08-18 15:08:44\n * @type {boolean}\n */\n local: boolean;\n\n data: T;\n\n /**\n * 当前页\n */\n page?: number;\n\n /**\n * 分页条数\n */\n size?: number;\n\n /**\n * 总条数\n */\n total?: number;\n}\n\n/**\n * 本地请求仿造响应\n *\n * @author chitanda\n * @date 2022-08-21 17:08:00\n * @export\n * @class HttpResponse\n * @implements {IHttpResponse<T>}\n * @template T\n */\nexport class HttpResponse<T = IData> implements IHttpResponse<T> {\n /**\n * 本地仿造响应\n *\n * @author chitanda\n * @date 2022-08-18 15:08:06\n */\n local = true;\n\n ok = false;\n\n data: T;\n\n status: number;\n\n statusText: string;\n\n headers: RawAxiosResponseHeaders | AxiosResponseHeaders = {};\n\n config: InternalAxiosRequestConfig<IData> = {\n headers: new axios.AxiosHeaders(),\n };\n\n /**\n * Creates an instance of HttpResponse.\n *\n * @author chitanda\n * @date 2022-08-18 15:08:11\n * @param {unknown} [data] 返回的数据\n * @param {number} [status] 状态码 (默认为 200)\n * @param {string} [statusText] 状态描述 (默认为空字符)\n */\n constructor(data?: unknown, status?: number, statusText?: string) {\n this.data = data as T;\n this.status = status || 200;\n this.statusText = statusText || '';\n if (this.status >= 200 && this.status < 300) {\n this.ok = true;\n }\n }\n}\n","import axios, {\n AxiosError,\n RawAxiosRequestHeaders,\n AxiosResponse,\n AxiosRequestConfig,\n AxiosInstance,\n CreateAxiosDefaults,\n} from 'axios';\nimport {\n FetchEventSourceInit,\n fetchEventSource,\n} from '@microsoft/fetch-event-source';\nimport { merge } from 'lodash-es';\nimport qs from 'qs';\nimport { notNilEmpty } from 'qx-util';\nimport { mergeDeepRight } from 'ramda';\nimport { HttpError } from '../../error';\nimport { CoreInterceptor } from '../interceptor';\nimport { Interceptor } from '../interceptor/interceptor';\nimport { IHttpResponse } from './http-response';\nimport { getToken } from '../util/util';\n\n/**\n * 全局请求工具类\n *\n * @author chitanda\n * @date 2022-07-14 15:07:42\n * @export\n * @class Net\n */\nexport class Net {\n /**\n * axios实例\n *\n * @author lxm\n * @date 2022-10-27 17:10:18\n * @protected\n * @type {AxiosInstance}\n */\n protected instance: AxiosInstance;\n\n /**\n * 是否为 http || https 开头\n *\n * @author chitanda\n * @date 2022-11-07 14:11:28\n * @protected\n */\n protected urlReg = /^http[s]?:\\/\\/[^\\s]*/;\n\n /**\n * 请求等待队列,防止重复请求。当有完全相同请求参数的请求时,会等待上一个请求完成后把结果返回给当前请求,不会重复请求\n * key: 由请求的 config 生成的字符串,用于唯一标识请求\n * value: 当前正在请求的 Promise\n *\n * @author chitanda\n * @date 2023-06-07 14:06:19\n * @protected\n */\n protected waitRequest = new Map<string, Promise<AxiosResponse>>();\n\n protected get baseUrl(): string {\n return (\n this.instance.defaults.baseURL || `${ibiz.env.baseUrl}/${ibiz.env.appId}`\n );\n }\n\n /**\n * Creates an instance of Net.\n * @author lxm\n * @date 2022-10-27 16:10:05\n * @param {CreateAxiosDefaults} [config] 创建实例用的默认配置\n */\n constructor(config?: CreateAxiosDefaults) {\n this.instance = axios.create(config);\n this.addInterceptor('Default', new CoreInterceptor());\n }\n\n /**\n * 注册的拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:18\n * @type {Map<string, Interceptor>}\n */\n interceptors: Map<string, Interceptor> = new Map();\n\n /**\n * 添加拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:42\n * @param {string} name 唯一标识\n * @param {Interceptor} interceptor 拦截器\n */\n addInterceptor(name: string, interceptor: Interceptor): void {\n interceptor.use(this.instance);\n this.interceptors.set(name, interceptor);\n }\n\n /**\n * 删除拦截器\n *\n * @author lxm\n * @date 2022-10-27 17:10:27\n * @param {string} name 唯一标识\n */\n removeInterceptor(name: string): void {\n const interceptor = this.interceptors.get(name);\n if (interceptor) {\n interceptor.eject(this.instance);\n this.interceptors.delete(name);\n }\n }\n\n /**\n * 预置config,绑定动态的配置\n *\n * @author lxm\n * @date 2022-10-27 16:10:48\n * @readonly\n * @protected\n * @type {AxiosRequestConfig}\n */\n protected get presetConfig(): AxiosRequestConfig {\n return {\n // 请求前缀路径\n baseURL: this.baseUrl,\n headers: {\n 'Content-Type': 'application/json;charset=UTF-8',\n Accept: 'application/json',\n },\n };\n }\n\n /**\n * 从左到右递归合并配置参数(内置第一个合并的预置参数)\n *\n * @author lxm\n * @date 2022-10-27 16:10:09\n * @protected\n * @param {...AxiosRequestConfig[]} configs\n * @returns {*}\n */\n protected mergeConfig(...configs: AxiosRequestConfig[]): AxiosRequestConfig {\n const config = this.presetConfig;\n if (configs.length === 0) {\n return config;\n }\n const { url } = configs[0];\n if (url && this.urlReg.test(url)) {\n delete config.baseURL;\n }\n return merge(config, ...configs);\n }\n\n /**\n * Post 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:30\n * @param {string} url\n * @param {IData} data\n * @param {IParams} [params={}]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async post(\n url: string,\n data: IData,\n params: IParams = {},\n headers: RawAxiosRequestHeaders = {},\n ): Promise<IHttpResponse> {\n url = this.handleAppPresetParam(url, params);\n try {\n const response = await this.request(url, {\n method: 'post',\n data,\n headers,\n });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error as AxiosError);\n }\n }\n\n /**\n * Get 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:24\n * @param {string} url\n * @param {IParams} [params={}]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @param {IParams} [option={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async get(\n url: string,\n params: IParams = {},\n headers: RawAxiosRequestHeaders = {},\n option: AxiosRequestConfig = {},\n ): Promise<IHttpResponse> {\n url = this.attachUrlParam(url, params);\n try {\n const response = await this.request(\n url,\n merge({ method: 'get', headers }, option),\n );\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error as AxiosError);\n }\n }\n\n /**\n * Delete 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:17\n * @param {string} url\n * @param {IParams} [params]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async delete(\n url: string,\n params?: IParams,\n headers: RawAxiosRequestHeaders = {},\n ): Promise<IHttpResponse> {\n url = this.handleAppPresetParam(url, params);\n try {\n const response = await this.request(url, { method: 'delete', headers });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error as AxiosError);\n }\n }\n\n /**\n * Put 请求\n *\n * @author chitanda\n * @date 2022-10-19 11:10:11\n * @param {string} url\n * @param {IData} data\n * @param {IParams} [params={}]\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async put(\n url: string,\n data: IData,\n params: IParams = {},\n headers: RawAxiosRequestHeaders = {},\n ): Promise<IHttpResponse> {\n url = this.handleAppPresetParam(url, params);\n try {\n const response = await this.request(url, {\n method: 'put',\n data,\n headers,\n });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error as AxiosError);\n }\n }\n\n /**\n * 获取模型数据\n *\n * @author chitanda\n * @date 2022-07-14 15:07:15\n * @param {string} url\n * @param {RawAxiosRequestHeaders} [headers={}]\n * @return {*} {Promise<IHttpResponse>}\n */\n async getModel(\n url: string,\n headers: RawAxiosRequestHeaders = {},\n ): Promise<IHttpResponse> {\n try {\n const response = await this.instance.get(url, {\n headers,\n });\n return this.doResponseResult(response);\n } catch (error) {\n throw new HttpError(error as AxiosError);\n }\n }\n\n /**\n * 基础请求方法,会合并预置配置\n *\n * @author lxm\n * @date 2022-10-27 14:10:06\n * @param {string} url\n * @param {AxiosRequestConfig} [config={}]\n * @returns {*} {Promise<IHttpResponse>}\n */\n async request(\n url: string,\n config: AxiosRequestConfig = {},\n ): Promise<IHttpResponse> {\n // axios 请求参数配置\n const cfg = this.mergeConfig({ url }, config);\n // 当前请求的唯一标识\n const key = JSON.stringify(cfg);\n try {\n let requestPromise: Promise<AxiosResponse> | null = null;\n if (!this.waitRequest.has(key)) {\n requestPromise = this.instance.request(cfg);\n this.waitRequest.set(key, requestPromise);\n } else {\n requestPromise = this.waitRequest.get(key)!;\n }\n const response = await requestPromise;\n // 当第一个请求完成后就删除等待队列中的请求\n if (this.waitRequest.has(key)) {\n this.waitRequest.delete(key);\n }\n return this.doResponseResult(response);\n } catch (error) {\n // 请求异常删除等待队列中的请求体\n if (this.waitRequest.has(key)) {\n this.waitRequest.delete(key);\n }\n throw new HttpError(error as AxiosError);\n }\n }\n\n /**\n * 创建标准 axios 请求\n *\n * @author chitanda\n * @date 2023-01-30 15:01:27\n * @param {AxiosRequestConfig<IData>} config\n * @return {*}\n */\n axios(config: AxiosRequestConfig<IData>): Promise<AxiosResponse> {\n return axios(config);\n }\n\n /**\n * 触发 sse 请求\n *\n * @author chitanda\n * @date 2023-10-10 16:10:08\n * @param {string} url\n * @param {IParams} params\n * @param {FetchEventSourceInit} [options={}]\n * @return {*} {Promise<void>}\n */\n async sse(\n url: string,\n params: IParams,\n options: FetchEventSourceInit = {},\n ): Promise<void> {\n url = this.attachUrlParam(this.baseUrl + url, params);\n if (!options.headers) {\n options.headers = {};\n }\n const headers = options.headers!;\n // 补充基本认证信息\n {\n headers.Authorization = `Bearer ${getToken()}`;\n let systemId = ibiz.env.dcSystem;\n const { orgData } = ibiz;\n if (orgData) {\n if (orgData.systemid) {\n systemId = orgData.systemid;\n }\n if (orgData.orgid) {\n headers.srforgid = orgData.orgid;\n }\n }\n headers.srfsystemid = systemId;\n }\n const config = mergeDeepRight(\n {\n openWhenHidden: true,\n method: 'POST',\n },\n options,\n );\n await fetchEventSource(url, config);\n }\n\n /**\n * 统一处理请求返回\n *\n * @author chitanda\n * @date 2022-07-14 16:07:23\n * @private\n * @param {AxiosResponse} response\n * @return {*} {IHttpResponse}\n */\n private doResponseResult(response: AxiosResponse): IHttpResponse {\n const res = response as IHttpResponse;\n if (res.status >= 200 && res.status <= 299) {\n res.ok = true;\n }\n return res;\n }\n\n /**\n * 处理平台预定义参数\n *\n * @author chitanda\n * @date 2022-07-14 15:07:12\n * @private\n * @param {string} url\n * @param {IParams} [params]\n * @return {*} {string}\n */\n private handleAppPresetParam(url: string, params?: IParams): string {\n if (params) {\n const keys = Object.keys(params);\n const tempParam: IParams = {};\n keys.forEach((item: string) => {\n if (item.startsWith('srf') && notNilEmpty(params[item])) {\n tempParam[item] = params[item];\n }\n });\n return this.attachUrlParam(url, params);\n }\n return url;\n }\n\n /**\n * url 附加请求参数,并处理路径的字符转换 encode\n *\n * @author chitanda\n * @date 2022-07-14 15:07:34\n * @private\n * @param {string} url\n * @param {IParams} params\n * @return {*} {string}\n */\n private attachUrlParam(url: string, params: IParams): string {\n {\n // url 转码\n const urlSplit = url.split('?');\n urlSplit[0] = urlSplit[0]\n .split('/')\n .map(item => encodeURIComponent(item))\n .join('/');\n url = urlSplit.length > 1 ? urlSplit.join('?') : urlSplit[0];\n }\n const strParams: string = qs.stringify(params);\n if (notNilEmpty(strParams)) {\n if (url.endsWith('?')) {\n url = `${url}${strParams}`;\n } else if (url.indexOf('?') !== -1 && url.endsWith('&')) {\n url = `${url}${strParams}`;\n } else if (url.indexOf('?') !== -1 && !url.endsWith('&')) {\n url = `${url}&${strParams}`;\n } else {\n url = `${url}?${strParams}`;\n }\n }\n return url;\n }\n}\n","import { notNilEmpty } from 'qx-util';\n\n/**\n * 字符串工具类\n *\n * @author chitanda\n * @date 2021-04-23 20:04:27\n * @export\n * @class StringUtil\n */\nexport class StringUtil {\n /**\n * 上下文替换正则\n *\n * @author chitanda\n * @date 2021-04-23 20:04:01\n * @static\n */\n static contextReg = /\\$\\{context.[a-zA-Z_$][a-zA-Z0-9_$]{1,}\\}/g;\n\n /**\n * 数据替换正则\n *\n * @author chitanda\n * @date 2021-04-23 20:04:09\n * @static\n */\n static dataReg = /\\$\\{data.[a-zA-Z_$][a-zA-Z0-9_$]{1,}\\}/g;\n\n /**\n * 填充字符串中的数据\n *\n * @author chitanda\n * @date 2021-04-23 20:04:17\n * @static\n * @param {string} str\n * @param {*} [context]\n * @param {*} [data]\n * @return {*} {string}\n */\n static fill(str: string, context?: IContext, data?: IData): string {\n if (notNilEmpty(str)) {\n if (notNilEmpty(context)) {\n const strArr = str.match(this.contextReg);\n strArr?.forEach(_key => {\n const key = _key.slice(10, _key.length - 1);\n str = str.replace(`\\${context.${key}}`, context![key] || '');\n });\n }\n if (notNilEmpty(data)) {\n const strArr = str.match(this.dataReg);\n strArr?.forEach(_key => {\n const key = _key.slice(7, _key.length - 1);\n str = str.replace(`\\${data.${key}}`, data![key] || '');\n });\n }\n }\n return str;\n }\n}\n","/**\n * 路径解析助手\n *\n * @author lxm\n * @date 2022-10-11 14:10:12\n * @export\n * @class UrlHelper\n */\nexport class UrlHelper {\n /**\n * 路由路径前面的基础路径\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n * 返回:http://172.16.103.120:30061/portalwebapp/#\n *\n * @author lxm\n * @date 2022-10-11 20:10:29\n * @returns {*}\n */\n static get routeBase(): string {\n const hashIndex = window.location.href.lastIndexOf('#/');\n return window.location.href.slice(0, hashIndex + 1);\n }\n\n /**\n * 应用的的基础路径\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n * 返回:http://172.16.103.120:30061/portalwebapp\n *\n * @author lxm\n * @date 2022-10-11 20:10:29\n * @returns {*}\n */\n static get appBase(): string {\n const { origin, pathname } = window.location;\n return `${origin}${pathname}`.replace(/\\/$/, '');\n }\n\n /**\n * #开始到末尾,即路由地址\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n * 返回:/index/appportalview?params=123\n *\n * @author lxm\n * @date 2022-10-11 16:10:40\n * @returns {*}\n */\n static get routePath(): string {\n return window.location.hash.replace('#', '');\n }\n\n /**\n * 当前地址的全路径,包含域名和参数\n * 如:http://172.16.103.120:30061/portalwebapp/#/index/appportalview?params=123\n *\n * @author lxm\n * @date 2022-10-11 21:10:39\n * @readonly\n * @static\n */\n static get fullPath(): string {\n return window.location.href;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { NOOP } from '../../constant';\n\n/**\n * 计算event的composedPath返回事件路径(兼容了IE)\n *\n * @author lxm\n * @date 2022-10-28 17:10:14\n * @param {MouseEvent} event\n * @returns {*}\n */\nexport function eventPath(event: MouseEvent): (EventTarget | null)[] {\n const path = ((event.composedPath && event.composedPath()) ||\n (event as any).path) as HTMLElement[] | undefined;\n\n if (path != null) return path;\n\n // 浏览器没有提供的,自己递归计算\n function getParents(\n node: HTMLElement,\n memo: HTMLElement[] = [],\n ): HTMLElement[] {\n const parentNode = node.parentNode as HTMLElement | null;\n\n return parentNode\n ? getParents(parentNode, memo.concat([parentNode]))\n : memo;\n }\n\n return [event.target].concat(getParents(event.target as HTMLElement));\n}\n\n/**\n * 监听JS原生事件,返回cleanup回调,调用后删除该监听\n *\n * @author lxm\n * @date 2022-10-28 18:10:36\n * @export\n * @param {EventTarget} target 监听对象\n * @param {string} eventName 监听事件名称\n * @param {(..._args: any[]) => any} listener 监听回调\n * @param {AddEventListenerOptions} options 额外参数\n * @returns {*} {() => void}\n */\nexport function listenJSEvent(\n target: EventTarget,\n eventName: string,\n listener: (..._args: any[]) => any,\n options: AddEventListenerOptions = {},\n): () => void {\n target.addEventListener(eventName, listener, options);\n\n let cleanup = (): void => {\n target.removeEventListener(eventName, listener, options);\n // cleanup方法只能调用一次\n cleanup = NOOP;\n };\n\n return () => {\n cleanup();\n };\n}\n\n/**\n * event是否是在目标元素内部触发的\n *\n * @author lxm\n * @date 2022-10-31 11:10:49\n * @export\n * @param {MouseEvent} event 原生事件\n * @param {HTMLElement} el 目标元素\n * @returns {*} {boolean}\n */\nexport function isEventInside(event: MouseEvent, el: HTMLElement): boolean {\n return el && (event.target === el || eventPath(event).includes(el));\n}\n","import { RuntimeError } from '../../error';\nimport {\n OnClickOutsideHandler,\n OnClickOutsideOptions,\n OnClickOutsideResult,\n} from '../../interface';\nimport { eventPath, isEventInside, listenJSEvent } from '../event/event';\n\nconst defaultWindow = typeof window !== 'undefined' ? window : undefined;\n\n/**\n * 监听目标元素之外的点击事件回调\n *\n * @author lxm\n * @date 2022-10-28 18:10:25\n * @export\n * @param {HTMLElement} target 目标元素\n * @param {OnClickOutsideHandler} handler 触发的时间回调\n * @param {OnClickOutsideOptions} [options={}] 额外配置参数\n * @returns {*} {OnClickOutsideResult}\n */\nexport function onClickOutside(\n target: HTMLElement,\n handler: OnClickOutsideHandler,\n options: OnClickOutsideOptions = {},\n): OnClickOutsideResult {\n const { window = defaultWindow, ignore = [], capture = true } = options;\n\n if (!target) throw new RuntimeError('target元素不存在');\n if (!window) throw new RuntimeError('找不到window');\n\n /** 是否需要监听,为false时handler不会执行 */\n let shouldListen = true;\n\n /**\n * 判断event的触发是否是在元素的外部(排除了ignore元素)\n * @param event 事件对象\n * @returns\n */\n const isOutside = (event: MouseEvent): boolean => {\n // 有一个判断是在内部,则不算外部,返回false\n return ![target, ...ignore].some(el => {\n return isEventInside(event, el);\n });\n };\n\n /** 暂停,所有监听的回调都不执行,用于增强某些ignore无法实现的场景 */\n let isPaused = false;\n const pause = (): void => {\n isPaused = true;\n };\n const proceed = (): void => {\n isPaused = false;\n };\n\n /** pointerup延时触发标识 */\n let fallback: number;\n\n /**\n * 事件监听处理回调\n * @param event 事件对象\n * @returns\n */\n const listener = (event: MouseEvent): void => {\n if (isPaused) return;\n window.clearTimeout(fallback);\n\n // 当需要监听并且最终触发在外部时才需要执行回调\n if (!(shouldListen && isOutside(event))) return;\n\n handler(event);\n };\n\n // 鼠标左键单击先后触发pointerdown,pointerup,click\n // 鼠标右键单击先后触发pointerdown,pointerup\n const cleanups = [\n listenJSEvent(window, 'click', listener, { passive: true, capture }),\n listenJSEvent(\n window,\n 'pointerdown',\n e => {\n if (isPaused) return;\n // 当pointerdown是在内部触发则不需要后续监听\n shouldListen = isOutside(e);\n },\n { passive: true },\n ),\n listenJSEvent(\n window,\n 'pointerup',\n e => {\n if (isPaused) return;\n // 鼠标左键触发才执行\n if (e.button === 0) {\n // 锁死结果避免延时执行时变更\n const path = eventPath(e);\n e.composedPath = (): (EventTarget | null)[] => path;\n fallback = window.setTimeout(() => listener(e), 50);\n }\n },\n { passive: true },\n ),\n ].filter(Boolean);\n\n /**\n * 停止事件监听,移除监听\n */\n const stop = (): void => cleanups.forEach(fn => fn());\n return { stop, pause, proceed };\n}\n","/* eslint-disable no-bitwise */\n/* eslint-disable no-nested-ternary */\nconst r = Math.round;\n\n/**\n * 把颜色字符串转成RGBA数组\n *\n * @param {string} color 颜色字符串\n * @returns {*} {number[]}\n */\nfunction toRGBA(color: string): number[] {\n const l = color.length;\n const rgba = [];\n if (color.slice(0, 3).toLowerCase() === 'rgb') {\n const d = color.match(/([\\d|.%]{1,3})/g)!;\n rgba[0] = parseInt(d[0], 10);\n rgba[1] = parseInt(d[1], 10);\n rgba[2] = parseInt(d[2], 10);\n rgba[3] = d[3]\n ? d[3].indexOf('%') !== -1\n ? parseInt(d[3], 10) / 100\n : parseFloat(d[3])\n : 1;\n } else {\n let d: number;\n if (l < 6)\n d = parseInt(\n String(color[1]) +\n color[1] +\n color[2] +\n color[2] +\n color[3] +\n color[3] +\n (l > 4 ? String(color[4]) + color[4] : ''),\n 16,\n );\n else d = parseInt(color.slice(1), 16);\n rgba[0] = (d >> 16) & 255;\n rgba[1] = (d >> 8) & 255;\n rgba[2] = d & 255;\n rgba[3] =\n l === 9 || l === 5 ? r((((d >> 24) & 255) / 255) * 10000) / 10000 : 1;\n }\n return rgba;\n}\n\n/**\n * 混合两种颜色,颜色格式支持hex和rgb\n * 如:#46b5d555,#fff\n * rgb(245 245 245 / 80%)\n *\n * @param {string} color1 颜色1\n * @param {string} color2 颜色2\n * @param {number} [p=0.5] 颜色1占多少百分比,小数格式\n * @param {(\"hex\" | \"rgb\")} [format=\"hex\"] 输出的格式,hex或rgb\n * @returns {*}\n */\nexport function colorBlend(\n color1: string,\n color2: string,\n p = 0.5,\n format: 'hex' | 'rgb' = 'hex',\n): string {\n color1 = color1.trim();\n color2 = color2.trim();\n const c1 = toRGBA(color1);\n const c2 = toRGBA(color2);\n const result = [\n r((1 - p) * c1[0] + p * c2[0]),\n r((1 - p) * c1[1] + p * c2[1]),\n r((1 - p) * c1[2] + p * c2[2]),\n (1 - p) * c1[3] + p * c2[3],\n ];\n if (format === 'hex') {\n const hex = [\n result[0].toString(16),\n result[1].toString(16),\n result[2].toString(16),\n result[3] === 0 ? '00' : r(result[3] * 255).toString(16),\n ];\n return `#${hex[0]}${hex[1]}${hex[2]}${hex[3]}`;\n }\n return `rgb(${result[0]} ${result[1]} ${result[2]} / ${result[3]})`;\n}\n","/**\n * 根据文件名称计算Mime类型\n *\n * @author lxm\n * @date 2022-11-16 22:11:02\n * @export\n * @param {string} fileName\n * @returns {*}\n */\nexport function calcMimeByFileName(fileName: string): string {\n const ext = fileName.split('.').pop();\n let mime = '';\n switch (ext) {\n case '.wps':\n mime = 'application/kswps';\n break;\n case '.doc':\n mime = 'application/msword';\n break;\n case '.docx':\n mime =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case '.txt':\n mime = 'text/plain';\n break;\n case '.zip':\n mime = 'application/zip';\n break;\n case '.png':\n mime = 'image/png';\n break;\n case '.gif':\n mime = 'image/gif';\n break;\n case '.jpeg':\n mime = 'image/jpeg';\n break;\n case '.jpg':\n mime = 'image/jpeg';\n break;\n case '.rtf':\n mime = 'application/rtf';\n break;\n case '.avi':\n mime = 'video/x-msvideo';\n break;\n case '.gz':\n mime = 'application/x-gzip';\n break;\n case '.tar':\n mime = 'application/x-tar';\n break;\n case '.xlsx':\n mime = 'application/vnd.ms-excel';\n break;\n default:\n mime = '';\n }\n return mime;\n}\n\n/**\n * 判断是否是图片格式\n *\n * @author lxm\n * @date 2022-11-21 13:11:23\n * @export\n * @param {string} fileName\n * @returns {*} {boolean}\n */\nexport function isImage(fileName: string): boolean {\n const ext = fileName.split('.').pop();\n if (!ext) {\n return false;\n }\n const imageTypes = ['.jpeg', 'jpg', 'gif', 'png', 'bmp', 'svg'];\n return imageTypes.includes(ext);\n}\n\n/**\n * 纯JS触发下载文件\n *\n * @author lxm\n * @date 2022-11-16 22:11:24\n * @export\n * @param {Blob} file 文件流Blob\n * @param {string} fileName 文件名称\n */\nexport function downloadFileFromBlob(file: Blob, fileName: string): void {\n // 获取文件名\n const filetype = calcMimeByFileName(fileName);\n // 用blob对象获取文件流\n const blob = new Blob([file], { type: filetype });\n // 通过文件流创建下载链接\n const href = URL.createObjectURL(blob);\n // 创建一个a元素并设置相关属性\n const a = document.createElement('a');\n a.href = href;\n a.download = fileName;\n // 添加a元素到当前网页\n document.body.appendChild(a);\n // 触发a元素的点击事件,实现下载\n a.click();\n // 从当前网页移除a元素\n document.body.removeChild(a);\n // 释放blob对象\n URL.revokeObjectURL(href);\n}\n","import { merge } from 'lodash-es';\n\n/**\n * 文件List转数组\n *\n * @author lxm\n * @date 2022-11-18 13:11:03\n * @export\n * @param {FileList} fileList\n * @returns {*}\n */\nexport function fileListToArr(fileList: FileList): File[] {\n const files = [];\n for (let i = 0; i < fileList.length; i++) {\n files.push(fileList[i]);\n }\n return files;\n}\n\n/**\n * JS打开文件上传操作配置参数\n *\n * @author lxm\n * @date 2022-11-20 21:11:47\n * @export\n * @interface SelectFileOpts\n */\nexport interface SelectFileOpts {\n /**\n * 接受的文件类型\n *\n * @author lxm\n * @date 2022-11-20 21:11:52\n * @type {string}\n */\n accept?: string;\n /**\n * 是否支持多选\n *\n * @author lxm\n * @date 2022-11-20 21:11:52\n * @type {boolean}\n */\n multiple?: boolean;\n /**\n * 选中文件后回调\n *\n * @author lxm\n * @date 2022-11-20 21:11:50\n */\n onSelected: (_fileList: File[]) => void;\n}\n\n/**\n * JS打开文件上传操作\n *\n * @author lxm\n * @date 2022-11-20 21:11:31\n * @export\n * @param {SelectFileOpts} _opts 配置参数\n */\nexport function selectFile(_opts: SelectFileOpts): void {\n const opts: Required<SelectFileOpts> = merge(\n {\n multiple: true,\n accept: '',\n },\n _opts,\n );\n const input = document.createElement('input');\n input.setAttribute('type', 'file');\n input.setAttribute('multiple', `${opts.multiple}`);\n input.setAttribute('accept', opts.accept);\n input.onchange = (e): void => {\n const inputEl = e.target as HTMLInputElement;\n const files = inputEl.files ? fileListToArr(inputEl.files) : [];\n if (files.length === 0) {\n return;\n }\n opts.onSelected(files);\n inputEl.value = ''; // 如果不置空,相同的文件不会触发change事件\n };\n document.body.appendChild(input);\n input.click();\n document.body.removeChild(input);\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable no-param-reassign */\nimport { cloneDeep, isFunction, merge, round, uniqueId } from 'lodash-es';\nimport { RuntimeError } from '../../error';\nimport { HttpResponse } from '../net/http-response';\nimport { selectFile } from './select-file';\n\nexport interface IUploadFile {\n name: string;\n uid: string;\n status: 'uploading' | 'finished' | 'fail' | 'cancel';\n percentage: number;\n response?: HttpResponse;\n error?: unknown;\n}\n\nexport interface IUploadFileOpts {\n uploadUrl: string;\n /**\n * 接受的文件类型\n *\n * @author lxm\n * @date 2022-11-20 21:11:52\n * @type {string}\n */\n accept?: string;\n /**\n * 是否支持多选\n *\n * @author lxm\n * @date 2022-11-20 21:11:52\n * @type {Boolean}\n */\n multiple?: boolean;\n separate?: string;\n request?: (_files: File[]) => Promise<HttpResponse>;\n beforeUpload?: (_fileData: File[], _files: IUploadFile[]) => boolean;\n finish?: (_resultFiles: IUploadFile[]) => void;\n success?: (_resultFiles: IUploadFile[], _res: HttpResponse) => void;\n error?: (_resultFiles: IUploadFile[], _error: unknown) => void;\n progress?: (_files: IUploadFile[]) => void;\n}\n\n/**\n * 使用上传文件逻辑\n *\n * @author lxm\n * @date 2022-11-20 21:11:52\n * @export\n * @param {IUploadFileOpts} _opts\n * @returns {*}\n */\nexport function uploadFile(_opts: IUploadFileOpts): void {\n const opts: Required<IUploadFileOpts> = merge(\n {\n multiple: true,\n accept: '',\n separate: true,\n beforeUpload: (_fileData: File[], _files: IUploadFile[]) => true,\n finish: (_resultFiles: IUploadFile[]) => {},\n success: (_resultFiles: IUploadFile[], _res: HttpResponse) => {},\n error: (_resultFiles: IUploadFile[], _error: unknown) => {},\n progress: (_files: IUploadFile[]) => {},\n },\n _opts,\n );\n\n /**\n * 进度条回调\n *\n * @author lxm\n * @date 2022-11-20 21:11:47\n * @param {IParams} event\n * @param {IUploadFile[]} files\n */\n const onUploadProgress = (event: IParams, files: IUploadFile[]): void => {\n files.forEach(file => {\n file.percentage = round(event.progress * 100);\n });\n opts.progress(cloneDeep(files));\n };\n\n /**\n * 上传请求方法,返回响应对象\n *\n * @author lxm\n * @date 2022-11-18 13:11:57\n * @param {File[]} files\n * @returns {*} {Promise<HttpResponse>}\n */\n const uploadRequest = async (\n files: File[],\n _onProgress: (_event: IParams) => void,\n ): Promise<HttpResponse> => {\n // 自定义上传请求\n if (opts.request && isFunction(opts.request)) {\n return opts.request(files);\n }\n\n // 默认每次单个文件上传,可能存在接口一次上传多个文件,\n const data = new FormData();\n files.forEach(file => {\n data.append('file', file);\n });\n // const res = await ibiz.net.request(opts.uploadUrl, {\n // method: 'post',\n // baseURL: '',\n // data,\n // headers: { 'Content-Type': 'multipart/form-data' },\n // onUploadProgress: onProgress,\n // });\n // return res;\n throw new RuntimeError(`多应用模式等待重新实现请求`);\n };\n\n /**\n * 执行一次上传,可能是一个文件也可能是多个文件\n *\n * @author lxm\n * @date 2022-11-18 14:11:54\n * @param {File[]} files 此次上传文件的集合\n * @returns {*} {Promise<IUploadFile[]>}\n */\n const executeSingleUpload = async (files: File[]): Promise<IUploadFile[]> => {\n const resultFiles: IUploadFile[] = files.map(file => {\n return {\n status: 'uploading',\n name: file.name,\n uid: uniqueId(),\n percentage: 0,\n };\n });\n\n // 上传前回调,可以取消此次下载\n const pass = opts.beforeUpload(files, resultFiles);\n if (!pass) {\n resultFiles.forEach(file => {\n file.status = 'cancel';\n });\n ibiz.log.debug('取消上传', resultFiles);\n return resultFiles;\n }\n\n try {\n const res = await uploadRequest(files, event => {\n onUploadProgress(event, resultFiles);\n });\n resultFiles.forEach(file => {\n file.status = 'finished';\n });\n // 上传成功事件\n opts.success(resultFiles, res);\n resultFiles.forEach(file => {\n file.response = res;\n });\n } catch (error) {\n resultFiles.forEach(file => {\n file.status = 'fail';\n });\n // 上传失败事件\n opts.error(resultFiles, error);\n resultFiles.forEach(file => {\n file.error = error;\n });\n ibiz.log.error(error);\n ibiz.log.error(`${files.map(file => file.name).join(',')}上传失败`);\n }\n return resultFiles;\n };\n\n /**\n * 执行上传文件逻辑\n *\n * @author lxm\n * @date 2022-11-18 13:11:21\n * @param {files} File[] 文件集合\n */\n const uploadFiles = async (files: File[]): Promise<void> => {\n const uploadSequence = opts.separate ? files.map(file => [file]) : [files];\n const res = await Promise.allSettled(\n uploadSequence.map(async sequence => {\n return executeSingleUpload(sequence);\n }),\n );\n\n // 整合所有的返回文件\n const resultFiles: IUploadFile[] = [];\n res.forEach(result => {\n if (result.status === 'fulfilled') {\n resultFiles.push(...result.value);\n }\n });\n\n opts.finish(resultFiles);\n };\n\n const select = (): void => {\n selectFile({\n accept: opts.accept,\n multiple: opts.multiple,\n onSelected: files => {\n uploadFiles(files);\n },\n });\n };\n\n select();\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * 设置延迟wait毫米后执行fun方法,返回fun的返回值\n *\n * @author lxm\n * @date 2023-03-06 08:20:57\n * @export\n * @template T\n * @param {number} wait\n * @param {T} fun\n * @param {any[]} params\n * @returns {*} {Promise<ReturnType<T>>}\n */\nexport async function awaitTimeout<T extends (...args: any) => any>(\n wait: number,\n fun?: T,\n params?: any[],\n): Promise<ReturnType<T> | undefined> {\n await new Promise(resolve => {\n setTimeout(() => {\n resolve(true);\n }, wait);\n });\n if (fun) {\n return fun(...(params || []));\n }\n}\n","import { RuntimeError } from '../../error';\n\n/**\n * 计数插销工具类\n *\n * @author lxm\n * @date 2022-11-24 19:11:49\n * @export\n * @class CountLatch\n */\nexport class CountLatch {\n private promise: Promise<void> | null = null;\n\n private resolve: ((value: void) => void) | null = null;\n\n /**\n * 计数,当前等待的异步逻辑个数\n *\n * @author lxm\n * @date 2022-11-24 19:11:59\n * @type {number}\n */\n count: number = 0;\n\n /**\n * 开启promise\n *\n * @author lxm\n * @date 2022-11-24 19:11:32\n * @private\n */\n private startPromise(): void {\n this.promise = new Promise(resolve => {\n this.resolve = resolve;\n });\n }\n\n /**\n * 结束promise\n *\n * @author lxm\n * @date 2022-11-24 19:11:44\n * @private\n */\n private endPromise(): void {\n if (this.resolve) {\n this.resolve();\n this.resolve = null;\n this.promise = null;\n }\n }\n\n /**\n * 上锁,计数加一\n * 第一次计数,开启异步\n *\n * @author lxm\n * @date 2022-11-24 19:11:27\n */\n lock(): void {\n this.count += 1;\n if (!this.promise) {\n this.startPromise();\n }\n }\n\n /**\n * 解锁,计数减一\n * 归零时结束异步\n *\n * @author lxm\n * @date 2022-11-24 19:11:47\n */\n unlock(): void {\n if (this.count < 1) {\n throw new RuntimeError('lock和unlock次数不匹配!');\n }\n this.count -= 1;\n if (this.count === 0) {\n this.endPromise();\n }\n }\n\n /**\n * 等待,计数归零异步结束\n *\n * @author lxm\n * @date 2022-11-24 19:11:20\n */\n async await(): Promise<void> {\n if (this.promise) {\n await this.promise;\n }\n }\n}\n","/**\n * 设置远程样式表\n *\n * @author lxm\n * @date 2023-02-09 05:46:49\n * @export\n * @param {string} url\n * @returns {*} {Promise<void>}\n */\nexport async function setRemoteStyle(url: string): Promise<void> {\n try {\n const res = await ibiz.net.get(url);\n const styleDom = document.createElement('style');\n styleDom.setAttribute('title', 'app-style-css');\n styleDom.innerText = res.data as unknown as string;\n document.head.appendChild(styleDom);\n } catch (error) {\n ibiz.log.debug('加载远程样式表失败', url);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { mergeDeepRight } from 'ramda';\n\n/** 默认配置参数 */\nconst IterateOpts = {\n /** 子集合属性数组 */\n childrenFields: ['children'],\n};\n\nconst BreakError = new Error('中断操作');\n\n/**\n * 获取子属性集合\n * @author lxm\n * @date 2023-04-20 08:54:32\n * @param {IData} parent\n * @param {string[]} fields 子集合可能的属性名称\n * @return {*} {(IData[] | undefined)}\n */\nfunction getChildField(parent: IData, fields: string[]): IData[] | undefined {\n for (const field of fields) {\n if (parent[field]?.length) {\n return parent[field];\n }\n }\n}\n\nfunction _recursiveIterate(\n parent: IData,\n callback: (item: any) => boolean | void,\n opts?: Partial<typeof IterateOpts>,\n): void {\n const { childrenFields } = mergeDeepRight(IterateOpts, opts || {});\n const children = getChildField(parent, childrenFields);\n if (children?.length) {\n for (const child of children) {\n // 递归自身的子成员\n const isBreak = callback(child);\n // 如果回调返回true则退出\n if (isBreak) {\n throw BreakError;\n }\n\n // 递归孙的成员\n recursiveIterate(child, callback, opts);\n }\n }\n}\n\n/**\n * 递归遍历子元素\n * @author lxm\n * @date 2023-04-23 09:07:06\n * @export\n * @param {IData} parent 父元素\n * @param {(item: any) => boolean} callback 每一个子元素的回调\n * @param {Partial<typeof IterateOpts>} [opts]\n */\nexport function recursiveIterate(\n parent: IData,\n callback: (item: any) => boolean | void,\n opts?: Partial<typeof IterateOpts>,\n): void {\n try {\n _recursiveIterate(parent, callback, opts);\n } catch (error) {\n if (error !== BreakError) {\n throw error;\n }\n }\n}\n\n/** 默认配置参数 */\nconst CompareOpts = {\n ...IterateOpts,\n /** 比较的属性 */\n compareField: 'name',\n};\n\ntype ICompareOpts = Partial<typeof CompareOpts> & {\n /**\n * 自定义比较回调\n * @author lxm\n * @date 2023-04-23 09:06:42\n */\n compareCallback?: (\n child: IData,\n key: string,\n compareField: string,\n ) => boolean;\n};\n\n/**\n * 递归查找子元素\n * @author lxm\n * @date 2023-04-20 08:53:35\n * @export\n * @param {IData} parent 父对象\n * @param {string} key 子元素的比较属性的值\n * @param {ICompareOpts} [opts]\n * @return {*} {(IData | undefined)}\n */\nexport function findRecursiveChild(\n parent: IData,\n key: string,\n opts?: ICompareOpts,\n): IData | undefined {\n const { compareField, compareCallback } = mergeDeepRight(\n CompareOpts,\n opts || {},\n );\n\n // 默认比较方法\n const _compareCallback =\n compareCallback ||\n ((child: IData): boolean => {\n return child[compareField] === key;\n });\n\n // 递归遍历,找到后中断遍历,返回找到项\n let find;\n recursiveIterate(\n parent,\n item => {\n if (_compareCallback(item, key, compareField)) {\n find = item;\n return true;\n }\n },\n opts,\n );\n return find;\n}\n","/**\n * 数据类型转换识别工具类\n * @author lxm\n * @date 2023-08-25 04:33:49\n * @export\n * @class DataTypes\n */\nexport class DataTypes {\n /**\n * 数字类型映射字符串类型\n * @author lxm\n * @date 2023-08-25 04:49:52\n * @static\n * @type {{ [p: number]: string }}\n */\n static readonly typeMap: { [p: number]: string } = {\n 0: 'UNKNOWN',\n 1: 'BIGINT',\n 2: 'BINARY',\n 3: 'BIT',\n 4: 'CHAR',\n 5: 'DATETIME',\n 6: 'DECIMAL',\n 7: 'FLOAT',\n 8: 'IMAGE',\n 9: 'INT',\n 10: 'MONEY',\n 11: 'NCHAR',\n 12: 'NTEXT',\n 13: 'NVARCHAR',\n 14: 'NUMERIC',\n 15: 'REAL',\n 16: 'SMALLDATETIME',\n 17: 'SMALLINT',\n 18: 'SMALLMONEY',\n 19: 'SQL_VARIANT',\n 20: 'SYSNAME',\n 21: 'TEXT',\n 22: 'TIMESTAMP',\n 23: 'TINYINT',\n 24: 'VARBINARY',\n 25: 'VARCHAR',\n 26: 'UNIQUEIDENTIFIER',\n 27: 'DATE', // 纯日期型\n 28: 'TIME', // 纯时间\n 29: 'BIGDECIMAL', // 大数值\n };\n\n /**\n * 是否是数值类型\n * @author lxm\n * @date 2023-08-25 04:53:30\n * @static\n * @param {number} dataType 数据类型(数值)\n * @return {*} {boolean}\n */\n public static isNumber(dataType: number): boolean {\n const numberTypes = [\n 'BIGINT',\n 'BINARY',\n 'DECIMAL',\n 'FLOAT',\n 'INT',\n 'MONEY',\n 'NUMERIC',\n 'REAL',\n 'SMALLINT',\n 'SMALLMONEY',\n 'TINYINT',\n 'VARBINARY',\n ];\n return numberTypes.includes(this.toString(dataType));\n }\n\n /**\n * 是否是日期类型数据\n *\n * @static\n * @param {number} dataType\n * @return {*}\n * @memberof DataTypes\n */\n public static isDate(dataType: number): boolean {\n const dateTypes = ['DATETIME', 'SMALLDATETIME', 'DATE', 'TIME'];\n return dateTypes.includes(this.toString(dataType));\n }\n\n /**\n * 获取字符串数据类型\n * @author lxm\n * @date 2023-08-25 04:53:58\n * @static\n * @param {number} dataType 数据类型(数值)\n * @return {*} {string}\n */\n public static toString(dataType: number): string {\n return this.typeMap[dataType];\n }\n}\n","import { cloneDeepWith, cloneWith, isFunction, isObject } from 'lodash-es';\nimport { mergeDeepRight } from 'ramda';\n\n/**\n * 自定义克隆逻辑,有clone方法的拿clone方法,否则直接用lodash的clone\n * @author lxm\n * @date 2023-10-25 06:12:23\n * @param {unknown} value\n * @return {*} {unknown}\n */\nfunction customizeFn<T>(value: T): T | undefined {\n if (isObject(value) && isFunction((value as IData).clone)) {\n return (value as IData).clone();\n }\n}\n\nexport type CloneOpts = {\n deep?: boolean;\n};\n\nconst DefaultCloneOpts: CloneOpts = {\n deep: true,\n} as const;\n\n/**\n * 克隆方法(如果对象有clone方法会用clone方法调用clone)\n * @author lxm\n * @date 2023-10-25 06:24:18\n * @export\n * @template T\n * @param {readonly} value\n * @param {*} T\n * @param {*} []\n * @param {CloneOpts} [opts]\n * @return {*} {T[]}\n */\nexport function clone<T>(value: T, opts?: CloneOpts): T {\n const options = mergeDeepRight(DefaultCloneOpts, opts || {})!;\n if (options.deep) {\n return cloneDeepWith(value, customizeFn);\n }\n return cloneWith(value, customizeFn);\n}\n","/* eslint-disable default-param-last */\n/* eslint-disable no-bitwise */\n\nimport { RuntimeError } from '../../error';\n\n/**\n * 检查权限码是否有效\n * @author lxm\n * @date 2023-11-10 10:49:57\n * @static\n * @param {number} permission\n */\nfunction validate(permission: number): boolean {\n return !!permission && !(permission & (permission - 1));\n}\n\n/**\n * 检查权限码是否有效,无效抛错\n * @author lxm\n * @date 2023-11-10 10:56:00\n * @private\n * @static\n * @param {number} permission\n */\nfunction validateAndThrow(permission: number): void {\n const isPowerOf2 = validate(permission);\n if (!isPowerOf2) {\n throw new RuntimeError(`${permission}不是2的幂`);\n }\n}\n\n/**\n * 设置权限\n * @author lxm\n * @date 2023-11-10 10:50:22\n * @static\n * @param {number} [allPermissions=0] 当前所有权限\n * @param {number} permission 要设置的权限\n * @return {*} {number}\n */\nfunction setPermission(allPermissions: number = 0, permission: number): number {\n validateAndThrow(permission);\n return allPermissions | permission;\n}\n\n/**\n * 移出权限\n * @author lxm\n * @date 2023-11-10 10:50:45\n * @static\n * @param {number} [allPermissions=0] 当前所有权限\n * @param {number} permission 要移出的权限\n * @return {*} {number}\n */\nfunction removePermission(\n allPermissions: number = 0,\n permission: number,\n): number {\n validateAndThrow(permission);\n return allPermissions & ~permission;\n}\n\n/**\n * 检查是否有某个权限\n * @author lxm\n * @date 2023-11-10 10:50:46\n * @static\n * @param {number} [allPermissions=0]\n * @param {number} permission\n * @return {*} {number}\n */\nfunction checkPermission(\n allPermissions: number = 0,\n permission: number,\n): boolean {\n validateAndThrow(permission);\n return (allPermissions & permission) !== 0;\n}\n\nexport const BitMask = {\n validate,\n setPermission,\n removePermission,\n checkPermission,\n};\n","import Logger from 'loglevel';\nimport prefix from 'loglevel-plugin-prefix';\n\nconst logger = Logger.noConflict();\n\nprefix.reg(logger);\n\nprefix.apply(logger);\n\nexport { logger };\n","import { Logger } from 'loglevel';\nimport { CommandController } from './command';\nimport { Environment } from './environment/environment';\nimport { OrgData } from './interface';\nimport { MessageCenter, Net } from './utils';\nimport { logger } from './utils/logger/logger';\n\n/**\n * 全局对象\n *\n * @author chitanda\n * @date 2022-07-19 16:07:50\n * @export\n * @class IBizSys\n */\nexport class IBizSys {\n /**\n * 环境变量\n *\n * @author chitanda\n * @date 2022-07-19 18:07:04\n */\n env = Environment;\n\n /**\n * 日志输出工具类\n *\n * @author chitanda\n * @date 2023-07-10 18:07:05\n * @type {Logger}\n */\n log: Logger = logger;\n\n /**\n * 网络请求工具类(发送默认请求)\n *\n * @author chitanda\n * @date 2022-07-19 17:07:56\n * @type {Net}\n */\n net: Net = new Net();\n\n /**\n * 指令集\n *\n * @author chitanda\n * @date 2022-07-20 10:07:33\n * @type {AuthService}\n */\n commands: CommandController = new CommandController();\n\n /**\n * 界面消息中心\n *\n * @author chitanda\n * @date 2023-09-05 17:09:38\n * @type {MessageCenter}\n */\n mc: MessageCenter = new MessageCenter();\n\n /**\n * sass 模式下的中心系统标识\n *\n * @author chitanda\n * @date 2022-07-19 18:07:23\n * @type {string}\n */\n orgData?: OrgData;\n\n /**\n * 应用数据\n *\n * @author chitanda\n * @date 2022-07-20 19:07:22\n * @type {IData}\n */\n appData?: IData;\n}\n","import { IBizSys } from './ibizsys';\n\n/**\n * 初始化全局对象\n *\n * @author chitanda\n * @date 2022-07-19 17:07:37\n * @export\n */\nexport function install(): void {\n if (window.ibiz) {\n throw new Error('ibiz 已经存在, 无需重复安装');\n }\n window.ibiz = new IBizSys();\n}\n"],"names":["getBytes","stream","onChunk","reader","result","getLines","onLine","buffer","position","fieldLength","discardTrailingNewline","arr","concat","bufLength","lineStart","lineEnd","getMessages","onId","onRetry","onMessage","message","newMessage","decoder","line","field","valueOffset","value","retry","a","b","res","__rest","s","p","i","EventStreamContentType","DefaultRetryInterval","LastEventId","fetchEventSource","input","_a","inputSignal","inputHeaders","inputOnOpen","onmessage","onclose","onerror","openWhenHidden","inputFetch","rest","resolve","reject","headers","curRequestController","onVisibilityChange","create","retryInterval","retryTimer","dispose","fetch","onopen","defaultOnOpen","response","id","err","interval","innerErr","contentType","_Node","element","Node","LinkedList","node","next","atTheEnd","newNode","oldLast","oldFirst","didRemove","anchor","exports","once","fn","_this","didCall","toDisposable","debounce","func","wait","immediate","timer","args","callNow","throttle","CommandsRegistry","idOrCommand","handler","opts","commands","removeFn","list","keys","key","command","CommandController","bol","CoreConst","NOOP","HttpStatusMessageConst","LoginMode","MenuPermissionMode","IBizContext","context","parent","self","properties","val","item","newContext","clone","IBizParams","params","updateKeyDefine","target","_receiver","allKeys","Environment","HttpError","ModelError","model","msg","RuntimeError","RuntimeModelError","NoticeError","duration","getToken","getCookie","isOverlap","arr1","arr2","isElementSame","allElements","debounceAndMerge","mergeFunc","oldParams","debounceFunc","newParams","debounceAndAsyncMerge","promises","promise","error","mergeInLeft","l","r","isNotNil","mergeDefaultInLeft","isNil","compareArr","keyField","all","more","less","same","arr1Keys","arr2Keys","toNumberOrNil","num","SvgPattern","isSvg","str","plus","c","d","e","Interceptor","config","instance","CoreInterceptor","systemId","orgData","MessageBase","QXEvent","cb","MessageAll","CommandBase","data","subtype","createUUID","CommandCreate","CommandUpdate","CommandRemove","CommandChange","CommandAsyncAction","MessageCommand","MessageConsole","MessageCenter","callback","defaultNamespace","statePrefix","_bem","namespace","block","blockSuffix","modifier","cls","Namespace","name","state","object","styles","HttpResponse","status","statusText","axios","Net","interceptor","configs","url","merge","option","cfg","requestPromise","options","mergeDeepRight","notNilEmpty","urlSplit","strParams","qs","StringUtil","_key","UrlHelper","hashIndex","origin","pathname","eventPath","event","path","getParents","memo","parentNode","listenJSEvent","eventName","listener","cleanup","isEventInside","el","defaultWindow","onClickOutside","window","ignore","capture","shouldListen","isOutside","isPaused","pause","proceed","fallback","cleanups","toRGBA","color","rgba","colorBlend","color1","color2","format","c1","c2","hex","calcMimeByFileName","fileName","ext","mime","isImage","downloadFileFromBlob","file","filetype","blob","href","fileListToArr","fileList","files","selectFile","_opts","inputEl","uploadFile","_fileData","_files","_resultFiles","_res","_error","onUploadProgress","round","cloneDeep","uploadRequest","_onProgress","isFunction","executeSingleUpload","resultFiles","uniqueId","uploadFiles","uploadSequence","sequence","awaitTimeout","fun","CountLatch","setRemoteStyle","styleDom","IterateOpts","BreakError","getChildField","fields","_recursiveIterate","childrenFields","children","child","recursiveIterate","CompareOpts","findRecursiveChild","compareField","compareCallback","_compareCallback","find","DataTypes","dataType","customizeFn","isObject","DefaultCloneOpts","cloneDeepWith","cloneWith","validate","permission","validateAndThrow","setPermission","allPermissions","removePermission","checkPermission","BitMask","logger","Logger","prefix","IBizSys","install"],"mappings":"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","x_google_ignoreList":[0,1]}