mirror of
https://github.com/getrebuild/rebuild.git
synced 2025-02-16 10:22:59 +08:00
EasyEntityConfigProps
This commit is contained in:
parent
c25a22a191
commit
4a821b8b64
10 changed files with 108 additions and 95 deletions
|
@ -1,5 +1,5 @@
|
|||
module.exports = {
|
||||
printWidth: 160,
|
||||
printWidth: 200,
|
||||
singleQuote: true,
|
||||
bracketSpacing: true,
|
||||
proseWrap: 'preserve',
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
Copyright (c) REBUILD <https://getrebuild.com/> and/or its owners. All rights reserved.
|
||||
|
||||
rebuild is dual-licensed under commercial and open source licenses (GPLv3).
|
||||
See LICENSE and COMMERCIAL in the project root for license information.
|
||||
*/
|
||||
|
||||
package com.rebuild.core.metadata.impl;
|
||||
|
||||
/**
|
||||
* @author devezhao
|
||||
* @since 2021/7/22
|
||||
*/
|
||||
public class EasyEntityConfigProps {
|
||||
|
||||
/**
|
||||
* 隐藏常用查询面板
|
||||
*/
|
||||
public static final String ADV_LIST_HIDE_FILTERS = "advListHideFilters";
|
||||
/**
|
||||
* 隐藏图表面板
|
||||
*/
|
||||
public static final String ADV_LIST_HIDE_CHARTS = "advListHideCharts";
|
||||
}
|
|
@ -243,6 +243,7 @@ public class MetaEntityController extends BaseController {
|
|||
mv.getModel().put("entityLabel", entityMeta.getLabel());
|
||||
mv.getModel().put("icon", entityMeta.getIcon());
|
||||
mv.getModel().put("comments", entityMeta.getComments());
|
||||
mv.getModel().put("entityCode", entityMeta.getRawMeta().getEntityCode());
|
||||
return entityMeta;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,11 +15,15 @@ import com.alibaba.fastjson.JSONObject;
|
|||
import com.rebuild.core.Application;
|
||||
import com.rebuild.core.configuration.general.DataListManager;
|
||||
import com.rebuild.core.metadata.MetadataHelper;
|
||||
import com.rebuild.core.metadata.easymeta.EasyEntity;
|
||||
import com.rebuild.core.metadata.easymeta.EasyMetaFactory;
|
||||
import com.rebuild.core.metadata.impl.EasyEntityConfigProps;
|
||||
import com.rebuild.core.privileges.bizz.ZeroEntry;
|
||||
import com.rebuild.core.support.general.DataListBuilder;
|
||||
import com.rebuild.core.support.general.DataListBuilderImpl;
|
||||
import com.rebuild.core.support.i18n.Language;
|
||||
import com.rebuild.web.EntityController;
|
||||
import org.apache.commons.lang.BooleanUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
|
@ -63,6 +67,15 @@ public class GeneralListController extends EntityController {
|
|||
mv.getModel().put(ZeroEntry.AllowBatchUpdate.name(),
|
||||
Application.getPrivilegesManager().allow(user, ZeroEntry.AllowBatchUpdate));
|
||||
|
||||
// 扩展配置
|
||||
EasyEntity easyEntity = EasyMetaFactory.valueOf(useEntity);
|
||||
String advListHideFilters = easyEntity.getExtraAttr(EasyEntityConfigProps.ADV_LIST_HIDE_FILTERS);
|
||||
String advListHideCharts = easyEntity.getExtraAttr(EasyEntityConfigProps.ADV_LIST_HIDE_CHARTS);
|
||||
mv.getModel().put(EasyEntityConfigProps.ADV_LIST_HIDE_FILTERS, advListHideFilters);
|
||||
mv.getModel().put(EasyEntityConfigProps.ADV_LIST_HIDE_CHARTS, advListHideCharts);
|
||||
mv.getModel().put("hideAside",
|
||||
BooleanUtils.toBoolean(advListHideFilters) && BooleanUtils.toBoolean(advListHideCharts));
|
||||
|
||||
return mv;
|
||||
}
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
<div class="form-group row">
|
||||
<label class="col-md-12 col-xl-3 col-lg-4 col-form-label text-lg-right">[[${bundle.L('内部标识')}]]</label>
|
||||
<div class="col-md-12 col-xl-6 col-lg-8">
|
||||
<input class="form-control form-control-sm" type="text" readonly id="entityName" th:value="${entityName}" />
|
||||
<input class="form-control form-control-sm" type="text" readonly id="entityName" th:value="${entityName + ' (' + entityCode + ')'}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
|
@ -81,6 +81,19 @@
|
|||
<textarea class="form-control form-control-sm row2x" id="comments" th:data-o="${comments}" th:placeholder="${bundle.L('可选')}">[[${comments}]]</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row bosskey-show">
|
||||
<label class="col-md-12 col-xl-3 col-lg-4 col-form-label text-lg-right pt-1">[[${bundle.L('高级配置')}]]</label>
|
||||
<div class="col-md-12 col-xl-6 col-lg-8">
|
||||
<label class="custom-control custom-control-sm custom-checkbox">
|
||||
<input class="custom-control-input" type="checkbox" id="advListHideFilters" />
|
||||
<span class="custom-control-label"> [[${bundle.L('隐藏列表页侧栏常用查询')}]]</span>
|
||||
</label>
|
||||
<label class="custom-control custom-control-sm custom-checkbox mb-1">
|
||||
<input class="custom-control-input" type="checkbox" id="advListHideCharts" />
|
||||
<span class="custom-control-label"> [[${bundle.L('隐藏列表页侧栏图表')}]]</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row footer">
|
||||
<div class="col-md-12 col-xl-6 col-lg-8 offset-xl-3 offset-lg-4">
|
||||
<div class="J_action hide">
|
||||
|
|
|
@ -35,12 +35,12 @@ $(document).ready(function () {
|
|||
const icon = $val('#entityIcon')
|
||||
if (icon) data.icon = icon
|
||||
|
||||
const quickFields = $('#quickFields').val().join(',')
|
||||
if (quickFields !== wpc.extConfig.quickFields) {
|
||||
data.extConfig = {
|
||||
quickFields: quickFields,
|
||||
}
|
||||
const extConfig = {
|
||||
quickFields: $('#quickFields').val().join(','),
|
||||
advListHideFilters: $val('#advListHideFilters'),
|
||||
advListHideCharts: $val('#advListHideCharts'),
|
||||
}
|
||||
if (!$same(extConfig, wpc.extConfig)) data.extConfig = extConfig
|
||||
|
||||
data = $cleanMap(data)
|
||||
if (Object.keys(data).length === 0) {
|
||||
|
@ -144,4 +144,7 @@ $(document).ready(function () {
|
|||
$('#quickFields').val(wpc.extConfig.quickFields.split(',')).trigger('change')
|
||||
}
|
||||
})
|
||||
|
||||
if (wpc.extConfig.advListHideFilters) $('#advListHideFilters').attr('checked', true)
|
||||
if (wpc.extConfig.advListHideCharts) $('#advListHideCharts').attr('checked', true)
|
||||
})
|
||||
|
|
|
@ -10,21 +10,7 @@ const wpc = window.__PageConfig
|
|||
const __gExtConfig = {}
|
||||
|
||||
const SHOW_REPEATABLE = ['TEXT', 'DATE', 'DATETIME', 'EMAIL', 'URL', 'PHONE', 'REFERENCE', 'CLASSIFICATION']
|
||||
const SHOW_DEFAULTVALUE = [
|
||||
'TEXT',
|
||||
'NTEXT',
|
||||
'EMAIL',
|
||||
'PHONE',
|
||||
'URL',
|
||||
'NUMBER',
|
||||
'DECIMAL',
|
||||
'DATE',
|
||||
'DATETIME',
|
||||
'BOOL',
|
||||
'CLASSIFICATION',
|
||||
'REFERENCE',
|
||||
'N2NREFERENCE',
|
||||
]
|
||||
const SHOW_DEFAULTVALUE = ['TEXT', 'NTEXT', 'EMAIL', 'PHONE', 'URL', 'NUMBER', 'DECIMAL', 'DATE', 'DATETIME', 'BOOL', 'CLASSIFICATION', 'REFERENCE', 'N2NREFERENCE']
|
||||
|
||||
$(document).ready(function () {
|
||||
const dt = wpc.fieldType
|
||||
|
@ -235,9 +221,7 @@ const _handlePicklist = function (dt) {
|
|||
})
|
||||
if (res.data.length > 5) $('#picklist-items').parent().removeClass('autoh')
|
||||
})
|
||||
$('.J_picklist-edit').click(() =>
|
||||
RbModal.create(`/p/admin/metadata/picklist-editor?entity=${wpc.entityName}&field=${wpc.fieldName}&multi=${dt === 'MULTISELECT'}`, $L('选项配置'))
|
||||
)
|
||||
$('.J_picklist-edit').click(() => RbModal.create(`/p/admin/metadata/picklist-editor?entity=${wpc.entityName}&field=${wpc.fieldName}&multi=${dt === 'MULTISELECT'}`, $L('选项配置')))
|
||||
}
|
||||
|
||||
const _handleSeries = function () {
|
||||
|
@ -329,9 +313,7 @@ const _handleClassification = function (useClassification) {
|
|||
}
|
||||
}
|
||||
|
||||
const $append = $(
|
||||
`<button class="btn btn-secondary mw-auto" type="button" title="${$L('选择默认值')}"><i class="icon zmdi zmdi-search"></i></button>`
|
||||
).appendTo('.J_defaultValue-append')
|
||||
const $append = $(`<button class="btn btn-secondary mw-auto" type="button" title="${$L('选择默认值')}"><i class="icon zmdi zmdi-search"></i></button>`).appendTo('.J_defaultValue-append')
|
||||
|
||||
$.get(`/admin/metadata/classification/info?id=${useClassification}`, (res) => {
|
||||
$('#useClassification a')
|
||||
|
@ -367,13 +349,9 @@ const _handleReference = function (isN2N) {
|
|||
if (advFilter) {
|
||||
advFilter.show()
|
||||
} else {
|
||||
renderRbcomp(
|
||||
<AdvFilter title={$L('附加过滤条件')} inModal={true} canNoFilters={true} entity={referenceEntity} filter={dataFilter} confirm={saveFilter} />,
|
||||
null,
|
||||
function () {
|
||||
advFilter = this
|
||||
}
|
||||
)
|
||||
renderRbcomp(<AdvFilter title={$L('附加过滤条件')} inModal={true} canNoFilters={true} entity={referenceEntity} filter={dataFilter} confirm={saveFilter} />, null, function () {
|
||||
advFilter = this
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -397,9 +375,7 @@ const _handleReference = function (isN2N) {
|
|||
}
|
||||
}
|
||||
|
||||
const $append = $(
|
||||
`<button class="btn btn-secondary mw-auto" type="button" title="${$L('选择默认值')}"><i class="icon zmdi zmdi-search"></i></button>`
|
||||
).appendTo('.J_defaultValue-append')
|
||||
const $append = $(`<button class="btn btn-secondary mw-auto" type="button" title="${$L('选择默认值')}"><i class="icon zmdi zmdi-search"></i></button>`).appendTo('.J_defaultValue-append')
|
||||
$dv.attr('readonly', true)
|
||||
$append.click(() => _showSearcher())
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ class RbList extends React.Component {
|
|||
<div>
|
||||
<label className="custom-control custom-control-sm custom-checkbox">
|
||||
<input className="custom-control-input" type="checkbox" onChange={(e) => this._toggleRows(e)} ref={(c) => (this._checkAll = c)} />
|
||||
<span className="custom-control-label"></span>
|
||||
<i className="custom-control-label" />
|
||||
</label>
|
||||
</div>
|
||||
</th>
|
||||
|
@ -69,12 +69,7 @@ class RbList extends React.Component {
|
|||
const styles = { width: cWidth + 'px' }
|
||||
const clazz = `unselect ${item.unsort ? '' : 'sortable'} ${idx === 0 && this.fixedColumns ? 'column-fixed column-fixed-2nd' : ''}`
|
||||
return (
|
||||
<th
|
||||
key={'column-' + item.field}
|
||||
style={styles}
|
||||
className={clazz}
|
||||
data-field={item.field}
|
||||
onClick={(e) => !item.unsort && this._sortField(item.field, e)}>
|
||||
<th key={'column-' + item.field} style={styles} className={clazz} data-field={item.field} onClick={(e) => !item.unsort && this._sortField(item.field, e)}>
|
||||
<div style={styles}>
|
||||
<span style={{ width: cWidth - 8 + 'px' }}>{item.label}</span>
|
||||
<i className={'zmdi ' + (item.sort || '')} />
|
||||
|
@ -83,7 +78,7 @@ class RbList extends React.Component {
|
|||
</th>
|
||||
)
|
||||
})}
|
||||
<th className="column-empty"></th>
|
||||
<th className="column-empty" />
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody ref={(c) => (this._rblistBody = c)}>
|
||||
|
@ -97,7 +92,7 @@ class RbList extends React.Component {
|
|||
<div>
|
||||
<label className="custom-control custom-control-sm custom-checkbox">
|
||||
<input className="custom-control-input" type="checkbox" onChange={(e) => this._clickRow(e)} />
|
||||
<span className="custom-control-label"></span>
|
||||
<i className="custom-control-label" />
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -105,7 +100,7 @@ class RbList extends React.Component {
|
|||
{item.map((cell, index) => {
|
||||
return that.renderCell(cell, index, lastPrimary)
|
||||
})}
|
||||
<td className="column-empty"></td>
|
||||
<td className="column-empty" />
|
||||
</tr>
|
||||
)
|
||||
})}
|
||||
|
@ -610,12 +605,7 @@ CellRenders.addRender('URL', function (v, s, k) {
|
|||
return (
|
||||
<td key={k}>
|
||||
<div style={s} title={v}>
|
||||
<a
|
||||
href={`${rb.baseUrl}/commons/url-safe?url=${$encode(v)}`}
|
||||
className="column-url"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
onClick={(e) => $stopEvent(e)}>
|
||||
<a href={`${rb.baseUrl}/commons/url-safe?url=${$encode(v)}`} className="column-url" target="_blank" rel="noopener noreferrer" onClick={(e) => $stopEvent(e)}>
|
||||
{v}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -744,7 +734,7 @@ class RbListPagination extends React.Component {
|
|||
{this.state.pageNo > 1 && (
|
||||
<li className="paginate_button page-item">
|
||||
<a className="page-link" onClick={() => this.prev()}>
|
||||
<span className="icon zmdi zmdi-chevron-left"></span>
|
||||
<i className="icon zmdi zmdi-chevron-left" />
|
||||
</a>
|
||||
</li>
|
||||
)}
|
||||
|
@ -767,7 +757,7 @@ class RbListPagination extends React.Component {
|
|||
{this.state.pageNo !== this.__pageTotal && (
|
||||
<li className="paginate_button page-item">
|
||||
<a className="page-link" onClick={() => this.next()}>
|
||||
<span className="icon zmdi zmdi-chevron-right"></span>
|
||||
<i className="icon zmdi zmdi-chevron-right" />
|
||||
</a>
|
||||
</li>
|
||||
)}
|
||||
|
@ -952,9 +942,7 @@ const AdvFilters = {
|
|||
|
||||
// 可修改
|
||||
if (item.editable) {
|
||||
const $action = $(
|
||||
`<div class="action"><a title="${$L('修改')}"><i class="zmdi zmdi-edit"></i></a><a title="${$L('删除')}"><i class="zmdi zmdi-delete"></i></a></div>`
|
||||
).appendTo($item)
|
||||
const $action = $(`<div class="action"><a title="${$L('修改')}"><i class="zmdi zmdi-edit"></i></a><a title="${$L('删除')}"><i class="zmdi zmdi-delete"></i></a></div>`).appendTo($item)
|
||||
|
||||
$action.find('a:eq(0)').click(function () {
|
||||
that.showAdvFilter(item.id)
|
||||
|
@ -1080,9 +1068,7 @@ $(document).ready(() => {
|
|||
const via = $urlp('via', location.hash)
|
||||
if (via) {
|
||||
wpc.protocolFilter = `via:${via}`
|
||||
const $cleanVia = $(`<div class="badge filter-badge">${$L('当前数据已过滤')}<a class="close" title="${$L('查看全部数据')}">×</a></div>`).appendTo(
|
||||
'.dataTables_filter'
|
||||
)
|
||||
const $cleanVia = $(`<div class="badge filter-badge">${$L('当前数据已过滤')}<a class="close" title="${$L('查看全部数据')}">×</a></div>`).appendTo('.dataTables_filter')
|
||||
$cleanVia.find('a').click(() => {
|
||||
wpc.protocolFilter = null
|
||||
RbListPage.reload()
|
||||
|
@ -1116,12 +1102,7 @@ class RbViewModal extends React.Component {
|
|||
<div className="modal-dialog">
|
||||
<div className="modal-content" style={{ width: this.mcWidth + 'px' }}>
|
||||
<div className={'modal-body iframe rb-loading ' + (this.state.inLoad === true && 'rb-loading-active')}>
|
||||
<iframe
|
||||
ref={(c) => (this._iframe = c)}
|
||||
className={this.state.isHide ? 'invisible' : ''}
|
||||
src={this.state.showAfterUrl || 'about:blank'}
|
||||
frameBorder="0"
|
||||
scrolling="no"></iframe>
|
||||
<iframe ref={(c) => (this._iframe = c)} className={this.state.isHide ? 'invisible' : ''} src={this.state.showAfterUrl || 'about:blank'} frameBorder="0" scrolling="no" />
|
||||
<RbSpinner />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1271,10 +1252,8 @@ const ChartsWidget = {
|
|||
// eslint-disable-next-line no-undef
|
||||
ECHART_BASE.grid = { left: 40, right: 20, top: 30, bottom: 20 }
|
||||
|
||||
$('.J_load-chart').click(() => {
|
||||
if (this.chartLoaded !== true) this.loadWidget()
|
||||
})
|
||||
$('.J_add-chart').click(() => this.showChartSelect())
|
||||
$('.J_load-charts').on('click', () => this.chartLoaded !== true && this.loadWidget())
|
||||
$('.J_add-chart').on('click', () => this.showChartSelect())
|
||||
|
||||
$('.charts-wrap')
|
||||
.sortable({
|
||||
|
@ -1349,7 +1328,7 @@ $(document).ready(() => {
|
|||
|
||||
// ASIDE
|
||||
if ($('#asideFilters, #asideWidgets').length > 0) {
|
||||
$('.side-toggle').click(() => {
|
||||
$('.side-toggle').on('click', () => {
|
||||
const $el = $('.rb-aside').toggleClass('rb-aside-collapsed')
|
||||
$.cookie('rb.asideCollapsed', $el.hasClass('rb-aside-collapsed'), { expires: 180 })
|
||||
})
|
||||
|
@ -1361,4 +1340,10 @@ $(document).ready(() => {
|
|||
})()
|
||||
ChartsWidget.init()
|
||||
}
|
||||
|
||||
const $wtab = $('.page-aside.widgets .nav a:eq(0)')
|
||||
if ($wtab.length > 0) {
|
||||
$('.page-aside.widgets .ph-item.rb').remove()
|
||||
$wtab.trigger('click')
|
||||
}
|
||||
})
|
||||
|
|
|
@ -6,28 +6,27 @@
|
|||
<title th:text="${entityLabel}"></title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="rb-wrapper rb-fixed-sidebar rb-collapsible-sidebar rb-collapsible-sidebar-hide-logo rb-aside" th:classappend="${sideCollapsedClazz}">
|
||||
<div class="rb-wrapper rb-fixed-sidebar rb-collapsible-sidebar rb-collapsible-sidebar-hide-logo" th:classappend="${sideCollapsedClazz + (hideAside ? '' : ' rb-aside')}">
|
||||
<th:block th:replace="~{/_include/nav-top}" />
|
||||
<th:block th:replace="~{/_include/nav-left(active=${'nav_entity-' + mainEntity})}" />
|
||||
<div class="rb-content">
|
||||
<aside class="page-aside widgets">
|
||||
<aside class="page-aside widgets" th:if="${!hideAside}">
|
||||
<a class="side-toggle" th:title="${bundle.L('展开/收缩')}"><i class="zmdi zmdi-arrow-left"></i></a>
|
||||
<div class="tab-container">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item"><a class="nav-link active" href="#asideFilters" data-toggle="tab">[[${bundle.L('常用查询')}]]</a></li>
|
||||
<li class="nav-item"><a class="nav-link J_load-chart" href="#asideWidgets" data-toggle="tab">[[${bundle.L('图表')}]]</a></li>
|
||||
<li class="nav-item" th:if="${advListHideFilters != 'true'}"><a class="nav-link" href="#asideFilters" data-toggle="tab">[[${bundle.L('常用查询')}]]</a></li>
|
||||
<li class="nav-item" th:if="${advListHideCharts != 'true'}"><a class="nav-link J_load-charts" href="#asideWidgets" data-toggle="tab">[[${bundle.L('图表')}]]</a></li>
|
||||
</ul>
|
||||
<div class="tab-content rb-scroller">
|
||||
<div class="tab-pane active" id="asideFilters">
|
||||
<div class="ph-item rb">
|
||||
<div class="ph-col-12 p-0">
|
||||
<div class="ph-row">
|
||||
<div class="ph-col-12 big"></div>
|
||||
<div class="ph-col-12 big"></div>
|
||||
</div>
|
||||
<div class="ph-item rb">
|
||||
<div class="ph-col-12 p-0">
|
||||
<div class="ph-row">
|
||||
<div class="ph-col-12 big"></div>
|
||||
<div class="ph-col-12 big"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="asideFilters"></div>
|
||||
<div class="tab-pane" id="asideWidgets">
|
||||
<div class="charts-wrap"></div>
|
||||
<div class="text-center">
|
||||
|
|
|
@ -6,28 +6,27 @@
|
|||
<title th:text="${entityLabel}"></title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="rb-wrapper rb-fixed-sidebar rb-collapsible-sidebar rb-collapsible-sidebar-hide-logo rb-aside" th:classappend="${sideCollapsedClazz}">
|
||||
<div class="rb-wrapper rb-fixed-sidebar rb-collapsible-sidebar rb-collapsible-sidebar-hide-logo" th:classappend="${sideCollapsedClazz + (hideAside ? '' : ' rb-aside')}">
|
||||
<th:block th:replace="~{/_include/nav-top}" />
|
||||
<th:block th:replace="~{/_include/nav-left(active=${'nav_entity-' + entityName})}" />
|
||||
<div class="rb-content">
|
||||
<aside class="page-aside widgets">
|
||||
<aside class="page-aside widgets" th:if="${!hideAside}">
|
||||
<a class="side-toggle" th:title="${bundle.L('展开/收缩')}"><i class="zmdi zmdi-arrow-left"></i></a>
|
||||
<div class="tab-container">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item"><a class="nav-link active" href="#asideFilters" data-toggle="tab">[[${bundle.L('常用查询')}]]</a></li>
|
||||
<li class="nav-item"><a class="nav-link J_load-chart" href="#asideWidgets" data-toggle="tab">[[${bundle.L('图表')}]]</a></li>
|
||||
<li class="nav-item" th:if="${advListHideFilters != 'true'}"><a class="nav-link" href="#asideFilters" data-toggle="tab">[[${bundle.L('常用查询')}]]</a></li>
|
||||
<li class="nav-item" th:if="${advListHideCharts != 'true'}"><a class="nav-link J_load-charts" href="#asideWidgets" data-toggle="tab">[[${bundle.L('图表')}]]</a></li>
|
||||
</ul>
|
||||
<div class="tab-content rb-scroller">
|
||||
<div class="tab-pane active" id="asideFilters">
|
||||
<div class="ph-item rb">
|
||||
<div class="ph-col-12 p-0">
|
||||
<div class="ph-row">
|
||||
<div class="ph-col-12 big"></div>
|
||||
<div class="ph-col-12 big"></div>
|
||||
</div>
|
||||
<div class="ph-item rb">
|
||||
<div class="ph-col-12 p-0">
|
||||
<div class="ph-row">
|
||||
<div class="ph-col-12 big"></div>
|
||||
<div class="ph-col-12 big"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="asideFilters"></div>
|
||||
<div class="tab-pane" id="asideWidgets">
|
||||
<div class="charts-wrap"></div>
|
||||
<div class="text-center">
|
||||
|
|
Loading…
Reference in a new issue