This commit is contained in:
yumoqing 2025-08-14 13:30:28 +08:00
parent 17e7e2f912
commit 89e77567e9
3 changed files with 38 additions and 2 deletions

View File

@ -267,6 +267,11 @@ bricks.buildEventHandler = async function(w, desc, event){
rtdata = await bricks.getRealtimeData(w, data_desc); rtdata = await bricks.getRealtimeData(w, data_desc);
} }
switch (desc.actiontype){ switch (desc.actiontype){
caae 'newwindow':
return bricks.buildNewWindowHandler(w, target, rtdata, desc);
break;
case 'iframe':
break;
case 'urlwidget': case 'urlwidget':
return bricks.buildUrlwidgetHandler(w, target, rtdata, desc); return bricks.buildUrlwidgetHandler(w, target, rtdata, desc);
break; 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){ bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){
var options = objcopy(desc.options||{}); var options = objcopy(desc.options||{});
var params = options.params || {}; var params = options.params || {};
@ -370,7 +400,6 @@ bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){
} }
options.params = bricks.extend(params, rtdata); options.params = bricks.extend(params, rtdata);
} }
var opts = { var opts = {
"widgettype":"urlwidget", "widgettype":"urlwidget",
"options":options "options":options

View File

@ -13,7 +13,7 @@ bricks.Iframe = class extends bricks.Layout {
bricks.NewWindow = class extends bricks.JsWidget { bricks.NewWindow = class extends bricks.JsWidget {
constructor(opts){ constructor(opts){
super(opts); super(opts);
window.open(opts.url); window.open(opts.url, target=opts.name || '_blank');
} }
} }

View File

@ -1,6 +1,13 @@
var bricks = window.bricks || {}; var bricks = window.bricks || {};
bricks.bug = false; 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) { function isString(value) {
return typeof value === 'string' || value instanceof String; return typeof value === 'string' || value instanceof String;
} }