From 89e77567e9a4dd322f5da9c4e286751b1ef2ff70 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 14 Aug 2025 13:30:28 +0800 Subject: [PATCH] bugfix --- bricks/bricks.js | 31 ++++++++++++++++++++++++++++++- bricks/iframe.js | 2 +- bricks/utils.js | 7 +++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/bricks/bricks.js b/bricks/bricks.js index 07f635d..786b7cd 100644 --- a/bricks/bricks.js +++ b/bricks/bricks.js @@ -267,6 +267,11 @@ bricks.buildEventHandler = async function(w, desc, event){ rtdata = await bricks.getRealtimeData(w, data_desc); } switch (desc.actiontype){ + caae 'newwindow': + return bricks.buildNewWindowHandler(w, target, rtdata, desc); + break; + case 'iframe': + break; case 'urlwidget': return bricks.buildUrlwidgetHandler(w, target, rtdata, desc); break; @@ -348,6 +353,31 @@ var _buildWidget = async function(from_widget, target, mode, options, desc){ } } +bricks.buildNewWindowHandler = function(w, target, rtdata, desc){ + var options = objcopy(desc.options||{}); + var url = options.url; + var params = options.params; + if (desc.event_params instanceof FormData){ + console.log('can not send Formdata'); + return; + } + rtdata = bricks.extend(rtdata, desc.event_params); + options = bricks.apply_data(options, rtdata); + if (desc.params_mapping){ + rtdata = bricks.map(rtdata, desc.params_mapping.mapping, desc.params_mapping.need_others); + } + options.params = bricks.extend(params, rtdata); + var url = options.url; + url = addParamsToUrl(url, options.params, w); + var opts = { + "widgettype":"NewWindow", + "options":{ + "name":"options.name || '_blank'; + "url": url + } + } + return _buildWidget.bind(null, w, target, desc.mode || 'replace', opts, desc); +} bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){ var options = objcopy(desc.options||{}); var params = options.params || {}; @@ -370,7 +400,6 @@ bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){ } options.params = bricks.extend(params, rtdata); } - var opts = { "widgettype":"urlwidget", "options":options diff --git a/bricks/iframe.js b/bricks/iframe.js index 4bf932c..1c7b6bd 100644 --- a/bricks/iframe.js +++ b/bricks/iframe.js @@ -13,7 +13,7 @@ bricks.Iframe = class extends bricks.Layout { bricks.NewWindow = class extends bricks.JsWidget { constructor(opts){ super(opts); - window.open(opts.url); + window.open(opts.url, target=opts.name || '_blank'); } } diff --git a/bricks/utils.js b/bricks/utils.js index 486b7e6..200d2f1 100644 --- a/bricks/utils.js +++ b/bricks/utils.js @@ -1,6 +1,13 @@ var bricks = window.bricks || {}; bricks.bug = false; +function addParamsToUrl(url, params, widget) { + const urlObj = new URL(url, window.baseURI); // 处理相对和绝对路径 + Object.keys(params).forEach(key => { + urlObj.searchParams.set(key, params[key]); + }); + return urlObj.toString(); +} function isString(value) { return typeof value === 'string' || value instanceof String; }