Merge pull request #393 from getrebuild/v2.6-better

V2.6 better
This commit is contained in:
RB 2021-10-29 10:13:59 +08:00 committed by GitHub
commit 05a07cb87d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 149 additions and 58 deletions

2
@rbv

@ -1 +1 @@
Subproject commit 65a223473f162d43e46d4092082ef8f43137465a
Subproject commit 1dc9735433e827a3f5a8aae7e24f7347e66472cd

View file

@ -299,7 +299,7 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>

View file

@ -281,7 +281,8 @@ public class ProjectTaskController extends BaseController {
JSONArray alist = new JSONArray();
for (ConfigBean p : ps) {
if (p.getInteger("status") == ProjectManager.STATUS_ARCHIVED) continue;
if (p.getInteger("status") == ProjectManager.STATUS_ARCHIVED) continue; // 已归档
if (!p.get("members", Set.class).contains(user)) continue; // 非成员
JSONObject item = (JSONObject) p.toJSON("id", "projectName");

View file

@ -28,9 +28,11 @@
<i class="icon zmdi zmdi-search"></i>
<div class="dropdown-menu" th:_title="${bundle.L('无可搜索项')}"></div>
</div>
<div class="global-create dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" th:title="${bundle.L('新建')}"><i class="zmdi zmdi-plus icon"></i></a>
<div class="dropdown-menu auto-scroller" th:_title="${bundle.L('无可新建项')}"></div>
<div class="global-create">
<div class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" th:title="${bundle.L('新建')}"><i class="zmdi zmdi-plus icon"></i></a>
<div class="dropdown-menu auto-scroller" th:_title="${bundle.L('无可新建项')}"></div>
</div>
</div>
</div>
<div class="rb-right-navbar">

View file

@ -10,8 +10,9 @@
<i class="header-icon zmdi" th:classappend="${'zmdi-' + entityIcon}"></i>
<h3 class="title">[[${bundle.L('部门视图')}]]</h3>
<span>
<a class="close J_close"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload"><i class="zmdi zmdi-refresh"></i></a>
<a class="close J_close" th:title="${bundle.L('关闭')}"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload" th:title="${bundle.L('刷新')}"><i class="zmdi zmdi-refresh"></i></a>
<a class="close sm J_back hide" th:title="${bundle.L('回退')}"><i class="zmdi zmdi-arrow-left"></i></a>
</span>
</div>
<div class="main-content container-fluid">

View file

@ -10,8 +10,9 @@
<i class="header-icon zmdi" th:classappend="${'zmdi-' + entityIcon}"></i>
<h3 class="title">[[${bundle.L('角色视图')}]]</h3>
<span>
<a class="close J_close"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload"><i class="zmdi zmdi-refresh"></i></a>
<a class="close J_close" th:title="${bundle.L('关闭')}"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload" th:title="${bundle.L('刷新')}"><i class="zmdi zmdi-refresh"></i></a>
<a class="close sm J_back hide" th:title="${bundle.L('回退')}"><i class="zmdi zmdi-arrow-left"></i></a>
</span>
</div>
<div class="main-content container-fluid">

View file

@ -20,8 +20,9 @@
<i class="header-icon zmdi" th:classappend="${'zmdi-' + entityIcon}"></i>
<h3 class="title">[[${bundle.L('团队视图')}]]</h3>
<span>
<a class="close J_close"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload"><i class="zmdi zmdi-refresh"></i></a>
<a class="close J_close" th:title="${bundle.L('关闭')}"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload" th:title="${bundle.L('刷新')}"><i class="zmdi zmdi-refresh"></i></a>
<a class="close sm J_back hide" th:title="${bundle.L('回退')}"><i class="zmdi zmdi-arrow-left"></i></a>
</span>
</div>
<div class="main-content container-fluid">

View file

@ -10,8 +10,9 @@
<i class="header-icon zmdi" th:classappend="${'zmdi-' + entityIcon}"></i>
<h3 class="title">[[${bundle.L('用户视图')}]]</h3>
<span>
<a class="close J_close"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload"><i class="zmdi zmdi-refresh"></i></a>
<a class="close J_close" th:title="${bundle.L('关闭')}"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload" th:title="${bundle.L('刷新')}"><i class="zmdi zmdi-refresh"></i></a>
<a class="close sm J_back hide" th:title="${bundle.L('回退')}"><i class="zmdi zmdi-arrow-left"></i></a>
</span>
</div>
<div class="main-content container-fluid">

View file

@ -448,13 +448,17 @@ See LICENSE and COMMERCIAL in the project root for license information.
#collapseSearch .card-body .input-group .append > a {
height: 32px;
width: 16px;
font-size: 1.2rem;
font-size: 1.308rem;
transform: translateY(-1px);
color: #404040;
color: #737373;
display: none;
text-align: center;
}
#collapseSearch .card-body .input-group .append > a:hover {
color: #5a5a5a;
}
#collapseSearch .card-body .input-group .append > a.show {
display: inline-block;
}

View file

@ -386,6 +386,37 @@ a.btn {
border-radius: 2px;
}
.input-search input + .btn-input-clear {
position: absolute;
right: 35px;
top: 3px;
border: 0 none;
padding: 0;
min-width: auto;
min-height: auto;
width: 1.4rem;
height: 2.4rem;
background: #fff;
color: #737373;
z-index: 10;
display: none;
}
.input-search input + .btn-input-clear:hover {
color: #5a5a5a;
}
.input-search input + .btn-input-clear::before {
font-family: 'Material-Design-Iconic-Font';
font-size: 1.308rem;
content: '\f135';
content: '\f136';
}
.input-search input:not(:placeholder-shown) + .btn-input-clear {
display: block;
}
.form-control.search {
border-color: #d5d8de;
}
@ -1915,7 +1946,7 @@ th.column-fixed {
.aside-tree li > a {
display: block;
padding: 7px 10px;
padding: 8px 10px;
cursor: pointer;
color: #444;
}
@ -2025,8 +2056,8 @@ th.column-fixed {
.aside-2tree li span.collapse-icon {
padding-left: 6px;
padding-top: 5px;
font-size: 1.7rem;
padding-top: 7px;
font-size: 1.4rem;
color: #999;
width: 18px;
}
@ -3083,6 +3114,23 @@ form {
display: none;
}
.search-container .dropdown-menu {
border-radius: 2px;
margin-top: 0;
width: auto;
min-width: 220px;
}
.search-container .dropdown-menu:empty {
padding: 15px;
}
.search-container .dropdown-menu:empty::after {
content: attr(_title);
font-style: italic;
color: #999;
}
.search-container > .global-search > .icon {
position: absolute;
left: 160px;
@ -3099,28 +3147,11 @@ form {
}
.search-container > .global-search > .dropdown-menu {
width: auto;
min-width: 320px;
max-width: 600px;
padding: 15px 20px 10px;
}
.search-container .dropdown-menu {
box-shadow: 0 3px 0.6rem rgba(0, 0, 0, 0.1);
border-radius: 4px;
margin-top: 0;
}
.search-container .dropdown-menu:empty {
padding: 15px;
}
.search-container .dropdown-menu:empty::after {
content: attr(_title);
font-style: italic;
color: #999;
}
.search-container > .global-search > .dropdown-menu a.badge {
background: #f5f5f5;
color: #5a5a5a !important;
@ -3150,7 +3181,7 @@ form {
top: 12px;
}
.search-container > .global-create > a {
.search-container > .global-create > .dropdown > a {
display: inline-block;
width: 35px;
line-height: 35px;
@ -3161,8 +3192,8 @@ form {
font-size: 1.73rem;
}
.search-container > .global-create > a:hover,
.search-container > .global-create.show > a {
.search-container > .global-create > .dropdown > a:hover,
.search-container > .global-create > .dropdown.show > a {
background: #4285f4;
color: #fff;
}
@ -3548,7 +3579,7 @@ form {
}
#asideFilters .dropdown-item {
padding: 7px 10px;
padding: 8px 10px;
border-radius: 2px;
font-size: 1rem;
cursor: pointer;

View file

@ -182,7 +182,7 @@ class RbPreview extends React.Component {
const fileName = $fileCutName(currentUrl)
if (this._isDoc(fileName)) {
const setPreviewUrl = function (url) {
const previewUrl = rb.commercial < 10 ? `https://view.officeapps.live.com/op/embed.aspx?src=${$encode(url)}` : `${rb.baseUrl}/filex/access/pdf-preview?src=${$encode(url)}`
const previewUrl = (window.officePreviewUrl || 'https://view.officeapps.live.com/op/embed.aspx?src=') + $encode(url)
that.setState({ previewUrl: previewUrl, errorMsg: null })
}

View file

@ -15,7 +15,6 @@ class FilesList extends React.Component {
__pageNo = 1
render() {
const hasFiles = (this.state.files || []).length > 0
return (
<div className="file-list">
{(this.state.files || []).map((item) => {
@ -58,7 +57,7 @@ class FilesList extends React.Component {
</div>
)}
{this.__pageNo > 1 && this.state.currentLen > 0 && this.state.currentLen < PAGE_SIZE && <div className="text-center mt-3 pb-3 text-muted">{$L('已显示全部')}</div>}
{this.__pageNo === 1 && !hasFiles && (
{this.__pageNo === 1 && this.state.files && this.state.files.length === 0 && (
<div className="list-nodata pt-8 pb-8">
<i className="zmdi zmdi-folder-outline" />
<p>{$L('暂无数据')}</p>
@ -141,9 +140,14 @@ $(document).ready(() => {
filesList && filesList.loadData()
})
const $btn = $('.input-search .btn').click(() => {
// 搜索
const $btn = $('.input-search .input-group-btn .btn').on('click', () => {
currentSearch = $('.input-search input').val()
filesList && filesList.loadData()
})
$('.input-search input').keydown((e) => (e.which === 13 ? $btn.trigger('click') : true))
const $input = $('.input-search input').on('keydown', (e) => (e.which === 13 ? $btn.trigger('click') : true))
$('.input-search .btn-input-clear').on('click', () => {
$input.val('')
$btn.trigger('click')
})
})

View file

@ -7,15 +7,21 @@ See LICENSE and COMMERCIAL in the project root for license information.
const UNICON_NAME = 'texture'
let _Share2
let _entity_data = {}
let _entityInfos = {}
$(document).ready(function () {
$('.J_add-menu').click(() => render_item({}, true))
// 系统内置
$('#sys-built > option').each(function () {
const $this = $(this)
_entityInfos[$this.attr('value')] = { icon: $this.attr('data-icon'), label: $this.text() }
})
$.get('/commons/metadata/entities?detail=true', function (res) {
$(res.data).each(function () {
$(`<option value="${this.name}">${this.label}</option>`).appendTo('.J_menuEntity optgroup:eq(0)')
_entity_data[this.name] = this
_entityInfos[this.name] = this
})
const $ref = $('.J_menuEntity')
@ -25,7 +31,7 @@ $(document).ready(function () {
})
.on('change', () => {
if (item_current_isNew === true) {
const d = _entity_data[$ref.val()]
const d = _entityInfos[$ref.val()]
if (d) {
$('.J_menuIcon .zmdi').attr('class', `zmdi zmdi-${d.icon}`)
$('.J_menuName').val(d.label)

View file

@ -43,12 +43,15 @@ $(document).ready(() => {
// 搜索
const $search = $('.J_search .input-search')
$search.find('.btn').click(() => {
const s = $search.find('input').val()
__PlanBoxes.setState({ search: s })
const $btn2 = $search.find('.input-group-btn .btn').on('click', () => {
__PlanBoxes.setState({ search: $search.find('input').val() || null })
})
$search.find('input').keydown((e) => {
e.keyCode === 13 && $search.find('.btn').trigger('click')
const $input2 = $search.find('input').on('keydown', (e) => {
e.keyCode === 13 && $btn2.trigger('click')
})
$search.find('.btn-input-clear').on('click', () => {
$input2.val('')
$btn2.trigger('click')
})
$unhideDropdown('.J_search').on({

View file

@ -545,10 +545,14 @@ const RbListCommon = {
if (gs) $('.search-input-gs, .input-search>input').val($decode(gs))
// 快速查询
const $btn = $('.input-search .btn'),
const $btn = $('.input-search .input-group-btn .btn'),
$input = $('.input-search input')
$btn.click(() => RbListPage._RbList.searchQuick())
$input.keydown((e) => (e.which === 13 ? $btn.trigger('click') : true))
$btn.on('click', () => RbListPage._RbList.searchQuick())
$input.on('keydown', (e) => (e.which === 13 ? $btn.trigger('click') : true))
$('.input-search .btn-input-clear').on('click', () => {
$input.val('')
$btn.trigger('click')
})
// via 过滤
const via = $urlp('via', location.hash)

View file

@ -1074,7 +1074,9 @@ const ChartsWidget = {
// eslint-disable-next-line no-undef
ECHART_BASE.grid = { left: 40, right: 20, top: 30, bottom: 20 }
$('.J_load-charts').on('click', () => this.chartLoaded !== true && this.loadWidget())
$('.J_load-charts').on('click', () => {
this.chartLoaded !== true && this.loadWidget()
})
$('.J_add-chart').on('click', () => this.showChartSelect())
$('.charts-wrap')

View file

@ -420,6 +420,7 @@ var _initGlobalCreate = function () {
$.get('/app/entity/extras/check-creates?entity=' + entities.join(','), function (res) {
var $gc = $('.global-create .dropdown-menu')
$gc.perfectScrollbar()
$(res.data || []).each(function () {
var $item = $('<a class="dropdown-item"><i class="icon zmdi zmdi-' + this.icon + '"></i>' + this.entityLabel + '</a>').appendTo($gc)
var _this = this

View file

@ -831,6 +831,15 @@ const RbViewPage = {
$(document).ready(function () {
// 无关闭按钮
if (parent && parent.RbViewModal && parent.RbViewModal.hideClose) $('.J_close').remove()
// 回退按钮
if ($urlp('back') === 'auto' && parent && parent.RbViewModal) {
$('.J_back')
.removeClass('hide')
.on('click', () => {
// parent.RbViewModal.holder(this.__id, 'LOADING')
history.back()
})
}
// iframe 点击穿透
if (parent) {

View file

@ -12,6 +12,7 @@
<h3 class="title">[[${bundle.L('审批流程图')}]]</h3>
<span>
<a class="close J_close" th:title="${bundle.L('关闭')}"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_back hide" th:title="${bundle.L('回退')}"><i class="zmdi zmdi-arrow-left"></i></a>
</span>
</div>
<div class="main-content container-fluid p-0">
@ -30,6 +31,18 @@
window.$addResizeHandler__calls = []
$(document).ready(function () {
// 无关闭按钮
if (parent && parent.RbViewModal && parent.RbViewModal.hideClose) $('.J_close').remove()
// 回退按钮
if ($urlp('back') === 'auto' && parent && parent.RbViewModal) {
$('.J_back')
.removeClass('hide')
.on('click', () => {
// parent.RbViewModal.holder(this.__id, 'LOADING')
history.back()
})
}
const ph = parent && parent.RbViewModal ? parent.RbViewModal.holder(window.__PageConfig.id) : null
if (ph) $('.J_close').click(() => ph.hide())
else $('.J_close').remove()

View file

@ -44,6 +44,7 @@
<div class="col-6">
<div class="input-group input-search">
<input class="form-control" type="text" th:placeholder="${bundle.L('搜索')}" maxlength="40" />
<button class="btn btn-input-clear" type="button"></button>
<span class="input-group-btn">
<button class="btn btn-secondary" type="button"><i class="icon zmdi zmdi-search"></i></button>
</span>

View file

@ -44,6 +44,7 @@
<div class="col-6">
<div class="input-group input-search">
<input class="form-control" type="text" th:placeholder="${bundle.L('搜索')}" maxlength="40" />
<button class="btn btn-input-clear" type="button"></button>
<span class="input-group-btn">
<button class="btn btn-secondary" type="button"><i class="icon zmdi zmdi-search"></i></button>
</span>

View file

@ -67,6 +67,7 @@
</div>
<div class="input-group input-search float-left">
<input class="form-control" type="text" th:placeholder="${bundle.L('快速查询')}" maxlength="40" />
<button class="btn btn-input-clear" type="button"></button>
<span class="input-group-btn"
><button class="btn btn-secondary" type="button"><i class="icon zmdi zmdi-search"></i></button
></span>

View file

@ -13,6 +13,7 @@
<span>
<a class="close J_close" th:title="${bundle.L('关闭')}"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload" th:title="${bundle.L('刷新')}"><i class="zmdi zmdi-refresh"></i></a>
<a class="close sm J_back hide" th:title="${bundle.L('回退')}"><i class="zmdi zmdi-arrow-left"></i></a>
<a class="close sm admin-show" th:title="${bundle.L('表单设计')}" th:href="|${baseUrl}/admin/entity/${entityName}/form-design|" target="_blank">
<i class="zmdi zmdi-settings"></i>
</a>

View file

@ -67,6 +67,7 @@
</div>
<div class="input-group input-search float-left">
<input class="form-control" type="text" th:placeholder="${bundle.L('快速查询')}" maxlength="40" />
<button class="btn btn-input-clear" type="button"></button>
<span class="input-group-btn"
><button class="btn btn-secondary" type="button"><i class="icon zmdi zmdi-search"></i></button
></span>

View file

@ -13,6 +13,7 @@
<span>
<a class="close J_close" th:title="${bundle.L('关闭')}"><i class="zmdi zmdi-close"></i></a>
<a class="close sm J_reload" th:title="${bundle.L('刷新')}"><i class="zmdi zmdi-refresh"></i></a>
<a class="close sm J_back hide" th:title="${bundle.L('回退')}"><i class="zmdi zmdi-arrow-left"></i></a>
<a class="close sm admin-show" th:title="${bundle.L('表单设计')}" th:href="|${baseUrl}/admin/entity/${entityName}/form-design|" target="_blank">
<i class="zmdi zmdi-settings"></i>
</a>

View file

@ -55,6 +55,7 @@
<div class="px-4 py-2">
<div class="input-group input-search m-0">
<input class="form-control" type="text" th:placeholder="${bundle.L('关键词')}" th:title="${bundle.L('输入关键词搜索')}" maxlength="40" />
<button class="btn btn-input-clear" type="button"></button>
<span class="input-group-btn">
<button class="btn btn-secondary" type="button"><i class="icon zmdi zmdi-search"></i></button>
</span>

View file

@ -64,7 +64,7 @@
<optgroup th:label="${bundle.L('业务实体')}">
<!-- Biz entities -->
</optgroup>
<optgroup th:label="${bundle.L('系统内置')}">
<optgroup th:label="${bundle.L('系统内置')}" id="sys-built">
<option value="$FILEMRG$" data-icon="folder">[[${bundle.L('文件')}]]</option>
<option value="$FEEDS$" data-icon="chart-donut">[[${bundle.L('动态')}]]</option>
<option value="$PROJECT$" data-icon="shape">[[${bundle.L('项目')}]]</option>