From c59cd84777893fe7673c1439e4317f2251d528be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 16 Feb 2017 13:58:14 +0800 Subject: [PATCH 01/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Role.php | 4 +++- application/admin/controller/User.php | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/application/admin/controller/Role.php b/application/admin/controller/Role.php index 6f5f875b6..50b87cd5f 100644 --- a/application/admin/controller/Role.php +++ b/application/admin/controller/Role.php @@ -12,8 +12,10 @@ use controller\BasicAdmin; */ class Role extends BasicAdmin { - public function index() { + protected $table = 'SystemRole'; + public function index() { + parent::_list($this->table); } } \ No newline at end of file diff --git a/application/admin/controller/User.php b/application/admin/controller/User.php index d505333bd..ed04ff309 100644 --- a/application/admin/controller/User.php +++ b/application/admin/controller/User.php @@ -12,8 +12,10 @@ use controller\BasicAdmin; */ class User extends BasicAdmin { - public function index() { + protected $table = 'SystemUser'; + public function index() { + parent::_list($this->table); } } \ No newline at end of file From b7c208aa5c32b1abf36d03d5fd15afff3faa631d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 16 Feb 2017 15:26:45 +0800 Subject: [PATCH 02/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Config.php | 5 +- application/admin/controller/Login.php | 2 +- application/admin/view/config.index.html | 155 ++++++++++++++++++++ application/extra/view/admin.content.html | 1 + public/static/admin/plugs.js | 1 + public/static/theme/default/css/console.css | 7 + 6 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 application/admin/view/config.index.html diff --git a/application/admin/controller/Config.php b/application/admin/controller/Config.php index 51039b8a0..dc813d425 100644 --- a/application/admin/controller/Config.php +++ b/application/admin/controller/Config.php @@ -13,8 +13,11 @@ use controller\BasicAdmin; */ class Config extends BasicAdmin { - public function index() { + protected $table = 'SystemConfig'; + public function index() { + parent::_list($this->table); + } } \ No newline at end of file diff --git a/application/admin/controller/Login.php b/application/admin/controller/Login.php index 588d27965..ff773adf0 100644 --- a/application/admin/controller/Login.php +++ b/application/admin/controller/Login.php @@ -49,6 +49,6 @@ class Login extends BasicAdmin { */ public function out() { session('user', null); - $this->success('退出登录成功!', '@admin / login'); + $this->success('退出登录成功!', '@admin/login'); } } \ No newline at end of file diff --git a/application/admin/view/config.index.html b/application/admin/view/config.index.html new file mode 100644 index 000000000..3ccbc8508 --- /dev/null +++ b/application/admin/view/config.index.html @@ -0,0 +1,155 @@ +{extend name="extra@admin/content"} + +{block name="content"} +
+
网站设置
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ 帮助统计网页访问情况,可以去百度统计获取ID。 +
+
+
+ +
+ +
+
+ 帮助统计网页访问情况,可以去流量统计获取ID。 +
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+ 建议LOGO图片的尺寸为160x56px,此LOGO图片用于后台登陆页面。 +
+
+
+ +
+ + +
+
+ 建议上传ICO图标的尺寸为128x128px,此图标用于网站标题前,ICON在线制作。 +
+
+
+
+ +
+
+ +
+
+
+
+ +
+ +{/block} \ No newline at end of file diff --git a/application/extra/view/admin.content.html b/application/extra/view/admin.content.html index 6437f21fb..e958bb233 100644 --- a/application/extra/view/admin.content.html +++ b/application/extra/view/admin.content.html @@ -17,4 +17,5 @@ {block name="content"} {/block} + {block name='script'}{/block} \ No newline at end of file diff --git a/public/static/admin/plugs.js b/public/static/admin/plugs.js index 0d08fed0e..1719db622 100644 --- a/public/static/admin/plugs.js +++ b/public/static/admin/plugs.js @@ -262,6 +262,7 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { }); }); }); + layui.use(['form', 'element']); JPlaceHolder.init(); /* 自动给必填字符加上样式 @zoujingli @by 2016-05-11 */ $container.find('[required]').parent().prevAll('label').addClass('label-required'); diff --git a/public/static/theme/default/css/console.css b/public/static/theme/default/css/console.css index a9fedefe0..1ad26738a 100644 --- a/public/static/theme/default/css/console.css +++ b/public/static/theme/default/css/console.css @@ -6,6 +6,13 @@ * date 2017/02/13 14:15 */ +/* layui 兼容处理 */ +.layui, .layui * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + /* 设置选择文字及背景颜色 */ ::selection { background-color: #ec494e; From 37d95013db26d7f8c11f533bdcc7155759cf6c7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 16 Feb 2017 15:29:37 +0800 Subject: [PATCH 03/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/index.index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/admin/view/index.index.html b/application/admin/view/index.index.html index f2966846d..9ba212db4 100644 --- a/application/admin/view/index.index.html +++ b/application/admin/view/index.index.html @@ -3,7 +3,7 @@ {block name='body'} {include file="extra@admin/main/top"}
- <{include file="extra@admin/main/left"}> + {include file="extra@admin/main/left"}
{/block} \ No newline at end of file From 1440b4fd8adb340bff7f01b09953888f6aff77aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 16 Feb 2017 15:38:29 +0800 Subject: [PATCH 04/94] =?UTF-8?q?=E6=A0=87=E5=87=86=E5=8C=96=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Auth.php | 3 +- application/admin/controller/Config.php | 3 +- application/admin/controller/Index.php | 2 +- application/admin/controller/Login.php | 5 +- application/admin/controller/Menu.php | 1 - application/admin/controller/Role.php | 3 +- application/admin/controller/User.php | 3 +- application/admin/model/User.php | 5 +- application/admin/view/index.main.html | 132 ++++++++++++------------ application/admin/view/login.index.html | 7 +- application/admin/view/menu.index.html | 4 +- 11 files changed, 84 insertions(+), 84 deletions(-) diff --git a/application/admin/controller/Auth.php b/application/admin/controller/Auth.php index a937967e5..6b3782a61 100644 --- a/application/admin/controller/Auth.php +++ b/application/admin/controller/Auth.php @@ -1,4 +1,5 @@ table); } -} \ No newline at end of file +} diff --git a/application/admin/controller/Config.php b/application/admin/controller/Config.php index dc813d425..3a50276d7 100644 --- a/application/admin/controller/Config.php +++ b/application/admin/controller/Config.php @@ -17,7 +17,6 @@ class Config extends BasicAdmin { public function index() { parent::_list($this->table); - } -} \ No newline at end of file +} diff --git a/application/admin/controller/Index.php b/application/admin/controller/Index.php index 387f587f2..3e5c634a1 100644 --- a/application/admin/controller/Index.php +++ b/application/admin/controller/Index.php @@ -69,4 +69,4 @@ class Index extends BasicAdmin { return view(); } -} \ No newline at end of file +} diff --git a/application/admin/controller/Login.php b/application/admin/controller/Login.php index ff773adf0..9b411eaa7 100644 --- a/application/admin/controller/Login.php +++ b/application/admin/controller/Login.php @@ -1,4 +1,5 @@ success('退出登录成功!', '@admin/login'); } -} \ No newline at end of file + +} diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index 14f29e891..f2714addc 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -127,7 +127,6 @@ class Menu extends BasicAdmin { } } - /** * 添加菜单 */ diff --git a/application/admin/controller/Role.php b/application/admin/controller/Role.php index 50b87cd5f..f0dca22a4 100644 --- a/application/admin/controller/Role.php +++ b/application/admin/controller/Role.php @@ -1,4 +1,5 @@ table); } -} \ No newline at end of file +} diff --git a/application/admin/controller/User.php b/application/admin/controller/User.php index ed04ff309..baaea8724 100644 --- a/application/admin/controller/User.php +++ b/application/admin/controller/User.php @@ -1,4 +1,5 @@ table); } -} \ No newline at end of file +} diff --git a/application/admin/model/User.php b/application/admin/model/User.php index 564d87b71..ca7444861 100644 --- a/application/admin/model/User.php +++ b/application/admin/model/User.php @@ -2,9 +2,8 @@ namespace app\admin\model; - use think\Model; class User extends Model { - -} \ No newline at end of file + +} diff --git a/application/admin/view/index.main.html b/application/admin/view/index.main.html index 543b57798..006bf9332 100644 --- a/application/admin/view/index.main.html +++ b/application/admin/view/index.main.html @@ -5,82 +5,82 @@
- - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
系统信息
系统信息
框架版本{$Think.const.THINK_VERSION}
系统类型{:php_uname('s')}
运行环境{:php_sapi_name()}
PHP版本{:phpversion()}
MySQL版本{$mysql_ver}
上传限制{:ini_get('upload_max_filesize')}
POST限制{:ini_get('post_max_size')}
框架版本{$Think.const.THINK_VERSION}
系统类型{:php_uname('s')}
运行环境{:php_sapi_name()}
PHP版本{:phpversion()}
MySQL版本{$mysql_ver}
上传限制{:ini_get('upload_max_filesize')}
POST限制{:ini_get('post_max_size')}
- - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
产品团队
产品团队
产品名称Think.Admin
当前版本{:sysconf('app_version')}
产品设计及研发团队广州楚才信息科技有限公司
官方网址https://think.ctolog.com
官方QQ群 - - PHP微信开发群 (SDK) - -
BUG反馈https://github.com/zoujingli/Think.Admin/issues
项目地址https://github.com/zoujingli/Think.Admin
产品名称Think.Admin
当前版本{:sysconf('app_version')}
产品设计及研发团队广州楚才信息科技有限公司
官方网址https://think.ctolog.com
官方QQ群 + + PHP微信开发群 (SDK) + +
BUG反馈https://github.com/zoujingli/Think.Admin/issues
项目地址https://github.com/zoujingli/Think.Admin
diff --git a/application/admin/view/login.index.html b/application/admin/view/login.index.html index 499719cea..5b31e6f5a 100644 --- a/application/admin/view/login.index.html +++ b/application/admin/view/login.index.html @@ -4,8 +4,7 @@ {/block} -{block name="bodyTag"} - +{block name="body"} +{/block} + +{block name="script"} - {/block} \ No newline at end of file diff --git a/application/admin/view/menu.index.html b/application/admin/view/menu.index.html index bfc20dea2..db1e596da 100644 --- a/application/admin/view/menu.index.html +++ b/application/admin/view/menu.index.html @@ -9,9 +9,7 @@ - - - + 菜单名称 链接 From fa1db876341e6b534685aaabf8e30ac36678df48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 16 Feb 2017 15:56:54 +0800 Subject: [PATCH 05/94] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=85=A8=E5=B1=80APP?= =?UTF-8?q?=5FURL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/route.php | 2 ++ public/static/admin/chat.js | 48 ----------------------------------- public/static/admin/listen.js | 18 ++++++------- 3 files changed, 11 insertions(+), 57 deletions(-) delete mode 100644 public/static/admin/chat.js diff --git a/application/route.php b/application/route.php index b3d9bbc7f..0b67a5fe4 100644 --- a/application/route.php +++ b/application/route.php @@ -1 +1,3 @@ Date: Thu, 16 Feb 2017 17:39:04 +0800 Subject: [PATCH 06/94] =?UTF-8?q?UI=20=E5=AD=97=E4=BD=93=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/index.main.html | 74 +- application/extra/view/admin.content.html | 4 +- public/static/theme/default/css/console.css | 1176 +++++++++---------- 3 files changed, 642 insertions(+), 612 deletions(-) diff --git a/application/admin/view/index.main.html b/application/admin/view/index.main.html index 006bf9332..897131900 100644 --- a/application/admin/view/index.main.html +++ b/application/admin/view/index.main.html @@ -2,8 +2,12 @@ {block name="content"}
-
- +
+
+ + + + @@ -11,25 +15,29 @@ - + + + + + - + - - - - + + + + @@ -41,8 +49,12 @@
系统信息
框架版本Think.Admin 版本{:sysconf('app_version')}
ThinkPHP 版本 {$Think.const.THINK_VERSION}
系统类型服务器操作系统 {:php_uname('s')}
运行环境 {:php_sapi_name()}
PHP版本{:phpversion()}
MySQL版本 {$mysql_ver}
PHP版本{:phpversion()}
上传限制 {:ini_get('upload_max_filesize')}
-
- +
+
+ + + + @@ -51,35 +63,57 @@ - - - - - + - - + + - + - + + + + + + + + +
产品团队
产品名称Think.Admin
当前版本{:sysconf('app_version')}Think.Admin 管理框架
产品设计及研发团队 广州楚才信息科技有限公司
官方网址https://think.ctolog.com产品DEMO体验 + + https://think.ctolog.com + +
官方QQ群 - PHP微信开发群 (SDK) + PHP微信开发群 (SDK)
BUG反馈https://github.com/zoujingli/Think.Admin/issues + + https://github.com/zoujingli/Think.Admin/issues + +
项目地址https://github.com/zoujingli/Think.Admin + + https://github.com/zoujingli/Think.Admin + +
公司官网 + + http://www.cuci.cc + +
公司地址 + 广东省 广州市 海珠区 世港国际公寓E1栋 +
diff --git a/application/extra/view/admin.content.html b/application/extra/view/admin.content.html index e958bb233..232573b06 100644 --- a/application/extra/view/admin.content.html +++ b/application/extra/view/admin.content.html @@ -6,11 +6,11 @@ {/if}
{if isset($alert)} - ",success:function(e,i){l.bigimg=e.find(".layui-layer-phimg"),l.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),l.event(e),t.tab&&t.tab(d[u],e)},end:function(){l.end=!0,i(document).off("keyup",l.keyup)}},t))},function(){r.close(l.loadi),r.msg("当前图片地址异常
是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){d.length>1&&l.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),s.html=i("html"),r.open=function(e){var t=new l(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.jquery),e.layer=r,t("layer",r)})):"function"==typeof define?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window); \ No newline at end of file diff --git a/public/static/plugs/layui/lay/modules/laypage.js b/public/static/plugs/layui/lay/modules/laypage.js index d77821a82..d1dc44500 100644 --- a/public/static/plugs/layui/lay/modules/laypage.js +++ b/public/static/plugs/layui/lay/modules/laypage.js @@ -1,2 +1,2 @@ -/** layui-v1.0.7 LGPL License By http://www.layui.com */ +/** layui-v1.0.8 MIT License By http://www.layui.com */ ;layui.define(function(a){"use strict";function t(a){new p(a)}var e=document,r="getElementById",n="getElementsByTagName",s=0,p=function(a){var t=this,e=t.config=a||{};e.item=s++,t.render(!0)};p.on=function(a,t,e){return a.attachEvent?a.attachEvent("on"+t,function(){e.call(a,window.even)}):a.addEventListener(t,e,!1),p},p.prototype.type=function(){var a=this.config;if("object"==typeof a.cont)return void 0===a.cont.length?2:3},p.prototype.view=function(){var a=this,t=a.config,e=[],r={};if(t.pages=0|t.pages,t.curr=0|t.curr||1,t.groups="groups"in t?0|t.groups:5,t.first="first"in t?t.first:"首页",t.last="last"in t?t.last:"末页",t.prev="prev"in t?t.prev:"上一页",t.next="next"in t?t.next:"下一页",t.pages<=1)return"";for(t.groups>t.pages&&(t.groups=t.pages),r.index=Math.ceil((t.curr+(t.groups>1&&t.groups!==t.pages?1:0))/(0===t.groups?1:t.groups)),t.curr>1&&t.prev&&e.push(''+t.prev+""),r.index>1&&t.first&&0!==t.groups&&e.push(''+t.first+""),r.poor=Math.floor((t.groups-1)/2),r.start=r.index>1?t.curr-r.poor:1,r.end=r.index>1?function(){var a=t.curr+(t.groups-r.poor-1);return a>t.pages?t.pages:a}():t.groups,r.end-r.start"+r.start+""):e.push(''+r.start+"");return t.pages>t.groups&&r.end'+t.last+""),r.flow=!t.prev&&0===t.groups,(t.curr!==t.pages&&t.next||r.flow)&&e.push(function(){return r.flow&&t.curr===t.pages?''+t.next+"":''+t.next+""}()),'
'+e.join("")+function(){return t.skip?'到第 ':""}()+"
"},p.prototype.jump=function(a){if(a){for(var t=this,e=t.config,r=a.children,s=a[n]("button")[0],i=a[n]("input")[0],u=0,o=r.length;u/g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var n="Laytpl Error:";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e}},c=n.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=c("^"+r.open+"#",""),l=c(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(c(r.open+"#"),r.open+"# ").replace(c(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(/(?="|')/g,"\\").replace(n.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(n.query(1),function(e){var n='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(c(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),n='"+_escape_('),n+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,n.escape)}catch(u){return delete o.cache,n.error(u,p)}},t.pt.render=function(e,r){var c,t=this;return e?(c=t.cache?t.cache(e,n.escape):t.parse(t.tpl,e),r?void r(c):c):n.error("no data")};var o=function(e){return"string"!=typeof e?n.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var n in e)r[n]=e[n]},o.v="1.2.0",e("laytpl",o)}); \ No newline at end of file diff --git a/public/static/plugs/layui/lay/modules/mobile.js b/public/static/plugs/layui/lay/modules/mobile.js new file mode 100644 index 000000000..d7d2586e6 --- /dev/null +++ b/public/static/plugs/layui/lay/modules/mobile.js @@ -0,0 +1,2 @@ +/** layui-v1.0.8 MIT License By http://www.layui.com */ + ;layui.define(function(i){i("layui.mobile",layui.v)});layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},n={exp:function(e){return new RegExp(e,"g")},query:function(e,n,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return c((n||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var n="Laytpl Error:";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e}},c=n.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=c("^"+r.open+"#",""),l=c(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(c(r.open+"#"),r.open+"# ").replace(c(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(/(?="|')/g,"\\").replace(n.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(n.query(1),function(e){var n='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(c(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),n='"+_escape_('),n+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,n.escape)}catch(u){return delete o.cache,n.error(u,p)}},t.pt.render=function(e,r){var c,t=this;return e?(c=t.cache?t.cache(e,n.escape):t.parse(t.tpl,e),r?void r(c):c):n.error("no data")};var o=function(e){return"string"!=typeof e?n.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var n in e)r[n]=e[n]},o.v="1.2.0",e("laytpl",o)});layui.define(function(e){"use strict";var t=(window,document),i="querySelectorAll",n="getElementsByClassName",a=function(e){return t[i](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var i in e)t[i]=e[i];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var o=0,r=["layui-m-layer"],d=function(e){var t=this;t.config=l.extend(e),t.view()};d.prototype.view=function(){var e=this,i=e.config,s=t.createElement("div");e.id=s.id=r[0]+o,s.setAttribute("class",r[0]+" "+r[0]+(i.type||0)),s.setAttribute("index",o);var l=function(){var e="object"==typeof i.title;return i.title?'

'+(e?i.title[0]:i.title)+"

":""}(),d=function(){"string"==typeof i.btn&&(i.btn=[i.btn]);var e,t=(i.btn||[]).length;return 0!==t&&i.btn?(e=''+i.btn[0]+"",2===t&&(e=''+i.btn[1]+""+e),'
'+e+"
"):""}();if(i.fixed||(i.top=i.hasOwnProperty("top")?i.top:100,i.style=i.style||"",i.style+=" top:"+(t.body.scrollTop+i.top)+"px"),2===i.type&&(i.content='

'+(i.content||"")+"

"),i.skin&&(i.anim="up"),"msg"===i.skin&&(i.shade=!1),s.innerHTML=(i.shade?"
':"")+'
"+l+'
'+i.content+"
"+d+"
",!i.type||2===i.type){var y=t[n](r[0]+i.type),u=y.length;u>=1&&c.close(y[0].getAttribute("index"))}document.body.appendChild(s);var m=e.elem=a("#"+e.id)[0];i.success&&i.success(m),e.index=o++,e.action(i,m)},d.prototype.action=function(e,t){var i=this;e.time&&(l.timer[i.index]=setTimeout(function(){c.close(i.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),c.close(i.index)):e.yes?e.yes(i.index):c.close(i.index)};if(e.btn)for(var s=t[n]("layui-m-layerbtn")[0].children,o=s.length,r=0;r0&&e-1 in t)}function s(t){return A.call(t,function(t){return null!=t})}function u(t){return t.length>0?T.fn.concat.apply([],t):t}function c(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function l(t){return t in F?F[t]:F[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function f(t,e){return"number"!=typeof e||k[c(t)]?e:e+"px"}function h(t){var e,n;return $[t]||(e=L.createElement(t),L.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),$[t]=n),$[t]}function p(t){return"children"in t?D.call(t.children):T.map(t.childNodes,function(t){if(1==t.nodeType)return t})}function d(t,e){var n,r=t?t.length:0;for(n=0;n]*>/,R=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Z=/^(?:body|html)$/i,q=/([A-Z])/g,H=["val","css","html","text","data","width","height","offset"],I=["after","prepend","before","append"],V=L.createElement("table"),_=L.createElement("tr"),B={tr:L.createElement("tbody"),tbody:V,thead:V,tfoot:V,td:_,th:_,"*":L.createElement("div")},U=/complete|loaded|interactive/,X=/^[\w-]*$/,J={},W=J.toString,Y={},G=L.createElement("div"),K={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},Q=Array.isArray||function(t){return t instanceof Array};return Y.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=G).appendChild(t),r=~Y.qsa(i,e).indexOf(t),o&&G.removeChild(t),r},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},N=function(t){return A.call(t,function(e,n){return t.indexOf(e)==n})},Y.fragment=function(t,e,n){var r,i,a;return R.test(t)&&(r=T(L.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(z,"<$1>")),e===E&&(e=M.test(t)&&RegExp.$1),e in B||(e="*"),a=B[e],a.innerHTML=""+t,r=T.each(D.call(a.childNodes),function(){a.removeChild(this)})),o(n)&&(i=T(r),T.each(n,function(t,e){H.indexOf(t)>-1?i[t](e):i.attr(t,e)})),r},Y.Z=function(t,e){return new d(t,e)},Y.isZ=function(t){return t instanceof Y.Z},Y.init=function(t,n){var r;if(!t)return Y.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&M.test(t))r=Y.fragment(t,RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=Y.qsa(L,t)}else{if(e(t))return T(L).ready(t);if(Y.isZ(t))return t;if(Q(t))r=s(t);else if(i(t))r=[t],t=null;else if(M.test(t))r=Y.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=Y.qsa(L,t)}}return Y.Z(r,t)},T=function(t,e){return Y.init(t,e)},T.extend=function(t){var e,n=D.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){m(t,n,e)}),t},Y.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,a=X.test(o);return t.getElementById&&a&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:D.call(a&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},T.contains=L.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},T.type=t,T.isFunction=e,T.isWindow=n,T.isArray=Q,T.isPlainObject=o,T.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},T.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},T.inArray=function(t,e,n){return O.indexOf.call(e,t,n)},T.camelCase=C,T.trim=function(t){return null==t?"":String.prototype.trim.call(t)},T.uuid=0,T.support={},T.expr={},T.noop=function(){},T.map=function(t,e){var n,r,i,o=[];if(a(t))for(r=0;r=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return O.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return e(t)?this.not(this.not(t)):T(A.call(this,function(e){return Y.matches(e,t)}))},add:function(t,e){return T(N(this.concat(T(t,e))))},is:function(t){return this.length>0&&Y.matches(this[0],t)},not:function(t){var n=[];if(e(t)&&t.call!==E)this.each(function(e){t.call(this,e)||n.push(this)});else{var r="string"==typeof t?this.filter(t):a(t)&&e(t.item)?D.call(t):T(t);this.forEach(function(t){r.indexOf(t)<0&&n.push(t)})}return T(n)},has:function(t){return this.filter(function(){return i(t)?T.contains(this,t):T(this).find(t).size()})},eq:function(t){return t===-1?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!i(t)?t:T(t)},last:function(){var t=this[this.length-1];return t&&!i(t)?t:T(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?T(t).filter(function(){var t=this;return O.some.call(n,function(e){return T.contains(e,t)})}):1==this.length?T(Y.qsa(this[0],t)):this.map(function(){return Y.qsa(this,t)}):T()},closest:function(t,e){var n=[],i="object"==typeof t&&T(t);return this.each(function(o,a){for(;a&&!(i?i.indexOf(a)>=0:Y.matches(a,t));)a=a!==e&&!r(a)&&a.parentNode;a&&n.indexOf(a)<0&&n.push(a)}),T(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=T.map(n,function(t){if((t=t.parentNode)&&!r(t)&&e.indexOf(t)<0)return e.push(t),t});return v(e,t)},parent:function(t){return v(N(this.pluck("parentNode")),t)},children:function(t){return v(this.map(function(){return p(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||D.call(this.childNodes)})},siblings:function(t){return v(this.map(function(t,e){return A.call(p(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return T.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=h(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var n=e(t);if(this[0]&&!n)var r=T(t).get(0),i=r.parentNode||this.length>1;return this.each(function(e){T(this).wrapAll(n?t.call(this,e):i?r.cloneNode(!0):r)})},wrapAll:function(t){if(this[0]){T(this[0]).before(t=T(t));for(var e;(e=t.children()).length;)t=e.first();T(t).append(this)}return this},wrapInner:function(t){var n=e(t);return this.each(function(e){var r=T(this),i=r.contents(),o=n?t.call(this,e):t;i.length?i.wrapAll(o):r.append(o)})},unwrap:function(){return this.parent().each(function(){T(this).replaceWith(T(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var e=T(this);(t===E?"none"==e.css("display"):t)?e.show():e.hide()})},prev:function(t){return T(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return T(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;T(this).empty().append(g(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=g(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,e){var n;return"string"!=typeof t||1 in arguments?this.each(function(n){if(1===this.nodeType)if(i(t))for(j in t)y(this,j,t[j]);else y(this,t,g(this,e,n,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(n=this[0].getAttribute(t))?n:E},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){y(this,t)},this)})},prop:function(t,e){return t=K[t]||t,1 in arguments?this.each(function(n){this[t]=g(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=K[t]||t,this.each(function(){delete this[t]})},data:function(t,e){var n="data-"+t.replace(q,"-$1").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?b(r):E},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=g(this,t,e,this.value)})):this[0]&&(this[0].multiple?T(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var n=T(this),r=g(this,t,e,n.offset()),i=n.offsetParent().offset(),o={top:r.top-i.top,left:r.left-i.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)});if(!this.length)return null;if(L.documentElement!==this[0]&&!T.contains(L.documentElement,this[0]))return{top:0,left:0};var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(e,n){if(arguments.length<2){var r=this[0];if("string"==typeof e){if(!r)return;return r.style[C(e)]||getComputedStyle(r,"").getPropertyValue(e)}if(Q(e)){if(!r)return;var i={},o=getComputedStyle(r,"");return T.each(e,function(t,e){i[e]=r.style[C(e)]||o.getPropertyValue(e)}),i}}var a="";if("string"==t(e))n||0===n?a=c(e)+":"+f(e,n):this.each(function(){this.style.removeProperty(c(e))});else for(j in e)e[j]||0===e[j]?a+=c(j)+":"+f(j,e[j])+";":this.each(function(){this.style.removeProperty(c(j))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(T(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&O.some.call(this,function(t){return this.test(x(t))},l(t))},addClass:function(t){return t?this.each(function(e){if("className"in this){S=[];var n=x(this),r=g(this,t,e,n);r.split(/\s+/g).forEach(function(t){T(this).hasClass(t)||S.push(t)},this),S.length&&x(this,n+(n?" ":"")+S.join(" "))}}):this},removeClass:function(t){return this.each(function(e){if("className"in this){if(t===E)return x(this,"");S=x(this),g(this,t,e,S).split(/\s+/g).forEach(function(t){S=S.replace(l(t)," ")}),x(this,S.trim())}})},toggleClass:function(t,e){return t?this.each(function(n){var r=T(this),i=g(this,t,n,x(this));i.split(/\s+/g).forEach(function(t){(e===E?!r.hasClass(t):e)?r.addClass(t):r.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===E?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return t===E?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),r=Z.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(T(t).css("margin-top"))||0,n.left-=parseFloat(T(t).css("margin-left"))||0,r.top+=parseFloat(T(e[0]).css("border-top-width"))||0,r.left+=parseFloat(T(e[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||L.body;t&&!Z.test(t.nodeName)&&"static"==T(t).css("position");)t=t.offsetParent;return t})}},T.fn.detach=T.fn.remove,["width","height"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});T.fn[t]=function(i){var o,a=this[0];return i===E?n(a)?a["inner"+e]:r(a)?a.documentElement["scroll"+e]:(o=this.offset())&&o[t]:this.each(function(e){a=T(this),a.css(t,g(this,i,e,a[t]()))})}}),I.forEach(function(e,n){var r=n%2;T.fn[e]=function(){var e,i,o=T.map(arguments,function(n){var r=[];return e=t(n),"array"==e?(n.forEach(function(t){return t.nodeType!==E?r.push(t):T.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(Y.fragment(t)))}),r):"object"==e||null==n?n:Y.fragment(n)}),a=this.length>1;return o.length<1?this:this.each(function(t,e){i=r?e:e.parentNode,e=0==n?e.nextSibling:1==n?e.firstChild:2==n?e:null;var s=T.contains(L.documentElement,i);o.forEach(function(t){if(a)t=t.cloneNode(!0);else if(!i)return T(t).remove();i.insertBefore(t,e),s&&w(t,function(t){if(!(null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src)){var e=t.ownerDocument?t.ownerDocument.defaultView:window;e.eval.call(e,t.innerHTML)}})})})},T.fn[r?e+"To":"insert"+(n?"Before":"After")]=function(t){return T(t)[e](this),this}}),Y.Z.prototype=d.prototype=T.fn,Y.uniq=N,Y.deserializeValue=b,T.zepto=Y,T}();!function(t){function e(t){return t._zid||(t._zid=h++)}function n(t,n,o,a){if(n=r(n),n.ns)var s=i(n.ns);return(v[e(t)]||[]).filter(function(t){return t&&(!n.e||t.e==n.e)&&(!n.ns||s.test(t.ns))&&(!o||e(t.fn)===e(o))&&(!a||t.sel==a)})}function r(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function i(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function o(t,e){return t.del&&!y&&t.e in x||!!e}function a(t){return b[t]||y&&x[t]||t}function s(n,i,s,u,l,h,p){var d=e(n),m=v[d]||(v[d]=[]);i.split(/\s/).forEach(function(e){if("ready"==e)return t(document).ready(s);var i=r(e);i.fn=s,i.sel=l,i.e in b&&(s=function(e){var n=e.relatedTarget;if(!n||n!==this&&!t.contains(this,n))return i.fn.apply(this,arguments)}),i.del=h;var d=h||s;i.proxy=function(t){if(t=c(t),!t.isImmediatePropagationStopped()){t.data=u;var e=d.apply(n,t._args==f?[t]:[t].concat(t._args));return e===!1&&(t.preventDefault(),t.stopPropagation()),e}},i.i=m.length,m.push(i),"addEventListener"in n&&n.addEventListener(a(i.e),i.proxy,o(i,p))})}function u(t,r,i,s,u){var c=e(t);(r||"").split(/\s/).forEach(function(e){n(t,e,i,s).forEach(function(e){delete v[c][e.i],"removeEventListener"in t&&t.removeEventListener(a(e.e),e.proxy,o(e,u))})})}function c(e,n){return!n&&e.isDefaultPrevented||(n||(n=e),t.each(T,function(t,r){var i=n[t];e[t]=function(){return this[r]=w,i&&i.apply(n,arguments)},e[r]=E}),e.timeStamp||(e.timeStamp=Date.now()),(n.defaultPrevented!==f?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(e.isDefaultPrevented=w)),e}function l(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===f||(n[e]=t[e]);return c(n,t)}var f,h=1,p=Array.prototype.slice,d=t.isFunction,m=function(t){return"string"==typeof t},v={},g={},y="onfocusin"in window,x={focus:"focusin",blur:"focusout"},b={mouseenter:"mouseover",mouseleave:"mouseout"};g.click=g.mousedown=g.mouseup=g.mousemove="MouseEvents",t.event={add:s,remove:u},t.proxy=function(n,r){var i=2 in arguments&&p.call(arguments,2);if(d(n)){var o=function(){return n.apply(r,i?i.concat(p.call(arguments)):arguments)};return o._zid=e(n),o}if(m(r))return i?(i.unshift(n[r],n),t.proxy.apply(null,i)):t.proxy(n[r],n);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var w=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,T={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,n,r,i,o){var a,c,h=this;return e&&!m(e)?(t.each(e,function(t,e){h.on(t,n,r,e,o)}),h):(m(n)||d(i)||i===!1||(i=r,r=n,n=f),i!==f&&r!==!1||(i=r,r=f),i===!1&&(i=E),h.each(function(f,h){o&&(a=function(t){return u(h,t.type,i),i.apply(this,arguments)}),n&&(c=function(e){var r,o=t(e.target).closest(n,h).get(0);if(o&&o!==h)return r=t.extend(l(e),{currentTarget:o,liveFired:h}),(a||i).apply(o,[r].concat(p.call(arguments,1)))}),s(h,e,i,r,n,c||a)}))},t.fn.off=function(e,n,r){var i=this;return e&&!m(e)?(t.each(e,function(t,e){i.off(t,n,e)}),i):(m(n)||d(r)||r===!1||(r=n,n=f),r===!1&&(r=E),i.each(function(){u(this,e,r,n)}))},t.fn.trigger=function(e,n){return e=m(e)||t.isPlainObject(e)?t.Event(e):c(e),e._args=n,this.each(function(){e.type in x&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,r){var i,o;return this.each(function(a,s){i=l(m(e)?t.Event(e):e),i._args=r,i.target=s,t.each(n(s,e.type||e),function(t,e){if(o=e.proxy(i),i.isImmediatePropagationStopped())return!1})}),o},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(t,e){m(t)||(e=t,t=e.type);var n=document.createEvent(g[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),c(n)}}(e),function(t){function e(e,n,r){var i=t.Event(n);return t(e).trigger(i,r),!i.isDefaultPrevented()}function n(t,n,r,i){if(t.global)return e(n||x,r,i)}function r(e){e.global&&0===t.active++&&n(e,null,"ajaxStart")}function i(e){e.global&&!--t.active&&n(e,null,"ajaxStop")}function o(t,e){var r=e.context;return e.beforeSend.call(r,t,e)!==!1&&n(e,r,"ajaxBeforeSend",[t,e])!==!1&&void n(e,r,"ajaxSend",[t,e])}function a(t,e,r,i){var o=r.context,a="success";r.success.call(o,t,a,e),i&&i.resolveWith(o,[t,a,e]),n(r,o,"ajaxSuccess",[e,r,t]),u(a,e,r)}function s(t,e,r,i,o){var a=i.context;i.error.call(a,r,e,t),o&&o.rejectWith(a,[r,e,t]),n(i,a,"ajaxError",[r,i,t||e]),u(e,r,i)}function u(t,e,r){var o=r.context;r.complete.call(o,e,t),n(r,o,"ajaxComplete",[e,r]),i(r)}function c(t,e,n){if(n.dataFilter==l)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function l(){}function f(t){return t&&(t=t.split(";",2)[0]),t&&(t==T?"html":t==j?"json":w.test(t)?"script":E.test(t)&&"xml")||"text"}function h(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function p(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()&&"jsonp"!=e.dataType||(e.url=h(e.url,e.data),e.data=void 0)}function d(e,n,r,i){return t.isFunction(n)&&(i=r,r=n,n=void 0),t.isFunction(r)||(i=r,r=void 0),{url:e,data:n,success:r,dataType:i}}function m(e,n,r,i){var o,a=t.isArray(n),s=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),i&&(n=r?i:i+"["+(s||"object"==o||"array"==o?n:"")+"]"),!i&&a?e.add(u.name,u.value):"array"==o||!r&&"object"==o?m(e,u,r,n):e.add(n,u)})}var v,g,y=+new Date,x=window.document,b=/)<[^<]*)*<\/script>/gi,w=/^(?:text|application)\/javascript/i,E=/^(?:text|application)\/xml/i,j="application/json",T="text/html",S=/^\s*$/,C=x.createElement("a");C.href=window.location.href,t.active=0,t.ajaxJSONP=function(e,n){if(!("type"in e))return t.ajax(e);var r,i,u=e.jsonpCallback,c=(t.isFunction(u)?u():u)||"Zepto"+y++,l=x.createElement("script"),f=window[c],h=function(e){t(l).triggerHandler("error",e||"abort")},p={abort:h};return n&&n.promise(p),t(l).on("load error",function(o,u){clearTimeout(i),t(l).off().remove(),"error"!=o.type&&r?a(r[0],p,e,n):s(null,u||"error",p,e,n),window[c]=f,r&&t.isFunction(f)&&f(r[0]),f=r=void 0}),o(p,e)===!1?(h("abort"),p):(window[c]=function(){r=arguments},l.src=e.url.replace(/\?(.+)=\?/,"?$1="+c),x.head.appendChild(l),e.timeout>0&&(i=setTimeout(function(){h("timeout")},e.timeout)),p)},t.ajaxSettings={type:"GET",beforeSend:l,success:l,error:l,complete:l,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:j,xml:"application/xml, text/xml",html:T,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:l},t.ajax=function(e){var n,i,u=t.extend({},e||{}),d=t.Deferred&&t.Deferred();for(v in t.ajaxSettings)void 0===u[v]&&(u[v]=t.ajaxSettings[v]);r(u),u.crossDomain||(n=x.createElement("a"),n.href=u.url,n.href=n.href,u.crossDomain=C.protocol+"//"+C.host!=n.protocol+"//"+n.host),u.url||(u.url=window.location.toString()),(i=u.url.indexOf("#"))>-1&&(u.url=u.url.slice(0,i)),p(u);var m=u.dataType,y=/\?.+=\?/.test(u.url);if(y&&(m="jsonp"),u.cache!==!1&&(e&&e.cache===!0||"script"!=m&&"jsonp"!=m)||(u.url=h(u.url,"_="+Date.now())),"jsonp"==m)return y||(u.url=h(u.url,u.jsonp?u.jsonp+"=?":u.jsonp===!1?"":"callback=?")),t.ajaxJSONP(u,d);var b,w=u.accepts[m],E={},j=function(t,e){E[t.toLowerCase()]=[t,e]},T=/^([\w-]+:)\/\//.test(u.url)?RegExp.$1:window.location.protocol,N=u.xhr(),O=N.setRequestHeader;if(d&&d.promise(N),u.crossDomain||j("X-Requested-With","XMLHttpRequest"),j("Accept",w||"*/*"),(w=u.mimeType||w)&&(w.indexOf(",")>-1&&(w=w.split(",",2)[0]),N.overrideMimeType&&N.overrideMimeType(w)),(u.contentType||u.contentType!==!1&&u.data&&"GET"!=u.type.toUpperCase())&&j("Content-Type",u.contentType||"application/x-www-form-urlencoded"),u.headers)for(g in u.headers)j(g,u.headers[g]);if(N.setRequestHeader=j,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=l,clearTimeout(b);var e,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&"file:"==T){if(m=m||f(u.mimeType||N.getResponseHeader("content-type")),"arraybuffer"==N.responseType||"blob"==N.responseType)e=N.response;else{e=N.responseText;try{e=c(e,m,u),"script"==m?(0,eval)(e):"xml"==m?e=N.responseXML:"json"==m&&(e=S.test(e)?null:t.parseJSON(e))}catch(r){n=r}if(n)return s(n,"parsererror",N,u,d)}a(e,N,u,d)}else s(N.statusText||null,N.status?"error":"abort",N,u,d)}},o(N,u)===!1)return N.abort(),s(null,"abort",N,u,d),N;var P=!("async"in u)||u.async;if(N.open(u.type,u.url,P,u.username,u.password),u.xhrFields)for(g in u.xhrFields)N[g]=u.xhrFields[g];for(g in E)O.apply(N,E[g]);return u.timeout>0&&(b=setTimeout(function(){N.onreadystatechange=l,N.abort(),s(null,"timeout",N,u,d)},u.timeout)),N.send(u.data?u.data:null),N},t.get=function(){return t.ajax(d.apply(null,arguments))},t.post=function(){var e=d.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=d.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,r){if(!this.length)return this;var i,o=this,a=e.split(/\s/),s=d(e,n,r),u=s.success;return a.length>1&&(s.url=a[0],i=a[1]),s.success=function(e){o.html(i?t("
").html(e.replace(b,"")).find(i):e),u&&u.apply(o,arguments)},t.ajax(s),this};var N=encodeURIComponent;t.param=function(e,n){var r=[];return r.add=function(e,n){t.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(N(e)+"="+N(n))},m(r,e,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(t){var e=getComputedStyle;window.getComputedStyle=function(t,n){try{return e(t,n)}catch(r){return null}}}}(),t("zepto",e)});layui.define(["layer-mobile","zepto"],function(e){"use strict";var t=layui.zepto,a=layui["layer-mobile"],i=(layui.device(),"layui-upload-enter"),n="layui-upload-iframe",r={icon:2,shift:6},o={file:"文件",video:"视频",audio:"音频"};a.msg=function(e){return a.open({content:e||"",skin:"msg",time:0})};var s=function(e){this.options=e};s.prototype.init=function(){var e=this,a=e.options,r=t("body"),s=t(a.elem||".layui-upload-file"),u=t('');return t("#"+n)[0]||r.append(u),s.each(function(r,s){s=t(s);var u='
',l=s.attr("lay-type")||a.type;a.unwrap||(u='
'+u+''+(s.attr("lay-title")||a.title||"上传"+(o[l]||"图片"))+"
"),u=t(u),a.unwrap||u.on("dragover",function(e){e.preventDefault(),t(this).addClass(i)}).on("dragleave",function(){t(this).removeClass(i)}).on("drop",function(){t(this).removeClass(i)}),s.parent("form").attr("target")===n&&(a.unwrap?s.unwrap():(s.parent().next().remove(),s.unwrap().unwrap())),s.wrap(u),s.off("change").on("change",function(){e.action(this,l)})})},s.prototype.action=function(e,i){var o=this,s=o.options,u=e.value,l=t(e),p=l.attr("lay-ext")||s.ext||"";if(u){switch(i){case"file":if(p&&!RegExp("\\w\\.("+p+")$","i").test(escape(u)))return a.msg("不支持该文件格式",r),e.value="";break;case"video":if(!RegExp("\\w\\.("+(p||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(u)))return a.msg("不支持该视频格式",r),e.value="";break;case"audio":if(!RegExp("\\w\\.("+(p||"mp3|wav|mid")+")$","i").test(escape(u)))return a.msg("不支持该音频格式",r),e.value="";break;default:if(!RegExp("\\w\\.("+(p||"jpg|png|gif|bmp|jpeg")+")$","i").test(escape(u)))return a.msg("不支持该图片格式",r),e.value=""}s.before&&s.before(e),l.parent().submit();var c=t("#"+n),f=setInterval(function(){var t;try{t=c.contents().find("body").text()}catch(i){a.msg("上传接口存在跨域",r),clearInterval(f)}if(t){clearInterval(f),c.contents().find("body").html("");try{t=JSON.parse(t)}catch(i){return t={},a.msg("请对上传接口返回JSON字符",r)}"function"==typeof s.success&&s.success(t,e)}},30);e.value=""}},e("upload-mobile",function(e){var t=new s(e=e||{});t.init()})});layui.define(function(i){i("layim-mobile",layui.v)});layui["layui.mobile"]||layui.config({base:layui.cache.dir+"lay/modules/mobile/"}).extend({"layer-mobile":"layer-mobile",zepto:"zepto","upload-mobile":"upload-mobile","layim-mobile":"layim-mobile"}),layui.define(["layer-mobile","zepto","layim-mobile"],function(l){l("mobile",{layer:layui["layer-mobile"],layim:layui["layim-mobile"]})}); \ No newline at end of file diff --git a/public/static/plugs/layui/lay/modules/tree.js b/public/static/plugs/layui/lay/modules/tree.js index 16b87f49b..01702a7bb 100644 --- a/public/static/plugs/layui/lay/modules/tree.js +++ b/public/static/plugs/layui/lay/modules/tree.js @@ -1,2 +1,2 @@ -/** layui-v1.0.7 LGPL License By http://www.layui.com */ +/** layui-v1.0.8 MIT License By http://www.layui.com */ ;layui.define("jquery",function(e){"use strict";var o=layui.jquery,a=layui.hint(),r="layui-tree-enter",i=function(e){this.options=e},t={arrow:["",""],checkbox:["",""],radio:["",""],branch:["",""],leaf:""};i.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},i.prototype.tree=function(e,a){var r=this,i=r.options,n=a||i.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('
    '),s=o(["
  • ",function(){return l?''+(n.spread?t.arrow[1]:t.arrow[0])+"":""}(),function(){return i.check?''+("checkbox"===i.check?t.checkbox[0]:"radio"===i.check?t.radio[0]:"")+"":""}(),function(){return'"+(''+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"")+(""+(n.name||"未命名")+"")}(),"
  • "].join(""));l&&(s.append(c),r.tree(c,n.children)),e.append(s),"function"==typeof i.click&&r.click(s,n),r.spread(s,n),i.drag&&r.drag(s,n)})},i.prototype.click=function(e,o){var a=this,r=a.options;e.children("a").on("click",function(e){layui.stope(e),r.click(o)})},i.prototype.spread=function(e,o){var a=this,r=(a.options,e.children(".layui-tree-spread")),i=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),i.removeClass("layui-show"),r.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),i.addClass("layui-show"),r.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};i[0]&&(r.on("click",l),n.on("dblclick",l))},i.prototype.on=function(e){var a=this,i=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),i.drag&&o(document).on("mousemove",function(e){var r=a.move;if(r.from){var i=(r.to,o('
    '));e.preventDefault(),o("."+t)[0]||o("body").append(i);var n=o("."+t)[0]?o("."+t):i;n.addClass("layui-show").html(r.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(r),e.to&&e.to.elem.children("a").removeClass(r),a.move={},o("."+t).remove())})},i.prototype.move={},i.prototype.drag=function(e,a){var i=this,t=(i.options,e.children("a")),n=function(){var t=o(this),n=i.move;n.from&&(n.to={item:a,elem:e},t.addClass(r))};t.on("mousedown",function(){var o=i.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=i.move;a.from&&(delete a.to,e.removeClass(r))})},e("tree",function(e){var r=new i(e=e||{}),t=o(e.elem);return t[0]?void r.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})}); \ No newline at end of file diff --git a/public/static/plugs/layui/lay/modules/upload.js b/public/static/plugs/layui/lay/modules/upload.js index 4866470d2..d9538bd70 100644 --- a/public/static/plugs/layui/lay/modules/upload.js +++ b/public/static/plugs/layui/lay/modules/upload.js @@ -1,2 +1,2 @@ -/** layui-v1.0.7 LGPL License By http://www.layui.com */ +/** layui-v1.0.8 MIT License By http://www.layui.com */ ;layui.define("layer",function(e){"use strict";var a=layui.jquery,t=layui.layer,i=(layui.device(),"layui-upload-enter"),n="layui-upload-iframe",r={icon:2,shift:6},o={file:"文件",video:"视频",audio:"音频"},s=function(e){this.options=e};s.prototype.init=function(){var e=this,t=e.options,r=a("body"),s=a(t.elem||".layui-upload-file"),u=a('');return a("#"+n)[0]||r.append(u),s.each(function(r,s){s=a(s);var u='
    ',l=s.attr("lay-type")||t.type;t.unwrap||(u='
    '+u+''+(s.attr("lay-title")||t.title||"上传"+(o[l]||"图片"))+"
    "),u=a(u),t.unwrap||u.on("dragover",function(e){e.preventDefault(),a(this).addClass(i)}).on("dragleave",function(){a(this).removeClass(i)}).on("drop",function(){a(this).removeClass(i)}),s.parent("form").attr("target")===n&&(t.unwrap?s.unwrap():(s.parent().next().remove(),s.unwrap().unwrap())),s.wrap(u),s.off("change").on("change",function(){e.action(this,l)})})},s.prototype.action=function(e,i){var o=this,s=o.options,u=e.value,l=a(e),p=l.attr("lay-ext")||s.ext||"";if(u){switch(i){case"file":if(p&&!RegExp("\\w\\.("+p+")$","i").test(escape(u)))return t.msg("不支持该文件格式",r),e.value="";break;case"video":if(!RegExp("\\w\\.("+(p||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(u)))return t.msg("不支持该视频格式",r),e.value="";break;case"audio":if(!RegExp("\\w\\.("+(p||"mp3|wav|mid")+")$","i").test(escape(u)))return t.msg("不支持该音频格式",r),e.value="";break;default:if(!RegExp("\\w\\.("+(p||"jpg|png|gif|bmp|jpeg")+")$","i").test(escape(u)))return t.msg("不支持该图片格式",r),e.value=""}s.before&&s.before(e),l.parent().submit();var c=a("#"+n),f=setInterval(function(){var a;try{a=c.contents().find("body").text()}catch(i){t.msg("上传接口存在跨域",r),clearInterval(f)}if(a){clearInterval(f),c.contents().find("body").html("");try{a=JSON.parse(a)}catch(i){return a={},t.msg("请对上传接口返回JSON字符",r)}"function"==typeof s.success&&s.success(a,e)}},30);e.value=""}},e("upload",function(e){var a=new s(e=e||{});a.init()})}); \ No newline at end of file diff --git a/public/static/plugs/layui/lay/modules/util.js b/public/static/plugs/layui/lay/modules/util.js index 52ea60ade..16f2ab6db 100644 --- a/public/static/plugs/layui/lay/modules/util.js +++ b/public/static/plugs/layui/lay/modules/util.js @@ -1,2 +1,2 @@ -/** layui-v1.0.7 LGPL License By http://www.layui.com */ +/** layui-v1.0.8 MIT License By http://www.layui.com */ ;layui.define("jquery",function(l){"use strict";var o=layui.jquery,i={fixbar:function(l){l=l||{},l.bgcolor=l.bgcolor?"background-color:"+l.bgcolor:"";var i,a,c="layui-fixbar-top",t=[l.bar1===!0?"":l.bar1,l.bar2===!0?"":l.bar2,""],r=o(['
      ',l.bar1?'
    • '+t[0]+"
    • ":"",l.bar2?'
    • '+t[1]+"
    • ":"",'
    • '+t[2]+"
    • ","
    "].join("")),e=r.find("."+c),s=function(){var i=o(document).scrollTop();i>=(l.showHeight||200)?a||(e.show(),a=1):a&&(e.hide(),a=0)};o(".layui-fixbar")[0]||("object"==typeof l.css&&r.css(l.css),o("body").append(r),s(),r.find("li").on("click",function(){var i=o(this),a=i.attr("lay-type");"top"===a&&o("html,body").animate({scrollTop:0},200),l.click&&l.click.call(this,a)}),o(document).on("scroll",function(){i&&clearTimeout(i),i=setTimeout(function(){s()},100)}))}};l("util",i)}); \ No newline at end of file diff --git a/public/static/plugs/layui/layui.js b/public/static/plugs/layui/layui.js index 8abe294cd..42ba9c083 100644 --- a/public/static/plugs/layui/layui.js +++ b/public/static/plugs/layui/layui.js @@ -1,2 +1,2 @@ -/** layui-v1.0.7 LGPL License By http://www.layui.com */ - ;!function(e){"use strict";var t=function(){this.v="1.0.7"};t.fn=t.prototype;var n=document,o=t.fn.cache={},i=function(){var e=n.scripts,t=e[e.length-1].src;return t.substring(0,t.lastIndexOf("/")+1)}(),r=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},u="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),l={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",tree:"modules/tree",slide:"modules/slide",table:"modules/table",element:"modules/element",util:"modules/util",flow:"modules/flow",code:"modules/code",single:"modules/single",mobile:"modules/mobile",jquery:"lib/jquery","layui.mod":"dest/layui.mod"};o.modules={},o.status={},o.timeout=10,o.event={},t.fn.define=function(e,t){var n=this,i="function"==typeof e,r=function(){return"function"==typeof t&&t(function(e,t){layui[e]=t,o.status[e]=!0}),this};return i&&(t=e,e=[]),layui["layui.all"]?r.call(n):(n.use(e,r),n)},t.fn.use=function(e,t,a){function s(e,t){var n="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||n.test((e.currentTarget||e.srcElement).readyState))&&(o.modules[m]=t,y.removeChild(v),function i(){return++p>1e3*o.timeout/4?r(m+" is not a valid module"):void(o.status[m]?c():setTimeout(i,4))}())}function c(){a.push(layui[m]),e.length>1?f.use(e.slice(1),t,a):"function"==typeof t&&t.apply(layui,a)}var f=this,d=o.dir=o.dir?o.dir:i,y=n.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(f.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=jQuery);var m=e[0],p=0;if(a=a||[],o.host=o.host||(d.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&l[m])return"function"==typeof t&&t.apply(layui,a),f;var v=n.createElement("script"),h=(l[m]?d+"lay/":o.base||"")+(f.modules[m]||m)+".js";return v.async=!0,v.charset="utf-8",v.src=h+function(){var e=o.version===!0?o.v||(new Date).getTime():o.version||"";return e?"?v="+e:""}(),o.modules[m]?!function g(){return++p>1e3*o.timeout/4?r(m+" is not a valid module"):void("string"==typeof o.modules[m]&&o.status[m]?c():setTimeout(g,4))}():(y.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf("[native code")<0||u?v.addEventListener("load",function(e){s(e,h)},!1):v.attachEvent("onreadystatechange",function(e){s(e,h)})),o.modules[m]=h,f},t.fn.getStyle=function(t,n){var o=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return o[o.getPropertyValue?"getPropertyValue":"getAttribute"](n)},t.fn.link=function(e,t,i){var u=this,l=n.createElement("link"),a=n.getElementsByTagName("head")[0];"string"==typeof t&&(i=t);var s=(i||e).replace(/\.|\//g,""),c=l.id="layuicss-"+s,f=0;l.rel="stylesheet",l.href=e+(o.debug?"?v="+(new Date).getTime():""),l.media="all",n.getElementById(c)||a.appendChild(l),"function"==typeof t&&!function d(){return++f>1e3*o.timeout/100?r(e+" timeout"):void(1989===parseInt(u.getStyle(n.getElementById(c),"width"))?function(){t()}():setTimeout(d,100))}()},t.fn.addcss=function(e,t,n){layui.link(o.dir+"css/"+e,t,n)},t.fn.img=function(e,t,n){var o=new Image;return o.src=e,o.complete?t(o):(o.onload=function(){o.onload=null,t(o)},void(o.onerror=function(e){o.onerror=null,n(e)}))},t.fn.config=function(e){e=e||{};for(var t in e)o[t]=e[t];return this},t.fn.modules=function(){var e={};for(var t in l)e[t]=l[t];return e}(),t.fn.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?r("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},t.fn.router=function(e){for(var t,n=(e||location.hash).replace(/^#/,"").split("/")||[],o={dir:[]},i=0;i1e3*o.timeout/4?r(m+" is not a valid module"):void(o.status[m]?c():setTimeout(i,4))}())}function c(){u.push(layui[m]),e.length>1?f.use(e.slice(1),t,u):"function"==typeof t&&t.apply(layui,u)}var f=this,d=o.dir=o.dir?o.dir:i,y=n.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(f.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=jQuery);var m=e[0],v=0;if(u=u||[],o.host=o.host||(d.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&a[m]||!layui["layui.all"]&&layui["layui.mobile"]&&a[m])return c(),f;var p=n.createElement("script"),h=(a[m]?d+"lay/":o.base||"")+(f.modules[m]||m)+".js";return p.async=!0,p.charset="utf-8",p.src=h+function(){var e=o.version===!0?o.v||(new Date).getTime():o.version||"";return e?"?v="+e:""}(),o.modules[m]?!function g(){return++v>1e3*o.timeout/4?r(m+" is not a valid module"):void("string"==typeof o.modules[m]&&o.status[m]?c():setTimeout(g,4))}():(y.appendChild(p),!p.attachEvent||p.attachEvent.toString&&p.attachEvent.toString().indexOf("[native code")<0||l?p.addEventListener("load",function(e){s(e,h)},!1):p.attachEvent("onreadystatechange",function(e){s(e,h)})),o.modules[m]=h,f},t.fn.getStyle=function(t,n){var o=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return o[o.getPropertyValue?"getPropertyValue":"getAttribute"](n)},t.fn.link=function(e,t,i){var l=this,a=n.createElement("link"),u=n.getElementsByTagName("head")[0];"string"==typeof t&&(i=t);var s=(i||e).replace(/\.|\//g,""),c=a.id="layuicss-"+s,f=0;a.rel="stylesheet",a.href=e+(o.debug?"?v="+(new Date).getTime():""),a.media="all",n.getElementById(c)||u.appendChild(a),"function"==typeof t&&!function d(){return++f>1e3*o.timeout/100?r(e+" timeout"):void(1989===parseInt(l.getStyle(n.getElementById(c),"width"))?function(){t()}():setTimeout(d,100))}()},t.fn.addcss=function(e,t,n){layui.link(o.dir+"css/"+e,t,n)},t.fn.img=function(e,t,n){var o=new Image;return o.src=e,o.complete?t(o):(o.onload=function(){o.onload=null,t(o)},void(o.onerror=function(e){o.onerror=null,n(e)}))},t.fn.config=function(e){e=e||{};for(var t in e)o[t]=e[t];return this},t.fn.modules=function(){var e={};for(var t in a)e[t]=a[t];return e}(),t.fn.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?r("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},t.fn.router=function(e){for(var t,n=(e||location.hash).replace(/^#/,"").split("/")||[],o={dir:[]},i=0;i Date: Wed, 22 Feb 2017 15:32:13 +0800 Subject: [PATCH 57/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/menu.form.html | 37 ++++++++++++++++++++++++++ application/admin/view/menu.index.html | 14 +++++++--- public/static/admin/listen.js | 4 +-- public/static/admin/plugs.js | 8 +++--- 4 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 application/admin/view/menu.form.html diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html new file mode 100644 index 000000000..10be1aebe --- /dev/null +++ b/application/admin/view/menu.form.html @@ -0,0 +1,37 @@ +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    + +
    +
    +
    + + +
    + +
    diff --git a/application/admin/view/menu.index.html b/application/admin/view/menu.index.html index 619dda516..39db8aef5 100644 --- a/application/admin/view/menu.index.html +++ b/application/admin/view/menu.index.html @@ -1,6 +1,12 @@ {extend name='extra@admin/content' /} {block name="content"} + +
    + + +
    +
    @@ -14,7 +20,7 @@ - + @@ -29,10 +35,10 @@ - + - - + @@ -23,14 +23,17 @@ - + From c0e453b4454d72d83657250b9838a94972e14208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 16:44:39 +0800 Subject: [PATCH 75/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Node.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/application/admin/controller/Node.php b/application/admin/controller/Node.php index 435dc2790..532b77e96 100644 --- a/application/admin/controller/Node.php +++ b/application/admin/controller/Node.php @@ -20,6 +20,12 @@ class Node extends BasicAdmin { public function index() { $this->title = '系统节点管理'; + $alert = [ + 'type' => 'danger', + 'title' => '安全警告', + 'content' => '系统数据请勿随意修改!' + ]; + $this->assign('alert', $alert); parent::_list($this->table, FALSE); } From 70e0785b21c1fb08cccb245cf70ca9111508f1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 16:58:46 +0800 Subject: [PATCH 76/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Index.php | 2 +- application/admin/controller/Menu.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/application/admin/controller/Index.php b/application/admin/controller/Index.php index 369de9ac6..f63cea0cb 100644 --- a/application/admin/controller/Index.php +++ b/application/admin/controller/Index.php @@ -20,7 +20,7 @@ class Index extends BasicAdmin { * @return \think\response\View */ public function index() { - $list = Db::name('SystemMenu')->field('title,id,pid,url,icon')->where('status', '1')->select(); + $list = Db::name('SystemMenu')->field('title,id,pid,url,icon')->order('sort asc,id asc')->where('status', '1')->select(); $menus = $this->_filter_menu(Tools::arr2tree($list)); $this->assign('title', '后台管理'); $this->assign('menus', $menus); diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index c84a89ce0..6d0d670eb 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -28,7 +28,8 @@ class Menu extends BasicAdmin { */ public function index() { $this->title = '系统菜单管理'; - parent::_list($this->table, false); + $db = Db::name($this->table)->order('sort asc,id asc'); + parent::_list($db, false); } /** From bcf150af6c90440155cd01c28c98534f24fdfeb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 17:05:46 +0800 Subject: [PATCH 77/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/auth.index.html | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 application/admin/view/auth.index.html diff --git a/application/admin/view/auth.index.html b/application/admin/view/auth.index.html new file mode 100644 index 000000000..03029df7d --- /dev/null +++ b/application/admin/view/auth.index.html @@ -0,0 +1,49 @@ +{extend name='extra@admin/content' /} + +{block name="content"} + +
    + + +
    + +
    + +
    菜单名称菜单链接菜单链接 状态 操作
    - + {$vo.spl}{$vo.title}{$vo.url}{$vo.url} {if $vo.status eq 0} 已禁用 @@ -40,7 +46,7 @@ 使用中 {/if} + {if auth("$classuri/edit")} | 编辑 diff --git a/public/static/admin/listen.js b/public/static/admin/listen.js index 15317e588..8d74260a0 100644 --- a/public/static/admin/listen.js +++ b/public/static/admin/listen.js @@ -18,7 +18,7 @@ define(['jquery', 'admin.plugs'], function () { /*! 注册 data-modal 事件行为 */ this.$body.on('click', '[data-modal]', function () { - return $.form.modal($(this).attr('data-modal'), 'open_type=modal'); + return $.form.modal($(this).attr('data-modal'), 'open_type=modal', $(this).attr('data-title') || '编辑'); }); /*! 注册 data-open 事件行为 */ @@ -89,7 +89,7 @@ define(['jquery', 'admin.plugs'], function () { /*! 注册 data-icon 事件行为 */ this.$body.on('click', '[data-icon]', function () { - var field = $(this).attr('data-field') || 'icon'; + var field = $(this).attr('data-icon') || $(this).attr('data-field') || 'icon'; var url = window.ROOT_URL + '/index.php/admin/plugs/icon.html?field=' + field; $.form.iframe(url, '图标选择'); }); diff --git a/public/static/admin/plugs.js b/public/static/admin/plugs.js index ed071a60e..40ec6e517 100644 --- a/public/static/admin/plugs.js +++ b/public/static/admin/plugs.js @@ -293,11 +293,12 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { * 加载HTML到弹出层 * @param url * @param data + * @param title * @param callback * @param loading * @param tips */ - _form.prototype.modal = function (url, data, callback, loading, tips) { + _form.prototype.modal = function (url, data, title, callback, loading, tips) { this.load(url, data, 'GET', function (res) { if (typeof (res) === 'object') { return $.msg.auto(res); @@ -306,14 +307,13 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { area: "800px", content: res, btn: false, + title: title || '', success: function (dom, index) { var $container = $(dom); /* 处理样式及返回按钮事件 */ - $container.find('.wrapper').css('minWidth', '760px').find('[data-back]').off('click').on('click', function () { + $container.find('[data-close]').off('click').on('click', function () { layer.close(index); }); - /* 处理标题 */ - $container.find('.layui-layer-title').html($container.find('.ibox-title').hide().find('h5').html()); /* 事件重载 */ $.form.reInit($container); } From f0366c215a8b762a448f04cc446fc1bbd4b271cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 15:36:43 +0800 Subject: [PATCH 58/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Plugs.php | 1 + application/admin/view/plugs.icon.html | 1935 +++++++++++++++++++++++- 2 files changed, 1926 insertions(+), 10 deletions(-) diff --git a/application/admin/controller/Plugs.php b/application/admin/controller/Plugs.php index cebfbd4d2..38be5e59f 100644 --- a/application/admin/controller/Plugs.php +++ b/application/admin/controller/Plugs.php @@ -148,6 +148,7 @@ class Plugs extends BasicAdmin { * 字体图标 */ public function icon() { + $this->assign('field', $this->request->get('field', 'icon')); return view(); } diff --git a/application/admin/view/plugs.icon.html b/application/admin/view/plugs.icon.html index c627c249c..da56d2473 100644 --- a/application/admin/view/plugs.icon.html +++ b/application/admin/view/plugs.icon.html @@ -1,16 +1,1931 @@ - - + - TODO supply a title - - + {'app_name'|sysconf} {'app_version'|sysconf} + + + + + + + -
    TODO write content
    +
    +
    +
    +
      +
    • fa fa-bluetooth
    • +
    • fa fa-bluetooth-b
    • +
    • fa fa-codiepie
    • +
    • fa fa-credit-card-alt
    • +
    • fa fa-edge
    • +
    • fa fa-fort-awesome
    • +
    • fa fa-hashtag
    • +
    • fa fa-mixcloud
    • +
    • fa fa-modx
    • +
    • fa fa-pause-circle
    • +
    • fa fa-pause-circle-o
    • +
    • fa fa-percent
    • +
    • fa fa-product-hunt
    • +
    • fa fa-reddit-alien
    • +
    • fa fa-scribd
    • +
    • fa fa-shopping-bag
    • +
    • fa fa-shopping-basket
    • +
    • fa fa-stop-circle
    • +
    • fa fa-stop-circle-o
    • +
    • fa fa-usb
    • +
    • fa fa-adjust
    • +
    • fa fa-anchor
    • +
    • fa fa-archive
    • +
    • fa fa-area-chart
    • +
    • fa fa-arrows
    • +
    • fa fa-arrows-h
    • +
    • fa fa-arrows-v
    • +
    • fa fa-asterisk
    • +
    • fa fa-at
    • +
    • fa fa-automobile
    • +
    • fa fa-balance-scale
    • +
    • fa fa-ban
    • +
    • fa fa-bank
    • +
    • fa fa-bar-chart
    • +
    • fa fa-bar-chart-o
    • +
    • fa fa-barcode
    • +
    • fa fa-bars
    • +
    • fa fa-battery-0
    • +
    • fa fa-battery-1
    • +
    • fa fa-battery-2
    • +
    • fa fa-battery-3
    • +
    • fa fa-battery-4
    • +
    • fa fa-battery-empty
    • +
    • fa fa-battery-full
    • +
    • fa fa-battery-half
    • +
    • fa fa-battery-quarter
    • +
    • fa fa-battery-three-quarters
    • +
    • fa fa-bed
    • +
    • fa fa-beer
    • +
    • fa fa-bell
    • +
    • fa fa-bell-o
    • +
    • fa fa-bell-slash
    • +
    • fa fa-bell-slash-o
    • +
    • fa fa-bicycle
    • +
    • fa fa-binoculars
    • +
    • fa fa-birthday-cake
    • +
    • fa fa-bluetooth
    • +
    • fa fa-bluetooth-b
    • +
    • fa fa-bolt
    • +
    • fa fa-bomb
    • +
    • fa fa-book
    • +
    • fa fa-bookmark
    • +
    • fa fa-bookmark-o
    • +
    • fa fa-briefcase
    • +
    • fa fa-bug
    • +
    • fa fa-building
    • +
    • fa fa-building-o
    • +
    • fa fa-bullhorn
    • +
    • fa fa-bullseye
    • +
    • fa fa-bus
    • +
    • fa fa-cab
    • +
    • fa fa-calculator
    • +
    • fa fa-calendar
    • +
    • fa fa-calendar-check-o
    • +
    • fa fa-calendar-minus-o
    • +
    • fa fa-calendar-o
    • +
    • fa fa-calendar-plus-o
    • +
    • fa fa-calendar-times-o
    • +
    • fa fa-camera
    • +
    • fa fa-camera-retro
    • +
    • fa fa-car
    • +
    • fa fa-caret-square-o-down
    • +
    • fa fa-caret-square-o-left
    • +
    • fa fa-caret-square-o-right
    • +
    • fa fa-caret-square-o-up
    • +
    • fa fa-cart-arrow-down
    • +
    • fa fa-cart-plus
    • +
    • fa fa-cc
    • +
    • fa fa-certificate
    • +
    • fa fa-check
    • +
    • fa fa-check-circle
    • +
    • fa fa-check-circle-o
    • +
    • fa fa-check-square
    • +
    • fa fa-check-square-o
    • +
    • fa fa-child
    • +
    • fa fa-circle
    • +
    • fa fa-circle-o
    • +
    • fa fa-circle-o-notch
    • +
    • fa fa-circle-thin
    • +
    • fa fa-clock-o
    • +
    • fa fa-clone
    • +
    • fa fa-close
    • +
    • fa fa-cloud
    • +
    • fa fa-cloud-download
    • +
    • fa fa-cloud-upload
    • +
    • fa fa-code
    • +
    • fa fa-code-fork
    • +
    • fa fa-coffee
    • +
    • fa fa-cog
    • +
    • fa fa-cogs
    • +
    • fa fa-comment
    • +
    • fa fa-comment-o
    • +
    • fa fa-commenting
    • +
    • fa fa-commenting-o
    • +
    • fa fa-comments
    • +
    • fa fa-comments-o
    • +
    • fa fa-compass
    • +
    • fa fa-copyright
    • +
    • fa fa-creative-commons
    • +
    • fa fa-credit-card
    • +
    • fa fa-credit-card-alt
    • +
    • fa fa-crop
    • +
    • fa fa-crosshairs
    • +
    • fa fa-cube
    • +
    • fa fa-cubes
    • +
    • fa fa-cutlery
    • +
    • fa fa-dashboard
    • +
    • fa fa-database
    • +
    • fa fa-desktop
    • +
    • fa fa-diamond
    • +
    • fa fa-dot-circle-o
    • +
    • fa fa-download
    • +
    • fa fa-edit
    • +
    • fa fa-ellipsis-h
    • +
    • fa fa-ellipsis-v
    • +
    • fa fa-envelope
    • +
    • fa fa-envelope-o
    • +
    • fa fa-envelope-square
    • +
    • fa fa-eraser
    • +
    • fa fa-exchange
    • +
    • fa fa-exclamation
    • +
    • fa fa-exclamation-circle
    • +
    • fa fa-exclamation-triangle
    • +
    • fa fa-external-link
    • +
    • fa fa-external-link-square
    • +
    • fa fa-eye
    • +
    • fa fa-eye-slash
    • +
    • fa fa-eyedropper
    • +
    • fa fa-fax
    • +
    • fa fa-feed
    • +
    • fa fa-female
    • +
    • fa fa-fighter-jet
    • +
    • fa fa-file-archive-o
    • +
    • fa fa-file-audio-o
    • +
    • fa fa-file-code-o
    • +
    • fa fa-file-excel-o
    • +
    • fa fa-file-image-o
    • +
    • fa fa-file-movie-o
    • +
    • fa fa-file-pdf-o
    • +
    • fa fa-file-photo-o
    • +
    • fa fa-file-picture-o
    • +
    • fa fa-file-powerpoint-o
    • +
    • fa fa-file-sound-o
    • +
    • fa fa-file-video-o
    • +
    • fa fa-file-word-o
    • +
    • fa fa-file-zip-o
    • +
    • fa fa-film
    • +
    • fa fa-filter
    • +
    • fa fa-fire
    • +
    • fa fa-fire-extinguisher
    • +
    • fa fa-flag
    • +
    • fa fa-flag-checkered
    • +
    • fa fa-flag-o
    • +
    • fa fa-flash
    • +
    • fa fa-flask
    • +
    • fa fa-folder
    • +
    • fa fa-folder-o
    • +
    • fa fa-folder-open
    • +
    • fa fa-folder-open-o
    • +
    • fa fa-frown-o
    • +
    • fa fa-futbol-o
    • +
    • fa fa-gamepad
    • +
    • fa fa-gavel
    • +
    • fa fa-gear
    • +
    • fa fa-gears
    • +
    • fa fa-gift
    • +
    • fa fa-glass
    • +
    • fa fa-globe
    • +
    • fa fa-graduation-cap
    • +
    • fa fa-group
    • +
    • fa fa-hand-grab-o
    • +
    • fa fa-hand-lizard-o
    • +
    • fa fa-hand-paper-o
    • +
    • fa fa-hand-peace-o
    • +
    • fa fa-hand-pointer-o
    • +
    • fa fa-hand-rock-o
    • +
    • fa fa-hand-scissors-o
    • +
    • fa fa-hand-spock-o
    • +
    • fa fa-hand-stop-o
    • +
    • fa fa-hashtag
    • +
    • fa fa-hdd-o
    • +
    • fa fa-headphones
    • +
    • fa fa-heart
    • +
    • fa fa-heart-o
    • +
    • fa fa-heartbeat
    • +
    • fa fa-history
    • +
    • fa fa-home
    • +
    • fa fa-hotel
    • +
    • fa fa-hourglass
    • +
    • fa fa-hourglass-1
    • +
    • fa fa-hourglass-2
    • +
    • fa fa-hourglass-3
    • +
    • fa fa-hourglass-end
    • +
    • fa fa-hourglass-half
    • +
    • fa fa-hourglass-o
    • +
    • fa fa-hourglass-start
    • +
    • fa fa-i-cursor
    • +
    • fa fa-image
    • +
    • fa fa-inbox
    • +
    • fa fa-industry
    • +
    • fa fa-info
    • +
    • fa fa-info-circle
    • +
    • fa fa-institution
    • +
    • fa fa-key
    • +
    • fa fa-keyboard-o
    • +
    • fa fa-language
    • +
    • fa fa-laptop
    • +
    • fa fa-leaf
    • +
    • fa fa-legal
    • +
    • fa fa-lemon-o
    • +
    • fa fa-level-down
    • +
    • fa fa-level-up
    • +
    • fa fa-life-bouy
    • +
    • fa fa-life-buoy
    • +
    • fa fa-life-ring
    • +
    • fa fa-life-saver
    • +
    • fa fa-lightbulb-o
    • +
    • fa fa-line-chart
    • +
    • fa fa-location-arrow
    • +
    • fa fa-lock
    • +
    • fa fa-magic
    • +
    • fa fa-magnet
    • +
    • fa fa-mail-forward
    • +
    • fa fa-mail-reply
    • +
    • fa fa-mail-reply-all
    • +
    • fa fa-male
    • +
    • fa fa-map
    • +
    • fa fa-map-marker
    • +
    • fa fa-map-o
    • +
    • fa fa-map-pin
    • +
    • fa fa-map-signs
    • +
    • fa fa-meh-o
    • +
    • fa fa-microphone
    • +
    • fa fa-microphone-slash
    • +
    • fa fa-minus
    • +
    • fa fa-minus-circle
    • +
    • fa fa-minus-square
    • +
    • fa fa-minus-square-o
    • +
    • fa fa-mobile
    • +
    • fa fa-mobile-phone
    • +
    • fa fa-money
    • +
    • fa fa-moon-o
    • +
    • fa fa-mortar-board
    • +
    • fa fa-motorcycle
    • +
    • fa fa-mouse-pointer
    • +
    • fa fa-music
    • +
    • fa fa-navicon
    • +
    • fa fa-newspaper-o
    • +
    • fa fa-object-group
    • +
    • fa fa-object-ungroup
    • +
    • fa fa-paint-brush
    • +
    • fa fa-paper-plane
    • +
    • fa fa-paper-plane-o
    • +
    • fa fa-paw
    • +
    • fa fa-pencil
    • +
    • fa fa-pencil-square
    • +
    • fa fa-pencil-square-o
    • +
    • fa fa-percent
    • +
    • fa fa-phone
    • +
    • fa fa-phone-square
    • +
    • fa fa-photo
    • +
    • fa fa-picture-o
    • +
    • fa fa-pie-chart
    • +
    • fa fa-plane
    • +
    • fa fa-plug
    • +
    • fa fa-plus
    • +
    • fa fa-plus-circle
    • +
    • fa fa-plus-square
    • +
    • fa fa-plus-square-o
    • +
    • fa fa-power-off
    • +
    • fa fa-print
    • +
    • fa fa-puzzle-piece
    • +
    • fa fa-qrcode
    • +
    • fa fa-question
    • +
    • fa fa-question-circle
    • +
    • fa fa-quote-left
    • +
    • fa fa-quote-right
    • +
    • fa fa-random
    • +
    • fa fa-recycle
    • +
    • fa fa-refresh
    • +
    • fa fa-registered
    • +
    • fa fa-remove
    • +
    • fa fa-reorder
    • +
    • fa fa-reply
    • +
    • fa fa-reply-all
    • +
    • fa fa-retweet
    • +
    • fa fa-road
    • +
    • fa fa-rocket
    • +
    • fa fa-rss
    • +
    • fa fa-rss-square
    • +
    • fa fa-search
    • +
    • fa fa-search-minus
    • +
    • fa fa-search-plus
    • +
    • fa fa-send
    • +
    • fa fa-send-o
    • +
    • fa fa-server
    • +
    • fa fa-share
    • +
    • fa fa-share-alt
    • +
    • fa fa-share-alt-square
    • +
    • fa fa-share-square
    • +
    • fa fa-share-square-o
    • +
    • fa fa-shield
    • +
    • fa fa-ship
    • +
    • fa fa-shopping-bag
    • +
    • fa fa-shopping-basket
    • +
    • fa fa-shopping-cart
    • +
    • fa fa-sign-in
    • +
    • fa fa-sign-out
    • +
    • fa fa-signal
    • +
    • fa fa-sitemap
    • +
    • fa fa-sliders
    • +
    • fa fa-smile-o
    • +
    • fa fa-soccer-ball-o
    • +
    • fa fa-sort
    • +
    • fa fa-sort-alpha-asc
    • +
    • fa fa-sort-alpha-desc
    • +
    • fa fa-sort-amount-asc
    • +
    • fa fa-sort-amount-desc
    • +
    • fa fa-sort-asc
    • +
    • fa fa-sort-desc
    • +
    • fa fa-sort-down
    • +
    • fa fa-sort-numeric-asc
    • +
    • fa fa-sort-numeric-desc
    • +
    • fa fa-sort-up
    • +
    • fa fa-space-shuttle
    • +
    • fa fa-spoon
    • +
    • fa fa-square
    • +
    • fa fa-square-o
    • +
    • fa fa-star
    • +
    • fa fa-star-half
    • +
    • fa fa-star-half-empty
    • +
    • fa fa-star-half-full
    • +
    • fa fa-star-half-o
    • +
    • fa fa-star-o
    • +
    • fa fa-sticky-note
    • +
    • fa fa-sticky-note-o
    • +
    • fa fa-street-view
    • +
    • fa fa-suitcase
    • +
    • fa fa-sun-o
    • +
    • fa fa-support
    • +
    • fa fa-tablet
    • +
    • fa fa-tachometer
    • +
    • fa fa-tag
    • +
    • fa fa-tags
    • +
    • fa fa-tasks
    • +
    • fa fa-taxi
    • +
    • fa fa-television
    • +
    • fa fa-terminal
    • +
    • fa fa-thumb-tack
    • +
    • fa fa-thumbs-down
    • +
    • fa fa-thumbs-o-down
    • +
    • fa fa-thumbs-o-up
    • +
    • fa fa-thumbs-up
    • +
    • fa fa-ticket
    • +
    • fa fa-times
    • +
    • fa fa-times-circle
    • +
    • fa fa-times-circle-o
    • +
    • fa fa-tint
    • +
    • fa fa-toggle-down
    • +
    • fa fa-toggle-left
    • +
    • fa fa-toggle-off
    • +
    • fa fa-toggle-on
    • +
    • fa fa-toggle-right
    • +
    • fa fa-toggle-up
    • +
    • fa fa-trademark
    • +
    • fa fa-trash
    • +
    • fa fa-trash-o
    • +
    • fa fa-tree
    • +
    • fa fa-trophy
    • +
    • fa fa-truck
    • +
    • fa fa-tty
    • +
    • fa fa-tv
    • +
    • fa fa-umbrella
    • +
    • fa fa-university
    • +
    • fa fa-unlock
    • +
    • fa fa-unlock-alt
    • +
    • fa fa-unsorted
    • +
    • fa fa-upload
    • +
    • fa fa-user
    • +
    • fa fa-user-plus
    • +
    • fa fa-user-secret
    • +
    • fa fa-user-times
    • +
    • fa fa-users
    • +
    • fa fa-video-camera
    • +
    • fa fa-volume-down
    • +
    • fa fa-volume-off
    • +
    • fa fa-volume-up
    • +
    • fa fa-warning
    • +
    • fa fa-wheelchair
    • +
    • fa fa-wifi
    • +
    • fa fa-wrench
    • +
    • fa fa-hand-grab-o
    • +
    • fa fa-hand-lizard-o
    • +
    • fa fa-hand-o-down
    • +
    • fa fa-hand-o-left
    • +
    • fa fa-hand-o-right
    • +
    • fa fa-hand-o-up
    • +
    • fa fa-hand-paper-o
    • +
    • fa fa-hand-peace-o
    • +
    • fa fa-hand-pointer-o
    • +
    • fa fa-hand-rock-o
    • +
    • fa fa-hand-scissors-o
    • +
    • fa fa-hand-spock-o
    • +
    • fa fa-hand-stop-o
    • +
    • fa fa-thumbs-down
    • +
    • fa fa-thumbs-o-down
    • +
    • fa fa-thumbs-o-up
    • +
    • fa fa-thumbs-up
    • +
    • fa fa-ambulance
    • +
    • fa fa-automobile
    • +
    • fa fa-bicycle
    • +
    • fa fa-bus
    • +
    • fa fa-cab
    • +
    • fa fa-car
    • +
    • fa fa-fighter-jet
    • +
    • fa fa-motorcycle
    • +
    • fa fa-plane
    • +
    • fa fa-rocket
    • +
    • fa fa-ship
    • +
    • fa fa-space-shuttle
    • +
    • fa fa-subway
    • +
    • fa fa-taxi
    • +
    • fa fa-train
    • +
    • fa fa-truck
    • +
    • fa fa-wheelchair
    • +
    • fa fa-genderless
    • +
    • fa fa-intersex
    • +
    • fa fa-mars
    • +
    • fa fa-mars-double
    • +
    • fa fa-mars-stroke
    • +
    • fa fa-mars-stroke-h
    • +
    • fa fa-mars-stroke-v
    • +
    • fa fa-mercury
    • +
    • fa fa-neuter
    • +
    • fa fa-transgender
    • +
    • fa fa-transgender-alt
    • +
    • fa fa-venus
    • +
    • fa fa-venus-double
    • +
    • fa fa-venus-mars
    • +
    • fa fa-file
    • +
    • fa fa-file-archive-o
    • +
    • fa fa-file-audio-o
    • +
    • fa fa-file-code-o
    • +
    • fa fa-file-excel-o
    • +
    • fa fa-file-image-o
    • +
    • fa fa-file-movie-o
    • +
    • fa fa-file-o
    • +
    • fa fa-file-pdf-o
    • +
    • fa fa-file-photo-o
    • +
    • fa fa-file-picture-o
    • +
    • fa fa-file-powerpoint-o
    • +
    • fa fa-file-sound-o
    • +
    • fa fa-file-text
    • +
    • fa fa-file-text-o
    • +
    • fa fa-file-video-o
    • +
    • fa fa-file-word-o
    • +
    • fa fa-file-zip-o
    • +
    • fa fa-circle-o-notch
    • +
    • fa fa-cog
    • +
    • fa fa-gear
    • +
    • fa fa-refresh
    • +
    • faner
    • +
    • fa fa-check-square
    • +
    • fa fa-check-square-o
    • +
    • fa fa-circle
    • +
    • fa fa-circle-o
    • +
    • fa fa-dot-circle-o
    • +
    • fa fa-minus-square
    • +
    • fa fa-minus-square-o
    • +
    • fa fa-plus-square
    • +
    • fa fa-plus-square-o
    • +
    • fa fa-square
    • +
    • fa fa-square-o
    • +
    • fa fa-cc-amex
    • +
    • fa fa-cc-diners-club
    • +
    • fa fa-cc-discover
    • +
    • fa fa-cc-jcb
    • +
    • fa fa-cc-mastercard
    • +
    • fa fa-cc-paypal
    • +
    • fa fa-cc-stripe
    • +
    • fa fa-cc-visa
    • +
    • fa fa-credit-card
    • +
    • fa fa-credit-card-alt
    • +
    • fa fa-google-wallet
    • +
    • fa fa-paypal
    • +
    • fa fa-area-chart
    • +
    • fa fa-bar-chart
    • +
    • fa fa-bar-chart-o
    • +
    • fa fa-line-chart
    • +
    • fa fa-pie-chart
    • +
    • fa fa-bitcoin
    • +
    • fa fa-btc
    • +
    • fa fa-cny
    • +
    • fa fa-dollar
    • +
    • fa fa-eur
    • +
    • fa fa-euro
    • +
    • fa fa-gbp
    • +
    • fa fa-gg
    • +
    • fa fa-gg-circle
    • +
    • fa fa-ils
    • +
    • fa fa-inr
    • +
    • fa fa-jpy
    • +
    • fa fa-krw
    • +
    • fa fa-money
    • +
    • fa fa-rmb
    • +
    • fa fa-rouble
    • +
    • fa fa-rub
    • +
    • fa fa-ruble
    • +
    • fa fa-rupee
    • +
    • fa fa-shekel
    • +
    • fa fa-sheqel
    • +
    • fa fa-try
    • +
    • fa fa-turkish-lira
    • +
    • fa fa-usd
    • +
    • fa fa-won
    • +
    • fa fa-yen
    • +
    • fa fa-align-center
    • +
    • fa fa-align-justify
    • +
    • fa fa-align-left
    • +
    • fa fa-align-right
    • +
    • fa fa-bold
    • +
    • fa fa-chain
    • +
    • fa fa-chain-broken
    • +
    • fa fa-clipboard
    • +
    • fa fa-columns
    • +
    • fa fa-copy
    • +
    • fa fa-cut
    • +
    • fa fa-dedent
    • +
    • fa fa-eraser
    • +
    • fa fa-file
    • +
    • fa fa-file-o
    • +
    • fa fa-file-text
    • +
    • fa fa-file-text-o
    • +
    • fa fa-files-o
    • +
    • fa fa-floppy-o
    • +
    • fa fa-font
    • +
    • fa fa-header
    • +
    • fa fa-indent
    • +
    • fa fa-italic
    • +
    • fa fa-link
    • +
    • fa fa-list
    • +
    • fa fa-list-alt
    • +
    • fa fa-list-ol
    • +
    • fa fa-list-ul
    • +
    • fa fa-outdent
    • +
    • fa fa-paperclip
    • +
    • fa fa-paragraph
    • +
    • fa fa-paste
    • +
    • fa fa-repeat
    • +
    • fa fa-rotate-left
    • +
    • fa fa-rotate-right
    • +
    • fa fa-save
    • +
    • fa fa-scissors
    • +
    • fa fa-strikethrough
    • +
    • fa fa-subscript
    • +
    • fa fa-superscript
    • +
    • fa fa-table
    • +
    • fa fa-text-height
    • +
    • fa fa-text-width
    • +
    • fa fa-th
    • +
    • fa fa-th-large
    • +
    • fa fa-th-list
    • +
    • fa fa-underline
    • +
    • fa fa-undo
    • +
    • fa fa-unlink
    • +
    • fa fa-angle-double-down
    • +
    • fa fa-angle-double-left
    • +
    • fa fa-angle-double-right
    • +
    • fa fa-angle-double-up
    • +
    • fa fa-angle-down
    • +
    • fa fa-angle-left
    • +
    • fa fa-angle-right
    • +
    • fa fa-angle-up
    • +
    • fa fa-arrow-circle-down
    • +
    • fa fa-arrow-circle-left
    • +
    • fa fa-arrow-circle-o-down
    • +
    • fa fa-arrow-circle-o-left
    • +
    • fa fa-arrow-circle-o-right
    • +
    • fa fa-arrow-circle-o-up
    • +
    • fa fa-arrow-circle-right
    • +
    • fa fa-arrow-circle-up
    • +
    • fa fa-arrow-down
    • +
    • fa fa-arrow-left
    • +
    • fa fa-arrow-right
    • +
    • fa fa-arrow-up
    • +
    • fa fa-arrows
    • +
    • fa fa-arrows-alt
    • +
    • fa fa-arrows-h
    • +
    • fa fa-arrows-v
    • +
    • fa fa-caret-down
    • +
    • fa fa-caret-left
    • +
    • fa fa-caret-right
    • +
    • fa fa-caret-square-o-down
    • +
    • fa fa-caret-square-o-left
    • +
    • fa fa-caret-square-o-right
    • +
    • fa fa-caret-square-o-up
    • +
    • fa fa-caret-up
    • +
    • fa fa-chevron-circle-down
    • +
    • fa fa-chevron-circle-left
    • +
    • fa fa-chevron-circle-right
    • +
    • fa fa-chevron-circle-up
    • +
    • fa fa-chevron-down
    • +
    • fa fa-chevron-left
    • +
    • fa fa-chevron-right
    • +
    • fa fa-chevron-up
    • +
    • fa fa-exchange
    • +
    • fa fa-hand-o-down
    • +
    • fa fa-hand-o-left
    • +
    • fa fa-hand-o-right
    • +
    • fa fa-hand-o-up
    • +
    • fa fa-long-arrow-down
    • +
    • fa fa-long-arrow-left
    • +
    • fa fa-long-arrow-right
    • +
    • fa fa-long-arrow-up
    • +
    • fa fa-toggle-down
    • +
    • fa fa-toggle-left
    • +
    • fa fa-toggle-right
    • +
    • fa fa-toggle-up
    • +
    • fa fa-arrows-alt
    • +
    • fa fa-backward
    • +
    • fa fa-compress
    • +
    • fa fa-eject
    • +
    • fa fa-expand
    • +
    • fa fa-fast-backward
    • +
    • fa fa-fast-forward
    • +
    • fa fa-forward
    • +
    • fa fa-pause
    • +
    • fa fa-pause-circle
    • +
    • fa fa-pause-circle-o
    • +
    • fa fa-play
    • +
    • fa fa-play-circle
    • +
    • fa fa-play-circle-o
    • +
    • fa fa-random
    • +
    • fa fa-step-backward
    • +
    • fa fa-step-forward
    • +
    • fa fa-stop
    • +
    • fa fa-stop-circle
    • +
    • fa fa-stop-circle-o
    • +
    • fa fa-youtube-play
    • +
    • fa fa-500px
    • +
    • fa fa-adn
    • +
    • fa fa-amazon
    • +
    • fa fa-android
    • +
    • fa fa-angellist
    • +
    • fa fa-apple
    • +
    • fa fa-behance
    • +
    • fa fa-behance-square
    • +
    • fa fa-bitbucket
    • +
    • fa fa-bitbucket-square
    • +
    • fa fa-bitcoin
    • +
    • fa fa-black-tie
    • +
    • fa fa-bluetooth
    • +
    • fa fa-bluetooth-b
    • +
    • fa fa-btc
    • +
    • fa fa-buysellads
    • +
    • fa fa-cc-amex
    • +
    • fa fa-cc-diners-club
    • +
    • fa fa-cc-discover
    • +
    • fa fa-cc-jcb
    • +
    • fa fa-cc-mastercard
    • +
    • fa fa-cc-paypal
    • +
    • fa fa-cc-stripe
    • +
    • fa fa-cc-visa
    • +
    • fa fa-chrome
    • +
    • fa fa-codepen
    • +
    • fa fa-codiepie
    • +
    • fa fa-connectdevelop
    • +
    • fa fa-contao
    • +
    • fa fa-css3
    • +
    • fa fa-dashcube
    • +
    • fa fa-delicious
    • +
    • fa fa-deviantart
    • +
    • fa fa-digg
    • +
    • fa fa-dribbble
    • +
    • fa fa-dropbox
    • +
    • fa fa-drupal
    • +
    • fa fa-edge
    • +
    • fa fa-empire
    • +
    • fa fa-expeditedssl
    • +
    • fa fa-facebook
    • +
    • fa fa-facebook-f
    • +
    • fa fa-facebook-official
    • +
    • fa fa-facebook-square
    • +
    • fa fa-firefox
    • +
    • fa fa-flickr
    • +
    • fa fa-fonticons
    • +
    • fa fa-fort-awesome
    • +
    • fa fa-forumbee
    • +
    • fa fa-foursquare
    • +
    • fa fa-ge
    • +
    • fa fa-get-pocket
    • +
    • fa fa-gg
    • +
    • fa fa-gg-circle
    • +
    • fa fa-git
    • +
    • fa fa-git-square
    • +
    • fa fa-github
    • +
    • fa fa-github-alt
    • +
    • fa fa-github-square
    • +
    • fa fa-gittip
    • +
    • fa fa-google
    • +
    • fa fa-google-plus
    • +
    • fa fa-google-plus-square
    • +
    • fa fa-google-wallet
    • +
    • fa fa-gratipay
    • +
    • fa fa-hacker-news
    • +
    • fa fa-houzz
    • +
    • fa fa-html5
    • +
    • fa fa-instagram
    • +
    • fa fa-internet-explorer
    • +
    • fa fa-ioxhost
    • +
    • fa fa-joomla
    • +
    • fa fa-jsfiddle
    • +
    • fa fa-lastfm
    • +
    • fa fa-lastfm-square
    • +
    • fa fa-leanpub
    • +
    • fa fa-linkedin
    • +
    • fa fa-linkedin-square
    • +
    • fa fa-linux
    • +
    • fa fa-maxcdn
    • +
    • fa fa-meanpath
    • +
    • fa fa-medium
    • +
    • fa fa-mixcloud
    • +
    • fa fa-modx
    • +
    • fa fa-odnoklassniki
    • +
    • fa fa-odnoklassniki-square
    • +
    • fa fa-opencart
    • +
    • fa fa-openid
    • +
    • fa fa-opera
    • +
    • fa fa-optin-monster
    • +
    • fa fa-pagelines
    • +
    • fa fa-paypal
    • +
    • fa fa-pied-piper
    • +
    • fa fa-pied-piper-alt
    • +
    • fa fa-pinterest
    • +
    • fa fa-pinterest-p
    • +
    • fa fa-pinterest-square
    • +
    • fa fa-product-hunt
    • +
    • fa fa-qq
    • +
    • fa fa-ra
    • +
    • fa fa-rebel
    • +
    • fa fa-reddit
    • +
    • fa fa-reddit-alien
    • +
    • fa fa-reddit-square
    • +
    • fa fa-renren
    • +
    • fa fa-safari
    • +
    • fa fa-scribd
    • +
    • fa fa-sellsy
    • +
    • fa fa-share-alt
    • +
    • fa fa-share-alt-square
    • +
    • fa fa-shirtsinbulk
    • +
    • fa fa-simplybuilt
    • +
    • fa fa-skyatlas
    • +
    • fa fa-skype
    • +
    • fa fa-slack
    • +
    • fa fa-slideshare
    • +
    • fa fa-soundcloud
    • +
    • fa fa-spotify
    • +
    • fa fa-stack-exchange
    • +
    • fa fa-stack-overflow
    • +
    • fa fa-steam
    • +
    • fa fa-steam-square
    • +
    • fa fa-stumbleupon
    • +
    • fa fa-stumbleupon-circle
    • +
    • fa fa-tencent-weibo
    • +
    • fa fa-trello
    • +
    • fa fa-tripadvisor
    • +
    • fa fa-tumblr
    • +
    • fa fa-tumblr-square
    • +
    • fa fa-twitch
    • +
    • fa fa-twitter
    • +
    • fa fa-twitter-square
    • +
    • fa fa-usb
    • +
    • fa fa-viacoin
    • +
    • fa fa-vimeo
    • +
    • fa fa-vimeo-square
    • +
    • fa fa-vine
    • +
    • fa fa-vk
    • +
    • fa fa-wechat
    • +
    • fa fa-weibo
    • +
    • fa fa-weixin
    • +
    • fa fa-whatsapp
    • +
    • fa fa-wikipedia-w
    • +
    • fa fa-windows
    • +
    • fa fa-wordpress
    • +
    • fa fa-xing
    • +
    • fa fa-xing-square
    • +
    • fa fa-y-combinator
    • +
    • fa fa-y-combinator-square
    • +
    • fa fa-yahoo
    • +
    • fa fa-yc
    • +
    • fa fa-yc-square
    • +
    • fa fa-yelp
    • +
    • fa fa-youtube
    • +
    • fa fa-youtube-play
    • +
    • fa fa-youtube-square
    • + +
    • fa fa-ambulance
    • +
    • fa fa-h-square
    • +
    • fa fa-heart
    • +
    • fa fa-heart-o
    • +
    • fa fa-heartbeat
    • +
    • fa fa-hospital-o
    • +
    • fa fa-medkit
    • +
    • fa fa-plus-square
    • +
    • fa fa-stethoscope
    • +
    • fa fa-user-md
    • +
    • fa fa-wheelchair
    • +
    • + + glyphicon glyphicon-asterisk +
    • +
    • + + glyphicon glyphicon-plus +
    • +
    • + + glyphicon glyphicon-euro +
    • +
    • + + glyphicon glyphicon-eur +
    • +
    • + + glyphicon glyphicon-minus +
    • +
    • + + glyphicon glyphicon-cloud +
    • +
    • + + glyphicon glyphicon-envelope +
    • +
    • + + glyphicon glyphicon-pencil +
    • +
    • + + glyphicon glyphicon-glass +
    • +
    • + + glyphicon glyphicon-music +
    • +
    • + + glyphicon glyphicon-search +
    • +
    • + + glyphicon glyphicon-heart +
    • +
    • + + glyphicon glyphicon-star +
    • +
    • + + glyphicon glyphicon-star-empty +
    • +
    • + + glyphicon glyphicon-user +
    • +
    • + + glyphicon glyphicon-film +
    • +
    • + + glyphicon glyphicon-th-large +
    • +
    • + + glyphicon glyphicon-th +
    • +
    • + + glyphicon glyphicon-th-list +
    • +
    • + + glyphicon glyphicon-ok +
    • +
    • + + glyphicon glyphicon-remove +
    • +
    • + + glyphicon glyphicon-zoom-in +
    • +
    • + + glyphicon glyphicon-zoom-out +
    • +
    • + + glyphicon glyphicon-off +
    • +
    • + + glyphicon glyphicon-signal +
    • +
    • + + glyphicon glyphicon-cog +
    • +
    • + + glyphicon glyphicon-trash +
    • +
    • + + glyphicon glyphicon-home +
    • +
    • + + glyphicon glyphicon-file +
    • +
    • + + glyphicon glyphicon-time +
    • +
    • + + glyphicon glyphicon-road +
    • +
    • + + glyphicon glyphicon-download-alt +
    • +
    • + + glyphicon glyphicon-download +
    • +
    • + + glyphicon glyphicon-upload +
    • +
    • + + glyphicon glyphicon-inbox +
    • +
    • + + glyphicon glyphicon-play-circle +
    • +
    • + + glyphicon glyphicon-repeat +
    • +
    • + + glyphicon glyphicon-refresh +
    • +
    • + + glyphicon glyphicon-list-alt +
    • +
    • + + glyphicon glyphicon-lock +
    • +
    • + + glyphicon glyphicon-flag +
    • +
    • + + glyphicon glyphicon-headphones +
    • +
    • + + glyphicon glyphicon-volume-off +
    • +
    • + + glyphicon glyphicon-volume-down +
    • +
    • + + glyphicon glyphicon-volume-up +
    • +
    • + + glyphicon glyphicon-qrcode +
    • +
    • + + glyphicon glyphicon-barcode +
    • +
    • + + glyphicon glyphicon-tag +
    • +
    • + + glyphicon glyphicon-tags +
    • +
    • + + glyphicon glyphicon-book +
    • +
    • + + glyphicon glyphicon-bookmark +
    • +
    • + + glyphicon glyphicon-print +
    • +
    • + + glyphicon glyphicon-camera +
    • +
    • + + glyphicon glyphicon-font +
    • +
    • + + glyphicon glyphicon-bold +
    • +
    • + + glyphicon glyphicon-italic +
    • +
    • + + glyphicon glyphicon-text-height +
    • +
    • + + glyphicon glyphicon-text-width +
    • +
    • + + glyphicon glyphicon-align-left +
    • +
    • + + glyphicon glyphicon-align-center +
    • +
    • + + glyphicon glyphicon-align-right +
    • +
    • + + glyphicon glyphicon-align-justify +
    • +
    • + + glyphicon glyphicon-list +
    • +
    • + + glyphicon glyphicon-indent-left +
    • +
    • + + glyphicon glyphicon-indent-right +
    • +
    • + + glyphicon glyphicon-facetime-video +
    • +
    • + + glyphicon glyphicon-picture +
    • +
    • + + glyphicon glyphicon-map-marker +
    • +
    • + + glyphicon glyphicon-adjust +
    • +
    • + + glyphicon glyphicon-tint +
    • +
    • + + glyphicon glyphicon-edit +
    • +
    • + + glyphicon glyphicon-share +
    • +
    • + + glyphicon glyphicon-check +
    • +
    • + + glyphicon glyphicon-move +
    • +
    • + + glyphicon glyphicon-step-backward +
    • +
    • + + glyphicon glyphicon-fast-backward +
    • +
    • + + glyphicon glyphicon-backward +
    • +
    • + + glyphicon glyphicon-play +
    • +
    • + + glyphicon glyphicon-pause +
    • +
    • + + glyphicon glyphicon-stop +
    • +
    • + + glyphicon glyphicon-forward +
    • +
    • + + glyphicon glyphicon-fast-forward +
    • +
    • + + glyphicon glyphicon-step-forward +
    • +
    • + + glyphicon glyphicon-eject +
    • +
    • + + glyphicon glyphicon-chevron-left +
    • +
    • + + glyphicon glyphicon-chevron-right +
    • +
    • + + glyphicon glyphicon-plus-sign +
    • +
    • + + glyphicon glyphicon-minus-sign +
    • +
    • + + glyphicon glyphicon-remove-sign +
    • +
    • + + glyphicon glyphicon-ok-sign +
    • +
    • + + glyphicon glyphicon-question-sign +
    • +
    • + + glyphicon glyphicon-info-sign +
    • +
    • + + glyphicon glyphicon-screenshot +
    • +
    • + + glyphicon glyphicon-remove-circle +
    • +
    • + + glyphicon glyphicon-ok-circle +
    • +
    • + + glyphicon glyphicon-ban-circle +
    • +
    • + + glyphicon glyphicon-arrow-left +
    • +
    • + + glyphicon glyphicon-arrow-right +
    • +
    • + + glyphicon glyphicon-arrow-up +
    • +
    • + + glyphicon glyphicon-arrow-down +
    • +
    • + + glyphicon glyphicon-share-alt +
    • +
    • + + glyphicon glyphicon-resize-full +
    • +
    • + + glyphicon glyphicon-resize-small +
    • +
    • + + glyphicon glyphicon-exclamation-sign +
    • +
    • + + glyphicon glyphicon-gift +
    • +
    • + + glyphicon glyphicon-leaf +
    • +
    • + + glyphicon glyphicon-fire +
    • +
    • + + glyphicon glyphicon-eye-open +
    • +
    • + + glyphicon glyphicon-eye-close +
    • +
    • + + glyphicon glyphicon-warning-sign +
    • +
    • + + glyphicon glyphicon-plane +
    • +
    • + + glyphicon glyphicon-calendar +
    • +
    • + + glyphicon glyphicon-random +
    • +
    • + + glyphicon glyphicon-comment +
    • +
    • + + glyphicon glyphicon-magnet +
    • +
    • + + glyphicon glyphicon-chevron-up +
    • +
    • + + glyphicon glyphicon-chevron-down +
    • +
    • + + glyphicon glyphicon-retweet +
    • +
    • + + glyphicon glyphicon-shopping-cart +
    • +
    • + + glyphicon glyphicon-folder-close +
    • +
    • + + glyphicon glyphicon-folder-open +
    • +
    • + + glyphicon glyphicon-resize-vertical +
    • +
    • + + glyphicon glyphicon-resize-horizontal +
    • +
    • + + glyphicon glyphicon-hdd +
    • +
    • + + glyphicon glyphicon-bullhorn +
    • +
    • + + glyphicon glyphicon-bell +
    • +
    • + + glyphicon glyphicon-certificate +
    • +
    • + + glyphicon glyphicon-thumbs-up +
    • +
    • + + glyphicon glyphicon-thumbs-down +
    • +
    • + + glyphicon glyphicon-hand-right +
    • +
    • + + glyphicon glyphicon-hand-left +
    • +
    • + + glyphicon glyphicon-hand-up +
    • +
    • + + glyphicon glyphicon-hand-down +
    • +
    • + + glyphicon glyphicon-circle-arrow-right +
    • +
    • + + glyphicon glyphicon-circle-arrow-left +
    • +
    • + + glyphicon glyphicon-circle-arrow-up +
    • +
    • + + glyphicon glyphicon-circle-arrow-down +
    • +
    • + + glyphicon glyphicon-globe +
    • +
    • + + glyphicon glyphicon-wrench +
    • +
    • + + glyphicon glyphicon-tasks +
    • +
    • + + glyphicon glyphicon-filter +
    • +
    • + + glyphicon glyphicon-briefcase +
    • +
    • + + glyphicon glyphicon-fullscreen +
    • +
    • + + glyphicon glyphicon-dashboard +
    • +
    • + + glyphicon glyphicon-paperclip +
    • +
    • + + glyphicon glyphicon-heart-empty +
    • +
    • + + glyphicon glyphicon-link +
    • +
    • + + glyphicon glyphicon-phone +
    • +
    • + + glyphicon glyphicon-pushpin +
    • +
    • + + glyphicon glyphicon-usd +
    • +
    • + + glyphicon glyphicon-gbp +
    • +
    • + + glyphicon glyphicon-sort +
    • +
    • + + glyphicon glyphicon-sort-by-alphabet +
    • +
    • + + glyphicon glyphicon-sort-by-alphabet-alt +
    • +
    • + + glyphicon glyphicon-sort-by-order +
    • +
    • + + glyphicon glyphicon-sort-by-order-alt +
    • +
    • + + glyphicon glyphicon-sort-by-attributes +
    • +
    • + + glyphicon glyphicon-sort-by-attributes-alt +
    • +
    • + + glyphicon glyphicon-unchecked +
    • +
    • + + glyphicon glyphicon-expand +
    • +
    • + + glyphicon glyphicon-collapse-down +
    • +
    • + + glyphicon glyphicon-collapse-up +
    • +
    • + + glyphicon glyphicon-log-in +
    • +
    • + + glyphicon glyphicon-flash +
    • +
    • + + glyphicon glyphicon-log-out +
    • +
    • + + glyphicon glyphicon-new-window +
    • +
    • + + glyphicon glyphicon-record +
    • +
    • + + glyphicon glyphicon-save +
    • +
    • + + glyphicon glyphicon-open +
    • +
    • + + glyphicon glyphicon-saved +
    • +
    • + + glyphicon glyphicon-import +
    • +
    • + + glyphicon glyphicon-export +
    • +
    • + + glyphicon glyphicon-send +
    • +
    • + + glyphicon glyphicon-floppy-disk +
    • +
    • + + glyphicon glyphicon-floppy-saved +
    • +
    • + + glyphicon glyphicon-floppy-remove +
    • +
    • + + glyphicon glyphicon-floppy-save +
    • +
    • + + glyphicon glyphicon-floppy-open +
    • +
    • + + glyphicon glyphicon-credit-card +
    • +
    • + + glyphicon glyphicon-transfer +
    • +
    • + + glyphicon glyphicon-cutlery +
    • +
    • + + glyphicon glyphicon-header +
    • +
    • + + glyphicon glyphicon-compressed +
    • +
    • + + glyphicon glyphicon-earphone +
    • +
    • + + glyphicon glyphicon-phone-alt +
    • +
    • + + glyphicon glyphicon-tower +
    • +
    • + + glyphicon glyphicon-stats +
    • +
    • + + glyphicon glyphicon-sd-video +
    • +
    • + + glyphicon glyphicon-hd-video +
    • +
    • + + glyphicon glyphicon-subtitles +
    • +
    • + + glyphicon glyphicon-sound-stereo +
    • +
    • + + glyphicon glyphicon-sound-dolby +
    • +
    • + + glyphicon glyphicon-sound-5-1 +
    • +
    • + + glyphicon glyphicon-sound-6-1 +
    • +
    • + + glyphicon glyphicon-sound-7-1 +
    • +
    • + + glyphicon glyphicon-copyright-mark +
    • +
    • + + glyphicon glyphicon-registration-mark +
    • +
    • + + glyphicon glyphicon-cloud-download +
    • +
    • + + glyphicon glyphicon-cloud-upload +
    • +
    • + + glyphicon glyphicon-tree-conifer +
    • +
    • + + glyphicon glyphicon-tree-deciduous +
    • +
    • + + glyphicon glyphicon-cd +
    • +
    • + + glyphicon glyphicon-save-file +
    • +
    • + + glyphicon glyphicon-open-file +
    • +
    • + + glyphicon glyphicon-level-up +
    • +
    • + + glyphicon glyphicon-copy +
    • +
    • + + glyphicon glyphicon-paste +
    • +
    • + + glyphicon glyphicon-alert +
    • +
    • + + glyphicon glyphicon-equalizer +
    • +
    • + + glyphicon glyphicon-king +
    • +
    • + + glyphicon glyphicon-queen +
    • +
    • + + glyphicon glyphicon-pawn +
    • +
    • + + glyphicon glyphicon-bishop +
    • +
    • + + glyphicon glyphicon-knight +
    • +
    • + + glyphicon glyphicon-baby-formula +
    • +
    • + + glyphicon glyphicon-tent +
    • +
    • + + glyphicon glyphicon-blackboard +
    • +
    • + + glyphicon glyphicon-bed +
    • +
    • + + glyphicon glyphicon-apple +
    • +
    • + + glyphicon glyphicon-erase +
    • +
    • + + glyphicon glyphicon-hourglass +
    • +
    • + + glyphicon glyphicon-lamp +
    • +
    • + + glyphicon glyphicon-duplicate +
    • +
    • + + glyphicon glyphicon-piggy-bank +
    • +
    • + + glyphicon glyphicon-scissors +
    • +
    • + + glyphicon glyphicon-bitcoin +
    • +
    • + + glyphicon glyphicon-btc +
    • +
    • + + glyphicon glyphicon-xbt +
    • +
    • + + glyphicon glyphicon-yen +
    • +
    • + + glyphicon glyphicon-jpy +
    • +
    • + + glyphicon glyphicon-ruble +
    • +
    • + + glyphicon glyphicon-rub +
    • +
    • + + glyphicon glyphicon-scale +
    • +
    • + + glyphicon glyphicon-ice-lolly +
    • +
    • + + glyphicon glyphicon-ice-lolly-tasted +
    • +
    • + + glyphicon glyphicon-education +
    • +
    • + + glyphicon glyphicon-option-horizontal +
    • +
    • + + glyphicon glyphicon-option-vertical +
    • +
    • + + glyphicon glyphicon-menu-hamburger +
    • +
    • + + glyphicon glyphicon-modal-window +
    • +
    • + + glyphicon glyphicon-oil +
    • +
    • + + glyphicon glyphicon-grain +
    • +
    • + + glyphicon glyphicon-sunglasses +
    • +
    • + + glyphicon glyphicon-text-size +
    • +
    • + + glyphicon glyphicon-text-color +
    • +
    • + + glyphicon glyphicon-text-background +
    • +
    • + + glyphicon glyphicon-object-align-top +
    • +
    • + + glyphicon glyphicon-object-align-bottom +
    • +
    • + + glyphicon glyphicon-object-align-horizontal +
    • +
    • + + glyphicon glyphicon-object-align-left +
    • +
    • + + glyphicon glyphicon-object-align-vertical +
    • +
    • + + glyphicon glyphicon-object-align-right +
    • +
    • + + glyphicon glyphicon-triangle-right +
    • +
    • + + glyphicon glyphicon-triangle-left +
    • +
    • + + glyphicon glyphicon-triangle-bottom +
    • +
    • + + glyphicon glyphicon-triangle-top +
    • +
    • + + glyphicon glyphicon-console +
    • +
    • + + glyphicon glyphicon-superscript +
    • +
    • + + glyphicon glyphicon-subscript +
    • +
    • + + glyphicon glyphicon-menu-left +
    • +
    • + + glyphicon glyphicon-menu-right +
    • +
    • + + glyphicon glyphicon-menu-down +
    • +
    • + + glyphicon glyphicon-menu-up +
    • +
    +
    +
    + +
    From 076c46f3fd317110d3c3d834f3ab19d4f27cd24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 15:54:51 +0800 Subject: [PATCH 59/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/menu.form.html | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index 10be1aebe..032a9d4c5 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -10,7 +10,7 @@
    - +
    @@ -21,10 +21,13 @@
    -
    - +
    +
    - + + + +
    From 9bcf7246d7afd0c6263b8166aeabb04fd645ba0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 15:58:21 +0800 Subject: [PATCH 60/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/menu.form.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index 032a9d4c5..d45e407c1 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -24,7 +24,7 @@
    - + From c028e2c7fd57d1c93161a0c7e180cc81674ff046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 16:14:08 +0800 Subject: [PATCH 61/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Menu.php | 2 -- application/admin/view/menu.form.html | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index f8e6928b3..896363945 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -4,9 +4,7 @@ namespace app\admin\controller; use controller\BasicAdmin; use library\Data; -use library\Node; use library\Tools; -use think\Db; /** * 系统后台管理管理 diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index d45e407c1..065aa7989 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -27,7 +27,7 @@ - +
    From f3eb41e8538405db11894fe8f235714c38fbd204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 16:17:58 +0800 Subject: [PATCH 62/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/menu.form.html | 2 +- extend/controller/BasicAdmin.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index 065aa7989..b3ef7dd17 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -1,4 +1,4 @@ - +
    diff --git a/extend/controller/BasicAdmin.php b/extend/controller/BasicAdmin.php index f1f42b719..294017c24 100644 --- a/extend/controller/BasicAdmin.php +++ b/extend/controller/BasicAdmin.php @@ -2,6 +2,7 @@ namespace controller; +use library\Data; use think\Controller; use think\Db; use think\db\Query; @@ -144,7 +145,7 @@ class BasicAdmin extends Controller { $this->_callback('_form_filter', $vo); $result = Data::save($db, $vo, $pk, $where); if (false !== $this->_callback('_form_result', $result)) { - $result !== false ? $this->success('恭喜,保存成功哦!', ($pk_value === '' ? null : '')) : $this->error('保存失败,请稍候再试!'); + $result !== false ? $this->success('恭喜,保存成功哦!', '') : $this->error('保存失败,请稍候再试!'); } return $result; } From e631cd9757735c45005011ec0cd83457166d2193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 16:42:11 +0800 Subject: [PATCH 63/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Menu.php | 27 +++++++++++++++++++++++---- application/admin/view/menu.form.html | 9 ++++++++- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index 896363945..0bc2f86d6 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -5,6 +5,7 @@ namespace app\admin\controller; use controller\BasicAdmin; use library\Data; use library\Tools; +use think\Db; /** * 系统后台管理管理 @@ -52,9 +53,27 @@ class Menu extends BasicAdmin { $data = Tools::arr2table($data); } - /** - * 添加菜单 - */ + protected function _form_filter(&$vo) { + if ($this->request->isGet()) { + $_menus = Db::name($this->table)->where('status', '1')->order('sort ASC,id ASC')->select(); + $_menus[] = ['title' => '顶级菜单', 'id' => '0', 'pid' => '-1']; + $menus = Tools::arr2table($_menus); + foreach ($menus as $key => &$menu) { + if (substr_count($menu['path'], '-') > 3) { + unset($menus[$key]); + continue; + } + if (isset($vo['pid'])) { + $current_path = "-{$vo['pid']}-{$vo['id']}"; + if ($vo['pid'] !== '' && (stripos("{$menu['path']}-", "{$current_path}-") !== false || $menu['path'] === $current_path)) { + unset($menus[$key]); + } + } + } + $this->assign('menus', $menus); + } + } + public function add() { return $this->_form($this->table, 'form'); } @@ -63,7 +82,7 @@ class Menu extends BasicAdmin { * 编辑菜单 */ public function edit() { - return $this->_form($this->table, 'form'); + return $this->add(); } /** diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index b3ef7dd17..85c40ac05 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -3,7 +3,13 @@
    @@ -31,6 +37,7 @@
    + {if isset($vo['id'])}{/if}
    From 41759597f5db4f4f109409c696d0fd2a3215fa57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 16:44:24 +0800 Subject: [PATCH 64/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Menu.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index 0bc2f86d6..8bfa48679 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -74,7 +74,13 @@ class Menu extends BasicAdmin { } } + /** + * 添加菜单 + */ public function add() { + if ($this->request->isPost()) { + $this->error('系统开发中,不要动菜单哦!'); + } return $this->_form($this->table, 'form'); } From af31edd63ce25a7ac4b4b53f6b59615b78adf012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 17:06:42 +0800 Subject: [PATCH 65/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0layui=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/static/admin/plugs.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/public/static/admin/plugs.js b/public/static/admin/plugs.js index 40ec6e517..ae80aafb2 100644 --- a/public/static/admin/plugs.js +++ b/public/static/admin/plugs.js @@ -304,15 +304,22 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { return $.msg.auto(res); } layer.open({ + type: 1, + btn: false, area: "800px", content: res, - btn: false, title: title || '', success: function (dom, index) { var $container = $(dom); /* 处理样式及返回按钮事件 */ $container.find('[data-close]').off('click').on('click', function () { - layer.close(index); + if ($(this).attr('data-confirm')) { + $.msg.confirm($(this).attr('data-confirm'), function () { + layer.close(index); + }) + } else { + layer.close(index); + } }); /* 事件重载 */ $.form.reInit($container); From 391d08731e3ec2afee90e407d0a3dce62d984893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Wed, 22 Feb 2017 17:46:16 +0800 Subject: [PATCH 66/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/menu.form.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index 85c40ac05..412600e83 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -1,4 +1,4 @@ - +
    From 7c5c080af8d215d225d38cf35277f177584431db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 14:06:56 +0800 Subject: [PATCH 67/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/config.index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/admin/view/config.index.html b/application/admin/view/config.index.html index 215181dad..70f76442a 100644 --- a/application/admin/view/config.index.html +++ b/application/admin/view/config.index.html @@ -95,7 +95,7 @@
    From 93292e6f8dae44c73902f96146d0cf6b4c92de3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 14:56:34 +0800 Subject: [PATCH 68/94] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Menu.php | 4 +- application/admin/view/menu.form.html | 9 +- extend/library/Node.php | 141 +++++++------------------- public/static/admin/app.js | 1 + 4 files changed, 47 insertions(+), 108 deletions(-) diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index 8bfa48679..99afe4b80 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -4,6 +4,7 @@ namespace app\admin\controller; use controller\BasicAdmin; use library\Data; +use library\Node; use library\Tools; use think\Db; @@ -55,7 +56,7 @@ class Menu extends BasicAdmin { protected function _form_filter(&$vo) { if ($this->request->isGet()) { - $_menus = Db::name($this->table)->where('status', '1')->order('sort ASC,id ASC')->select(); + $_menus = Db::name($this->table)->where('status', '1')->order('sort desc,id desc')->select(); $_menus[] = ['title' => '顶级菜单', 'id' => '0', 'pid' => '-1']; $menus = Tools::arr2table($_menus); foreach ($menus as $key => &$menu) { @@ -70,6 +71,7 @@ class Menu extends BasicAdmin { } } } + $this->assign('nodes', Node::getNodeTree(APP_PATH)); $this->assign('menus', $menus); } } diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index 412600e83..f7e55edcb 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -2,7 +2,7 @@
    - @@ -22,7 +22,7 @@
    - +
    @@ -42,6 +42,9 @@
    diff --git a/extend/library/Node.php b/extend/library/Node.php index ec7c385ac..17753e00a 100644 --- a/extend/library/Node.php +++ b/extend/library/Node.php @@ -3,126 +3,59 @@ namespace library; /** - * 代码节点读取工具 - * - * @author shaobo - * @date 2016-10-21 + * 代码节点分析器 + * + * @author Anyon + * @date 2017/02/23 14:46 */ class Node { + /** + * 获取节点列表 + * @param string $path + * @param array $nodes + * @return array + */ + static public function getNodeTree($path, $nodes = []) { + foreach (self::getFilePaths($path) as $vo) { + if (stripos($vo, DS . 'controller' . DS) === false) { + continue; + } + $_tmp = explode(DS, $vo); + $controllerName = rtrim(array_pop($_tmp), '.php'); + array_pop($_tmp); + $moduleName = array_pop($_tmp); + $className = config('app_namespace') . "\\{$moduleName}\\controller\\{$controllerName}"; + if (!class_exists($className)) { + continue; + } + foreach (get_class_methods($className) as $actionName) { + if ($actionName[0] !== '_') { + $nodes[] = strtolower("{$moduleName}/{$controllerName}/{$actionName}"); + } + } + } + return $nodes; + } + /** * 获取所有PHP文件 * @param string $path * @param array $data + * @param string $ext * @return array */ - static public function getTree($path, $data = []) { + static public function getFilePaths($path, $data = [], $ext = 'php') { foreach (scandir($path) as $dir) { if ($dir[0] === '.') { continue; } - $tmp = realpath($path . DIRECTORY_SEPARATOR . $dir); - if ($tmp && (is_dir($tmp) || pathinfo($tmp, PATHINFO_EXTENSION) === 'php')) { - is_dir($tmp) ? $data = array_merge($data, self::getTree($tmp)) : $data[] = $tmp; + $tmp = realpath($path . DS . $dir); + if ($tmp && (is_dir($tmp) || pathinfo($tmp, PATHINFO_EXTENSION) === $ext)) { + is_dir($tmp) ? $data = array_merge($data, self::getFilePaths($tmp)) : $data[] = $tmp; } } return $data; } - /** - * 处理类继承关系 - * @param array $data - * @param string $class - * @param array $params - */ - static public function setSubClass(&$data, $class, &$params) { - foreach ($data as $key => &$value) { - if (isset($value['extends']) && $value['extends'] === $class) { - $value['attribute'] = array_merge($params['attribute'], $value['attribute']); - $value['method'] = array_merge($params['method'], $value['method']); - array_unique($value['method']); - array_unique($value['attribute']); - self::setSubClass($data, $key, $value); - } - } - } - - /** - * 获取节点数据 - * @return array - */ - static public function getNodeArrayTree() { - $list = self::getTree(ROOT_PATH); - $data = []; - $dirspace = []; - foreach ($list as $file) { - $content = file_get_contents($file); - // 解析空间及名称 - preg_match("|namespace\s*(.*?)\s*;.*?class\s*(\w+)\s*|is", $content, $matches); - if (count($matches) > 1) { - $name = "{$matches[1]}\\{$matches[2]}"; - $dir = dirname($file); - $class = ['method' => [], 'attribute' => [], 'namespace' => $matches[1], 'classname' => $matches[2]]; - $dirspace[$dir] = $matches[1]; - $class['dir'] = $dir; - // 解析类方法 - preg_match_all("|public\s*function\s*(\w+)\s*\(|is", $content, $matches); - if (!empty($matches[1])) { - foreach ($matches[1] as $v) { - !in_array($v, ['_initialize', '__construct']) && $class['method'][] = $v; - } - } - // 解析简单的类属性 - preg_match_all("|public\s*\\$(\w+)\s*=\s*(\w+)\s*;|is", $content, $matches); - if (!empty($matches[1]) && !empty($matches[2])) { - foreach ($matches[1] as $k => $v) { - $class['attribute'][$v] = $matches[2][$k]; - } - } - // 类继承分析 - preg_match("|extends\s*(\w+)\s*\{|is", $content, $matches); - if (!empty($matches[1])) { - // 直接继承 - if ($matches[1][0] === '\\') { - $class['extends'] = $matches[1]; - break; - } - // use 继承 - if (preg_match_all("|use\s*([\w\\\]*)\s*\;|is", $content, $use) && !empty($use[1])) { - foreach ($use[1] as $c) { - $attr = explode('\\', $c); - if ($matches[1] === end($attr)) { - $class['extends'] = $c; - break; - } - } - } - // 同空间继续,需要修复 - empty($class['extends']) && ($class['extends'] = '?' . $matches[1]); - } - $data[$name] = $class; - } - } - // 命名空间修复 - foreach ($data as &$vo) { - if (!empty($vo['extends']) && $vo['extends'][0] === '?' && isset($dirspace[$vo['dir']])) { - $vo['extends'] = $dirspace[$vo['dir']] . '\\' . trim($vo['extends'], '?'); - } - } - // 类继续方法参数合并 - foreach ($data as $key => $value) { - empty($value['extends']) && self::setSubClass($data, $key, $value); - } - // 过滤掉非控制器的域名 - foreach ($data as $k => &$v) { - if (!preg_match('/app.*?controller/', $k)) { - unset($data[$k]); - continue; - } - //获取模块名 - $v['module'] = substr(str_replace("app\\", "", $k), 0, strpos(str_replace("app\\", "", $k), "\\")); - } - return $data; - } - } diff --git a/public/static/admin/app.js b/public/static/admin/app.js index 28c2b7de3..109a78620 100644 --- a/public/static/admin/app.js +++ b/public/static/admin/app.js @@ -17,6 +17,7 @@ require.config({ 'jquery.icheck': ['//cdn.bootcss.com/iCheck/1.0.2/icheck.min'], 'jquery.cookies': ['//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie', '../plugs/jquery/jquery.cookie'], 'bootstrap': ['//cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min', '../plugs/bootstrap/js/bootstrap.min'], + 'bootstrap.typeahead': ['//cdn.bootcss.com/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min'], 'bootstrap.multiselect': ['//cdn.bootcss.com/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.min', '../plugs/multiselect/bootstrap-multiselect'], // 自定义插件 'admin.plugs': ['plugs'], From 480a3e377f6023785955436a4257dc9a10c5f50c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 15:00:27 +0800 Subject: [PATCH 69/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0isLogin=E4=B8=BApro?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Login.php | 2 +- extend/controller/BasicAdmin.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application/admin/controller/Login.php b/application/admin/controller/Login.php index 9b411eaa7..386061232 100644 --- a/application/admin/controller/Login.php +++ b/application/admin/controller/Login.php @@ -18,7 +18,7 @@ class Login extends BasicAdmin { * 控制器基础方法 */ public function _initialize() { - if ($this->isLogin() && $this->request->action() !== 'out') { + if ($this->_isLogin() && $this->request->action() !== 'out') { $this->redirect('@admin'); } } diff --git a/extend/controller/BasicAdmin.php b/extend/controller/BasicAdmin.php index 294017c24..c26f93fe1 100644 --- a/extend/controller/BasicAdmin.php +++ b/extend/controller/BasicAdmin.php @@ -46,7 +46,7 @@ class BasicAdmin extends Controller { public function _initialize() { # 用户登录状态检查 if ($this->checkLogin || $this->checkAuth) { - if (!$this->isLogin()) { + if (!$this->_isLogin()) { $this->redirect('@admin/login'); } } @@ -68,7 +68,7 @@ class BasicAdmin extends Controller { * 判断用户是否登录 * @return bool */ - public function isLogin() { + protected function _isLogin() { $user = session('user'); if (empty($user) || empty($user['id'])) { return false; From c4b8e24d56e38ae94645afa7ce7ce562e7410e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 15:06:11 +0800 Subject: [PATCH 70/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0isLogin=E4=B8=BApro?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Menu.php | 49 ++++++++++++--------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index 99afe4b80..f2a66f69a 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -23,17 +23,6 @@ class Menu extends BasicAdmin { */ protected $table = 'SystemMenu'; - /** - * 定义菜单链接打开方式 - * @var array - */ - protected $targetList = [ - '_self' => '本窗口打开', - '_blank' => '新窗口打开', - '_parent' => '父窗口打开', - '_top' => '顶级窗口打开', - ]; - /** * 菜单列表 */ @@ -54,6 +43,27 @@ class Menu extends BasicAdmin { $data = Tools::arr2table($data); } + /** + * 添加菜单 + */ + public function add() { + if ($this->request->isPost()) { + $this->error('系统开发中,不要动菜单哦!'); + } + return $this->_form($this->table, 'form'); + } + + /** + * 编辑菜单 + */ + public function edit() { + return $this->add(); + } + + /** + * 表单数据前缀方法 + * @param array $vo + */ protected function _form_filter(&$vo) { if ($this->request->isGet()) { $_menus = Db::name($this->table)->where('status', '1')->order('sort desc,id desc')->select(); @@ -76,23 +86,6 @@ class Menu extends BasicAdmin { } } - /** - * 添加菜单 - */ - public function add() { - if ($this->request->isPost()) { - $this->error('系统开发中,不要动菜单哦!'); - } - return $this->_form($this->table, 'form'); - } - - /** - * 编辑菜单 - */ - public function edit() { - return $this->add(); - } - /** * 删除菜单 */ From fdf08b92e841b36bbca6047d4b5a7bb672da6fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 16:19:18 +0800 Subject: [PATCH 71/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Node.php | 60 ++++++++++++++++++++++++++ application/admin/view/node.index.html | 60 ++++++++++++++++++++++++++ extend/library/Tools.php | 8 ++-- 3 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 application/admin/controller/Node.php create mode 100644 application/admin/view/node.index.html diff --git a/application/admin/controller/Node.php b/application/admin/controller/Node.php new file mode 100644 index 000000000..11879d326 --- /dev/null +++ b/application/admin/controller/Node.php @@ -0,0 +1,60 @@ + + * @date 2017/02/15 18:13 + */ +class Node extends BasicAdmin { + + protected $table = 'SystemNode'; + + public function index() { + $this->title = '系统节点管理'; + parent::_list($this->table); + } + + protected function _index_data_filter($data) { + $nodes = []; + $alias = []; + foreach ($data as $vo) { + $alias["{$vo['node']}"] = $vo; + } + foreach (ModuleNode::getNodeTree(APP_PATH) as $thr) { + $tmp = explode('/', $thr); + $one = $tmp[0]; + $two = "{$tmp[0]}/{$tmp[1]}"; + $nodes[$one] = array_merge(isset($alias[$one]) ? $alias[$one] : ['node' => $one, 'title' => $thr, 'is_menu' => 0, 'is_auth' => 0], ['pnode' => '']); + $nodes[$two] = array_merge(isset($alias[$two]) ? $alias[$two] : ['node' => $two, 'title' => $thr, 'is_menu' => 0, 'is_auth' => 0], ['pnode' => $one]); + $nodes[$thr] = array_merge(isset($alias[$thr]) ? $alias[$thr] : ['node' => $thr, 'title' => $thr, 'is_menu' => 1, 'is_auth' => 1], ['pnode' => $two]); + } + $this->assign('nodes', Tools::arr2table($nodes, 'node', 'pnode')); + } + + public function save() { + if ($this->request->isPost()) { + $post = $this->request->post(); + foreach ($post as $key => $vo) { + if (stripos($key, 'title_') !== 0) { + continue; + } + $node = substr($key, strlen('title_')); + $data = ['node' => $node, 'title' => $vo, 'is_menu' => intval(!empty($post["menu_{$node}"])), 'is_auth' => intval(!empty($post["auth_{$node}"]))]; + Data::save($this->table, $data, 'node'); + } + $this->success('参数保存成功!', ''); + } else { + $this->error('访问异常,请重新进入...'); + } + } + +} diff --git a/application/admin/view/node.index.html b/application/admin/view/node.index.html new file mode 100644 index 000000000..15b0ffa35 --- /dev/null +++ b/application/admin/view/node.index.html @@ -0,0 +1,60 @@ +{extend name='extra@admin/content' /} + +{block name="content"} + +
    + +
    + +
    + + + + + + + + + + + + {foreach $nodes as $key=>$vo} + + + + + + + {/foreach} + +
    节点代码节点名称 权限控制 是否菜单
    + {$vo.spl}{$vo.node} + + {if substr_count($vo['node'],'/')==2} + {notempty name='vo.is_auth'} + + {else /} + + {/notempty} + {/if} + + {if substr_count($vo['node'],'/')==2} + {notempty name='vo.is_menu'} + + {else/} + + {/notempty} + {/if} +
    + +
    +{/block} \ No newline at end of file diff --git a/extend/library/Tools.php b/extend/library/Tools.php index 91663a4ce..5b7d79e9f 100644 --- a/extend/library/Tools.php +++ b/extend/library/Tools.php @@ -44,10 +44,10 @@ class Tools { * @return array */ static public function arr2table($list, $id = 'id', $pid = 'pid', $path = 'path', $ppath = '') { - $_array_tree = self::arr2tree($list); + $_array_tree = self::arr2tree($list, $id, $pid); $tree = array(); foreach ($_array_tree as $_tree) { - $_tree[$path] = $ppath . '-' . $_tree['id']; + $_tree[$path] = $ppath . '-' . $_tree[$id]; $_tree['spl'] = str_repeat("   ├ ", substr_count($ppath, '-')); if (!isset($_tree['sub'])) { $_tree['sub'] = array(); @@ -57,7 +57,7 @@ class Tools { $tree[] = $_tree; if (!empty($sub)) { $sub_array = self::arr2table($sub, $id, $pid, $path, $_tree[$path]); - $tree = array_merge($tree, (Array)$sub_array); + $tree = array_merge($tree, (Array) $sub_array); } } return $tree; @@ -103,7 +103,7 @@ class Tools { $tree[] = $_tree; if (!empty($sub)) { $sub_array = self::node2table($sub, $node, $pnode, $path, $_tree[$path . "_node"]); - $tree = array_merge($tree, (Array)$sub_array); + $tree = array_merge($tree, (Array) $sub_array); } } return $tree; From 2f9f5261f1ce9b23bd843c02c82e3701578159f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 16:27:54 +0800 Subject: [PATCH 72/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Menu.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index f2a66f69a..c84a89ce0 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -66,6 +66,7 @@ class Menu extends BasicAdmin { */ protected function _form_filter(&$vo) { if ($this->request->isGet()) { + // 上级菜单处理 $_menus = Db::name($this->table)->where('status', '1')->order('sort desc,id desc')->select(); $_menus[] = ['title' => '顶级菜单', 'id' => '0', 'pid' => '-1']; $menus = Tools::arr2table($_menus); @@ -81,7 +82,15 @@ class Menu extends BasicAdmin { } } } - $this->assign('nodes', Node::getNodeTree(APP_PATH)); + // 读取系统功能节点 + $nodes = Node::getNodeTree(APP_PATH); + $denyAll = Db::name('SystemNode')->where('is_menu', '0')->column('node'); + foreach ($nodes as $key => $vo) { + if (in_array($vo, $denyAll)) { + unset($nodes[$key]); + } + } + $this->assign('nodes', array_values($nodes)); $this->assign('menus', $menus); } } From 017d5fa2677d5661f28a0566452b71642fe3e20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 16:28:34 +0800 Subject: [PATCH 73/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Node.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/admin/controller/Node.php b/application/admin/controller/Node.php index 11879d326..c3cb55eb2 100644 --- a/application/admin/controller/Node.php +++ b/application/admin/controller/Node.php @@ -35,7 +35,7 @@ class Node extends BasicAdmin { $two = "{$tmp[0]}/{$tmp[1]}"; $nodes[$one] = array_merge(isset($alias[$one]) ? $alias[$one] : ['node' => $one, 'title' => $thr, 'is_menu' => 0, 'is_auth' => 0], ['pnode' => '']); $nodes[$two] = array_merge(isset($alias[$two]) ? $alias[$two] : ['node' => $two, 'title' => $thr, 'is_menu' => 0, 'is_auth' => 0], ['pnode' => $one]); - $nodes[$thr] = array_merge(isset($alias[$thr]) ? $alias[$thr] : ['node' => $thr, 'title' => $thr, 'is_menu' => 1, 'is_auth' => 1], ['pnode' => $two]); + $nodes[$thr] = array_merge(isset($alias[$thr]) ? $alias[$thr] : ['node' => $thr, 'title' => $thr, 'is_menu' => 1, 'is_auth' => 0], ['pnode' => $two]); } $this->assign('nodes', Tools::arr2table($nodes, 'node', 'pnode')); } From 5986b7964eebd12a483c3dc4739c54e7c1be19d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 16:40:21 +0800 Subject: [PATCH 74/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Node.php | 2 +- application/admin/view/node.index.html | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/application/admin/controller/Node.php b/application/admin/controller/Node.php index c3cb55eb2..435dc2790 100644 --- a/application/admin/controller/Node.php +++ b/application/admin/controller/Node.php @@ -20,7 +20,7 @@ class Node extends BasicAdmin { public function index() { $this->title = '系统节点管理'; - parent::_list($this->table); + parent::_list($this->table, FALSE); } protected function _index_data_filter($data) { diff --git a/application/admin/view/node.index.html b/application/admin/view/node.index.html index 15b0ffa35..cc7592190 100644 --- a/application/admin/view/node.index.html +++ b/application/admin/view/node.index.html @@ -14,7 +14,7 @@
    节点代码 节点名称 权限控制 是否菜单 可设为菜单
    {$vo.spl}{$vo.node} - {if substr_count($vo['node'],'/')==2} - {notempty name='vo.is_auth'} - - {else /} - - {/notempty} + {/if} @@ -40,6 +43,7 @@ {else/} {/notempty} + 可设为菜单 {/if}
    + + + + + + + + + + + {foreach $list as $key=>$vo} + + + + + + + + {/foreach} + +
    + + + + 权限名称状态操作
    + + + + {$vo.name} + {if $vo.status eq 0} + 已禁用 + {elseif $vo.status eq 1} + 使用中 + {/if} +
    + +{/block} \ No newline at end of file From 5fa7a4b5d4150af74861b636bdaffd312796c900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 17:12:24 +0800 Subject: [PATCH 78/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/auth.index.html | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/application/admin/view/auth.index.html b/application/admin/view/auth.index.html index 03029df7d..380c7bb61 100644 --- a/application/admin/view/auth.index.html +++ b/application/admin/view/auth.index.html @@ -19,6 +19,7 @@ 权限名称 + 权限描述 状态 操作 @@ -33,6 +34,7 @@ {$vo.name} + {$vo.desc|default="没有写描述哦!"} {if $vo.status eq 0} 已禁用 @@ -40,7 +42,23 @@ 使用中 {/if} - + + {if auth("$classuri/edit")} + | + 编辑 + {/if} + {if $vo.status eq 1 and auth("$classuri/forbid")} + | + 禁用 + {elseif auth("$classuri/resume")} + | + 启用 + {/if} + {if auth("$classuri/del")} + | + 删除 + {/if} + {/foreach} From 3f22e2469365ba0843d78b79d64fb05b4c02c77a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 17:54:29 +0800 Subject: [PATCH 79/94] =?UTF-8?q?=E6=A0=87=E5=87=86=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Auth.php | 12 ++++++++++++ application/admin/controller/Config.php | 12 ++++++++++++ application/admin/controller/Index.php | 12 ++++++++++++ application/admin/controller/Login.php | 12 ++++++++++++ application/admin/controller/Menu.php | 12 ++++++++++++ application/admin/controller/Node.php | 12 ++++++++++++ application/admin/controller/Plugs.php | 12 ++++++++++++ application/admin/controller/Role.php | 12 ++++++++++++ application/admin/controller/User.php | 12 ++++++++++++ application/admin/model/User.php | 12 ++++++++++++ application/common.php | 12 ++++++++++++ application/config.php | 12 ++++++++++++ application/database.php | 10 ++++++---- application/index/controller/Index.php | 26 ++++++++++++++++++------- application/route.php | 12 ++++++++++++ application/tags.php | 12 ++++++++++++ extend/controller/BasicAdmin.php | 12 ++++++++++++ extend/controller/BasicWechat.php | 19 +++++++++++++++--- extend/library/Csv.php | 12 ++++++++++++ extend/library/Data.php | 12 ++++++++++++ extend/library/Emoji.php | 12 ++++++++++++ extend/library/Express.php | 12 ++++++++++++ extend/library/File.php | 12 ++++++++++++ extend/library/Http.php | 12 ++++++++++++ extend/library/Ip2Region.php | 12 ++++++++++++ extend/library/News.php | 12 ++++++++++++ extend/library/Node.php | 12 ++++++++++++ extend/library/QRcode.php | 12 ++++++++++++ extend/library/Sms.php | 12 ++++++++++++ extend/library/Tools.php | 12 ++++++++++++ extend/library/resource/mines.php | 11 +++++++++++ extend/service/ExpressService.php | 12 ++++++++++++ extend/service/FansService.php | 18 ++++++++++++++--- extend/service/PayService.php | 14 +++++++++++-- extend/service/SmsService.php | 12 ++++++++++++ public/index.php | 16 +++++++++++++-- public/pay.html | 16 --------------- public/router.php | 12 +++++++----- 38 files changed, 448 insertions(+), 42 deletions(-) delete mode 100644 public/pay.html diff --git a/application/admin/controller/Auth.php b/application/admin/controller/Auth.php index 6b3782a61..d2d9dcb56 100644 --- a/application/admin/controller/Auth.php +++ b/application/admin/controller/Auth.php @@ -1,5 +1,17 @@ +// | 开源协议 ( https://mit-license.org ) +// +---------------------------------------------------------------------- +// | github开源项目:https://github.com/zoujingli/Think.Admin // +---------------------------------------------------------------------- return [ diff --git a/application/index/controller/Index.php b/application/index/controller/Index.php index 91021478d..e2abf89db 100644 --- a/application/index/controller/Index.php +++ b/application/index/controller/Index.php @@ -1,4 +1,16 @@ redirect('@admin'); - $version = Db::query('select version() as ver'); - $version = array_pop($version); - $this->assign('mysql_ver', $version['ver']); - return view(); - } +public function index() { +$this->redirect('@admin'); +$version = Db::query('select version() as ver'); +$version = array_pop($version); +$this->assign('mysql_ver', $version['ver']); +return view(); +} } diff --git a/application/route.php b/application/route.php index 0b67a5fe4..89b9a4fb5 100644 --- a/application/route.php +++ b/application/route.php @@ -1,3 +1,15 @@ [], diff --git a/extend/controller/BasicAdmin.php b/extend/controller/BasicAdmin.php index c26f93fe1..4417cad50 100644 --- a/extend/controller/BasicAdmin.php +++ b/extend/controller/BasicAdmin.php @@ -1,5 +1,17 @@ request->baseUrl(), '', false, true) . '?' . http_build_query($params); } - $wechat = &load_wechat('Oauth'); + $wechat = &load_wechat('Oauth'); # 微信网页授权处理 if (!$this->request->get('code', false)) { exit(redirect($wechat->getOauthRedirect($wxoauth_url, 'webOauth', 'snsapi_base'))->send()); @@ -108,4 +120,5 @@ class BasicWechat extends Controller { !!$redirect_url && exit(redirect($redirect_url)->send()); return $this->openid; } -} \ No newline at end of file + +} diff --git a/extend/library/Csv.php b/extend/library/Csv.php index db9f84dd7..e0fbd5851 100644 --- a/extend/library/Csv.php +++ b/extend/library/Csv.php @@ -1,5 +1,17 @@ array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'), 'cpt' => 'application/mac-compactpro', diff --git a/extend/service/ExpressService.php b/extend/service/ExpressService.php index cbe42af53..330f73879 100644 --- a/extend/service/ExpressService.php +++ b/extend/service/ExpressService.php @@ -1,5 +1,17 @@ getDatacube('user', 'cumulate', date('Y-m-d', strtotime("-{$day} day")), date('Y-m-d', strtotime('-1 day'))); + $data['cumulate'] = (array) $extends->getDatacube('user', 'cumulate', date('Y-m-d', strtotime("-{$day} day")), date('Y-m-d', strtotime('-1 day'))); // 统计增量数 - $data['summary'] = (array)$extends->getDatacube('user', 'summary', date('Y-m-d', strtotime("-{$day} day")), date('Y-m-d', strtotime('-1 day'))); + $data['summary'] = (array) $extends->getDatacube('user', 'summary', date('Y-m-d', strtotime("-{$day} day")), date('Y-m-d', strtotime('-1 day'))); // 统计消息数 - $data['upstreammsg'] = (array)$extends->getDatacube('upstreammsg', 'summary', date('Y-m-d', strtotime("-{$day} day")), date('Y-m-d', strtotime('-1 day'))); + $data['upstreammsg'] = (array) $extends->getDatacube('upstreammsg', 'summary', date('Y-m-d', strtotime("-{$day} day")), date('Y-m-d', strtotime('-1 day'))); $temp = array(); for ($i = 1; $i <= $day; $i++) { $temp[date('Y-m-d', strtotime("-{$i} day"))] = []; diff --git a/extend/service/PayService.php b/extend/service/PayService.php index cb97c0a31..d1220ab74 100644 --- a/extend/service/PayService.php +++ b/extend/service/PayService.php @@ -1,12 +1,23 @@ - - - - 支付测试 - - -
    - - - - -
    - - \ No newline at end of file diff --git a/public/router.php b/public/router.php index 6ba1fabf9..ee2874588 100644 --- a/public/router.php +++ b/public/router.php @@ -1,14 +1,16 @@ +// | 开源协议 ( https://mit-license.org ) +// +---------------------------------------------------------------------- +// | github开源项目:https://github.com/zoujingli/Think.Admin // +---------------------------------------------------------------------- -// $Id$ if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["REQUEST_URI"])) { return false; From 512b346daa1444fc0b27d3f265944490af1dbce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 23 Feb 2017 18:06:46 +0800 Subject: [PATCH 80/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Config.php | 21 +++++++++++++++++++++ application/admin/controller/Node.php | 14 ++++++++++++++ application/admin/model/User.php | 2 +- application/admin/view/node.index.html | 4 ++-- application/extra/queue.php | 10 ++++++---- 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/application/admin/controller/Config.php b/application/admin/controller/Config.php index 15e6b8fc7..e291e5557 100644 --- a/application/admin/controller/Config.php +++ b/application/admin/controller/Config.php @@ -26,9 +26,21 @@ use library\Data; */ class Config extends BasicAdmin { + /** + * 当前默认数据模型 + * @var string + */ protected $table = 'SystemConfig'; + + /** + * 当前页面标题 + * @var string + */ protected $title = '网站参数配置'; + /** + * 显示系统常规配置 + */ public function index() { if (!$this->request->isPost()) { parent::_list($this->table); @@ -42,16 +54,25 @@ class Config extends BasicAdmin { } } + /** + * 文件存储配置 + */ public function file() { $this->title = '文件存储配置'; $this->index(); } + /** + * 邮件账号配置 + */ public function mail() { $this->title = '邮箱账号配置'; $this->index(); } + /** + * 短信通道账号配置 + */ public function sms() { $this->title = '短信账号配置'; $this->index(); diff --git a/application/admin/controller/Node.php b/application/admin/controller/Node.php index 3b3fd6030..af2700aa5 100644 --- a/application/admin/controller/Node.php +++ b/application/admin/controller/Node.php @@ -28,8 +28,15 @@ use library\Tools; */ class Node extends BasicAdmin { + /** + * 指定当前默认模型 + * @var string + */ protected $table = 'SystemNode'; + /** + * 显示节点列表 + */ public function index() { $this->title = '系统节点管理'; $alert = [ @@ -41,6 +48,10 @@ class Node extends BasicAdmin { parent::_list($this->table, FALSE); } + /** + * 列表数据处理 + * @param $data + */ protected function _index_data_filter($data) { $nodes = []; $alias = []; @@ -58,6 +69,9 @@ class Node extends BasicAdmin { $this->assign('nodes', Tools::arr2table($nodes, 'node', 'pnode')); } + /** + * 保存节点变更 + */ public function save() { if ($this->request->isPost()) { $post = $this->request->post(); diff --git a/application/admin/model/User.php b/application/admin/model/User.php index a5f828c07..7fba80f9c 100644 --- a/application/admin/model/User.php +++ b/application/admin/model/User.php @@ -17,5 +17,5 @@ namespace app\admin\model; use think\Model; class User extends Model { - + } diff --git a/application/admin/view/node.index.html b/application/admin/view/node.index.html index cc7592190..1e7c4e6b4 100644 --- a/application/admin/view/node.index.html +++ b/application/admin/view/node.index.html @@ -11,7 +11,7 @@ - + @@ -20,7 +20,7 @@ {foreach $nodes as $key=>$vo} - diff --git a/application/extra/queue.php b/application/extra/queue.php index 57ecec63b..610a24cbc 100644 --- a/application/extra/queue.php +++ b/application/extra/queue.php @@ -1,13 +1,15 @@ +// | 开源协议 ( https://mit-license.org ) +// +---------------------------------------------------------------------- +// | github开源项目:https://github.com/zoujingli/Think.Admin // +---------------------------------------------------------------------- return [ From 5a8887832c269b10aa36c43ef51768b3d2d91643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Fri, 24 Feb 2017 11:11:12 +0800 Subject: [PATCH 81/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/static/admin/app.js | 22 +++++++++++++++++++-- public/static/admin/listen.js | 36 +++++++++++++++++++++++++++++------ public/static/admin/plugs.js | 24 ++++++++++++++++------- 3 files changed, 67 insertions(+), 15 deletions(-) diff --git a/public/static/admin/app.js b/public/static/admin/app.js index 109a78620..bb52eedac 100644 --- a/public/static/admin/app.js +++ b/public/static/admin/app.js @@ -1,6 +1,22 @@ -/* global require, layer, layui */ -var a = document.scripts, c = a[a.length - 1].src, baseUrl = c.substring(0, c.lastIndexOf("/") + 1); +// +---------------------------------------------------------------------- +// | Think.Admin +// +---------------------------------------------------------------------- +// | 版权所有 2016~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ] +// +---------------------------------------------------------------------- +// | 官方网站: http://think.ctolog.com +// +---------------------------------------------------------------------- +// | 开源协议 ( https://mit-license.org ) +// +---------------------------------------------------------------------- +// | github开源项目:https://github.com/zoujingli/Think.Admin +// +---------------------------------------------------------------------- +// 当前资源URL目录 +var baseUrl = (function () { + var scripts = document.scripts, src = scripts[scripts.length - 1].src; + return src.substring(0, src.lastIndexOf("/") + 1); +})(); + +// RequireJs 配置参数 require.config({ baseUrl: baseUrl, waitSeconds: 0, @@ -40,6 +56,7 @@ require.config({ 'admin.listen': {deps: ['jquery', 'jquery.cookies', 'admin.plugs']}, }, deps: ['css!//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css'], + // 开启debug模式,不缓存资源 urlArgs: "t=" + (new Date()).getTime() }); @@ -47,6 +64,7 @@ window.WEB_SOCKET_SWF_LOCATION = "//cdn.bootcss.com/web-socket-js/1.0.0/WebSocke window.UEDITOR_HOME_URL = (window.ROOT_URL ? window.ROOT_URL + '/static/' : baseUrl) + '../plugs/ueditor/'; window.LAYDATE_PATH = baseUrl + '../plugs/layui/laydate/'; +// UI框架初始化 require(['pace', 'jquery', 'layui', 'laydate', 'bootstrap', 'template', 'ueditor', 'jquery.cookies'], function () { layui.config({dir: baseUrl + '../plugs/layui/'}); layui.use(['layer', 'form', 'element'], function () { diff --git a/public/static/admin/listen.js b/public/static/admin/listen.js index 8d74260a0..bf565cbd6 100644 --- a/public/static/admin/listen.js +++ b/public/static/admin/listen.js @@ -1,3 +1,15 @@ +// +---------------------------------------------------------------------- +// | Think.Admin +// +---------------------------------------------------------------------- +// | 版权所有 2016~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ] +// +---------------------------------------------------------------------- +// | 官方网站: http://think.ctolog.com +// +---------------------------------------------------------------------- +// | 开源协议 ( https://mit-license.org ) +// +---------------------------------------------------------------------- +// | github开源项目:https://github.com/zoujingli/Think.Admin +// +---------------------------------------------------------------------- + define(['jquery', 'admin.plugs'], function () { /*! 定义当前body对象 */ @@ -7,9 +19,11 @@ define(['jquery', 'admin.plugs'], function () { this.$body.on('click', '[data-load]', function () { var url = $(this).attr('data-load'); var tips = $(this).attr('data-tips'); + function _goLoad() { $.form.load(url, {}, 'GET', null, true, tips); } + if ($(this).attr('data-confirm')) { return $.msg.confirm($(this).attr('data-confirm'), _goLoad); } @@ -43,11 +57,11 @@ define(['jquery', 'admin.plugs'], function () { /*! 注册 data-update 事件行为 */ this.$body.on('click', '[data-update]', function () { var id = $(this).attr('data-update') || (function () { - var data = []; - return $($(this).attr('data-list-target') || 'input.list-check-box').map(function () { - (this.checked) && data.push(this.value); - }), data.join(','); - }).call(this); + var data = []; + return $($(this).attr('data-list-target') || 'input.list-check-box').map(function () { + (this.checked) && data.push(this.value); + }), data.join(','); + }).call(this); if (id.length < 1) { return $.msg.tips('请选择需要操作的数据!'); } @@ -125,7 +139,16 @@ define(['jquery', 'admin.plugs'], function () { $container.find('img').on('click', function () { $iframe.attr('src', src); }); - var index = layer.open({type: 1, scrollbar: false, area: ['320px', '600px'], title: false, closeBtn: 1, skin: 'layui-layer-nobg', shadeClose: true, content: $container.removeClass('hide'), end: function () { + var index = layer.open({ + type: 1, + scrollbar: false, + area: ['320px', '600px'], + title: false, + closeBtn: 1, + skin: 'layui-layer-nobg', + shadeClose: true, + content: $container.removeClass('hide'), + end: function () { $container.remove(); } }); @@ -160,6 +183,7 @@ define(['jquery', 'admin.plugs'], function () { $("[data-menu-box]").not($leftmenu).addClass('hide'); $openNode ? $openNode.trigger('click') : $leftmenu.find('[data-open]:first').trigger('click'); } + var $menutarget = $('[data-menu-target]').on('click', function () { $menutarget.not($(this).addClass('active')).removeClass('active'); showLeftMenu($(this).attr('data-menu-target')); diff --git a/public/static/admin/plugs.js b/public/static/admin/plugs.js index ae80aafb2..f543b8e28 100644 --- a/public/static/admin/plugs.js +++ b/public/static/admin/plugs.js @@ -1,4 +1,14 @@ -/* global layer, Pace */ +// +---------------------------------------------------------------------- +// | Think.Admin +// +---------------------------------------------------------------------- +// | 版权所有 2016~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ] +// +---------------------------------------------------------------------- +// | 官方网站: http://think.ctolog.com +// +---------------------------------------------------------------------- +// | 开源协议 ( https://mit-license.org ) +// +---------------------------------------------------------------------- +// | github开源项目:https://github.com/zoujingli/Think.Admin +// +---------------------------------------------------------------------- define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { @@ -150,8 +160,8 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { msg.prototype.loading = function (msg, callback) { this.close(); return this.index = msg - ? layer.msg(msg, {icon: 16, scrollbar: false, shade: this.shade, time: 0, end: callback}) - : layer.load(2, {time: 0, scrollbar: false, shade: this.shade, end: callback}); + ? layer.msg(msg, {icon: 16, scrollbar: false, shade: this.shade, time: 0, end: callback}) + : layer.load(2, {time: 0, scrollbar: false, shade: this.shade, end: callback}); }; /** @@ -720,10 +730,10 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { var callback = $(this).attr('data-callback'); $(this).attr('data-listen', "true").validate(function (data) { $.form.load(this.getAttribute('action') || window.location.href, data, - this.getAttribute('method') || 'POST', - window[callback || '_default_callback'] || undefined, true, - this.getAttribute('data-tips') || undefined, - this.getAttribute('data-time') || undefined); + this.getAttribute('method') || 'POST', + window[callback || '_default_callback'] || undefined, true, + this.getAttribute('data-tips') || undefined, + this.getAttribute('data-time') || undefined); }); }); }; From 9825efee7cfd74f2387fdc726ae652b07bb21df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Fri, 24 Feb 2017 11:22:03 +0800 Subject: [PATCH 82/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Auth.php | 62 ++++++++++++++++++++++++++ application/admin/view/auth.index.html | 4 ++ 2 files changed, 66 insertions(+) diff --git a/application/admin/controller/Auth.php b/application/admin/controller/Auth.php index d2d9dcb56..a8f3492c7 100644 --- a/application/admin/controller/Auth.php +++ b/application/admin/controller/Auth.php @@ -15,6 +15,7 @@ namespace app\admin\controller; use controller\BasicAdmin; +use library\Data; /** * 系统权限管理控制器 @@ -25,11 +26,72 @@ use controller\BasicAdmin; */ class Auth extends BasicAdmin { + /** + * 默认数据模型 + * @var string + */ protected $table = 'SystemAuth'; + /** + * 权限列表 + */ public function index() { $this->title = '系统权限管理'; parent::_list($this->table); } + /** + * 权限授权 + */ + public function apply() { + return $this->_form($this->table, 'apply'); + } + + /** + * 权限添加 + */ + public function add() { + return $this->_form($this->table, 'form'); + } + + /** + * 权限编辑 + */ + public function edit() { + return $this->add(); + } + + /** + * 权限禁用 + */ + public function forbid() { + if (Data::update($this->table)) { + $this->success("权限禁用成功!", ''); + } else { + $this->error("权限禁用失败,请稍候再试!"); + } + } + + /** + * 权限恢复 + */ + public function resume() { + if (Data::update($this->table)) { + $this->success("权限启用成功!", ''); + } else { + $this->error("权限启用失败,请稍候再试!"); + } + } + + /** + * 权限删除 + */ + public function del() { + if (Data::update($this->table)) { + $this->success("权限删除成功!", ''); + } else { + $this->error("权限删除失败,请稍候再试!"); + } + } + } diff --git a/application/admin/view/auth.index.html b/application/admin/view/auth.index.html index 380c7bb61..82aebe9f6 100644 --- a/application/admin/view/auth.index.html +++ b/application/admin/view/auth.index.html @@ -47,6 +47,10 @@ | 编辑 {/if} + {if auth("$classuri/apply")} + | + 授权 + {/if} {if $vo.status eq 1 and auth("$classuri/forbid")} | 禁用 From d7712d15107c8ca555c12f82ab62c25980f4ac3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Fri, 24 Feb 2017 12:04:09 +0800 Subject: [PATCH 83/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Auth.php | 1 + application/admin/view/auth.index.html | 3 +- extend/controller/BasicAdmin.php | 8 +- public/static/admin/plugs.js | 82 +++++++++++++-------- public/static/theme/default/css/console.css | 5 -- 5 files changed, 63 insertions(+), 36 deletions(-) diff --git a/application/admin/controller/Auth.php b/application/admin/controller/Auth.php index a8f3492c7..5126aa054 100644 --- a/application/admin/controller/Auth.php +++ b/application/admin/controller/Auth.php @@ -16,6 +16,7 @@ namespace app\admin\controller; use controller\BasicAdmin; use library\Data; +use think\Db; /** * 系统权限管理控制器 diff --git a/application/admin/view/auth.index.html b/application/admin/view/auth.index.html index 82aebe9f6..ef9a84bf3 100644 --- a/application/admin/view/auth.index.html +++ b/application/admin/view/auth.index.html @@ -33,7 +33,7 @@ - +
    节点代码节点代码 节点名称 权限控制 可设为菜单
    + {$vo.spl}{$vo.node} {$vo.name}{$vo.title} {$vo.desc|default="没有写描述哦!"} {if $vo.status eq 0} @@ -67,5 +67,6 @@ {/foreach}
    + {if isset($page)}

    {$page}

    {/if} {/block} \ No newline at end of file diff --git a/extend/controller/BasicAdmin.php b/extend/controller/BasicAdmin.php index 4417cad50..bfe736626 100644 --- a/extend/controller/BasicAdmin.php +++ b/extend/controller/BasicAdmin.php @@ -115,6 +115,12 @@ class BasicAdmin extends Controller { } # 列表显示 $result = array(); + # 默认排序 + $options = $db->getOptions(); + if (empty($options['order'])) { + $fields = $db->getTableFields(['table' => $db->getTable()]); + in_array('sort', $fields) && $db->order('sort asc'); + } if ($is_page) { $row_page = $this->request->get('rows', cookie('rows'), 'intval'); cookie('rows', $row_page >= 10 ? $row_page : 10); @@ -164,7 +170,7 @@ class BasicAdmin extends Controller { if ($pk_value !== '') { // Edit Options !empty($pk_value) && $db->where($pk, $pk_value); !empty($where) && $db->where($where); - $vo = array_merge($data, (array) $db->find()); + $vo = array_merge($data, (array)$db->find()); } $this->_callback('_form_filter', $vo); $this->assign('vo', $vo); diff --git a/public/static/admin/plugs.js b/public/static/admin/plugs.js index f543b8e28..439f5e06f 100644 --- a/public/static/admin/plugs.js +++ b/public/static/admin/plugs.js @@ -55,10 +55,8 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { }; JPlaceHolder.init(); - /** * 定义消息处理构造方法 - * @returns {common_L11._msg} */ function msg() { this.version = '2.0'; @@ -78,9 +76,9 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { /** * 弹出警告消息框 - * @param {type} msg - * @param {type} callback - * @returns {undefined} + * @param msg 消息内容 + * @param callback 回调函数 + * @return {*|undefined} */ msg.prototype.alert = function (msg, callback) { this.close(); @@ -89,21 +87,28 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { /** * 确认对话框 - * @param {type} msg 提示消息内容 - * @param {type} ok 确认的回调函数 - * @param {type} no 取消的回调函数 - * @returns {undefined} + * @param msg 提示消息内容 + * @param ok 确认的回调函数 + * @param no 取消的回调函数 + * @return {undefined|*} */ msg.prototype.confirm = function (msg, ok, no) { - this.close(); - return this.index = layer.confirm(msg, {btn: ['确认', '取消']}, ok, no); + var self = this; + return this.index = layer.confirm(msg, {btn: ['确认', '取消']}, function () { + typeof ok === 'function' && ok.call(this); + self.close(); + }, function () { + typeof no === 'function' && ok.call(this); + self.close(); + }); }; /** * 显示成功类型的消息 - * @param {type} msg 消息内容 - * @param {type} time 延迟关闭时间 - * @param {type} callback 回调函数 + * @param msg 消息内容 + * @param time 延迟关闭时间 + * @param callback 回调函数 + * @return {common_L11._msg|*} */ msg.prototype.success = function (msg, time, callback) { this.close(); @@ -119,9 +124,10 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { /** * 显示失败类型的消息 - * @param {type} msg 消息内容 - * @param {type} time 延迟关闭时间 - * @param {type} callback 回调函数 + * @param msg 消息内容 + * @param time 延迟关闭时间 + * @param callback 回调函数 + * @return {common_L11._msg|*} */ msg.prototype.error = function (msg, time, callback) { this.close(); @@ -137,10 +143,10 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { /** * 状态消息提示 - * @param {type} msg - * @param {type} time - * @param {type} callback - * @returns {unresolved} + * @param msg 消息内容 + * @param time 显示时间s + * @param callback 回调函数 + * @return {common_L11._msg|*} */ msg.prototype.tips = function (msg, time, callback) { this.close(); @@ -154,8 +160,9 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { /** * 显示正在加载中的提示 - * @param {type} msg 提示内容 - * @param {type} callback 回调方法 + * @param msg 提示内容 + * @param callback 回调方法 + * @return {common_L11._msg|*} */ msg.prototype.loading = function (msg, callback) { this.close(); @@ -166,14 +173,21 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { /** * 自动处理显示Think返回的Json数据 - * @param {type} data JSON数据对象 - * @param {type} time 延迟关闭时间 + * @param data JSON数据对象 + * @param time 延迟关闭时间 + * @return {common_L11._msg|*} */ msg.prototype.auto = function (data, time) { var self = this; if (parseInt(data.code) === 1) { return self.success(data.msg, time, function () { !!data.url ? (window.location.href = data.url) : $.form.reload(); + if (self.autoSuccessCloseIndexs && self.autoSuccessCloseIndexs.length > 0) { + for (var i in self.autoSuccessCloseIndexs) { + layer.close(self.autoSuccessCloseIndexs[i]); + } + self.autoSuccessCloseIndexs = []; + } }); } self.error(data.msg, 3, function () { @@ -181,6 +195,15 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { }); }; + /** + * auto处理成功的自动关闭 + * @param index + */ + msg.prototype.addAutoSuccessCloseIndex = function (index) { + this.autoSuccessCloseIndexs = this.autoSuccessCloseIndexs || []; + this.autoSuccessCloseIndexs.push(index); + }; + /** * 将消息对象挂载到Jq */ @@ -193,7 +216,6 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { */ function _form() { this.version = '2.0'; - this._model = null; this.errMsg = '{status}服务器繁忙,请稍候再试!'; } @@ -320,13 +342,15 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { content: res, title: title || '', success: function (dom, index) { + // 此窗口完成时需要自动关闭 + $.msg.addAutoSuccessCloseIndex(index); var $container = $(dom); /* 处理样式及返回按钮事件 */ $container.find('[data-close]').off('click').on('click', function () { if ($(this).attr('data-confirm')) { $.msg.confirm($(this).attr('data-confirm'), function () { layer.close(index); - }) + }); } else { layer.close(index); } @@ -353,8 +377,8 @@ define(['zeroclipboard', 'jquery'], function (ZeroClipboard) { /** * 打开一个iframe窗口 - * @param url - * @param title + * @param url iframe打开的URL地址 + * @param title 窗口标题 */ _form.prototype.iframe = function (url, title) { return layer.open({ diff --git a/public/static/theme/default/css/console.css b/public/static/theme/default/css/console.css index d13378d80..b07d968b5 100644 --- a/public/static/theme/default/css/console.css +++ b/public/static/theme/default/css/console.css @@ -203,11 +203,6 @@ td .text-explode:first-child{opacity:0;display:none} .ibox-footer{color:inherit;border-top:1px solid #e7eaec;font-size:90%;background:#ffffff;padding:10px 15px} .ibox-title h5{display:inline-block;font-size:16px;margin:16px 0px;font-weight:500;text-indent:8px;text-overflow:ellipsis;border-left:2px solid #88B7E0} -/** 分页样式 */ -.pagination > li > a{background-color:#FFFFFF !important;border:1px solid #DDDDDD !important;color:inherit !important;float:left;line-height:1.42857;margin-left:-1px;padding:4px 10px;position:relative;text-decoration:none} -.pagination > .active > a, .pagination > .active > a:focus, .pagination > .active > a:hover, -.pagination > .active > span, .pagination > .active > span:focus, .pagination > .active > span:hover{background-color:#f4f4f4 !important;color:inherit !important;border-color:#DDDDDD !important;cursor:default;z-index:2} - /** 页面加载进度 */ .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none} .pace-inactive{display:none} From 4302a38101d1dde7f7efd3bc3af42b5d59f7a04f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Fri, 24 Feb 2017 12:05:10 +0800 Subject: [PATCH 84/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/auth.index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/admin/view/auth.index.html b/application/admin/view/auth.index.html index ef9a84bf3..d78431a78 100644 --- a/application/admin/view/auth.index.html +++ b/application/admin/view/auth.index.html @@ -49,7 +49,7 @@ {/if} {if auth("$classuri/apply")} | - 授权 + 管理节点 {/if} {if $vo.status eq 1 and auth("$classuri/forbid")} | From b296cce66d570a9a8120250e8149940644e175ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Fri, 24 Feb 2017 12:18:08 +0800 Subject: [PATCH 85/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/auth.form.html | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 application/admin/view/auth.form.html diff --git a/application/admin/view/auth.form.html b/application/admin/view/auth.form.html new file mode 100644 index 000000000..b7927d650 --- /dev/null +++ b/application/admin/view/auth.form.html @@ -0,0 +1,25 @@ +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + {if isset($vo['id'])}{/if} + + +
    + +
    From 6a728ddd4f4a7d24692ce44addc0f6c7ae2069b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Fri, 24 Feb 2017 14:05:16 +0800 Subject: [PATCH 86/94] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E8=A1=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Auth.php | 1 - application/admin/view/menu.form.html | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/application/admin/controller/Auth.php b/application/admin/controller/Auth.php index 5126aa054..a8f3492c7 100644 --- a/application/admin/controller/Auth.php +++ b/application/admin/controller/Auth.php @@ -16,7 +16,6 @@ namespace app\admin\controller; use controller\BasicAdmin; use library\Data; -use think\Db; /** * 系统权限管理控制器 diff --git a/application/admin/view/menu.form.html b/application/admin/view/menu.form.html index f7e55edcb..046448134 100644 --- a/application/admin/view/menu.form.html +++ b/application/admin/view/menu.form.html @@ -39,7 +39,7 @@
    {if isset($vo['id'])}{/if} - +