|
|
@@ -43,6 +43,7 @@ require.config({
|
|
|
'bootstrap-dialog': '../libs/bootstrap3-dialog/dist/js/bootstrap-dialog.min',
|
|
|
'bootstrap-datetimepicker': '../libs/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min',
|
|
|
'bootstrap-select': '../libs/bootstrap-select/dist/js/bootstrap-select.min',
|
|
|
+ 'bootstrap-select-ajax': '../libs/ajax-bootstrap-select/dist/js/ajax-bootstrap-select.min',
|
|
|
'bootstrap-table': '../libs/bootstrap-table/dist/bootstrap-table.min',
|
|
|
'bootstrap-table-export': '../libs/bootstrap-table/dist/extensions/export/bootstrap-table-export.min',
|
|
|
'bootstrap-table-mobile': '../libs/bootstrap-table/dist/extensions/mobile/bootstrap-table-mobile',
|
|
|
@@ -6634,13 +6635,7 @@ define('backend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'moment'], f
|
|
|
$colorNums = colorArr.length;
|
|
|
badgeList = {};
|
|
|
$.each(params, function (k, v) {
|
|
|
- if (k.indexOf('/') > -1)
|
|
|
- {
|
|
|
- $url = Backend.api.fixurl(k);
|
|
|
- } else
|
|
|
- {
|
|
|
- $url = k;
|
|
|
- }
|
|
|
+ $url = Backend.api.fixurl(k);
|
|
|
|
|
|
if ($.isArray(v))
|
|
|
{
|
|
|
@@ -6657,7 +6652,7 @@ define('backend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'moment'], f
|
|
|
badgeList[$url] = $nums > 0 ? '<small class="' + $class + ' pull-right bg-' + $color + '">' + $nums + '</small>' : '';
|
|
|
});
|
|
|
$.each(badgeList, function (k, v) {
|
|
|
- var anchor = top.window.$(".treeview li a[addtabs][url='" + k + "']");
|
|
|
+ var anchor = top.window.$("li a[addtabs][url='" + k + "']");
|
|
|
if (anchor) {
|
|
|
top.window.$(".pull-right-container", anchor).html(v);
|
|
|
top.window.$(".nav-addtabs li a[node-id='" + anchor.attr("addtabs") + "'] .pull-right-container").html(v);
|
|
|
@@ -6775,10 +6770,30 @@ define('backend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'moment'], f
|
|
|
Backend.api.open(Backend.api.fixurl($(this).attr('href')), $(this).attr('title'));
|
|
|
e.preventDefault();
|
|
|
});
|
|
|
+ //点击包含.btn-addtabs的元素时事件
|
|
|
$(document).on('click', '.btn-addtabs,.addtabsit', function (e) {
|
|
|
Backend.api.addtabs($(this).attr("href"), $(this).attr("title"));
|
|
|
e.preventDefault();
|
|
|
});
|
|
|
+ //点击加入到Shortcut
|
|
|
+ $(document).on('click', '#ribbon ol li:last a[data-url]', function (e) {
|
|
|
+ e.preventDefault();
|
|
|
+ var fastjump = top.window.$(".fastmenujump");
|
|
|
+ if (fastjump) {
|
|
|
+ var url = $(this).data("url");
|
|
|
+ var text = $(this).text();
|
|
|
+ if (fastjump.find("option[value='" + url + "']").size() == 0) {
|
|
|
+ fastjump.append("<option value='" + url + "'>" + $(this).text() + "</option>");
|
|
|
+ var shortcut = localStorage.getItem("shortcut");
|
|
|
+ shortcut = shortcut ? JSON.parse(shortcut) : {};
|
|
|
+ shortcut[url] = text;
|
|
|
+ localStorage.setItem("shortcut", JSON.stringify(shortcut));
|
|
|
+ Toastr.success(__('Operation completed'));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Toastr.error(__('Operation failed'));
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
};
|
|
|
//将Layer暴露到全局中去
|
|
|
@@ -7234,7 +7249,7 @@ return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)
|
|
|
var vModal = sprintf("<div id=\"commonSearchContent_%s\" class=\"common-search-table %s\">", that.options.idTable, that.options.searchFormVisible ? "" : "hidden");
|
|
|
vModal += vFormCommon.join('');
|
|
|
vModal += "</div>";
|
|
|
- $("#myTabContent").before($(vModal));
|
|
|
+ that.$container.prepend($(vModal));
|
|
|
|
|
|
var form = $("#commonSearchForm" + "_" + that.options.idTable);
|
|
|
|
|
|
@@ -7292,16 +7307,26 @@ return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)
|
|
|
ColumnsForSearch.push(vObjCol);
|
|
|
htmlForm.push('<div class="form-group" style="margin:5px">');
|
|
|
htmlForm.push(sprintf('<label for="%s" class="control-label" style="padding:0 10px">%s</label>', vObjCol.field, vObjCol.title));
|
|
|
- //htmlForm.push('<div class="col-sm-2">');
|
|
|
- //htmlForm.push(sprintf('<select class="form-control" name="field-%s" data-name="%s">%s</select>', vObjCol.field, vObjCol.field, selectHtml));
|
|
|
vObjCol.operate = (typeof vObjCol.operate === 'undefined' || $.inArray(vObjCol.operate, opList) === -1) ? '=' : vObjCol.operate;
|
|
|
htmlForm.push(sprintf('<input type="hidden" class="form-control operate" name="field-%s" data-name="%s" value="%s" readonly>', vObjCol.field, vObjCol.field, vObjCol.operate));
|
|
|
- //htmlForm.push('</div>');
|
|
|
|
|
|
- //htmlForm.push('<div class="col-sm-8">');
|
|
|
var style = typeof vObjCol.style === 'undefined' ? '' : sprintf('style="%s"', vObjCol.style);
|
|
|
if (vObjCol.searchList) {
|
|
|
- if (typeof vObjCol.searchList == 'function') {
|
|
|
+ if (typeof vObjCol.searchList === 'object' && typeof vObjCol.searchList.then === 'function') {
|
|
|
+ htmlForm.push(sprintf('<select class="form-control" name="%s" %s>%s</select>', vObjCol.field, style, sprintf('<option value="">%s</option>', that.options.formatCommonChoose())));
|
|
|
+ (function (vObjCol, options) {
|
|
|
+ $.when(vObjCol.searchList).done(function (ret) {
|
|
|
+ if (ret.data && ret.data.searchlist && $.isArray(ret.data.searchlist)) {
|
|
|
+ var optionList = [];
|
|
|
+ $.each(ret.data.searchlist, function (key, value) {
|
|
|
+ var isSelect = value.id === vObjCol.defaultValue ? 'selected' : '';
|
|
|
+ optionList.push(sprintf("<option value='" + value.id + "' %s>" + value.name + "</option>", isSelect));
|
|
|
+ });
|
|
|
+ $("#commonSearchForm_" + options.idTable + " select[name='" + vObjCol.field + "']").append(optionList.join(''));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ })(vObjCol, that.options);
|
|
|
+ } else if (typeof vObjCol.searchList == 'function') {
|
|
|
htmlForm.push(vObjCol.searchList.call(this, vObjCol));
|
|
|
} else {
|
|
|
var isArray = vObjCol.searchList.constructor === Array;
|
|
|
@@ -7328,7 +7353,6 @@ return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //htmlForm.push('</div>');
|
|
|
htmlForm.push('</div>');
|
|
|
}
|
|
|
}
|
|
|
@@ -7397,7 +7421,7 @@ return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)
|
|
|
var value = $("[name='" + name + "']:checked").val();
|
|
|
}
|
|
|
} else {
|
|
|
- var value = (typeof vObjCol.process === 'function') ? vObjCol.process(obj.val()) : obj.val();
|
|
|
+ var value = (typeof vObjCol.process === 'function') ? vObjCol.process(obj.val()) : (sym == 'LIKE %...%' ? obj.val().replace(/\*/g, '%') : obj.val());
|
|
|
}
|
|
|
if (value == '' && sym.indexOf("NULL") == -1) {
|
|
|
return true;
|
|
|
@@ -7489,17 +7513,13 @@ return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- var searchquery = getSearchQuery(this);
|
|
|
- this.options.queryParams = function (params) {
|
|
|
- return {
|
|
|
- search: params.search,
|
|
|
- sort: params.sort,
|
|
|
- order: params.order,
|
|
|
- filter: JSON.stringify(searchquery.filter),
|
|
|
- op: JSON.stringify(searchquery.op),
|
|
|
- offset: params.offset,
|
|
|
- limit: params.limit,
|
|
|
- };
|
|
|
+ var searchQuery = getSearchQuery(this);
|
|
|
+ var queryParams = this.options.queryParams;
|
|
|
+ this.options.queryParams = function () {
|
|
|
+ var params = queryParams.apply(this, arguments);
|
|
|
+ params.filter = JSON.stringify($.extend(params.filter || {}, searchQuery.filter));
|
|
|
+ params.op = JSON.stringify($.extend(params.op || {}, searchQuery.op));
|
|
|
+ return params;
|
|
|
};
|
|
|
|
|
|
};
|
|
|
@@ -8757,7 +8777,6 @@ define('upload',['jquery', 'bootstrap', 'backend', 'plupload', 'dragsort', 'temp
|
|
|
|
|
|
that.each(function() {
|
|
|
var instance = $(this).data(NS);
|
|
|
-
|
|
|
if (instance) {
|
|
|
if ( isString(options) ) {
|
|
|
if ( options.charAt(0) === '_' ) return;
|
|
|
@@ -10938,7 +10957,7 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
|
|
|
return false;
|
|
|
},
|
|
|
bindevent: function (form, onBeforeSubmit, onAfterSubmit) {
|
|
|
- form.validator({
|
|
|
+ form.validator($.extend({
|
|
|
validClass: 'has-success',
|
|
|
invalidClass: 'has-error',
|
|
|
bindClassTo: '.form-group',
|
|
|
@@ -10972,12 +10991,48 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
|
|
|
});
|
|
|
return false;
|
|
|
}
|
|
|
- });
|
|
|
+ }, form.data("validator-options") || {}));
|
|
|
|
|
|
//绑定select元素事件
|
|
|
if ($(".selectpicker", form).size() > 0) {
|
|
|
- require(['bootstrap-select'], function () {
|
|
|
- $('.selectpicker', form).selectpicker();
|
|
|
+ require(['bootstrap-select', 'bootstrap-select-ajax'], function () {
|
|
|
+ var selectlist = $('.selectpicker', form).selectpicker();
|
|
|
+ $.each(selectlist, function () {
|
|
|
+ var that = this;
|
|
|
+ if ($(this).data("live-search")) {
|
|
|
+ $(this).ajaxSelectPicker({
|
|
|
+ ajax: {
|
|
|
+ url: 'ajax/selectpicker',
|
|
|
+ beforeSend: function (xhr, setting) {
|
|
|
+ setting.url = Backend.api.fixurl(setting.url);
|
|
|
+ },
|
|
|
+ data: function () {
|
|
|
+ var params = {
|
|
|
+ search: '{{{q}}}',
|
|
|
+ field: $(that).attr("name")
|
|
|
+ };
|
|
|
+ return params;
|
|
|
+ },
|
|
|
+ dataType: 'json'
|
|
|
+ },
|
|
|
+ locale: {
|
|
|
+ emptyTitle: 'Search...'
|
|
|
+ },
|
|
|
+ preprocessData: function (ret) {
|
|
|
+ var list = [];
|
|
|
+ if (ret.hasOwnProperty('data') && ret.data) {
|
|
|
+ var len = ret.data.length;
|
|
|
+ for (var i = 0; i < len; i++) {
|
|
|
+ var curr = ret.data[i];
|
|
|
+ list.push(curr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ },
|
|
|
+ preserveSelected: true
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -10994,11 +11049,12 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
|
|
|
if ($(".typeahead").size() > 0 || $(".tagsinput").size() > 0) {
|
|
|
require(['bloodhound'], function () {
|
|
|
var remotesource = function (input) {
|
|
|
+ var url = $(input).data("url") ? $(input).data("url") : "ajax/typeahead";
|
|
|
return new Bloodhound({
|
|
|
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
|
|
|
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
|
|
remote: {
|
|
|
- url: 'ajax/typeahead?search=%QUERY&field=' + $(input).attr("name"),
|
|
|
+ url: url + '?search=%QUERY&field=' + $(input).attr("name"),
|
|
|
wildcard: '%QUERY',
|
|
|
transform: function (ret) {
|
|
|
return ret.data.searchlist;
|
|
|
@@ -11037,11 +11093,12 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
|
|
|
$('.tagsinput', form).each(function () {
|
|
|
$(this).tagsinput({
|
|
|
freeInput: false,
|
|
|
+ itemValue: 'id',
|
|
|
+ itemText: 'name',
|
|
|
typeaheadjs: {
|
|
|
name: 'tagsinput',
|
|
|
limit: 20,
|
|
|
displayKey: 'name',
|
|
|
- valueKey: 'id',
|
|
|
source: remotesource(this),
|
|
|
templates: {
|
|
|
empty: '<li class="notfound">' + __('No matches found') + '</li>',
|
|
|
@@ -11052,7 +11109,6 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
- $('.bootstrap-tagsinput .twitter-typeahead').css('display', 'inline');
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
@@ -11088,6 +11144,16 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
|
|
|
$(".summernote", form).summernote({
|
|
|
height: 250,
|
|
|
lang: 'zh-CN',
|
|
|
+ fontNames: [
|
|
|
+ 'Arial', 'Arial Black', 'Serif', 'Sans', 'Courier',
|
|
|
+ 'Courier New', 'Comic Sans MS', 'Helvetica', 'Impact', 'Lucida Grande',
|
|
|
+ "Open Sans", "Hiragino Sans GB", "Microsoft YaHei",
|
|
|
+ '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆',
|
|
|
+ ],
|
|
|
+ fontNamesIgnoreCheck: [
|
|
|
+ "Open Sans", "Microsoft YaHei",
|
|
|
+ '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆'
|
|
|
+ ],
|
|
|
dialogsInBody: true,
|
|
|
callbacks: {
|
|
|
onChange: function (contents) {
|