xun 7 年之前
当前提交
f16e64b82b
共有 100 个文件被更改,包括 16305 次插入0 次删除
  1. 14 0
      .gitignore
  2. 115 0
      CONTRIBUTING.md
  3. 32 0
      LICENSE.txt
  4. 1 0
      README.md
  5. 1 0
      application/.htaccess
  6. 14 0
      application/command.php
  7. 577 0
      application/common.php
  8. 134 0
      application/common/model/AdminUser.php
  9. 17 0
      application/common/model/DateType.php
  10. 17 0
      application/common/model/Project.php
  11. 17 0
      application/common/model/ProjectApi.php
  12. 17 0
      application/common/model/ProjectCate.php
  13. 17 0
      application/common/model/ProjectModule.php
  14. 17 0
      application/common/model/ProjectUrl.php
  15. 17 0
      application/common/model/RequestType.php
  16. 31 0
      application/common/validate/AdminUser.php
  17. 37 0
      application/common/validate/SayUser.php
  18. 50 0
      application/common/view/public/back.html
  19. 55 0
      application/common/view/public/base.html
  20. 26 0
      application/common/view/public/base_edit.html
  21. 30 0
      application/common/view/public/base_show.html
  22. 25 0
      application/common/view/public/base_view.html
  23. 28 0
      application/common/view/public/base_view_second.html
  24. 8 0
      application/common/view/public/foot.html
  25. 8 0
      application/common/view/public/foot_view.html
  26. 66 0
      application/common/view/public/header.html
  27. 66 0
      application/common/view/public/header_view.html
  28. 2045 0
      application/common/view/public/icon.html
  29. 71 0
      application/common/view/public/index_pop.html
  30. 39 0
      application/common/view/public/js.html
  31. 35 0
      application/common/view/public/left.html
  32. 59 0
      application/common/view/public/left_show.html
  33. 23 0
      application/common/view/public/left_view.html
  34. 106 0
      application/common/view/public/pop.html
  35. 30 0
      application/common/view/public/title.html
  36. 65 0
      application/common/view/public/top.html
  37. 28 0
      application/common/view/public/top_edit.html
  38. 50 0
      application/common/view/public/top_show.html
  39. 28 0
      application/common/view/public/top_view.html
  40. 64 0
      application/common/view/waring/jump.html
  41. 1 0
      application/edit/common.php
  42. 57 0
      application/edit/config.php
  43. 28 0
      application/edit/controller/Base.php
  44. 66 0
      application/edit/controller/Cate.php
  45. 20 0
      application/edit/controller/Index.php
  46. 66 0
      application/edit/controller/Module.php
  47. 302 0
      application/edit/controller/Project.php
  48. 115 0
      application/edit/controller/User.php
  49. 70 0
      application/edit/view/index/index.html
  50. 320 0
      application/edit/view/project/add.html
  51. 343 0
      application/edit/view/project/show.html
  52. 88 0
      application/edit/view/user/login.html
  53. 13 0
      application/extra/myconfig.php
  54. 25 0
      application/index/config.php
  55. 15 0
      application/index/controller/Index.php
  56. 88 0
      application/index/controller/Project.php
  57. 28 0
      application/index/view/index/index.html
  58. 152 0
      application/index/view/project/show.html
  59. 55 0
      application/index/view/public/base.html
  60. 25 0
      application/index/view/public/base_one.html
  61. 8 0
      application/index/view/public/foot.html
  62. 8 0
      application/index/view/public/foot_one.html
  63. 66 0
      application/index/view/public/header.html
  64. 66 0
      application/index/view/public/header_one.html
  65. 2045 0
      application/index/view/public/icon.html
  66. 36 0
      application/index/view/public/js.html
  67. 35 0
      application/index/view/public/left.html
  68. 30 0
      application/index/view/public/title.html
  69. 65 0
      application/index/view/public/top.html
  70. 18 0
      application/index/view/public/top_one.html
  71. 23 0
      application/route.php
  72. 27 0
      build.php
  73. 37 0
      composer.json
  74. 二进制
      composer.phar
  75. 0 0
      extend/index.html
  76. 254 0
      gitignore/config.php
  77. 53 0
      gitignore/database.php
  78. 57 0
      gitignore/rules.php
  79. 125 0
      gitignore/wiki_api.sql
  80. 8 0
      public/.htaccess
  81. 17 0
      public/index.php
  82. 2 0
      public/robots.txt
  83. 17 0
      public/router.php
  84. 4729 0
      public/static/adminLTE/css/AdminLTE.css
  85. 7 0
      public/static/adminLTE/css/AdminLTE.min.css
  86. 4 0
      public/static/adminLTE/css/font-awesome.min.css
  87. 11 0
      public/static/adminLTE/css/ionicons.min.css
  88. 1799 0
      public/static/adminLTE/css/skins/_all-skins.css
  89. 1 0
      public/static/adminLTE/css/skins/_all-skins.min.css
  90. 176 0
      public/static/adminLTE/css/skins/skin-black-light.css
  91. 1 0
      public/static/adminLTE/css/skins/skin-black-light.min.css
  92. 154 0
      public/static/adminLTE/css/skins/skin-black.css
  93. 1 0
      public/static/adminLTE/css/skins/skin-black.min.css
  94. 167 0
      public/static/adminLTE/css/skins/skin-blue-light.css
  95. 1 0
      public/static/adminLTE/css/skins/skin-blue-light.min.css
  96. 142 0
      public/static/adminLTE/css/skins/skin-blue.css
  97. 1 0
      public/static/adminLTE/css/skins/skin-blue.min.css
  98. 156 0
      public/static/adminLTE/css/skins/skin-green-light.css
  99. 1 0
      public/static/adminLTE/css/skins/skin-green-light.min.css
  100. 0 0
      public/static/adminLTE/css/skins/skin-green.css

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+.idea
+.idea/*
+composer.lock
+*.log
+thinkphp
+public/uploads/*/
+public/ueditor/*
+logs/*/
+logs/*.log
+application/database.php
+application/config.php
+application/rules.php
+application/extra/url.php
+runtime/*/

+ 115 - 0
CONTRIBUTING.md

@@ -0,0 +1,115 @@
+如何贡献我的源代码
+===
+
+此文档介绍了 ThinkPHP 团队的组成以及运转机制,您提交的代码将给 ThinkPHP 项目带来什么好处,以及如何才能加入我们的行列。
+
+## 通过 Github 贡献代码
+
+ThinkPHP 目前使用 Git 来控制程序版本,如果你想为 ThinkPHP 贡献源代码,请先大致了解 Git 的使用方法。我们目前把项目托管在 GitHub 上,任何 GitHub 用户都可以向我们贡献代码。
+
+参与的方式很简单,`fork`一份 ThinkPHP 的代码到你的仓库中,修改后提交,并向我们发起`pull request`申请,我们会及时对代码进行审查并处理你的申请并。审查通过后,你的代码将被`merge`进我们的仓库中,这样你就会自动出现在贡献者名单里了,非常方便。
+
+我们希望你贡献的代码符合:
+
+* ThinkPHP 的编码规范
+* 适当的注释,能让其他人读懂
+* 遵循 Apache2 开源协议
+
+**如果想要了解更多细节或有任何疑问,请继续阅读下面的内容**
+
+### 注意事项
+
+* 本项目代码格式化标准选用 [**PSR-2**](http://www.kancloud.cn/thinkphp/php-fig-psr/3141);
+* 类名和类文件名遵循 [**PSR-4**](http://www.kancloud.cn/thinkphp/php-fig-psr/3144);
+* 对于 Issues 的处理,请使用诸如 `fix #xxx(Issue ID)` 的 commit title 直接关闭 issue。
+* 系统会自动在 PHP 5.4 5.5 5.6 7.0 和 HHVM 上测试修改,其中 HHVM 下的测试容许报错,请确保你的修改符合 PHP 5.4 ~ 5.6 和 PHP 7.0 的语法规范;
+* 管理员不会合并造成 CI faild 的修改,若出现 CI faild 请检查自己的源代码或修改相应的[单元测试文件](thinkphp/tests);
+
+## GitHub Issue
+
+GitHub 提供了 Issue 功能,该功能可以用于:
+
+* 提出 bug
+* 提出功能改进
+* 反馈使用体验
+
+该功能不应该用于:
+
+ * 提出修改意见(涉及代码署名和修订追溯问题)
+ * 不友善的言论
+
+## 快速修改
+
+**GitHub 提供了快速编辑文件的功能**
+
+1. 登录 GitHub 帐号;
+2. 浏览项目文件,找到要进行修改的文件;
+3. 点击右上角铅笔图标进行修改;
+4. 填写 `Commit changes` 相关内容(Title 必填);
+5. 提交修改,等待 CI 验证和管理员合并。
+
+**若您需要一次提交大量修改,请继续阅读下面的内容**
+
+## 完整流程
+
+1. `fork`本项目;
+2. 克隆(`clone`)你 `fork` 的项目到本地;
+3. 新建分支(`branch`)并检出(`checkout`)新分支;
+4. 添加本项目到你的本地 git 仓库作为上游(`upstream`);
+5. 进行修改,若你的修改包含方法或函数的增减,请记得修改[单元测试文件](thinkphp/tests);
+6. 变基(衍合 `rebase`)你的分支到上游 master 分支;
+7. `push` 你的本地仓库到 GitHub;
+8. 提交 ``pull request`s`;
+9. 等待 CI 验证(若不通过则重复 5~7,GitHub 会自动更新你的 ``pull request`s`);
+10. 等待管理员处理,并及时 `rebase` 你的分支到上游 master 分支(若上游 master 分支有修改)。
+
+*若有必要,可以 `git push -f` 强行推送 rebase 后的分支到自己的 GitHub `fork`*
+
+### 注意事项
+
+* 若对上述流程有任何不清楚的地方,请查阅 GIT 教程,如 [这个](http://backlogtool.com/git-guide/cn/);
+* 对于代码**不同方面**的修改,请在自己 `fork` 的项目中**创建不同的分支**(原因参见`完整流程`第9条备注部分);
+* 变基及交互式变基操作参见 [Git 交互式变基](http://pakchoi.me/2015/03/17/git-interactive-rebase/)
+
+## 推荐资源
+
+### 开发环境
+
+* XAMPP for Windows 5.5.x
+* WampServer (for Windows)
+* upupw Apache PHP5.4 ( for Windows)
+
+或自行安装
+
+- Apache / Nginx
+- PHP 5.4 ~ 5.6
+- MySQL / MariaDB
+
+*Windows 用户推荐添加 PHP bin 目录到 PATH,方便使用 composer*
+
+*Linux 用户自行配置环境, Mac 用户推荐使用内嵌 Apache 配合 Homebrew 安装 PHP 和 MariaDB*
+
+### 编辑器
+
+Sublime Text 3 + phpfmt 插件
+
+phpfmt 插件参数
+
+```json
+{
+    "enable_auto_align": true,
+    "indent_with_space": true,
+    "psr1_naming": true,
+    "psr2": true,
+    "version": 1
+}
+```
+
+或其他 编辑器 / IDE 配合 PSR2 自动格式化工具
+
+### Git GUI
+
+* SourceTree
+* GitHub Desktop
+
+或其他 Git 图形界面客户端

+ 32 - 0
LICENSE.txt

@@ -0,0 +1,32 @@
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn)
+All rights reserved。
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+Apache Licence是著名的非盈利开源组织Apache采用的协议。
+该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
+允许代码修改,再作为开源或商业软件发布。需要满足
+的条件: 
+1. 需要给代码的用户一份Apache Licence ;
+2. 如果你修改了代码,需要在被修改的文件中说明;
+3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
+带有原来代码中的协议,商标,专利声明和其他原来作者规
+定需要包含的说明;
+4. 如果再发布的产品中包含一个Notice文件,则在Notice文
+件中需要带有本协议内容。你可以在Notice中增加自己的
+许可,但不可以表现为对Apache Licence构成更改。 
+具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.

+ 1 - 0
README.md

@@ -0,0 +1 @@
+基于thinkphp5.0版本 写的接口文档管理工具

+ 1 - 0
application/.htaccess

@@ -0,0 +1 @@
+deny from all

+ 14 - 0
application/command.php

@@ -0,0 +1,14 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006-2015 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: yunwuxin <448901948@qq.com>
+// +----------------------------------------------------------------------
+
+return [
+
+];

+ 577 - 0
application/common.php

@@ -0,0 +1,577 @@
+<?php
+// 应用公共文件
+
+/**
+ * p格式友好输出
+ * @param $data
+ */
+function p($data){
+    echo "<pre>";
+    print_r($data);
+    echo "</pre>";
+}
+
+/**
+ * 检测用户是否登录
+ * @param $key      加密key
+ * @param $db       用户数据库
+ * @param $model    用户模型
+ * @return int
+ */
+function is_login($key,$db,$model) {
+    //先检测cookie
+    $cookie_verify=cookie('user_auth_sign');;
+    $cookie=cookie('user_auth');
+    if(!empty($cookie_verify) &&!empty($cookie)){//存在
+        $map['id']=$cookie;
+        $user = $db->field('id,user_password,user_name')->where($map)->find();
+        $user_id=$user['id'];
+        $user_pw=$user['user_password'];
+        $data=$user['user_name'].$user_id.$user_pw;
+        $user_verify=think_encrypt($data,$key);
+//        $_SESSION['user']=$user['user_name'];//编辑器判断是否登录使用
+        if($cookie_verify == $user_verify){
+            if(!cookie('user_base')){
+                $model->set_userbase_cookie($user['id']);
+            }
+            return $user['id'];
+        }
+    }
+    $user_auth = session ( 'user_auth' );
+//    $_SESSION['user']=$user['user_name'];//编辑器判断是否登录使用
+    if (empty ( $user_auth )) {
+        return 0;
+    } else {
+        if(session ( 'user_auth_sign' ) == data_auth_sign ( $user_auth )){
+            if(!cookie('user_base')){
+                $model->set_userbase_cookie($user_auth['id']);
+            }
+            return   $user_auth ['id'];
+        }else{
+            return 0;
+        }
+    }
+}
+/**
+ * 后台密码加密
+ * @param $password
+ * @param $key
+ * @return string
+ */
+function password($password,$key){
+    return '' === $password ? '' : md5(sha1($password) . $key);
+}
+/**
+ * 数据签名认证
+ *
+ * @param array $data
+ *        	被认证的数据
+ * @return string 签名
+ */
+function data_auth_sign($data) {
+    // 数据类型检测
+    if (! is_array ( $data )) {
+        $data = ( array ) $data;
+    }
+    ksort ( $data ); // 排序
+    $code = http_build_query ( $data ); // url编码并生成query字符串
+    $sign = sha1 ( $code ); // 生成签名
+    return $sign;
+}
+
+/**
+ * 系统加密方法
+ * @param string $data 要加密的字符串
+ * @param string $key  加密密钥
+ * @param int $expire  过期时间 (单位:秒)
+ * @return string
+ */
+function think_encrypt($data, $key, $expire = 0) {
+    $key  = md5($key);
+    $data = base64_encode($data);
+    $x    = 0;
+    $len  = strlen($data);
+    $l    = strlen($key);
+    $char =  '';
+    for ($i = 0; $i < $len; $i++) {
+        if ($x == $l) $x=0;
+        $char  .= substr($key, $x, 1);
+        $x++;
+    }
+    $str = sprintf('%010d', $expire ? $expire + time() : 0);
+    for ($i = 0; $i < $len; $i++) {
+        $str .= chr(ord(substr($data,$i,1)) + (ord(substr($char,$i,1)))%256);
+    }
+    return str_replace('=', '', base64_encode($str));
+}
+
+/**
+ * 系统解密方法
+ * @param string $data 要解密的字符串 (必须是think_encrypt方法加密的字符串)
+ * @param string $key  加密密钥
+ * @return string
+ */
+function think_decrypt($data, $key){
+    $key    = md5($key);
+    $x      = 0;
+    $data   = base64_decode($data);
+    $expire = substr($data, 0, 10);
+    $data   = substr($data, 10);
+    if($expire > 0 && $expire < time()) {
+        return '';
+    }
+    $len  = strlen($data);
+    $l    = strlen($key);
+    $char = $str = '';
+    for ($i = 0; $i < $len; $i++) {
+        if ($x == $l) $x = 0;
+        $char  .= substr($key, $x, 1);
+        $x++;
+    }
+    for ($i = 0; $i < $len; $i++) {
+        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
+            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
+        }else{
+            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
+        }
+    }
+    return base64_decode($str);
+}
+
+/**
+ * 获取拼接好的导航数据
+ * @param string $module 所属模块
+ * @return array
+ */
+function li($module){
+    $model=model('common/Li');
+
+    $data=$model->get_li($module);
+    $result=[];
+    foreach($data as $k=>$v){
+        if($v['li_up']==0){
+            $v['li_two']=[];
+            $result[]=$v;
+            unset($data[$k]);
+        }
+    }
+    foreach($result as $key=>$val){
+        foreach($data as $k=>$v){
+            if($val['id']==$v['li_up']){
+                $result[$key]['li_two'][]=$v;
+            }
+        }
+    }
+    return $result;
+
+}
+
+/**
+ * 获取单个标题名
+ * @param $id
+ * @return mixed
+ */
+function get_li_title($id){
+    $model=model('common/Li');
+    $data=$model->field('li_title')->where(['id'=>$id])->find();
+    return $data['li_title'];
+}
+
+function get_li_title_array(){
+    $model=model('common/Li');
+    $data=$model->field('id,li_title')->select();
+    $result=[];
+    foreach($data as $k=>$v){
+        $result[$v['id']]=$v['li_title'];
+    }
+    $result[0]='其他';
+    return $result;
+}
+
+function now_time(){
+    return $_SERVER['REQUEST_TIME'];
+}
+
+/**
+ * 对象转数组
+ * @param array $data
+ * @return array
+ */
+function toArray($data=[]){
+    $result=[];
+    foreach ($data as $k=>$v){
+        $result[$k]=$v->toArray();
+    }
+    return $result;
+}
+
+/**
+ * 检测验证码
+ * @param $verify 验证码
+ * @param $mobile 手机号码
+ * @param $type 类型 1注册 2忘记密码
+ * @param $expired_time 失效时间 秒
+ */
+function verify($verify,$mobile,$type,$expired_time){
+    $model=model('common/sms');
+    $data=$model->where(['mobile'=>$mobile])->find();
+    if(!empty($data)){
+        $data=$data->toArray();
+        if($type == 1){
+            $code=$data['reg_code'];
+            $time=$data['reg_time'];
+        }else{
+            $code=$data['pw_code'];
+            $time=$data['pw_time'];
+        }
+        if($verify != $code){
+            json_send([],40025,0);
+        }
+
+        if((now_time()-$time)>= $expired_time){
+            json_send([],40024,0);
+        }
+
+    }else{
+        json_send([],40024,0);
+    }
+}
+
+/**
+ * 清除验证码
+ * @param $mobile
+ * @param $type
+ */
+function clear_verify($mobile,$type){
+    $model=model('common/sms');
+    if($type == 1){
+        $data['reg_code']=0;
+        $data['reg_time']=0;
+    }else{
+        $data['pw_code']=0;
+        $data['pw_time']=0;
+    }
+    $model->save($data,['mobile'=>$mobile]);
+}
+
+/**
+ * 二维数组键名重命名
+ * @param array $data  二维数组 原始数据
+ * @param array $array  一维数组 key为需要替换的名称 val为替换之后的名称
+ * @return array
+ */
+function rename_arrays($data=[],$array=[]){
+    foreach ($data as $k=>$v){
+        foreach ($v as $kk=>$vv){
+            foreach ($array as $key=>$value){
+                if($kk == $key){
+                    $data[$k][$value]=$vv;
+                    unset($data[$k][$kk]);
+                }
+            }
+        }
+//        foreach ($array as $key=>$value){
+//            if($v[$key]){
+//                $data[$k][$value]=$v[$key];
+//                unset($data[$k][$key]);
+//            }
+//        }
+    }
+    return $data;
+}
+
+/**
+ * 一维数组键名重命名
+ * @param array $data 一维数组 原始数据
+ * @param array $array 一维数组 键名为需要替换的名称 键值为替换之后的名称
+ * @return array
+ */
+function rename_array($data=[],$array=[]){
+    foreach ($data as $k=>$v){
+        foreach ($array as $key=>$value){
+            if($k == $key){
+                $data[$value]=$v;
+                unset($data[$k]);
+            }
+        }
+    }
+    return $data;
+}
+
+/**
+ * @param $url  [请求的URL地址]
+ * @param bool $params  [请求的参数]
+ * @param int $ispost  [是否采用POST形式]
+ * @return bool|mixed
+ */
+function juhecurl($url,$params=false,$ispost=0){
+    $httpInfo = array();
+    $ch = curl_init();
+    curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
+    curl_setopt( $ch, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22' );
+    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 30 );
+    curl_setopt( $ch, CURLOPT_TIMEOUT , 30);
+    curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
+    if( $ispost )
+    {
+        curl_setopt( $ch , CURLOPT_POST , true );
+        curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
+        curl_setopt( $ch , CURLOPT_URL , $url );
+    }
+    else
+    {
+        if($params){
+            curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
+        }else{
+            curl_setopt( $ch , CURLOPT_URL , $url);
+        }
+    }
+    $response = curl_exec( $ch );
+    if ($response === FALSE) {
+        //echo "cURL Error: " . curl_error($ch);
+        return false;
+    }
+    $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
+    $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
+    curl_close( $ch );
+    return $response;
+}
+
+/**
+ * 返回随机颜色
+ * @return mixed
+ */
+function color(){
+    $color=[
+        'bg-maroon',
+        'bg-purple',
+        'bg-navy',
+        'bg-orange',
+        'bg-olive',
+        'bg-aqua',
+        'bg-green',
+        'bg-yellow',
+        'bg-red',
+        'btn-info',
+        'btn-primary',
+    ];
+
+    return $color[array_rand($color)];
+}
+
+/**
+ * 获取项目模块
+ * @param $project_id
+ * @return array|bool
+ */
+function project_module($project_id){
+    $model=model('common/ProjectModule');
+    $data=$model->where(['project_id'=>$project_id])->order('id desc')->select();
+    if($data){
+        return toArray($data);
+    }else{
+        return false;
+    }
+}
+
+/**
+ * 获取项目分类
+ * @param $project_module_id
+ * @return array|bool
+ */
+function project_cate($project_module_id){
+    $model=model('common/ProjectCate');
+    $data=$model->where(['project_module_id'=>$project_module_id])->select();
+    if($data){
+        return toArray($data);
+    }else{
+        return false;
+    }
+}
+
+/**
+ * 获取API列表
+ * @param $project_cate_id
+ * @return array|bool
+ */
+function project_api($project_cate_id){
+    $model=model('common/ProjectApi');
+    $data=$model->field('id,api_name')->where(['project_cate_id'=>$project_cate_id])->select();
+    if($data){
+        return toArray($data);
+    }else{
+        return [];
+    }
+}
+
+/**
+ * 获取api详情
+ * @param $id
+ * @return array|bool
+ */
+function api_wiki($id){
+    $model=model('common/ProjectApi');
+    $join=[
+        ['project_url pu','pu.id = a.project_url_id','left'],
+    ];
+    $data=$model
+        ->field('a.*,pu.url_domain')
+        ->alias('a')
+        ->join($join)
+        ->where(['a.id'=>$id])
+        ->find();
+    if($data){
+        return $data->toArray();
+    }else{
+        return [];
+    }
+}
+
+/**
+ * 项目域名表
+ * @param $project_id
+ * @return array
+ */
+function project_url($project_id){
+    $model=model('common/ProjectUrl');
+    $data=$model->where(['project_id'=>$project_id])->select();
+    if($data){
+        return toArray($data);
+    }else{
+        return [];
+    }
+}
+
+/**
+ * 请求类型
+ * @return array
+ */
+function request_data(){
+    $model=model('common/RequestType');
+    $data=$model->select();
+    if($data){
+        return toArray($data);
+    }else{
+        return [];
+    }
+}
+
+function request_data_id($request_id){
+    $data=request_data();
+    $return='未知';
+    foreach ($data as $k=>$v){
+        if($v['id']==$request_id){
+            $return=$v['type_name'];
+            break;
+        }
+    }
+    return $return;
+}
+
+/**
+ * 数据类型
+ * @return array
+ */
+function data_type(){
+    $model=model('common/DateType');
+    $data=$model->select();
+    if($data){
+        return toArray($data);
+    }else{
+        return [];
+    }
+}
+
+function data_type_id($type_id){
+    $data=data_type();
+    $return='未知';
+    foreach ($data as $k=>$v){
+        if($v['id']==$type_id){
+            $return=$v['type_name'];
+            break;
+        }
+    }
+    return $return;
+}
+
+/**
+ * 返回指定格式json
+ * @param array $data 返回数据
+ * @param int $code 返回码
+ * @param int $status 状态 默认1=成功 0=失败
+ * @param string $token
+ * @param mixed $backup 备注
+ * @return string
+ */
+function json_send($data=[],$code=1,$status=1,$token='',$backup=''){
+    $arr=[
+        'header' => [
+            'status'    =>  $status,//状态
+            'info'      =>  code_val($code,$backup),//操作信息
+            'code'      =>  $code,
+            'token'     =>  $token,
+            'server_time'   =>  now_time(),//服务器时间
+        ],
+        'body'  => [
+            'data'  => $data,//具体数据
+            'backup'=> $backup,//备注
+        ],
+    ];
+    header("Content-type: text/json; charset=utf-8");
+    header("Content-type: application/json; charset=utf-8");
+    echo json_encode($arr,JSON_UNESCAPED_UNICODE);
+    exit;
+}
+
+/**
+ * @param $k
+ * @param string $error
+ * @return mixed|string
+ */
+function code_val($k,$error=''){
+    if(is_array($k)){//登陆自动验证失败时返回的是数组
+        return $k[0];//返回失败错误信息
+    }else{
+        $return = [
+            '-1'        =>      '系统繁忙,请重试!',
+            '1'         =>      '请求成功!',
+            '40000'     =>      '请求失败!',
+            '40001'     =>      '系统繁忙,请重试!',
+            '40002'     =>      '登陆失败,用户不存在!',
+            '40003'     =>      '登陆失败,密码错误!',
+            '40004'     =>      '登陆失败,未知状态!',
+            '40005'     =>      '登陆失败,用户被禁用!',
+            '40006'     =>      '登陆失败,账号已被删除!',
+            '40007'     =>      '登陆失败,账号已停用!',
+            '40008'     =>      '验证失败,请重新登陆!',
+            '40009'     =>      '手机号码必须!',
+            '40010'     =>      '密码必须!',
+            '40011'     =>      '手机已注册!',
+            '40012'     =>      '密码过短!',
+            '40013'     =>      '非法空间!',
+            '40014'     =>      '短信发送失败!'.$error,
+            '40015'     =>      '短信已经发送,请注意查看手机!',
+            '40016'     =>      '手机号码必须!',
+            '40017'     =>      '密码必须',
+            '40018'     =>      '确认密码必须!',
+            '40019'     =>      '确认密码不一致',
+            '40020'     =>      '验证码必须',
+            '40021'     =>      '手机格式不正确',
+            '40022'     =>      '密码请大于6位',
+            '40023'     =>      '注册失败',
+            '40024'     =>      '验证码失效,请重新获取',
+            '40025'     =>      '验证码错误',
+            '40026'     =>      '手机尚未注册',
+            '40027'     =>      '无此用户',
+            '40028'     =>      '无此项目',
+            '40029'     =>      '一天只能点赞一次哦',
+            '40030'     =>      '点赞失败',
+        ];
+        if(empty($return[$k])){
+            return '未知错误!';
+        }else{
+            return $return[$k];
+        }
+    }
+
+}

+ 134 - 0
application/common/model/AdminUser.php

@@ -0,0 +1,134 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: xun
+ * Date: 2016/7/28
+ * Time: 16:48
+ */
+
+namespace app\common\model;
+use think\Model;
+class AdminUser extends Model{
+    protected $auto = [];
+    protected $insert = ['user_password','user_header_img'];
+    protected $update = [];
+    protected function setUserPasswordAttr($value){
+        return password($value,$this->key());
+    }
+    protected function setUserHeaderImgAttr(){
+        return '/img/head.png';
+    }
+    protected function key(){
+        return config('myconfig.admin_key');
+    }
+    protected function session_key(){
+        return config('myconfig.admin_session_key');
+    }
+    protected function cookie_key(){
+        return config('myconfig.admin_cookie_key');
+    }
+    /**
+     * 用户登录认证
+     * @param  string  $username 用户名
+     * @param  string  $password 用户密码
+     * @param  integer $type     用户名类型 (1-用户名,2-邮箱,3-手机,4-UID)
+     * @return integer           登录成功-用户ID,登录失败-错误编号
+     * @param  string  $auto 是否自动登录 on为自动登录
+     */
+    public function login($username, $password, $type = 1 ,$auto){
+        $map = array();
+        switch ($type) {
+            case 1:
+                $map['user_name'] = $username;
+                break;
+            case 2:
+                $map['user_email'] = $username;
+                break;
+            case 3:
+                $map['user_mobile'] = $username;
+                break;
+            case 4:
+                $map['id'] = $username;
+                break;
+            default:
+                return 0; //参数错误
+        }
+
+        /* 获取用户数据 */
+        $user = $this->where($map)->find();
+        if($user && $user['user_status']==1){
+            /* 验证用户密码 */
+            if(password($password,$this->key()) === $user['user_password']){
+                $this->updateLogin($user['id']); //更新用户登录信息
+                if($auto=='on'){
+                    $this->set_userbase_cookie($user['id']);
+                    $this->user_cookie($user);
+                }else{
+                    $this->set_userbase_cookie($user['id']);
+                    $this->user_session($user);
+                }
+                return $user['id']; //登录成功,返回用户ID
+            } else {
+                return -2; //密码错误
+            }
+        } else {
+            return -1; //用户不存在或被禁用
+        }
+    }
+
+    protected function user_session($user=[]){
+        $data=$user['user_name'].$user['id'].$user['user_password'];
+        $verify=think_encrypt($data,$this->session_key());
+
+        $auth = array (
+            'verify' => $verify,
+            'user_name' => $user['user_name'],
+            'id'      => $user['id'],
+        );
+        session ( 'user_auth', $auth );
+        session ( 'user_auth_sign', data_auth_sign ( $auth ));
+
+    }
+
+    protected function user_cookie($user=[]){
+        $data=$user['user_name'].$user['id'].$user['user_password'];
+        $verify=think_encrypt($data,$this->cookie_key());
+        cookie('user_auth',$user['id'],2952000);
+        cookie('user_auth_sign',$verify,2592000); // 指定cookie保存时间30天
+    }
+
+    /**
+     * 更新用户登录信息
+     * @param  integer $uid 用户ID
+     */
+    protected function updateLogin($uid){
+        $data = array(
+            'last_login_ip'   => request()->ip(),//0返回ip地址 1 返回纯数字
+            'user_login'           => ['exp','user_login+1'],
+        );
+        $this->save($data,['id'=>$uid]);
+    }
+
+    /**
+     * 注销当前用户
+     *
+     * @return void
+     */
+    public function logout() {
+        session ('user_auth', null );
+        session ('user_auth_sign', null);
+        cookie('user_base',null);
+        cookie('user_auth',null);
+        cookie('user_auth_sign',null);
+    }
+    public function set_userbase_cookie($user_id=''){
+        $user=$this->where(['id'=>$user_id])->find();
+        $user_data=[
+            'user_name' =>  $user['user_name'],
+            'user_header_img'   => $user['user_header_img'],
+            'create_time'   => $user['create_time'],
+            'update_time'   =>  $user['update_time'],
+        ];
+        cookie('user_base',$user_data);
+    }
+}

+ 17 - 0
application/common/model/DateType.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/7
+ * Time: 21:07
+ */
+
+namespace app\common\model;
+
+
+use think\Model;
+
+class DateType extends Model
+{
+
+}

+ 17 - 0
application/common/model/Project.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/6
+ * Time: 22:59
+ */
+
+namespace app\common\model;
+
+
+use think\Model;
+
+class Project extends Model
+{
+
+}

+ 17 - 0
application/common/model/ProjectApi.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/6
+ * Time: 22:59
+ */
+
+namespace app\common\model;
+
+
+use think\Model;
+
+class ProjectApi extends Model
+{
+
+}

+ 17 - 0
application/common/model/ProjectCate.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/6
+ * Time: 23:00
+ */
+
+namespace app\common\model;
+
+
+use think\Model;
+
+class ProjectCate extends Model
+{
+
+}

+ 17 - 0
application/common/model/ProjectModule.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/6
+ * Time: 23:00
+ */
+
+namespace app\common\model;
+
+
+use think\Model;
+
+class ProjectModule extends Model
+{
+
+}

+ 17 - 0
application/common/model/ProjectUrl.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/6
+ * Time: 23:00
+ */
+
+namespace app\common\model;
+
+
+use think\Model;
+
+class ProjectUrl extends Model
+{
+
+}

+ 17 - 0
application/common/model/RequestType.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: xun
+ * Date: 2016/9/7
+ * Time: 15:05
+ */
+
+namespace app\common\model;
+
+
+use think\Model;
+
+class RequestType extends Model
+{
+
+}

+ 31 - 0
application/common/validate/AdminUser.php

@@ -0,0 +1,31 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: xun
+ * Date: 2016/7/28
+ * Time: 16:52
+ */
+
+namespace app\common\validate;
+use think\Validate;
+
+class AdminUser extends Validate{
+    protected $rule = [
+        'user_name'=>'require',
+        'user_password'=>'require',
+        'verify'    =>'require|captcha'
+    ];
+
+    protected $message = [
+        'user_name.require'  =>  '用户名必须',
+        'user_password.require'     =>  '密码必须',
+        'verify.require'    =>  '验证码必须',
+        'verify.captcha'    =>  '验证码错误',
+    ];
+
+    protected $scene = [
+        'add'   =>  ['user_name','user_password'],
+        'edit'  =>  ['user_name'],
+        'login' =>  ['user_name','user_password','verify'],
+    ];
+}

+ 37 - 0
application/common/validate/SayUser.php

@@ -0,0 +1,37 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/8/24
+ * Time: 22:08
+ */
+
+namespace app\common\validate;
+
+
+use think\Validate;
+
+class SayUser extends Validate
+{
+    protected $rule = [
+        'user_mobile'=>['regex'=>'/^[1]{1}[3|5|7|8]{1}[0-9]{9}$/','require'],
+        'user_password'=>'require|confirm:user_re_password|length:6,20',
+        'user_re_password'=>'require',
+        'verify'    => 'require'
+    ];
+
+    protected $message = [
+        'user_mobile.require'  =>  '40016',
+        'user_mobile.regex'  =>  '40021',
+        'user_password.require'  =>  '40017',
+        'user_password.confirm'  =>  '40019',
+        'user_password.length'  =>  '40022',
+        'user_re_password.require'  =>  '40018',
+        'verify.require'  =>  '40020',
+    ];
+
+    protected $scene = [
+        'add'   =>  ['user_mobile','user_password','user_re_password','verify'],
+        'send'   =>  ['user_mobile'],
+    ];
+}

+ 50 - 0
application/common/view/public/back.html

@@ -0,0 +1,50 @@
+<aside class="main-sidebar">
+
+    <!-- sidebar: style can be found in sidebar.less -->
+    <section class="sidebar">
+        <!-- Sidebar Menu -->
+        <ul class="sidebar-menu">
+            <volist id="left" name="left_data">
+                <li class="treeview active">
+                    <span style="color: #000;background: #f4f4f5;font-weight: 600;border-left: 3px solid transparent;position: relative;padding: 12px 5px 12px 15px;display: block;" >
+                        <span>{$key}</span>
+
+                        <span style="margin: 0px;font-size: 100%" class="label label-danger pull-right">Del</span>
+                        <span style="margin: 0px;font-size: 100%;margin-right: 5px;" class="label label-primary pull-right">Edit</span>
+                        <!--<i class="fa fa-angle-double-down pull-right"></i>-->
+                    </span>
+                    <ul class="treeview-menu">
+                        <volist id="wiki_left" name="left['project_api']">
+                            <li <if condition="$project_api_id eq $wiki_left.id">class="active"</if>>
+                            <span style="    padding: 5px 5px 5px 15px;display: block;font-size: 14px;">
+                             <a href="{:url('project/show',['project_module_id'=>$project_module_id,'project_id'=>$project_id,'project_api_id'=>$wiki_left['id']])}">
+                                    <i class="fa fa-circle-o"></i>
+                                    {$wiki_left.api_name}
+                             </a>
+                            <span style="margin: 0px;font-size: 75%" class="badge bg-light-blue pull-right">Del</span>
+                            <span style="margin: 0px;font-size: 75%;margin-right: 5px;" class="badge bg-light-blue pull-right">Edit</span>
+                            </span>
+
+                            </li>
+                        </volist>
+                        <li>
+                            <a  style="color: red;" href="{:url('project/add',['cate_id'=>$left['cate_id']])}">
+                                <i class="fa  fa-plus"></i>
+                                新增接口
+                            </a>
+                        </li>
+                    </ul>
+                </li>
+            </volist>
+            <li class="treeview active">
+                    <span style="color: #000;background: #f4f4f5;font-weight: 600;border-left: 3px solid transparent;position: relative;padding: 12px 5px 12px 15px;display: block;">
+                        <a style="color: red;" href="{:url('project/add_cate',['project_module_id'=>$project_module_id,'project_id'=>$project_id])}">
+                            <i class="fa  fa-plus"></i>
+                            新增分类
+                        </a>
+                    </span>
+            </li>
+        </ul><!-- /.sidebar-menu -->
+    </section>
+    <!-- /.sidebar -->
+</aside>

+ 55 - 0
application/common/view/public/base.html

@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html style="height: 100%">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <block name="title"><title>后台管理</title></block>
+    <!-- Tell the browser to be responsive to screen width -->
+    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+    <!-- Bootstrap 3.3.5 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/bootstrap/css/bootstrap.min.css">
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/font-awesome.min.css">
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/ionicons.min.css">
+    <!-- Select2 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/select2/select2.min.css">
+    <!--选择框-->
+    <link rel='stylesheet' href="{:config('admin_static')}/plugins/iCheck/all.css">
+    <!-- ueditor-->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/ueditor/themes/default/css/ueditor.css"/>
+
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/daterangepicker/daterangepicker-bs3.css">
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/datepicker/datepicker3.css">
+    <!-- Bootstrap Color Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.css">
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.css">
+
+    <!-- Theme style -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/AdminLTE.min.css">
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/skins/_all-skins.min.css">
+
+    <!--[if lt IE 9]>
+    <script src="{:config('admin_static')}/adminLTE/js/html5shiv.min.js"></script>
+    <script src="{:config('admin_static')}/adminLTE/js/respond.min.js"></script>
+    <![endif]-->
+    <link rel="stylesheet" href="{:config('admin_static')}/css/my.css">
+</head>
+<body style="height: 100%;">
+    <div style="background-color: #ecf0f5;height: 100%;">
+        <!-- 标题栏 -->
+        <!-- Main content -->
+        <section class="content" style="padding: 100px;">
+            <div class="row">
+                <block name="body">
+                    <!-- 主页面 -->
+                </block>
+            </div>
+        </section>
+    </div>
+</body>
+<block name="js"></block>
+</html>

+ 26 - 0
application/common/view/public/base_edit.html

@@ -0,0 +1,26 @@
+<include file="common@public/header_view"/>
+<block name="css"></block>
+<body style="height: 100%;" class="hold-transition skin-purple-light sidebar-mini">
+<div class="wrapper">
+    <!-- Main Header -->
+    <block name="top"><include file="common@public/top_edit" /></block>
+    <div>
+        <!-- 标题栏 -->
+        <!-- Main content -->
+        <section class="content" style="padding-left: 50px;padding-right: 50px;">
+            <div class="row">
+                <block name="body">
+                <!-- 主页面 -->
+                </block>
+            </div>
+        </section>
+    </div>
+    <!-- Main Footer -->
+    <include file="common@public/foot_view" />
+</div>
+
+</body>
+<include file="common@public/index_pop" />
+<include file="common@public/js" />
+<block name="js"></block>
+</html>

+ 30 - 0
application/common/view/public/base_show.html

@@ -0,0 +1,30 @@
+<include file="common@public/header"/>
+<block name="css"></block>
+<body class="hold-transition skin-black-light sidebar-mini">
+<div class="wrapper">
+    <!-- Main Header -->
+    <block name="top"><include file="common@public/top_show" /></block>
+    <!-- Left side column. contains the logo and sidebar -->
+        <block name="left"><include file="common@public/left_show" /></block>
+    <!-- Content Wrapper. Contains page content -->
+    <!--<div id="body_height"  class="content-wrapper">-->
+        <!-- 标题栏 -->
+
+        <!-- Main content -->
+        <section id="body_scroll" style="margin-left:230px;overflow: scroll;overflow-x:hidden" class="content">
+            <div  class="row">
+                <block name="body">
+                    <!-- 主页面 -->
+                </block>
+            </div>
+        </section>
+    <!--</div>-->
+    <!-- Main Footer -->
+    <include file="common@public/foot" />
+</div>
+<include file="common@public/pop" />
+</body>
+
+<include file="common@public/js" />
+<block name="js"></block>
+</html>

+ 25 - 0
application/common/view/public/base_view.html

@@ -0,0 +1,25 @@
+<include file="common@public/header_view"/>
+<block name="css"></block>
+<body style="height: 100%;" class="hold-transition skin-purple-light sidebar-mini">
+<div class="wrapper">
+    <!-- Main Header -->
+    <block name="top"><include file="common@public/top_view" /></block>
+    <div>
+        <!-- 标题栏 -->
+        <!-- Main content -->
+        <section class="content" style="padding-left: 50px;padding-right: 50px;">
+            <div class="row">
+                <block name="body">
+                <!-- 主页面 -->
+                </block>
+            </div>
+        </section>
+    </div>
+    <!-- Main Footer -->
+    <include file="common@public/foot_view" />
+</div>
+
+</body>
+<include file="common@public/js" />
+<block name="js"></block>
+</html>

+ 28 - 0
application/common/view/public/base_view_second.html

@@ -0,0 +1,28 @@
+<include file="common@public/header"/>
+<block name="css"></block>
+<body class="hold-transition skin-black-light sidebar-mini">
+<div class="wrapper">
+    <!-- Main Header -->
+    <block name="top"><include file="common@public/top_view" /></block>
+    <!-- Left side column. contains the logo and sidebar -->
+    <block name="left"><include file="common@public/left_view" /></block>
+    <!-- Content Wrapper. Contains page content -->
+    <!--<div id="body_height"  class="content-wrapper">-->
+    <!-- 标题栏 -->
+
+    <!-- Main content -->
+    <section id="body_scroll" style="margin-left:230px;overflow: scroll;overflow-x:hidden" class="content">
+        <div  class="row">
+            <block name="body">
+                <!-- 主页面 -->
+            </block>
+        </div>
+    </section>
+    <!--</div>-->
+    <!-- Main Footer -->
+    <include file="common@public/foot" />
+</div>
+</body>
+<include file="common@public/js" />
+<block name="js"></block>
+</html>

+ 8 - 0
application/common/view/public/foot.html

@@ -0,0 +1,8 @@
+<footer class="main-footer">
+    <!-- To the right -->
+    <div class="pull-right hidden-xs">
+        底部
+    </div>
+    <!-- Default to the left -->
+    <strong>Copyright &copy; 2015 <a href="#">Company</a>.</strong> All rights reserved.
+</footer>

+ 8 - 0
application/common/view/public/foot_view.html

@@ -0,0 +1,8 @@
+<footer class="main-footer" style="margin-left: 0px;position: fixed;bottom:0;left:0;width:100%;">
+    <!-- To the right -->
+    <div class="pull-right hidden-xs">
+        底部
+    </div>
+    <!-- Default to the left -->
+    <strong>Copyright &copy; 2015 <a href="#">Company</a>.</strong> All rights reserved.
+</footer>

+ 66 - 0
application/common/view/public/header.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>后台管理</title>
+    <!-- Tell the browser to be responsive to screen width -->
+    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+    <!-- Bootstrap 3.3.5 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/bootstrap/css/bootstrap.min.css">
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/font-awesome.min.css">
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/ionicons.min.css">
+    <!-- Select2 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/select2/select2.min.css">
+    <!--选择框-->
+    <link rel='stylesheet' href="{:config('admin_static')}/plugins/iCheck/all.css">
+    <!-- ueditor-->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/ueditor/themes/default/css/ueditor.css"/>
+
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/daterangepicker/daterangepicker-bs3.css">
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/datepicker/datepicker3.css">
+    <!-- Bootstrap Color Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.css">
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.css">
+
+    <!-- Theme style -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/AdminLTE.min.css">
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/skins/_all-skins.min.css">
+
+    <!--[if lt IE 9]>
+    <script src="{:config('admin_static')}/adminLTE/js/html5shiv.min.js"></script>
+    <script src="{:config('admin_static')}/adminLTE/js/respond.min.js"></script>
+    <![endif]-->
+    <link rel="stylesheet" href="{:config('admin_static')}/css/my.css">
+    <style>
+        .table>tbody>tr>td{line-height: 2.3;}
+        .left{float: left;margin-right: 50px;}
+        .skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn {
+            height: 33px;
+            border: 1px solid transparent;
+            background-color: #ffffff;
+            box-shadow: none;
+            -webkit-transition: all .3s ease-in-out;
+            -o-transition: all .3s ease-in-out;
+            transition: all .3s ease-in-out;
+        }
+        @media (max-width: 767px){
+            .skin-blue .main-header .navbar .dropdown-menu li.divider {
+                background-color: #eee;
+            }
+            .skin-blue .main-header .navbar .dropdown-menu li a {
+                color: #777;
+            }
+
+            .skin-blue .main-header .navbar .dropdown-menu li a:hover {
+                background: #eee;
+            }
+
+        }
+    </style>
+</head>

+ 66 - 0
application/common/view/public/header_view.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html style="background-color: #f9fafc;height: 100%;">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>后台管理</title>
+    <!-- Tell the browser to be responsive to screen width -->
+    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+    <!-- Bootstrap 3.3.5 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/bootstrap/css/bootstrap.min.css">
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/font-awesome.min.css">
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/ionicons.min.css">
+    <!-- Select2 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/select2/select2.min.css">
+    <!--选择框-->
+    <link rel='stylesheet' href="{:config('admin_static')}/plugins/iCheck/all.css">
+    <!-- ueditor-->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/ueditor/themes/default/css/ueditor.css"/>
+
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/daterangepicker/daterangepicker-bs3.css">
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/datepicker/datepicker3.css">
+    <!-- Bootstrap Color Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.css">
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.css">
+
+    <!-- Theme style -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/AdminLTE.min.css">
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/skins/_all-skins.min.css">
+
+    <!--[if lt IE 9]>
+    <script src="{:config('admin_static')}/adminLTE/js/html5shiv.min.js"></script>
+    <script src="{:config('admin_static')}/adminLTE/js/respond.min.js"></script>
+    <![endif]-->
+    <link rel="stylesheet" href="{:config('admin_static')}/css/my.css">
+    <style>
+        .table>tbody>tr>td{line-height: 2.3;}
+        .left{float: left;margin-right: 50px;}
+        .skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn {
+            height: 33px;
+            border: 1px solid transparent;
+            background-color: #ffffff;
+            box-shadow: none;
+            -webkit-transition: all .3s ease-in-out;
+            -o-transition: all .3s ease-in-out;
+            transition: all .3s ease-in-out;
+        }
+        @media (max-width: 767px){
+            .skin-blue .main-header .navbar .dropdown-menu li.divider {
+                background-color: #eee;
+            }
+            .skin-blue .main-header .navbar .dropdown-menu li a {
+                color: #777;
+            }
+
+            .skin-blue .main-header .navbar .dropdown-menu li a:hover {
+                background: #eee;
+            }
+
+        }
+    </style>
+</head>

文件差异内容过多而无法显示
+ 2045 - 0
application/common/view/public/icon.html


+ 71 - 0
application/common/view/public/index_pop.html

@@ -0,0 +1,71 @@
+<!--新增项目弹出层-->
+<div class="box box-info reveal-modal"  id="project_add">
+    <div class="box-header with-border">
+        <h3 class="box-title">新增项目</h3>
+    </div>
+    <!-- /.box-header -->
+    <!-- form start -->
+    <form action="{:url('project/project_add')}" class="form-horizontal" method="post">
+        <div class="box-body">
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">项目名称</label>
+                <div class="col-sm-9">
+                    <input type="text" name="project_name" class="form-control" placeholder="项目名称">
+                </div>
+            </div>
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">项目简介</label>
+                <div class="col-sm-9">
+                    <input type="text" name="project_about" class="form-control" placeholder="项目简介">
+                </div>
+            </div>
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">项目图标</label>
+                <div class="col-sm-9">
+                    <input type="text" name="project_icon" class="form-control" placeholder="项目图标">
+                </div>
+            </div>
+        </div>
+        <!-- /.box-body -->
+        <div class="box-footer">
+            <button type="submit" class="btn btn-info pull-right">新增</button>
+        </div>
+        <!-- /.box-footer -->
+    </form>
+</div>
+
+<div class="box box-info reveal-modal"  id="project_edit">
+    <div class="box-header with-border">
+        <h3 class="box-title">修改项目</h3>
+    </div>
+    <!-- /.box-header -->
+    <!-- form start -->
+    <form action="{:url('project/project_edit')}" class="form-horizontal" method="post">
+        <div class="box-body">
+            <input type="hidden" name="project_id" value="">
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">项目名称</label>
+                <div class="col-sm-9">
+                    <input type="text" name="project_name" class="form-control" placeholder="项目名称">
+                </div>
+            </div>
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">项目简介</label>
+                <div class="col-sm-9">
+                    <input type="text" name="project_about" class="form-control" placeholder="项目简介">
+                </div>
+            </div>
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">项目图标</label>
+                <div class="col-sm-9">
+                    <input type="text" name="project_icon" class="form-control" placeholder="项目图标">
+                </div>
+            </div>
+        </div>
+        <!-- /.box-body -->
+        <div class="box-footer">
+            <button type="submit" class="btn btn-info pull-right">修改</button>
+        </div>
+        <!-- /.box-footer -->
+    </form>
+</div>

+ 39 - 0
application/common/view/public/js.html

@@ -0,0 +1,39 @@
+<!-- jQuery 2.2.0 -->
+<script src="{:config('admin_static')}/plugins/jQuery/jQuery-2.1.4.min.js"></script>
+<!-- Bootstrap 3.3.6 -->
+<script src="{:config('admin_static')}/bootstrap/js/bootstrap.min.js"></script>
+<!-- Select2 -->
+<script src="{:config('admin_static')}/plugins/select2/select2.full.min.js"></script>
+<!-- InputMask -->
+<script src="{:config('admin_static')}/plugins/input-mask/jquery.inputmask.js"></script>
+<script src="{:config('admin_static')}/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
+<script src="{:config('admin_static')}/plugins/input-mask/jquery.inputmask.extensions.js"></script>
+<!-- date-range-picker -->
+<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>-->
+<script src="{:config('admin_static')}/plugins/daterangepicker/daterangepicker.js"></script>
+<!-- bootstrap datepicker -->
+<script src="{:config('admin_static')}/plugins/datepicker/bootstrap-datepicker.js"></script>
+<!-- bootstrap color picker -->
+<script src="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
+<!-- bootstrap time picker -->
+<script src="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.js"></script>
+<!-- SlimScroll 1.3.0 -->
+<script src="{:config('admin_static')}/plugins/slimScroll/jquery.slimscroll.min.js"></script>
+<!-- iCheck 1.0.1 -->
+<script src="{:config('admin_static')}/plugins/iCheck/icheck.min.js"></script>
+<!-- FastClick -->
+<script src="{:config('admin_static')}/plugins/fastclick/fastclick.js"></script>
+<!-- AdminLTE App -->
+<script src="{:config('admin_static')}/adminLTE/js/app.min.js"></script>
+<!-- AdminLTE for demo purposes -->
+<script src="{:config('admin_static')}/adminLTE/js/demo.js"></script>
+<!-- ueditor-->
+<script type="text/javascript" src="{:config('admin_static')}/plugins/ueditor/ueditor.config.js"></script>
+<script type="text/javascript" src="{:config('admin_static')}/plugins/ueditor/ueditor.all.js"></script>
+
+<script language="javascript" type="text/javascript" src="{:config('admin_static')}/plugins/date/WdatePicker.js"></script>
+<script type="text/javascript" src="{:config('admin_static')}/js/my.js"></script>
+
+<script type="text/javascript" src="{:config('admin_static')}/js/reveal/jquery.reveal.js"></script>
+<link rel="stylesheet" href="{:config('admin_static')}/js/reveal/reveal.css">
+

+ 35 - 0
application/common/view/public/left.html

@@ -0,0 +1,35 @@
+<aside class="main-sidebar">
+
+    <!-- sidebar: style can be found in sidebar.less -->
+    <section class="sidebar">
+        <!-- 用户信息-导航 -->
+        <div class="user-panel">
+            <div class="pull-left image">
+                <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" class="img-circle" alt="User Image">
+            </div>
+            <div class="pull-left info">
+                <p>{:cookie('user_base')['user_name']}</p>
+                <!-- Status -->
+                <a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
+            </div>
+        </div>
+
+        <!-- 搜索框 -->
+        <form action="#" method="get" class="sidebar-form">
+            <div class="input-group">
+                <input type="text" name="q" class="form-control" placeholder="搜索...">
+          <span class="input-group-btn">
+            <button type="submit" name="search" id="search-btn" class="btn btn-flat"><i class="fa fa-search"></i></button>
+          </span>
+            </div>
+        </form>
+        <!-- /.search form -->
+
+        <!-- Sidebar Menu -->
+        <ul class="sidebar-menu">
+            <li class="header">导航栏</li>
+            <!-- Optionally, you can add icons to the links -->
+        </ul><!-- /.sidebar-menu -->
+    </section>
+    <!-- /.sidebar -->
+</aside>

+ 59 - 0
application/common/view/public/left_show.html

@@ -0,0 +1,59 @@
+<aside id="left_scroll" style="overflow: scroll;overflow-x:hidden;z-index: 100;" class="main-sidebar">
+
+    <!-- sidebar: style can be found in sidebar.less -->
+    <section class="sidebar">
+        <!-- Sidebar Menu -->
+        <ul class="sidebar-menu">
+            <volist id="left" name="left_data">
+                <li class="treeview active">
+                    <span style="color: #000;background: #f4f4f5;font-weight: 600;border-left: 3px solid transparent;position: relative;padding: 12px 5px 12px 15px;display: block;" >
+                        <span>{$key}</span>
+                        <a onclick="return confirm('是否确认删除?');" href="{:url('cate/del',['cate_id'=>$left['cate_id'],'project_module_id'=>$project_module_id,'project_id'=>$project_id])}">
+                            <span style="margin: 0px;font-size: 100%" class="label label-danger pull-right">Del</span>
+                        </a>
+                        <a data-reveal-id="cate_edit" cate_name="{$key}" cate_id="{$left['cate_id']}" href="#">
+                            <span style="margin: 0px;font-size: 100%;margin-right: 5px;" class="label label-primary pull-right">Edit</span>
+                        </a>
+                        <!--<i class="fa fa-angle-double-down pull-right"></i>-->
+                    </span>
+                    <ul class="treeview-menu">
+                        <volist id="wiki_left" name="left['project_api']">
+                            <li >
+                            <span style=" padding: 5px 5px 5px 15px;display: block;font-size: 14px;">
+                                 <a <if condition="$project_api_id eq $wiki_left.id">style="color:#00acd6;font-weight:bolder;"</if> href="{:url('project/show',['project_module_id'=>$project_module_id,'project_id'=>$project_id,'project_api_id'=>$wiki_left['id']])}">
+                                        <i class="fa fa-circle-o"></i>
+                                        {$wiki_left.api_name}
+                                 </a>
+                                <a onclick="return confirm('是否确认删除?');" href="{:url('project/del',['project_module_id'=>$project_module_id,'project_id'=>$project_id,'project_api_id'=>$wiki_left['id']])}">
+                                    <span style="margin: 0px;font-size: 80%;margin-top: 1px;" class="badge bg-red pull-right">Del</span>
+                                </a>
+                                <!--<a href="{:url('project/show',['project_module_id'=>$project_module_id,'project_id'=>$project_id,'project_api_id'=>$wiki_left['id']])}">-->
+                                    <!--<span style="margin: 0px;font-size: 80%;margin-right: 5px;margin-top: 1px;" class="badge bg-light-blue pull-right">Edit</span>-->
+                                <!--</a>-->
+                            </span>
+                            </li>
+                        </volist>
+                        <li>
+                            <a  style="color: red;" href="{:url('project/add',['cate_id'=>$left['cate_id'],'project_module_id'=>$project_module_id,'project_id'=>$project_id])}">
+                                <i class="fa  fa-plus"></i>
+                                新增接口
+                            </a>
+                        </li>
+                    </ul>
+                </li>
+            </volist>
+            <notempty name='project_module_id'>
+                <li class="treeview active">
+                    <span style="color: #000;background: #f4f4f5;font-weight: 600;border-left: 3px solid transparent;position: relative;padding: 12px 5px 12px 15px;display: block;">
+                        <!--<a style="color: red;" id="add_cate" href="{:url('project/add_cate',['project_module_id'=>$project_module_id,'project_id'=>$project_id])}">-->
+                        <a data-reveal-id="add_cate" style="color: red;" href="#">
+                            <i class="fa  fa-plus"></i>
+                            新增分类
+                        </a>
+                    </span>
+                </li>
+            </notempty>
+        </ul><!-- /.sidebar-menu -->
+    </section>
+    <!-- /.sidebar -->
+</aside>

+ 23 - 0
application/common/view/public/left_view.html

@@ -0,0 +1,23 @@
+<aside id="left_scroll" style="overflow: scroll;overflow-x:hidden" class="main-sidebar">
+
+    <!-- sidebar: style can be found in sidebar.less -->
+    <section class="sidebar">
+        <!-- Sidebar Menu -->
+        <ul class="sidebar-menu">
+            <volist id="left" name="left_data">
+                <li class="treeview active">
+                    <span style="color: #000;background: #f4f4f5;font-weight: 600;border-left: 3px solid transparent;position: relative;padding: 12px 5px 12px 15px;display: block;" >
+                        <span>{$key}</span>
+                        <i class="fa fa-angle-double-down pull-right"></i>
+                    </span>
+                    <ul class="treeview-menu">
+                        <volist id="wiki_left" name="left['project_api']">
+                            <li <if condition="$project_api_id eq $wiki_left.id">class="active"</if>><a href="{:url('project/show',['project_module_id'=>$project_module_id,'project_id'=>$project_id,'project_api_id'=>$wiki_left['id']])}"><i class="fa fa-circle-o"></i>{$wiki_left.api_name}</a></li>
+                        </volist>
+                    </ul>
+                </li>
+            </volist>
+        </ul><!-- /.sidebar-menu -->
+    </section>
+    <!-- /.sidebar -->
+</aside>

+ 106 - 0
application/common/view/public/pop.html

@@ -0,0 +1,106 @@
+<!--新增分类弹出层-->
+<div class="box box-info reveal-modal"  id="add_cate">
+    <div class="box-header with-border">
+        <h3 class="box-title">新增分类</h3>
+    </div>
+    <!-- /.box-header -->
+    <!-- form start -->
+    <form action="{:url('cate/add')}" class="form-horizontal" method="post">
+        <input type="hidden" name="project_api_id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+        <input type="hidden" name="project_id" value="{$project_id}">
+        <input type="hidden" name="project_module_id" value="<notempty name='project_module_id'>{$project_module_id}</notempty>">
+        <div class="box-body">
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">分类名称</label>
+                <div class="col-sm-9">
+                    <input type="text" name="cate_name" class="form-control" placeholder="分类名">
+                </div>
+            </div>
+        </div>
+        <!-- /.box-body -->
+        <div class="box-footer">
+            <button type="submit" class="btn btn-info pull-right">新增</button>
+        </div>
+        <!-- /.box-footer -->
+    </form>
+</div>
+<!--修改分类弹出层-->
+<div class="box box-info reveal-modal"  id="cate_edit">
+    <div class="box-header with-border">
+        <h3 class="box-title">修改分类</h3>
+    </div>
+    <!-- /.box-header -->
+    <!-- form start -->
+    <form action="{:url('cate/edit')}" class="form-horizontal" method="post">
+        <input type="hidden" name="project_api_id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+        <input type="hidden" name="project_id" value="{$project_id}">
+        <input type="hidden" name="project_module_id" value="<notempty name='project_module_id'>{$project_module_id}</notempty>">
+        <input type="hidden" name="cate_id" value="">
+        <div class="box-body">
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">分类名称</label>
+                <div class="col-sm-9">
+                    <input type="text" name="cate_name" class="form-control" placeholder="分类名">
+                </div>
+            </div>
+        </div>
+        <!-- /.box-body -->
+        <div class="box-footer">
+            <button type="submit" class="btn btn-info pull-right">修改</button>
+        </div>
+        <!-- /.box-footer -->
+    </form>
+</div>
+<!--新增模块弹出层-->
+<div class="box box-info reveal-modal"  id="module_add">
+    <div class="box-header with-border">
+        <h3 class="box-title">新增模块</h3>
+    </div>
+    <!-- /.box-header -->
+    <!-- form start -->
+    <form action="{:url('module/add')}" class="form-horizontal" method="post">
+        <input type="hidden" name="project_api_id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+        <input type="hidden" name="project_id" value="{$project_id}">
+        <input type="hidden" name="project_module_id" value="<notempty name='project_module_id'>{$project_module_id}</notempty>">
+        <div class="box-body">
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">模块名称</label>
+                <div class="col-sm-9">
+                    <input type="text" name="model_name" class="form-control" placeholder="模块名">
+                </div>
+            </div>
+        </div>
+        <!-- /.box-body -->
+        <div class="box-footer">
+            <button type="submit" class="btn btn-info pull-right">新增</button>
+        </div>
+        <!-- /.box-footer -->
+    </form>
+</div>
+<!--修改模块弹出层-->
+<div class="box box-info reveal-modal"  id="module_edit">
+    <div class="box-header with-border">
+        <h3 class="box-title">修改模块</h3>
+    </div>
+    <!-- /.box-header -->
+    <!-- form start -->
+    <form action="{:url('module/edit')}" class="form-horizontal" method="post">
+        <input type="hidden" name="project_api_id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+        <input type="hidden" name="project_id" value="{$project_id}">
+        <input type="hidden" name="module_id" value="">
+        <input type="hidden" name="now_module_id" value="<notempty name='project_module_id'>{$project_module_id}</notempty>">
+        <div class="box-body">
+            <div class="form-group">
+                <label style="float:left;margin-left: 8px;"  class="control-label">模块名称</label>
+                <div class="col-sm-9">
+                    <input type="text" name="model_name" class="form-control" placeholder="模块名">
+                </div>
+            </div>
+        </div>
+        <!-- /.box-body -->
+        <div class="box-footer">
+            <button type="submit" class="btn btn-info pull-right">修改</button>
+        </div>
+        <!-- /.box-footer -->
+    </form>
+</div>

+ 30 - 0
application/common/view/public/title.html

@@ -0,0 +1,30 @@
+<section class="content-header">
+    <volist name="li_info" id="li_one"}
+        <notempty name="li_one['li_two']"}
+            <!--存在二级标题-->
+            <volist name="li_one['li_two']" id="li_two"}
+                <eq name="sign" value="$li_two.sign"}
+                    <h1>
+                        {$li_two.title}
+                        <small>{$li_two.description}</small>
+                    </h1>
+                    <ol class="breadcrumb">
+                        <li><i class="fa fa-dashboard"></i>{$li_one.title}</li>
+                        <li class="active"><a href="__MODULE__/<{$li_two.module}>">{$li_two.title}</a></li>
+                    </ol>
+                </eq>
+            </volist>
+            <else />
+            <!--不存在-->
+            <eq name="sign" value="$li_one.sign"}
+                <h1>
+                    {$li_one.title}
+                    <small>{$li_one.description}</small>
+                </h1>
+                <ol class="breadcrumb">
+                    <li><i class="fa fa-dashboard"></i><a href="__MODULE__/{$li_one.module}">{$li_one.title}</a></li>
+                </ol>
+            </eq>
+        </notempty>
+    </volist>
+</section>

+ 65 - 0
application/common/view/public/top.html

@@ -0,0 +1,65 @@
+<header class="main-header">
+    <!-- Logo -->
+    <a href="<php>echo url('Index/index');</php>" class="logo">
+        <!-- mini logo for sidebar mini 50x50 pixels -->
+        <span class="logo-mini"><b>后台</b>管理</span>
+        <!-- logo for regular state and mobile devices -->
+        <span class="logo-lg"><b>后台</b>管理</span>
+    </a>
+    <!-- Header Navbar -->
+    <nav class="navbar navbar-static-top" role="navigation">
+        <!-- Sidebar toggle button-->
+        <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
+            <span class="sr-only">Toggle navigation</span>
+        </a>
+        <!-- Navbar Right Menu -->
+        <div class="navbar-custom-menu">
+            <ul class="nav navbar-nav">
+                <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
+                <li><a href="#">Link</a></li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
+                    <ul class="dropdown-menu xiala" role="menu">
+                        <li><a href="#">Action</a></li>
+                        <li><a href="#">Another action</a></li>
+                        <li><a href="#">Something else here</a></li>
+                        <li class="divider"></li>
+                        <li><a  href="#">Separated link</a></li>
+                        <li class="divider"></li>
+                        <li><a href="#">One more separated link</a></li>
+                    </ul>
+                </li>
+                <!-- User Account Menu -->
+                <li class="dropdown user user-menu">
+                    <!-- Menu Toggle Button -->
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                        <!-- The user image in the navbar-->
+                        <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" class="user-image" alt="User Image">
+                        <!-- hidden-xs hides the username on small devices so only the image appears. -->
+                        <span class="hidden-xs">{:cookie('user_base')['user_name']}</span>
+                    </a>
+                    <ul class="dropdown-menu">
+                        <!-- The user image in the menu -->
+                        <li class="user-header">
+                            <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" class="img-circle" alt="User Image">
+                            <p>
+                                {:cookie('user_base')['user_name']}
+                                <small>创建日期:{:date('Y-m-d H:i:s',cookie('user_base')['create_time'])}</small>
+                                <small>最后登录日期:{:date('Y-m-d H:i:s',cookie('user_base')['update_time'])}</small>
+                            </p>
+                        </li>
+                        <!-- Menu Footer-->
+                        <li class="user-footer">
+                            <div class="pull-left">
+                                <a href="<php>echo url('Myinfo/index')</php>" class="btn btn-default btn-flat">个人信息</a>
+                            </div>
+                            <div class="pull-right">
+                                <a href="<php>echo url('User/logout')</php>" class="btn btn-default btn-flat">退&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出</a>
+                            </div>
+                        </li>
+                    </ul>
+                </li>
+            </ul>
+        </div>
+    </nav>
+</header>

+ 28 - 0
application/common/view/public/top_edit.html

@@ -0,0 +1,28 @@
+<header class="main-header">
+    <!-- Logo -->
+    <a href="{:url('Index/index')}" class="logo">
+        <!-- mini logo for sidebar mini 50x50 pixels -->
+        <span class="logo-mini"><b>api</b>/文档v0.1</span>
+        <!-- logo for regular state and mobile devices -->
+        <span class="logo-lg"><b>api</b>文档v0.1</span>
+    </a>
+    <!-- Header Navbar -->
+    <nav class="navbar navbar-static-top" role="navigation">
+        <!-- Navbar Right Menu -->
+        <div class="navbar-custom-menu">
+            <ul class="nav navbar-nav">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                        {:cookie('user_base')['user_name']}
+                        <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" style="float: left;width: 25px;height: 25px;border-radius: 50%;margin-right: 10px;margin-top: -2px;" alt="User Image">
+                    </a>
+                    <ul class="dropdown-menu xiala" role="menu">
+                        <!--<li class="divider"></li>-->
+                        <li><a  href="{:url('user/logout')}">退出</a></li>
+                        <!--<li class="divider"></li>-->
+                    </ul>
+                </li>
+            </ul>
+        </div>
+    </nav>
+</header>

+ 50 - 0
application/common/view/public/top_show.html

@@ -0,0 +1,50 @@
+<header class="main-header">
+    <!-- Logo -->
+    <a href="{:url('Index/index')}" class="logo">
+        <!-- mini logo for sidebar mini 50x50 pixels -->
+        <span class="logo-mini"><b>api</b>/文档v0.1</span>
+        <!-- logo for regular state and mobile devices -->
+        <span class="logo-lg"><b>api</b>文档v0.1</span>
+    </a>
+    <!-- Header Navbar -->
+    <nav class="navbar navbar-static-top" role="navigation">
+        <!-- Navbar Right Menu -->
+        <div class="navbar-custom-menu">
+            <ul class="nav navbar-nav">
+                <volist id="vo" name="project_module_data">
+                    <li <if condition="$vo['id'] eq $project_module_id">class="active"</if> >
+                        <a style="padding-right: 0px;" href="{:url('project/show',['project_module_id'=>$vo['id'],'project_id'=>$project_id])}">
+                            {$vo.model_name}
+                        </a>
+                    </li>
+                    <li class="dropdown">
+                        <a style="border-left: none;font-size: 17px;" href="#" class="dropdown-toggle" data-toggle="dropdown">
+                            <i class="fa fa-angle-double-down"></i>
+                        </a>
+                        <ul class="dropdown-menu xiala" role="menu">
+                            <li><a data-reveal-id="module_edit" model_name="{$vo.model_name}" model_id="{$vo.id}" href="#">修改</a></li>
+                            <li><a onclick="return confirm('是否确认删除?');"  href="{:url('module/del',['project_module_id'=>$vo['id'],'project_id'=>$project_id])}">删除</a></li>
+                        </ul>
+                    </li>
+                </volist>
+                <li>
+                    <a data-reveal-id="module_add" href="#">
+                        <i style="font-size: 17px;" class="fa  fa-plus"></i>
+                    </a>
+                </li>
+
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                        {:cookie('user_base')['user_name']}
+                        <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" style="float: left;width: 25px;height: 25px;border-radius: 50%;margin-right: 10px;margin-top: -2px;" alt="User Image">
+                    </a>
+                    <ul class="dropdown-menu xiala" role="menu">
+                        <!--<li class="divider"></li>-->
+                        <li><a  href="{:url('user/logout')}">退出</a></li>
+                        <!--<li class="divider"></li>-->
+                    </ul>
+                </li>
+            </ul>
+        </div>
+    </nav>
+</header>

+ 28 - 0
application/common/view/public/top_view.html

@@ -0,0 +1,28 @@
+<header class="main-header">
+    <!-- Logo -->
+    <a href="{:url('Index/index')}" class="logo">
+        <!-- mini logo for sidebar mini 50x50 pixels -->
+        <span class="logo-mini"><b>api</b>/文档v0.1</span>
+        <!-- logo for regular state and mobile devices -->
+        <span class="logo-lg"><b>api</b>文档v0.1</span>
+    </a>
+    <!-- Header Navbar -->
+    <nav class="navbar navbar-static-top" role="navigation">
+
+        <!-- Navbar Right Menu -->
+        <div class="navbar-custom-menu">
+            <ul style="margin-right: 15px;" class="nav navbar-nav">
+                <notempty name="project_id">
+                    <volist id="vo" name="project_module_data">
+                        <li <if condition="$vo['id'] eq $project_module_id">class="active"</if> >
+                        <a href="{:url('project/show',['project_module_id'=>$vo['id'],'project_id'=>$project_id])}">
+                            {$vo.model_name}
+                        </a>
+                        </li>
+                    </volist>
+                </notempty>
+                <li><a href="{:url('edit/index/index')}">项目管理</a></li>
+            </ul>
+        </div>
+    </nav>
+</header>

+ 64 - 0
application/common/view/waring/jump.html

@@ -0,0 +1,64 @@
+<extend name="common@public:base" />
+<block name="title">
+    <title>
+        <?php switch ($code) {?>
+        <?php case 1:?>
+        操作成功
+        <?php break;?>
+        <?php case 0:?>
+        操作失败
+        <?php break;?>
+        <?php } ?>
+    </title>
+</block>
+<block name="body">
+<style>
+    @media (max-width: 991px){
+       #error {
+            text-align: center;
+        }
+    }
+</style>
+<!-- Main content -->
+<section class="content">
+    <div class="error-page">
+
+        <h2 class="headline text-yellow">
+            <?php switch ($code) {?>
+            <?php case 1:?>
+            :)
+            <?php break;?>
+            <?php case 0:?>
+            :(
+            <?php break;?>
+            <?php } ?>
+        </h2>
+        <div class="error-content">
+            <h3>&nbsp;</h3>
+            <h3><i class="fa fa-warning text-yellow"></i><?php echo(strip_tags($msg));?></h3>
+
+                <div id="error" style="width: 100%;" class="input-group">
+                        页面自动 <a id="href" href="<?php echo($url);?>">跳转</a><i class="fa fa-hourglass-half"></i> 等待时间: <b id="wait"><?php echo($wait);?></b>
+                </div>
+                <!-- /.input-group -->
+        </div>
+        <!-- /.error-content -->
+    </div>
+    <!-- /.error-page -->
+</section>
+<!-- /.content -->
+</block>
+<block name="js">
+    <script type="text/javascript">
+        (function(){
+            var wait = document.getElementById('wait'),href = document.getElementById('href').href;
+            var interval = setInterval(function(){
+                var time = --wait.innerHTML;
+                if(time <= 0) {
+                    location.href = href;
+                    clearInterval(interval);
+                };
+            }, 1000);
+        })();
+    </script>
+</block>

+ 1 - 0
application/edit/common.php

@@ -0,0 +1 @@
+<?php ?>

+ 57 - 0
application/edit/config.php

@@ -0,0 +1,57 @@
+<?php
+return [
+    // 默认模块名
+//    'default_module'        => 'admin',
+    // 默认控制器名
+    'default_controller'    => 'index',
+    // 默认操作名
+    'default_action'        => 'index',
+
+    // +----------------------------------------------------------------------
+    // | 会话设置
+    // +----------------------------------------------------------------------
+
+    'session'                => [
+        'id'             => '',
+        // SESSION_ID的提交变量,解决flash上传跨域
+        'var_session_id' => '',
+        // SESSION 前缀
+        'prefix'         => 'admin_',
+        // 驱动方式 支持redis memcache memcached
+        'type'           => '',
+        // 是否自动开启 SESSION
+        'auto_start'     => true,
+    ],
+
+
+    // +----------------------------------------------------------------------
+    // | Cookie设置
+    // +----------------------------------------------------------------------
+    'cookie'                 => [
+        // cookie 名称前缀
+        'prefix'    => 'admin_',
+        // cookie 保存时间
+        'expire'    => 0,
+        // cookie 保存路径
+        'path'      => '/',
+        // cookie 有效域名
+        'domain'    => '',
+        //  cookie 启用安全传输
+        'secure'    => false,
+        // httponly设置
+        'httponly'  => '',
+        // 是否使用 setcookie
+        'setcookie' => true,
+    ],
+
+//默认错误跳转对应的模板文件
+    'dispatch_error_tmpl' => 'common@waring/jump',
+//默认成功跳转对应的模板文件
+    'dispatch_success_tmpl' => 'common@waring/jump',
+
+    'admin_static' =>  '/static',
+    'upload_path'=>  '',
+
+    'admin_is_trator' =>  [1],
+
+];

+ 28 - 0
application/edit/controller/Base.php

@@ -0,0 +1,28 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: xun
+ * Date: 2016/7/27
+ * Time: 9:26
+ */
+
+namespace app\edit\controller;
+use think\Controller;
+use think\Request;
+
+class Base extends Controller{
+    public function _initialize()
+    {
+        $aid=is_login(config('myconfig.admin_cookie_key'),db('AdminUser'),model('common/AdminUser'));
+
+        if( !$aid ){// 还没登录 跳转到登录页面
+            $this->redirect(url('User/login'));
+        }
+        //权限验证
+        $this->aid=$aid;
+        $request=Request::instance();
+//        if (!authCheck($request->module(),$request->controller(),$request->action(),$this->aid))        {
+//            $this->error('你没有权限!');
+//        }
+    }
+}

+ 66 - 0
application/edit/controller/Cate.php

@@ -0,0 +1,66 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: xun
+ * Date: 2016/9/8
+ * Time: 15:24
+ */
+
+namespace app\edit\controller;
+
+
+class Cate extends Base
+{
+    public function del(){
+        $project_cate_id=input('param.cate_id');
+        $project_id=input('param.project_id');
+        $project_module_id=input('param.project_module_id');
+        if(empty($project_cate_id) || empty($project_id) || empty($project_module_id) ){
+            $this->error('参数错误!');
+        }
+        $model=model('common/ProjectApi');
+        $model_1=model('common/ProjectCate');
+        $data_1=$model_1->where(['id'=>$project_cate_id])->delete();
+        $data=$model->where(['project_cate_id'=>$project_cate_id])->delete();
+        if($data_1){
+            $this->redirect('project/show',['project_id'=>$project_id,'project_module_id'=>$project_module_id]);
+        }else{
+            $this->error('删除失败!');
+        }
+    }
+
+    public function add(){
+        $project_api_id=input('param.project_api_id');
+        $project_id=input('param.project_id');
+        $project_module_id=input('param.project_module_id');
+        $cate_name=input('param.cate_name');
+        if(empty($project_id) || empty($project_module_id) ||empty($cate_name)){
+            $this->error('参数错误!');
+        }
+        $model=model('common/ProjectCate');
+        if($model->data(['cate_name'=>$cate_name,'project_module_id'=>$project_module_id,'project_id'=>$project_id])->save()){
+            $this->redirect('project/show',['project_id'=>$project_id,'project_module_id'=>$project_module_id,'project_api_id'=>$project_api_id]);
+        }else{
+            $this->error('新增失败!');
+        }
+
+    }
+
+    public function edit(){
+        $project_api_id=input('param.project_api_id');
+        $project_id=input('param.project_id');
+        $project_module_id=input('param.project_module_id');
+        $cate_name=input('param.cate_name');
+        $cate_id=input('param.cate_id');
+        if(empty($project_id) || empty($project_module_id) ||empty($cate_name) || empty($cate_id)){
+            $this->error('参数错误!');
+        }
+        $model=model('common/ProjectCate');
+        if($model->save(['cate_name'=>$cate_name],['id'=>$cate_id])){
+            $this->redirect('project/show',['project_id'=>$project_id,'project_module_id'=>$project_module_id,'project_api_id'=>$project_api_id]);
+        }else{
+            $this->error('修改失败!');
+        }
+
+    }
+}

+ 20 - 0
application/edit/controller/Index.php

@@ -0,0 +1,20 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/5
+ * Time: 22:52
+ */
+
+namespace app\edit\controller;
+
+
+class Index extends Base
+{
+    public function index(){
+        $model=model('common/Project');
+        $data=$model->select();
+        $this->assign('data',$data);
+        return $this->fetch('index');
+    }
+}

+ 66 - 0
application/edit/controller/Module.php

@@ -0,0 +1,66 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/8
+ * Time: 23:49
+ */
+
+namespace app\edit\controller;
+
+class Module extends Base
+{
+    public function add(){
+        $project_api_id=input('param.project_api_id');
+        $project_id=input('param.project_id');
+        $project_module_id=input('param.project_module_id');
+        $module_name=input('param.model_name');
+        if(empty($project_id) || empty($module_name)){
+            $this->error('参数错误!');
+        }
+        $model=model('common/ProjectModule');
+        if($model->data(['model_name'=>$module_name,'project_id'=>$project_id])->save()){
+            $this->redirect('project/show',['project_id'=>$project_id,'project_module_id'=>$project_module_id,'project_api_id'=>$project_api_id]);
+        }else{
+            $this->error('新增失败!');
+        }
+
+    }
+
+    public function del(){
+        $project_id=input('param.project_id');
+        $project_module_id=input('param.project_module_id');//模块id
+        $model_module=db('ProjectModule');
+        $model_cate=db('ProjectCate');
+        $model_api=db('ProjectApi');
+        if(empty($project_id) || empty($project_module_id)){
+            $this->error('非法参数');
+        }
+
+        if($model_module->where(['id'=>$project_module_id])->delete()){
+            $model_api->where(['project_module_id'=>$project_module_id])->delete();
+            $model_cate->where(['project_module_id'=>$project_module_id])->delete();
+            $this->redirect('Project/show',['project_id'=>$project_id]);
+        }else{
+            $this->error('删除失败!');
+        }
+    }
+
+    public function edit(){
+        $project_api_id=input('param.project_api_id');//当前文档
+        $project_id=input('param.project_id');//当前项目
+        $project_module_id=input('param.module_id');//修改的模块id
+        $project_now_model_id=input('param.now_module_id');//当前模块
+        $model_name=input('param.model_name');
+
+        if(empty($project_id) || empty($project_module_id) ||empty($model_name) || empty($project_module_id)){
+            $this->error('参数错误!');
+        }
+        $model=model('common/ProjectModule');
+        if($model->save(['model_name'=>$model_name],['id'=>$project_module_id])){
+            $this->redirect('project/show',['project_id'=>$project_id,'project_module_id'=>$project_now_model_id,'project_api_id'=>$project_api_id]);
+        }else{
+            $this->error('修改失败!');
+        }
+    }
+}

+ 302 - 0
application/edit/controller/Project.php

@@ -0,0 +1,302 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/9/6
+ * Time: 23:09
+ */
+
+namespace app\edit\controller;
+
+
+class Project extends Base
+{
+    public function show(){
+        if(request()->post()){
+            $data=input('param.');
+            $id=$data['id'];
+            if(empty($id)){
+                $this->error('参数错误!');
+            }
+
+            if(!empty($data['request_name'])){
+                $request_name=$data['request_name'];
+                $api_parameter_array=[];
+                foreach ($request_name as $k=>$v){
+                    if(!empty($v)){
+                        $api_parameter_array[]=[
+                            'request_name' => $v,
+                            'request_must' => $data['request_must'][$k],
+                            'request_type'  => $data['request_type'][$k],
+                            'request_remark' => $data['request_remark'][$k],
+                        ];
+                    }
+                }
+                $data['api_parameter']=json_encode($api_parameter_array);
+            }
+            if(!empty($data['back_name'])){
+                $back_name=$data['back_name'];
+                $api_re_array=[];
+                foreach ($back_name as $k=>$v){
+                    if(!empty($v)){
+                        $api_re_array[]=[
+                            'back_name' => $v,
+                            'back_must' => $data['back_must'][$k],
+                            'back_type'  => $data['back_type'][$k],
+                            'back_remark' => $data['back_remark'][$k],
+                        ];
+                    }
+                }
+                $data['api_re']=json_encode($api_re_array);
+            }
+            $model=model('common/ProjectApi');
+            if(!$model->allowField(true)->save($data,['id'=>$id])){
+                $this->error('修改失败!');
+            }
+
+        }
+
+        $project_id=input('param.project_id');
+        if(!$project_id){
+            $this->redirect('index/index');
+        }
+        //模块数据
+        $project_module_data=project_module($project_id);
+        //模块id
+        $project_module_id=input('param.project_module_id');
+        if(!$project_module_id){
+            if($project_module_data){
+                $project_module_id=$project_module_data[0]['id'];
+            }else{
+                $project_module_data=[];
+            }
+        }
+        //分类数据
+        $project_cate_data=[];
+        if($project_module_id){
+            $project_cate_data=project_cate($project_module_id);
+        }
+        $left_data=[];//左侧导航菜单
+        if(!empty($project_cate_data)){
+            foreach ($project_cate_data as $k=>$v){
+                $left_data[$v['cate_name']]=[
+                    'cate_id' => $v['id'],
+                    'project_api' => project_api($v['id']),
+                ];
+            }
+        }
+        //接口文档id
+        $project_api_id=input('param.project_api_id');
+        $project_api_data=[];//接口文档数据
+        if(empty($project_api_id)){
+            if(!empty($left_data)){
+                foreach ($left_data as $k=>$v){
+                    if(!empty($v['project_api'])){
+                        $project_api_data=api_wiki($v['project_api'][0]['id']);
+                        $project_api_id=$v['project_api'][0]['id'];
+                        break;
+                    }
+                }
+            }
+        }else{
+            $project_api_data=api_wiki($project_api_id);
+        }
+        if(empty($project_api_data)){
+            $project_request_data=[];
+        }else{
+            $project_request_data=json_decode($project_api_data['api_parameter'],true);
+        }
+        if(empty($project_api_data)){
+            $project_back_data=[];
+        }else{
+            $project_back_data=json_decode($project_api_data['api_re'],true);
+        }
+
+//        var_dump($project_api_data);exit;
+        $this->assign('project_api_data',$project_api_data);//接口文档数据
+        $this->assign('left_data',$left_data);//左侧导航菜单
+        $this->assign('project_module_data',$project_module_data);//模块数据
+        $this->assign('project_id',$project_id);//项目id
+        $this->assign('project_module_id',$project_module_id);//模块id
+        $this->assign('project_api_id',$project_api_id);//文档id
+        $this->assign('project_url',project_url($project_id));//url数据
+        $this->assign('request_data',request_data());//请求类型
+        $this->assign('project_request_data',$project_request_data);//请求数据
+        $this->assign('project_back_data',$project_back_data);//返回数据
+        $this->assign('data_type',data_type());//数据类型
+        $this->assign('js_data_type',json_encode(data_type()));//数据类型json
+
+        return $this->fetch('show');
+    }
+
+    public function add(){
+        $project_id=input('param.project_id');
+        if(!$project_id){
+            $this->redirect('index/index');
+        }
+        //模块数据
+        $project_module_data=project_module($project_id);
+        //模块id
+        $project_module_id=input('param.project_module_id');
+        if(!$project_module_id){
+            if($project_module_data){
+                $project_module_id=$project_module_data[0]['id'];
+            }else{
+                $project_module_data=[];
+            }
+        }
+        if(request()->post()){
+            $data=input('param.');
+
+            if(!empty($data['request_name'])){
+                $request_name=$data['request_name'];
+                $api_parameter_array=[];
+                foreach ($request_name as $k=>$v){
+                    if(!empty($v)){
+                        $api_parameter_array[]=[
+                            'request_name' => $v,
+                            'request_must' => $data['request_must'][$k],
+                            'request_type'  => $data['request_type'][$k],
+                            'request_remark' => $data['request_remark'][$k],
+                        ];
+                    }
+                }
+                $data['api_parameter']=json_encode($api_parameter_array);
+            }
+            if(!empty($data['back_name'])){
+                $back_name=$data['back_name'];
+                $api_re_array=[];
+                foreach ($back_name as $k=>$v){
+                    if(!empty($v)){
+                        $api_re_array[]=[
+                            'back_name' => $v,
+                            'back_must' => $data['back_must'][$k],
+                            'back_type'  => $data['back_type'][$k],
+                            'back_remark' => $data['back_remark'][$k],
+                        ];
+                    }
+                }
+                $data['api_re']=json_encode($api_re_array);
+            }
+//            dump($data);exit;
+            $model=model('common/ProjectApi');
+            if(!$model->data($data)->allowField(true)->save()){
+                $this->error('新增失败!');
+            }else{
+                $this->redirect('project/show',['project_id'=>$project_id,'project_module_id'=>$project_module_id,'project_api_id'=>$model->id]);
+            }
+
+        }
+
+
+        $cate_id=input('param.cate_id');
+        if(!$cate_id){
+            $this->redirect('index/index');
+        }
+
+
+        //分类数据
+        $project_cate_data=[];
+        if($project_module_id){
+            $project_cate_data=project_cate($project_module_id);
+        }
+        $left_data=[];//左侧导航菜单
+        if(!empty($project_cate_data)){
+            foreach ($project_cate_data as $k=>$v){
+                $left_data[$v['cate_name']]=[
+                    'cate_id' => $v['id'],
+                    'project_api' => project_api($v['id']),
+                ];
+            }
+        }
+
+        $this->assign('left_data',$left_data);//左侧导航菜单
+        $this->assign('project_module_data',$project_module_data);//模块数据
+        $this->assign('project_id',$project_id);//项目id
+        $this->assign('project_module_id',$project_module_id);//模块id
+        $this->assign('project_api_id','');//文档id
+        $this->assign('project_url',project_url($project_id));//url数据
+        $this->assign('request_data',request_data());//请求类型
+        $this->assign('project_cate_id',$cate_id);//分类id
+        $this->assign('data_type',data_type());//数据类型
+        $this->assign('js_data_type',json_encode(data_type()));//数据类型json
+
+        return $this->fetch('add');
+    }
+
+    public function del(){
+        $project_api_id=input('param.project_api_id');
+        $project_id=input('param.project_id');
+        $project_module_id=input('param.project_module_id');
+        if(empty($project_api_id) || empty($project_id) || empty($project_module_id) ){
+            $this->error('参数错误!');
+        }
+        $model=model('common/ProjectApi');
+        if(!$model->where(['id'=>$project_api_id])->delete()){
+            $this->error('删除失败!');
+        }else{
+            $this->redirect('project/show',['project_id'=>$project_id,'project_module_id'=>$project_module_id]);
+        }
+    }
+
+    public function project_add(){
+        $project_name=input('param.project_name');
+        $project_about=input('param.project_about');
+        $project_icon=input('param.project_icon');
+        if(empty($project_name) || empty($project_about)){
+            $this->error('参数错误');
+        }
+        $data=[
+            'project_name'=> $project_name,
+            'project_about'=>$project_about,
+            'project_icon'=>$project_icon,
+        ];
+        $model=model('common/Project');
+        if($model->data($data)->allowField(true)->save()){
+            $this->redirect('index/index');
+        }else{
+            $this->error('新增失败!');
+        }
+    }
+
+    public function project_edit(){
+        $project_name=input('param.project_name');
+        $project_about=input('param.project_about');
+        $project_icon=input('param.project_icon');
+        $project_id=input('param.project_id');
+        if(empty($project_name) || empty($project_about) || empty($project_id)){
+            $this->error('参数错误');
+        }
+        $data=[
+            'project_name'=> $project_name,
+            'project_about'=>$project_about,
+            'project_icon'=>$project_icon,
+        ];
+        $model=model('common/Project');
+        if($model->save($data,['id'=>$project_id])){
+            $this->redirect('index/index');
+        }else{
+            $this->error('修改失败!');
+        }
+    }
+
+    public function project_del(){
+        $project_id=input('param.id');
+        $model_project=db('Project');
+        $model_module=db('ProjectModule');
+        $model_cate=db('ProjectCate');
+        $model_api=db('ProjectApi');
+        if(empty($project_id)){
+            $this->error('非法参数');
+        }
+
+        if($model_project->where(['id'=>$project_id])->delete()){
+            $model_module->where(['project_id'=>$project_id])->delete();
+            $model_api->where(['project_id'=>$project_id])->delete();
+            $model_cate->where(['project_id'=>$project_id])->delete();
+            $this->redirect('index/index');
+        }else{
+            $this->error('删除失败!');
+        }
+    }
+}

+ 115 - 0
application/edit/controller/User.php

@@ -0,0 +1,115 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 珣
+ * Date: 2016/7/30
+ * Time: 16:13
+ */
+
+namespace app\edit\controller;
+use think\Controller;
+
+class User extends Controller{
+    public function login(){
+        if(request()->isPost()){
+            $user_mobile=input('post.user_mobile');
+            $user_password=input('post.user_password');
+            $verify=input('post.verify');
+            $remember=input('post.remember');
+            $data=[
+                'user_mobile' =>   $user_mobile,
+                'user_password' => $user_password,
+                'verify'        =>  $verify,
+            ];
+            $result=$this->validate($data,'AdminUser.login');
+//            if($result!==true){
+//                $this->error($result);
+//            }else{
+                $model=model('common/AdminUser');
+                $uid=$model->login($user_mobile,$user_password,$type = 1,$remember);
+                if (0 < $uid) { // UC登录成功
+                    /* 登录用户 */
+                    return $this->success('登陆成功!','Index/index');
+                } else { // 登录失败
+                    switch ($uid) {
+                        case - 1 :
+                            $error = '用户不存在或被禁用!';
+                            break; // 系统级别禁用
+                        case - 2 :
+                            $error = '密码错误!';
+                            break;
+                        default :
+                            $error = '未知错误!';
+                            break; // 0-接口参数错误(调试阶段使用)
+                    }
+                    $this->error ( $error );
+                }
+
+//            }
+        }else{
+            return $this->fetch('login');
+        }
+    }
+    public function logout(){
+        $model=model('common/AdminUser');
+        $model->logout();
+        return $this->success('退出成功','index/index/index');
+    }
+
+    public function register(){
+        if(request()->isAjax()){
+            $data=input('param.');
+            $result=$this->validate($data,'SayUser.add');
+            if(true !== $result){
+                // 验证失败 输出错误信息
+                json_send([],$result,0);
+            }
+
+            verify(input('param.verify'),input('param.user_mobile'),1,60*5);
+
+            $user_model=model('common/SayUser');
+            $add_data=[
+                'user_name' => input('param.user_mobile'),
+                'user_mobile' =>input('param.user_mobile'),
+                'user_password' =>input('param.user_password'),
+            ];
+
+            if($user_model->data($add_data)->save()){
+                clear_verify(input('param.user_mobile'),1);
+                json_send();
+            }else{
+                json_send([],40023,0);
+            }
+        }else{
+            return $this->fetch('register');
+        }
+
+    }
+
+    public function forget_password(){
+        if(request()->isAjax()){
+            $data=input('param.');
+            $result=$this->validate($data,'SayUser.add');
+            if(true !== $result){
+                // 验证失败 输出错误信息
+                json_send([],$result,0);
+            }
+
+            verify(input('param.verify'),input('param.user_mobile'),2,60*5);
+
+            $user_model=model('common/SayUser');
+            $update_data=[
+                'user_password' =>input('param.user_password'),
+            ];
+
+            if($user_model->save($update_data,['user_mobile'=>input('param.user_mobile')])){
+                clear_verify(input('param.user_mobile'),2);
+                json_send();
+            }else{
+                json_send([],40023,0);
+            }
+        }else{
+            return $this->fetch('forget_password');
+        }
+    }
+}

+ 70 - 0
application/edit/view/index/index.html

@@ -0,0 +1,70 @@
+<extend name="common@public:base_edit" ></extend>
+<block name="body">
+    <div class="row">
+
+        <volist id="vo" name="data">
+            <div class="col-lg-3 col-xs-6">
+                <!-- small box -->
+                <div style=" box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.37);" class="small-box {:color()}">
+                    <a href="{:url('project/show',['project_id'=>$vo['id']])}">
+                        <div style="color: rgb(59, 59, 59);padding: 10px;" class="inner">
+                            <h3>{$vo.project_name}</h3>
+                            <p>{$vo.project_about}</p>
+                        </div>
+                        <div class="icon">
+                            <i style="margin-top: 15px;" class="{$vo.project_icon}"></i>
+                        </div>
+                    </a>
+                    <a data-reveal-id="project_edit" project_id="{$vo['id']}" project_name="{$vo['project_name']}" project_icon="{$vo['project_icon']}" project_about="{$vo['project_about']}" href="#" class="small-box-footer">
+                        修改
+                        <i class="fa fa-arrow-circle-right"></i>
+                    </a>
+                    <a onclick="return confirm('是否确认删除?');" href="{:url('project/project_del',['id'=>$vo['id']])}" class="small-box-footer">
+                        删除
+                        <i class="fa fa-arrow-circle-right"></i>
+                    </a>
+                </div>
+            </div>
+            <!-- ./col -->
+        </volist>
+
+
+        <div class="col-lg-3 col-xs-6">
+            <!-- small box -->
+            <div style=" box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.37);" class="small-box btn_default">
+                <a data-reveal-id="project_add" href="#">
+                    <div style="color: rgba(54, 54, 54, 0.65);padding: 10px;" class="inner">
+                        <h3>新增</h3>
+                        <p>项目</p>
+                    </div>
+                    <div class="icon">
+                        <i style="margin-top: 15px;" class="fa  fa-plus"></i>
+                    </div>
+                </a>
+                <a data-reveal-id="project_add" style="color:  rgba(54, 54, 54, 0.65);" class="small-box-footer" href="#">
+                    &nbsp;
+                </a>
+                <a data-reveal-id="project_add" style="color:  rgba(54, 54, 54, 0.65);" class="small-box-footer" href="#">
+                    点击新增
+                    <i class="fa fa-arrow-circle-right"></i>
+                </a>
+            </div>
+        </div>
+
+        <!-- ./col -->
+    </div>
+</block>
+<block name="js">
+    <script>
+        $("[data-reveal-id='project_edit']").click(function () {
+            var project_id=$(this).attr('project_id');
+            var project_name=$(this).attr('project_name');
+            var project_icon=$(this).attr('project_icon');
+            var project_about=$(this).attr('project_about');
+            $('[name="project_id"]').val(project_id);
+            $('[name="project_name"]').val(project_name);
+            $('[name="project_icon"]').val(project_icon);
+            $('[name="project_about"]').val(project_about);
+        });
+    </script>
+</block>

+ 320 - 0
application/edit/view/project/add.html

@@ -0,0 +1,320 @@
+<extend name="common@public:base_show" ></extend>
+<block name="body">
+    <div class="col-md-12">
+        <!-- Horizontal Form -->
+        <div class="box box-info">
+            <div class="box-header with-border">
+                <h3 class="box-title">接口新增</h3>
+            </div><!-- /.box-header -->
+            <!-- form start -->
+            <style>
+                .input-group-btn label{
+                    width: 150px;
+                }
+            </style>
+            <form action="{:url('Project/add')}" enctype="multipart/form-data" method="post">
+                <input type="hidden" name="project_cate_id" value="{$project_cate_id}">
+                <input type="hidden" name="project_id" value="{$project_id}">
+                <input type="hidden" name="project_module_id" value="{$project_module_id}">
+                <div class="box-body">
+                    <!-- text input -->
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">接口名称</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input name="api_name" value="" type="text" class="form-control">
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">请求类型</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <select name="request_type_id" class="form-control select2">
+                            <volist id="post" name="request_data">
+                                <option value="{$post.id}">{$post.type_name}</option>
+                            </volist>
+                        </select>
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">请求domain</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <select name="project_url_id" class="form-control select2">
+                            <volist id="url" name="project_url">
+                                <option  value="{$url.id}">{$url.url_domain}</option>
+                            </volist>
+                        </select>
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">请求url</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input name="api_url" type="text" value="" class="form-control">
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">接口描述</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input name="api_des" type="text" value="" class="form-control">
+                    </div>
+                </div><!-- /.box-body -->
+
+                <div class="box-header with-border">
+                    <h3 class="box-title">请求参数列表</h3>
+                </div><!-- /.box-header -->
+
+                <div class="box-body">
+                    <table  class="table table-bordered">
+                        <tbody id="request">
+                        <tr>
+                            <th style="width: 200px;">参数名</th>
+                            <th style="width: 100px;">必选</th>
+                            <th style="width: 200px;">类型</th>
+                            <th>说明</th>
+                            <th style="padding: 0 0 0 8px;width: 70px;">
+                                <button type="button" id="add_request" class="btn btn-primary btn-flat">新增</button>
+                            </th>
+                        </tr>
+                            <!--<tr>-->
+                                <!--<td>-->
+                                    <!--<input class="form-control" type="text" name="request_name[]" value="">-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<select name="request_must[]" class="form-control select2">-->
+                                        <!--<option selected="selected"  value="Y">Y</option>-->
+                                        <!--<option  value="N">N</option>-->
+                                    <!--</select>-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<select name="request_type[]" class="form-control select2">-->
+                                        <!--<volist id="type" name="data_type">-->
+                                            <!--<option  value="{$type.id}">{$type.type_name}</option>-->
+                                        <!--</volist>-->
+                                    <!--</select>-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<input class="form-control" type="text" name="request_remark[]" value="">-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<button name="del" type="button" class="btn btn-danger btn-flat">删除</button>-->
+                                <!--</td>-->
+                            <!--</tr>-->
+                        </tbody>
+                    </table>
+                    <div style="margin-top: 10px;" class="">
+                        <label>请求json格式</label>
+                        <textarea id="api_parameter_json" style="width:100%;height: 200px;margin-left: 5px;" class="form-group" name="api_parameter_json"></textarea>
+                    </div>
+                </div>
+                <div class="box-header with-border">
+                    <h3 class="box-title">响应参数列表</h3>
+                </div><!-- /.box-header -->
+                <div class="box-body">
+                    <table class="table table-bordered">
+                        <tbody id="back">
+                        <tr>
+                            <th style="width: 200px;">参数名</th>
+                            <th style="width: 100px;">必选</th>
+                            <th style="width: 200px;">类型</th>
+                            <th>说明</th>
+                            <th style="padding: 0 0 0 8px;width: 70px;">
+                                <button type="button" id="add_back" class="btn btn-primary btn-flat">新增</button>
+                            </th>
+                        </tr>
+                            <!--<tr>-->
+                                <!--<td>-->
+                                    <!--<input class="form-control" type="text" name="back_name[]" value="">-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<select name="back_must[]" class="form-control select2">-->
+                                        <!--<option selected='selected'  value="Y">Y</option>-->
+                                        <!--<option  value="N">N</option>-->
+                                    <!--</select>-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<select name="back_type[]" class="form-control select2">-->
+                                        <!--<volist id="type" name="data_type">-->
+                                            <!--<option  value="{$type.id}">{$type.type_name}</option>-->
+                                        <!--</volist>-->
+                                    <!--</select>-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<input class="form-control" type="text" name="back_remark[]" value="">-->
+                                <!--</td>-->
+                                <!--<td>-->
+                                    <!--<button name="del" type="button" class="btn btn-danger btn-flat">删除</button>-->
+                                <!--</td>-->
+                            <!--</tr>-->
+                        </tbody>
+                        </tbody>
+                    </table>
+                    <div style="margin-top: 10px;" class="">
+                        <label>返回json格式</label>
+                        <textarea id="api_re_json" style="width:100%;height: 200px;margin-left: 5px;margin-top: 5px;" class="form-group" name="api_re_json"></textarea>
+                    </div>
+                </div>
+                <div class="box-footer">
+                    <button type="submit" class="btn btn-primary pull-right btn-flat"><i class="fa fa-save"></i> 新增</button>
+                </div><!-- /.box-footer -->
+            </form>
+        </div><!-- /.box -->
+        <div id="icon"></div>
+    </div>
+</block>
+<block name="js">
+    <script>
+        var js_date_type={$js_data_type};
+        var date_type='';
+        var height=window.innerHeight-101;
+        var left_height=window.innerHeight-50;
+        $('#body_scroll').css({'height':height});
+        $('#left_scroll').css({'height':left_height});
+        $.each(js_date_type, function(k,v) {
+            if(k == 0){
+                date_type+='<option selected="selected" value="'+v.id+'">'+v.type_name+'</option>';
+            }else{
+                date_type+='<option value="'+v.id+'">'+v.type_name+'</option>';
+            }
+        });
+        $('#add_request').click(function () {
+            $('#request').append(
+                    '<tr>'+
+                    '<td>'+
+                    '<input class="form-control" type="text" name="request_name[]" value="">'+
+                    '</td>'+
+                    '<td>'+
+                    '<select name="request_must[]" class="form-control select2">'+
+                    '<option selected="selected" value="Y">Y</option>'+
+                    '<option  value="N">N</option>'+
+                    '</select>'+
+                    '</td>'+
+                    '<td>'+
+                    '<select name="request_type[]" class="form-control select2">'+
+                    date_type+
+                    '</select>'+
+                    '</td>'+
+                    '<td>'+
+                    '<input class="form-control" type="text" name="request_remark[]" value="">'+
+                    '</td>'+
+                    '<td>'+
+                    '<button name="del" type="button" class="btn btn-danger btn-flat">删除</button>'+
+                    '</td>'+
+                    '</tr>'
+            );
+            $('[name="request_must[]"]').select2({
+
+            });
+            $('[name="request_type[]"]').select2({
+
+            });
+
+        });
+        $('#add_back').click(function () {
+            $('#back').append(
+                    '<tr>'+
+                    '<td>'+
+                    '<input class="form-control" type="text" name="back_name[]" value="">'+
+                    '</td>'+
+                    '<td>'+
+                    '<select name="back_must[]" class="form-control select2">'+
+                    '<option selected="selected" value="Y">Y</option>'+
+                    '<option  value="N">N</option>'+
+                    '</select>'+
+                    '</td>'+
+                    '<td>'+
+                    '<select name="back_type[]" class="form-control select2">'+
+                    date_type+
+                    '</select>'+
+                    '</td>'+
+                    '<td>'+
+                    '<input class="form-control" type="text" name="back_remark[]" value="">'+
+                    '</td>'+
+                    '<td>'+
+                    '<button name="del" type="button" class="btn btn-danger btn-flat">删除</button>'+
+                    '</td>'+
+                    '</tr>'
+            );
+            $('[name="back_must[]"]').select2({
+
+            });
+            $('[name="back_type[]"]').select2({
+
+            });
+
+        });
+        $("body").on('click', '[name="del"]', function(){
+            $(this).parent().parent().remove();
+        });
+
+
+
+        /**
+         * 文本框根据输入内容自适应高度
+         * @param                {HTMLElement}        输入框元素
+         * @param                {Number}                设置光标与输入框保持的距离(默认0)
+         * @param                {Number}                设置最大高度(可选)
+         */
+        var autoTextarea = function (elem, extra, maxHeight) {
+            extra = extra || 0;
+            var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
+                    isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),
+                    addEvent = function (type, callback) {
+                        elem.addEventListener ? elem.addEventListener(type, callback, false) : elem.attachEvent('on' + type, callback);
+                    },
+                    getStyle = elem.currentStyle ? function (name) {
+                        var val = elem.currentStyle[name];
+                        if (name === 'height' && val.search(/px/i) !== 1) {
+                            var rect = elem.getBoundingClientRect();
+                            return rect.bottom - rect.top -
+                                    parseFloat(getStyle('paddingTop')) -
+                                    parseFloat(getStyle('paddingBottom')) + 'px';
+                        };
+                        return val;
+                    } : function (name) {
+                        return getComputedStyle(elem, null)[name];
+                    },
+                    minHeight = parseFloat(getStyle('height'));
+//            elem.style.resize = 'none';//拖动伸缩
+            var change = function () {
+                var scrollTop, height,
+                        padding = 0,
+                        style = elem.style;
+                if (elem._length === elem.value.length) return;
+                elem._length = elem.value.length;
+                if (!isFirefox && !isOpera) {
+                    padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom'));
+                };
+                scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+                elem.style.height = minHeight + 'px';
+                if (elem.scrollHeight > minHeight) {
+                    if (maxHeight && elem.scrollHeight > maxHeight) {
+                        height = maxHeight - padding;
+                        style.overflowY = 'auto';
+                    } else {
+                        height = elem.scrollHeight - padding;
+//                        style.overflowY = 'hidden';
+                        style.overflowY = 'auto';
+                    };
+                    style.height = height + extra + 'px';
+                    scrollTop += parseInt(style.height) - elem.currHeight;
+                    document.body.scrollTop = scrollTop;
+                    document.documentElement.scrollTop = scrollTop;
+                    elem.currHeight = parseInt(style.height);
+                };
+            };
+
+            addEvent('propertychange', change);
+//            addEvent('input', change);
+            addEvent('focus', change);
+            change();
+        };
+        var api_parameter_json = document.getElementById("api_parameter_json");
+        autoTextarea(api_parameter_json,10);//调用
+        var api_re_json = document.getElementById("api_re_json");
+        autoTextarea(api_re_json,10);//调用
+    </script>
+</block>

+ 343 - 0
application/edit/view/project/show.html

@@ -0,0 +1,343 @@
+<extend name="common@public:base_show" ></extend>
+<block name="body">
+    <notempty name='project_api_id'>
+        <div class="col-md-12">
+            <!-- Horizontal Form -->
+            <div class="box box-info">
+                <div class="box-header with-border">
+                    <h3 class="box-title">接口详情</h3>
+                </div><!-- /.box-header -->
+                <!-- form start -->
+                <style>
+                    .input-group-btn label{
+                        width: 150px;
+                    }
+                </style>
+                <form action="{:url('Project/show')}" enctype="multipart/form-data" method="post">
+                    <input type="hidden" name="id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+                    <input type="hidden" name="project_api_id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+                    <input type="hidden" name="project_id" value="{$project_id}">
+                    <input type="hidden" name="project_module_id" value="{$project_module_id}">
+                    <div class="box-body">
+                        <!-- text input -->
+                        <div class="input-group margin">
+                            <div class="input-group-btn">
+                                <label class="btn btn-default">接口名称</label>
+                            </div>
+                            <!-- /btn-group -->
+                            <input name="api_name" value="{$project_api_data.api_name}" type="text" class="form-control">
+                        </div>
+                        <div class="input-group margin">
+                            <div class="input-group-btn">
+                                <label class="btn btn-default">请求类型</label>
+                            </div>
+                            <!-- /btn-group -->
+                            <select name="request_type_id" class="form-control select2">
+                                <volist id="post" name="request_data">
+                                    <option <php>if($project_api_data['request_type_id'] == $post['id']){echo "selected='selected'";}</php>  value="{$post.id}">{$post.type_name}</option>
+                                </volist>
+                            </select>
+                        </div>
+                        <div class="input-group margin">
+                            <div class="input-group-btn">
+                                <label class="btn btn-default">请求domain</label>
+                            </div>
+                            <!-- /btn-group -->
+                            <select name="project_url_id" class="form-control select2">
+                                <volist id="url" name="project_url">
+                                    <option <php>if($project_api_data['project_url_id'] == $url['id']){echo "selected='selected'";}</php>  value="{$url.id}">{$url.url_domain}</option>
+                                </volist>
+                            </select>
+                        </div>
+                        <div class="input-group margin">
+                            <div class="input-group-btn">
+                                <label class="btn btn-default">请求url</label>
+                            </div>
+                            <!-- /btn-group -->
+                            <input name="api_url" type="text" value="{$project_api_data.api_url}" class="form-control">
+                        </div>
+                        <div class="input-group margin">
+                            <div class="input-group-btn">
+                                <label class="btn btn-default">接口描述</label>
+                            </div>
+                            <!-- /btn-group -->
+                            <input name="api_des" type="text" value="{$project_api_data.api_des}" class="form-control">
+                        </div>
+                    </div><!-- /.box-body -->
+
+                    <div class="box-header with-border">
+                        <h3 class="box-title">请求参数列表</h3>
+                    </div><!-- /.box-header -->
+
+                    <div class="box-body">
+                        <table  class="table table-bordered">
+                            <tbody id="request">
+                            <tr>
+                                <th style="width: 200px;">参数名</th>
+                                <th style="width: 100px;">必选</th>
+                                <th style="width: 200px;">类型</th>
+                                <th>说明</th>
+                                <th style="padding: 0 0 0 8px;width: 70px;">
+                                    <button type="button" id="add_request" class="btn btn-primary btn-flat">新增</button>
+                                </th>
+                            </tr>
+                            <volist name="project_request_data" id="request">
+                                <tr>
+                                    <td>
+                                        <input class="form-control" type="text" name="request_name[]" value="{$request.request_name}">
+                                    </td>
+                                    <td>
+                                        <select name="request_must[]" class="form-control select2">
+                                            <option <if condition="'Y' eq $request.request_must">selected='selected'</if>  value="Y">Y</option>
+                                            <option <if condition="'N' eq $request.request_must">selected='selected'</if>  value="N">N</option>
+                                        </select>
+                                    </td>
+                                    <td>
+                                        <select name="request_type[]" class="form-control select2">
+                                            <volist id="type" name="data_type">
+                                                <option <if condition="$type.id eq $request.request_type">selected='selected'</if>  value="{$type.id}">{$type.type_name}</option>
+                                            </volist>
+                                        </select>
+                                    </td>
+                                    <td>
+                                        <input class="form-control" type="text" name="request_remark[]" value="{$request.request_remark}">
+                                    </td>
+                                    <td>
+                                        <button name="del" type="button" class="btn btn-danger btn-flat">删除</button>
+                                    </td>
+                                </tr>
+                            </volist>
+                            </tbody>
+                        </table>
+                        <div style="margin-top: 10px;" class="">
+                            <label>请求json格式</label>
+                            <textarea id="api_parameter_json" style="width:100%;" class="form-group" name="api_parameter_json">{$project_api_data.api_parameter_json}</textarea>
+                        </div>
+                    </div>
+                    <div class="box-header with-border">
+                        <h3 class="box-title">响应参数列表</h3>
+                    </div><!-- /.box-header -->
+                    <div class="box-body">
+                        <table class="table table-bordered">
+                            <tbody id="back">
+                            <tr>
+                                <th style="width: 200px;">参数名</th>
+                                <th style="width: 100px;">必选</th>
+                                <th style="width: 200px;">类型</th>
+                                <th>说明</th>
+                                <th style="padding: 0 0 0 8px;width: 70px;">
+                                    <button type="button" id="add_back" class="btn btn-primary btn-flat">新增</button>
+                                </th>
+                            </tr>
+                            <volist name="project_back_data" id="back">
+                                <tr>
+                                    <td>
+                                        <input class="form-control" type="text" name="back_name[]" value="{$back.back_name}">
+                                    </td>
+                                    <td>
+                                        <select name="back_must[]" class="form-control select2">
+                                            <option <if condition="'Y' eq $back.back_must">selected='selected'</if>  value="Y">Y</option>
+                                            <option <if condition="'N' eq $back.back_must">selected='selected'</if>  value="N">N</option>
+                                        </select>
+                                    </td>
+                                    <td>
+                                        <select name="back_type[]" class="form-control select2">
+                                            <volist id="type" name="data_type">
+                                                <option <if condition="$type.id eq $back.back_type">selected='selected'</if>  value="{$type.id}">{$type.type_name}</option>
+                                            </volist>
+                                        </select>
+                                    </td>
+                                    <td>
+                                        <input class="form-control" type="text" name="back_remark[]" value="{$back.back_remark}">
+                                    </td>
+                                    <td>
+                                        <button name="del" type="button" class="btn btn-danger btn-flat">删除</button>
+                                    </td>
+                                </tr>
+                            </volist>
+                            </tbody>
+                            </tbody>
+                        </table>
+                        <div style="margin-top: 10px;" class="">
+                            <label>返回json格式</label>
+                            <textarea id="api_re_json" style="width:100%;" class="form-group" name="api_re_json">{$project_api_data.api_re_json}</textarea>
+                        </div>
+                    </div>
+                    <div class="box-footer">
+                        <button type="submit" class="btn btn-primary pull-right btn-flat"><i class="fa fa-save"></i> 更新</button>
+                    </div><!-- /.box-footer -->
+                </form>
+            </div><!-- /.box -->
+            <div id="icon"></div>
+        </div>
+    </notempty>
+
+
+</block>
+<block name="js">
+    <script>
+        var js_date_type={$js_data_type};
+        var date_type='';
+        var height=window.innerHeight-101;
+        var left_height=window.innerHeight-50;
+        $('#body_scroll').css({'height':height});
+        $('#left_scroll').css({'height':left_height});
+        $.each(js_date_type, function(k,v) {
+            if(k == 0){
+                date_type+='<option selected="selected" value="'+v.id+'">'+v.type_name+'</option>';
+            }else{
+                date_type+='<option value="'+v.id+'">'+v.type_name+'</option>';
+            }
+        });
+        $('#add_request').click(function () {
+            $('#request').append(
+            '<tr>'+
+                '<td>'+
+                    '<input class="form-control" type="text" name="request_name[]" value="">'+
+                '</td>'+
+                '<td>'+
+                    '<select name="request_must[]" class="form-control select2">'+
+                        '<option selected="selected" value="Y">Y</option>'+
+                        '<option  value="N">N</option>'+
+                    '</select>'+
+                '</td>'+
+                '<td>'+
+                    '<select name="request_type[]" class="form-control select2">'+
+                        date_type+
+                    '</select>'+
+                '</td>'+
+                '<td>'+
+                    '<input class="form-control" type="text" name="request_remark[]" value="">'+
+                '</td>'+
+                '<td>'+
+                    '<button name="del" type="button" class="btn btn-danger btn-flat">删除</button>'+
+                '</td>'+
+            '</tr>'
+            );
+            $('[name="request_must[]"]').select2({
+
+            });
+            $('[name="request_type[]"]').select2({
+
+            });
+
+        });
+        $('#add_back').click(function () {
+            $('#back').append(
+                    '<tr>'+
+                    '<td>'+
+                    '<input class="form-control" type="text" name="back_name[]" value="">'+
+                    '</td>'+
+                    '<td>'+
+                    '<select name="back_must[]" class="form-control select2">'+
+                    '<option selected="selected" value="Y">Y</option>'+
+                    '<option  value="N">N</option>'+
+                    '</select>'+
+                    '</td>'+
+                    '<td>'+
+                    '<select name="back_type[]" class="form-control select2">'+
+                    date_type+
+                    '</select>'+
+                    '</td>'+
+                    '<td>'+
+                    '<input class="form-control" type="text" name="back_remark[]" value="">'+
+                    '</td>'+
+                    '<td>'+
+                    '<button name="del" type="button" class="btn btn-danger btn-flat">删除</button>'+
+                    '</td>'+
+                    '</tr>'
+            );
+            $('[name="back_must[]"]').select2({
+
+            });
+            $('[name="back_type[]"]').select2({
+
+            });
+
+        });
+        $("body").on('click', '[name="del"]', function(){
+            $(this).parent().parent().remove();
+        });
+
+        $("[data-reveal-id='cate_edit']").click(function () {
+            var cate_id=$(this).attr('cate_id');
+            var cate_name=$(this).attr('cate_name');
+            $('[name="cate_id"]').val(cate_id);
+            $('[name="cate_name"]').val(cate_name);
+        });
+
+        $("[data-reveal-id='module_edit']").click(function () {
+            var model_id=$(this).attr('model_id');
+            var model_name=$(this).attr('model_name');
+            $('[name="module_id"]').val(model_id);
+            $('[name="model_name"]').val(model_name);
+        });
+
+        /**
+         * 文本框根据输入内容自适应高度
+         * @param                {HTMLElement}        输入框元素
+         * @param                {Number}                设置光标与输入框保持的距离(默认0)
+         * @param                {Number}                设置最大高度(可选)
+         */
+        var autoTextarea = function (elem, extra, maxHeight) {
+            extra = extra || 0;
+            var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
+                    isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),
+                    addEvent = function (type, callback) {
+                        elem.addEventListener ? elem.addEventListener(type, callback, false) : elem.attachEvent('on' + type, callback);
+                    },
+                    getStyle = elem.currentStyle ? function (name) {
+                        var val = elem.currentStyle[name];
+                        if (name === 'height' && val.search(/px/i) !== 1) {
+                            var rect = elem.getBoundingClientRect();
+                            return rect.bottom - rect.top -
+                                    parseFloat(getStyle('paddingTop')) -
+                                    parseFloat(getStyle('paddingBottom')) + 'px';
+                        };
+                        return val;
+                    } : function (name) {
+                        return getComputedStyle(elem, null)[name];
+                    },
+                    minHeight = parseFloat(getStyle('height'));
+//            elem.style.resize = 'none';//拖动伸缩
+            var change = function () {
+                var scrollTop, height,
+                        padding = 0,
+                        style = elem.style;
+                if (elem._length === elem.value.length) return;
+                elem._length = elem.value.length;
+                if (!isFirefox && !isOpera) {
+                    padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom'));
+                };
+                scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+                elem.style.height = minHeight + 'px';
+                if (elem.scrollHeight > minHeight) {
+                    if (maxHeight && elem.scrollHeight > maxHeight) {
+                        height = maxHeight - padding;
+                        style.overflowY = 'auto';
+                    } else {
+                        height = elem.scrollHeight - padding;
+//                        style.overflowY = 'hidden';
+                        style.overflowY = 'auto';
+                    };
+                    style.height = height + extra + 'px';
+                    scrollTop += parseInt(style.height) - elem.currHeight;
+                    document.body.scrollTop = scrollTop;
+                    document.documentElement.scrollTop = scrollTop;
+                    elem.currHeight = parseInt(style.height);
+                };
+            };
+
+            addEvent('propertychange', change);
+//            addEvent('input', change);
+            addEvent('focus', change);
+            change();
+        };
+        var api_parameter_json = document.getElementById("api_parameter_json");
+        autoTextarea(api_parameter_json,10);//调用
+        var api_re_json = document.getElementById("api_re_json");
+        autoTextarea(api_re_json,10);//调用
+
+
+    </script>
+</block>

+ 88 - 0
application/edit/view/user/login.html

@@ -0,0 +1,88 @@
+
+<!DOCTYPE html>
+<html  style="background-color: #3b8ab8;">
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>登录</title>
+    <!-- Tell the browser to be responsive to screen width -->
+    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+    <!-- Bootstrap 3.3.5 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/bootstrap/css/bootstrap.min.css">
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/font-awesome.min.css">
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/ionicons.min.css">
+    <!-- Theme style -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/AdminLTE.min.css">
+    <!-- iCheck -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/iCheck/square/blue.css">
+
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/skins/skin-blue.min.css">
+
+    <!--[if lt IE 9]>
+    <script src="{:config('admin_static')}/adminLTE/js/html5shiv.min.js"></script>
+    <script src="{:config('admin_static')}/adminLTE/js/respond.min.js"></script>
+    <![endif]-->
+</head>
+<body style="
+background-color: transparent;
+" class="hold-transition">
+<div  class="login-box">
+    <div class="login-logo">
+        <a style="color: #ffffff;" href=""><b>管理</b>系统</a>
+    </div><!-- /.login-logo -->
+    <div class="login-box-body">
+        <p class="login-box-msg">请输入信息</p>
+        <form action="{:url('User/login')}" method="post">
+            <div class="form-group has-feedback">
+                <input type="text" class="form-control" placeholder="账户" name="user_mobile">
+                <span class="glyphicon glyphicon-user form-control-feedback"></span>
+            </div>
+            <div class="form-group has-feedback">
+                <input type="password" class="form-control" placeholder="密码" name="user_password">
+                <span class="glyphicon glyphicon-lock form-control-feedback"></span>
+            </div>
+            <div class="form-group has-feedback">
+                <input type="password" class="form-control" placeholder="验证码" name="verify">
+                <span >
+                    <img style="margin-top: 15px;" id="verify" alt="验证码" onClick="show()" src="{:captcha_src()}" />
+                </span>
+
+            </div>
+            <div class="row">
+                <div class="col-xs-8">
+                    <div class="checkbox icheck">
+                        <label>
+                            <input name="remember" type="checkbox"> 记住我
+                        </label>
+                    </div>
+                </div><!-- /.col -->
+                <div class="col-xs-4">
+                    <button type="submit" class="btn btn-primary btn-block btn-flat">登录</button>
+                </div><!-- /.col -->
+            </div>
+        </form>
+    </div>
+</div><!-- /.login-box -->
+
+<!-- jQuery 2.1.4 -->
+<script src="{:config('admin_static')}/plugins/jQuery/jQuery-2.1.4.min.js"></script>
+<!-- Bootstrap 3.3.5 -->
+<script src="{:config('admin_static')}/bootstrap/js/bootstrap.min.js"></script>
+<script src="{:config('admin_static')}/plugins/iCheck/icheck.min.js"></script>
+<script>
+    $(function () {
+        $('input').iCheck({
+            checkboxClass: 'icheckbox_square-blue',
+            radioClass: 'iradio_square-blue',
+            increaseArea: '20%' // optional
+        });
+    });
+    function show(){
+        $('#verify').attr('src','{:captcha_src()}');
+    }
+</script>
+</body>
+</html>

+ 13 - 0
application/extra/myconfig.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: xun
+ * Date: 2016/8/1
+ * Time: 15:05
+ */
+return [
+    'admin_key' =>  'IHFA*(^#@$*&^4185adFAE154^GDSFhx',//后台用户密码加密key
+    'admin_cookie_key'=>'JDFHI^&*$^&GUIDCGVB^%&R#hyfgvyh1243',//cookie加密key
+    'admin_session_key'=>'756GYUG&^%T*()GYHDFIGBbiuyabf',//session加密key
+
+];

+ 25 - 0
application/index/config.php

@@ -0,0 +1,25 @@
+<?php
+return [
+    // 默认模块名
+//    'default_module'        => 'admin',
+    // 默认控制器名
+    'default_controller'    => 'Index',
+    // 默认操作名
+    'default_action'        => 'index',
+
+    //分页配置
+    'paginate'               => [
+        'type'     => 'admin\adminpage',
+        'var_page' => 'p',
+    ],
+//默认错误跳转对应的模板文件
+    'dispatch_error_tmpl' => 'common@waring/jump',
+//默认成功跳转对应的模板文件
+    'dispatch_success_tmpl' => 'common@waring/jump',
+
+    'admin_static' =>  '/static',
+    'upload_path'=>  '',
+
+    'admin_is_trator' =>  [1],
+
+];

+ 15 - 0
application/index/controller/Index.php

@@ -0,0 +1,15 @@
+<?php
+namespace app\index\controller;
+
+use think\Controller;
+
+class Index extends Controller
+{
+    public function index()
+    {
+        $model=model('common/Project');
+        $data=$model->select();
+        $this->assign('data',$data);
+        return $this->fetch('index');
+    }
+}

+ 88 - 0
application/index/controller/Project.php

@@ -0,0 +1,88 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: xun
+ * Date: 2016/9/8
+ * Time: 13:44
+ */
+
+namespace app\index\controller;
+
+
+use think\Controller;
+
+class Project extends Controller
+{
+    public function show(){
+        $project_id=input('param.project_id');
+        if(!$project_id){
+            $this->redirect('index/index');
+        }
+        //模块数据
+        $project_module_data=project_module($project_id);
+        //模块id
+        $project_module_id=input('param.project_module_id');
+        if(!$project_module_id){
+            if($project_module_data){
+                $project_module_id=$project_module_data[0]['id'];
+            }else{
+                $project_module_data=[];
+            }
+        }
+        //分类数据
+        $project_cate_data=[];
+        if($project_module_id){
+            $project_cate_data=project_cate($project_module_id);
+        }
+        $left_data=[];//左侧导航菜单
+        if(!empty($project_cate_data)){
+            foreach ($project_cate_data as $k=>$v){
+                $left_data[$v['cate_name']]=[
+                    'cate_id' => $v['id'],
+                    'project_api' => project_api($v['id']),
+                ];
+            }
+        }
+        //接口文档id
+        $project_api_id=input('param.project_api_id');
+        $project_api_data=[];//接口文档数据
+        if(empty($project_api_id)){
+            if(!empty($left_data)){
+                foreach ($left_data as $k=>$v){
+                    if(!empty($v['project_api'])){
+                        $project_api_data=api_wiki($v['project_api'][0]['id']);
+                        $project_api_id=$v['project_api'][0]['id'];
+                        break;
+                    }
+                }
+            }
+        }else{
+            $project_api_data=api_wiki($project_api_id);
+        }
+        if(empty($project_api_data)){
+            $project_request_data='';
+        }else{
+            $project_request_data=$project_api_data['api_parameter'];
+        }
+        if(empty($project_api_data)){
+            $project_back_data='';
+        }else{
+            $project_back_data=$project_api_data['api_re'];
+        }
+
+        $this->assign('project_api_data',$project_api_data);//接口文档数据
+        $this->assign('left_data',$left_data);//左侧导航菜单
+        $this->assign('project_module_data',$project_module_data);//模块数据
+        $this->assign('project_id',$project_id);//项目id
+        $this->assign('project_module_id',$project_module_id);//模块id
+        $this->assign('project_api_id',$project_api_id);//文档id
+        $this->assign('project_url',project_url($project_id));//url数据
+        $this->assign('request_data',request_data());//请求类型
+        $this->assign('project_request_data',json_decode($project_request_data,true));//请求数据
+        $this->assign('project_back_data',json_decode($project_back_data,true));//返回数据
+        $this->assign('data_type',data_type());//数据类型
+        $this->assign('js_data_type',json_encode(data_type()));//数据类型json
+
+        return $this->fetch('show');
+    }
+}

+ 28 - 0
application/index/view/index/index.html

@@ -0,0 +1,28 @@
+<extend name="common@public:base_view" ></extend>
+<block name="body">
+    <div class="row">
+
+        <volist id="vo" name="data">
+            <div class="col-lg-3 col-xs-6">
+                <!-- small box -->
+                <div style=" box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.37);" class="small-box {:color()}">
+                    <a href="{:url('project/show',['project_id'=>$vo['id']])}">
+                        <div style="color: rgb(59, 59, 59);padding: 10px;" class="inner">
+                            <h3>{$vo.project_name}</h3>
+                            <p>{$vo.project_about}</p>
+                        </div>
+                        <div class="icon">
+                            <i class="{$vo.project_icon}"></i>
+                        </div>
+                    </a>
+                    <a href="#" class="small-box-footer">
+                        查看文档
+                        <i class="fa fa-arrow-circle-right"></i>
+                    </a>
+                </div>
+            </div>
+            <!-- ./col -->
+        </volist>
+        <!-- ./col -->
+    </div>
+</block>

+ 152 - 0
application/index/view/project/show.html

@@ -0,0 +1,152 @@
+<extend name="common@public:base_view_second" ></extend>
+<block name="body">
+    <notempty name='project_api_id'>
+    <div class="col-md-12">
+        <!-- Horizontal Form -->
+        <div class="box box-info">
+            <div class="box-header with-border">
+                <h3 class="box-title">接口详情</h3>
+            </div><!-- /.box-header -->
+            <!-- form start -->
+            <style>
+                .input-group-btn label{
+                    width: 150px;
+                }
+            </style>
+            <form action="{:url('Project/show')}" enctype="multipart/form-data" method="post">
+                <input type="hidden" name="id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+                <input type="hidden" name="project_api_id" value="<notempty name='project_api_data.id'>{$project_api_data.id}</notempty>">
+                <input type="hidden" name="project_id" value="{$project_id}">
+                <input type="hidden" name="project_module_id" value="{$project_module_id}">
+                <div class="box-body">
+                    <!-- text input -->
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">接口名称</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input  value="{$project_api_data.api_name}" type="text" class="form-control">
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">请求类型</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input value="{$project_api_data.request_type_id|request_data_id}" type="text" class="form-control">
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">请求domain</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input type="text" value="{$project_api_data.url_domain}" class="form-control">
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">请求url</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input type="text" value="{$project_api_data.api_url}" class="form-control">
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">请求完整url</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input type="text" value="{$project_api_data.url_domain}{$project_api_data.api_url}" class="form-control">
+                    </div>
+                    <div class="input-group margin">
+                        <div class="input-group-btn">
+                            <label class="btn btn-default">接口描述</label>
+                        </div>
+                        <!-- /btn-group -->
+                        <input name="api_des" type="text" value="{$project_api_data.api_des}" class="form-control">
+                    </div>
+                </div><!-- /.box-body -->
+
+                <div class="box-header with-border">
+                    <h3 class="box-title">请求参数列表</h3>
+                </div><!-- /.box-header -->
+
+                <div class="box-body">
+                    <table  class="table table-bordered">
+                        <tbody id="request">
+                        <tr>
+                            <th style="width: 200px;">参数名</th>
+                            <th style="width: 100px;">必选</th>
+                            <th style="width: 200px;">类型</th>
+                            <th>说明</th>
+                        </tr>
+                        <volist name="project_request_data" id="request">
+                            <tr>
+                                <td>
+                                    <input class="form-control" type="text" value="{$request.request_name}">
+                                </td>
+                                <td>
+                                    <input class="form-control" type="text" value="{$request.request_must}">
+                                </td>
+                                <td>
+                                    <input class="form-control" type="text" value="{$request.request_type|data_type_id}">
+                                </td>
+                                <td>
+                                    <input class="form-control" type="text" value="{$request.request_remark}">
+                                </td>
+                            </tr>
+                        </volist>
+                        </tbody>
+                    </table>
+                    <div style="margin-top: 10px;" class="">
+                        <label>请求json格式</label>
+                        <pre>{$project_api_data.api_parameter_json}</pre>
+                    </div>
+                </div>
+                <div class="box-header with-border">
+                    <h3 class="box-title">响应参数列表</h3>
+                </div><!-- /.box-header -->
+                <div class="box-body">
+                    <table class="table table-bordered">
+                        <tbody id="back">
+                        <tr>
+                            <th style="width: 200px;">参数名</th>
+                            <th style="width: 100px;">必选</th>
+                            <th style="width: 200px;">类型</th>
+                            <th>说明</th>
+                        </tr>
+                        <volist name="project_back_data" id="back">
+                            <tr>
+                                <td>
+                                    <input class="form-control" type="text" value="{$back.back_name}">
+                                </td>
+                                <td>
+                                    <input class="form-control" type="text" value="{$back.back_must}">
+                                </td>
+                                <td>
+                                    <input class="form-control" type="text" value="{$back.back_type|data_type_id}">
+                                </td>
+                                <td>
+                                    <input class="form-control" type="text" value="{$back.back_remark}">
+                                </td>
+                            </tr>
+                        </volist>
+                        </tbody>
+                        </tbody>
+                    </table>
+                    <div style="margin-top: 10px;" class="">
+                        <label>返回json格式</label>
+                        <pre>{$project_api_data.api_re_json}</pre>
+                    </div>
+                </div>
+            </form>
+        </div><!-- /.box -->
+        <div id="icon"></div>
+    </div>
+        </notempty>
+</block>
+<block name="js">
+    <script>
+        var height=window.innerHeight-101;
+        var left_height=window.innerHeight-50;
+        $('#body_scroll').css({'height':height});
+        $('#left_scroll').css({'height':left_height});
+    </script>
+</block>

+ 55 - 0
application/index/view/public/base.html

@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html style="height: 100%">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <block name="title"><title>后台管理</title></block>
+    <!-- Tell the browser to be responsive to screen width -->
+    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+    <!-- Bootstrap 3.3.5 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/bootstrap/css/bootstrap.min.css">
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/font-awesome.min.css">
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/ionicons.min.css">
+    <!-- Select2 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/select2/select2.min.css">
+    <!--选择框-->
+    <link rel='stylesheet' href="{:config('admin_static')}/plugins/iCheck/all.css">
+    <!-- ueditor-->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/ueditor/themes/default/css/ueditor.css"/>
+
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/daterangepicker/daterangepicker-bs3.css">
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/datepicker/datepicker3.css">
+    <!-- Bootstrap Color Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.css">
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.css">
+
+    <!-- Theme style -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/AdminLTE.min.css">
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/skins/_all-skins.min.css">
+
+    <!--[if lt IE 9]>
+    <script src="{:config('admin_static')}/adminLTE/js/html5shiv.min.js"></script>
+    <script src="{:config('admin_static')}/adminLTE/js/respond.min.js"></script>
+    <![endif]-->
+    <link rel="stylesheet" href="{:config('admin_static')}/css/my.css">
+</head>
+<body style="height: 100%;">
+    <div style="background-color: #ecf0f5;height: 100%;">
+        <!-- 标题栏 -->
+        <!-- Main content -->
+        <section class="content" style="padding: 100px;">
+            <div class="row">
+                <block name="body">
+                    <!-- 主页面 -->
+                </block>
+            </div>
+        </section>
+    </div>
+</body>
+<block name="js"></block>
+</html>

+ 25 - 0
application/index/view/public/base_one.html

@@ -0,0 +1,25 @@
+<include file="public/header_one"/>
+<block name="css"></block>
+<body style="height: 100%;" class="hold-transition skin-purple-light sidebar-mini">
+<div class="wrapper">
+    <!-- Main Header -->
+    <block name="top"><include file="public/top_one" /></block>
+    <div>
+        <!-- 标题栏 -->
+        <!-- Main content -->
+        <section class="content" style="padding-left: 50px;padding-right: 50px;">
+            <div class="row">
+                <block name="body">
+                <!-- 主页面 -->
+                </block>
+            </div>
+        </section>
+    </div>
+    <!-- Main Footer -->
+    <include file="public/foot_one" />
+</div>
+
+</body>
+<include file="public/js" />
+<block name="js"></block>
+</html>

+ 8 - 0
application/index/view/public/foot.html

@@ -0,0 +1,8 @@
+<footer class="main-footer">
+    <!-- To the right -->
+    <div class="pull-right hidden-xs">
+        底部
+    </div>
+    <!-- Default to the left -->
+    <strong>Copyright &copy; 2015 <a href="#">Company</a>.</strong> All rights reserved.
+</footer>

+ 8 - 0
application/index/view/public/foot_one.html

@@ -0,0 +1,8 @@
+<footer class="main-footer" style="margin-left: 0px;position: fixed;bottom:0;left:0;width:100%;">
+    <!-- To the right -->
+    <div class="pull-right hidden-xs">
+        底部
+    </div>
+    <!-- Default to the left -->
+    <strong>Copyright &copy; 2015 <a href="#">Company</a>.</strong> All rights reserved.
+</footer>

+ 66 - 0
application/index/view/public/header.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>后台管理</title>
+    <!-- Tell the browser to be responsive to screen width -->
+    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+    <!-- Bootstrap 3.3.5 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/bootstrap/css/bootstrap.min.css">
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/font-awesome.min.css">
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/ionicons.min.css">
+    <!-- Select2 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/select2/select2.min.css">
+    <!--选择框-->
+    <link rel='stylesheet' href="{:config('admin_static')}/plugins/iCheck/all.css">
+    <!-- ueditor-->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/ueditor/themes/default/css/ueditor.css"/>
+
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/daterangepicker/daterangepicker-bs3.css">
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/datepicker/datepicker3.css">
+    <!-- Bootstrap Color Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.css">
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.css">
+
+    <!-- Theme style -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/AdminLTE.min.css">
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/skins/_all-skins.min.css">
+
+    <!--[if lt IE 9]>
+    <script src="{:config('admin_static')}/adminLTE/js/html5shiv.min.js"></script>
+    <script src="{:config('admin_static')}/adminLTE/js/respond.min.js"></script>
+    <![endif]-->
+    <link rel="stylesheet" href="{:config('admin_static')}/css/my.css">
+    <style>
+        .table>tbody>tr>td{line-height: 2.3;}
+        .left{float: left;margin-right: 50px;}
+        .skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn {
+            height: 33px;
+            border: 1px solid transparent;
+            background-color: #ffffff;
+            box-shadow: none;
+            -webkit-transition: all .3s ease-in-out;
+            -o-transition: all .3s ease-in-out;
+            transition: all .3s ease-in-out;
+        }
+        @media (max-width: 767px){
+            .skin-blue .main-header .navbar .dropdown-menu li.divider {
+                background-color: #eee;
+            }
+            .skin-blue .main-header .navbar .dropdown-menu li a {
+                color: #777;
+            }
+
+            .skin-blue .main-header .navbar .dropdown-menu li a:hover {
+                background: #eee;
+            }
+
+        }
+    </style>
+</head>

+ 66 - 0
application/index/view/public/header_one.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html style="background-color: #f9fafc;height: 100%;">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>后台管理</title>
+    <!-- Tell the browser to be responsive to screen width -->
+    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+    <!-- Bootstrap 3.3.5 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/bootstrap/css/bootstrap.min.css">
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/font-awesome.min.css">
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/ionicons.min.css">
+    <!-- Select2 -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/select2/select2.min.css">
+    <!--选择框-->
+    <link rel='stylesheet' href="{:config('admin_static')}/plugins/iCheck/all.css">
+    <!-- ueditor-->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/ueditor/themes/default/css/ueditor.css"/>
+
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/daterangepicker/daterangepicker-bs3.css">
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/datepicker/datepicker3.css">
+    <!-- Bootstrap Color Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.css">
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.css">
+
+    <!-- Theme style -->
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/AdminLTE.min.css">
+    <link rel="stylesheet" href="{:config('admin_static')}/adminLTE/css/skins/_all-skins.min.css">
+
+    <!--[if lt IE 9]>
+    <script src="{:config('admin_static')}/adminLTE/js/html5shiv.min.js"></script>
+    <script src="{:config('admin_static')}/adminLTE/js/respond.min.js"></script>
+    <![endif]-->
+    <link rel="stylesheet" href="{:config('admin_static')}/css/my.css">
+    <style>
+        .table>tbody>tr>td{line-height: 2.3;}
+        .left{float: left;margin-right: 50px;}
+        .skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn {
+            height: 33px;
+            border: 1px solid transparent;
+            background-color: #ffffff;
+            box-shadow: none;
+            -webkit-transition: all .3s ease-in-out;
+            -o-transition: all .3s ease-in-out;
+            transition: all .3s ease-in-out;
+        }
+        @media (max-width: 767px){
+            .skin-blue .main-header .navbar .dropdown-menu li.divider {
+                background-color: #eee;
+            }
+            .skin-blue .main-header .navbar .dropdown-menu li a {
+                color: #777;
+            }
+
+            .skin-blue .main-header .navbar .dropdown-menu li a:hover {
+                background: #eee;
+            }
+
+        }
+    </style>
+</head>

文件差异内容过多而无法显示
+ 2045 - 0
application/index/view/public/icon.html


+ 36 - 0
application/index/view/public/js.html

@@ -0,0 +1,36 @@
+<!-- jQuery 2.2.0 -->
+<script src="{:config('admin_static')}/plugins/jQuery/jQuery-2.1.4.min.js"></script>
+<!-- Bootstrap 3.3.6 -->
+<script src="{:config('admin_static')}/bootstrap/js/bootstrap.min.js"></script>
+<!-- Select2 -->
+<script src="{:config('admin_static')}/plugins/select2/select2.full.min.js"></script>
+<!-- InputMask -->
+<script src="{:config('admin_static')}/plugins/input-mask/jquery.inputmask.js"></script>
+<script src="{:config('admin_static')}/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
+<script src="{:config('admin_static')}/plugins/input-mask/jquery.inputmask.extensions.js"></script>
+<!-- date-range-picker -->
+<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>-->
+<script src="{:config('admin_static')}/plugins/daterangepicker/daterangepicker.js"></script>
+<!-- bootstrap datepicker -->
+<script src="{:config('admin_static')}/plugins/datepicker/bootstrap-datepicker.js"></script>
+<!-- bootstrap color picker -->
+<script src="{:config('admin_static')}/plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
+<!-- bootstrap time picker -->
+<script src="{:config('admin_static')}/plugins/timepicker/bootstrap-timepicker.min.js"></script>
+<!-- SlimScroll 1.3.0 -->
+<script src="{:config('admin_static')}/plugins/slimScroll/jquery.slimscroll.min.js"></script>
+<!-- iCheck 1.0.1 -->
+<script src="{:config('admin_static')}/plugins/iCheck/icheck.min.js"></script>
+<!-- FastClick -->
+<script src="{:config('admin_static')}/plugins/fastclick/fastclick.js"></script>
+<!-- AdminLTE App -->
+<script src="{:config('admin_static')}/adminLTE/js/app.min.js"></script>
+<!-- AdminLTE for demo purposes -->
+<script src="{:config('admin_static')}/adminLTE/js/demo.js"></script>
+<!-- ueditor-->
+<script type="text/javascript" src="{:config('admin_static')}/plugins/ueditor/ueditor.config.js"></script>
+<script type="text/javascript" src="{:config('admin_static')}/plugins/ueditor/ueditor.all.js"></script>
+
+<script language="javascript" type="text/javascript" src="{:config('admin_static')}/plugins/date/WdatePicker.js"></script>
+<script type="text/javascript" src="{:config('admin_static')}/js/my.js"></script>
+

+ 35 - 0
application/index/view/public/left.html

@@ -0,0 +1,35 @@
+<aside class="main-sidebar">
+
+    <!-- sidebar: style can be found in sidebar.less -->
+    <section class="sidebar">
+        <!-- 用户信息-导航 -->
+        <div class="user-panel">
+            <div class="pull-left image">
+                <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" class="img-circle" alt="User Image">
+            </div>
+            <div class="pull-left info">
+                <p>{:cookie('user_base')['user_name']}</p>
+                <!-- Status -->
+                <a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
+            </div>
+        </div>
+
+        <!-- 搜索框 -->
+        <form action="#" method="get" class="sidebar-form">
+            <div class="input-group">
+                <input type="text" name="q" class="form-control" placeholder="搜索...">
+          <span class="input-group-btn">
+            <button type="submit" name="search" id="search-btn" class="btn btn-flat"><i class="fa fa-search"></i></button>
+          </span>
+            </div>
+        </form>
+        <!-- /.search form -->
+
+        <!-- Sidebar Menu -->
+        <ul class="sidebar-menu">
+            <li class="header">导航栏</li>
+            <!-- Optionally, you can add icons to the links -->
+        </ul><!-- /.sidebar-menu -->
+    </section>
+    <!-- /.sidebar -->
+</aside>

+ 30 - 0
application/index/view/public/title.html

@@ -0,0 +1,30 @@
+<section class="content-header">
+    <volist name="li_info" id="li_one"}
+        <notempty name="li_one['li_two']"}
+            <!--存在二级标题-->
+            <volist name="li_one['li_two']" id="li_two"}
+                <eq name="sign" value="$li_two.sign"}
+                    <h1>
+                        {$li_two.title}
+                        <small>{$li_two.description}</small>
+                    </h1>
+                    <ol class="breadcrumb">
+                        <li><i class="fa fa-dashboard"></i>{$li_one.title}</li>
+                        <li class="active"><a href="__MODULE__/<{$li_two.module}>">{$li_two.title}</a></li>
+                    </ol>
+                </eq>
+            </volist>
+            <else />
+            <!--不存在-->
+            <eq name="sign" value="$li_one.sign"}
+                <h1>
+                    {$li_one.title}
+                    <small>{$li_one.description}</small>
+                </h1>
+                <ol class="breadcrumb">
+                    <li><i class="fa fa-dashboard"></i><a href="__MODULE__/{$li_one.module}">{$li_one.title}</a></li>
+                </ol>
+            </eq>
+        </notempty>
+    </volist>
+</section>

+ 65 - 0
application/index/view/public/top.html

@@ -0,0 +1,65 @@
+<header class="main-header">
+    <!-- Logo -->
+    <a href="<php>echo url('Index/index');</php>" class="logo">
+        <!-- mini logo for sidebar mini 50x50 pixels -->
+        <span class="logo-mini"><b>后台</b>管理</span>
+        <!-- logo for regular state and mobile devices -->
+        <span class="logo-lg"><b>后台</b>管理</span>
+    </a>
+    <!-- Header Navbar -->
+    <nav class="navbar navbar-static-top" role="navigation">
+        <!-- Sidebar toggle button-->
+        <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
+            <span class="sr-only">Toggle navigation</span>
+        </a>
+        <!-- Navbar Right Menu -->
+        <div class="navbar-custom-menu">
+            <ul class="nav navbar-nav">
+                <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
+                <li><a href="#">Link</a></li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
+                    <ul class="dropdown-menu xiala" role="menu">
+                        <li><a href="#">Action</a></li>
+                        <li><a href="#">Another action</a></li>
+                        <li><a href="#">Something else here</a></li>
+                        <li class="divider"></li>
+                        <li><a  href="#">Separated link</a></li>
+                        <li class="divider"></li>
+                        <li><a href="#">One more separated link</a></li>
+                    </ul>
+                </li>
+                <!-- User Account Menu -->
+                <li class="dropdown user user-menu">
+                    <!-- Menu Toggle Button -->
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                        <!-- The user image in the navbar-->
+                        <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" class="user-image" alt="User Image">
+                        <!-- hidden-xs hides the username on small devices so only the image appears. -->
+                        <span class="hidden-xs">{:cookie('user_base')['user_name']}</span>
+                    </a>
+                    <ul class="dropdown-menu">
+                        <!-- The user image in the menu -->
+                        <li class="user-header">
+                            <img src="{:config('admin_static')}{:cookie('user_base')['user_header_img']}" class="img-circle" alt="User Image">
+                            <p>
+                                {:cookie('user_base')['user_name']}
+                                <small>创建日期:{:date('Y-m-d H:i:s',cookie('user_base')['create_time'])}</small>
+                                <small>最后登录日期:{:date('Y-m-d H:i:s',cookie('user_base')['update_time'])}</small>
+                            </p>
+                        </li>
+                        <!-- Menu Footer-->
+                        <li class="user-footer">
+                            <div class="pull-left">
+                                <a href="<php>echo url('Myinfo/index')</php>" class="btn btn-default btn-flat">个人信息</a>
+                            </div>
+                            <div class="pull-right">
+                                <a href="<php>echo url('User/logout')</php>" class="btn btn-default btn-flat">退&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出</a>
+                            </div>
+                        </li>
+                    </ul>
+                </li>
+            </ul>
+        </div>
+    </nav>
+</header>

+ 18 - 0
application/index/view/public/top_one.html

@@ -0,0 +1,18 @@
+<header class="main-header">
+    <!-- Logo -->
+    <a href="{:url('Index/index')}" class="logo">
+        <!-- mini logo for sidebar mini 50x50 pixels -->
+        <span class="logo-mini"><b>api</b>/文档</span>
+        <!-- logo for regular state and mobile devices -->
+        <span class="logo-lg"><b>api</b>文档</span>
+    </a>
+    <!-- Header Navbar -->
+    <nav class="navbar navbar-static-top" role="navigation">
+        <!-- Navbar Right Menu -->
+        <div class="navbar-custom-menu">
+            <ul style="margin-right: 15px;" class="nav navbar-nav">
+                <li><a href="#">项目管理</a></li>
+            </ul>
+        </div>
+    </nav>
+</header>

+ 23 - 0
application/route.php

@@ -0,0 +1,23 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+
+return [
+    '__pattern__' => [
+        'name' => '\w+',
+    ],
+    '[hello]'     => [
+        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
+        ':name' => ['index/hello', ['method' => 'post']],
+    ],
+    '__domain__'=>[
+    ],
+
+];

+ 27 - 0
build.php

@@ -0,0 +1,27 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+
+return [
+    // 生成运行时目录
+    '__dir__'  => ['runtime/cache', 'runtime/log', 'runtime/temp', 'runtime/template'],
+    // 生成应用公共文件
+    '__file__' => ['common.php', 'config.php', 'database.php'],
+
+    // 定义demo模块的自动生成 (按照实际定义的文件名生成)
+    'demo'     => [
+        '__file__'   => ['common.php'],
+        '__dir__'    => ['behavior', 'controller', 'model', 'view'],
+        'controller' => ['Index', 'Test', 'UserType'],
+        'model'      => ['User', 'UserType'],
+        'view'       => ['index/index'],
+    ],
+    // 其他更多的模块定义
+];

+ 37 - 0
composer.json

@@ -0,0 +1,37 @@
+{
+    "name": "topthink/think",
+    "description": "the new thinkphp framework",
+    "type": "project",
+    "keywords": [
+        "framework",
+        "thinkphp",
+        "ORM"
+    ],
+    "homepage": "http://thinkphp.cn/",
+    "license": "Apache-2.0",
+    "authors": [
+        {
+            "name": "liu21st",
+            "email": "liu21st@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "topthink/framework": "*",
+        "topthink/think-captcha": "1.0.*"
+    },
+    "extra": {
+        "think-path": "thinkphp"
+    },
+    "minimum-stability": "dev",
+    "config": {
+        "preferred-install": "dist"
+    },
+  "repositories": {
+    "packagist": {
+      "type": "composer",
+      "url": "https://packagist.phpcomposer.com"
+    }
+  }
+
+}

二进制
composer.phar


+ 0 - 0
extend/index.html


+ 254 - 0
gitignore/config.php

@@ -0,0 +1,254 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+
+return [
+    // +----------------------------------------------------------------------
+    // | 应用设置
+    // +----------------------------------------------------------------------
+
+    // +----------------------------------------------------------------------
+    // | 应用设置
+    // +----------------------------------------------------------------------
+
+    // 应用命名空间
+    'app_namespace'          => 'app',
+    // 应用调试模式
+    'app_debug'              => true,
+    // 应用Trace
+    'app_trace'              => false,
+    // 应用模式状态
+    'app_status'             => '',
+    // 是否支持多模块
+    'app_multi_module'       => true,
+    // 入口自动绑定模块
+    'auto_bind_module'       => false,
+    // 注册的根命名空间
+    'root_namespace'         => [],
+    // 扩展函数文件
+    'extra_file_list'        => [THINK_PATH . 'helper' . EXT],
+    // 默认输出类型
+    'default_return_type'    => 'html',
+    // 默认AJAX 数据返回格式,可选json xml ...
+    'default_ajax_return'    => 'json',
+    // 默认JSONP格式返回的处理方法
+    'default_jsonp_handler'  => 'jsonpReturn',
+    // 默认JSONP处理方法
+    'var_jsonp_handler'      => 'callback',
+    // 默认时区
+    'default_timezone'       => 'PRC',
+    // 是否开启多语言
+    'lang_switch_on'         => false,
+    // 默认全局过滤方法 用逗号分隔多个
+    'default_filter'         => 'htmlspecialchars',
+    // 默认语言
+    'default_lang'           => 'zh-cn',
+    // 应用类库后缀
+    'class_suffix'           => false,
+    // 控制器类后缀
+    'controller_suffix'      => false,
+
+    // +----------------------------------------------------------------------
+    // | 模块设置
+    // +----------------------------------------------------------------------
+
+    // 默认模块名
+    'default_module'         => 'index',
+    // 禁止访问模块
+    'deny_module_list'       => ['common'],
+    // 默认控制器名
+    'default_controller'     => 'Index',
+    // 默认操作名
+    'default_action'         => 'index',
+    // 默认验证器
+    'default_validate'       => '',
+    // 默认的空控制器名
+    'empty_controller'       => 'Error',
+    // 操作方法后缀
+    'action_suffix'          => '',
+    // 自动搜索控制器
+    'controller_auto_search' => false,
+
+    // +----------------------------------------------------------------------
+    // | URL设置
+    // +----------------------------------------------------------------------
+
+    // PATHINFO变量名 用于兼容模式
+    'var_pathinfo'           => 's',
+    // 兼容PATH_INFO获取
+    'pathinfo_fetch'         => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
+    // pathinfo分隔符
+    'pathinfo_depr'          => '/',
+    // URL伪静态后缀
+    'url_html_suffix'        => 'html',
+    // URL普通方式参数 用于自动生成
+    'url_common_param'       => false,
+    // URL参数方式 0 按名称成对解析 1 按顺序解析
+    'url_param_type'         => 0,
+    // 是否开启路由
+    'url_route_on'           => true,
+    // 路由使用完整匹配
+    'route_complete_match'   => false,
+    // 路由配置文件(支持配置多个)
+    'route_config_file'      => ['route'],
+    // 是否强制使用路由
+    'url_route_must'         => false,
+    // 域名部署
+    'url_domain_deploy'      => true,
+    // 域名根,如thinkphp.cn
+    'url_domain_root'        => '',
+    // 是否自动转换URL中的控制器和操作名
+    'url_convert'            => true,
+    // 默认的访问控制器层
+    'url_controller_layer'   => 'controller',
+    // 表单请求类型伪装变量
+    'var_method'             => '_method',
+    // 表单ajax伪装变量
+    'var_ajax'               => '_ajax',
+    // 表单pjax伪装变量
+    'var_pjax'               => '_pjax',
+    // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
+    'request_cache'          => false,
+    // 请求缓存有效期
+    'request_cache_expire'   => null,
+
+    // +----------------------------------------------------------------------
+    // | 模板设置
+    // +----------------------------------------------------------------------
+
+    'template'               => [
+        // 模板引擎类型 支持 php think 支持扩展
+        'type'         => 'Think',
+        // 模板路径
+        'view_path'    => '',
+        // 模板后缀
+        'view_suffix'  => 'html',
+        // 模板文件名分隔符
+        'view_depr'    => DS,
+        // 模板引擎普通标签开始标记
+        'tpl_begin'    => '{',
+        // 模板引擎普通标签结束标记
+        'tpl_end'      => '}',
+        // 标签库标签开始标记
+        'taglib_begin' => '<',
+        // 标签库标签结束标记
+        'taglib_end'   => '>',
+    ],
+
+    // 视图输出字符串内容替换
+    'view_replace_str'       => [],
+    // 默认跳转页面对应的模板文件
+    'response_auto_output'   => false,//不需要return输出模板
+    'dispatch_success_tmpl'  => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',
+    'dispatch_error_tmpl'    => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',
+
+    // +----------------------------------------------------------------------
+    // | 异常及错误设置
+    // +----------------------------------------------------------------------
+
+    // 异常页面的模板文件
+    'exception_tmpl'         => THINK_PATH . 'tpl' . DS . 'think_exception.tpl',
+
+    // 错误显示信息,非调试模式有效
+    'error_message'          => '页面错误!请稍后再试~',
+    // 显示错误信息
+    'show_error_msg'         => false,
+    // 异常处理handle类 留空使用 \think\exception\Handle
+    'exception_handle'       => '',
+
+    // +----------------------------------------------------------------------
+    // | 日志设置
+    // +----------------------------------------------------------------------
+
+    'log'                    => [
+        // 日志记录方式,支持 file socket
+        'type' => 'File',
+        // 日志保存目录
+        'path' => LOG_PATH,
+    ],
+
+    // +----------------------------------------------------------------------
+    // | Trace设置
+    // +----------------------------------------------------------------------
+
+    'trace'                  => [
+        //支持Html Console
+        'type' => 'Html',
+    ],
+
+    // +----------------------------------------------------------------------
+    // | 缓存设置
+    // +----------------------------------------------------------------------
+
+    'cache'                  => [
+        // 驱动方式
+        'type'   => 'File',
+        // 缓存保存目录
+        'path'   => CACHE_PATH,
+        // 缓存前缀
+        'prefix' => '',
+        // 缓存有效期 0表示永久缓存
+        'expire' => 0,
+    ],
+
+    // +----------------------------------------------------------------------
+    // | 会话设置
+    // +----------------------------------------------------------------------
+
+    'session'                => [
+        'id'             => '',
+        // SESSION_ID的提交变量,解决flash上传跨域
+        'var_session_id' => '',
+        // SESSION 前缀
+        'prefix'         => 'think',
+        // 驱动方式 支持redis memcache memcached
+        'type'           => '',
+        // 是否自动开启 SESSION
+        'auto_start'     => true,
+    ],
+
+    // +----------------------------------------------------------------------
+    // | Cookie设置
+    // +----------------------------------------------------------------------
+    'cookie'                 => [
+        // cookie 名称前缀
+        'prefix'    => '',
+        // cookie 保存时间
+        'expire'    => 0,
+        // cookie 保存路径
+        'path'      => '/',
+        // cookie 有效域名
+        'domain'    => '',
+        //  cookie 启用安全传输
+        'secure'    => false,
+        // httponly设置
+        'httponly'  => '',
+        // 是否使用 setcookie
+        'setcookie' => true,
+    ],
+    //验证码配置
+    'captcha'  => [
+        // 验证码字符集合
+        'codeSet'  => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
+        // 验证码字体大小(px)
+        'fontSize' => 25,
+        // 是否画混淆曲线
+        'useCurve' => false,
+        // 验证码图片高度
+        'imageH'   => 50,
+        // 验证码图片宽度
+        'imageW'   => 200,
+        // 验证码位数
+        'length'   => 3,
+        // 验证成功后是否重置
+        'reset'    => true
+    ],
+
+];

+ 53 - 0
gitignore/database.php

@@ -0,0 +1,53 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+
+return [
+    // 数据库类型
+    'type'            => 'mysql',
+    // 服务器地址
+    'hostname'        => '115.159.143.72',
+    // 数据库名
+    'database'        => 'wiki_api',
+    // 用户名
+    'username'        => 'wiki_api',
+    // 密码
+    'password'        => 'wiki_api',
+    // 端口
+    'hostport'        => '',
+    // 连接dsn
+    'dsn'             => '',
+    // 数据库连接参数
+    'params'          => [],
+    // 数据库编码默认采用utf8
+    'charset'         => 'utf8',
+    // 数据库表前缀
+    'prefix'          => 'api_',
+    // 数据库调试模式
+    'debug'           => true,
+    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
+    'deploy'          => 0,
+    // 数据库读写是否分离 主从式有效
+    'rw_separate'     => false,
+    // 读写分离后 主服务器数量
+    'master_num'      => 1,
+    // 指定从服务器序号
+    'slave_no'        => '',
+    // 是否严格检查字段是否存在
+    'fields_strict'   => true,
+    // 数据集返回类型
+    'resultset_type'  => 'array',
+    // 自动写入时间戳字段
+    'auto_timestamp'  => true,
+    // 时间字段取出后的默认时间格式
+    'datetime_format' => false,
+    // 是否需要进行SQL性能分析
+    'sql_explain'     => false,
+];

+ 57 - 0
gitignore/rules.php

@@ -0,0 +1,57 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: chengxun
+ * Date: 2017/7/18
+ * Time: 16:14
+ */
+use think\Route;
+use think\Request;
+use think\Cookie;
+use think\Config;
+use app\common\model\DomainConfig;
+$host =  Request::instance()->host();
+$domain_model = new DomainConfig();
+$domain_data = $domain_model->get_host_module($host);
+
+//$path = 'logs';
+//$msg = $domain_data;
+//if (! is_dir($path)) {
+//    mkdir($path);
+//}
+//$filename = $path . '/' . date('YmdHi') . '.log';
+//$content = date("Y-m-d H:i:s")."\r\n".json_encode($msg,JSON_UNESCAPED_UNICODE)."\r\n \r\n \r\n ";
+//file_put_contents($filename, $content, FILE_APPEND);
+
+
+if($host !== null){
+    if(empty($domain_data)){
+        if(Request::instance()->isMobile()){
+            header('Location: '.Config::get('url.mobile'));
+            exit;
+        }else{
+            header('Location: '.Config::get('url.home'));
+            exit;
+        }
+    }elseif ($domain_data['user_id'] > 0){
+        $con = Request::instance()->controller();
+        $fun = Request::instance()->action();
+        Route::domain($host,$domain_data['module']);
+        Route::rule('','shop/index');
+        Route::rule('index/index','shop/index');
+        Cookie::set('shop_id',$domain_data['user_id']);
+    }else{
+        Route::domain($host,$domain_data['module']);
+    }
+    if($domain_data['module'] != 'shop'){
+        Route::rule('goods/:id','detail/index');//商品链接
+    }
+
+//Route::rule('user','user/index');
+    Route::rule('share/:code','share/index');//分享链接
+    Route::rule('sweep/:r','Spc/sweep');//扫码二维码
+//    Route::rule('c/:c','Spc/sweep');//扫码二维码
+//    Route::rule('d/:d','Spc/sweep');//扫码二维码
+    Route::rule('query/:data','Spc/query');//扫码结果页
+    Route::rule('archive/:token','Spc/archive');//追溯档案展示
+}

+ 125 - 0
gitignore/wiki_api.sql

@@ -0,0 +1,125 @@
+SET FOREIGN_KEY_CHECKS=0;
+
+-- ----------------------------
+-- Table structure for api_admin_user
+-- ----------------------------
+DROP TABLE IF EXISTS `api_admin_user`;
+CREATE TABLE `api_admin_user` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
+  `user_name` varchar(255) NOT NULL COMMENT '用户名',
+  `user_password` char(32) NOT NULL COMMENT '密码',
+  `user_login` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数',
+  `user_reg_ip` varchar(25) NOT NULL DEFAULT '0' COMMENT '注册IP',
+  `user_mobile` varchar(20) DEFAULT '' COMMENT '用户手机',
+  `last_login_ip` varchar(25) NOT NULL DEFAULT '0' COMMENT '最后登录IP',
+  `user_header_img` varchar(255) DEFAULT '' COMMENT '用户头像160*160',
+  `user_group` int(10) unsigned DEFAULT '0' COMMENT '用户所属权限组 对应auth_group id',
+  `user_status` tinyint(1) DEFAULT '1' COMMENT '用户状态 1正常 2禁用',
+  `create_time` int(11) unsigned zerofill NOT NULL COMMENT '创建时间',
+  `update_time` int(11) unsigned zerofill NOT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='后台用户表';
+
+-- ----------------------------
+-- Table structure for api_date_type
+-- ----------------------------
+DROP TABLE IF EXISTS `api_date_type`;
+CREATE TABLE `api_date_type` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `type_name` varchar(60) DEFAULT NULL COMMENT '数据类型',
+  `create_time` int(11) unsigned DEFAULT NULL,
+  `update_time` int(11) unsigned DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='接口数据类型';
+
+-- ----------------------------
+-- Table structure for api_project
+-- ----------------------------
+DROP TABLE IF EXISTS `api_project`;
+CREATE TABLE `api_project` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `project_name` varchar(30) DEFAULT '' COMMENT '项目名称',
+  `project_icon` varchar(60) DEFAULT NULL COMMENT '项目图标',
+  `project_about` varchar(60) DEFAULT '' COMMENT '项目简介',
+  `create_time` int(11) unsigned DEFAULT '0',
+  `update_time` int(11) unsigned DEFAULT '0',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='项目表';
+
+-- ----------------------------
+-- Table structure for api_project_api
+-- ----------------------------
+DROP TABLE IF EXISTS `api_project_api`;
+CREATE TABLE `api_project_api` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '接口编号',
+  `project_module_id` int(11) DEFAULT NULL COMMENT '模块id',
+  `project_id` int(11) DEFAULT NULL COMMENT '项目id',
+  `project_cate_id` int(11) DEFAULT '0' COMMENT '接口分类id',
+  `api_url` varchar(100) DEFAULT NULL COMMENT '请求地址',
+  `api_name` varchar(100) DEFAULT NULL COMMENT '接口名',
+  `api_des` varchar(300) DEFAULT NULL COMMENT '接口描述',
+  `api_parameter` text COMMENT '请求参数{所有的主求参数,以json格式在此存放}',
+  `api_parameter_json` text COMMENT '请求参数的json格式',
+  `api_re` text COMMENT '返回值{以json格式在此存放}',
+  `api_re_json` text COMMENT '返回数据的json格式',
+  `api_isdel` tinyint(4) unsigned DEFAULT '0' COMMENT '{0:正常,1:删除}',
+  `project_url_id` int(11) NOT NULL COMMENT '项目url域名前缀id',
+  `api_oeder` int(11) DEFAULT '0' COMMENT '排序(值越大,越靠前)',
+  `request_type_id` int(11) NOT NULL COMMENT '请求类型id',
+  `api_memo` text COMMENT '备注',
+  `update_time` int(11) unsigned DEFAULT NULL COMMENT '最后操作时间',
+  `create_time` int(11) unsigned DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='接口明细表';
+
+-- ----------------------------
+-- Table structure for api_project_cate
+-- ----------------------------
+DROP TABLE IF EXISTS `api_project_cate`;
+CREATE TABLE `api_project_cate` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `cate_name` varchar(60) DEFAULT NULL,
+  `project_id` int(11) NOT NULL COMMENT '项目id',
+  `project_module_id` int(11) DEFAULT NULL,
+  `create_time` int(11) unsigned DEFAULT '0',
+  `update_time` int(11) unsigned DEFAULT '0',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='项目模块->分类表';
+
+-- ----------------------------
+-- Table structure for api_project_module
+-- ----------------------------
+DROP TABLE IF EXISTS `api_project_module`;
+CREATE TABLE `api_project_module` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `model_name` varchar(60) DEFAULT NULL COMMENT '项目模块名',
+  `project_id` int(11) DEFAULT NULL COMMENT '项目id',
+  `create_time` int(11) unsigned DEFAULT '0',
+  `update_time` int(11) unsigned DEFAULT '0',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='项目模块表';
+
+-- ----------------------------
+-- Table structure for api_project_url
+-- ----------------------------
+DROP TABLE IF EXISTS `api_project_url`;
+CREATE TABLE `api_project_url` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `project_id` int(11) NOT NULL COMMENT '项目id',
+  `url_domain` varchar(60) NOT NULL COMMENT '项目域名',
+  `create_time` int(11) unsigned DEFAULT '0',
+  `update_time` int(11) unsigned DEFAULT '0',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='项目域名表';
+
+-- ----------------------------
+-- Table structure for api_request_type
+-- ----------------------------
+DROP TABLE IF EXISTS `api_request_type`;
+CREATE TABLE `api_request_type` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `type_name` varchar(60) DEFAULT NULL COMMENT '请求类型',
+  `create_time` int(11) unsigned DEFAULT NULL,
+  `update_time` int(11) unsigned DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='接口请求类型';

+ 8 - 0
public/.htaccess

@@ -0,0 +1,8 @@
+<IfModule mod_rewrite.c>
+Options +FollowSymlinks -Multiviews
+RewriteEngine on
+
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
+</IfModule>

+ 17 - 0
public/index.php

@@ -0,0 +1,17 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006-2015 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+
+// [ 应用入口文件 ]
+// 定义配置文件目录和应用目录同级
+// 定义应用目录
+define('APP_PATH', __DIR__ . '/../application/');
+// 加载框架引导文件
+require __DIR__ . '/../thinkphp/start.php';

+ 2 - 0
public/robots.txt

@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:

+ 17 - 0
public/router.php

@@ -0,0 +1,17 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+// $Id$
+
+if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["REQUEST_URI"])) {
+    return false;
+} else {
+    require __DIR__ . "/index.php";
+}

文件差异内容过多而无法显示
+ 4729 - 0
public/static/adminLTE/css/AdminLTE.css


文件差异内容过多而无法显示
+ 7 - 0
public/static/adminLTE/css/AdminLTE.min.css


文件差异内容过多而无法显示
+ 4 - 0
public/static/adminLTE/css/font-awesome.min.css


文件差异内容过多而无法显示
+ 11 - 0
public/static/adminLTE/css/ionicons.min.css


文件差异内容过多而无法显示
+ 1799 - 0
public/static/adminLTE/css/skins/_all-skins.css


文件差异内容过多而无法显示
+ 1 - 0
public/static/adminLTE/css/skins/_all-skins.min.css


+ 176 - 0
public/static/adminLTE/css/skins/skin-black-light.css

@@ -0,0 +1,176 @@
+/*
+ * Skin: Black
+ * -----------
+ */
+/* skin-black navbar */
+.skin-black-light .main-header {
+  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
+}
+.skin-black-light .main-header .navbar-toggle {
+  color: #333;
+}
+.skin-black-light .main-header .navbar-brand {
+  color: #333;
+  border-right: 1px solid #eee;
+}
+.skin-black-light .main-header > .navbar {
+  background-color: #ffffff;
+}
+.skin-black-light .main-header > .navbar .nav > li > a {
+  color: #333333;
+}
+.skin-black-light .main-header > .navbar .nav > li > a:hover,
+.skin-black-light .main-header > .navbar .nav > li > a:active,
+.skin-black-light .main-header > .navbar .nav > li > a:focus,
+.skin-black-light .main-header > .navbar .nav .open > a,
+.skin-black-light .main-header > .navbar .nav .open > a:hover,
+.skin-black-light .main-header > .navbar .nav .open > a:focus,
+.skin-black-light .main-header > .navbar .nav > .active > a {
+  background: #ffffff;
+  color: #999999;
+}
+.skin-black-light .main-header > .navbar .sidebar-toggle {
+  color: #333333;
+}
+.skin-black-light .main-header > .navbar .sidebar-toggle:hover {
+  color: #999999;
+  background: #ffffff;
+}
+.skin-black-light .main-header > .navbar > .sidebar-toggle {
+  color: #333;
+  border-right: 1px solid #eee;
+}
+.skin-black-light .main-header > .navbar .navbar-nav > li > a {
+  border-right: 1px solid #eee;
+}
+.skin-black-light .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a,
+.skin-black-light .main-header > .navbar .navbar-right > li > a {
+  border-left: 1px solid #eee;
+  border-right-width: 0;
+}
+.skin-black-light .main-header > .logo {
+  background-color: #ffffff;
+  color: #333333;
+  border-bottom: 0 solid transparent;
+  border-right: 1px solid #eee;
+}
+.skin-black-light .main-header > .logo:hover {
+  background-color: #fcfcfc;
+}
+@media (max-width: 767px) {
+  .skin-black-light .main-header > .logo {
+    background-color: #222222;
+    color: #ffffff;
+    border-bottom: 0 solid transparent;
+    border-right: none;
+  }
+  .skin-black-light .main-header > .logo:hover {
+    background-color: #1f1f1f;
+  }
+}
+.skin-black-light .main-header li.user-header {
+  background-color: #222;
+}
+.skin-black-light .content-header {
+  background: transparent;
+  box-shadow: none;
+}
+.skin-black-light .wrapper,
+.skin-black-light .main-sidebar,
+.skin-black-light .left-side {
+  background-color: #f9fafc;
+}
+.skin-black-light .content-wrapper,
+.skin-black-light .main-footer {
+  border-left: 1px solid #d2d6de;
+}
+.skin-black-light .user-panel > .info,
+.skin-black-light .user-panel > .info > a {
+  color: #444444;
+}
+.skin-black-light .sidebar-menu > li {
+  -webkit-transition: border-left-color 0.3s ease;
+  -o-transition: border-left-color 0.3s ease;
+  transition: border-left-color 0.3s ease;
+}
+.skin-black-light .sidebar-menu > li.header {
+  color: #848484;
+  background: #f9fafc;
+}
+.skin-black-light .sidebar-menu > li > a {
+  border-left: 3px solid transparent;
+  font-weight: 600;
+}
+.skin-black-light .sidebar-menu > li:hover > a,
+.skin-black-light .sidebar-menu > li.active > a {
+  color: #000000;
+  background: #f4f4f5;
+}
+.skin-black-light .sidebar-menu > li.active {
+  border-left-color: #ffffff;
+}
+.skin-black-light .sidebar-menu > li.active > a {
+  font-weight: 600;
+}
+.skin-black-light .sidebar-menu > li > .treeview-menu {
+  background: #f4f4f5;
+}
+.skin-black-light .sidebar a {
+  color: #444444;
+}
+.skin-black-light .sidebar a:hover {
+  text-decoration: none;
+}
+.skin-black-light .treeview-menu > li > a {
+  color: #777777;
+}
+.skin-black-light .treeview-menu > li.active > a,
+.skin-black-light .treeview-menu > li > a:hover {
+  color: #000000;
+}
+.skin-black-light .treeview-menu > li.active > a {
+  font-weight: 600;
+}
+.skin-black-light .sidebar-form {
+  border-radius: 3px;
+  border: 1px solid #d2d6de;
+  margin: 10px 10px;
+}
+.skin-black-light .sidebar-form input[type="text"],
+.skin-black-light .sidebar-form .btn {
+  box-shadow: none;
+  background-color: #fff;
+  border: 1px solid transparent;
+  height: 35px;
+  -webkit-transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  transition: all 0.3s ease-in-out;
+}
+.skin-black-light .sidebar-form input[type="text"] {
+  color: #666;
+  border-top-left-radius: 2px;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 2px;
+}
+.skin-black-light .sidebar-form input[type="text"]:focus,
+.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  background-color: #fff;
+  color: #666;
+}
+.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  border-left-color: #fff;
+}
+.skin-black-light .sidebar-form .btn {
+  color: #999;
+  border-top-left-radius: 0;
+  border-top-right-radius: 2px;
+  border-bottom-right-radius: 2px;
+  border-bottom-left-radius: 0;
+}
+@media (min-width: 768px) {
+  .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
+    border-left: 1px solid #d2d6de;
+  }
+}

文件差异内容过多而无法显示
+ 1 - 0
public/static/adminLTE/css/skins/skin-black-light.min.css


+ 154 - 0
public/static/adminLTE/css/skins/skin-black.css

@@ -0,0 +1,154 @@
+/*
+ * Skin: Black
+ * -----------
+ */
+/* skin-black navbar */
+.skin-black .main-header {
+  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
+}
+.skin-black .main-header .navbar-toggle {
+  color: #333;
+}
+.skin-black .main-header .navbar-brand {
+  color: #333;
+  border-right: 1px solid #eee;
+}
+.skin-black .main-header > .navbar {
+  background-color: #ffffff;
+}
+.skin-black .main-header > .navbar .nav > li > a {
+  color: #333333;
+}
+.skin-black .main-header > .navbar .nav > li > a:hover,
+.skin-black .main-header > .navbar .nav > li > a:active,
+.skin-black .main-header > .navbar .nav > li > a:focus,
+.skin-black .main-header > .navbar .nav .open > a,
+.skin-black .main-header > .navbar .nav .open > a:hover,
+.skin-black .main-header > .navbar .nav .open > a:focus,
+.skin-black .main-header > .navbar .nav > .active > a {
+  background: #ffffff;
+  color: #999999;
+}
+.skin-black .main-header > .navbar .sidebar-toggle {
+  color: #333333;
+}
+.skin-black .main-header > .navbar .sidebar-toggle:hover {
+  color: #999999;
+  background: #ffffff;
+}
+.skin-black .main-header > .navbar > .sidebar-toggle {
+  color: #333;
+  border-right: 1px solid #eee;
+}
+.skin-black .main-header > .navbar .navbar-nav > li > a {
+  border-right: 1px solid #eee;
+}
+.skin-black .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a,
+.skin-black .main-header > .navbar .navbar-right > li > a {
+  border-left: 1px solid #eee;
+  border-right-width: 0;
+}
+.skin-black .main-header > .logo {
+  background-color: #ffffff;
+  color: #333333;
+  border-bottom: 0 solid transparent;
+  border-right: 1px solid #eee;
+}
+.skin-black .main-header > .logo:hover {
+  background-color: #fcfcfc;
+}
+@media (max-width: 767px) {
+  .skin-black .main-header > .logo {
+    background-color: #222222;
+    color: #ffffff;
+    border-bottom: 0 solid transparent;
+    border-right: none;
+  }
+  .skin-black .main-header > .logo:hover {
+    background-color: #1f1f1f;
+  }
+}
+.skin-black .main-header li.user-header {
+  background-color: #222;
+}
+.skin-black .content-header {
+  background: transparent;
+  box-shadow: none;
+}
+.skin-black .wrapper,
+.skin-black .main-sidebar,
+.skin-black .left-side {
+  background-color: #222d32;
+}
+.skin-black .user-panel > .info,
+.skin-black .user-panel > .info > a {
+  color: #fff;
+}
+.skin-black .sidebar-menu > li.header {
+  color: #4b646f;
+  background: #1a2226;
+}
+.skin-black .sidebar-menu > li > a {
+  border-left: 3px solid transparent;
+}
+.skin-black .sidebar-menu > li:hover > a,
+.skin-black .sidebar-menu > li.active > a {
+  color: #ffffff;
+  background: #1e282c;
+  border-left-color: #ffffff;
+}
+.skin-black .sidebar-menu > li > .treeview-menu {
+  margin: 0 1px;
+  background: #2c3b41;
+}
+.skin-black .sidebar a {
+  color: #b8c7ce;
+}
+.skin-black .sidebar a:hover {
+  text-decoration: none;
+}
+.skin-black .treeview-menu > li > a {
+  color: #8aa4af;
+}
+.skin-black .treeview-menu > li.active > a,
+.skin-black .treeview-menu > li > a:hover {
+  color: #ffffff;
+}
+.skin-black .sidebar-form {
+  border-radius: 3px;
+  border: 1px solid #374850;
+  margin: 10px 10px;
+}
+.skin-black .sidebar-form input[type="text"],
+.skin-black .sidebar-form .btn {
+  box-shadow: none;
+  background-color: #374850;
+  border: 1px solid transparent;
+  height: 35px;
+  -webkit-transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  transition: all 0.3s ease-in-out;
+}
+.skin-black .sidebar-form input[type="text"] {
+  color: #666;
+  border-top-left-radius: 2px;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 2px;
+}
+.skin-black .sidebar-form input[type="text"]:focus,
+.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  background-color: #fff;
+  color: #666;
+}
+.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  border-left-color: #fff;
+}
+.skin-black .sidebar-form .btn {
+  color: #999;
+  border-top-left-radius: 0;
+  border-top-right-radius: 2px;
+  border-bottom-right-radius: 2px;
+  border-bottom-left-radius: 0;
+}

文件差异内容过多而无法显示
+ 1 - 0
public/static/adminLTE/css/skins/skin-black.min.css


+ 167 - 0
public/static/adminLTE/css/skins/skin-blue-light.css

@@ -0,0 +1,167 @@
+/*
+ * Skin: Blue
+ * ----------
+ */
+.skin-blue-light .main-header .navbar {
+  background-color: #3c8dbc;
+}
+.skin-blue-light .main-header .navbar .nav > li > a {
+  color: #ffffff;
+}
+.skin-blue-light .main-header .navbar .nav > li > a:hover,
+.skin-blue-light .main-header .navbar .nav > li > a:active,
+.skin-blue-light .main-header .navbar .nav > li > a:focus,
+.skin-blue-light .main-header .navbar .nav .open > a,
+.skin-blue-light .main-header .navbar .nav .open > a:hover,
+.skin-blue-light .main-header .navbar .nav .open > a:focus,
+.skin-blue-light .main-header .navbar .nav > .active > a {
+  background: rgba(0, 0, 0, 0.1);
+  color: #f6f6f6;
+}
+.skin-blue-light .main-header .navbar .sidebar-toggle {
+  color: #ffffff;
+}
+.skin-blue-light .main-header .navbar .sidebar-toggle:hover {
+  color: #f6f6f6;
+  background: rgba(0, 0, 0, 0.1);
+}
+.skin-blue-light .main-header .navbar .sidebar-toggle {
+  color: #fff;
+}
+.skin-blue-light .main-header .navbar .sidebar-toggle:hover {
+  background-color: #367fa9;
+}
+@media (max-width: 767px) {
+  .skin-blue-light .main-header .navbar .dropdown-menu li.divider {
+    background-color: rgba(255, 255, 255, 0.1);
+  }
+  .skin-blue-light .main-header .navbar .dropdown-menu li a {
+    color: #fff;
+  }
+  .skin-blue-light .main-header .navbar .dropdown-menu li a:hover {
+    background: #367fa9;
+  }
+}
+.skin-blue-light .main-header .logo {
+  background-color: #3c8dbc;
+  color: #ffffff;
+  border-bottom: 0 solid transparent;
+}
+.skin-blue-light .main-header .logo:hover {
+  background-color: #3b8ab8;
+}
+.skin-blue-light .main-header li.user-header {
+  background-color: #3c8dbc;
+}
+.skin-blue-light .content-header {
+  background: transparent;
+}
+.skin-blue-light .wrapper,
+.skin-blue-light .main-sidebar,
+.skin-blue-light .left-side {
+  background-color: #f9fafc;
+}
+.skin-blue-light .content-wrapper,
+.skin-blue-light .main-footer {
+  border-left: 1px solid #d2d6de;
+}
+.skin-blue-light .user-panel > .info,
+.skin-blue-light .user-panel > .info > a {
+  color: #444444;
+}
+.skin-blue-light .sidebar-menu > li {
+  -webkit-transition: border-left-color 0.3s ease;
+  -o-transition: border-left-color 0.3s ease;
+  transition: border-left-color 0.3s ease;
+}
+.skin-blue-light .sidebar-menu > li.header {
+  color: #848484;
+  background: #f9fafc;
+}
+.skin-blue-light .sidebar-menu > li > a {
+  border-left: 3px solid transparent;
+  font-weight: 600;
+}
+.skin-blue-light .sidebar-menu > li:hover > a,
+.skin-blue-light .sidebar-menu > li.active > a {
+  color: #000000;
+  background: #f4f4f5;
+}
+.skin-blue-light .sidebar-menu > li.active {
+  border-left-color: #3c8dbc;
+}
+.skin-blue-light .sidebar-menu > li.active > a {
+  font-weight: 600;
+}
+.skin-blue-light .sidebar-menu > li > .treeview-menu {
+  background: #f4f4f5;
+}
+.skin-blue-light .sidebar a {
+  color: #444444;
+}
+.skin-blue-light .sidebar a:hover {
+  text-decoration: none;
+}
+.skin-blue-light .treeview-menu > li > a {
+  color: #777777;
+}
+.skin-blue-light .treeview-menu > li.active > a,
+.skin-blue-light .treeview-menu > li > a:hover {
+  color: #000000;
+}
+.skin-blue-light .treeview-menu > li.active > a {
+  font-weight: 600;
+}
+.skin-blue-light .sidebar-form {
+  border-radius: 3px;
+  border: 1px solid #d2d6de;
+  margin: 10px 10px;
+}
+.skin-blue-light .sidebar-form input[type="text"],
+.skin-blue-light .sidebar-form .btn {
+  box-shadow: none;
+  background-color: #fff;
+  border: 1px solid transparent;
+  height: 35px;
+  -webkit-transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  transition: all 0.3s ease-in-out;
+}
+.skin-blue-light .sidebar-form input[type="text"] {
+  color: #666;
+  border-top-left-radius: 2px;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 2px;
+}
+.skin-blue-light .sidebar-form input[type="text"]:focus,
+.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  background-color: #fff;
+  color: #666;
+}
+.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  border-left-color: #fff;
+}
+.skin-blue-light .sidebar-form .btn {
+  color: #999;
+  border-top-left-radius: 0;
+  border-top-right-radius: 2px;
+  border-bottom-right-radius: 2px;
+  border-bottom-left-radius: 0;
+}
+@media (min-width: 768px) {
+  .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
+    border-left: 1px solid #d2d6de;
+  }
+}
+.skin-blue-light .main-footer {
+  border-top-color: #d2d6de;
+}
+.skin-blue.layout-top-nav .main-header > .logo {
+  background-color: #3c8dbc;
+  color: #ffffff;
+  border-bottom: 0 solid transparent;
+}
+.skin-blue.layout-top-nav .main-header > .logo:hover {
+  background-color: #3b8ab8;
+}

文件差异内容过多而无法显示
+ 1 - 0
public/static/adminLTE/css/skins/skin-blue-light.min.css


+ 142 - 0
public/static/adminLTE/css/skins/skin-blue.css

@@ -0,0 +1,142 @@
+/*
+ * Skin: Blue
+ * ----------
+ */
+.skin-blue .main-header .navbar {
+  background-color: #3c8dbc;
+}
+.skin-blue .main-header .navbar .nav > li > a {
+  color: #ffffff;
+}
+.skin-blue .main-header .navbar .nav > li > a:hover,
+.skin-blue .main-header .navbar .nav > li > a:active,
+.skin-blue .main-header .navbar .nav > li > a:focus,
+.skin-blue .main-header .navbar .nav .open > a,
+.skin-blue .main-header .navbar .nav .open > a:hover,
+.skin-blue .main-header .navbar .nav .open > a:focus,
+.skin-blue .main-header .navbar .nav > .active > a {
+  background: rgba(0, 0, 0, 0.1);
+  color: #f6f6f6;
+}
+.skin-blue .main-header .navbar .sidebar-toggle {
+  color: #ffffff;
+}
+.skin-blue .main-header .navbar .sidebar-toggle:hover {
+  color: #f6f6f6;
+  background: rgba(0, 0, 0, 0.1);
+}
+.skin-blue .main-header .navbar .sidebar-toggle {
+  color: #fff;
+}
+.skin-blue .main-header .navbar .sidebar-toggle:hover {
+  background-color: #367fa9;
+}
+@media (max-width: 767px) {
+  .skin-blue .main-header .navbar .dropdown-menu li.divider {
+    background-color: rgba(255, 255, 255, 0.1);
+  }
+  .skin-blue .main-header .navbar .dropdown-menu li a {
+    color: #fff;
+  }
+  .skin-blue .main-header .navbar .dropdown-menu li a:hover {
+    background: #367fa9;
+  }
+}
+.skin-blue .main-header .logo {
+  background-color: #367fa9;
+  color: #ffffff;
+  border-bottom: 0 solid transparent;
+}
+.skin-blue .main-header .logo:hover {
+  background-color: #357ca5;
+}
+.skin-blue .main-header li.user-header {
+  background-color: #3c8dbc;
+}
+.skin-blue .content-header {
+  background: transparent;
+}
+.skin-blue .wrapper,
+.skin-blue .main-sidebar,
+.skin-blue .left-side {
+  background-color: #222d32;
+}
+.skin-blue .user-panel > .info,
+.skin-blue .user-panel > .info > a {
+  color: #fff;
+}
+.skin-blue .sidebar-menu > li.header {
+  color: #4b646f;
+  background: #1a2226;
+}
+.skin-blue .sidebar-menu > li > a {
+  border-left: 3px solid transparent;
+}
+.skin-blue .sidebar-menu > li:hover > a,
+.skin-blue .sidebar-menu > li.active > a {
+  color: #ffffff;
+  background: #1e282c;
+  border-left-color: #3c8dbc;
+}
+.skin-blue .sidebar-menu > li > .treeview-menu {
+  margin: 0 1px;
+  background: #2c3b41;
+}
+.skin-blue .sidebar a {
+  color: #b8c7ce;
+}
+.skin-blue .sidebar a:hover {
+  text-decoration: none;
+}
+.skin-blue .treeview-menu > li > a {
+  color: #8aa4af;
+}
+.skin-blue .treeview-menu > li.active > a,
+.skin-blue .treeview-menu > li > a:hover {
+  color: #ffffff;
+}
+.skin-blue .sidebar-form {
+  border-radius: 3px;
+  border: 1px solid #374850;
+  margin: 10px 10px;
+}
+.skin-blue .sidebar-form input[type="text"],
+.skin-blue .sidebar-form .btn {
+  box-shadow: none;
+  background-color: #374850;
+  border: 1px solid transparent;
+  height: 35px;
+  -webkit-transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  transition: all 0.3s ease-in-out;
+}
+.skin-blue .sidebar-form input[type="text"] {
+  color: #666;
+  border-top-left-radius: 2px;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 2px;
+}
+.skin-blue .sidebar-form input[type="text"]:focus,
+.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  background-color: #fff;
+  color: #666;
+}
+.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  border-left-color: #fff;
+}
+.skin-blue .sidebar-form .btn {
+  color: #999;
+  border-top-left-radius: 0;
+  border-top-right-radius: 2px;
+  border-bottom-right-radius: 2px;
+  border-bottom-left-radius: 0;
+}
+.skin-blue.layout-top-nav .main-header > .logo {
+  background-color: #3c8dbc;
+  color: #ffffff;
+  border-bottom: 0 solid transparent;
+}
+.skin-blue.layout-top-nav .main-header > .logo:hover {
+  background-color: #3b8ab8;
+}

文件差异内容过多而无法显示
+ 1 - 0
public/static/adminLTE/css/skins/skin-blue.min.css


+ 156 - 0
public/static/adminLTE/css/skins/skin-green-light.css

@@ -0,0 +1,156 @@
+/*
+ * Skin: Green
+ * -----------
+ */
+.skin-green-light .main-header .navbar {
+  background-color: #00a65a;
+}
+.skin-green-light .main-header .navbar .nav > li > a {
+  color: #ffffff;
+}
+.skin-green-light .main-header .navbar .nav > li > a:hover,
+.skin-green-light .main-header .navbar .nav > li > a:active,
+.skin-green-light .main-header .navbar .nav > li > a:focus,
+.skin-green-light .main-header .navbar .nav .open > a,
+.skin-green-light .main-header .navbar .nav .open > a:hover,
+.skin-green-light .main-header .navbar .nav .open > a:focus,
+.skin-green-light .main-header .navbar .nav > .active > a {
+  background: rgba(0, 0, 0, 0.1);
+  color: #f6f6f6;
+}
+.skin-green-light .main-header .navbar .sidebar-toggle {
+  color: #ffffff;
+}
+.skin-green-light .main-header .navbar .sidebar-toggle:hover {
+  color: #f6f6f6;
+  background: rgba(0, 0, 0, 0.1);
+}
+.skin-green-light .main-header .navbar .sidebar-toggle {
+  color: #fff;
+}
+.skin-green-light .main-header .navbar .sidebar-toggle:hover {
+  background-color: #008d4c;
+}
+@media (max-width: 767px) {
+  .skin-green-light .main-header .navbar .dropdown-menu li.divider {
+    background-color: rgba(255, 255, 255, 0.1);
+  }
+  .skin-green-light .main-header .navbar .dropdown-menu li a {
+    color: #fff;
+  }
+  .skin-green-light .main-header .navbar .dropdown-menu li a:hover {
+    background: #008d4c;
+  }
+}
+.skin-green-light .main-header .logo {
+  background-color: #00a65a;
+  color: #ffffff;
+  border-bottom: 0 solid transparent;
+}
+.skin-green-light .main-header .logo:hover {
+  background-color: #00a157;
+}
+.skin-green-light .main-header li.user-header {
+  background-color: #00a65a;
+}
+.skin-green-light .content-header {
+  background: transparent;
+}
+.skin-green-light .wrapper,
+.skin-green-light .main-sidebar,
+.skin-green-light .left-side {
+  background-color: #f9fafc;
+}
+.skin-green-light .content-wrapper,
+.skin-green-light .main-footer {
+  border-left: 1px solid #d2d6de;
+}
+.skin-green-light .user-panel > .info,
+.skin-green-light .user-panel > .info > a {
+  color: #444444;
+}
+.skin-green-light .sidebar-menu > li {
+  -webkit-transition: border-left-color 0.3s ease;
+  -o-transition: border-left-color 0.3s ease;
+  transition: border-left-color 0.3s ease;
+}
+.skin-green-light .sidebar-menu > li.header {
+  color: #848484;
+  background: #f9fafc;
+}
+.skin-green-light .sidebar-menu > li > a {
+  border-left: 3px solid transparent;
+  font-weight: 600;
+}
+.skin-green-light .sidebar-menu > li:hover > a,
+.skin-green-light .sidebar-menu > li.active > a {
+  color: #000000;
+  background: #f4f4f5;
+}
+.skin-green-light .sidebar-menu > li.active {
+  border-left-color: #00a65a;
+}
+.skin-green-light .sidebar-menu > li.active > a {
+  font-weight: 600;
+}
+.skin-green-light .sidebar-menu > li > .treeview-menu {
+  background: #f4f4f5;
+}
+.skin-green-light .sidebar a {
+  color: #444444;
+}
+.skin-green-light .sidebar a:hover {
+  text-decoration: none;
+}
+.skin-green-light .treeview-menu > li > a {
+  color: #777777;
+}
+.skin-green-light .treeview-menu > li.active > a,
+.skin-green-light .treeview-menu > li > a:hover {
+  color: #000000;
+}
+.skin-green-light .treeview-menu > li.active > a {
+  font-weight: 600;
+}
+.skin-green-light .sidebar-form {
+  border-radius: 3px;
+  border: 1px solid #d2d6de;
+  margin: 10px 10px;
+}
+.skin-green-light .sidebar-form input[type="text"],
+.skin-green-light .sidebar-form .btn {
+  box-shadow: none;
+  background-color: #fff;
+  border: 1px solid transparent;
+  height: 35px;
+  -webkit-transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  transition: all 0.3s ease-in-out;
+}
+.skin-green-light .sidebar-form input[type="text"] {
+  color: #666;
+  border-top-left-radius: 2px;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 2px;
+}
+.skin-green-light .sidebar-form input[type="text"]:focus,
+.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  background-color: #fff;
+  color: #666;
+}
+.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
+  border-left-color: #fff;
+}
+.skin-green-light .sidebar-form .btn {
+  color: #999;
+  border-top-left-radius: 0;
+  border-top-right-radius: 2px;
+  border-bottom-right-radius: 2px;
+  border-bottom-left-radius: 0;
+}
+@media (min-width: 768px) {
+  .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
+    border-left: 1px solid #d2d6de;
+  }
+}

文件差异内容过多而无法显示
+ 1 - 0
public/static/adminLTE/css/skins/skin-green-light.min.css


+ 0 - 0
public/static/adminLTE/css/skins/skin-green.css


部分文件因为文件数量过多而无法显示