From 2a7686ef71defab3352049e6d3f4c467e65b3b61 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 24 Feb 2026 18:11:55 +0800 Subject: [PATCH] bugfix --- bricks/build.sh | 3 ++- bricks/header.tmpl | 1 + bricks/menu.js | 2 +- bricks/qr.js | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 bricks/qr.js diff --git a/bricks/build.sh b/bricks/build.sh index c430398..28656d4 100755 --- a/bricks/build.sh +++ b/bricks/build.sh @@ -11,7 +11,8 @@ SOURCES=" page_data_loader.js factory.js uitypesdef.js utils.js uitype.js \ llm.js websocket.js datarow.js tabular.js continueaudio.js \ line.js pie.js bar.js gobang.js period.js iconbarpage.js \ keypress.js asr.js webspeech.js countdown.js progressbar.js \ - qaframe.js svg.js videoplayer.js sctter.js radar.js kline.js heatmap.js map.js" + qaframe.js svg.js videoplayer.js sctter.js radar.js kline.js \ + heatmap.js map.js qr.js " echo ${SOURCES} cat ${SOURCES} > ../dist/bricks.js # uglifyjs --compress --mangle -- ../dist/bricks.js > ../dist/bricks.min.js diff --git a/bricks/header.tmpl b/bricks/header.tmpl index a22d85e..225ca67 100644 --- a/bricks/header.tmpl +++ b/bricks/header.tmpl @@ -32,6 +32,7 @@ + diff --git a/bricks/menu.js b/bricks/menu.js index 453fa14..3cc74d5 100644 --- a/bricks/menu.js +++ b/bricks/menu.js @@ -58,7 +58,7 @@ bricks.Menu = class extends bricks.VScrollPanel { } } var w = await bricks.widgetBuild(desc, this); - if (w && ! w.parent){ + if (w && ! bricks.Factory.isWidgetType(w, 'Popup')){ t.clear_widgets(); t.add_widget(w); } else { diff --git a/bricks/qr.js b/bricks/qr.js new file mode 100644 index 0000000..fb3d00e --- /dev/null +++ b/bricks/qr.js @@ -0,0 +1,41 @@ +var bricks = window.bricks || {}; +bricks.QRCodeScan = class extends bricks.VBox { + constructor(opts){ + opts.width = '300px'; + opts.height = '300px'; + super(opts); + this.scan_config = { + fps: 10, // 每秒尝试识别次数 + qrbox: { width: 250, height: 250 }, // 扫描框大小 + aspectRatio: 1.0, // 保持正方形 + disableFlip: false // 是否禁用镜像(移动端前置摄像头会镜像) + }; + this.bind('click', this.stop.bind(this)) + schedule_once(this.start.bind(this), 0.5) + } + get_qr_result(decodedText, decodedResult){ + this.dispatch('recognized', decodedText) + console.log('decodeText=', decodedText) + this.stop() + } + errorhandle(msg){ + console.log("识别失败:", msg); + } + start(){ + this.scanner = new Html5Qrcode(this.widget_id); + this.scanner.start({ facingMode: "environment" }, + this.scan_config, + this.get_qr_result.bind(this), + this.errorhandle.bind(this) + ).catch(err => { + console.error('启动摄像头失败') + }); + + } + stop(){ + if this.scanner && this.scanner.getState() !== Html5QrcodeScannerState.NOT_STARTED) { + this.scanner.stop() + } + } +} +bricks.Factory.register('QRCodeScan', bricks.QRCodeScan);