完善主页设置数据分析项目时数据集、图表、看板查询页联动功能

This commit is contained in:
datagear 2020-09-25 18:01:02 +08:00
parent a369a0d5fd
commit 6d499065f2
7 changed files with 146 additions and 46 deletions

View File

@ -602,3 +602,18 @@ ALTER TABLE DATAGEAR_DATA_SET ADD COLUMN DS_AP_ID VARCHAR(50);
ALTER TABLE DATAGEAR_HTML_CHART_WIDGET ADD COLUMN HCW_AP_ID VARCHAR(50);
ALTER TABLE DATAGEAR_HTML_DASHBOARD ADD COLUMN HD_AP_ID VARCHAR(50);
--2020-09-25
--
ALTER TABLE DATAGEAR_DATA_SET ADD FOREIGN KEY (DS_AP_ID) REFERENCES DATAGEAR_ANALYSIS_PROJECT (AP_ID);
ALTER TABLE DATAGEAR_HTML_CHART_WIDGET ADD FOREIGN KEY (HCW_AP_ID) REFERENCES DATAGEAR_ANALYSIS_PROJECT (AP_ID);
ALTER TABLE DATAGEAR_HTML_DASHBOARD ADD FOREIGN KEY (HD_AP_ID) REFERENCES DATAGEAR_ANALYSIS_PROJECT (AP_ID);
--
CREATE INDEX DATAGEAR_DATA_SET_CREATE_USER_ID ON DATAGEAR_DATA_SET(DS_CREATE_USER_ID);
CREATE INDEX DATAGEAR_HTML_CHART_WIDGET_CREATE_USER_ID ON DATAGEAR_HTML_CHART_WIDGET(HCW_CREATE_USER_ID);
CREATE INDEX DATAGEAR_HTML_DASHBOARD_CREATE_USER_ID ON DATAGEAR_HTML_DASHBOARD(HD_CREATE_USER_ID);

View File

@ -148,21 +148,19 @@
<include refid="common.queryCondition" />
</sql>
<!-- 用于外部Mapper引用的公用SQL下面的include必须采用全名不然会出现死循环 -->
<!--
用于外部Mapper引用的公用SQL下面的include必须采用全名不然会出现死循环。
注意:
为了提高查询效率,这里仅查询必要的列
-->
<sql id="queryViewForAnalysisProjectAwareEntity">
SELECT
T.${_iq_}id${_iq_} AS ${_iq_}analysisProject.id${_iq_},
T.${_iq_}name${_iq_} AS ${_iq_}analysisProject.name${_iq_},
T.${_iq_}desc${_iq_} AS ${_iq_}analysisProject.desc${_iq_},
T.${_iq_}createTime${_iq_} AS ${_iq_}analysisProject.createTime${_iq_},
T.${_iq_}createUser.id${_iq_} AS ${_iq_}analysisProject.createUser.id${_iq_},
T.${_iq_}createUser.name${_iq_} AS ${_iq_}analysisProject.createUser.name${_iq_},
T.${_iq_}createUser.realName${_iq_} AS ${_iq_}analysisProject.createUser.realName${_iq_},
T.${_iq_}createUser.admin${_iq_} AS ${_iq_}analysisProject.createUser.admin${_iq_},
T.${_iq_}createUser.anonymous${_iq_} AS ${_iq_}analysisProject.createUser.anonymous${_iq_},
T.${_iq_}createUser.createTime${_iq_} AS ${_iq_}analysisProject.createUser.createTime${_iq_}
A.AP_ID AS ${_iq_}analysisProject.id${_iq_},
A.AP_NAME AS ${_iq_}analysisProject.name${_iq_},
A.AP_CREATE_TIME AS ${_iq_}analysisProject.createTime${_iq_},
A.AP_CREATE_USER_ID AS ${_iq_}analysisProject.createUser.id${_iq_}
FROM
(<include refid="org.datagear.management.domain.AnalysisProject.queryView" />) T
DATAGEAR_ANALYSIS_PROJECT A
</sql>
<!--

View File

@ -135,17 +135,22 @@ public class AnalysisProjectController extends AbstractController
return "/analysis/analysisProject/analysisProject_form";
}
@RequestMapping(value = "/getById", produces = CONTENT_TYPE_JSON)
@RequestMapping(value = "/getByIdSilently", produces = CONTENT_TYPE_JSON)
@ResponseBody
public AnalysisProject getById(HttpServletRequest request, HttpServletResponse response,
public AnalysisProject getByIdSilently(HttpServletRequest request, HttpServletResponse response,
org.springframework.ui.Model model, @RequestParam("id") String id)
{
User user = WebUtils.getUser(request, response);
AnalysisProject analysisProject = this.analysisProjectService.getById(user, id);
AnalysisProject analysisProject = null;
if (analysisProject == null)
throw new RecordNotFoundException();
try
{
analysisProject = this.analysisProjectService.getById(user, id);
}
catch (Throwable t)
{
}
return analysisProject;
}

View File

@ -1471,21 +1471,24 @@
}
},
isResizeDataTableWhenShow : function($tabsPanel)
isResizeDataTableWhenShow : function($panel)
{
return ($tabsPanel.attr("resize-table-when-show") == "1");
return ($panel.attr("resize-table-when-show") == "1");
},
setResizeDataTableWhenShow : function($tabsPanel)
setResizeDataTableWhenShow : function($panel)
{
$tabsPanel.attr("resize-table-when-show", "1");
$panel.attr("resize-table-when-show", "1");
},
clearResizeDataTableWhenShow : function($tabsPanel)
clearResizeDataTableWhenShow : function($panel)
{
$tabsPanel.removeAttr("resize-table-when-show");
$panel.removeAttr("resize-table-when-show");
},
/**可显示、隐藏的包含DataTable的面板样式标识*/
TOGGLABLE_TABLE_PANEL_CLASS_NAME : "togglable-table-panel",
/**
* 为DataTable绑定window重设大小事件
*/
@ -1498,10 +1501,10 @@
//忽略隐藏选项卡中的表格调整,仅在选项卡显示时才调整,
//一是DataTables对隐藏表格的宽度计算有问题另外绑定太多处理函数会影响jquery.resizeable组件的效率
var tabsPanel = $dataTable0.closest(".ui-tabs-panel");
if(tabsPanel.is(":hidden"))
var toggablePanel = $dataTable0.closest(".ui-tabs-panel, ." + $.TOGGLABLE_TABLE_PANEL_CLASS_NAME);
if(toggablePanel.is(":hidden"))
{
$.setResizeDataTableWhenShow(tabsPanel);
$.setResizeDataTableWhenShow(toggablePanel);
return;
}
@ -1524,18 +1527,18 @@
$(window).bind('resize', resizeHandler);
//如果表格处于选项卡页中,则在选项卡显示时,调整表格大小
var tabsPanel = $(dataTableElements[0]).closest(".ui-tabs-panel");
if(tabsPanel.length > 0)
var toggablePanel = $(dataTableElements[0]).closest(".ui-tabs-panel, ." + $.TOGGLABLE_TABLE_PANEL_CLASS_NAME);
if(toggablePanel.length > 0)
{
tabsPanel.data("showCallback", function($tabsPanel)
$.bindPanelShowCallback(toggablePanel, function($panel)
{
if(!$.isResizeDataTableWhenShow(tabsPanel))
if(!$.isResizeDataTableWhenShow($panel))
return;
var changedHeight = calChangedDataTableHeightFunc();
$.updateDataTableHeight(dataTableElements, changedHeight, true);
$.clearResizeDataTableWhenShow(tabsPanel);
$.clearResizeDataTableWhenShow($panel);
});
}
@ -1547,13 +1550,34 @@
return $table.hasClass("dataTable");
},
callTabsPanelShowCallback : function($tabsPanel)
/**
* 为指定面板元素绑定显示时回调函数
*/
bindPanelShowCallback: function($panel, callback)
{
var panelShowCallback = $tabsPanel.data("showCallback");
if(panelShowCallback)
panelShowCallback($tabsPanel);
var callbacks = $panel.data("_SHOW_CALLBACK");
if(callbacks == null)
{
callbacks = [];
$panel.data("_SHOW_CALLBACK", callbacks);
}
var subTabs = $tabsPanel.find(".ui-tabs");
callbacks.push(callback);
},
/**
* 调用面板元素绑定的显示时回调函数
*/
callPanelShowCallback : function($panel)
{
var callbacks = $panel.data("_SHOW_CALLBACK");
if(callbacks)
{
for(var i=0; i<callbacks.length; i++)
callbacks[i]($panel);
}
var subTabs = $panel.find(".ui-tabs");
if(subTabs.length > 0)
{
subTabs.each(function()
@ -1569,7 +1593,7 @@
var subTabPanel = $("> #"+subTabId, $this);
$.callTabsPanelShowCallback(subTabPanel);
$.callPanelShowCallback(subTabPanel);
});
}
},

View File

@ -8,7 +8,6 @@ page_obj_searchform_js.ftl 或者 page_obj_searchform_data_filter.ftl
(function(po)
{
po.getSearchParamSuper = po.getSearchParam;
po.getSearchParam = function()
{
var param = po.getSearchParamSuper();
@ -22,17 +21,55 @@ page_obj_searchform_js.ftl 或者 page_obj_searchform_data_filter.ftl
{
var id = null;
//页面处于主页选项卡内
if($.analysisProjectContext)
{
var analysisProject = $.analysisProjectContext.value();
id = (analysisProject == null ? null : analysisProject.id);
id = $.analysisProjectContext.valueId();
}
//当页面在新窗口打开时
//页面处于新打开窗口内
else
id = $.cookie("${statics['org.datagear.web.controller.AbstractController'].KEY_ANALYSIS_PROJECT_ID}");
{
//新窗口打开时不应使用cookie中的当前值因为不符合直观感受页面中并无相关展示信息
//id = $.cookie("${statics['org.datagear.web.controller.AbstractController'].KEY_ANALYSIS_PROJECT_ID}");
id = null;
}
return id;
};
//页面处于主页选项卡内
if($.analysisProjectContext)
{
po.currentAnalysisProject = $.analysisProjectContext.value();
$.analysisProjectContext.addListener(function(analysisProject)
{
var refresh = true;
var myTabsPanel = po.element().closest(".ui-tabs-panel");
//所在选项卡隐藏时先不刷新,待显示时再刷新
if(myTabsPanel.length > 0 && myTabsPanel.is(":hidden"))
refresh = false;
if(refresh)
{
po.searchForm().submit();
po.currentAnalysisProject = analysisProject;
}
});
//选项卡显示时刷新
var myTabsPanel = po.element().closest(".ui-tabs-panel");
$.bindPanelShowCallback(myTabsPanel, function()
{
if(!$.analysisProjectContext.isValue(po.currentAnalysisProject))
{
po.searchForm().submit();
po.currentAnalysisProject = $.analysisProjectContext.value();
}
});
}
})
(${pageId});
</script>

View File

@ -512,9 +512,11 @@ ${detectNewVersionScript}
$.ajax(
{
url: "${contextPath}/analysis/project/getById?id=" + cookieId,
url: "${contextPath}/analysis/project/getByIdSilently?id=" + cookieId,
success: function(analysisProject)
{
analysisProject = (!analysisProject ? null : analysisProject);
_this.value(analysisProject);
callback(analysisProject);
},
@ -551,10 +553,26 @@ ${detectNewVersionScript}
if(notify)
{
for(var i=0; i<this._listeners.length; i++)
this._listeners[i].update(this._value, previousValue);
this._listeners[i](this._value, previousValue);
}
},
//获取当前值的ID。
valueId: function()
{
var value = this.value();
return (value == null ? null : value.id);
},
//当前值是否是指定的值。
isValue: function(analysisProject)
{
var id = this.valueId();
var pid = (analysisProject == null ? null : analysisProject.id);
return (id == pid);
},
/**
* 添加监听器。
*
@ -577,6 +595,8 @@ ${detectNewVersionScript}
po.element(".analysis-project-operation-group", dap).controlgroup();
po.element(".analysis-project-list-panel", dap).addClass($.TOGGLABLE_TABLE_PANEL_CLASS_NAME);
po.element(".analysis-project-current-value", dap).click(function()
{
var panel = po.element(".analysis-project-list-panel", dap);
@ -587,6 +607,7 @@ ${detectNewVersionScript}
var _thisValue = this;
panel.show();
$.callPanelShowCallback(panel);
var loaded = panelContent.hasClass("analysis-project-loaded");
@ -1324,7 +1345,7 @@ ${detectNewVersionScript}
if(newSchemaId)
$(".category-bar.category-bar-"+newSchemaId, tabsNav).addClass("ui-state-active");
$.callTabsPanelShowCallback(newPanel);
$.callPanelShowCallback(newPanel);
}
});

View File

@ -1425,7 +1425,7 @@ Schema schema 数据库不允许为null
$(".result-message-buttons", resultOperations).show();
}
$.callTabsPanelShowCallback(newPanel);
$.callPanelShowCallback(newPanel);
}
});