From 41682bd850f58160f4ac87b2a283c98dc50bb5af Mon Sep 17 00:00:00 2001 From: Karson Date: Fri, 21 Jan 2022 15:29:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E5=92=8C=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/config.php | 4 ++-- composer.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application/config.php b/application/config.php index 08e78c40..a99d54ea 100755 --- a/application/config.php +++ b/application/config.php @@ -262,7 +262,7 @@ return [ //是否开启前台会员中心 'usercenter' => true, //会员注册验证码类型email/mobile/wechat/text/false - 'user_register_captcha' => 'text', + 'user_register_captcha' => 'email', //登录验证码 'login_captcha' => true, //登录失败超过10次则1天后重试 @@ -294,7 +294,7 @@ return [ //允许跨域的域名,多个以,分隔 'cors_request_domain' => 'localhost,127.0.0.1', //版本号 - 'version' => '1.3.2.20220113', + 'version' => '1.3.3.20220121', //API接口地址 'api_url' => 'https://api.fastadmin.net', ], diff --git a/composer.json b/composer.json index 3aecdd4f..bacfc9d4 100755 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "topthink/think-installer": "^1.0.14", "topthink/think-queue": "1.1.6", "topthink/think-helper": "^1.0.7", - "karsonzhang/fastadmin-addons": "~1.3.1", + "karsonzhang/fastadmin-addons": "~1.3.2", "overtrue/pinyin": "^3.0", "phpoffice/phpspreadsheet": "1.12", "overtrue/wechat": "4.2.11", From d7ffc690c29566d1c51ef48de644748a15a03c33 Mon Sep 17 00:00:00 2001 From: Karson Date: Fri, 21 Jan 2022 15:31:52 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0JS=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/js/require-backend.min.js | 109 ++++++++++++++++++++--- public/assets/js/require-frontend.min.js | 109 ++++++++++++++++++++--- 2 files changed, 194 insertions(+), 24 deletions(-) diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js index 0d9b1682..01e042af 100644 --- a/public/assets/js/require-backend.min.js +++ b/public/assets/js/require-backend.min.js @@ -10369,10 +10369,13 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator', 'validator-lang'], } obj.attr("fieldlist-item", true); obj.insertAfter($(tagName + "[fieldlist-item]", container).length > 0 ? $(tagName + "[fieldlist-item]:last", container) : $(tagName + ":first", container)); - //兼容旧版本事件 - $(".btn-append,.append", container).trigger("fa.event.appendfieldlist", obj); - //新版本事件 - container.trigger("fa.event.appendfieldlist", obj); + if ($(".btn-append,.append", container).length > 0) { + //兼容旧版本事件 + $(".btn-append,.append", container).trigger("fa.event.appendfieldlist", obj); + } else { + //新版本事件 + container.trigger("fa.event.appendfieldlist", obj); + } return obj; }; var fieldlist = $(".fieldlist", form); @@ -10502,6 +10505,89 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator', 'validator-lang'], $("[data-role='autocomplete']").autocomplete(); }); } + }, + favisible: function (form) { + if ($("[data-favisible]", form).length == 0) { + return; + } + var checkCondition = function (condition) { + var conditionArr = condition.split(/&&/); + var success = 0; + var baseregex = /^([a-z0-9\_]+)([>|<|=|\!]=?)(.*)$/i, strregex = /^('|")(.*)('|")$/, regregex = /^regex:(.*)$/; + + var operator_result = { + '>': function(a, b) { return a > b; }, + '>=': function(a, b) { return a >= b; }, + '<': function(a, b) { return a < b; }, + '<=': function(a, b) { return a <= b; }, + '==': function(a, b) { return a == b; }, + '!=': function(a, b) { return a != b; }, + 'in': function(a, b) { return b.split(/\,/).indexOf(a) > -1; }, + 'regex': function(a, b) { + var regParts = b.match(/^\/(.*?)\/([gim]*)$/); + var regexp = regParts ? new RegExp(regParts[1], regParts[2]) : new RegExp(b); + return regexp.test(a); + } + }; + + var dataArr = form.serializeArray(), dataObj = {}; + $(dataArr).each(function (i, field) { + dataObj[field.name] = field.value; + }); + + $.each(conditionArr, function (i, item) { + var basematches = baseregex.exec(item); + if (basematches) { + var name = basematches[1], operator = basematches[2], value = basematches[3].toString(); + if (operator === '=') { + var strmatches = strregex.exec(value); + operator = strmatches ? '==' : 'in'; + value = strmatches ? strmatches[2] : value; + } + var regmatches = regregex.exec(value); + if (regmatches) { + operator = 'regex'; + value = regmatches[1]; + } + var chkname = "row[" + name + "]"; + if (typeof dataObj[chkname] === 'undefined') { + return false; + } + var objvalue = dataObj[chkname]; + if (['>', '>=', '<', '<='].indexOf(operator) > -1) { + objvalue = parseFloat(objvalue); + value = parseFloat(value); + } + var result = operator_result[operator](objvalue, value); + success += (result ? 1 : 0); + } + }); + return success === conditionArr.length; + }; + form.on("keyup change click configchange", "input,select", function () { + $("[data-favisible][data-favisible!='']", form).each(function () { + var visible = $(this).data("favisible"); + var groupArr = visible.split(/\|\|/); + var success = 0; + $.each(groupArr, function (i, j) { + if (checkCondition(j)) { + success++; + } + }); + if (success > 0) { + $(this).removeClass("hidden"); + } else { + $(this).addClass("hidden"); + } + }); + }); + + //追加上忽略元素 + setTimeout(function () { + form.data('validator').options.ignore += ((form.data('validator').options.ignore ? ',' : '') + '[data-favisible] :hidden,[data-favisible]:hidden'); + }, 0); + + $("input,select", form).trigger("configchange"); } }, api: { @@ -10608,6 +10694,8 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator', 'validator-lang'], events.tagsinput(form); events.autocomplete(form); + + events.favisible(form); }, custom: {} }, @@ -12147,16 +12235,13 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr var btnGroup = $(this); var isPullRight = dropdownMenu.hasClass("pull-right") || dropdownMenu.hasClass("dropdown-menu-right"); var left, top, position; - if (dropdownMenu.outerHeight() + btnGroup.outerHeight() > tableBody.outerHeight() - 41) { + if (true || dropdownMenu.outerHeight() + btnGroup.outerHeight() > tableBody.outerHeight() - 41) { position = 'fixed'; top = btnGroup.offset().top - $(window).scrollTop() + btnGroup.outerHeight(); - left = isPullRight ? btnGroup.offset().left + btnGroup.outerWidth() - dropdownMenu.outerWidth() : btnGroup.offset().left; - } else { - if (btnGroup.offset().top + btnGroup.outerHeight() + dropdownMenu.outerHeight() > tableBody.offset().top + tableBody.outerHeight() - 30) { - position = 'absolute'; - left = isPullRight ? -(dropdownMenu.outerWidth() - btnGroup.outerWidth()) : 0; - top = -(dropdownMenu.outerHeight() + 3); + if ((top + dropdownMenu.outerHeight()) > $(window).height()) { + top = btnGroup.offset().top - dropdownMenu.outerHeight() - 5; } + left = isPullRight ? btnGroup.offset().left + btnGroup.outerWidth() - dropdownMenu.outerWidth() : btnGroup.offset().left; } if (left || top) { dropdownMenu.css({ @@ -12516,7 +12601,7 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr dropdown = j.dropdown ? j.dropdown : ''; url = j.url ? j.url : ''; url = typeof url === 'function' ? url.call(table, row, j) : (url ? Fast.api.fixurl(Table.api.replaceurl(url, row, table)) : 'javascript:;'); - classname = j.classname ? j.classname : 'btn-primary btn-' + name + 'one'; + classname = j.classname ? j.classname : (dropdown ? 'btn-' + name + 'one' : 'btn-primary btn-' + name + 'one'); icon = j.icon ? j.icon : ''; text = typeof j.text === 'function' ? j.text.call(table, row, j) : j.text ? j.text : ''; title = typeof j.title === 'function' ? j.title.call(table, row, j) : j.title ? j.title : text; diff --git a/public/assets/js/require-frontend.min.js b/public/assets/js/require-frontend.min.js index 92e9c711..0c814af6 100644 --- a/public/assets/js/require-frontend.min.js +++ b/public/assets/js/require-frontend.min.js @@ -10218,10 +10218,13 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator', 'validator-lang'], } obj.attr("fieldlist-item", true); obj.insertAfter($(tagName + "[fieldlist-item]", container).length > 0 ? $(tagName + "[fieldlist-item]:last", container) : $(tagName + ":first", container)); - //兼容旧版本事件 - $(".btn-append,.append", container).trigger("fa.event.appendfieldlist", obj); - //新版本事件 - container.trigger("fa.event.appendfieldlist", obj); + if ($(".btn-append,.append", container).length > 0) { + //兼容旧版本事件 + $(".btn-append,.append", container).trigger("fa.event.appendfieldlist", obj); + } else { + //新版本事件 + container.trigger("fa.event.appendfieldlist", obj); + } return obj; }; var fieldlist = $(".fieldlist", form); @@ -10351,6 +10354,89 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator', 'validator-lang'], $("[data-role='autocomplete']").autocomplete(); }); } + }, + favisible: function (form) { + if ($("[data-favisible]", form).length == 0) { + return; + } + var checkCondition = function (condition) { + var conditionArr = condition.split(/&&/); + var success = 0; + var baseregex = /^([a-z0-9\_]+)([>|<|=|\!]=?)(.*)$/i, strregex = /^('|")(.*)('|")$/, regregex = /^regex:(.*)$/; + + var operator_result = { + '>': function(a, b) { return a > b; }, + '>=': function(a, b) { return a >= b; }, + '<': function(a, b) { return a < b; }, + '<=': function(a, b) { return a <= b; }, + '==': function(a, b) { return a == b; }, + '!=': function(a, b) { return a != b; }, + 'in': function(a, b) { return b.split(/\,/).indexOf(a) > -1; }, + 'regex': function(a, b) { + var regParts = b.match(/^\/(.*?)\/([gim]*)$/); + var regexp = regParts ? new RegExp(regParts[1], regParts[2]) : new RegExp(b); + return regexp.test(a); + } + }; + + var dataArr = form.serializeArray(), dataObj = {}; + $(dataArr).each(function (i, field) { + dataObj[field.name] = field.value; + }); + + $.each(conditionArr, function (i, item) { + var basematches = baseregex.exec(item); + if (basematches) { + var name = basematches[1], operator = basematches[2], value = basematches[3].toString(); + if (operator === '=') { + var strmatches = strregex.exec(value); + operator = strmatches ? '==' : 'in'; + value = strmatches ? strmatches[2] : value; + } + var regmatches = regregex.exec(value); + if (regmatches) { + operator = 'regex'; + value = regmatches[1]; + } + var chkname = "row[" + name + "]"; + if (typeof dataObj[chkname] === 'undefined') { + return false; + } + var objvalue = dataObj[chkname]; + if (['>', '>=', '<', '<='].indexOf(operator) > -1) { + objvalue = parseFloat(objvalue); + value = parseFloat(value); + } + var result = operator_result[operator](objvalue, value); + success += (result ? 1 : 0); + } + }); + return success === conditionArr.length; + }; + form.on("keyup change click configchange", "input,select", function () { + $("[data-favisible][data-favisible!='']", form).each(function () { + var visible = $(this).data("favisible"); + var groupArr = visible.split(/\|\|/); + var success = 0; + $.each(groupArr, function (i, j) { + if (checkCondition(j)) { + success++; + } + }); + if (success > 0) { + $(this).removeClass("hidden"); + } else { + $(this).addClass("hidden"); + } + }); + }); + + //追加上忽略元素 + setTimeout(function () { + form.data('validator').options.ignore += ((form.data('validator').options.ignore ? ',' : '') + '[data-favisible] :hidden,[data-favisible]:hidden'); + }, 0); + + $("input,select", form).trigger("configchange"); } }, api: { @@ -10457,6 +10543,8 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator', 'validator-lang'], events.tagsinput(form); events.autocomplete(form); + + events.favisible(form); }, custom: {} }, @@ -11996,16 +12084,13 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr var btnGroup = $(this); var isPullRight = dropdownMenu.hasClass("pull-right") || dropdownMenu.hasClass("dropdown-menu-right"); var left, top, position; - if (dropdownMenu.outerHeight() + btnGroup.outerHeight() > tableBody.outerHeight() - 41) { + if (true || dropdownMenu.outerHeight() + btnGroup.outerHeight() > tableBody.outerHeight() - 41) { position = 'fixed'; top = btnGroup.offset().top - $(window).scrollTop() + btnGroup.outerHeight(); - left = isPullRight ? btnGroup.offset().left + btnGroup.outerWidth() - dropdownMenu.outerWidth() : btnGroup.offset().left; - } else { - if (btnGroup.offset().top + btnGroup.outerHeight() + dropdownMenu.outerHeight() > tableBody.offset().top + tableBody.outerHeight() - 30) { - position = 'absolute'; - left = isPullRight ? -(dropdownMenu.outerWidth() - btnGroup.outerWidth()) : 0; - top = -(dropdownMenu.outerHeight() + 3); + if ((top + dropdownMenu.outerHeight()) > $(window).height()) { + top = btnGroup.offset().top - dropdownMenu.outerHeight() - 5; } + left = isPullRight ? btnGroup.offset().left + btnGroup.outerWidth() - dropdownMenu.outerWidth() : btnGroup.offset().left; } if (left || top) { dropdownMenu.css({ @@ -12365,7 +12450,7 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr dropdown = j.dropdown ? j.dropdown : ''; url = j.url ? j.url : ''; url = typeof url === 'function' ? url.call(table, row, j) : (url ? Fast.api.fixurl(Table.api.replaceurl(url, row, table)) : 'javascript:;'); - classname = j.classname ? j.classname : 'btn-primary btn-' + name + 'one'; + classname = j.classname ? j.classname : (dropdown ? 'btn-' + name + 'one' : 'btn-primary btn-' + name + 'one'); icon = j.icon ? j.icon : ''; text = typeof j.text === 'function' ? j.text.call(table, row, j) : j.text ? j.text : ''; title = typeof j.title === 'function' ? j.title.call(table, row, j) : j.title ? j.title : text;