From a1deccd17ac05b5ea9255e89ba222bb71b05cc16 Mon Sep 17 00:00:00 2001 From: Karson Date: Fri, 13 Dec 2019 12:16:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=82=AE=E7=AE=B1/=E6=89=8B?= =?UTF-8?q?=E6=9C=BA/=E5=85=AC=E4=BC=97=E5=8F=B7/=E6=99=AE=E9=80=9A?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E5=9B=9B=E7=A7=8D=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E5=90=8E=E5=8F=B0=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=80=89=E9=A1=B9=E5=8D=A1=E5=88=87=E6=8D=A2=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=99=AE=E9=80=9A=E6=96=87=E6=9C=AC=E6=A1=86=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9Efieldlist=E6=94=AF=E6=8C=81=E6=99=AE=E9=80=9AHTML?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=20=E4=BF=AE=E5=A4=8Ddatetimepicker=E4=B8=8D?= =?UTF-8?q?=E8=A7=A6=E5=8F=91fieldlist=E5=93=8D=E5=BA=94=E7=9A=84BUG=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=9D=A2=E5=8C=85=E5=B1=91=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=20=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=92=8C=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Addon.php | 6 +- application/admin/library/Auth.php | 27 +- application/config.php | 22 +- application/index/controller/User.php | 23 +- application/index/view/common/captcha.html | 27 ++ application/index/view/user/register.html | 8 +- bower.json | 2 +- public/assets/css/wechat/menu.css | 342 --------------------- public/assets/img/weixin_icon.png | Bin 1828 -> 0 bytes public/assets/img/wx_mobile_footer_bg.png | Bin 1348 -> 0 bytes public/assets/img/wx_mobile_header_bg.png | Bin 12673 -> 0 bytes public/assets/img/wx_mobile_index.png | Bin 154 -> 0 bytes public/assets/js/backend.js | 6 +- public/assets/js/frontend.js | 93 +++--- public/assets/js/require-backend.min.js | 67 ++-- public/assets/js/require-form.js | 48 +-- public/assets/js/require-frontend.min.js | 93 +++--- public/assets/js/require-table.js | 11 +- 18 files changed, 264 insertions(+), 511 deletions(-) create mode 100644 application/index/view/common/captcha.html delete mode 100644 public/assets/css/wechat/menu.css delete mode 100644 public/assets/img/weixin_icon.png delete mode 100644 public/assets/img/wx_mobile_footer_bg.png delete mode 100644 public/assets/img/wx_mobile_header_bg.png delete mode 100644 public/assets/img/wx_mobile_index.png diff --git a/application/admin/controller/Addon.php b/application/admin/controller/Addon.php index c9f6ba7a..691fa442 100644 --- a/application/admin/controller/Addon.php +++ b/application/admin/controller/Addon.php @@ -46,11 +46,11 @@ class Addon extends Backend /** * 配置 */ - public function config($ids = null) + public function config($name = null) { - $name = $this->request->get("name"); + $name = $name ? $name : $this->request->get("name"); if (!$name) { - $this->error(__('Parameter %s can not be empty', $ids ? 'id' : 'name')); + $this->error(__('Parameter %s can not be empty', 'name')); } if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) { $this->error(__('Addon name incorrect')); diff --git a/application/admin/library/Auth.php b/application/admin/library/Auth.php index ab123a3a..73826e45 100644 --- a/application/admin/library/Auth.php +++ b/application/admin/library/Auth.php @@ -345,24 +345,33 @@ class Auth extends \fast\Auth if ($this->breadcrumb || !$path) { return $this->breadcrumb; } - $path_rule_id = 0; + $titleArr = []; + $menuArr = []; + $urlArr = explode('/', $path); + foreach ($urlArr as $index => $item) { + $pathArr[implode('/', array_slice($urlArr, 0, $index + 1))] = $index; + } + if (!$this->rules && $this->id) { + $this->getRuleList(); + } foreach ($this->rules as $rule) { - $path_rule_id = $rule['name'] == $path ? $rule['id'] : $path_rule_id; - } - if ($path_rule_id) { - $this->breadcrumb = Tree::instance()->init($this->rules)->getParents($path_rule_id, true); - foreach ($this->breadcrumb as $k => &$v) { - $v['url'] = url($v['name']); - $v['title'] = __($v['title']); + if (isset($pathArr[$rule['name']])) { + $rule['title'] = __($rule['title']); + $rule['url'] = url($rule['name']); + $titleArr[$pathArr[$rule['name']]] = $rule['title']; + $menuArr[$pathArr[$rule['name']]] = $rule; } + } + ksort($menuArr); + $this->breadcrumb = $menuArr; return $this->breadcrumb; } /** * 获取左侧和顶部菜单栏 * - * @param array $params URL对应的badge数据 + * @param array $params URL对应的badge数据 * @param string $fixedPage 默认页 * @return array */ diff --git a/application/config.php b/application/config.php index 64fda49a..4b5f83fb 100755 --- a/application/config.php +++ b/application/config.php @@ -258,24 +258,26 @@ return [ //FastAdmin配置 'fastadmin' => [ //是否开启前台会员中心 - 'usercenter' => true, + 'usercenter' => true, + //会员注册验证码类型email/mobile/wechat/text/false + 'user_register_captcha' => 'text', //登录验证码 - 'login_captcha' => true, + 'login_captcha' => true, //登录失败超过10次则1天后重试 - 'login_failure_retry' => true, + 'login_failure_retry' => true, //是否同一账号同一时间只能在一个地方登录 - 'login_unique' => false, + 'login_unique' => false, //是否开启IP变动检测 - 'loginip_check' => true, + 'loginip_check' => true, //登录页默认背景图 - 'login_background' => "/assets/img/loginbg.jpg", + 'login_background' => "/assets/img/loginbg.jpg", //是否启用多级菜单导航 - 'multiplenav' => false, + 'multiplenav' => false, //自动检测更新 - 'checkupdate' => false, + 'checkupdate' => false, //版本号 - 'version' => '1.0.0.20191101_beta', + 'version' => '1.0.0.20191212_beta', //API接口地址 - 'api_url' => 'https://api.fastadmin.net', + 'api_url' => 'https://api.fastadmin.net', ], ]; diff --git a/application/index/controller/User.php b/application/index/controller/User.php index 0b77b003..46bc2c6b 100644 --- a/application/index/controller/User.php +++ b/application/index/controller/User.php @@ -2,7 +2,9 @@ namespace app\index\controller; +use addons\wechat\model\WechatCaptcha; use app\common\controller\Frontend; +use app\common\library\Ems; use app\common\library\Sms; use think\Config; use think\Cookie; @@ -100,8 +102,6 @@ class User extends Frontend 'username.length' => 'Username must be 3 to 30 characters', 'password.require' => 'Password can not be empty', 'password.length' => 'Password must be 6 to 30 characters', - //'captcha.require' => 'Captcha can not be empty', - //'captcha.captcha' => 'Captcha is incorrect', 'email' => 'Email is incorrect', 'mobile' => 'Mobile is incorrect', ]; @@ -110,11 +110,23 @@ class User extends Frontend 'password' => $password, 'email' => $email, 'mobile' => $mobile, - //'captcha' => $captcha, '__token__' => $token, ]; - $ret = Sms::check($mobile, $captcha, 'register'); - if (!$ret) { + //验证码 + $captchaResult = true; + $captchaType = config("fastadmin.user_register_captcha"); + if ($captchaType) { + if ($captchaType == 'mobile') { + $captchaResult = Sms::check($mobile, $captcha, 'register'); + } elseif ($captchaType == 'email') { + $captchaResult = Ems::check($mobile, $captcha, 'register'); + } elseif ($captchaType == 'wechat') { + $captchaResult = WechatCaptcha::check($captcha, 'register'); + } elseif ($captchaType == 'text') { + $captchaResult = \think\Validate::is($captcha, 'captcha'); + } + } + if (!$captchaResult) { $this->error(__('Captcha is incorrect')); } $validate = new Validate($rule, $msg); @@ -134,6 +146,7 @@ class User extends Frontend && !preg_match("/(user\/login|user\/register|user\/logout)/i", $referer)) { $url = $referer; } + $this->view->assign('captchaType', config('fastadmin.user_register_captcha')); $this->view->assign('url', $url); $this->view->assign('title', __('Register')); return $this->view->fetch(); diff --git a/application/index/view/common/captcha.html b/application/index/view/common/captcha.html new file mode 100644 index 00000000..8de71d7f --- /dev/null +++ b/application/index/view/common/captcha.html @@ -0,0 +1,27 @@ + +{if "[type]" == 'email'} + + + 发送验证码 + +{elseif "[type]" == 'mobile'/} + + + 发送验证码 + +{elseif "[type]" == 'wechat'/} + {if get_addon_info('wechat')} + + + 获取验证码 + + {else/} + 请在后台插件管理中安装《微信管理插件》 + {/if} +{elseif "[type]" == 'text' /} + + + + +{/if} + \ No newline at end of file diff --git a/application/index/view/user/register.html b/application/index/view/user/register.html index 6c145c79..ac8ce6be 100644 --- a/application/index/view/user/register.html +++ b/application/index/view/user/register.html @@ -34,18 +34,18 @@

+ + {if $captchaType}
- - - 发送验证码 - + {include file="common/captcha" event="register" type="$captchaType" /}

+ {/if}
diff --git a/bower.json b/bower.json index 174f802a..03875fe6 100755 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tableExport.jquery.plugin": "~1.10.3", "jquery-slimscroll": "~1.3.8", "jquery.cookie": "~1.4.1", - "Sortable": "~1.5.0", + "Sortable": "~1.10.0", "nice-validator": "~1.1.1", "art-template": "^3.1.3", "requirejs-plugins": "~1.0.3", diff --git a/public/assets/css/wechat/menu.css b/public/assets/css/wechat/menu.css deleted file mode 100644 index b0636f76..00000000 --- a/public/assets/css/wechat/menu.css +++ /dev/null @@ -1,342 +0,0 @@ -.weixin-menu-setting{ - margin:0; - margin-bottom:10px; - width:100%; -} -.mobile-head-title{ - color: #fff; - text-align: center; - padding-top: 33px; - font-size: 15px; - width: auto; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - word-wrap: normal; - margin: 0 40px 0 70px; -} -.weixin-body { - padding:0; - margin:0; - margin-left:337px; -} -.weixin-content,.no-weixin-content{ - background-color: #f4f5f9; - border: 1px solid #e7e7eb; - padding:15px; -} -.no-weixin-content{ - border:#fff; - background-color: #fff; - vertical-align: middle; - padding-top:200px; - text-align: center; -} -@media (max-width: 720px) { - .weixin-body { - margin-left:0; - margin-top:560px; - } -} -.weixin-menu-title{ - border-bottom: 1px solid #e7e7eb; - font-size: 16px; - padding: 0 20px; - line-height: 55px; - margin-bottom: 20px; -} -.mobile-menu-preview{ - display:block; - float:left; - position:relative; - width: 317px; - height: 550px; - background: transparent url(../../img/wx_mobile_header_bg.png) no-repeat 0 0; - background-position: 0 0; - border: 1px solid #e7e7eb; -} - -.mobile-menu-preview .menu-list { - position: absolute; - height:50px; - bottom: 0; - left: 0; - right: 0; - border-top: 1px solid #e7e7eb; - background: transparent url(../../img/wx_mobile_footer_bg.png) no-repeat 0 0; - background-position: 0 0; - background-repeat: no-repeat; - padding-left: 43px; - margin:0; -} -.menu-list .menu-item,.menu-list .add-item{ - line-height: 50px; - position: relative; - float: left; - text-align: center; - width: 33.33%; - list-style: none; -} -.ui-sortable-placeholder{ - background-color:#fff; -} -.menu-item a,.add-item a{ - display: block; - width: auto; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - word-wrap: normal; - color: #616161; - text-decoration: none; -} -.menu-item.current a.menu-link{ - border: 1px solid #44b549; - line-height: 48px; - background-color: #fff; - color: #44b549; -} -.menu-item .icon-menu-dot{ - background: url(../../img/wx_mobile_index.png) 0 0 no-repeat; - width: 7px; - height: 7px; - vertical-align: middle; - display: inline-block; - margin-right: 2px; - margin-top: -2px; - bottom: 60px; - background-color: #fafafa; - border-top-width: 0; -} -.menu-item .menu-link,.add-item .menu-link{ - border-left-width: 0; - border-left: 1px solid #e7e7eb; - text-align: center; -} - -.sub-menu-item a,.add-sub-item a{ - border: 1px solid #d0d0d0; - position:relative; - padding:0 0.5em; -} -.sub-menu-item.current a{ - border: 1px solid #44b549; - background-color: #fff; - color: #44b549; - z-index: 1; -} -.sub-menu-list li a:hover{ - background:#f1f1f1; -} -.menu-item.current .menu-link{ - border: 1px solid #44b549; - line-height: 48px; - background-color: #fff; - color: #44b549; -} -.sub-menu-box{ - position: absolute; - bottom: 60px; - left: 0; - width: 100%; - background-color: #fff; - border-top: none; -} -.sub-menu-list{ - line-height: 50px; - margin:0;padding:0; -} -.sub-menu-list li{ - line-height: 44px; - margin: -1px -1px 0; - list-style: none; -} -.sub-menu-box .arrow { - position: absolute; - left: 50%; - margin-left: -6px; -} - -.sub-menu-box .arrow-in { - bottom: -5px; - display: inline-block; - width: 0; - height: 0; - border-width: 6px; - border-style: dashed; - border-color: transparent; - border-bottom-width: 0; - border-top-color: #fafafa; - border-top-style: solid; -} -.sub-menu-box .arrow-out { - bottom: -6px; - display: inline-block; - width: 0; - height: 0; - border-width: 6px; - border-style: dashed; - border-color: transparent; - border-bottom-width: 0; - border-top-color: #d0d0d0; - border-top-style: solid; -} -.sub-menu-item.current{ - -} -.sub-menu-inner-add{ - display: block; - border-top: 1px solid #e7e7eb; - width: auto; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - word-wrap: normal; - cursor: pointer; -} -.weixin-icon{ - background: url(../../img/weixin_icon.png) 0 -4418px no-repeat; - width: 16px; - height: 16px; - vertical-align: middle; - display: inline-block; - line-height: 100px; - overflow: hidden; -} -.weixin-icon.add-gray { - background-position: 0 0; -} -.weixin-icon.sort-gray { - background: url(../../img/weixin_icon.png) 0 -32px no-repeat; - background-position: 0 -32px; - margin-top: -1px; - display:none; - width: 20px; -} -.weixin-icon.big-add-gray{ - background-position: -36px 0; - width: 36px; - height: 36px; - vertical-align: middle; -} -.menu-item a.menu-link:hover{ - -} - -.add-item.extra,.add-item.extra{ - float: none; - width: auto; - overflow: hidden; -} - -table.btn-bar{width:100%;} -table.btn-bar td{ text-align: center; } - -.item-info .item-head{ - position:relative; - padding: 0; - border-bottom: 1px solid #e7e7eb; -} -.item-info .item-delete{ - position:absolute; - top:0; - right:0; -} - -table.weixin-form td{ - vertical-align:middle; - height:24px; - line-height: 24px; - padding: 8px 0; -} - -#menu-content{ - background-color: #fff; - padding: 16px 20px; - border: 1px solid #e7e7eb; -} -.menu-content-tips{ - color: #8d8d8d; - padding-bottom: 10px; -} - -.form-item dl{ - position:relative; - margin:10px 0; -} -.form-item dl dt{ - width:90px; - height: 30px; - line-height: 30px; - text-align: right; - position:absolute; - vertical-align: middle; - top:0; - left:0; - bottom:0; - display:block; -} -.form-item dl dd{ - position:relative; - display:block; - margin-left: 90px; - line-height: 30px; -} -.form-item .input-box { - display: inline-block; - position: relative; - height: 30px; - line-height: 30px; - vertical-align: middle; - width: 278px; - font-size: 14px; - padding: 0 10px; - border: 1px solid #e7e7eb; - box-shadow: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - border-radius: 0; - -moz-border-radius: 0; - -webkit-border-radius: 0; - background-color: #fff; -} -.form-item .input-box input{ - width: 100%; - background-color: transparent; - border: 0; - outline: 0; - height:30px; -} - -.clickbox{ - text-align: center; - margin:40px 0; -} -.create-click{ - display: inline-block; - padding-top: 30px; - position: relative; - width:240px; - height: 120px; - border: 2px dotted #d9dadc; - text-align: center; - margin-bottom: 20px; - margin-left: 50px; -} -.create-click a{ - display:block; -} -.create-click a strong{ - display:block; -} - -.keytitle { - position:absolute; - width:100%; - text-align:center; - top:0px; - height:35px; - line-height:35px; - background:#f4f5f9; -} -dl.is-item dd>label {margin-left:5px;} \ No newline at end of file diff --git a/public/assets/img/weixin_icon.png b/public/assets/img/weixin_icon.png deleted file mode 100644 index 75bd668972363473fa6fddb3c6c78dff24522700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1828 zcmeAS@N?(olHy`uVBq!ia0vp^ix?OfCvdOl zO)W`OsL0L9E4HezRRWu91!RMS^_3LBN=mYAl^~9a@C{IK&M!(;Fx4~FO*SwzQ82gE zGc+|cu`tw8FfuSS);BQLH#F8YG_o?Vv@$eRfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fZE`@j@w*YQzUNJP7fB~jokyxN_sAmB35=^15FMg%Dxp39RB|)hO_hL1; zIHa;5RX-@TIKQ+g85nVC${?!>telHd6HD@oLh|!-V4)b0kzbNuoRMFk;OwlR5uTZs zl3!k|30CgwYvq|&T#}fVoa*Ufs{}MaFEca6%FM~k%-q7+(8w_6Nw>eUB2MjsTfNbw940wx|16P{{;9C*4<%>yR(B4DbHk5vrd8Duw;6yS=U6U&HruDF3#v*~xdN2R8^fc5n!`bOfHU?Z{PZ7{HQ#{Y%}d_ zm9U`Vp^18Dt0R7Ytcw>l5Cj=@ZM|UqsiHDPlj0s-J|CBJivNr`yI)@we`6>psKg$#%E;?hX1QLYX0kw)) z3K|L|QjoxDA%kL3R00Jm$y5oK04x-V^%^utNc367#SEE=o=X68ye{vnp+tgSs558K!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EV zetCJhUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpucqiS6q^qmz?V9Vygtyua}vbVr6J*;^buLXku>WW@2dQYU*fd;OJ=PYT@W& zWNu+4ZC?Vt)0Bv?jEy^rQO>ryA&s6|>*eVmZTa0j; z2i2Q`+bza8_38s1qYsK!q-cf-0n-kM2~V^@4m{bX<^j`s5in63MQrc{=CEC!E{-7; zx8B^@?IjZ^bKqg=MuXNxPC^A+BMJ?34TM}5|KJg8%1==Jq0ltde}Shjhgc zBwd^Eh40UUSHG-2NqJa45HBsAc->*@l|O%r7uM_O@qhV#tbX=VTN5OB_OZHB?|2jQmF8j?|o=~3P@tBV%pzUd(y_X5agFMj+9?Z;SpbF_kAc9B628 n1Y$yl2Y%)kp^j~lTlnWvqUJ7=Y>Ul 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 X!lw4y|2_Uwf${mHs$8XvQQ-do;aw2N diff --git a/public/assets/img/wx_mobile_index.png b/public/assets/img/wx_mobile_index.png deleted file mode 100644 index db349df5d7636527891a17e5d0235bd358cfea0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJga2eZ3sRMuMOZJn04-ziboFyt=akR{ E00f9W1^@s6 diff --git a/public/assets/js/backend.js b/public/assets/js/backend.js index 3432f34d..596c2c52 100755 --- a/public/assets/js/backend.js +++ b/public/assets/js/backend.js @@ -140,7 +140,7 @@ define(['fast', 'template', 'moment'], function (Fast, Template, Moment) { $(document).on('click', '.btn-dialog,.dialogit', function (e) { var that = this; var options = $.extend({}, $(that).data() || {}); - var url = Backend.api.replaceids(that, $(that).attr('href')); + var url = Backend.api.replaceids(that, $(that).data("url") || $(that).attr('href')); var title = $(that).attr("title") || $(that).data("title") || $(that).data('original-title'); var button = Backend.api.gettablecolumnbutton(options); if (button && typeof button.callback === 'function') { @@ -152,7 +152,7 @@ define(['fast', 'template', 'moment'], function (Fast, Template, Moment) { Layer.close(index); }); } else { - Backend.api.open(url, title, options); + window[$(that).data("window") || 'self'].Backend.api.open(url, title, options); } return false; }); @@ -160,7 +160,7 @@ define(['fast', 'template', 'moment'], function (Fast, Template, Moment) { $(document).on('click', '.btn-addtabs,.addtabsit', function (e) { var that = this; var options = $.extend({}, $(that).data() || {}); - var url = Backend.api.replaceids(that, $(that).attr('href')); + var url = Backend.api.replaceids(that, $(that).data("url") || $(that).attr('href')); var title = $(that).attr("title") || $(that).data("title") || $(that).data('original-title'); var icon = $(that).attr("icon") || $(that).data("icon"); if (typeof options.confirm !== 'undefined') { diff --git a/public/assets/js/frontend.js b/public/assets/js/frontend.js index a90e189f..0aef4581 100644 --- a/public/assets/js/frontend.js +++ b/public/assets/js/frontend.js @@ -6,47 +6,60 @@ define(['fast', 'template', 'moment'], function (Fast, Template, Moment) { //发送验证码 $(document).on("click", ".btn-captcha", function (e) { var type = $(this).data("type") ? $(this).data("type") : 'mobile'; - var element = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : $("input[name='" + type + "']", $(this).closest("form")); - var text = type === 'email' ? '邮箱' : '手机号码'; - if (element.val() === "") { - Layer.msg(text + "不能为空!"); - element.focus(); - return false; - } else if (type === 'mobile' && !element.val().match(/^1[3-9]\d{9}$/)) { - Layer.msg("请输入正确的" + text + "!"); - element.focus(); - return false; - } else if (type === 'email' && !element.val().match(/^[\w\+\-]+(\.[\w\+\-]+)*@[a-z\d\-]+(\.[a-z\d\-]+)*\.([a-z]{2,4})$/)) { - Layer.msg("请输入正确的" + text + "!"); - element.focus(); - return false; - } - var that = this; - element.isValid(function (v) { - if (v) { - $(that).addClass("disabled", true).text("发送中..."); - var data = {event: $(that).data("event")}; - data[type] = element.val(); - Frontend.api.ajax({url: $(that).data("url"), data: data}, function () { - clearInterval(si[type]); - var seconds = 60; - si[type] = setInterval(function () { - seconds--; - if (seconds <= 0) { - clearInterval(si); - $(that).removeClass("disabled").text("发送验证码"); - } else { - $(that).addClass("disabled").text(seconds + "秒后可再次发送"); - } - }, 1000); - }, function () { - $(that).removeClass("disabled").text('发送验证码'); - }); - } else { - Layer.msg("请确认已经输入了正确的" + text + "!"); - } - }); + var btn = this; + Frontend.api.sendcaptcha = function (btn, type, data, callback) { + $(btn).addClass("disabled", true).text("发送中..."); + Frontend.api.ajax({url: $(btn).data("url"), data: data}, function (data, ret) { + clearInterval(si[type]); + var seconds = 60; + si[type] = setInterval(function () { + seconds--; + if (seconds <= 0) { + clearInterval(si); + $(btn).removeClass("disabled").text("发送验证码"); + } else { + $(btn).addClass("disabled").text(seconds + "秒后可再次发送"); + } + }, 1000); + if (typeof callback == 'function') { + callback.call(this, data, ret); + } + }, function () { + $(btn).removeClass("disabled").text('发送验证码'); + }); + }; + if (['mobile', 'email'].indexOf(type) > -1) { + var element = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : $("input[name='" + type + "']", $(this).closest("form")); + var text = type === 'email' ? '邮箱' : '手机号码'; + if (element.val() === "") { + Layer.msg(text + "不能为空!"); + element.focus(); + return false; + } else if (type === 'mobile' && !element.val().match(/^1[3-9]\d{9}$/)) { + Layer.msg("请输入正确的" + text + "!"); + element.focus(); + return false; + } else if (type === 'email' && !element.val().match(/^[\w\+\-]+(\.[\w\+\-]+)*@[a-z\d\-]+(\.[a-z\d\-]+)*\.([a-z]{2,4})$/)) { + Layer.msg("请输入正确的" + text + "!"); + element.focus(); + return false; + } + element.isValid(function (v) { + if (v) { + var data = {event: $(btn).data("event")}; + data[type] = element.val(); + Frontend.api.sendcaptcha(btn, type, data); + } else { + Layer.msg("请确认已经输入了正确的" + text + "!"); + } + }); + } else { + var data = {event: $(btn).data("event")}; + Frontend.api.sendcaptcha(btn, type, data, function (data, ret) { + Layer.open({title: false, area: ["400px", "430px"], content: "
扫一扫关注公众号获取验证码
", type: 1}); + }); + } return false; }); //tooltip和popover diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js index 6038c716..056879ae 100644 --- a/public/assets/js/require-backend.min.js +++ b/public/assets/js/require-backend.min.js @@ -5766,7 +5766,7 @@ define('backend',['fast', 'template', 'moment'], function (Fast, Template, Momen $(document).on('click', '.btn-dialog,.dialogit', function (e) { var that = this; var options = $.extend({}, $(that).data() || {}); - var url = Backend.api.replaceids(that, $(that).attr('href')); + var url = Backend.api.replaceids(that, $(that).data("url") || $(that).attr('href')); var title = $(that).attr("title") || $(that).data("title") || $(that).data('original-title'); var button = Backend.api.gettablecolumnbutton(options); if (button && typeof button.callback === 'function') { @@ -5778,7 +5778,7 @@ define('backend',['fast', 'template', 'moment'], function (Fast, Template, Momen Layer.close(index); }); } else { - Backend.api.open(url, title, options); + window[$(that).data("window") || 'self'].Backend.api.open(url, title, options); } return false; }); @@ -5786,7 +5786,7 @@ define('backend',['fast', 'template', 'moment'], function (Fast, Template, Momen $(document).on('click', '.btn-addtabs,.addtabsit', function (e) { var that = this; var options = $.extend({}, $(that).data() || {}); - var url = Backend.api.replaceids(that, $(that).attr('href')); + var url = Backend.api.replaceids(that, $(that).data("url") || $(that).attr('href')); var title = $(that).attr("title") || $(that).data("title") || $(that).data('original-title'); var icon = $(that).attr("icon") || $(that).data("icon"); if (typeof options.confirm !== 'undefined') { @@ -8953,7 +8953,7 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef }, dataFilter: function (data) { if (data.code === 1) { - return data.msg ? { "ok": data.msg } : ''; + return data.msg ? {"ok": data.msg} : ''; } else { return data.msg; } @@ -9100,7 +9100,9 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef showClose: true }; $('.datetimepicker', form).parent().css('position', 'relative'); - $('.datetimepicker', form).datetimepicker(options); + $('.datetimepicker', form).datetimepicker(options).on('dp.change', function (e) { + $(this, document).trigger("changed"); + }); }); } }, @@ -9141,7 +9143,7 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef $(this).on('cancel.daterangepicker', function (ev, picker) { $(this).val('').trigger('blur'); }); - $(this).daterangepicker($.extend({}, options, $(this).data()), callback); + $(this).daterangepicker($.extend(true, options, $(this).data()), callback); }); }); } @@ -9203,7 +9205,7 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef var refresh = function (name) { var data = {}; var textarea = $("textarea[name='" + name + "']", form); - var container = textarea.closest("dl"); + var container = $(".fieldlist[data-name='" + name + "']"); var template = container.data("template"); $.each($("input,select,textarea", container).serializeArray(), function (i, j) { var reg = /\[(\w+)\]\[(\w+)\]$/g; @@ -9231,42 +9233,44 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef textarea.val(JSON.stringify(result)); }; //监听文本框改变事件 - $(document).on('change keyup', ".fieldlist input,.fieldlist textarea,.fieldlist select", function () { - refresh($(this).closest("dl").data("name")); + $(document).on('change keyup changed', ".fieldlist input,.fieldlist textarea,.fieldlist select", function () { + refresh($(this).closest(".fieldlist").data("name")); }); //追加控制 $(".fieldlist", form).on("click", ".btn-append,.append", function (e, row) { - var container = $(this).closest("dl"); + var container = $(this).closest(".fieldlist"); + var tagName = container.data("tag") || "dd"; var index = container.data("index"); var name = container.data("name"); var template = container.data("template"); var data = container.data(); index = index ? parseInt(index) : 0; container.data("index", index + 1); - var row = row ? row : {}; + row = row ? row : {}; var vars = {index: index, name: name, data: data, row: row}; var html = template ? Template(template, vars) : Template.render(Form.config.fieldlisttpl, vars); - $(html).insertBefore($(this).closest("dd")); - $(this).trigger("fa.event.appendfieldlist", $(this).closest("dd").prev()); + $(html).insertBefore($(tagName + ":last", container)); + $(this).trigger("fa.event.appendfieldlist", $(this).closest(tagName).prev()); }); //移除控制 - $(".fieldlist", form).on("click", "dd .btn-remove", function () { - var container = $(this).closest("dl"); - $(this).closest("dd").remove(); + $(".fieldlist", form).on("click", ".btn-remove", function () { + var container = $(this).closest(".fieldlist"); + var tagName = container.data("tag") || "dd"; + $(this).closest(tagName).remove(); refresh(container.data("name")); }); - //拖拽排序 - $("dl.fieldlist", form).dragsort({ - itemSelector: 'dd', - dragSelector: ".btn-dragsort", - dragEnd: function () { - refresh($(this).closest("dl").data("name")); - }, - placeHolderTemplate: "
" - }); - //渲染数据 + //渲染数据&拖拽排序 $(".fieldlist", form).each(function () { var container = this; + var tagName = $(this).data("tag") || "dd"; + $(this).dragsort({ + itemSelector: tagName, + dragSelector: ".btn-dragsort", + dragEnd: function () { + refresh($(this).closest(".fieldlist").data("name")); + }, + placeHolderTemplate: $("<" + tagName + "/>") + }); var textarea = $("textarea[name='" + $(this).data("name") + "']", form); if (textarea.val() == '') { return true; @@ -10180,10 +10184,15 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr $(Table.config.disabledbtn, toolbar).toggleClass('disabled', !ids.length); }); // 绑定TAB事件 - $('.panel-heading ul[data-field] li a[data-toggle="tab"]').on('shown.bs.tab', function (e) { - var field = $(this).closest("ul").data("field"); + $('.panel-heading [data-field] a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + var field = $(this).closest("[data-field]").data("field"); var value = $(this).data("value"); - $("select[name='" + field + "'] option[value='" + value + "']", table.closest(".bootstrap-table").find(".commonsearch-table")).prop("selected", true); + var object = $("[name='" + field + "']", table.closest(".bootstrap-table").find(".commonsearch-table")); + if (object.prop('tagName') == "SELECT") { + $("option[value='" + value + "']", object).prop("selected", true); + } else { + object.val(value); + } table.bootstrapTable('refresh', {pageNumber: 1}); return false; }); diff --git a/public/assets/js/require-form.js b/public/assets/js/require-form.js index c0549006..7d429e0a 100755 --- a/public/assets/js/require-form.js +++ b/public/assets/js/require-form.js @@ -20,7 +20,7 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U }, dataFilter: function (data) { if (data.code === 1) { - return data.msg ? { "ok": data.msg } : ''; + return data.msg ? {"ok": data.msg} : ''; } else { return data.msg; } @@ -167,7 +167,9 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U showClose: true }; $('.datetimepicker', form).parent().css('position', 'relative'); - $('.datetimepicker', form).datetimepicker(options); + $('.datetimepicker', form).datetimepicker(options).on('dp.change', function (e) { + $(this, document).trigger("changed"); + }); }); } }, @@ -270,7 +272,7 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U var refresh = function (name) { var data = {}; var textarea = $("textarea[name='" + name + "']", form); - var container = textarea.closest("dl"); + var container = $(".fieldlist[data-name='" + name + "']"); var template = container.data("template"); $.each($("input,select,textarea", container).serializeArray(), function (i, j) { var reg = /\[(\w+)\]\[(\w+)\]$/g; @@ -298,42 +300,44 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U textarea.val(JSON.stringify(result)); }; //监听文本框改变事件 - $(document).on('change keyup', ".fieldlist input,.fieldlist textarea,.fieldlist select", function () { - refresh($(this).closest("dl").data("name")); + $(document).on('change keyup changed', ".fieldlist input,.fieldlist textarea,.fieldlist select", function () { + refresh($(this).closest(".fieldlist").data("name")); }); //追加控制 $(".fieldlist", form).on("click", ".btn-append,.append", function (e, row) { - var container = $(this).closest("dl"); + var container = $(this).closest(".fieldlist"); + var tagName = container.data("tag") || "dd"; var index = container.data("index"); var name = container.data("name"); var template = container.data("template"); var data = container.data(); index = index ? parseInt(index) : 0; container.data("index", index + 1); - var row = row ? row : {}; + row = row ? row : {}; var vars = {index: index, name: name, data: data, row: row}; var html = template ? Template(template, vars) : Template.render(Form.config.fieldlisttpl, vars); - $(html).insertBefore($(this).closest("dd")); - $(this).trigger("fa.event.appendfieldlist", $(this).closest("dd").prev()); + $(html).insertBefore($(tagName + ":last", container)); + $(this).trigger("fa.event.appendfieldlist", $(this).closest(tagName).prev()); }); //移除控制 - $(".fieldlist", form).on("click", "dd .btn-remove", function () { - var container = $(this).closest("dl"); - $(this).closest("dd").remove(); + $(".fieldlist", form).on("click", ".btn-remove", function () { + var container = $(this).closest(".fieldlist"); + var tagName = container.data("tag") || "dd"; + $(this).closest(tagName).remove(); refresh(container.data("name")); }); - //拖拽排序 - $("dl.fieldlist", form).dragsort({ - itemSelector: 'dd', - dragSelector: ".btn-dragsort", - dragEnd: function () { - refresh($(this).closest("dl").data("name")); - }, - placeHolderTemplate: "
" - }); - //渲染数据 + //渲染数据&拖拽排序 $(".fieldlist", form).each(function () { var container = this; + var tagName = $(this).data("tag") || "dd"; + $(this).dragsort({ + itemSelector: tagName, + dragSelector: ".btn-dragsort", + dragEnd: function () { + refresh($(this).closest(".fieldlist").data("name")); + }, + placeHolderTemplate: $("<" + tagName + "/>") + }); var textarea = $("textarea[name='" + $(this).data("name") + "']", form); if (textarea.val() == '') { return true; diff --git a/public/assets/js/require-frontend.min.js b/public/assets/js/require-frontend.min.js index 78171e20..9ac07a6d 100644 --- a/public/assets/js/require-frontend.min.js +++ b/public/assets/js/require-frontend.min.js @@ -5625,47 +5625,60 @@ define('frontend',['fast', 'template', 'moment'], function (Fast, Template, Mome //发送验证码 $(document).on("click", ".btn-captcha", function (e) { var type = $(this).data("type") ? $(this).data("type") : 'mobile'; - var element = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : $("input[name='" + type + "']", $(this).closest("form")); - var text = type === 'email' ? '邮箱' : '手机号码'; - if (element.val() === "") { - Layer.msg(text + "不能为空!"); - element.focus(); - return false; - } else if (type === 'mobile' && !element.val().match(/^1[3-9]\d{9}$/)) { - Layer.msg("请输入正确的" + text + "!"); - element.focus(); - return false; - } else if (type === 'email' && !element.val().match(/^[\w\+\-]+(\.[\w\+\-]+)*@[a-z\d\-]+(\.[a-z\d\-]+)*\.([a-z]{2,4})$/)) { - Layer.msg("请输入正确的" + text + "!"); - element.focus(); - return false; - } - var that = this; - element.isValid(function (v) { - if (v) { - $(that).addClass("disabled", true).text("发送中..."); - var data = {event: $(that).data("event")}; - data[type] = element.val(); - Frontend.api.ajax({url: $(that).data("url"), data: data}, function () { - clearInterval(si[type]); - var seconds = 60; - si[type] = setInterval(function () { - seconds--; - if (seconds <= 0) { - clearInterval(si); - $(that).removeClass("disabled").text("发送验证码"); - } else { - $(that).addClass("disabled").text(seconds + "秒后可再次发送"); - } - }, 1000); - }, function () { - $(that).removeClass("disabled").text('发送验证码'); - }); - } else { - Layer.msg("请确认已经输入了正确的" + text + "!"); - } - }); + var btn = this; + Frontend.api.sendcaptcha = function (btn, type, data, callback) { + $(btn).addClass("disabled", true).text("发送中..."); + Frontend.api.ajax({url: $(btn).data("url"), data: data}, function (data, ret) { + clearInterval(si[type]); + var seconds = 60; + si[type] = setInterval(function () { + seconds--; + if (seconds <= 0) { + clearInterval(si); + $(btn).removeClass("disabled").text("发送验证码"); + } else { + $(btn).addClass("disabled").text(seconds + "秒后可再次发送"); + } + }, 1000); + if (typeof callback == 'function') { + callback.call(this, data, ret); + } + }, function () { + $(btn).removeClass("disabled").text('发送验证码'); + }); + }; + if (['mobile', 'email'].indexOf(type) > -1) { + var element = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : $("input[name='" + type + "']", $(this).closest("form")); + var text = type === 'email' ? '邮箱' : '手机号码'; + if (element.val() === "") { + Layer.msg(text + "不能为空!"); + element.focus(); + return false; + } else if (type === 'mobile' && !element.val().match(/^1[3-9]\d{9}$/)) { + Layer.msg("请输入正确的" + text + "!"); + element.focus(); + return false; + } else if (type === 'email' && !element.val().match(/^[\w\+\-]+(\.[\w\+\-]+)*@[a-z\d\-]+(\.[a-z\d\-]+)*\.([a-z]{2,4})$/)) { + Layer.msg("请输入正确的" + text + "!"); + element.focus(); + return false; + } + element.isValid(function (v) { + if (v) { + var data = {event: $(btn).data("event")}; + data[type] = element.val(); + Frontend.api.sendcaptcha(btn, type, data); + } else { + Layer.msg("请确认已经输入了正确的" + text + "!"); + } + }); + } else { + var data = {event: $(btn).data("event")}; + Frontend.api.sendcaptcha(btn, type, data, function (data, ret) { + Layer.open({title: false, area: ["400px", "430px"], content: "
扫一扫关注公众号获取验证码
", type: 1}); + }); + } return false; }); //tooltip和popover diff --git a/public/assets/js/require-table.js b/public/assets/js/require-table.js index d7aa5065..878c3195 100644 --- a/public/assets/js/require-table.js +++ b/public/assets/js/require-table.js @@ -203,10 +203,15 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table $(Table.config.disabledbtn, toolbar).toggleClass('disabled', !ids.length); }); // 绑定TAB事件 - $('.panel-heading ul[data-field] li a[data-toggle="tab"]').on('shown.bs.tab', function (e) { - var field = $(this).closest("ul").data("field"); + $('.panel-heading [data-field] a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + var field = $(this).closest("[data-field]").data("field"); var value = $(this).data("value"); - $("select[name='" + field + "'] option[value='" + value + "']", table.closest(".bootstrap-table").find(".commonsearch-table")).prop("selected", true); + var object = $("[name='" + field + "']", table.closest(".bootstrap-table").find(".commonsearch-table")); + if (object.prop('tagName') == "SELECT") { + $("option[value='" + value + "']", object).prop("selected", true); + } else { + object.val(value); + } table.bootstrapTable('refresh', {pageNumber: 1}); return false; });