const Utils = { toBase64(buffer) { let binary = ''; let bytes = new Uint8Array(buffer); let len = bytes.byteLength; for (let i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); } return window.btoa(binary); }, delayTime: function (time) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, time); }); }, mergeArrayBuffers(buffers) { if(buffers.length == 1) return buffers[0] const byteLength = buffers.reduce((prev , cur) => prev + cur.byteLength , 0) const mergeBuffer = new ArrayBuffer(byteLength) const mergeView = new Uint8Array(mergeBuffer) let offset = 0 for(let i = 0 ; i < buffers.length ; i++) { mergeView.set(new Uint8Array(buffers[i]), offset) offset += buffers[i].byteLength } return mergeBuffer }, getMediaCodeToMsg(code) { if (/device not found/.test(code)) { return '没有发现录音设备'; } else if (/Permission denied/.test(code)) { return '录音权限被禁止'; } return code; }, async isCanableRecorder(delayTime = 1500) { if (!(navigator && navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) return { isSuccess: false, msg: '没有发现音频设备', }; try { const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); stream.getTracks().map((track) => { track.enabled = false; track.stop(); }); await this.delayTime(delayTime); return { isSuccess: true, }; } catch (e) { return { isSuccess: false, msg: this.getMediaCodeToMsg(e?.toString()), }; } }, GetBytesLength: function (str) { let realLength = 0; if (!str) return realLength; for (let i = 0; i < str.length; i++) { const charCode = str.charCodeAt(i); if (charCode >= 0 && charCode <= 128) realLength += 1; else realLength += 2; } return realLength; }, findMenus({ name }) { const result = { widgets: [], } window.globalConfig.widgets.map(widget => this._findMenus({ widget, name, result })) return result }, _findMenus({ widget, name, result }) { if (widget.hideInMenu) return if (name instanceof RegExp) { const isPattern = name.test(widget.label) if (isPattern) { result.widgets.push(widget) } } else if (name == widget.label) { result.widgets.push(widget) } if (widget.widgets && Array.isArray(widget.widgets)) { return widget.widgets.map(widget => this._findMenus({ widget, name, result })) } }, openMenu({ widget = {}, url }) { if (!((widget.url && widget.product) || url)) return const _url = url || `${widget.product}/${widget.url}` window.history.pushState(null, '', `/civbase/${_url}`); }, chineseToNumber(str) { if (str.length == 1) { return this._chineseToNumber(str[0]) } else if (str.length == 3) { const unit = this._chineseToNumber(str[0]) const decade = this._chineseToNumber(str[1]) const threed = this._chineseToNumber(str[2]) return decade * unit + threed } return 0 }, _chineseToNumber(str) { switch (str) { case "一": return 1 case "二": return 2 case "三": return 3 case "四": return 4 case "五": return 5 case "六": return 6 case "七": return 7 case "八": return 8 case "九": return 9 case "十": return 10 } } }; export default Utils;