From 30c43a1267b03050f4c93010bdfa6ce0c23a1d8d Mon Sep 17 00:00:00 2001 From: interestinglife Date: Thu, 14 May 2020 18:09:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=A1=B5=E9=9D=A2=E5=8F=82=E6=95=B0=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/DataSetController.java | 53 ++++++++- .../static/script/datagear-chartForm.js | 5 + .../web/webapp/static/script/datagear-util.js | 6 +- .../analysis/dataSet/dataSet_form.ftl | 112 +++++++++++------- 4 files changed, 131 insertions(+), 45 deletions(-) diff --git a/datagear-web/src/main/java/org/datagear/web/controller/DataSetController.java b/datagear-web/src/main/java/org/datagear/web/controller/DataSetController.java index 92b2a032..a5f89c20 100644 --- a/datagear-web/src/main/java/org/datagear/web/controller/DataSetController.java +++ b/datagear-web/src/main/java/org/datagear/web/controller/DataSetController.java @@ -288,6 +288,14 @@ public class DataSetController extends AbstractSchemaConnController return result; } + @RequestMapping(value = "/resolveSql", produces = CONTENT_TYPE_JSON) + @ResponseBody + public String resolveSql(HttpServletRequest request, HttpServletResponse response, + org.springframework.ui.Model springModel, @RequestBody ResolveSqlParam resolveSqlParam) throws Throwable + { + return resolveSql(resolveSqlParam.getSql(), resolveSqlParam.getParamValues()); + } + protected DataSetSqlSelectResult executeSelect(HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model springModel, SqlDataSetPreview sqlDataSetPreview) throws Throwable { @@ -308,7 +316,7 @@ public class DataSetController extends AbstractSchemaConnController if (fetchSize > 1000) fetchSize = 1000; - final String sqlFinal = getTemplateSqlResolver().resolve(sql, sqlDataSetPreview.getParamValues()); + final String sqlFinal = resolveSql(sql, sqlDataSetPreview.getParamValues()); final int startRowFinal = startRow; final int fetchSizeFinal = fetchSize; @@ -339,6 +347,11 @@ public class DataSetController extends AbstractSchemaConnController return modelSqlResult; } + protected String resolveSql(String sql, Map paramValues) + { + return getTemplateSqlResolver().resolve(sql, paramValues); + } + protected TemplateSqlResolver getTemplateSqlResolver() { return SqlDataSet.TEMPLATE_SQL_RESOLVER; @@ -513,4 +526,42 @@ public class DataSetController extends AbstractSchemaConnController this.returnMeta = returnMeta; } } + + public static class ResolveSqlParam + { + private String sql; + private Map paramValues; + + public ResolveSqlParam() + { + super(); + } + + public ResolveSqlParam(String sql, Map paramValues) + { + super(); + this.sql = sql; + this.paramValues = paramValues; + } + + public String getSql() + { + return sql; + } + + public void setSql(String sql) + { + this.sql = sql; + } + + public Map getParamValues() + { + return paramValues; + } + + public void setParamValues(Map paramValues) + { + this.paramValues = paramValues; + } + } } diff --git a/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-chartForm.js b/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-chartForm.js index 349f983a..f189b98d 100644 --- a/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-chartForm.js +++ b/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-chartForm.js @@ -91,6 +91,11 @@ return $form[0]; }; + chartForm.getDataSetParamValueForm = function($parent) + { + return $(".data-set-param-value-form", $parent); + }; + chartForm.deleteEmptyDataSetParamValue = function(paramValueObj) { if(!paramValueObj) diff --git a/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-util.js b/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-util.js index 230a3566..52de498f 100644 --- a/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-util.js +++ b/datagear-web/src/main/resources/org/datagear/web/webapp/static/script/datagear-util.js @@ -561,11 +561,13 @@ /** * 表单数据转JSON对象。 - * @param form 表单元素、名称/值对象数组,名称支持“a.b[0].c”格式的属性路径 + * @param form 表单元素、表单JQuery对象、名称/值对象数组,名称支持“a.b[0].c”格式的属性路径 */ formToJson: function(form) { - var array = ($.isArray(form) ? form : $(form).serializeArray()); + var $form = $(form); + + var array = ($form.is("form") ? $form.serializeArray() : form); var json = {}; var KeyForArray = $.uid("__KEY_FOR_ARRAY_"); diff --git a/datagear-web/src/main/resources/org/datagear/web/webapp/view/freemarker/analysis/dataSet/dataSet_form.ftl b/datagear-web/src/main/resources/org/datagear/web/webapp/view/freemarker/analysis/dataSet/dataSet_form.ftl index ed0298ab..ce818a21 100644 --- a/datagear-web/src/main/resources/org/datagear/web/webapp/view/freemarker/analysis/dataSet/dataSet_form.ftl +++ b/datagear-web/src/main/resources/org/datagear/web/webapp/view/freemarker/analysis/dataSet/dataSet_form.ftl @@ -65,7 +65,6 @@ readonly 是否只读操作,允许为null
- @@ -122,7 +121,8 @@ readonly 是否只读操作,允许为null return "${contextPath}/analysis/dataSet/" + action; }; - po.getSqlEditorSchemaId = function(){ return po.element("input[name='schemaConnectionFactory.schema.id']").val(); }; + po.getDataSetSchemaId = function(){ return po.element("input[name='schemaConnectionFactory.schema.id']").val(); }; + po.initSqlEditor(); var cursor = po.sqlEditor.getCursorPosition(); po.sqlEditor.session.insert(cursor, po.element("textarea[name='sql']").val()); @@ -177,15 +177,6 @@ readonly 是否只读操作,允许为null activate: function(event, ui) { var isSqlResultTab = (ui.newPanel && ui.newPanel.hasClass("sql-result-table-wrapper")); - - if(isSqlResultTab) - { - if(po.hasFormDataSetParam()) - po.element(".sql-setParamValue-button").show(); - else - po.element(".sql-setParamValue-button").hide(); - } - if(isSqlResultTab && (po.isSqlModified() || !po.sqlResultTableElement().hasClass("sql-result-table-inited"))) { //避免设置参数面板被隐藏 @@ -346,32 +337,23 @@ readonly 是否只读操作,允许为null po.element(".sql-param-value-panel").draggable({ handle : ".ui-widget-header" }); - po.element(".sql-setParamValue-button").click(function() + po.showDataSetParamValuePanel = function(formOptions) { - if(!po.hasFormDataSetParam()) - { - $.tipInfo("<@spring.message code='dataSet.noSqlParamDefined' />"); - return; - } - var $panel = po.element(".sql-param-value-panel"); - chartForm.renderDataSetParamValueForm($(".sql-param-value-panel-content", $panel), po.getFormDataSetParams(), + formOptions = $.extend( { - submit: function() - { - po.sqlPreviewOptions.schemaId = po.element("input[name='schemaConnectionFactory.schema.id']").val(); - po.sqlPreviewOptions.sql = po.sqlEditor.getValue(); - po.sqlPreviewOptions.paramValues = chartForm.deleteEmptyDataSetParamValue($.formToJson(this)); - po.sqlPreviewOptions.startRow = 1; - po.sqlPreview(); - }, - submitText: "<@spring.message code='confirm' />" - }); + submitText: "<@spring.message code='confirm' />", + paramValues: $.formToJson(chartForm.getDataSetParamValueForm($panel)) + }, + formOptions); + + chartForm.renderDataSetParamValueForm($(".sql-param-value-panel-content", $panel), + po.getFormDataSetParams(), formOptions); $panel.show(); $panel.position({ my : "right top", at : "left top", of : po.element("#${pageId}-sql-result")}); - }); + }; $(po.element()).on("click", function(event) { @@ -380,7 +362,7 @@ readonly 是否只读操作,允许为null var $pvp = po.element(".sql-param-value-panel"); if(!$pvp.is(":hidden")) { - if($target.closest(".sql-param-value-panel, .sql-setParamValue-button").length == 0) + if($target.closest(".sql-param-value-panel").length == 0) $pvp.hide(); } }); @@ -395,11 +377,30 @@ readonly 是否只读操作,允许为null { //避免设置参数面板被隐藏 event.stopPropagation(); - po.element(".sql-setParamValue-button").click(); + + po.showDataSetParamValuePanel( + { + submit: function() + { + var table = po.sqlResultTableElement(); + if($.isDatatTable(table)) + { + table.DataTable().destroy(); + table.empty(); + } + + po.sqlPreviewOptions.schemaId = po.getDataSetSchemaId(); + po.sqlPreviewOptions.sql = po.sqlEditor.getValue(); + po.sqlPreviewOptions.paramValues = chartForm.deleteEmptyDataSetParamValue($.formToJson(this)); + po.sqlPreviewOptions.startRow = 1; + po.sqlPreview(); + } + }); + return; } - - po.element(".operation-result").hide(); + else + po.sqlPreviewOptions.paramValues = {}; var table = po.sqlResultTableElement(); if($.isDatatTable(table)) @@ -408,8 +409,8 @@ readonly 是否只读操作,允许为null table.empty(); } - po.sqlPreviewOptions.schemaId = po.element("input[name='schemaConnectionFactory.schema.id']").val(); - po.sqlPreviewOptions.sql = po.sqlEditor.getValue(); + po.sqlPreviewOptions.schemaId = po.getDataSetSchemaId(); + po.sqlPreviewOptions.sql = sql; po.sqlPreviewOptions.startRow = 1; po.sqlPreview(); }); @@ -429,17 +430,45 @@ readonly 是否只读操作,允许为null po.sqlPreview(); }); - po.element(".sql-result-export-button").click(function() + po.element(".sql-result-export-button").click(function(event) { - var schemaId = schemaId = po.element("input[name='schemaConnectionFactory.schema.id']").val(); + var schemaId = po.getDataSetSchemaId(); var sql = po.sqlEditor.getValue(); if(!schemaId || !sql) return; - var options = {data: {"initSqls": sql}}; - $.setGridPageHeightOption(options); - po.open("${contextPath}/dataexchange/"+schemaId+"/export", options); + if(po.hasFormDataSetParam()) + { + //避免设置参数面板被隐藏 + event.stopPropagation(); + po.showDataSetParamValuePanel( + { + submit: function() + { + var paramValues = chartForm.deleteEmptyDataSetParamValue($.formToJson(this)); + + var data = + { + sql: sql, + paramValues: paramValues + }; + + $.postJson(po.url("resolveSql"), data, function(sql) + { + var options = {data: {"initSqls": sql}}; + $.setGridPageHeightOption(options); + po.open("${contextPath}/dataexchange/"+schemaId+"/export", options); + }); + } + }); + } + else + { + var options = {data: {"initSqls": sql}}; + $.setGridPageHeightOption(options); + po.open("${contextPath}/dataexchange/"+schemaId+"/export", options); + } }); po.renderRowNumberColumn = function(data, type, row, meta) @@ -539,7 +568,6 @@ readonly 是否只读操作,允许为null po.element(".no-more-data-flag").hide(); } - po.element(".operation-result").show(); po.sqlEditor.focus(); }, complete : function()