wanghuirong 5 gadi atpakaļ
revīzija
55cd3bf44c
100 mainītis faili ar 12758 papildinājumiem un 0 dzēšanām
  1. 2 0
      .gitignore
  2. 42 0
      .travis.yml
  3. 1236 0
      CHANGELOG.md
  4. 32 0
      LICENSE.txt
  5. 133 0
      README.md
  6. 1 0
      application/.htaccess
  7. 15 0
      application/admin/config.php
  8. 35 0
      application/admin/controller/Base.php
  9. 138 0
      application/admin/controller/Column.php
  10. 139 0
      application/admin/controller/Good.php
  11. 258 0
      application/admin/controller/Index.php
  12. 54 0
      application/admin/controller/Login.php
  13. 138 0
      application/admin/controller/Tags.php
  14. 18 0
      application/admin/model/ColumnModel.php
  15. 16 0
      application/admin/model/GoodModel.php
  16. 15 0
      application/admin/model/IndexModel.php
  17. 15 0
      application/admin/model/LogModel.php
  18. 15 0
      application/admin/model/TagsModel.php
  19. 3 0
      application/admin/view/Base/fotter.html
  20. 113 0
      application/admin/view/Base/left.html
  21. 108 0
      application/admin/view/Base/top.html
  22. 74 0
      application/admin/view/column/add.html
  23. 74 0
      application/admin/view/column/edit.html
  24. 251 0
      application/admin/view/column/lst.html
  25. 120 0
      application/admin/view/good/add.html
  26. 121 0
      application/admin/view/good/edit.html
  27. 192 0
      application/admin/view/good/lst.html
  28. 82 0
      application/admin/view/index/add.html
  29. 90 0
      application/admin/view/index/edit.html
  30. 115 0
      application/admin/view/index/log.html
  31. 250 0
      application/admin/view/index/lst.html
  32. 168 0
      application/admin/view/index/server.html
  33. 552 0
      application/admin/view/login/lst.html
  34. 74 0
      application/admin/view/tags/add.html
  35. 73 0
      application/admin/view/tags/edit.html
  36. 251 0
      application/admin/view/tags/lst.html
  37. 12 0
      application/command.php
  38. 35 0
      application/common.php
  39. 251 0
      application/config.php
  40. 247 0
      application/data/tools.sql
  41. 55 0
      application/database.php
  42. 14 0
      application/extra/queue.php
  43. 16 0
      application/index/config.php
  44. 19 0
      application/index/controller/Activex.php
  45. 19 0
      application/index/controller/Alexa.php
  46. 19 0
      application/index/controller/Awesome.php
  47. 65 0
      application/index/controller/Base.php
  48. 18 0
      application/index/controller/Blue.php
  49. 19 0
      application/index/controller/Calputer.php
  50. 19 0
      application/index/controller/Color.php
  51. 19 0
      application/index/controller/Contrast.php
  52. 19 0
      application/index/controller/Cycle.php
  53. 19 0
      application/index/controller/Dxzh.php
  54. 19 0
      application/index/controller/Fire.php
  55. 19 0
      application/index/controller/Font.php
  56. 19 0
      application/index/controller/Ggame.php
  57. 64 0
      application/index/controller/Index.php
  58. 33 0
      application/index/controller/Indexs.php
  59. 19 0
      application/index/controller/Jsonpost.php
  60. 19 0
      application/index/controller/Jumpgame.php
  61. 19 0
      application/index/controller/Ld.php
  62. 19 0
      application/index/controller/Number.php
  63. 19 0
      application/index/controller/Ocr.php
  64. 20 0
      application/index/controller/Openmoji.php
  65. 19 0
      application/index/controller/Pdf.php
  66. 19 0
      application/index/controller/Pdfdoc.php
  67. 19 0
      application/index/controller/Ping.php
  68. 19 0
      application/index/controller/Ppt.php
  69. 19 0
      application/index/controller/Qc.php
  70. 19 0
      application/index/controller/Qqtalk.php
  71. 19 0
      application/index/controller/Requpack.php
  72. 19 0
      application/index/controller/Scgame.php
  73. 19 0
      application/index/controller/Sw.php
  74. 11 0
      application/index/model/ColumnModel.php
  75. 11 0
      application/index/model/CommonModel.php
  76. 84 0
      application/index/view/activex/lst.html
  77. 90 0
      application/index/view/alexa/lst.html
  78. 3 0
      application/index/view/awesome/lst.html
  79. 61 0
      application/index/view/base/footer.html
  80. 337 0
      application/index/view/base/header.html
  81. 234 0
      application/index/view/blue/lst.html
  82. 89 0
      application/index/view/calputer/lst.html
  83. 1139 0
      application/index/view/color/lst.html
  84. 375 0
      application/index/view/contrast/lst.html
  85. 304 0
      application/index/view/cycle/lst.html
  86. 133 0
      application/index/view/dxzh/lst.html
  87. 356 0
      application/index/view/fire/lst.html
  88. 199 0
      application/index/view/font/lst.html
  89. 1519 0
      application/index/view/ggame/lst.html
  90. 122 0
      application/index/view/index/index.html
  91. 112 0
      application/index/view/index/title.html
  92. 123 0
      application/index/view/indexs/index.html
  93. 233 0
      application/index/view/jsonpost/lst.html
  94. 39 0
      application/index/view/jumpgame/lst.html
  95. 243 0
      application/index/view/ld/lst.html
  96. 195 0
      application/index/view/number/lst.html
  97. 116 0
      application/index/view/ocr/lst.html
  98. 3 0
      application/index/view/openmoji/lst.html
  99. 194 0
      application/index/view/pdf/lst.html
  100. 115 0
      application/index/view/pdfdoc/lst.html

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+.idea
+composer.lock

+ 42 - 0
.travis.yml

@@ -0,0 +1,42 @@
+sudo: false
+
+language: php
+
+branches:
+  only:
+    - stable
+
+cache:
+  directories:
+    - $HOME/.composer/cache
+
+before_install:
+  - composer self-update
+
+install:
+  - composer install --no-dev --no-interaction --ignore-platform-reqs
+  - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip .
+  - composer require --update-no-dev --no-interaction "topthink/think-image:^1.0"
+  - composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0"
+  - composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0"
+  - composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0"
+  - composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0"
+  - composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0"
+  - composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0"
+  - composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0"
+  - composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0"
+  - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip .
+
+script:
+  - php think unit
+
+deploy:
+  provider: releases
+  api_key:
+    secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw=
+  file:
+    - ThinkPHP_Core.zip
+    - ThinkPHP_Full.zip
+  skip_cleanup: true
+  on:
+    tags: true

+ 1236 - 0
CHANGELOG.md

@@ -0,0 +1,1236 @@
+## 2019-1-11 V5.0.24
+
+本次更新包含了一个安全更新,建议更新
+
+- 改进关联的save方法
+- 改进模型数据验证
+- Collection增加values方法
+- 改进unique验证方法
+- 改进Request类的method方法
+
+## 2018-12-9 V5.0.23
+
+本次版本更新主要涉及一个安全更新,推荐尽快更新到最新版本。
+
+* Query支持调用模型的查询范围
+* 聚合查询字段支持`DISTINCT`
+* 改进闭包验证的参数
+* 多对多关联支持指定中间表数据名称
+* after/before验证支持指定字段验证
+* 改进多对多关联
+* 改进验证类
+* 增加`afterWith`和`beforeWith`验证规则 用于比较日期字段
+* 完善规则提示
+* 改进断线重连
+* 修正软删除的`destroy`方法
+* 修复模型的`save`方法当`data`变量为空 数据不验证
+* 模型增加`replace`方法
+* MorphOne 增加 make 方法创建关联对象实例
+* 改进`count`方法返回值类型
+* 改进聚合查询方法的正则判断
+* 改进`sqlsrv`驱动
+* 完善关联的`save`方法
+* 修正控制器名获取
+
+
+## 2018-10-22 V5.0.22
+
+该版本主要增加了JSON日志格式的支持,并且包含了一个安全更新。
+
+* 调试模式下关闭路由解析缓存
+* 改进Log类支持`json`日志格式
+* 改进聚合查询的安全性
+* 改进`count`查询的返回值类型
+
+## 2018-9-7 V5.0.21
+
+该版本主要做了一些已知问题的修正,改进了对Swoole的支持,以及增加路由解析缓存功能。
+
+* 增加路由解析缓存功能
+* 改进url生成的端口问题
+* 改进缓存驱动
+* 改进value方法的缓存处理
+* 修正Builder类的insertAll方法
+* 改进对Swoole的支持(使用参考:[xavier-swoole](https://github.com/xavieryang007/xavier-swoole))
+
+## 2018-5-11 V5.0.20
+
+该版本为修正版本,修正了一些已知的问题。
+
+* `join`方法的条件支持传入`Expression`对象
+* 改进驱动的`parseKey`方法
+* 改进Request类的`host`方法
+* 使用`exp`表达式更新数据的异常提示
+* 修正查询
+* 改进多对多关联的中间表模型更新
+
+## 2018-4-25 V5.0.19
+
+该版本属于改进版本,主要改进了composer自动加载及内置模板引擎的一处可能的安全隐患。
+
+* 改进composer自动加载
+* 改进模板引擎一处安全隐患
+* 改进`comment`方法解析
+* 改进分布式写入数据后及时读取的问题
+* 改进url操作方法的自动转换
+* 改进分页类魔术方法的返回值
+* SQL日志增加主从标记
+
+## 2018-4-14 V5.0.18
+
+该版本主要修正上一个发布的一些BUG,并且改进了`exp`表达式查询/写入的严谨性。
+
+* 修正`field`方法`*`兼容问题;
+* 修正`inc/dec`方法;
+* 修正`setInc/setDec`方法;
+* 改进`insertAll`方法;
+* 改进`parseTime`方法;
+* 改进`exp`表达式查询/写入的严谨性;
+
+## 2018-4-12 V5.0.17
+
+该版本主要是一些修正和改进,并且包含了一个安全更新。
+
+* 改进Response类`create`方法
+* 改进`inc/dec`查询
+* 默认模板渲染规则支持直接使用操作方法名
+* 改进视图驱动
+* 改进Request类ip方法 支持代理设置
+* 修正request类的`create`方法
+* 闭包查询使用`cache(true)`抛出异常
+* 改进composer自动加载文件
+* 增加`Expression`类及相关方法
+
+## 2018-3-26 V5.0.16
+
+该版本主要做了一些修正和改进,由于包含了一个安全更新,是一个推荐更新的版本。
+
+* 改进Url生成
+* 改进composer自动加载性能
+* 改进一对一查询
+* 改进查询缓存
+* 改进field方法
+* 优化Template类
+* 修正分页参数
+* 改进默认模板的自动识别
+* 改进Query类查询
+* Collection类改进
+* 改进模型类`readTransform`方法对序列化类型的处理
+* 改进trace显示
+* 文件日志支持自动清理
+* 改进断线重连的判断
+* 改进验证方法
+* 修正Query类view方法的数组表名定义
+* 改进参数绑定
+* 改进文件缓存的并发删除
+* 改进`inc/dec/exp`更新的安全性
+* 增加控制台配置
+
+## 2018-1-31 V5.0.15
+
+该版本主要进行了一些修正和完善
+
+* 改进View类
+* 改进chunk方法
+* 改进模板引擎的表达式语法
+* 改进自关联查询多级调用问题
+* 关联定义增加`selfRelation`方法用于设置是否自关联
+* 改进file类型的缓存`inc`和`dec`方法不改变缓存有效期
+* 改进软删除 支持设置`deleteTime`属性关闭
+* 改进`union`查询
+* 改进查询缓存
+* 优化File缓存自动生成空目录的问题
+* 改进日志写入并发问题
+* 修正`MorphTo`关联
+* 改进`join`自关联查询
+* 改进`case`标签解析
+* 改进Url类对`url_convert`配置的支持
+
+
+## 2018-1-1 V5.0.14
+
+V5.0.14版本主对复合主键进行了更多支持,改进了PHP7的兼容性,并且对数据库的一些问题做了改进。
+
+主要更新如下:
+
+* 改进Validate类的unique验证
+* Validate类增加checkRule方法用于静态验证多个规则
+* 改进多对多关联的save方法
+* 改进多对多的pivot对象
+* 修正setDec方法的延迟写入
+* max和min方法增加第二个参数用于设置是否强制转换数字
+* 改进View类
+* 改进join关联自身的问题
+* 改进union查询
+* 改进Url类
+* 改进同名路由不同请求的注册
+* 改进Builder类parseData对空数组的判断
+* 改进模板替换
+* 调整BelongsTo的hasWhere方法
+* 改进模板的编译缓存命名规则 增加布局模板的标识
+* 改进insertall方法
+* 改进chunk方法支持复合主键
+* 改进Error类的一个兼容问题
+* 改进model类的save方法的复合主键包含自增的情况
+* save方法改进复合主键的支持
+* 改进mysql的insertAll方法
+* 改进redis长连接多编号库的情况
+
+## 2017-12-12 V5.0.13
+
+`V5.0.13`主要是对模型和日志方面做了一些改进
+
+### [数据库和模型]
+
+* 改进Model类`save`方法对`oracle`的支持
+* 改进中间表模型的实例化
+* 改进`Pivot`类
+* 模型`saveall`方法支持配合`isUpdate`方法
+* 模型类增加`force`方法设置是否强制更新所有数据
+* 关联自动删除增加一对多关联删除支持
+* 改进`hasWhere`查询的数据重复问题
+* 改进一对多`with`关联查询的`field`支持
+* 模型`saveall`方法支持返回数据集 读取`resultSetType`属性
+* 改进废弃字段判断
+* 模型的`hasWhere`方法增加`fields`参数
+* 改进断线重连异常捕获机制
+* 修正Query类的`inc`和`dec`方法的Mysql关键词问题
+* 修正数据集对象的BUG
+
+### [其它]
+
+* 增加`app_dispatch`钩子位置
+* cookie类`httponly`参数默认改为false
+* File日志驱动增加`single`参数配置是否记录单个文件日志
+* 单个日志文件支持大小设置
+* 改进日志记录的ip地址
+* Redis缓存驱动改用`serialize`序列化替代json序列化
+* 改进异常捕获
+* 改进上传文件验证
+* 修正redis驱动
+* 改进File缓存的`clear`方法
+* 代码格式化规范
+* 改进一处PHP7.2的兼容问题
+* 调试模式下不读取字段缓存文件
+* `default_filter`支持在模块中配置生效
+
+## 2017-11-06 V5.0.12
+
+5.0.12是一个修正版本,包含了上个版本发布以来的一些修正和完善,主要包括:
+
+* 上传类和验证类的多语言支持;
+* 模型增加排除和废弃字段支持;
+* 改进insertAll方法的分批处理;
+* 改进对枚举类型的参数绑定支持;
+* 修正社区反馈的问题;
+
+
+### [数据库和模型]
+
+* 改进Connection类的getRealSql方法
+* 改进append方法支持一对一关联的bind设置
+* 改进whereTime查询
+* 改进model类的`destroy`方法
+* 修正softdelete
+* 修正`chunk`方法对时间字段的支持
+* Collection类增加`push`方法
+* 改进alias方法 
+* 修正模型类的`append`处理
+* 改进`appendRelationAttr`方法
+* 改进HasManyThrough关联
+* 改进MorphTo关联
+* 模型增加废除字段`disuse`定义
+* 增加排除字段方法`except`
+* 修正`has`方法 
+* 改进参数绑定类型对枚举类型的支持
+* 改进`insertAll`方法的分批处理
+
+
+### [其它]
+
+* 改进Loader类`controller`和`validate`方法支持多层
+* 验证提示信息支持多语言
+* File类错误信息支持多语言 
+* 模板渲染异常处理
+* 修正rest控制器
+* 改进trace驱动
+* 改进Cache类的`remember`方法 
+* 改进`url_common_param`的情况下urlencode的问题
+* 改进Url类
+* 改进`exception_handle`配置参数对闭包的支持 
+* 执行路由缓存命令前检测RUNTIME_PATH是否存在 
+* 调整部分`CacheDriver::dec`在为空的时候递减的行为
+* 优化移动端的显示
+* 改进对JSON-Handle插件的支持
+* 改进redis的`get`方法
+* 改进Request类的`host`方法
+
+
+## 2017-09-08 V5.0.11
+
+5.0.11是一个安全及修正版本,包含了上个版本发布以来的一些修正和完善,更新了几处可能的安全问题,主要包括:
+
+* 完善缓存驱动;
+* 改进数据库查询;
+* 改进URL生成类;
+* 缓存有效期支持指定过期时间;
+
+### [数据库和模型]
+
+* 改进数据库驱动类
+* 改进`group`方法的字段关键字冲突
+* 修正聚合查询返回null的问题
+* 改进Db类的强制重连
+* 改进关联的属性绑定
+* 修正事务的断线重连
+* 修正对象的条件查询
+* Db类增加`clear`方法
+* 改进数组查询条件中的`null`查询
+* 改进Query类的`chunk`方法支持排序设置
+* 改进HasOne和HasMany关联的`has`方法
+* 改进软删除的关联删除
+* 改进一个字段多次查询条件
+
+### [其它]
+
+* 缓存有效期支持指定过期时间(`DateTime`);
+* 改进Url生成对端口号的支持
+* 改进`RouteNotFound`异常提示
+* 改进路由分组的全局完整路由匹配
+* 修正部分验证规则的错误提示问题
+* 支持数据集和模型的XML响应输出
+* 改进模板的三元运算标签
+* 改进控制器不存在的错误提示
+* input助手函数支持`route`变量获取
+* 支持在配置文件中读取额外配置参数
+* 完善分页类
+* 修复Trait命名空间重复问题
+* 修正Request类的env方法
+* 优先使用Cookie中的多语言设置
+* 获取缓存标签的时候过滤无效的缓存标识
+* 修正路由批量注册的一个BUG
+* `exception_handle`配置参数支持使用闭包定义`render`处理
+* 请求缓存支持缓存标签设置
+* 缓存类`remember`方法增加并发锁定机制
+* 改进上传类对`swf`的支持
+* 改进Session类的`prefix`方法
+
+## 2017-07-04 V5.0.10
+
+5.0.10是一个修正版本,并包含了一个安全更新,推荐更新,主要包含:
+
+* 数据库和模型的多处改进
+* 添加新的行为监听
+* 路由支持Response设置
+* 改进调试模式下数据库敏感信息暴露
+
+### [数据库和模型]
+
+* 修正join其他表时生成的delete语句错误
+* 修正远程一对多
+* insertall支持replace
+* 修正多对多默认的中间表获取
+* 改进更新后的模型`update_time`数据更新
+* model类增加`removeRelation`方法
+* 模型类增加`setInc`和`setDec`方法
+* 模型类增加`autoWriteTimestamp`方法动态设置时间字段写入
+* 改进驱动类方法的断线重连判断
+* 改进多对多的数据更新
+* 改进BelongsToMany关联查询
+* 修正Query类的value和column方法
+* 改进in查询的去重问题
+* 修正模型类的scope方法传值问题
+* 调整模型的save方法`before_update`检查位置
+* 修改器和获取器方法支持第三个关联数据参数
+
+### [其它]
+
+* 默认关闭调试模式
+* 修复配置extra目录临时文件的错误加载
+* 添加log存储完成行为监听 `log_write_done`
+* 改进Build类生成公共文件的目录判断
+* 增加`response_send`行为监听 
+* 路由增加response参数用于绑定response处理行为
+* 改进redirect的参数传入
+* 改进环境变量的布尔值读取
+* 改进Url类的域名传入
+* 修正命令行文件生成
+* 改进命令行下面的URL生成
+* 添加`app_host`参数设置默认的URL根地址
+* 改进`Request`类`isSsl`方法判断支持CDN
+* 增加`record_trace`配置参数用于日志记录trace信息
+
+## 2017-05-20 V5.0.9
+
+5.0.9是一个修正版本,推荐更新,主要更新包含:
+
+### [数据库和模型]
+
+* 修正关联自动写入
+* 修正模型数据变化判断对为空数据的支持
+* 修正Query类的useSoftDelete方法返回值
+* 修正一对一嵌套关联数组定义的问题
+* 修正使用了手动参数绑定的时候的缓存BUG
+* 改进数据库类的一处不能嵌套查询的缺陷
+* 改进数据库断线重连判断
+* 改进模型的appendRelationAttr方法
+* 改进模型类destroy方法传入空数组的时候不进行任何删除操作
+* 改进一对多关联数据的输出
+* 改进模型的save方法对allowField方法的支持
+* 改进分页类的toarray方法 增加总页数
+* 比较运算增加闭包子查询支持
+* db助手函数默认不再强制重新连接
+* 改进belongsToMany的查询字段指定
+* 分页类增加each方法
+
+### [其它]
+
+* 修正路由分组的路由规则大小写识别问题
+* 修正命令行的日志切割生成
+* 修复URL生成时路由规则中的参数没有进行 urlencode
+* 改进Request类的filter过滤机制 支持正则
+* 改进Response类支持手动设置contentType
+* 修正异常模板中助手函数未定义错误
+
+## 2017-04-28 V5.0.8
+
+### 主要调整
+
+* 改进关联模型
+* 改进日志记录
+* 增加多态一对一关联
+* 修正社区反馈的一些BUG
+
+### [ 请求和路由 ]
+
+* 修正Request类`cookie`方法对前缀的支持
+* 改进全局请求缓存的缓存标识
+* 改进Request类`param`方法
+* 修正别名路由
+
+### [ 模型和数据库 ]
+
+* 改进模型数据的更新检查
+* 改进Query类的`column`方法
+* 改进软删除条件在使用闭包查询情况下多次生成的问题
+* belongsToMany增加数据同步方法
+* 查询范围支持静态调用
+* 增加多态一对一(MorphOne)关联
+* 改进BelongsTo关联
+* 改进多态关联支持关联数据添加和注销
+* 改进多对多关联,支持中间表模型自定义 并且定义的时候不需要使用完整表名
+* 改进浮点数类型转换避免出现逗号
+* 调整关联模型的save方法返回值
+* 模型类的get方法第一个参数必须 如果传入null则返回null
+* model的save方法改进如果数据没有更新不执行
+* Query增加`useSoftDelete`方法可以单独设置软删除条件
+* 重载BelongsToMany的`selectOrFail`和`findOrFail`方法
+* 重载BelongsToMany的`select` 、`find`和 `paginate`方法
+* 增加模型和`Pivot`对象的`parent`属性
+* 多对多关联支持设置中间表模型
+* 改进Query类的`view`方法中字段的关键字问题
+* 主从数据库的时候开启事务始终操作主库
+
+### [ 其它 ]
+
+* 改进Cookie类的`get`方法支持获取全部
+* `schema`指令增加`config`参数,支持传入数据库连接配置
+* 改进cache类的`store`方法为当次有效
+* 修正cache助手函数对`option`传参的支持
+* 修复`optimize:autoload`命令在`EXTEND_PATH`目录不存在的情况下,类库映射生成错误问题
+* 支持自定义的根命名空间也可以生成类库映射缓存
+* 验证字段比较支持对比其他字段
+* 修复`Session::prefix('xxx');`设置当前作用域BUG
+* 改进`optimize::schema`指令
+* 修复`clear`指令无法删除多级目录下文件的问题
+* 改进默认语言读取和自动侦测
+* 改进日志记录格式 并且命令行下面日志改为实时写入
+* 修正模板标签默认值某些情况无效bug
+* 改进Url生成对完整域名的支持
+* 改进`Clear`指令不删除`.gitignore` 文件
+* 修复Memcache缓存驱动的`inc`方法
+
+### 调整
+
+* 如果自定义了应用的命名空间的话,原来的`app_namespace`配置参数改为`APP_NAMESPACE`常量在入口文件中定义
+* 多对多关联的中间表名称不需要添加表前缀
+* 模型的scope方法之后只能使用数据库查询方法而不能使用模型的方法
+
+## 2017-02-24 V5.0.7
+
+### 主要调整
+
+本次更新主要为BUG修正和改进,主要改进如下:
+
+* 改进全局请求缓存对子域名的支持;
+* 改进数据缓存自动更新机制;
+* 关联统计支持指定统计属性名;
+* 模型嵌套关联支持数组方式;
+* HasOne关联支持`has`和`hasWhere`方法;
+* 路由的`ext`和`deny_ext`参数允许设置为空(表示不允许任何后缀或者必须使用后缀访问);
+
+### 修正如下
+
+* 修正 IN / NOT IN 型查询条件为空导致的 sql 语法错误
+* 修正分页类的`toArray`方法对简洁模式的支持
+* 修正Model类`delete`方法对多主键的处理
+* 修正软删除对`Mongodb`的支持
+* 修正`Connection`类一处可能的错误
+* 改进Query类的find方法的缓存机制
+* 修正BelongsTo关联
+* 修正JOIN方式一对一关联预载入闭包查询
+* 修正Query类的`insert`方法一处可能存在的警告错误
+* 修正Model类一处Collection的`use`冲突
+* 修正Model类`hasWhere`方法
+* 修正URl生成对`ext`参数的支持
+* 文件缓存`clear`方法会删除空目录
+* 修正Route类的`parseUrlPath`方法一处问题
+
+### 调整如下
+
+* 默认关闭session的安全参数`secure`,此选项仅能在HTTPS下设置开启
+
+## 2017-02-07 V5.0.6
+
+### 主要调整:
+
+本次更新主要为BUG修正及优化(可无缝升级):
+
+* 数据库支持断线重连机制;
+* 改进查询事件的回调参数;
+* 改进数据自动缓存机制;
+* 增加时间字段自动格式转换设置;
+* `MongoDb`和`Oracle`扩展更新至最新核心框架;
+
+### [数据库和模型]
+
+* 修正hasMany关联的`has`方法
+* 去除一些数据库惯例配置 避免使用数据库扩展的时候影响
+* 改进多对多的`attach`方法的返回值
+* 增加Mysql的断线重连机制和开关
+* 改进Query类的`find`方法数据缓存机制
+* 改进Query类查询事件的回调参数
+* 改进Query类的自动缓存更新
+* Model类增加`readonly`方法
+* 改进Model类的`has`和`hasWhere`方法
+* 改进模型类的`get`和`all`方法 第二个参数为true或者数字表示缓存参数
+* 修复闭包查询条件为空导致的 sql 语法错误
+* 改进Query类的`setBuilder`方法 避免因自定义连接器类后找不到生成器类
+* 删除Connection类废弃属性`resultSetType`
+* 优化Connection类`close`方法
+* 修正Connection类的`bindParam`方法对存储过程的支持
+* 数据库配置参数`datetime_format` 设置为`false`表示关闭时间字段自动转换输出
+* 改进软删除的数据库兼容性问题 支持`Mongodb`
+
+### [其它]
+
+* 改进Url类生成 `root`为`/`的情况
+* redirect助手函数和controller类的redirect方法增加with参数
+* 全局请求缓存添加排除规则 添加request_cache_except配置参数
+* Cache类store方法参数允许为空 表示获取当前缓存驱动句柄
+* 改进Validate类的ip验证规则
+
+## 2017-01-23 V5.0.5
+### 主要调整:
+
+本次更新主要改进了数据访问层和模型关联:
+
+* 增加快捷查询及设置方法;
+* 增加关联统计功能;
+* 增加关联查询延迟预载入功能;
+* 增加关联一对一自动写入和删除;
+* 改进存储过程查询;
+* 改进关联数据输出;
+* 优化查询性能;
+* 模型时间字段自动格式化输出;
+
+### [请求和路由]
+
+* 改进路由定义的后缀检测
+* Route类的`rest`方法支持覆盖定义
+* 改进Request类的`put`和`post`方法对`json`格式参数的接收
+* Request类增加`contentType`方法
+* 改进Route类`setRule`方法 
+* 改进Request类的`create`方法
+* 改进路由到控制器类的方法对默认渲染模板的影响
+* 修正Url类`build`方法定义路由别名后的BUG
+
+### [数据库和模型]
+
+* 增加关联统计功能
+* 增加一对一关联自动写入功能
+* 修正聚合模型的`delete`方法
+* 改进Model类的`useGlobalScope`方法
+* Model类的日期类型支持设置为类名
+* Query类增加`data`/`inc`/`dec`/`exp`方法用于快捷设置数据 `insert`和`update`方法参数可以为空 读取`data`设置数据
+* 优化Connection的查询性能
+* 修正Builder类的`parseOrder`方法
+* 修正BelongsToMany类的`attach`方法
+* BelongsToMany类的`attach`方法改进 支持批量写入
+* 改进BelongsToMany类的`saveall`方法 增加第三个参数 用于指定额外参数是否一致
+* Query类的`order`方法支持多次调用合并
+* 改进`count`方法对`group`查询的支持
+* 增加时间戳自动写入的判断
+* 改进Model类`writeTransform`方法
+* 改进Model的时间戳字段写入和读取
+* 写入数据为对象的时候检测是否有`__toString`方法
+* 改进Mysql驱动的`getFields`方法
+* 改进自动时间字段的输出
+* `like`查询条件支持数组
+* 自动时间字段的获取自动使用时间格式化
+* 改进单个字段多次Or查询情况的查询
+* 修正`null`查询的条件合并
+* 改进Query类`paginate`方法第一个参数可以使用数组参数
+* 改进数据集对象的返回,由Query类的select方法进行数据集转换,原生查询不再支持返回数据集对象
+* 增加`whereNull`、`whereIn`等一系列快捷查询方法
+* `fetchPdo`方法调整
+* 改进对存储过程调用的支持 改进`getRealSql`的调用机制 改进数据表字段使用中划线的参数绑定支持
+* 数据库配置参数增加`result_type` 用于设置数据返回类型 方法参数名称调整
+* 改进Query类的`whereTime`方法支持更多的时间日期表达式(默认查询条件为大于指定时间表达式)
+* 取消`min`/`max`/`sum`/`avg`方法的参数默认值
+* Query类增加`getPdo`方法用于返回`PDOStatement`对象
+* 改进`today`的日期表达式查询
+* 改进关联属性的获取
+* 改进关联定义中包含查询条件后重复执行的问题
+* 改进参数绑定支持中文字段自动绑定
+* 改进Builder类的`insertall`方法 增加对null和对象数据的处理
+* 改进参数绑定类型 支持`bit`类型自动绑定
+* Connection类`model`方法更改为`getQuery`
+* 优化Connection类`__call`方法
+* 修正聚合模型
+* 一对一关联预载入默认改为IN查询方式
+* 增加`collection`助手函数用于数据集转换
+* 增加`load_relation`助手函数用于数组的延迟预载入
+* 改进Model类的`has`方法第二个参数支持使用数组和闭包,无需再使用`hasWhere`
+* `relation`方法支持嵌套关联查询
+* 增加`think\model\Collection`作为模型的数据集查询集合对象
+* 取消关联定义的`alias`参数(仅`morphTo`保留)
+* Model类的`delete`方法,支持没有主键的情况
+* Model类的`allowField`方法支持逗号分割的字符串
+* 改进写入数据的自动参数绑定的参数名混淆问题
+* 关联预载入查询的属性名默认使用小写+下划线命名
+* Query类的`with`和`relation`方法支持多次调用
+* Collection类增加`hidden`、`visible`和`append`方法
+* 修正软删除的强制删除方法
+
+### [其它]
+
+* `unique`验证规则支持指定完整模型类 并且默认会优先检测模型类是否存在 不存在则检测数据表
+* 改进`Loader`类的`model`、`controller` 和 `validate`方法 支持直接传入类名实例化
+* `Session`类增加安全选项`httponly`和`secure`
+* 可以允许自定义`Output`的driver,以适应命令行模式下调用其它命令行指令 
+* 改进`loader`类`action`的参数污染问题
+* Validate类的`confirm`验证改为恒等判断
+* 改进`Validate`类的错误信息处理
+* 修正`Validate`类的布尔值规则验证
+* 改进`cookie`助手函数对前缀的支持
+* 文件缓存默认开启子目录缓存避免文件过多导致性能问题
+
+### [调整]
+* Connection类`model`方法更改为`getQuery`
+* 原生查询不再支持返回数据集对象
+* 分页查询返回类型变成`think\Paginator`(用法不变)
+* 模型的时间日期字段会自动进行格式化输出,不需要进行额外处理。
+* Session类添加了`secure`和`httponly`参数,并且默认是true
+
+## 2016-12-20 V5.0.4
+### 主要调整:
+
+* 关联模型重构并增加多态一对多关联;
+* 数据库支持一个字段多次调用不同查询条件;
+* 增加数据库CURD事件支持;
+* 路由到类和控制器的方法支持传入额外参数;
+* 支持全局模板变量赋值;
+* 模型支持独立设置查询数据集对象;
+* 日志针对命令行及调试做出改进;
+* 改进Hook类的行为方法调用
+
+### [请求和路由]
+* 请求缓存支持模块单独开启
+* Request类`post`方法支持获取`json`方式的请求数据
+* 路由到类的方法和控制器方法 支持传入额外参数,用于方法的参数
+* 改进控制器自动搜索的目录规范
+* 改进请求缓存
+* 改进自动参数绑定
+* 修正路由的请求缓存设置
+* 改进Route类name方法
+
+### [数据库和模型]
+* 增加数据库查询(CURD)事件
+* 改进多表更新的字段不存在问题
+* 改进Model类的`useGlobalScope`方法
+* 修正子查询作为表名查询的问题
+* Model类增加`resultSetType`属性 用于指定模型查询的数据集对象(默认为空返回数组) 
+* Model类增加`toCollection`方法(自动调用)
+* 关联模型架构调整
+* 改进预载入`with`方法的参数支持小写和下划线定义
+* 修正关联多对多一处错误
+* 改进关联多对多的查询
+* 关联模型支持多态一对多关联
+* 预载入关联查询支持关联对象属性绑定到当前模型
+* 支持追加关联对象的属性到当前模型数据
+* 一对一关联预载入支持JOIN和IN两种方式(默认为JOIN)
+* 改进多对多查询
+* 改进模型更新的数据变化比较规则
+* 查询支持一个字段多次查询条件
+* 改进sql日志的sql语句
+* 修正`join`自身表的别名覆盖问题
+* 模型类的`connection`属性和数据库默认配置合并
+* 改进`in`和`between`查询条件的自动参数绑定
+* 改进Query类对数据集对象以及关联字段排序的支持
+* 增加模型的快捷事件方法
+* 改进Query类的`getTableInfo`方法缓存读取
+* model类的`saveAll`方法支持调用`allowField`方法进行字段过滤
+* 修正关联查询的时候 `whereTime`方法的bug
+* 改进Query类的聚合查询
+* table方法支持字符串方式的子查询
+* 修正`count` `avg`方法使用`fetchsql`无法正确返回sql的问题
+
+### [其它]
+* 改进命令行下的日志记录
+* 部署模式下简化日志记录
+* 增加debug日志类型 仅限调试模式记录
+* 改进Template类`parseTemplateFile`方法
+* 改进Validate类的`getRuleMsg`方法
+* 控制器的`error`方法在AJAX请求默认返回url为空
+* Validate类架构方法增加`field`参数 用于设置验证字段的描述
+* 改进App类`invokeMethod`方法对架构函数依赖注入的支持
+* 增加RedirectResponse的`restore`方法返回值
+* View类增加`share`静态方法 用于静态赋值模板变量
+* 验证类增加`hasScene`方法判断是否存在某个场景的验证配置
+* 修正redis和session驱动的`destroy`方法返回值
+* 空操作方法的参数传入去掉操作方法后缀
+* 在控制器中调用request和view增加类型提示
+* 改进`input`助手函数支持多维数据获取
+* Cache类增加`pull`和`remember`方法
+* 改进验证类的`confirm`验证规则 支持自动规则识别
+* 改进验证类的错误信息定义
+* 增加Validate类自定义验证错误信息的替换规则
+* Cookie类增加`forever`方法用于永久保存
+* 模板渲染支持从视图根目录读取模板
+* 改进Hook类的exec方法
+
+### [调整]
+* Db类查询不再支持设置自定义数据集对象
+* 废除Query类的`fetchClass`方法
+* 控制器的`error`方法在AJAX请求默认返回的url为空
+* 关联方法定义不支持使用小写下划线,必须使用驼峰法
+* 行为类的方法必须使用驼峰法命名
+
+## 2016-11-11 V5.0.3
+### 主要调整:
+* 请求缓存增强;
+* 路由增强;
+* 数据库和模型完善;
+* 支持反射的异常捕获;
+* File类改进;
+* 修正社区反馈的一些BUG;
+
+### [ 请求和路由 ]
+
+* 资源路由自动注册的路由规则的时候会记录当前使用的资源标识;
+* 增强请求缓存功能和规则定义,支持全局自动缓存
+* 修正控制器自动搜索的大小写问题
+* 修正路由绑定到命名空间后 类的自动定位
+* 改进Route类的parseRule方法 路由地址中的变量替换不自动去除路由变量
+* 改进控制器自动搜索
+* Route类增加setOption和getOption方法 用于记录当前路由执行过程中的参数信息
+* 优化路由分组方法
+* 改进分组路由的url生成
+
+### [ 数据库和模型 ]
+
+* 一对一关联查询方法支持定义`field`方法
+* 聚合模型支持设置`field`属性
+* 改进Query类的`alias`方法
+* 改进Query类`join`和`view`方法的table参数
+* 改进Query类`where`方法
+* 改进Query类的`paginate`方法,支持`order`方法
+* 改进Query类的`min`和`max`方法支持日期类型
+* 修正软删除`withTrashed`方法
+* 优化Connection类的`getRealSql`方法生成的sql
+
+### [ 其它 ]
+* 增加request_cache和request_cache_expire配置参数用于配置全局请求缓存;
+* 修正input助手函数的数组过滤
+* cache助手函数支持清空操作
+* 改进Config类load方法 一级配置名称强制转为小写
+* 修正Url多次生成的问题
+* File类修正某些环境下面无法识别上传文件的问题
+* 改进App类的空操作方法调用
+* 域名部署URL生成不依赖 url_domain_deploy 配置参数
+* 修正Url类域名部署的问题
+* 视图文件目录支持集中式存放 不放入模块目录
+* cache助手函数支持 remember方法
+* Request类的input方法或者input助手函数的`filter`参数支持传入null 表示不过滤
+
+## 2016-10-24 V5.0.2
+### 主要调整:
+
+* 数据库和模型完善;
+* 路由功能完善;
+* 增加`yaml`配置格式支持;
+* 依赖注入完善;
+* Session类完善;
+* Cookie类完善;
+* Validate类完善;
+* 支持反射类的异常捕获;
+* 修正社区反馈BUG;
+
+### [ 请求和路由 ]
+* 依赖注入的类如果定义了`invoke`方法则自动调用
+* Request类的`header`方法增加自定义header支持
+* Request类禁止直接实例化调用
+* 改进Request类ip方法
+* 路由变量规则支持闭包定义
+* 路由参数增加`ajax`和`pjax`判断
+* 别名路由增加允许和排除操作
+* 改进路由域名绑定后的url生成
+* 路由生成改进对路由到类的支持
+* 路由生成支持`url_param_type`配置参数
+* 路由生成支持别名路由
+* Route重定向规则支持更多` schema`
+* 别名路由支持定义单独方法的请求类型
+* 改进路由分组的url生成
+* 路由规则的组合变量支持可选分隔符定义
+* 改进路由合并参数的获取
+* 路由规则支持单独设置url分隔符,路由参数为 `param_depr`
+* 自动搜索控制器支持自定义访问控制器层的情况
+* 改进路由标识不区分大小写
+* 改进路由地址是否定义过路由规则的检测
+
+### [ 数据库和模型 ]
+* 改进Query类的join方法
+* 改进Query类分页方法的参数绑定
+* 修正软删除方法
+* 修正Query类parseOrder方法一处错误
+* 修正sqlsrv驱动parseOrder方法
+* 修正Query类setInc和setDec方法
+* 改进Model类的save方法支持非自增主键的处理
+* 整型字段的参数绑定如果为空写入默认值0
+* 改进Model类has和hasWhere方法
+* 改进Query类的value方法缓存判断
+* 改进Query类join方法对子查询支持
+* 改进Query类的table方法和alias方法用法
+* 关联预载入支持`hasOne`自关联
+* 改进Builder类的parseKey方法
+* 改进Builder类的join/alias/table方法的解析
+* 改进全局查询范围
+* 改进Query类的聚合查询方法的返回值
+* 改进关联属性的读取
+* 改进聚合模型主键和关联键相同的情况
+* 改进模型在开启`class_suffix`参数情况下的name属性的识别
+
+### [ 其它 ]
+* Cache类增加`remember`方法 用于当获取的缓存不存在的时候自动写入
+* Session类增加`flash`方法用于设置下一次请求有效的值 
+* Session类增加`flush`方法用于清空当前请求有效的值 
+* Session类增加`push`方法用于更新数组数据
+* 增加yaml配置格式支持
+* 改进App类的反射异常无法捕获问题
+* 修正session助手函数的清空操作
+* 改进验证类的`image`方法
+* 改进验证类的`activeUrl`方法 
+* 改进自定义验证规则的使用
+* 改进控制器自动搜索后的控制器名获取
+* 修正import方法加载extend目录类库
+* 修正json_encode时 "Failed calling XXX::jsonSerialize()" 的异常
+* 改进Loader类model和validate方法的单例问题
+* 改进方法执行的日志记录
+* 改进模板引擎的Think变量解析
+* 改进Lang类`load`方法
+* 验证错误信息支持多语言读取
+* 改进ROOT_PATH常量
+* 改进语言包加载
+* 改进模板session和cookie变量获取,自动判断前缀
+* 缓存驱动统一增加handler方法用于获取操作对象的句柄(某些缓存类型可能为null)
+* File类增加`__call`方法用于兼容5.0版本的`md5`和 `sha1`方法
+* 改进文件缓存驱动的`clear`方法
+* Lang类增加`setLangCookieExpire`方法设置多语言cookie过期时间
+* 增加`route_complete_match`配置参数
+
+### [ 调整 ]
+下列模型属性和方法由原来的静态(static)定义改为动态定义:
+* 聚合模型的`relationModel`属性
+* Model类的`useGlobalScope `属性
+* 全局查询范围方法`base`改为动态方法
+* 软删除属性 `deleteTime`属性
+
+
+## 2016-9-28 V5.0.1
+### 主要调整:
+* [依赖注入](215849)完善;
+* [扩展配置](118027)文件位置调整;
+* 新增数据表[字段缓存命令](211524);
+* 支持设置当前的查询对象;
+* 支持[请求和路由缓存](215850);
+
+### [ 请求和路由 ]
+* 改进Controller类的`success`和`error`方法的跳转地址识别 支持更多Scheme
+* 操作方法和架构方法支持任何对象自动注入
+* Requesst类增加`getInput`方法 用于获取` php://input`值
+* 路由到方法的时候 支持架构方法注入请求对象
+* 改进Route类路由到类的判断
+* Request增加`cache`方法,支持请求缓存
+* 绑定到模块后 路由依然优先检查
+* 路由增加请求缓存参数
+* 修正路由组合变量的可选变量的BUG
+
+### [ 数据库 ]
+* 修正`pgsql`数据库驱动的数据表字段信息读取
+* 改进Query类的`view`方法 第二个参数默认值更改为true 获取全部的字段
+* 数据库配置信息增加`query`参数用于配置查询对象名称
+* 型类增加`query`属性用于配置模型需要的查询对象名称
+* 改进数据表字段缓存读取
+* 改进数据表字段缓存生成 模型为抽象类或者 没有继承Model类 不生成字段缓存
+* 改进模型的字段缓存 虚拟模型不生成字段缓存
+* 改进数据表字段缓存生成 支持读取模块的模型生成
+* 改进聚合模型的`save`方法 主键写入
+* 模型类的field属性定义简化 取消`Query`类的`allowField`和`setFieldType`方法及相关属性
+* 改进数据表字段缓存生成 支持生成多个数据库的
+* 更新数据库驱动类 改进`getTables`方法
+* 增加` optimize:schema` 命令 用于生成数据表字段信息缓存
+* 修正一个查询条件多个条件的时候的参数绑定BUG
+* 分页查询方法`paginate`第二个参数传入数字表示总记录数
+* 修正mysql的`JSON`字段查询
+* 改进Query类的getOptions方法 当name参数不存在的时候返回null
+
+### [ 模型和关联 ]
+* 模型类的field属性不需要添加字段类型定义
+* 改进Model类 添加`getDb`静态方法获取db查询对象
+* 改进聚合模型`save`方法返回值
+* 改进Relation类`save`方法
+* 修正关联模型 多对多`save`方法一处问题
+* 改进Model类的save方法 修正不按主键查询的更新问题
+* 时间字段获取器获取的时候为NULL则不做转换
+
+### [ 其它 ]
+
+* 改进配置缓存生成 支持扩展配置
+* 取消`extra_config_list`配置参数 扩展配置文件直接放到 `extra`目录下面即可自动加载(数据库配置文件位置不变)
+* cache助手函数支持判断缓存是否有效
+* 修正 模板引擎驱动类的`config`方法
+* 修复在配置Model属性field=true情况下,通过`__call`调用db()引发的BUG
+* 改进模板引擎驱动的config方法 支持获取配置参数值
+* 改进redirct的url地址解析
+* 删除`File`类的`md5`和`sha1`方法 改为`hash`方法 支持更多的散列值类型生成
+* 增加`response_end`行为标签
+* 改进默认语言的加载
+
+## 2016-9-15 V5.0
+
+### [ 请求和路由 ]
+
+* Request对象支持动态绑定属性
+* 定义了路由规则的URL原地址禁止访问
+* 改进路由规则存储结构
+* 路由分组功能增强,支持嵌套和虚拟分组
+* 路由URL高效反解
+* 改进Request对象param方法获取优先级
+* 路由增加name方法设置和获取路由标识
+* 增加MISS和AUTO路由规则
+* Route类增加auto方法 支持注册一个自动解析URL的路由
+* 路由规则支持模型绑定
+* 路由变量统一使用param方法获取
+* 路由规则标识功能和自动标识
+* 增加生成路由缓存指令 optimize:route
+* Request对象增加route方法单独获取路由变量
+* Request对象的param get post put request delete server cookie env方法的第一个参数传入false 则表示获取原始数据 不进行过滤
+* 改进自动路由标识生成 支持不同的路由规则 指向同一个路由标识,改进Url自动生成对路由标识的支持
+* 改进Request类 filter属性的初始化
+* 改进Request类的isAjax和isPjax方法
+* Request类增加token方法
+* 路由配置文件支持多个 使用 route_config_file 配置参数配置
+* 域名绑定支持https检测
+* 改进域名绑定 支持同时绑定模块和其他 支持绑定到数组定义的路由规则,取消域名绑定到分组
+* 路由规则增加PATCH请求类型支持
+* 增加route_complete_match配置参数设置全局路由规则定义是否采用完整匹配 可以由路由规则的参数complete_match 进行覆盖
+* 改进路由的 后缀参数识别 优先于系统的伪静态后缀参数
+* Url类增加root方法用于指定当前root地址(不含域名)
+* 改进Url生成对可选参数的支持
+
+### [ 数据库 ]
+
+* 查询条件自动参数绑定
+* 改进分页方法支持参数绑定
+* Query类的cache方法增加缓存标签参数
+* Query类的update和delete方法支持调用cache方法 会自动清除指定key的缓存 配合查询方法的cache方法一起使用 
+* 改进Query类的延迟写入方法
+* Query类的column和value方法支持fetchsql
+* 改进日期查询方法
+* 改进存储过程方法exec的支持
+* 改进Connection类的getLastInsID方法获取
+* 记录数据库的连接日志(连接时间和DSN)
+* 改进Query类的select方法的返回结果集判断  
+* Connection类增加getNumRows方法
+* 数据库事务方法取消返回值
+* 改进Query类的chunk方法对主键的获取
+* 改进当数据库驱动类型使用完整命名空间的时候 Query类的builder方法的问题
+
+### [ 模型 ]
+
+* 增加软删除功能
+* 关联模型和预载入改进
+* 关联预载入查询闭包支持更多的连贯操作
+* 完善savell方法支持更新和验证
+* 关联定义统一返回Relation类
+* Model类的has和hasWhere方法对join类型的支持
+* Model类的data方法 批量赋值数据的时候 清空原始数据
+* Model类的get方法第三个参数传入true的时候会自动更新缓存
+* Model类增加只读字段支持
+* Model类增加useGlobalScope方法设置是否启用全局查询范围
+* Model类的base方法改为静态定义 全局多次调用有效
+* Model类支持设定主键、字段信息和字段类型,不依赖自动获取,提高性能
+* Model类的data方法 支持修改器
+* 改进Relation类对非数字类型主键的支持
+* 改进Relation类的一对多删除
+* 修正Relation类的一对多关联预载入查询
+
+### [ 日志和缓存 ]
+
+* 支持日志类型分离存储
+* 日志允许设置记录级别
+* 增加缓存标签功能
+* 缓存类增加pull方法用于获取并删除
+* cache助手函数增加tag参数
+* 简化日志信息,隐藏数据库密码
+* 增加cache/session redis驱动的库选择逻辑;
+* memcached驱动的配置参数支持option参数
+* 调试模式下面 日志记录增加页面的header和param参数记录
+* memcached缓存驱动增加连接账号密码参数
+* 缓存支持设置complex类型 支持配置多种缓存并用store切换
+* 缓存类增加tag方法 用于缓存标签设置 clear方法支持清除某个缓存标签的数据
+* File类型日志驱动支持设置单独文件记录不同的日志级别
+* 改进文件缓存和日志的存储文件名命名规范
+* 缓存类增加inc和dec方法 针对数值型数据提供自增和自减操作
+* Cache类增加has方法 get方法支持默认值
+
+### [ 其它 ]
+
+* 视图类支持设置模板引擎参数
+* 增加表单令牌生成和验证
+* 增加中文验证规则
+* 增加image和文件相关验证规则
+* 重定向Response对象支持with方法隐含传参
+* 改进Session类自动初始化
+* session类增加pull方法用于获取并删除
+* 增加Env类用于获取环境变量
+* Request类get/post/put等更改赋值后param方法依然有效
+* 改进Jump跳转地址支持Url::build 解析
+* 优化Hook类
+* 应用调试模式和页面trace支持环境变量设置
+* config助手函数支持 config('?name') 用法
+* 支持使用BIND_MODULE常量的方式绑定模块
+* 入口文件自动绑定模块功能
+* 改进验证异常类的错误信息和模板输出,支持批量验证的错误信息抛出
+* 完善console 增加output一些常用的方法
+* 增加token助手函数 用于在页面快速显示令牌
+* 增加halt方法用于变量调试并中断输出
+* 改进Validate类的number验证规则 和 integer区分开
+* optimize:autoload增加对extend扩展目录的扫描
+* 改进Validate类的boolean验证规则 支持表单数据
+* 改进cookie助手函数支持 判断是否存在某个cookie值
+* 改进abort助手函数 支持抛出HttpResponseException异常
+* 改进File类增加对上传错误的处理
+* 改进File类move方法的返回对象增加上传表单信息,增加获取文件散列值的方法
+* 改进File类的move方法的返回对象改为返回File对象实例
+* 增加clear和optimize:config 指令
+* 改进File类和Validate类的图像文件类型验证
+* 控制器的操作方法支持注入Request之外的对象实例
+* Request类 param(true) 支持获取带文件的数据
+* input助手函数第一个参数增加默认值
+* Validate类增加image验证规则 并改进max min length支持多种数据类型
+* json输出时数据编码失败后抛出异常
+
+### [ 调整 ]
+* 废除路由映射(静态路由)定义
+* 取消url_deny_suffix配置 改由路由的deny_ext参数设置
+* 模型save方法返回值改为影响的记录数,取消getId参数
+* Request对象controller方法返回驼峰控制器名
+* 控制器前置操作方法不存在则抛出异常
+* Loader类db方法增加name标识参数
+* db助手函数增加第三个参数用于指定连接标识
+* Sqlsrv驱动默认不对数据表字段进行小写转换
+* 移除sae驱动 改为扩展包
+* Oracle驱动移出核心包
+* Firebird驱动移出核心包
+* 取消别名定义文件alias.php
+* 配置参数读取的时候取消环境变量判断 需要读取环境变量的时候使用Env类
+* 环境变量定义文件更改为 .env 由原来的PHP数组改为ini格式定义(支持数组方式)
+* 状态配置和扩展配置的加载顺序调整 便于状态配置文件中可以更改扩展配置的参数
+* 取消域名绑定到路由分组功能
+* 控制器类的success和error方法url参数支持传入空字符串,则不做任何处理
+* 控制器的error success result redirect方法均不需要使用return
+* 创建目录的权限修改为0644
+
+
+## 2016-7-1 RC4版本
+### [ 底层架构 ]
+* 增加Request类 并支持自动注入
+* 统一Composer的自动加载机制
+* 增加Response类的子类扩展
+* 增加File类用于上传和文件操作
+* 取消模式扩展 SAE支持降权
+* 优化框架入口文件
+* 改进异常机制
+* App类输入/输出调整
+* 单元测试的完美支持
+* 增加新的控制台指令
+* 取消系统路径之外的大部分常量定义
+* 类库映射文件由命令行动态生成 包含应用类库
+
+### [ 数据库 ]
+
+* 增加分表规则方法
+* 增加日期和时间表达式查询方法
+* 增加分页查询方法
+* 增加视图查询方法
+* 默认保持数据表字段大小写
+* 数据缓存自动更新机制
+* 完善事务嵌套支持
+* 改进存储过程数据读取
+* 支持设置数据库查询数据集返回类型
+
+### [ 模型 ]
+* 增加Merge扩展模型
+* 模型支持动态查询
+* 增加更多的类型自动转换支持
+* 增加全局查询范围
+* toJson/toArray支持隐藏和增加属性输出
+* 增加远程一对多关联
+
+### [ 其它 ]
+* 日志存储结构调整
+* Trace调试功能从日志类独立并增强
+* 原Input类功能并入Request类
+* 类库映射文件采用命令行生成 包含应用类库
+* 验证类的check方法data数据取消引用传参
+* 路由增加MISS路由规则
+* 路由增加路由别名功能
+
+## 2016-4-23 RC3版本
+### [ 底层架构 ]
+* 框架核心仓库和应用仓库分离 便于composer独立更新
+* 数据库类重构,拆分为Connection(连接器)/Query(查询器)/Builder(SQL生成器)
+* 模型类重构,更加对象化
+
+### [ 数据库 ]
+
+* 新的查询语法
+* 闭包查询和闭包事务
+* Query对象查询
+* 数据分批处理
+* 数据库SQL执行监听
+
+### [ 模型 ]
+* 对象化操作
+* 支持静态调用(查询)
+* 支持读取器/修改器
+* 时间戳字段
+* 对象/数组访问
+* JSON序列化
+* 事件触发
+* 命名范围
+* 类型自动转换
+* 数据验证和完成
+* 关联查询/写入
+* 关联预载入
+
+### [ 其它更新 ]
+* 路由类增加快速路由支持
+* 验证Validate类重构
+* Build类增加快速创建模块的方法
+* Url生成类改进
+* Validate类改进
+* View类及模板引擎驱动设计改进
+* 取消模板引擎的模板主题设计
+* 修正社区反馈的一些问题
+* 助手函数重新命名
+* `router.php`文件位置移动
+
+## 2016-3-11 RC2版本
+
+* 重新设计的自动验证和自动完成机制(原有自动验证和完成支持采用traits\model\Auto兼容);
+* 验证类Validate独立设计;
+* 自动生成功能交给Console完成;
+* 对数据表字段大小写的处理;
+* 改进Controller类(取消traits\contorller\View);
+* 改进Input类;
+* 改进Url类;
+* 改进Cookie类;
+* 优化Loader类;
+* 优化Route类;
+* 优化Template类;
+* Session类自动初始化;
+* 增加traits\model\Bulk模型扩展用于大批量数据写入和更新;
+* 缓存类和日志类增加Test驱动;
+* 对异常机制和错误处理的改进;
+* 增加URL控制器和操作是否自动转换开关;
+* 支持类名后缀设置;
+* 取消操作绑定到类的功能;
+* 取消use_db_switch参数设计;
+
+## 2016-1-30 RC1版本
+### [ 底层架构 ]
+
+*   真正的惰性加载
+*   核心类库组件化
+*   框架引导文件
+*   完善的类库自动加载(支持Composer)
+*   采用Traits扩展
+*   API友好(输出、异常和调试)
+*   文件命名规范调整
+
+### [ 调试和异常 ]
+
+*   专为API开发而设计的输出、调试和异常处理
+*   日志类支持本地文件/SAE/页面Trace/SocketLog输出,可以实现远程浏览器插件调试
+*   内置trace方法直接远程调试
+*   异常预警通知驱动设计
+*   数据库SQL性能分析支持
+
+### [ 路由 ]
+
+*   动态注册路由
+*   自定义路由检测方法
+*   路由分组功能
+*   规则路由中的变量支持采用正则规则定义(包括全局和局部)
+*   闭包路由
+*   支持路由到多层控制器
+
+### [ 控制器 ]
+
+*   控制器类无需继承controller类
+*   灵活的多层控制器支持
+*   可以Traits引入高级控制器功能
+*   rest/yar/rpc/hprose/jsonrpc控制器扩展
+*   前置操作方法支持排除和指定操作
+
+
+### [ 模型 ]
+
+*   简化的核心模型
+*   Traits引入高级模型/视图模型/关联模型
+*   主从分布时候主数据库读操作支持
+*   改进的join方法和order方法
+
+### [ 视图 ]
+
+*   视图解析驱动设计(模板引擎)
+*   所有方法不再直接输出而是返回交由系统统一输出处理
+*   动态切换模板主题设计
+*   动态切换模板引擎设计
+
+### [ 数据库 ]
+
+*   完全基于PDO实现
+*   简化的数据库驱动设计
+*   SQL性能监控(需要开启数据库调试模式)
+*   PDO参数绑定改进
+
+### [ 其他方面 ]
+
+*   目录和MVC文件自动生成支持
+*   I函数默认添加变量修饰符为/s
+*   一个行为类里面支持为多个标签位定义不同的方法
+*   更多的社交扩展类库

+ 32 - 0
LICENSE.txt

@@ -0,0 +1,32 @@
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+版权所有Copyright © 2006-2017 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.

+ 133 - 0
README.md

@@ -0,0 +1,133 @@
+ThinkPHP 5.0
+===============
+
+[![Total Downloads](https://poser.pugx.org/topthink/think/downloads)](https://packagist.org/packages/topthink/think)
+[![Latest Stable Version](https://poser.pugx.org/topthink/think/v/stable)](https://packagist.org/packages/topthink/think)
+[![Latest Unstable Version](https://poser.pugx.org/topthink/think/v/unstable)](https://packagist.org/packages/topthink/think)
+[![License](https://poser.pugx.org/topthink/think/license)](https://packagist.org/packages/topthink/think)
+
+ThinkPHP5在保持快速开发和大道至简的核心理念不变的同时,PHP版本要求提升到5.4,对已有的CBD模式做了更深的强化,优化核心,减少依赖,基于全新的架构思想和命名空间实现,是ThinkPHP突破原有框架思路的颠覆之作,其主要特性包括:
+
+ + 基于命名空间和众多PHP新特性
+ + 核心功能组件化
+ + 强化路由功能
+ + 更灵活的控制器
+ + 重构的模型和数据库类
+ + 配置文件可分离
+ + 重写的自动验证和完成
+ + 简化扩展机制
+ + API支持完善
+ + 改进的Log类
+ + 命令行访问支持
+ + REST支持
+ + 引导文件支持
+ + 方便的自动生成定义
+ + 真正惰性加载
+ + 分布式环境支持
+ + 更多的社交类库
+
+> ThinkPHP5的运行环境要求PHP5.4以上。
+
+详细开发文档参考 [ThinkPHP5完全开发手册](http://www.kancloud.cn/manual/thinkphp5)
+
+## 目录结构
+
+初始的目录结构如下:
+
+~~~
+www  WEB部署目录(或者子目录)
+├─application           应用目录
+│  ├─common             公共模块目录(可以更改)
+│  ├─module_name        模块目录
+│  │  ├─config.php      模块配置文件
+│  │  ├─common.php      模块函数文件
+│  │  ├─controller      控制器目录
+│  │  ├─model           模型目录
+│  │  ├─view            视图目录
+│  │  └─ ...            更多类库目录
+│  │
+│  ├─command.php        命令行工具配置文件
+│  ├─common.php         公共函数文件
+│  ├─config.php         公共配置文件
+│  ├─route.php          路由配置文件
+│  ├─tags.php           应用行为扩展定义文件
+│  └─database.php       数据库配置文件
+│
+├─public                WEB目录(对外访问目录)
+│  ├─index.php          入口文件
+│  ├─router.php         快速测试文件
+│  └─.htaccess          用于apache的重写
+│
+├─thinkphp              框架系统目录
+│  ├─lang               语言文件目录
+│  ├─library            框架类库目录
+│  │  ├─think           Think类库包目录
+│  │  └─traits          系统Trait目录
+│  │
+│  ├─tpl                系统模板目录
+│  ├─base.php           基础定义文件
+│  ├─console.php        控制台入口文件
+│  ├─convention.php     框架惯例配置文件
+│  ├─helper.php         助手函数文件
+│  ├─phpunit.xml        phpunit配置文件
+│  └─start.php          框架入口文件
+│
+├─extend                扩展类库目录
+├─runtime               应用的运行时目录(可写,可定制)
+├─vendor                第三方类库目录(Composer依赖库)
+├─build.php             自动生成定义文件(参考)
+├─composer.json         composer 定义文件
+├─LICENSE.txt           授权说明文件
+├─README.md             README 文件
+├─think                 命令行入口文件
+~~~
+
+> router.php用于php自带webserver支持,可用于快速测试
+> 切换到public目录后,启动命令:php -S localhost:8888  router.php
+> 上面的目录结构和名称是可以改变的,这取决于你的入口文件和配置参数。
+
+## 命名规范
+
+`ThinkPHP5`遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:
+
+### 目录和文件
+
+*   目录不强制规范,驼峰和小写+下划线模式均支持;
+*   类库、函数文件统一以`.php`为后缀;
+*   类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
+*   类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);
+
+### 函数和类、属性命名
+
+*   类的命名采用驼峰法,并且首字母大写,例如 `User`、`UserType`,默认不需要添加后缀,例如`UserController`应该直接命名为`User`;
+*   函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 `get_client_ip`;
+*   方法的命名使用驼峰法,并且首字母小写,例如 `getUserName`;
+*   属性的命名使用驼峰法,并且首字母小写,例如 `tableName`、`instance`;
+*   以双下划线“__”打头的函数或方法作为魔法方法,例如 `__call` 和 `__autoload`;
+
+### 常量和配置
+
+*   常量以大写字母和下划线命名,例如 `APP_PATH`和 `THINK_PATH`;
+*   配置参数以小写字母和下划线命名,例如 `url_route_on` 和`url_convert`;
+
+### 数据表和字段
+
+*   数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 `think_user` 表和 `user_name`字段,不建议使用驼峰和中文作为数据表字段命名。
+
+## 参与开发
+
+请参阅 [ThinkPHP5 核心框架包](https://github.com/top-think/framework)。
+
+## 版权信息
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+
+本项目包含的第三方源码和二进制文件之版权信息另行标注。
+
+版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn)
+
+All rights reserved。
+
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+更多细节参阅 [LICENSE.txt](LICENSE.txt)

+ 1 - 0
application/.htaccess

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

+ 15 - 0
application/admin/config.php

@@ -0,0 +1,15 @@
+<?php
+
+return [
+
+    // 视图输出字符串内容替换
+    'view_replace_str'       => [
+        '__ROOT__'=>'/static/admin/layui2.5.6',
+        '__IMAGES__'=>'/static/admin/images',
+        '__UPLOAD__'=>'/static/uploads',//上传图片地址
+        '__SP__'=>'/static/admin/special',//上传图片地址
+    ],
+
+
+
+];

+ 35 - 0
application/admin/controller/Base.php

@@ -0,0 +1,35 @@
+<?php
+namespace app\admin\controller;
+use think\Controller;
+
+use think\Request;
+
+class Base extends Controller//公共控制器
+{ 
+    protected $current_action;
+
+    public function _initialize()
+    {
+        //判断有无uname或者id的session,如果没有,跳转到登陆界面
+        if(!session('uname')||!session('id')){
+             $this->redirect(url('/lst'));//url("/lst"):为后台登录地址,设置路由进行替换的(在route.php中查看)
+        }
+
+        $request=Request::instance();
+        $moudle=$request->module(); //获取当前模型名称
+        $con=$request->controller(); //获取当前控制器名称
+        $action=$request->action();  //获取当前方法名称
+        
+
+        $this->assign(array(
+            'con'=>$con,
+            'action'=>$action,
+        ));
+        
+
+    }
+
+    
+
+   
+}

+ 138 - 0
application/admin/controller/Column.php

@@ -0,0 +1,138 @@
+<?php
+namespace app\admin\controller;
+
+use think\Request;
+use app\admin\model\ColumnModel;
+
+class Column extends Base
+{
+    
+
+    public function lst()//栏目列表(自己做的)
+    {   
+
+        return view(); 
+       
+         
+    }
+
+
+
+    public function lst_data(Request $request){//栏目列表json数据动态表格显示(分页)
+        $user = new ColumnModel();
+        $id = request()->param('id');//接收请求数据id
+        if(!empty($id)){//不为空执行搜索条件,为空则跳过判断条件直接显示列表页,
+            $where = ['id'=>$id];
+            //数据表获取总记录数           
+            $count = $user->where($where)->count();
+            //获取每页显示的条数
+            $limit= $request->param('limit');
+            //获取当前页码
+            $page= $request->param('page');
+            //limit的起始位置
+            $start=($page-1)*$limit; 
+            $list = $user
+                    ->limit("$start,$limit")
+                    ->where($where)
+                    ->select();
+            //返回数据
+            return ["code"=>0,"msg"=>"成功","count"=>$count,"data"=>$list];
+        }
+        //数据表获取总记录数           
+        $count = $user->count();
+        //获取每页显示的条数
+        $limit= $request->param('limit');
+        //获取当前页码
+        $page= $request->param('page');
+        //limit的起始位置
+        $start=($page-1)*$limit;
+        $list = $user
+                ->limit("$start,$limit")
+                ->select();
+        //返回数据
+        return ["code"=>0,"msg"=>"成功","count"=>$count,"data"=>$list];
+
+    }
+
+
+    public function add(){      
+        if(request()->isPost()){
+            $user = new ColumnModel();
+            $data = input('post.');
+            $Column = $user->where('catename',$data['catename'])->find();
+            if(empty($Column)){
+                $user->save($data);
+                return 1;
+            }else{
+                return 2;
+            }
+        }
+        return view();
+
+    }
+
+    public function edit(){
+        $user = new ColumnModel();
+        $id = input('id');
+        $list = $user->where('id',$id)->find();
+        if(request()->isPost()){
+            $data = input('post.');
+            if($list['catename']!=$data['catename']){
+                $user->update($data);
+                return 1;
+            }else{
+                return 2;
+            }
+        }
+        $this->assign([
+            'list'=>$list,
+        ]);
+        return view();
+    }
+
+
+    public function del(){//删除
+        $user = new ColumnModel();
+        if(request()->isPost()){
+            $id = input('id');
+            $del=$user->where('id',$id)->delete();
+            if($del){
+                return 1;//删除成功             
+            }else{
+                return 2;//删除失败        
+            }
+        }
+        return view();
+
+
+    } 
+
+    public function pdel(){//批量删除
+        $user = new ColumnModel();
+        if(request()->isPost()){
+
+            $id = input('post.');//接收前台id
+            $ids = implode(',',$id);//将id用逗号进行隔开
+            $where = [
+                'id'=>['in',$ids],
+            ];
+            $list = $user->where($where)->delete();
+            if($list){
+               return 1;//删除成功
+              
+            }else{
+                return 2;//删除失败
+                
+            }
+        }
+        return view();
+
+    }
+
+    
+        
+ 
+
+
+        
+}

+ 139 - 0
application/admin/controller/Good.php

@@ -0,0 +1,139 @@
+<?php
+namespace app\admin\controller;
+use think\Request;
+use catetree\Catetree;
+use app\admin\model\GoodModel;
+use app\admin\model\TagsModel;
+class Good extends Base
+{
+     
+    public function lst(){//工具列表
+        $user = new GoodModel();
+        $list = $user
+                ->alias('a')           
+                ->field('a.*,b.catename')
+                ->join('column b','a.column_id=b.id')
+                ->order('sort desc')
+                ->paginate(10);
+        $this->assign('list',$list);
+        return view();
+
+    }
+
+      public function add(){      
+        if(request()->isPost()){
+            $user = new GoodModel();
+            $data = input('post.'); 
+            if(empty($data['tags_id'])){//解决复选框值为空的时候
+                $data['tags_id']='';//将rules字段的值设置为空
+                $data['create_time'] = time();
+                if($user->save($data)){
+                    return 1;
+                }else{
+                    return 2;
+                }
+            }
+            $data['tags_id']=implode(',',$data['tags_id']);
+            $data['create_time'] = time();
+            if($user->save($data)){
+                return 1;
+            }else{
+                return 2;
+            }
+        }
+        $tags = db('tags')->select();
+        $column = db('column')->select();
+        $this->assign([
+            'column'=>$column,
+            'tags'=> $tags,//标签列表
+        ]);
+        return view();
+
+    }
+
+    public function edit(){
+        $user = new GoodModel();
+        $id = input('id');
+        $db = $user->where('id',$id)->find();
+        if(request()->isPost()){
+            $data = input('post.');  
+            if(empty($data['tags_id'])){//解决复选框值为空的时候
+                return 3;
+            }
+            $data['tags_id']=implode(',',$data['tags_id']);
+            if($user->where('id',$id)->update($data)){  
+                return 1;
+            }else{
+                return 2;
+            }
+        }
+
+        $column = db('column')->select();
+        $tags = db('tags')->select();
+        $this->assign([
+            'column'=>$column,//导航栏数据
+            'db'=>$db,//工具数据
+            'tags'=>$tags,//标签数据
+        ]);
+        return view();
+    }
+
+
+    public function del(){//删除
+        $user = new GoodModel();
+        $id = input('id');
+        $del=$user->where('id',$id)->delete();
+        if($del){
+            return ['data'=>200,'msg'=>'删除成功'];
+        }else{
+            return ['data'=>0,'msg'=>'删除失败'];
+        }
+
+    } 
+
+
+
+
+    public function pdel(){//批量删除
+        $user = new GoodModel();
+        if(request()->isPost()){
+
+            $id = input('post.');//接收前台id
+            $ids = implode(',',$id);//将id用逗号进行隔开
+            $where = [
+                'id'=>['in',$ids],
+            ];
+            $list = $user->where($where)->delete();
+            if($list){
+               return 1;//删除成功
+              
+            }else{
+                return 2;//删除失败
+                
+            }
+        }
+        return view();
+
+    }
+
+
+
+    //更新排序
+    public function sort(){
+        if(request()->isPOST()){
+            $data=input(); //获取ajax提交所有数据
+            $table=db('good'); //要更新的表
+            $cate=new Catetree;  //实例化拓展类  使用排序方法
+            $cate->cateSort($data['sort'],$table);
+            return 1;
+        }
+
+    }
+       
+
+
+ 
+
+
+        
+}

+ 258 - 0
application/admin/controller/Index.php

@@ -0,0 +1,258 @@
+<?php
+namespace app\admin\controller;
+
+use think\Session;
+use think\Cache;
+use think\Request; 
+use app\admin\model\LogModel;
+use app\admin\model\IndexModel;
+
+class Index extends Base
+{
+	public function server(){//运行环境
+        $info = array(
+            '操作系统'=>PHP_OS,
+            '运行环境'=>$_SERVER["SERVER_SOFTWARE"],
+            'PHP运行方式'=>php_sapi_name(),
+            '上传附件限制'=>ini_get('upload_max_filesize'),
+            '执行时间限制'=>ini_get('max_execution_time').'秒',
+            '服务器时间'=>date("Y年n月j日 H:i:s"),
+            '北京时间'=>gmdate("Y年n月j日 H:i:s",time()+8*3600),
+            'ThinkPHP版本'=>THINK_VERSION,
+        );
+
+        //登录次数echarts统计图-----------------------------------------
+        $today = date('Y-m-d');
+        //取当前时间的前十四天
+        $date = [];
+        $date_string = '';
+        for ($i=9; $i >0 ; $i--) { 
+            $date[] = date("Y-m-d",strtotime("-{$i} day"));
+            $date_string.= date("Y-m-d",strtotime("-{$i} day")) . ',';
+        }
+        $date[] = $today;
+        $date_string.= $today;
+        $web['date_string'] = $date_string;
+
+        $login_sum = '';
+        foreach ($date as $k => $val) {
+            $min_time = strtotime($val);
+            $max_time = $min_time + 60*60*24;
+            $where['create_time'] = [['>=',$min_time],['<=',$max_time]];
+            // dump($where);die;
+            $where['remark']= "登录操作";
+            $login_sum.= db('user_log')->where($where)->count() . ',';
+        }
+        $web['login_sum'] = $login_sum;
+        //end--------------------------------------------------------
+
+        $this->assign('web',$web);
+        $this->assign('info',$info);
+        return view();
+	}
+
+	public function clears(){//清楚缓存
+        Cache::clear();
+        $this->success('index/lst');
+    }
+
+    public function lst_data(Request $request){//用户列表json数据动态表格显示(分页)
+
+    	$user = new IndexModel();
+        $uname = request()->param('uname');//接收请求数据id
+        if(!empty($uname)){//不为空执行搜索条件,为空则跳过判断条件直接显示列表页,
+            $where = ['uname'=>$uname];
+
+            //数据表获取总记录数           
+            $count = $user->where($where)->count();
+            //获取每页显示的条数
+            $limit= $request->param('limit');
+            //获取当前页码
+            $page= $request->param('page');
+            //limit的起始位置
+            $start=($page-1)*$limit;
+            // 查询出当前页数显示的数据
+            $list = $user
+                ->limit("$start,$limit")
+                ->where($where)
+                ->select(); 
+            // dump($list);die;
+            foreach($list as $k=>$v){   /*循环时间戳转时间格式*/
+                $list[$k]['last_login_time'] = date('Y-m-d H:i:s',$v['last_login_time']);
+            }    
+           
+            //返回数据
+            return ["code"=>0,"msg"=>"成功","count"=>$count,"data"=>$list];
+
+        }
+
+        //数据表获取总记录数
+        $count = $user->count();
+        //获取每页显示的条数
+        $limit= $request->param('limit');
+        //获取当前页码
+        $page= $request->param('page');
+        //limit的起始位置
+        $start=($page-1)*$limit;
+        // 查询出当前页数显示的数据
+        $list = $user//关联查询
+                ->limit("$start,$limit")
+                ->select();
+        foreach($list as $k=>$v){   /*循环时间戳转时间格式*/
+            $list[$k]['last_login_time'] = date('Y-m-d H:i:s',$v['last_login_time']);
+        }
+        //返回数据
+        return ["code"=>0,"msg"=>"成功","count"=>$count,"data"=>$list];
+
+    }
+
+    
+    public function lst()//用户列表
+    {
+
+        return view(); 
+       
+        
+    }
+
+
+    public function edit(){//用户信息编辑 
+        $user = new IndexModel();
+        $id = input('id');
+        $db = db('user')->where('id',$id)->find();
+        if(request()->isPost()){
+            $data['id'] = $id;
+            $data['uname'] = input('uname');
+            $data['upass'] =input('upass');
+            if(empty($data['upass'])){
+                $data['upass']=$db['upass'];
+                $edit = $user->where('id',$id)->update($data);
+                if($edit){
+                    return 1;
+                }else{
+                    return 2;
+                }
+            }else{
+                $data['upass']=md5(input('upass'));
+                $edit = $user->where('id',$id)->update($data);
+                if($edit){
+                    return 1;
+                }else{
+                    return 2;
+                }
+            }      
+        }
+        
+        $this->assign([
+            'db'=>$db,//本身id
+        ]);
+        return view();
+    } 
+
+ 
+    public function add(){//添加
+        $user = new IndexModel();
+        if(request()->isPost()){
+            $data['uname'] = input('uname');
+            $data['upass'] = input('upass');
+            $list = $user->where('uname',trim($data['uname']))->select();
+            if(empty($list)){
+                $data['upass']=md5(trim($data['upass']));
+                if($user->save($data)){
+                    return 1;
+                }else{
+                    return 2;
+                }        
+            }else{
+                return 2;
+            }
+        }
+        
+        return view();
+       
+    }
+
+ 
+    public function del(){//删除
+        $user = new IndexModel();
+    	$id = input('id');
+        $where = [
+            'id'=>$id,
+        ];
+        if($id==1){
+            return 3;//超级管理员不允许删除
+        }
+        $list = $user->where($where)->delete();
+        if($list){
+            return 1;
+        }else{
+            return 2;
+        }
+    }
+
+
+    public function pdel(){//批量删除
+        $user = new IndexModel();
+        if(request()->isPost()){
+            $id = input('post.');
+            $ids = implode(',',$id);
+            $where = [
+                'id'=>['in',$ids],
+            ];
+
+            $list = $user->where($where)->delete();
+            if($list){
+               return 1;
+            }else{
+                return 2;//删除失败
+            }
+        }else{
+            return view();
+        }
+
+    }
+
+
+    public function log_data(Request $request)//日志记录列表接口
+    {
+        $user = new LogModel();
+        // $data = $user->select();
+        //数据表获取总记录数
+        $count = $user->count();
+        //获取每页显示的条数
+        $limit= $request->param('limit');
+        //获取当前页码
+        $page= $request->param('page');
+        //limit的起始位置
+        $start=($page-1)*$limit;
+        // 查询出当前页数显示的数据
+        $list = $user
+                ->limit("$start,$limit")
+                ->select();
+
+        //返回数据
+        return ["code"=>0,"msg"=>"成功","count"=>$count,"data"=>$list];
+    }
+
+    public function log()//日志记录列表
+    {
+        
+        return view();
+    }
+
+
+    public function truncate()//一键清除日志记录
+    {
+        if(request()->isPost()){
+            $trun = db()->query('TRUNCATE ' . config('database.prefix') . 'user_log');
+            return 1;//删除成功
+        }else{
+            return 2;//为空或者没有权限
+        }
+        
+    }
+    
+
+
+
+}

+ 54 - 0
application/admin/controller/Login.php

@@ -0,0 +1,54 @@
+<?php
+namespace app\admin\controller;
+use think\Controller;
+use think\Request;
+use think\Db;
+
+class Login extends Controller{
+
+    public function lst(){
+
+        //判断是否是post方法发送的数据:如果是则开始登陆
+        if (request()->isPost()){
+            $data['uname'] = input('uname');
+            $data['upass'] = md5(input('upass'));
+            //从数据库读取数据           
+            $info = db('user')->where($data)->find();
+            if($info){
+                
+                $login_data['last_login_time']=time(); //获取当前登录时间
+                $login_data['last_login_ip'] = $this->request->ip();//获取当前登录ip
+                $login = db('user')->where($data)->update($login_data);// 更新当前用户信息
+                if($login){              
+                    session('uname',$data['uname']);
+                    session('id',$info['id']);
+                    insert_admin_log('登录操作');//写入日志表
+                    return 1;
+                }else{
+                    return 3;
+                }
+
+            }else{
+                return 2;
+            }
+        }else{
+             //如果不是post,则返回登陆界面
+             return view();
+        }
+           
+        
+    
+    }
+
+    
+    public function logout(){
+        //退出登录
+        session(null);//退出清空session
+        //url("/lst"):为后台登录地址,设置路由进行替换的(在route.php中查看)
+        return $this->success(url('/lst'));//跳转到登录页面
+
+    }
+
+
+}
+

+ 138 - 0
application/admin/controller/Tags.php

@@ -0,0 +1,138 @@
+<?php
+namespace app\admin\controller;
+
+use think\Request;
+use app\admin\model\TagsModel;
+
+class Tags extends Base
+{
+    
+
+    public function lst()//栏目列表(自己做的)
+    {   
+
+        return view(); 
+       
+         
+    }
+
+
+
+    public function lst_data(Request $request){//栏目列表json数据动态表格显示(分页)
+        $user = new TagsModel();
+        $id = request()->param('id');//接收请求数据id
+        if(!empty($id)){//不为空执行搜索条件,为空则跳过判断条件直接显示列表页,
+            $where = ['id'=>$id];
+            //数据表获取总记录数           
+            $count = $user->where($where)->count();
+            //获取每页显示的条数
+            $limit= $request->param('limit');
+            //获取当前页码
+            $page= $request->param('page');
+            //limit的起始位置
+            $start=($page-1)*$limit; 
+            $list = $user
+                    ->limit("$start,$limit")
+                    ->where($where)
+                    ->select();
+            //返回数据
+            return ["code"=>0,"msg"=>"成功","count"=>$count,"data"=>$list];
+        }
+        //数据表获取总记录数           
+        $count = $user->count();
+        //获取每页显示的条数
+        $limit= $request->param('limit');
+        //获取当前页码
+        $page= $request->param('page');
+        //limit的起始位置
+        $start=($page-1)*$limit;
+        $list = $user
+                ->limit("$start,$limit")
+                ->select();
+        //返回数据
+        return ["code"=>0,"msg"=>"成功","count"=>$count,"data"=>$list];
+
+    }
+
+
+    public function add(){      
+        if(request()->isPost()){
+            $user = new TagsModel();
+            $data = input('post.');
+            $Tags = $user->where('tagname',$data['tagname'])->find();
+            if(empty($Tags)){
+                $user->save($data);
+                return 1;
+            }else{
+                return 2;
+            }
+        }
+        return view();
+
+    }
+
+    public function edit(){
+        $user = new TagsModel();
+        $id = input('id');
+        $list = $user->where('id',$id)->find();
+        if(request()->isPost()){
+            $data = input('post.');
+            if($list['tagname']!=$data['tagname']){
+                $user->update($data);
+                return 1;
+            }else{
+                return 2;
+            }
+        }
+        $this->assign([
+            'list'=>$list,
+        ]);
+        return view();
+    }
+
+
+    public function del(){//删除
+        $user = new TagsModel();
+        if(request()->isPost()){
+            $id = input('id');
+            $del=$user->where('id',$id)->delete();
+            if($del){
+                return 1;//删除成功             
+            }else{
+                return 2;//删除失败        
+            }
+        }
+        return view();
+
+
+    } 
+
+    public function pdel(){//批量删除
+        $user = new TagsModel();
+        if(request()->isPost()){
+
+            $id = input('post.');//接收前台id
+            $ids = implode(',',$id);//将id用逗号进行隔开
+            $where = [
+                'id'=>['in',$ids],
+            ];
+            $list = $user->where($where)->delete();
+            if($list){
+               return 1;//删除成功
+              
+            }else{
+                return 2;//删除失败
+                
+            }
+        }
+        return view();
+
+    }
+
+    
+        
+ 
+
+
+        
+}

+ 18 - 0
application/admin/model/ColumnModel.php

@@ -0,0 +1,18 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2017/10/22
+ * Time: 21:15
+ */
+namespace app\admin\model;
+
+use think\Model;
+
+class ColumnModel extends Model
+{
+    protected $table = 'bp_column';//导航栏表
+
+
+    
+}

+ 16 - 0
application/admin/model/GoodModel.php

@@ -0,0 +1,16 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2017/10/22
+ * Time: 21:15
+ */
+namespace app\admin\model;
+
+use think\Model;
+
+class GoodModel extends Model
+{
+    protected $table = 'bp_good';//工具表
+
+}

+ 15 - 0
application/admin/model/IndexModel.php

@@ -0,0 +1,15 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2017/10/22
+ * Time: 21:15
+ */
+namespace app\admin\model;
+
+use think\Model;
+
+class IndexModel extends Model
+{
+    protected $table = 'bp_user';//用户表
+}

+ 15 - 0
application/admin/model/LogModel.php

@@ -0,0 +1,15 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2017/10/22
+ * Time: 21:15
+ */
+namespace app\admin\model;
+
+use think\Model;
+
+class LogModel extends Model
+{
+    protected $table = 'bp_user_log';//用户日志表
+}

+ 15 - 0
application/admin/model/TagsModel.php

@@ -0,0 +1,15 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2017/10/22
+ * Time: 21:15
+ */
+namespace app\admin\model;
+
+use think\Model;
+
+class TagsModel extends Model
+{
+    protected $table = 'bp_tags';//标签表
+}

+ 3 - 0
application/admin/view/Base/fotter.html

@@ -0,0 +1,3 @@
+<div class="layui-footer">
+   Copyright © 2019 Powered by Mosheng  渝ICP备14004903号<!-- 底部固定区域 -->
+</div>

+ 113 - 0
application/admin/view/Base/left.html

@@ -0,0 +1,113 @@
+<div class="layui-side layui-bg-black">
+  <div class="layui-side-scroll">
+
+    <ul class="layui-nav layui-nav-tree"  lay-filter="test">
+
+        <li class="layui-nav-item">
+          
+            <a href="javascript:;">
+              <i class="layui-icon">&#xe672;</i>&nbsp;系统<span class="layui-nav-more"></span>
+            </a>
+
+          <dl class="layui-nav-child">
+
+            <dd>
+              <a href="{:url('Index/server')}" class="layui-this">
+                <i class="layui-icon">&#xe67f;</i>&nbsp;控制台
+              </a>
+            </dd>
+            
+          </dl>
+
+        </li>
+
+
+
+        <li class="layui-nav-item {if condition="$con eq 'Index'"}hover layui-nav-itemed{/if}">
+          <a href="javascript:;">
+            <i class="layui-icon">&#xe673;</i>&nbsp;管理员管理<span class="layui-nav-more"></span>
+          </a>
+
+          <dl class="layui-nav-child">
+
+            <dd>
+              <a href="{:url('Index/lst')}" class="layui-this">
+                 <i class="layui-icon">&#xe66f;</i>&nbsp;管理员信息
+              </a>
+            </dd>
+
+            <dd>
+              <a href="{:url('Index/log')}" class="layui-this">
+                 <i class="layui-icon">&#xe63c;</i>&nbsp;管理员日志
+              </a>
+            </dd>
+
+          </dl>
+
+        </li>
+
+
+
+        <li class="layui-nav-item {if condition="$con eq 'Good'"}hover layui-nav-itemed{/if}">
+          <a href="javascript:;">
+            <i class="layui-icon">&#xe631;</i>&nbsp;工具信息管理<span class="layui-nav-more"></span>
+          </a>
+
+          <dl class="layui-nav-child">
+
+            <dd>
+              <a href="{:url('Good/lst')}" {if condition="$con eq 'Good' && $action eq 'lst'"}class="layui-this"{/if}>
+                 <i class="layui-icon">&#xe647;</i>&nbsp;工具信息列表
+              </a>
+            </dd>
+
+
+          </dl>
+
+        </li>
+
+        <li class="layui-nav-item {if condition="$con eq 'Column'"}hover layui-nav-itemed{/if}">
+          <a href="javascript:;">
+            <i class="layui-icon">&#xe653;</i>&nbsp;导航栏管理<span class="layui-nav-more"></span>
+          </a>
+
+          <dl class="layui-nav-child">
+
+            <dd>
+              <a href="{:url('Column/lst')}" {if condition="$con eq 'Column' && $action eq 'lst'"}class="layui-this"{/if}>
+                 <i class="layui-icon">&#xe647;</i>&nbsp;导航栏列表
+              </a>
+            </dd>
+
+          </dl>
+
+        </li>
+
+
+        <li class="layui-nav-item {if condition="$con eq 'Tags'"}hover layui-nav-itemed{/if}">
+          <a href="javascript:;">
+            <i class="layui-icon">&#xe66e;</i>&nbsp;标签管理<span class="layui-nav-more"></span>
+          </a>
+
+          <dl class="layui-nav-child">
+
+            <dd>
+              <a href="{:url('Tags/lst')}" {if condition="$con eq 'Tags' && $action eq 'lst'"}class="layui-this"{/if}>
+                 <i class="layui-icon">&#xe647;</i>&nbsp;标签列表
+              </a>
+            </dd>
+
+          </dl>
+
+        </li>
+
+
+
+
+        
+
+
+    </ul>
+
+  </div>
+</div>

+ 108 - 0
application/admin/view/Base/top.html

@@ -0,0 +1,108 @@
+<!DOCTYPE html> 
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="icon" href="__IMAGES__/favicon.png" type="image/x-icon">
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all"> 
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+  <script src="/static/extr/echarts/echarts.min.js"></script>
+  <!-- <link href="//netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> -->
+  
+</head>
+<body>
+    <div class="layui-layout layui-layout-admin">
+        <div class="layui-header">
+        <div class="layui-logo">爱奇君后台管理系统</div>
+
+            <ul class="layui-nav layui-layout-right">
+
+              <li class="layui-nav-item">
+                <!-- 天气插件(远程库) -->
+                  <iframe scrolling="no" src="https://tianqiapi.com/api.php?style=tf&skin=mango&color=009688"  frameborder="0" width="200" height="16" allowtransparency="true">
+                  </iframe>
+              </li>
+
+              <li class="layui-nav-item">
+
+                  <a href="javascript:;">
+                    <img src="__IMAGES__/admin.png" class="layui-nav-img">  
+                    欢迎你,{$Think.session.uname}
+                   </a>
+                  <dl class="layui-nav-child">
+
+                    <dd><a id="clears">清除缓存</a></dd>
+                  </dl>
+              </li>
+
+              <li class="layui-nav-item"><a id="logout">退出登录</a></li>
+
+            </ul>
+
+
+     </div>
+
+     
+
+     
+  
+<script>
+    layui.use(['form', 'layedit', 'jquery','element'], function(){
+        var form = layui.form
+            ,element = layui.element
+            ,layer = layui.layer
+            ,$ = layui.jquery
+        ;
+
+        $("#clears").click(function(){
+            $.post("{:url('index/clears')}",function(res){
+                layer.msg('清除成功',function(){
+                    location.href = res.url;
+                })
+            })
+        });
+ 
+        $("#logout").click(function(){
+            $.post("{:url('login/logout')}",function(res){
+                layer.msg('退出成功',function(){
+                    location.href = res.url;
+                })
+            })
+        });
+
+
+
+
+
+
+
+        //监听提交
+        form.on('submit(form)', function(data){
+            var url=document.URL;
+            $.post(url,data.field,function(res){
+                layer.msg(res.msg);
+                if(res.url&&res.url!=''){
+                    setTimeout(function(){
+                        location.href=res.url;
+                    },2000);
+                }
+                if(res.url==''){
+                    setTimeout(function(){
+                        location.reload();
+                    },1000);
+                }
+            });
+            return false;
+        });
+
+
+    });
+
+</script>
+
+</body>
+</html>
+
+

+ 74 - 0
application/admin/view/column/add.html

@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+
+
+</head>
+<body>
+    <form  class="layui-form"   style="padding: 30px"  method="post"  >
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">导航栏名称</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="catename" id="uname" placeholder="请输入导航栏名称"   autocomplete="off" class="layui-input">
+                </div>
+            </div>        
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即添加</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+<script>
+
+layui.use(['form', 'layedit', 'jquery','upload','element'], function(){
+        var form = layui.form
+            ,element = layui.element
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ,upload = layui.upload
+            ;
+
+
+        // 表单监听提交,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Column/add")}', user, function (data) {   //利用ajax把表单数据传递过去  验证账户 密码
+                    if (data==1) { //用户 密码经过后台验证 通过 后登录 跳转
+                        layer.alert("添加导航栏成功!", {icon: 6},function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    }else{
+                        layer.alert('导航栏名称不能重复',{icon:5});
+                    }
+                });
+
+            return false;
+        });
+
+
+
+
+
+
+
+});
+</script>
+
+
+
+
+</body>
+</html>

+ 74 - 0
application/admin/view/column/edit.html

@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+
+
+</head>
+<body>
+    <form  class="layui-form"   style="padding: 30px"  method="post"  >
+        <input type="hidden" name="id" value="{$list.id}"> 
+            <div class="layui-form-item">
+                <label class="layui-form-label">栏目名称</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="catename" id="uname" value="{$list.catename}"   autocomplete="off" class="layui-input">
+                </div>
+            </div>        
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即修改</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+<script>
+
+layui.use(['form', 'layedit', 'jquery','upload','element'], function(){
+        var form = layui.form
+            ,element = layui.element
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ,upload = layui.upload
+            ;
+
+
+        // 表单监听提交,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Column/edit")}', user, function (data) {   //利用ajax把表单数据传递过去  验证账户 密码
+                    if (data==1) { //用户 密码经过后台验证 通过 后登录 跳转
+                        layer.alert("修改栏目成功!", {icon: 6},function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    }else{
+                        layer.alert('栏目名称不能重复',{icon:5});
+                    }
+                });
+
+            return false;
+        });
+
+
+
+
+
+
+
+});
+</script>
+
+
+
+
+</body>
+</html>

+ 251 - 0
application/admin/view/column/lst.html

@@ -0,0 +1,251 @@
+<!--加载公共头部文件-->
+    {include file='Base/top'}
+<!--加载公共左侧文件-->
+    {include file='Base/left'}
+<!--加载公共底部文件-->
+    {include file='Base/fotter'}
+
+
+<!-- 内容显示部分 -->
+<div class="layui-body">
+    <!--面包屑导航-->
+        <blockquote class="layui-elem-quote">
+            <span class="layui-breadcrumb" style="visibility: visible;">
+                <a >导航栏管理</a>
+                <span lay-separator="">/</span>
+                <a href="{:url('Column/lst')}">
+                  <cite>导航栏列表</cite>
+                </a>
+              </span>
+        </blockquote>
+        <!--面包屑导航 结束-->
+
+	<div class="layui-row  layui-col-space10" style="margin:0 10px;">
+    		 <div class="search" style="margin:10px 0px 5px -5px;"><!-- 搜索 -->
+                <div class="layui-inline">
+                    <input  type="text" class="layui-input" name="id" id="refund"  autocomplete="off" placeholder="请输入导航栏id">
+                </div>
+                <button class="layui-btn layui-btn-primary" data-type="reload">搜索</button>
+            </div>
+		<table class="layui-hide"  id="list" lay-filter="list"></table><!-- 表格数据 -->
+
+	</div>
+</div>
+
+<!-- <script type="text/html" id="status">
+    {{#  if(d.show_status == 0){ }}
+    <div class="layui-badge layui-bg-green">隐藏</div>
+    {{#  } else if(d.show_status == 1){ }}
+    <div class="layui-badge layui-bg-read">显示</div>
+    {{#  } }}
+</script> -->
+
+
+
+
+ 
+<!-- 表格操作栏模块 -->
+<script type="text/html" id="barDemo"><!-- 表格自定义操作按钮 -->
+  	<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
+  	<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+</script>
+
+
+
+<!-- 头部工具栏模块 -->
+<script type="text/html" id="toolbarDemo"><!-- 表格自定义操作按钮 -->
+    <a class="layui-btn layui-btn-xs" lay-event="add">添加</a>
+
+    <div class="layui-btn-group demoTable">
+         <button class="layui-btn layui-btn-xs" data-type="pdel">批量删除</button>
+    </div>
+
+</script>
+
+
+
+
+<script>
+layui.use(['table','layer','laypage','jquery'], function(){
+        var table = layui.table,
+            layer = layui.layer,
+            laypage = layui.laypage,
+            $ = layui.jquery;
+
+
+        //数据表格
+        table.render({
+            elem: '#list'
+            ,id:'idSystem'
+            ,url:'{:url("lst_data")}'//数据接口(专门处理数据)
+            ,height:'full'
+            // ,toolbar: 'default' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
+             ,toolbar: '#toolbarDemo'
+
+             //分页
+            ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
+                layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
+                ,curr: 1 //设定初始在第 5 页
+                ,limit:10 //一页显示多少条
+                ,limits:[10,20,30]//每页条数的选择项
+                ,groups: 3 //只显示 2 个连续页码
+                ,first: "首页" //不显示首页
+                ,last: "尾页" //不显示尾页
+
+            }
+
+            ,cols: [[
+             	 {type: 'checkbox', fixed: 'left'}
+                ,{field: 'id', title: '导航栏ID',sort:true, align:'center',width: 100}
+                ,{field: 'catename', title: '导航栏名称',align:'center', width: 150}
+                ,{field:'actions',title: '操作',toolbar: '#barDemo',align:'left',width:300 ,fixed:'right'}
+
+            ]]
+        });
+
+
+         // 执行搜索,表格重载
+        $('.search .layui-btn-primary').on('click',function () {
+            // 搜索条件
+                var id = $('#refund').val();
+                if(id==''){
+                    layer.msg('搜索条件不能为空');
+                    return false;
+                }
+                table.reload('idSystem', {
+                    page: {
+                        curr: 1
+                    }
+                    ,where: {
+                        id: id
+                    }
+                    
+                });
+        });
+
+
+
+
+
+        //监听头工具栏事件
+        table.on('toolbar(list)', function(obj){
+            var checkStatus = table.checkStatus(obj.config.id)
+            ,data = checkStatus.data; //获取选中的数据
+            switch(obj.event){
+              case 'add'://添加
+                var index =  layer.open({
+                    type:2,
+                    title:"添加栏目",
+                    maxmin:true,
+                    width:'auto',
+                    offset : '100px',
+                    area :['1000px','600px'],
+                    content:"{:url('Column/add')}"
+                });
+              
+
+              break;
+
+              
+            }; 
+
+
+        });
+
+        
+          
+          
+        //监听行工具事件
+        table.on('tool(list)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
+            var data = obj.data; //获得当前行数据
+            var layEvent = obj.event; //获得 lay-event 对应的值
+            var tr = obj.tr; //获得当前行 tr 的DOM对象
+
+            switch(layEvent){
+		      case 'edit'://编辑
+		        var index =  layer.open({
+                    type:2,
+                    title:"编辑信息",
+                    maxmin:true,
+                    width:'auto',
+                    offset : '100px',
+                     area :['1000px','600px'],
+                    content:"{:url('Column/edit')}?id="+data.id
+                });
+		      break;
+
+              case 'del'://删除
+                 layer.confirm('确定要删除吗?',{icon: 5},function(index){
+                    $.post("{:url('Column/del')}?id="+data.id,function(res){
+                        if(res == 1){        
+                            obj.del();
+                            layer.msg('删除成功!');
+                        }else{
+                            layer.msg('删除失败!');
+                        }
+                       
+                    })
+                });
+              break;
+
+
+		    };
+
+            
+
+        });
+
+
+
+        //批量删除————————————————————————————————————————
+        var $ = layui.$, active = {
+            pdel: function(){ //获取选中数据
+                var checkStatus = table.checkStatus('idSystem')
+                ,data = checkStatus.data;
+                if(data==""){
+                    layer.msg('请选择需要删除的数据',{icon:2});
+                    return;
+                }
+                var ids = [];
+                if(data.length>0){
+                    for(var i=0;i<data.length;i++){
+                        ids+=data[i].id+",";
+                    }
+                }
+                layer.confirm('确定要删除id为'+ids+'的用户信息吗?',function(index){
+                    $.ajax({
+                        type:'POST',
+                        url:'{:url("Column/pdel")}',
+                        data:{"ids":ids},
+                        success:function(data){
+                            if(data==1){
+                                // layer.msg('删除成功',{icon:1});
+                                layer.msg('批量删除成功',{icon:1},function () {
+                                    var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                                    parent.layer.close(index);//关闭当前frame
+                                    parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                                });    
+                            }else{
+                                layer.msg('没有批量删除权限!',{icon:2});
+                            }
+                        }
+                    })
+                })
+            }
+        }
+         $('.demoTable .layui-btn-xs').on('click', function(){
+            var type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+        //批量删除结束————————————————————————————————————————————————————
+             
+
+
+       
+
+
+});
+
+
+
+</script>

+ 120 - 0
application/admin/view/good/add.html

@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+
+
+</head>
+<body>
+    <form  class="layui-form" action=""  style="padding: 30px"  method="post"  >
+
+
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                  <label class="layui-form-label">导航栏名称</label>
+                  <div class="layui-input-inline" style="width:400px;">
+                  <select name="column_id" >
+                    {volist name="column" id="vo"}
+                      <option value="{$vo.id}">{$vo.catename}</option>
+                    {/volist}
+                  </select>
+
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">关键字</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="keywords" id="uname" placeholder="请输入关键字"   autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">标题</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="title" id="upass"  placeholder="请输入标题"  autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">作者</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="author" id="upass" placeholder="请输入作者"  autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">地址</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="url" id="upass" placeholder="请输入地址"  autocomplete="off" class="layui-input">              
+                </div>
+                <div class="layui-form-mid layui-word-aux">*格式:控制器/方法</div>
+            </div>
+
+            
+             <div class="layui-form-item">
+                <label class="layui-form-label">标签</label>
+                {volist name='tags' id='vo'}
+                    <span style="width: 130px;height: 38px;">
+                        <input type="checkbox" name="tags_id[]" lay-filter="auth" value="{$vo['id']}" lay-skin="primary" title="{$vo['tagname']}" >
+                    </span>
+                {/volist}  
+              </div>
+            
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即添加</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+
+
+<script>
+
+layui.use(['form', 'layedit', 'jquery','element'], function(){
+        var form = layui.form
+            ,element = layui.element
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ;
+
+// 表单监听提交,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Good/add")}', user, function (data) {
+                    if (data==1) {
+                        layer.alert("添加工具信息成功!", {icon: 6},function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    }else{
+                        layer.alert('工具标题不能重复',{icon:5});
+                    }
+                });
+
+            return false;
+        });
+
+    
+
+
+
+});
+</script>
+
+
+
+</body>
+</html>

+ 121 - 0
application/admin/view/good/edit.html

@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+
+</head>
+<body>
+    <form class="layui-form layui-form-pane" action=""  style="padding: 30px" method="post">
+        <input type="hidden" name="id" value="{$db.id}" placeholder="隐藏域id">
+             <div class="layui-form-item">
+                <div class="layui-inline">
+                  <label class="layui-form-label">导航栏名称</label>
+                  <div class="layui-input-inline" style="width:400px;">
+                  <select name="column_id" >
+                    {volist name="column" id="vo"}
+                      <option value='{$vo.id}' {if condition="$db['column_id'] eq $vo['id']"} selected="selected"{/if}>{$vo.catename}</option>
+                    {/volist}
+                  </select>
+
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">关键字</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="keywords" id="uname" value="{$db.keywords}"   autocomplete="off" class="layui-input">
+                </div>
+            </div>
+ 
+            <div class="layui-form-item">
+                <label class="layui-form-label">标题</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="title" id="upass"  value="{$db.title}"  autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+
+ 
+            <div class="layui-form-item">
+                <label class="layui-form-label">作者</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="author" id="upass" value="{$db.author}"  autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">地址</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="url" id="upass" value="{$db.url}"  autocomplete="off" class="layui-input">              
+                </div>
+                <div class="layui-form-mid layui-word-aux">*格式:控制器/方法</div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">标签</label>
+                 <?php   //字符串转数组
+                    $rus=explode(',',$db['tags_id']);
+                ?>
+
+                {volist name='tags' id='vo'}
+                    <span style="width: 130px;height: 38px;">
+                        <input type="checkbox" name="tags_id[]" lay-filter="auth" value="{$vo['id']}" lay-skin="primary" title="{$vo['tagname']}"{if condition="in_array($vo['id'],$rus)"}checked="checked"{/if} >
+                    </span>
+                {/volist}  
+            </div>    
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即修改</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+
+<script>
+
+layui.use(['form', 'layedit', 'jquery'], function(){
+        var form = layui.form
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ;
+
+
+    
+// 表单监听提交,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Good/edit")}', user, function (data) {  
+                    if (data==1) {
+                        layer.alert("修改工具信息成功!", {icon: 6},function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    }else if(data==2){
+                        layer.alert('工具标题不能重复',{icon:5});
+                    }else{
+                        layer.alert('标签不能为空',{icon:5});
+                    }
+                });
+
+            return false;
+        });
+         
+
+
+});
+</script>
+
+
+
+
+</body>
+</html>

+ 192 - 0
application/admin/view/good/lst.html

@@ -0,0 +1,192 @@
+<!--加载公共头部文件-->
+    {include file='Base/top'}
+<!--加载公共左侧文件-->
+    {include file='Base/left'}
+<!--加载公共底部文件-->
+    {include file='Base/fotter'}
+
+
+
+
+<!-- 内容主体区域 -->
+<div class="layui-body">
+
+        <!--面包屑导航-->
+        <blockquote class="layui-elem-quote">
+            <span class="layui-breadcrumb" style="visibility: visible;">
+                <a >工具信息管理</a>
+                <span lay-separator="">/</span>
+                <a href="{:url('Good/lst')}">
+                  <cite>信息列表</cite>
+                </a>
+              </span>
+        </blockquote>
+        <!--面包屑导航 结束-->
+
+        <div >       
+            <button class="layui-btn" id="add">
+                 <i class="layui-icon">&#xe654;</i>添加
+            </button>
+
+            <button class="layui-btn" id="up">
+                <i class="layui-icon">&#xe62f;</i> 更新排序
+            </button>       
+        </div>
+
+        <form class="layui-form" action="{:url('Good/sort')}" method="post" id="vo_form">
+            <table class="layui-table" id="deleteds">
+                <thead>
+                <tr>
+                    <th width="10" style="text-align: center;">工具ID</th>
+                    <th width="5" style="text-align: center;">关键字</th>
+                    <th width="20" >标题</th>
+                    <th width="20" style="text-align: center;">点赞数</th>
+                    <th width="20" style="text-align: center;">作者</th>
+                    <th width="10" style="text-align: center;">所属导航栏名称</th>
+                    <th width="20" >地址</th>
+                    <th width="10" style="text-align: center;">创建时间</th>
+                    <th width="10" style="text-align: center;">权重</th>
+                    <th width="50">操作</th>
+                </tr>
+                </thead>
+                <tbody>
+ 
+                {volist name='list' id='vo'}
+                <tr>
+                    <td align="center">{$vo.id}</td>
+
+                    <td align="center">{$vo.keywords}</td>
+
+                    <td>{$vo.title}</td>
+
+                    <td align="center">{$vo.likes}</td>
+
+                    <td align="center">{$vo.author}</td>
+
+                    <td align="center">{$vo.catename}</td>
+
+                    <td>{$vo.url}</td>
+
+                    <td align="center">{$vo.create_time}</td>
+
+                    <td>
+                        <input type="text" class="layui-input x-sort" name="sort[{$vo['id']}]" value="{$vo.sort}">
+                    </td>
+
+                    <td>
+                        <div class="layui-btn-group">
+                              <a class="layui-btn layui-btn-xs" onclick="edit({$vo['id']})" >编辑</a>
+
+                              <a href="javascript:;" class="layui-btn layui-btn-danger layui-btn-xs delete" id="{$vo.id}" style="margin-right: 0;font-size:12px;">删除
+                              </a>
+                         </div>
+                    </td>
+
+                </tr>
+                {/volist}
+                </tbody>     
+            </table>
+
+            <!-- 分页 -->
+            <div class="pages" style="text-align:center;">
+              <div class="plist" >{$list->render()}</div>
+            </div>
+
+        </form>
+
+</div>
+<!-- 内容主体区域 结束-->
+
+
+
+<script>
+layui.use(['table','layer','laypage','jquery'], function(){
+        var table = layui.table,
+            layer = layui.layer,
+            laypage = layui.laypage,
+            $ = layui.jquery;
+
+        //点击添加 
+        $("#add").click(function () {
+            layer.open({
+                type: 2,    //open类型
+                title: false, //新开窗口标题 无
+                offset: 'auto', //上下左右居中
+                area: ['800px','700px'], //新开add页面窗口大小
+                content: '{:url("good/add")}', //这里content是一个URL,如果你不想让iframe出现滚动条,你还可以content: ['http://sentsin.com', 'no']
+                end: function () {
+                    location.reload();
+                }
+            });
+
+        });
+
+
+        //更新排序
+        $("#up").click(function () {
+            $.ajax({
+                type:'post',
+                url:'{:url("sort")}',
+                data: $('#vo_form').serialize(), //获取表单提交的所有数据
+                success: function(data) {
+                    layer.msg('规则排序成功!',{time:1000,icon: 1},function () {
+                        location.reload(true);//刷新当前页面
+                    });
+                },
+                error: function(err) {
+                    layer.msg(err, {time:1000,icon: 2},function () {
+                        location.reload(true);//刷新当前页面
+                    });
+                }
+            });
+        })
+
+
+        //删除
+        $('.delete').click(function(){
+              var id = $(this).attr('id');
+              layer.confirm('确定要删除?',{icon: 5}, function(index) {
+                $.ajax({
+                  url:"{:url('admin/good/del')}?id="+id,
+                  data:{id:id},
+                  success:function(res) {
+                    layer.msg(res.msg);
+                    if(res.data == 200) {
+                      setTimeout(function(){
+                         window.location.reload();
+                      },1000)
+                    }
+                  }
+                })
+              })
+        })
+
+});
+
+
+
+</script>
+<script type="text/javascript">
+        //点击编辑
+        function edit($id) {
+            layer.open({
+                type: 2,    //open类型
+                title: false, //新开窗口标题 无
+                offset: 'auto', //上下左右居中
+                area: ['800px','700px'], //新开add页面窗口大小
+                content: '{:url("edit")}?id='+$id, //这里content是一个URL,传递要编辑的参数
+                end: function () {
+                    location.reload();
+                }
+            });
+
+        };
+
+
+        
+
+</script>
+
+
+
+

+ 82 - 0
application/admin/view/index/add.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+</head>
+<body>
+    <form class="layui-form layui-form-pane" action=""  style="padding: 30px" method="post">
+
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">账号</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="uname" id="uname" lay-verify="required"  placeholder="请输入账号" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">密码</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="upass" name="upass" required lay-verify="required"  autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">状态</label>
+                <div class="layui-input-block">
+                  <input type="radio" name="status" value="0" title="正常" >
+                  <input type="radio" name="status" value="1" title="禁止" >
+                </div>
+            </div>
+
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即添加</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+<script>
+layui.use(['form', 'layedit', 'jquery','upload'], function(){
+        var form = layui.form
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ,upload = layui.upload
+            ;
+
+
+    
+    // 表单监听登录,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Index/add")}', user, function (data) {   //利用ajax把表单数据传递过去  验证账户 密码
+                    if (data==1) { //用户 密码经过后台验证 通过 后登录 跳转
+                        layer.alert("添加管理员成功!", {icon: 6},function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    } else {
+                        layer.alert('添加失败,账号已存在!',{icon:5});
+                    }
+                });
+
+            return false;
+        });
+
+
+});
+</script>
+
+</body>
+</html>

+ 90 - 0
application/admin/view/index/edit.html

@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+ 
+</head>
+
+<body>
+    <form class="layui-form layui-form-pane" action=""  style="padding: 30px" method="post">
+        <input type="hidden" name="id" value="{$db.id}" placeholder="隐藏域id">
+
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">账号</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="uname" id="uname" lay-verify="required" value="{$db['uname']}" placeholder="请输入账号" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">密码</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <!-- <input type="text" name="upass" id="upass"  value="{$db['upass']}"  autocomplete="off" class="layui-input"> -->
+                <input type="upass" name="upass"   autocomplete="off" placeholder="留空不修改" class="layui-input">
+
+                </div>
+            </div>
+
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">状态</label>
+                <div class="layui-input-block">
+                  <input type="radio" name="status" value="0" title="正常" {if condition="$db['status'] eq 0"} checked {/if} disabled>
+                  <input type="radio" name="status" value="1" title="禁止" {if condition="$db['status'] eq 1"} checked {/if} disabled>
+                </div>
+            </div>
+
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即提交</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+<script>
+layui.use(['form', 'layedit', 'jquery'], function(){
+        var form = layui.form
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ;
+
+
+
+
+
+
+    
+    // 表单监听登录,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Index/edit")}', user, function (data) {   //利用ajax把表单数据传递过去  验证账户 密码
+                    if(data==1) { //用户 密码经过后台验证 通过 后登录 跳转
+                        layer.msg("修改成功",function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    }else{
+                         layer.msg('修改信息不能重复');
+                    }
+                });
+
+            return false;
+        });
+      
+
+
+});
+</script>
+
+</body>
+</html>

+ 115 - 0
application/admin/view/index/log.html

@@ -0,0 +1,115 @@
+<!--加载公共头部文件-->
+    {include file='Base/top'}
+<!--加载公共左侧文件-->
+    {include file='Base/left'}
+<!--加载公共底部文件-->
+    {include file='Base/fotter'}
+
+<!-- 内容显示部分 -->
+<div class="layui-body">
+     <!--面包屑导航-->
+        <blockquote class="layui-elem-quote">
+            <span class="layui-breadcrumb" style="visibility: visible;">
+                <a >管理员管理</a>
+                <span lay-separator="">/</span>
+                <a href="{:url('index/log')}">
+                  <cite>管理员日志</cite>
+                </a>
+              </span>
+        </blockquote>
+        <!--面包屑导航 结束-->
+
+
+	<div class="layui-row  layui-col-space10" style="margin:0 10px;">
+
+		<table class="layui-hide"  id="list" lay-filter="list"></table><!-- 表格数据 -->
+
+	</div>
+</div>
+
+
+
+
+<!-- 头部工具栏模块 -->
+<script type="text/html" id="toolbarDemo"><!-- 表格自定义操作按钮 -->
+    <a class="layui-btn layui-btn-xs  layui-btn-danger" lay-event="del"><i class="layui-icon">&#xe640;</i>一键清空</a>
+</script>
+
+
+
+<script>
+layui.use(['table','layer','laypage','jquery'], function(){
+        var table = layui.table,
+            layer = layui.layer,
+            laypage = layui.laypage,
+            $ = layui.jquery;
+
+
+        //数据表格
+        table.render({
+            elem: '#list'
+            ,id:'idSystem'
+            ,url:'{:url("log_data")}'//数据接口(专门处理数据)
+            ,height:'full'
+            ,toolbar: '#toolbarDemo'
+            //分页
+            ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
+                layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
+                ,curr: 1 //设定初始在第 5 页
+                ,limit:15 //一页显示多少条
+                ,limits:[15,35,55]//每页条数的选择项
+                ,groups: 3 //只显示 2 个连续页码
+                ,first: "首页" //不显示首页
+                ,last: "尾页" //不显示尾页
+
+            }
+
+            ,cols: [[  	 
+                {field: 'id', title: '管理员ID', align:'center',width: 90}        
+                ,{field: 'uname', title: '管理员',align:'center', width: 120}
+                ,{field: 'ip', title: 'IP地址', align:'center',width: 130}        
+                ,{field: 'url', title: '请求链接',align:'center', width: 250}
+                ,{field: 'method', title: '请求类型',align:'center', width: 90}
+                ,{field: 'type', title: '资源类型', align:'center',width: 90}        
+                ,{field: 'remark', title: '操作行为',align:'center', width: 200}
+                ,{field: 'create_time', title: '操作时间',align:'center', width: 200}           
+
+            ]]
+        });
+
+
+
+        //监听头工具栏事件
+        table.on('toolbar(list)', function(obj){
+            var checkStatus = table.checkStatus(obj.config.id)
+            ,data = checkStatus.data; //获取选中的数据
+            switch(obj.event){
+
+            	case 'del'://删除
+	                layer.confirm('确定要清空吗?',{icon: 5},function(index){
+	                    $.post("{:url('index/truncate')}",function(res){
+	                        if(res == 1){        
+	                            layer.msg('删除成功!');
+	                        }
+	                        else{
+	                             layer.msg('没有删除权限',{icon:5});
+	                        }
+	                        
+	                    })
+	                });
+              	break;
+			};
+
+        });
+
+        
+         
+
+       
+
+
+});
+
+
+
+</script>

+ 250 - 0
application/admin/view/index/lst.html

@@ -0,0 +1,250 @@
+<!--加载公共头部文件-->
+    {include file='Base/top'}
+<!--加载公共左侧文件-->
+    {include file='Base/left'}
+<!--加载公共底部文件-->
+    {include file='Base/fotter'}
+
+<!-- 内容显示部分 -->
+<div class="layui-body">
+     <!--面包屑导航-->
+        <blockquote class="layui-elem-quote">
+            <span class="layui-breadcrumb" style="visibility: visible;">
+                <a >管理员管理</a>
+                <span lay-separator="">/</span>
+                <a href="{:url('index/lst')}">
+                  <cite>管理员信息</cite>
+                </a>
+              </span>
+        </blockquote>
+        <!--面包屑导航 结束-->
+
+
+	<div class="layui-row  layui-col-space10" style="margin:0 10px;">
+            <div class="search" style="margin:10px 0px 5px -5px;"><!-- 搜索 -->
+                <div class="layui-inline">
+                    <input  type="text" class="layui-input" name="uname" id="users"  autocomplete="off" placeholder="请输入账号">
+                </div>
+                <button class="layui-btn layui-btn-primary" data-type="reload">搜索</button>
+            </div>
+
+
+		<table class="layui-hide"  id="list" lay-filter="list"></table><!-- 表格数据 -->
+
+	</div>
+</div>
+
+
+
+
+<!-- 表格操作栏模块 -->
+<script type="text/html" id="barDemo"><!-- 表格自定义操作按钮 -->
+    {{#  if(d.id == 1){ }}
+  	<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
+  	<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="#">禁止删除</a>
+    {{#  } else{ }}
+    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+    {{#  } }}
+</script>
+
+
+<!-- 头部工具栏模块 -->
+<script type="text/html" id="toolbarDemo"><!-- 表格自定义操作按钮 -->
+    <a class="layui-btn layui-btn-xs" lay-event="add">添加</a>
+
+    <div class="layui-btn-group demoTable">
+         <button class="layui-btn layui-btn-xs" data-type="getCheckData">批量删除</button>
+    </div>
+
+</script>
+
+
+
+<script>
+layui.use(['table','layer','laypage','jquery'], function(){
+        var table = layui.table,
+            layer = layui.layer,
+            laypage = layui.laypage,
+            $ = layui.jquery;
+
+
+        //数据表格
+        table.render({
+            elem: '#list'
+            ,id:'idSystem'
+            ,url:'{:url("lst_data")}'//数据接口(专门处理数据)
+            ,height:'full'
+            // ,toolbar: 'default' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
+             ,toolbar: '#toolbarDemo'
+
+             //分页
+            ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
+                layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
+                ,curr: 1 //设定初始在第 5 页
+                ,limit:5 //一页显示多少条
+                ,limits:[5,15,25]//每页条数的选择项
+                ,groups: 3 //只显示 2 个连续页码
+                ,first: "首页" //不显示首页
+                ,last: "尾页" //不显示尾页
+
+            }
+
+            ,cols: [[
+             	 {type: 'checkbox', fixed: 'left'}
+                ,{field: 'id', title: 'ID', align:'center',width: 80}        
+                ,{field: 'uname', title: '账号',align:'center', width: 120}
+                ,{field: 'last_login_time', title: '最后登录时间',align:'center', width: 190}
+                ,{field:'actions',title: '操作',toolbar: '#barDemo',align:'left',width:300,fixed:'right'}
+
+            ]]
+        });
+
+
+         // 执行搜索,表格重载
+        $('.search .layui-btn-primary').on('click',function () {
+            // 搜索条件
+                var id = $('#users').val();
+                if(id==''){
+                    layer.msg('搜索条件不能为空');
+                    return false;
+                }
+                table.reload('idSystem', {
+                    page: {
+                        curr: 1
+                    }
+                    ,where: {
+                        uname: id
+                    }
+                    
+                });
+        });
+
+
+
+
+
+        //监听头工具栏事件
+        table.on('toolbar(list)', function(obj){
+            var checkStatus = table.checkStatus(obj.config.id)
+            ,data = checkStatus.data; //获取选中的数据
+            switch(obj.event){
+              case 'add'://添加
+                var index =  layer.open({
+                    type:2,
+                    title:"添加管理员",
+                    maxmin:true,
+                    width:'auto',
+                    offset : '100px',
+                    area :['1000px','600px'],
+                    content:"{:url('index/add')}"
+                });
+              break;
+
+              
+            }; 
+
+
+        });
+
+        
+          
+          
+        //监听行工具事件
+        table.on('tool(list)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
+            var data = obj.data; //获得当前行数据
+            var layEvent = obj.event; //获得 lay-event 对应的值
+            var tr = obj.tr; //获得当前行 tr 的DOM对象
+
+            switch(layEvent){
+		      case 'edit'://编辑
+		        var index =  layer.open({
+                    type:2,
+                    title:"编辑信息",
+                    maxmin:true,
+                    width:'auto',
+                    offset : '100px',
+                     area :['1000px','600px'],
+                    content:"{:url('index/edit')}?id="+data.id
+                });
+		      break;
+
+              case 'del'://删除
+                 layer.confirm('确定要删除吗?',{icon: 5},function(index){
+                    $.post("{:url('index/del')}?id="+data.id,function(res){
+                        if(res == 1){        
+                            obj.del();
+                            layer.msg('删除成功!');
+                        }else if(res==3){
+                            layer.msg('超级管理员不允许删除!');
+                        }else{
+                             layer.msg('没有删除权限',{icon:5});
+                        }
+                        
+                    })
+                });
+              break;
+
+
+		    };
+            // if(layEvent=='del'){
+            //     location.href = "{:url('index/del')}?id="+data.id; 
+            // }
+            
+
+        });
+
+
+
+        //批量删除————————————————————————————————————————
+        var $ = layui.$, active = {
+            getCheckData: function(){ //获取选中数据
+                var checkStatus = table.checkStatus('idSystem')
+                ,data = checkStatus.data;
+                if(data==""){
+                    layer.msg('请选择需要删除的数据',{icon:2});
+                    return;
+                }
+                var ids = [];
+                if(data.length>0){
+                    for(var i=0;i<data.length;i++){
+                        ids+=data[i].id+",";
+                    }
+                }
+                layer.confirm('确定要删除id为'+ids+'的用户信息吗?',function(index){
+                    $.ajax({
+                        type:'POST',
+                        url:'{:url("index/pdel")}',
+                        data:{"ids":ids},
+                        success:function(data){
+                            if(data==1){
+                                // layer.msg('删除成功',{icon:1});
+                                layer.msg('删除成功',{icon:1},function () {
+                                    var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                                    parent.layer.close(index);//关闭当前frame
+                                    parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                                });    
+                            }else{
+                                layer.msg('没有批量删除权限',{icon:5});
+                            }
+                        }
+                    })
+                })
+            }
+        }
+         $('.demoTable .layui-btn-xs').on('click', function(){
+            var type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+        //批量删除结束————————————————————————————————————————————————————
+             
+
+
+       
+
+
+});
+
+
+
+</script>

+ 168 - 0
application/admin/view/index/server.html

@@ -0,0 +1,168 @@
+<!--加载公共头部文件-->
+    {include file='Base/top'}
+
+<!--加载公共左侧文件-->
+    {include file='Base/left'}
+<!--加载公共底部文件-->
+    {include file='Base/fotter'}
+
+<!-- 内容主体区域 -->
+<div class="layui-body">  
+
+	 <!--面包屑导航-->
+        <blockquote class="layui-elem-quote">
+            <span class="layui-breadcrumb" style="visibility: visible;">
+                <a >控制台</a>
+                <span lay-separator="">/</span>
+                <a href="{:url('index/server')}">
+                  <cite>主页信息</cite>
+                </a>
+              </span>
+        </blockquote>
+        <!--面包屑导航 结束-->
+
+    <div class="mainfrm">
+		    <div class="layui-row  layui-col-space10" style="margin:0 5px;">
+
+
+		        	<div class="layui-col-xs6">
+			            <div class="layui-card-header">管理员登录</div>
+	            		<div class="layui-card-body" id="main" style="height: 450px;"></div>
+		        	</div>
+
+
+	           		<div class="layui-col-xs6">
+	           			<!-- <table class="layui-table">
+			                <colgroup>
+			                    <col width="160" height="1000">
+			                    <col>
+			                </colgroup>
+			                <thead>
+			                	系统信息
+			                </thead>
+			                <tbody>
+			                {volist name="info" id="v" key="k"}
+			                <tr>
+			                    <td class="text">{$key}:</td>
+			                    <td class="input">{$v}</td>
+			                </tr>
+			                {/volist}
+			                </tbody>
+			            </table> -->
+			            <div class="layui-card">
+					        <div class="layui-card-header">系统信息</div>
+					        <div class="layui-card-body layui-text" >
+					          <table class="layui-table">
+					            <colgroup>
+					              <col width="110">
+					              <col>
+					            </colgroup>
+					            <tbody>
+					            {volist name="info" id="v" key="k"}
+					              <tr>
+					                	<td class="text" width="16%">{$key}:</td>
+			                    		<td class="input">{$v}</td>
+					              </tr>
+					            {/volist}
+					            </tbody>
+					          </table>
+					        </div>
+					    </div>
+			       </div>
+		      
+
+		        
+
+		    </div>
+
+	</div>
+	
+</div>
+ 
+<script type="text/javascript">
+var a = "{$web.date_string}";
+var date = a.split(",");
+
+var b = "{$web.login_sum}";
+var login_sum = b.split(",");
+
+
+var myChart = echarts.init(document.getElementById('main'));
+
+option = {
+    tooltip: {
+        trigger: 'axis',
+        position: function (pt) {
+            return [pt[0], '10%'];
+        }
+    },
+    grid: {
+        top: 50,
+        bottom: 70,
+        left:40,
+        right:50
+    },
+    toolbox: {
+        feature: {
+            dataZoom: {
+                yAxisIndex: 'none'
+            },
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    xAxis: {
+        type: 'category',
+        boundaryGap: false,
+        data: date
+    },
+    yAxis: {
+        type: 'value',
+        boundaryGap: [0, '100%']
+    },
+    dataZoom: [{
+        type: 'inside',
+        start: 0,
+        end: 100
+    }, {
+        start: 0,
+        end: 100,
+        handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
+        handleSize: '100%',
+        handleStyle: {
+            color: '#fff',
+            shadowBlur: 3,
+            shadowColor: '#009688',
+            shadowOffsetX: 2,
+            shadowOffsetY: 2
+        }
+    }],
+    series: [
+        {
+            name:'用户登录次数',
+            type:'line',
+            smooth:true,
+            symbol: 'none',
+            sampling: 'average',
+            itemStyle: {
+                normal: {
+                    color: '#009688'
+                }
+            },
+            areaStyle: {
+                normal: {
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                        offset: 0,
+                        color: '#009688'
+                    }, {
+                        offset: 1,
+                        color: '#009688'
+                    }])
+                }
+            },
+            data: login_sum
+        }
+    ]
+};
+myChart.setOption(option);
+</script>

+ 552 - 0
application/admin/view/login/lst.html

@@ -0,0 +1,552 @@
+<!DOCTYPE html>
+{__NOLAYOUT__}
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <title>爱奇君后台管理系统</title>
+    <link rel="stylesheet" href=" __ROOT__/css/layui.css">
+    <script src="__ROOT__/layui.js"></script>
+
+
+    <style type="text/css">
+            h1 {text-align:center;color:#1d598e;font-size:30px;}
+            
+            .layui-input{
+                width: 106%;
+            }
+           .layui-btn{
+                width: 100%;
+            }
+
+            /*特效css*/
+            .tb960x90 {
+            display:none!important;
+            display:none
+            }
+            body {
+                background-color:#232323;
+            }
+    </style>
+
+
+
+    
+
+</head>
+<body>
+     
+<div id="container"></div>
+
+        <div class="mainfrm" style="position:relative;margin:0 auto;top:80%;margin-top:-650px;border:10px solid #efefef;width:370px;height:300px;padding:30px 0 0 20px;">
+            <div class="layui-row  layui-col-space10" style="margin:0 10px;">
+                <div class="layui-col-xs12" style="width:320px;">
+
+                    <form class="layui-form layui-form-pane" lay-filter="form" action="" method="post">
+                        <div class="layui-form-item">
+                            <h1>爱奇君后台管理系统</h1>
+                        </div>
+     
+                        <div class="layui-form-item" style="text-align: center;" >
+                            <label class="layui-form-label">用户名</label>
+                            <div class="layui-input-inline" >
+                                <input type="text" name="uname" id="uname" value="" autocomplete="off" placeholder="不能为空"  class="layui-input">
+                            </div>
+                        </div>
+
+                        <div class="layui-form-item" style="text-align: center">
+                            <label class="layui-form-label">密码</label>
+                            <div class="layui-input-inline">
+                                <input type="password" name="upass" id="upass" value=""  autocomplete="off" placeholder=""  class="layui-input">
+                            </div>
+                        </div>
+
+                        <div class="layui-form-item" style="text-align: center">
+                              <div id="slider"></div><!-- 滑块验证 -->
+                        </div>
+
+                        <div class="layui-form-item" id="login" style="text-align: center;">     
+                            <button class="layui-btn" lay-submit lay-filter="login" >登录</button>
+                        </div>
+                    </form>
+                </div>
+            </div>
+        </div>
+    <!-- </div> -->
+ 
+
+
+<script>
+layui.config({
+    base: '__ROOT__/module/'
+}).
+use(['form', 'layedit', 'jquery',"sliderVerify"], function(){
+        var form = layui.form
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ,sliderVerify = layui.sliderVerify
+            ;
+
+         var slider = sliderVerify.render({
+                    elem: '#slider',
+                })
+
+    
+    // 表单监听登录,调用后台接口进行处理
+        form.on("submit(login)", function (data) {
+           var uname =$.trim($("#uname").val());
+            var upass =$.trim($("#upass").val());
+
+            if (uname == '') { //如果验证码输入为空
+                layer.msg('用户名不能为空!');
+            } else if (upass == '') {
+                layer.msg('密码不能为空!')
+            } else {
+                if(slider.isOk())
+                {
+                   var user = data.field;  //将表单提交数据赋值给变量
+                    //console.log(user);
+                    //弹出loading
+                    //{:url("/lst")}:为后台登录地址,设置路由进行替换的(在route.php中查看)
+                    $.post('{:url("/lst")}', user, function (data) {   //利用ajax把表单数据传递过去  验证账户 密码
+                        if (data==1) { //用户 密码经过后台验证 通过 后登录 跳转
+                            layer.msg('登录中····');
+                            setTimeout(function () {
+                                window.location.href = "{:url('index/server')}";
+                            }, 2000);
+                        }else{
+                            layer.msg('账户或者密码不对!');
+                        }
+                    });
+                }else{
+                    layer.msg("请先通过滑块验证");
+                }
+            }
+
+            return false;
+        });
+
+
+        
+
+
+});
+</script>
+
+<!-- 特效js -->
+<script>
+    var Sketch = function() {
+    function e(e) {
+        e = n(e || {}, l);
+        var t = "sketch-" + r++,
+            o = e.hasOwnProperty("canvas"),
+            u = o ? e.canvas : document.createElement("canvas");
+        switch (e.type) {
+            case m:
+                try {
+                    s = u.getContext("webgl", e)
+                } catch (d) {}
+                try {
+                    s = s || u.getContext("experimental-webgl", e)
+                } catch (d) {}
+                if (!s) throw "WebGL not supported";
+                break;
+            case c:
+                try {
+                    s = u.getContext("2d", e)
+                } catch (d) {}
+                if (!s) throw "Canvas not supported";
+                break;
+            default:
+                u = s = document.createElement("div")
+        }
+        return s.canvas = u, u.className = "sketch", o ? e.autoresize = !1 : (e.container.appendChild(u), e.hasOwnProperty("autoresize") || (e.autoresize = l.autoresize), u.id = t), n(self, g), n(s, e), n(s, p), a(), e.autoresize && i(), w.push(s), s.autostart && setTimeout(s.start, 0), s
+    }
+
+    function n(e, n) {
+        for (var t in n) e.hasOwnProperty(t) || (e[t] = n[t]);
+        return e
+    }
+
+    function t(e) {
+        function n(e, n) {
+            return function() {
+                e.call(n, arguments)
+            }
+        }
+        var t = {};
+        for (var o in e) t[o] = "function" == typeof e[o] ? n(e[o], e) : e[o];
+        return t
+    }
+
+    function o(e, n) {
+        e.length = 0;
+        for (var t = 0, o = n.length; o > t; t++) e[t] = n[t];
+        return e
+    }
+
+    function a() {
+        function e(e) {
+            return M[e] || String.fromCharCode(e)
+        }
+
+        function n(e) {
+            s.mouse.ox = s.mouse.x, s.mouse.oy = s.mouse.y, s.mouse.x = e.x, s.mouse.y = e.y, s.mouse.dx = s.mouse.x - s.mouse.ox, s.mouse.dy = s.mouse.y - s.mouse.oy
+        }
+
+        function a(e) {
+            var n, o = t(e);
+            o.original = e;
+            for (var a = s.canvas, u = 0, i = 0; a; a = a.offsetParent) u += a.offsetLeft, i += a.offsetTop;
+            if (o.touches && o.touches.length)
+                for (var r, c = o.touches.length - 1; c >= 0; c--) r = o.touches[c], r.x = r.pageX - u, r.y = r.pageY - i, n = A[c] || r, r.dx = r.x - n.x, r.dy = r.y - n.x, r.ox = n.x, r.oy = n.y, A[c] = t(r);
+            else o.x = o.pageX - u, o.y = o.pageY - i, n = A.mouse || o, o.dx = o.x - n.x, o.dy = o.y - n.y, o.ox = n.x, o.oy = n.y, A.mouse = o;
+            return o
+        }
+
+        function u(e) {
+            e.preventDefault(), e = a(e), o(s.touches, e.touches), n(s.touches[0]), s.touchstart && s.touchstart(e), s.mousedown && s.mousedown(e)
+        }
+
+        function r(e) {
+            e = a(e), o(s.touches, e.touches), n(s.touches[0]), s.touchmove && s.touchmove(e), s.mousemove && s.mousemove(e)
+        }
+
+        function c(e) {
+            if (e = a(e), e.touches.length)
+                for (var n in A) e.touches[n] || A[n];
+            else A = {};
+            s.touchend && s.touchend(e), s.mouseup && s.mouseup(e)
+        }
+
+        function m(e) {
+            e = a(e), s.mouseover && s.mouseover(e)
+        }
+
+        function d(e) {
+            e = a(e), s.dragging || (x(s.canvas, "mousemove", h), x(s.canvas, "mouseup", v), y(document, "mousemove", h), y(document, "mouseup", v), s.dragging = !0), o(s.touches, [e]), s.touchstart && s.touchstart(e), s.mousedown && s.mousedown(e)
+        }
+
+        function h(e) {
+            e = a(e), n(e), o(s.touches, [e]), s.touchmove && s.touchmove(e), s.mousemove && s.mousemove(e)
+        }
+
+        function f(e) {
+            e = a(e), s.mouseout && s.mouseout(e)
+        }
+
+        function v(e) {
+            e = a(e), s.dragging && (x(document, "mousemove", h), x(document, "mouseup", v), y(s.canvas, "mousemove", h), y(s.canvas, "mouseup", v), s.dragging = !1), A.mouse, s.touchend && s.touchend(e), s.mouseup && s.mouseup(e)
+        }
+
+        function w(e) {
+            e = a(e), s.click && s.click(e)
+        }
+
+        function l(n) {
+            s.keys[e(n.keyCode)] = !0, s.keys[n.keyCode] = !0, s.keydown && s.keydown(n)
+        }
+
+        function g(n) {
+            s.keys[e(n.keyCode)] = !1, s.keys[n.keyCode] = !1, s.keyup && s.keyup(n)
+        }
+        var M = {
+            8: "BACKSPACE",
+            9: "TAB",
+            13: "ENTER",
+            16: "SHIFT",
+            27: "ESCAPE",
+            32: "SPACE",
+            37: "LEFT",
+            38: "UP",
+            39: "RIGHT",
+            40: "DOWN"
+        };
+        for (var k in M) p.keys[M[k]] = !1;
+        var A = {};
+        y(s.canvas, "touchstart", u), y(s.canvas, "touchmove", r), y(s.canvas, "touchend", c), y(s.canvas, "mouseover", m), y(s.canvas, "mousedown", d), y(s.canvas, "mousemove", h), y(s.canvas, "mouseout", f), y(s.canvas, "mouseup", v), y(s.canvas, "click", w), y(document, "keydown", l), y(document, "keyup", g), y(window, "resize", i)
+    }
+
+    function u() {
+        if (!h) {
+            var e = Date.now();
+            s.dt = e - s.now, s.millis += s.dt, s.now = e, s.update && s.update(s.dt), s.autoclear && s.clear(), s.draw && s.draw(s)
+        }
+        h = ++h % s.interval, f = requestAnimationFrame(u)
+    }
+
+    function i() {
+        if (s.autoresize) {
+            var e = s.type === d ? s.style : s.canvas;
+            s.fullscreen ? (s.height = e.height = window.innerHeight, s.width = e.width = window.innerWidth) : (e.height = s.height, e.width = s.width), s.resize && s.resize()
+        }
+    }
+    var s, r = 0,
+        c = "canvas",
+        m = "web-gl",
+        d = "dom",
+        h = 0,
+        f = -1,
+        v = {},
+        w = [],
+        l = {
+            fullscreen: !0,
+            autostart: !0,
+            autoclear: !0,
+            autopause: !0,
+            autoresize: !0,
+            container: document.body,
+            interval: 1,
+            type: c
+        },
+        g = {
+            PI: Math.PI,
+            TWO_PI: 2 * Math.PI,
+            HALF_PI: Math.PI / 2,
+            QUARTER_PI: Math.PI / 4,
+            abs: Math.abs,
+            acos: Math.acos,
+            asin: Math.asin,
+            atan2: Math.atan2,
+            atan: Math.atan,
+            ceil: Math.ceil,
+            cos: Math.cos,
+            exp: Math.exp,
+            floor: Math.floor,
+            log: Math.log,
+            max: Math.max,
+            min: Math.min,
+            pow: Math.pow,
+            round: Math.round,
+            sin: Math.sin,
+            sqrt: Math.sqrt,
+            tan: Math.tan,
+            random: function(e, n) {
+                return e && "number" == typeof e.length && e.length ? e[Math.floor(Math.random() * e.length)] : ("number" != typeof n && (n = e || 1, e = 0), e + Math.random() * (n - e))
+            }
+        },
+        p = {
+            millis: 0,
+            now: 0 / 0,
+            dt: 0 / 0,
+            keys: {},
+            mouse: {
+                x: 0,
+                y: 0,
+                ox: 0,
+                oy: 0,
+                dx: 0,
+                dy: 0
+            },
+            touches: [],
+            initialized: !1,
+            dragging: !1,
+            running: !1,
+            start: function() {
+                s.running || (s.setup && !s.initialized && (s.autopause && (y(window, "focus", s.start), y(window, "blur", s.stop)), s.setup()), s.initialized = !0, s.running = !0, s.now = Date.now(), u())
+            },
+            stop: function() {
+                cancelAnimationFrame(f), s.running = !1
+            },
+            toggle: function() {
+                (s.running ? s.stop : s.start)()
+            },
+            clear: function() {
+                s.canvas && (s.canvas.width = s.canvas.width)
+            },
+            destroy: function() {
+                var e, n, t, o, a, u;
+                w.splice(w.indexOf(s), 1), s.stop();
+                for (n in v) {
+                    for (t = v[n], a = 0, u = t.length; u > a; a++) e = t[a], x(e.el, n, e.fn);
+                    v[n]
+                }
+                s.container.removeChild(s.canvas);
+                for (o in s) s.hasOwnProperty(o) && s[o]
+            }
+        },
+        y = function() {
+            function e(e, n, t) {
+                v[n] || (v[n] = []), v[n].push({
+                    el: e,
+                    fn: t
+                })
+            }
+            return window.addEventListener ? function(n, t, o) {
+                n.addEventListener(t, o, !1), e(n, t, o)
+            } : window.attachEvent ? function(n, t, o) {
+                n.attachEvent("on" + t, o), e(n, t, o)
+            } : function(n, t, o) {
+                n["on" + t] = o, e(n, t, o)
+            }
+        }(),
+        x = function() {
+            function e(e, n, t) {
+                if (v[n])
+                    for (var o, a = v[n].length - 1; a >= 0; a--) o = v[n][a], o.el === e && o.fn === t && v[n].splice(a, 1)
+            }
+            return window.removeEventListener ? function(n, t, o) {
+                n.removeEventListener(t, o, !1), e(n, t, o)
+            } : window.detachEvent ? function(n, t, o) {
+                n.detachEvent("on" + t, o), e(n, t, o)
+            } : (el["on" + ev] = null, e(el, ev, fn), void 0)
+        }();
+    return {
+        CANVAS: c,
+        WEB_GL: m,
+        DOM: d,
+        instances: w,
+        create: e
+    }
+}();
+Date.now || (Date.now = function() {
+        return +new Date
+    }),
+    function() {
+        for (var e = 0, n = ["ms", "moz", "webkit", "o"], t = 0; n.length > t && !window.requestAnimationFrame; ++t) window.requestAnimationFrame = window[n[t] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[n[t] + "CancelAnimationFrame"] || window[n[t] + "CancelRequestAnimationFrame"];
+        window.requestAnimationFrame || (window.requestAnimationFrame = function(n) {
+            var t = Date.now(),
+                o = Math.max(0, 16 - (t - e)),
+                a = window.setTimeout(function() {
+                    n(t + o)
+                }, o);
+            return e = t + o, a
+        }), window.cancelAnimationFrame || (window.cancelAnimationFrame = function(e) {
+            clearTimeout(e)
+        })
+    }();
+
+function Particle(x, y, radius) {
+    this.init(x, y, radius);
+}
+
+Particle.prototype = {
+
+    init: function(x, y, radius) {
+
+        this.alive = true;
+
+        this.radius = radius || 10;
+        this.wander = 0.15;
+        this.theta = random(TWO_PI);
+        this.drag = 0.92;
+        this.color = '#fff';
+
+        this.x = x || 0.0;
+        this.y = y || 0.0;
+
+        this.vx = 0.0;
+        this.vy = 0.0;
+    },
+
+    move: function() {
+
+        this.x += this.vx;
+        this.y += this.vy;
+
+        this.vx *= this.drag;
+        this.vy *= this.drag;
+
+        this.theta += random(-0.5, 0.5) * this.wander;
+        this.vx += sin(this.theta) * 0.1;
+        this.vy += cos(this.theta) * 0.1;
+
+        this.radius *= 0.96;
+        this.alive = this.radius > 0.5;
+    },
+
+    draw: function(ctx) {
+
+        ctx.beginPath();
+        ctx.arc(this.x, this.y, this.radius, 0, TWO_PI);
+        ctx.fillStyle = this.color;
+        ctx.fill();
+    }
+};
+
+// ----------------------------------------
+// Example
+// ----------------------------------------
+
+var MAX_PARTICLES = 280;
+var COLOURS = ['#69D2E7', '#A7DBD8', '#E0E4CC', '#F38630', '#FA6900', '#FF4E50', '#F9D423'];
+
+var particles = [];
+var pool = [];
+
+var demo = Sketch.create({
+    container: document.getElementById('container')
+});
+
+demo.setup = function() {
+
+    // Set off some initial particles.
+    var i, x, y;
+
+    for (i = 0; i < 20; i++) {
+        x = (demo.width * 0.5) + random(-100, 100);
+        y = (demo.height * 0.5) + random(-100, 100);
+        demo.spawn(x, y);
+    }
+};
+
+demo.spawn = function(x, y) {
+
+    if (particles.length >= MAX_PARTICLES)
+        pool.push(particles.shift());
+
+    particle = pool.length ? pool.pop() : new Particle();
+    particle.init(x, y, random(5, 40));
+
+    particle.wander = random(0.5, 2.0);
+    particle.color = random(COLOURS);
+    particle.drag = random(0.9, 0.99);
+
+    theta = random(TWO_PI);
+    force = random(2, 8);
+
+    particle.vx = sin(theta) * force;
+    particle.vy = cos(theta) * force;
+
+    particles.push(particle);
+}
+
+demo.update = function() {
+
+    var i, particle;
+
+    for (i = particles.length - 1; i >= 0; i--) {
+
+        particle = particles[i];
+
+        if (particle.alive) particle.move();
+        else pool.push(particles.splice(i, 1)[0]);
+    }
+};
+
+demo.draw = function() {
+
+    demo.globalCompositeOperation = 'lighter';
+
+    for (var i = particles.length - 1; i >= 0; i--) {
+        particles[i].draw(demo);
+    }
+};
+
+demo.mousemove = function() {
+
+    var particle, theta, force, touch, max, i, j, n;
+
+    for (i = 0, n = demo.touches.length; i < n; i++) {
+
+        touch = demo.touches[i], max = random(1, 4);
+        for (j = 0; j < max; j++) demo.spawn(touch.x, touch.y);
+    }
+};
+</script>
+
+
+
+</body>
+</html>
+

+ 74 - 0
application/admin/view/tags/add.html

@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+
+
+</head>
+<body>
+    <form  class="layui-form"   style="padding: 30px"  method="post"  >
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">标签名称</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="tagname" id="uname" placeholder="请输入标签名称"   autocomplete="off" class="layui-input">
+                </div>
+            </div>        
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即添加</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+<script>
+
+layui.use(['form', 'layedit', 'jquery','upload','element'], function(){
+        var form = layui.form
+            ,element = layui.element
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ,upload = layui.upload
+            ;
+
+
+        // 表单监听提交,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Tags/add")}', user, function (data) {   
+                    if (data==1) {
+                        layer.alert("添加标签成功!", {icon: 6},function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    }else{
+                        layer.alert('标签名称不能重复',{icon:5});
+                    }
+                });
+
+            return false;
+        });
+
+
+
+
+
+
+
+});
+</script>
+
+
+
+
+</body>
+</html>

+ 73 - 0
application/admin/view/tags/edit.html

@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>爱奇君后台管理系统</title>
+  <link rel="stylesheet" href="__ROOT__/css/layui.css" media="all">
+  <script src="__ROOT__/layui.js"></script>
+  <script src="__ROOT__/lay/modules/jquery.js"></script>
+
+
+</head>
+<body>
+    <form  class="layui-form"   style="padding: 30px"  method="post"  >
+        <input type="hidden" name="id" value="{$list.id}"> 
+            <div class="layui-form-item">
+                <label class="layui-form-label">标签名称</label>
+                <div class="layui-input-inline" style="width:400px;">
+                <input type="text" name="tagname" id="uname" value="{$list.tagname}"   autocomplete="off" class="layui-input">
+                </div>
+            </div>        
+
+            <div class="layui-form-item">
+                <div class="layui-input-block">
+                  <button type="submit" class="layui-btn" lay-submit  lay-filter="sub">立即修改</button>
+                  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                </div>
+            </div>
+    </form>
+
+
+<script>
+
+layui.use(['form', 'layedit', 'jquery','element'], function(){
+        var form = layui.form
+            ,element = layui.element
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ;
+
+
+        // 表单监听提交,调用后台接口进行处理
+        form.on("submit(sub)", function (data) {
+               var user = data.field;  //将表单提交数据赋值给变量
+                $.post('{:url("Tags/edit")}', user, function (data) {   //利用ajax把表单数据传递过去  验证账户 密码
+                    if (data==1) { //用户 密码经过后台验证 通过 后登录 跳转
+                        layer.alert("修改标签成功!", {icon: 6},function () {
+                            var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                            parent.layer.close(index);//关闭当前frame
+                            parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                        });
+                    }else{
+                        layer.alert('标签名称不能重复',{icon:5});
+                    }
+                });
+
+            return false;
+        });
+
+
+
+
+
+
+
+});
+</script>
+
+
+
+
+</body>
+</html>

+ 251 - 0
application/admin/view/tags/lst.html

@@ -0,0 +1,251 @@
+<!--加载公共头部文件-->
+    {include file='Base/top'}
+<!--加载公共左侧文件-->
+    {include file='Base/left'}
+<!--加载公共底部文件-->
+    {include file='Base/fotter'}
+
+
+<!-- 内容显示部分 -->
+<div class="layui-body">
+    <!--面包屑导航-->
+        <blockquote class="layui-elem-quote">
+            <span class="layui-breadcrumb" style="visibility: visible;">
+                <a >标签管理</a>
+                <span lay-separator="">/</span>
+                <a href="{:url('Tags/lst')}">
+                  <cite>标签列表</cite>
+                </a>
+              </span>
+        </blockquote>
+        <!--面包屑导航 结束-->
+
+	<div class="layui-row  layui-col-space10" style="margin:0 10px;">
+    		 <div class="search" style="margin:10px 0px 5px -5px;"><!-- 搜索 -->
+                <div class="layui-inline">
+                    <input  type="text" class="layui-input" name="id" id="refund"  autocomplete="off" placeholder="请输入id">
+                </div>
+                <button class="layui-btn layui-btn-primary" data-type="reload">搜索</button>
+            </div>
+		<table class="layui-hide"  id="list" lay-filter="list"></table><!-- 表格数据 -->
+
+	</div>
+</div>
+
+<!-- <script type="text/html" id="status">
+    {{#  if(d.show_status == 0){ }}
+    <div class="layui-badge layui-bg-green">隐藏</div>
+    {{#  } else if(d.show_status == 1){ }}
+    <div class="layui-badge layui-bg-read">显示</div>
+    {{#  } }}
+</script> -->
+
+
+
+
+ 
+<!-- 表格操作栏模块 -->
+<script type="text/html" id="barDemo"><!-- 表格自定义操作按钮 -->
+  	<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
+  	<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+</script>
+
+
+
+<!-- 头部工具栏模块 -->
+<script type="text/html" id="toolbarDemo"><!-- 表格自定义操作按钮 -->
+    <a class="layui-btn layui-btn-xs" lay-event="add">添加</a>
+
+    <div class="layui-btn-group demoTable">
+         <button class="layui-btn layui-btn-xs" data-type="pdel">批量删除</button>
+    </div>
+
+</script>
+
+
+
+
+<script>
+layui.use(['table','layer','laypage','jquery'], function(){
+        var table = layui.table,
+            layer = layui.layer,
+            laypage = layui.laypage,
+            $ = layui.jquery;
+
+
+        //数据表格
+        table.render({
+            elem: '#list'
+            ,id:'idSystem'
+            ,url:'{:url("lst_data")}'//数据接口(专门处理数据)
+            ,height:'full'
+            // ,toolbar: 'default' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
+             ,toolbar: '#toolbarDemo'
+
+             //分页
+            ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
+                layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
+                ,curr: 1 //设定初始在第 5 页
+                ,limit:10 //一页显示多少条
+                ,limits:[10,20,30]//每页条数的选择项
+                ,groups: 3 //只显示 2 个连续页码
+                ,first: "首页" //不显示首页
+                ,last: "尾页" //不显示尾页
+
+            }
+
+            ,cols: [[
+             	 {type: 'checkbox', fixed: 'left'}
+                ,{field: 'id', title: '标签ID',sort:true, align:'center',width: 100}
+                ,{field: 'tagname', title: '标签名称',align:'center', width: 150}
+                ,{field:'actions',title: '操作',toolbar: '#barDemo',align:'left',width:300 ,fixed:'right'}
+
+            ]]
+        });
+
+
+         // 执行搜索,表格重载
+        $('.search .layui-btn-primary').on('click',function () {
+            // 搜索条件
+                var id = $('#refund').val();
+                if(id==''){
+                    layer.msg('搜索条件不能为空');
+                    return false;
+                }
+                table.reload('idSystem', {
+                    page: {
+                        curr: 1
+                    }
+                    ,where: {
+                        id: id
+                    }
+                    
+                });
+        });
+
+
+
+
+
+        //监听头工具栏事件
+        table.on('toolbar(list)', function(obj){
+            var checkStatus = table.checkStatus(obj.config.id)
+            ,data = checkStatus.data; //获取选中的数据
+            switch(obj.event){
+              case 'add'://添加
+                var index =  layer.open({
+                    type:2,
+                    title:"添加标签",
+                    maxmin:true,
+                    width:'auto',
+                    offset : '100px',
+                    area :['1000px','600px'],
+                    content:"{:url('Tags/add')}"
+                });
+              
+
+              break;
+
+              
+            }; 
+
+
+        });
+
+        
+          
+          
+        //监听行工具事件
+        table.on('tool(list)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
+            var data = obj.data; //获得当前行数据
+            var layEvent = obj.event; //获得 lay-event 对应的值
+            var tr = obj.tr; //获得当前行 tr 的DOM对象
+
+            switch(layEvent){
+		      case 'edit'://编辑
+		        var index =  layer.open({
+                    type:2,
+                    title:"编辑信息",
+                    maxmin:true,
+                    width:'auto',
+                    offset : '100px',
+                     area :['1000px','600px'],
+                    content:"{:url('Tags/edit')}?id="+data.id
+                });
+		      break;
+
+              case 'del'://删除
+                 layer.confirm('确定要删除吗?',{icon: 5},function(index){
+                    $.post("{:url('Tags/del')}?id="+data.id,function(res){
+                        if(res == 1){        
+                            obj.del();
+                            layer.msg('删除成功!');
+                        }else{
+                            layer.msg('删除失败!');
+                        }
+                       
+                    })
+                });
+              break;
+
+
+		    };
+
+            
+
+        });
+
+
+
+        //批量删除————————————————————————————————————————
+        var $ = layui.$, active = {
+            pdel: function(){ //获取选中数据
+                var checkStatus = table.checkStatus('idSystem')
+                ,data = checkStatus.data;
+                if(data==""){
+                    layer.msg('请选择需要删除的数据',{icon:2});
+                    return;
+                }
+                var ids = [];
+                if(data.length>0){
+                    for(var i=0;i<data.length;i++){
+                        ids+=data[i].id+",";
+                    }
+                }
+                layer.confirm('确定要删除id为'+ids+'的用户信息吗?',function(index){
+                    $.ajax({
+                        type:'POST',
+                        url:'{:url("Tags/pdel")}',
+                        data:{"ids":ids},
+                        success:function(data){
+                            if(data==1){
+                                // layer.msg('删除成功',{icon:1});
+                                layer.msg('批量删除成功',{icon:1},function () {
+                                    var index = parent.layer.getFrameIndex(window.name);// 获得frame索引
+                                    parent.layer.close(index);//关闭当前frame
+                                    parent.layui.table.reload('idSystem');//成功刷新父窗口的 table
+                                });    
+                            }else{
+                                layer.msg('没有批量删除权限!',{icon:2});
+                            }
+                        }
+                    })
+                })
+            }
+        }
+         $('.demoTable .layui-btn-xs').on('click', function(){
+            var type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+        //批量删除结束————————————————————————————————————————————————————
+             
+
+
+       
+
+
+});
+
+
+
+</script>

+ 12 - 0
application/command.php

@@ -0,0 +1,12 @@
+<?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: yunwuxin <448901948@qq.com>
+// +----------------------------------------------------------------------
+
+return [];

+ 35 - 0
application/common.php

@@ -0,0 +1,35 @@
+<?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@gmail.com>
+// +----------------------------------------------------------------------
+
+// 应用公共文件
+
+
+/**
+ * 保存后台用户行为
+ * @param string $remark 日志备注
+ */
+function insert_admin_log($remark)
+{
+
+        db('user_log')->insert([
+            'user_id'    => session('id'),
+            'uname'    => session('uname'),
+            'useragent'   => request()->server('HTTP_USER_AGENT'),
+            'ip'          => request()->ip(),
+            'url'         => request()->url(true),
+            'method'      => request()->method(),
+            'type'        => request()->type(),
+            'param'       => json_encode(request()->param()),
+            'remark'      => $remark,
+            'create_time' => time(),
+        ]);
+
+}

+ 251 - 0
application/config.php

@@ -0,0 +1,251 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: liu21st <liu21st@gmail.com>
+// +----------------------------------------------------------------------
+
+return [
+    // +----------------------------------------------------------------------
+    // | 应用设置
+    // +----------------------------------------------------------------------
+
+    // 应用调试模式
+    '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'         => '',
+    // 默认语言
+    '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'],
+    // 是否开启路由解析缓存
+    'route_check_cache'      => false,
+    // 是否强制使用路由
+    'url_route_must'         => false,
+    // 域名部署
+    'url_domain_deploy'      => false,
+    // 域名根,如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,
+    // 全局请求缓存排除规则
+    'request_cache_except'   => [],
+
+    // +----------------------------------------------------------------------
+    // | 模板设置
+    // +----------------------------------------------------------------------
+
+    'template'               => [
+        // 模板引擎类型 支持 php think 支持扩展
+        'type'         => 'Think',
+        // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写
+        'auto_rule'    => 1,
+        // 模板路径
+        'view_path'    => '',
+        // 模板后缀
+        'view_suffix'  => 'html',
+        // 模板文件名分隔符
+        'view_depr'    => DS,
+        // 模板引擎普通标签开始标记
+        'tpl_begin'    => '{',
+        // 模板引擎普通标签结束标记
+        'tpl_end'      => '}',
+        // 标签库标签开始标记
+        'taglib_begin' => '{',
+        // 标签库标签结束标记
+        'taglib_end'   => '}',
+    ],
+
+    // 视图输出字符串内容替换
+    'view_replace_str'       => [],
+    // 默认跳转页面对应的模板文件
+    '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,
+        // 日志记录级别
+        'level' => [],
+    ],
+
+    // +----------------------------------------------------------------------
+    // | Trace设置 开启 app_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,
+    ],
+
+    //分页配置
+    // 'paginate'               => [
+    //     'type'      => 'bootstrap',
+    //     'var_page'  => 'page',
+    //     'list_rows' => 15,
+    // ],
+
+     //分页配置
+    'paginate'               => [
+        'type'      => 'page\Page',//自己修改的系统自带分页(在extend/page/Page.php)
+        'var_page'  => 'page',
+        'list_rows' => 15,
+    ],
+
+];

+ 247 - 0
application/data/tools.sql

@@ -0,0 +1,247 @@
+-- phpMyAdmin SQL Dump
+-- version 4.8.5
+-- https://www.phpmyadmin.net/
+--
+-- 主机: localhost
+-- 生成日期: 2020-07-03 09:09:54
+-- 服务器版本: 8.0.12
+-- PHP 版本: 7.3.4
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET AUTOCOMMIT = 0;
+START TRANSACTION;
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- 数据库: `tools`
+--
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `bp_column`
+--
+
+CREATE TABLE `bp_column` (
+  `id` int(10) NOT NULL COMMENT '导航栏id',
+  `catename` char(50) NOT NULL COMMENT '导航栏名称'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='导航栏表';
+
+--
+-- 转存表中的数据 `bp_column`
+--
+
+INSERT INTO `bp_column` (`id`, `catename`) VALUES
+(1, '有趣网站'),
+(2, '实用工具'),
+(3, '网页特效'),
+(4, '微信应用'),
+(5, 'API应用'),
+(6, '网页游戏');
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `bp_good`
+--
+
+CREATE TABLE `bp_good` (
+  `id` int(10) NOT NULL COMMENT '工具id',
+  `keywords` char(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '关键字',
+  `title` char(100) NOT NULL COMMENT '标题',
+  `likes` int(50) NOT NULL DEFAULT '1' COMMENT '点赞',
+  `author` char(50) NOT NULL COMMENT '作者',
+  `column_id` int(10) NOT NULL COMMENT '导航栏id',
+  `tags_id` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签id,多个标签用英文逗号分割',
+  `url` char(100) NOT NULL COMMENT '地址',
+  `sort` int(10) NOT NULL DEFAULT '50' COMMENT '排序',
+  `create_time` int(10) NOT NULL COMMENT '创建时间'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工具信息表';
+
+--
+-- 转存表中的数据 `bp_good`
+--
+
+INSERT INTO `bp_good` (`id`, `keywords`, `title`, `likes`, `author`, `column_id`, `tags_id`, `url`, `sort`, `create_time`) VALUES
+(58, 'M', 'openmoji', 3, '极风游', 2, '1,2', 'openmoji/lst', 50, 1593761163),
+(3, '汉', '汉字转换为拼音', 15, '爱奇君', 1, '1', 'activex/lst', 30, 1593423223),
+(4, '计', '在线计算器', 3, '爱奇君', 2, '1,2', 'calputer/lst', 40, 1593423223),
+(5, '颜', '颜色代码选取器', 2, '爱奇君', 2, '1', 'color/lst', 50, 1593423223),
+(6, '文', '文本对比', 2, '爱奇君', 2, '2', 'contrast/lst', 60, 1593423223),
+(7, '英', '英文字母大小写转换', 2, '爱奇君', 2, '2', 'dxzh/lst', 70, 1593423223),
+(9, '简', '简体繁体火星文转换', 4, '爱奇君', 2, '2', 'font/lst', 90, 1593423223),
+(10, 'J', 'json/postman互转', 1, '爱奇君', 2, '2', 'jsonpost/lst', 1, 1593423223),
+(11, '金', '金额数字转大写汉字', 2, '爱奇君', 2, '3', 'number/lst', 11, 1593423223),
+(12, 'P', 'pdf转png/jpg', 1, '爱奇君', 2, '3', 'pdf/lst', 12, 1593423223),
+(13, '格', 'PPT转PDF', 2, '爱奇君', 2, '3', 'ppt/lst', 13, 1593423223),
+(14, '重', '在线文本去重', 3, '爱奇君', 2, '3', 'qc/lst', 14, 1593423223),
+(15, 'Q', 'QQ强制对话', 1, '爱奇君', 2, '3', 'qqtalk/lst', 15, 1593423223),
+(16, 'D', 'pdf转doc', 1, '爱奇君', 2, '3', 'pdfdoc/lst', 16, 1593423223),
+(57, '字', 'FontAwesome字库', 2, '极风游', 2, '1,2', 'awesome/lst', 50, 1593761121),
+(18, 'O', 'ocr图片文字识别', 1, '爱奇君', 2, '4', 'ocr/lst', 18, 1593423223),
+(59, '解', '应用安装包解析', 1, '极风游', 2, '1,2', 'requpack/lst', 50, 1593761194),
+(22, 'I', 'ping测试', 3, '爱奇君', 2, '1', 'ping/lst', 23, 1593423223),
+(23, 'A', 'Alexa排名', 2, '爱奇君', 2, '2', 'alexa/lst', 24, 1593423223),
+(24, '车', '赛车加载', 3, '爱奇君', 3, '2', 'cycle/lst', 25, 1593423223),
+(25, '火', '火焰光标', 4, '爱奇君', 3, '4', 'fire/lst', 24, 1593423223),
+(26, '蓝', '蓝色粒子', 2, '爱奇君', 3, '4', 'blue/lst', 27, 1593423223),
+(27, '三', '三维菱形隧道', 1, '爱奇君', 3, '4', 'sw/lst', 28, 1593423223),
+(28, '雷', '坐标雷达', 2, '爱奇君', 3, '4', 'ld/lst', 29, 1593423223),
+(29, '车', '赛车小游戏', 12, '爱奇君', 6, '4', 'scgame/lst', 31, 1593423223);
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `bp_tags`
+--
+
+CREATE TABLE `bp_tags` (
+  `id` mediumint(9) NOT NULL COMMENT '标签id',
+  `tagname` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签名称'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='标签表';
+
+--
+-- 转存表中的数据 `bp_tags`
+--
+
+INSERT INTO `bp_tags` (`id`, `tagname`) VALUES
+(1, '热门'),
+(2, '推荐'),
+(3, 'PDF'),
+(4, '开发');
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `bp_user`
+--
+
+CREATE TABLE `bp_user` (
+  `id` int(20) UNSIGNED NOT NULL,
+  `uname` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '账号',
+  `upass` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '密码',
+  `status` int(1) DEFAULT '0' COMMENT '0正常,1为禁止',
+  `last_login_ip` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '最后登陆IP',
+  `last_login_time` int(11) UNSIGNED DEFAULT '0' COMMENT '最后登陆时间',
+  `uid` tinyint(5) DEFAULT NULL COMMENT '用户组对应的id'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='用户表' ROW_FORMAT=COMPACT;
+
+--
+-- 转存表中的数据 `bp_user`
+--
+
+INSERT INTO `bp_user` (`id`, `uname`, `upass`, `status`, `last_login_ip`, `last_login_time`, `uid`) VALUES
+(1, 'admin', '202cb962ac59075b964b07152d234b70', 0, '0.0.0.0', 1593423223, 1),
+(2, 'test', '202cb962ac59075b964b07152d234b70', 0, '0.0.0.0', 1593413285, 2),
+(3, 'test1', '202cb962ac59075b964b07152d234b70', 0, '0.0.0.0', 1592977918, 7);
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `bp_user_log`
+--
+
+CREATE TABLE `bp_user_log` (
+  `id` int(11) UNSIGNED NOT NULL,
+  `user_id` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT '管理员id',
+  `uname` varchar(32) NOT NULL DEFAULT '' COMMENT '管理员用户名',
+  `useragent` varchar(255) NOT NULL DEFAULT '' COMMENT 'User-Agent',
+  `ip` varchar(16) NOT NULL DEFAULT '' COMMENT 'ip地址',
+  `url` varchar(255) NOT NULL DEFAULT '' COMMENT '请求链接',
+  `method` varchar(32) NOT NULL DEFAULT '' COMMENT '请求类型',
+  `type` varchar(32) NOT NULL DEFAULT '' COMMENT '资源类型',
+  `param` text NOT NULL COMMENT '请求参数',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '日志备注',
+  `create_time` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理员日志' ROW_FORMAT=COMPACT;
+
+--
+-- 转存表中的数据 `bp_user_log`
+--
+
+INSERT INTO `bp_user_log` (`id`, `user_id`, `uname`, `useragent`, `ip`, `url`, `method`, `type`, `param`, `remark`, `create_time`) VALUES
+(1, 1, 'admin', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400', '0.0.0.0', 'http://localhost:85/lst.html', 'POST', 'html', '{\"uname\":\"admin\",\"upass\":\"123\"}', '登录操作', 1593400704),
+(2, 2, 'test', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400', '0.0.0.0', 'http://localhost:85/lst.html', 'POST', 'html', '{\"uname\":\"test\",\"upass\":\"123\"}', '登录操作', 1593413285),
+(3, 1, 'admin', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400', '0.0.0.0', 'http://localhost:85/lst.html', 'POST', 'html', '{\"uname\":\"admin\",\"upass\":\"123\"}', '登录操作', 1593414076),
+(4, 1, 'admin', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0', '0.0.0.0', 'http://localhost:85/lst.html', 'POST', 'html', '{\"uname\":\"admin\",\"upass\":\"123\"}', '登录操作', 1593414115),
+(5, 1, 'admin', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400', '0.0.0.0', 'http://localhost:85/lst.html', 'POST', 'html', '{\"uname\":\"admin\",\"upass\":\"123\"}', '登录操作', 1593414200),
+(6, 1, 'admin', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400', '0.0.0.0', 'http://localhost:85/lst.html', 'POST', 'html', '{\"uname\":\"admin\",\"upass\":\"123\"}', '登录操作', 1593423223);
+
+--
+-- 转储表的索引
+--
+
+--
+-- 表的索引 `bp_column`
+--
+ALTER TABLE `bp_column`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- 表的索引 `bp_good`
+--
+ALTER TABLE `bp_good`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- 表的索引 `bp_tags`
+--
+ALTER TABLE `bp_tags`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- 表的索引 `bp_user`
+--
+ALTER TABLE `bp_user`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- 表的索引 `bp_user_log`
+--
+ALTER TABLE `bp_user_log`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- 在导出的表使用AUTO_INCREMENT
+--
+
+--
+-- 使用表AUTO_INCREMENT `bp_column`
+--
+ALTER TABLE `bp_column`
+  MODIFY `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '导航栏id', AUTO_INCREMENT=12;
+
+--
+-- 使用表AUTO_INCREMENT `bp_good`
+--
+ALTER TABLE `bp_good`
+  MODIFY `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '工具id', AUTO_INCREMENT=60;
+
+--
+-- 使用表AUTO_INCREMENT `bp_tags`
+--
+ALTER TABLE `bp_tags`
+  MODIFY `id` mediumint(9) NOT NULL AUTO_INCREMENT COMMENT '标签id', AUTO_INCREMENT=7;
+
+--
+-- 使用表AUTO_INCREMENT `bp_user`
+--
+ALTER TABLE `bp_user`
+  MODIFY `id` int(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
+
+--
+-- 使用表AUTO_INCREMENT `bp_user_log`
+--
+ALTER TABLE `bp_user_log`
+  MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
+COMMIT;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

+ 55 - 0
application/database.php

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

+ 14 - 0
application/extra/queue.php

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

+ 16 - 0
application/index/config.php

@@ -0,0 +1,16 @@
+<?php
+ 
+return [
+
+    // 视图输出字符串内容替换
+    'view_replace_str'       => [
+        '__IBOXS__'=>'/static/index/i7box',
+        '__BOX__'=>'/static/index/i7box/ibox',
+		'__GJ__'=>'/static/index/i7box/gj123',
+		'__JZCT__'=>'/static/index/i7box/jzct',
+		'__CHINA__'=>'/static/index/i7box/chinaadmin',
+    ],
+
+
+
+];

+ 19 - 0
application/index/controller/Activex.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Activex 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Alexa.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Alexa 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Awesome.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Awesome 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 65 - 0
application/index/controller/Base.php

@@ -0,0 +1,65 @@
+<?php
+namespace app\index\controller;
+use think\Controller; 
+class Base extends Controller 
+{
+    public function _initialize(){
+    	$data = db('column')->select();
+        // $tags = db('tags')->select();
+        $good =db('good')->select();
+
+
+        //标签栏一个工具对应多个标签处理-----------------------------------
+        $tags_id = input('id');
+        // 找到所有标签,对其进行格式化处理
+        $tags_data = db('tags')->select();
+        $tags = [];
+        foreach ($tags_data as $value) {
+            $tags[$value['id']] = ['tagname'=>$value['tagname'], 'children'=>[]];
+        }
+
+        // 找到所有商品,判断商品是否在标签内
+        $ta = db('good')->field('id, title, tags_id')->select();
+        foreach ($ta as $val) {
+            $tag_ids = explode(',', $val['tags_id']);
+            
+            if ($tag_ids) {
+                foreach($tag_ids as $tid) {
+                    if($tags[$tid]) {
+                        $tags[$tid]['children'][] = $val;
+                    }
+                }
+            }
+        }
+        //end---------------------------------------------------------
+
+
+
+        $this->assign([
+                'data'=>$data,
+                'tags'=>$tags,
+                'good'=>$good,
+            ]);
+ 		
+    	return view();
+    }
+
+    
+	public function praise(){//点赞		
+        $id = input('id');//获取当前点赞id
+        $res = db('good')->where(array('id'=>$id))->field('likes')->find();
+        if ($res) {  
+            $res1 = db('good')->where('id',$id)->setInc('likes');//setInc:对指定字段进行加操作,setDec:对指定字段进行减操作
+            if($res1){
+                return 1;//点赞成功
+            }else{
+                return 2;//失败
+            }
+        }
+
+    }
+
+
+
+
+}

+ 18 - 0
application/index/controller/Blue.php

@@ -0,0 +1,18 @@
+<?php
+namespace app\index\controller;
+class Blue 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Calputer.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Calputer 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Color.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Color 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Contrast.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Contrast 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Cycle.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Cycle 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Dxzh.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Dxzh 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Fire.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Fire
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Font.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Font 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Ggame.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Ggame
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

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

@@ -0,0 +1,64 @@
+<?php
+namespace app\index\controller;
+use app\index\model\CommonModel;
+use app\index\model\ColumnModel;
+use app\index\controller\Base; 
+class Index extends Base 
+{
+	  
+
+    public function index()//主页
+    {
+    	$cum = new ColumnModel();//导航栏表
+    	$com = new CommonModel();//工具信息表
+
+    	// $cums = $cum->select();
+    	$column_id=input('column_id');
+
+    	//查询当前导航栏表名称
+    	$cid=$cum->find($column_id);
+
+    	//查询当前工具信息表下的信息
+    	$goods=$com->where(array('column_id'=>$column_id))->order('sort desc')->select();
+
+  
+        $this->assign([
+            'goods'=>$goods,
+            'cid'=>$cid,
+
+
+        ]);
+    	
+        return view(); 
+       
+        
+    }
+
+
+    public function title(){
+        $id = input('id');
+        $titles = db('good')->where('id',$id)->select();
+
+        foreach ($titles as $val) {
+            $column_id = $val['column_id'];
+        }
+
+        $cid=db('column')->where('id',$column_id)->select();
+        foreach ($cid as $value) {
+            $catename = $value['catename'];
+        }
+
+        $this->assign([
+            'titles'=>$titles,
+            'catename'=>$catename,
+        ]);
+        return view();
+    }
+
+
+
+
+    
+        
+        
+}

+ 33 - 0
application/index/controller/Indexs.php

@@ -0,0 +1,33 @@
+<?php
+namespace app\index\controller;
+use app\index\controller\Base; 
+class Indexs extends Base 
+{
+    public function index()//所有工具页
+    {
+        
+        $cid=db('good')
+        		->alias('a')           
+                ->field('a.*,b.catename')
+                ->join('column b','a.column_id=b.id')
+                ->order('sort desc')
+				->select();
+        $this->assign([
+            'cid'=>$cid,
+ 
+        ]);
+        return view();
+    }
+
+
+
+
+    
+
+
+
+
+
+
+
+}

+ 19 - 0
application/index/controller/Jsonpost.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Jsonpost 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Jumpgame.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Jumpgame 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Ld.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Ld 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Number.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Number 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Ocr.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Ocr 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 20 - 0
application/index/controller/Openmoji.php

@@ -0,0 +1,20 @@
+<?php
+namespace app\index\controller;
+
+class Openmoji
+{
+	
+
+    public function lst()//主页
+    {
+
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Pdf.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Pdf 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Pdfdoc.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Pdfdoc 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Ping.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Ping 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Ppt.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Ppt 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Qc.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Qc 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Qqtalk.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Qqtalk 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Requpack.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Requpack 
+{
+	
+
+    public function lst()//应用安装包解析
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Scgame.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Scgame
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 19 - 0
application/index/controller/Sw.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\index\controller;
+
+class Sw 
+{
+	
+
+    public function lst()//主页
+    {
+        return view(); 
+       
+        
+    }
+
+
+    
+        
+        
+}

+ 11 - 0
application/index/model/ColumnModel.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace app\index\model;
+
+use think\Model;
+
+class ColumnModel extends Model
+{
+    protected $table = 'bp_column';//导航栏表
+
+}

+ 11 - 0
application/index/model/CommonModel.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace app\index\model;
+
+use think\Model;
+
+class CommonModel extends Model
+{
+    protected $table = 'bp_good';//工具栏表
+
+}

+ 84 - 0
application/index/view/activex/lst.html

@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html><head>
+        <meta charset="utf-8">
+    <title>汉字转拼音</title>
+
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+
+    <!-- activex -->
+     <link href="/static/index/css/cssx.css" rel="stylesheet">
+     <script src="/static/index/js/pinyin.js"></script>   
+    
+</head>
+<body>
+    <!-- 头部 -->
+    
+    <!-- /头部 -->
+    
+    <div class="main-container container-fluid">
+        <div class="page-container">
+            <!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+             
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+               <div class="container">
+<h4><span class="glyphicon glyphicon-list" aria-hidden="true"></span> 输入需要转换的汉字</h4><hr>
+<div class="row">
+  <div class="col-sm-12 col-md-12">
+    <div class="laobuluo_pinyin">
+    <textarea id="content" class="form-control" rows="10">请把你需要查询的内容粘贴在这里。</textarea>
+       <br>
+       <input class="btn btn-default" id="conv" type="button" value="转换成拼音" onclick="trans();"/>
+
+    <br>
+    <textarea id="result" class="form-control" rows="10"></textarea>
+   
+    <hr>
+
+    </div>
+
+  </div> 
+  
+</div>
+
+
+</div>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+        </div>  
+    </div>
+
+        <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body></html>

+ 90 - 0
application/index/view/alexa/lst.html

@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8 />
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+<meta http-equiv="Cache-Control" content="no-transform" />
+<meta http-equiv="Cache-Control" content="no-siteapp" />
+<meta name="csrf-param" content="_csrf" />
+<meta name="csrf-token" content="uM8RjJ6PnY8XlI2ZhL8LqY4IbH4InW6CcI7ZpA0VwV3WqF8AqQ3HvO7BmA4FnB6M==" />
+<title>快速提升Alexa排名</title>
+<meta name="keywords" content="" />
+<meta name="description" content="" />
+<link rel="stylesheet" type="text/css" href="__CHINA__/css/style.css" />
+<link rel="stylesheet" type="text/css" href="__CHINA__/css/style_1.css" />
+<link rel="stylesheet" type="text/css" href="__CHINA__/css/alexa.css" />
+<script src="__CHINA__/js/jquery.js" type="text/javascript"></script>
+<script src="__CHINA__/js/jquery.lazyload.js" type="text/javascript"></script>
+<script src="__CHINA__/js/script.js" type="text/javascript"></script>
+</head>
+<body>
+
+
+
+<div class="main">
+<div class="content clearfix">
+
+<div class="dis">
+<p>提升Alexa排名,用它来增加网站流量,提升帖子、空间、博客的点击率!</p>
+</div>
+<div class="box"></div>
+<div class="tool">
+<ul>
+<li>
+<label>网站网址:</label>
+<input id="url" class="int" type="text" value="http://www.chinaadmin.cn/" placeholder="请输入完整网址 http://http://gongju.chinaadmin.cn/(https://http://gongju.chinaadmin.cn/)" />
+<span id="tips_url"> * </span>
+</li>
+
+<li>
+<label>刷新时间:</label>
+<input id="inputtime" class="int" type="text" value="30" placeholder="30" />
+<span id="tips_inputtime"> * </span>
+</li>
+<li class="last">
+<button id="startBtn" type="button">开始</button>
+<button id="endBtn" type="button" style="display:none;">停止</button>
+</li>
+</ul>
+</div>
+
+<div id="overinfo"></div>
+<div id="aleaxinfo"></div>
+
+
+
+
+<script src="__CHINA__/js/alexa.js" type="text/javascript"></script>
+<script type="text/javascript">
+jQuery(function($) {
+$("#startBtn").click(function() {
+// 初始化参数
+var url = $("#url").val();
+var inputtime = $("#inputtime").val();
+
+if(url == ''){
+jQuery('#tips_url').addClass('red').html(' 网站网址不能为空!');
+return false;
+}
+
+if(inputtime == ''){
+jQuery('#tips_inputtime').addClass('red').html(' 刷新时间不能为空!');
+return false;
+}
+});
+});
+
+// 清空提示
+function clearTips(id){
+jQuery('#tips_'+id).removeClass('red').html(' * ');
+}
+</script>
+
+</div>
+
+</div>
+
+<script src="__CHINA__/js/cm.js" type="text/javascript" async="async" defer="defer"></script>
+<script src="__CHINA__/js/tongji.js" type="text/javascript"></script>
+</body>
+</html>

+ 3 - 0
application/index/view/awesome/lst.html

@@ -0,0 +1,3 @@
+<script type="text/javascript">
+	window.location.href="http://fontawesome.dashgame.com/";
+</script>

+ 61 - 0
application/index/view/base/footer.html

@@ -0,0 +1,61 @@
+<footer class="footer">
+<div class="footer-main">
+<div class="container">
+<div class="row items">
+<div class="col-12 item">
+<div class="footer-item">
+<h4 class="footer-item-title">友情链接</h4>
+<nav class="footer-nav">
+
+<ul class="footer-mnu">
+	<li class="col-md-auto col-12 item">
+		<a href="http://www.dashgame.com" class="hover-link" data-title="赞助商" target="_blank"><span>极风游科技</span></a>
+	</li> 
+
+</ul>
+
+</nav>
+</div>
+</div>
+<div class="col-12 item">
+<div class="footer-item">
+<h4 class="footer-item-title">欢迎</h4>
+<div class="footer-contacts">你来自:,
+访问IP:125.84.60.87 </div>
+<div class="footer-contacts">当前天气为:,
+温度:℃, 风向:,
+更新时间: </div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer-bottom">
+<div class="container">
+<div class="row justify-content-between items">
+<div class="col-md-auto col-12 item">
+<nav class="footer-links">
+<ul>
+<li>
+<script type="text/javascript" src="__IBOXS__/js/index.js"></script>
+<script type="text/javascript">
+    function xsjhitokoto() {
+        document.write("");
+    }
+
+</script>
+<script>xsjhitokoto()</script>
+</li>
+</ul>
+</nav>
+</div>
+<div class="col-md-auto col-12 item">
+<div class="copyright"> Copyright © 2019 <span style="color:#666;">Powered by Mosheng</span>
+<br><a href="http://www.miitbeian.gov.cn" title="备案" target="_blank">渝ICP备14004903号</a>
+</div>
+</div>
+<span style="display: none"></span>
+</div>
+</div>
+</div>
+</footer>

+ 337 - 0
application/index/view/base/header.html

@@ -0,0 +1,337 @@
+<!DOCTYPE html> 
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
+<title>爱奇工具箱-实用、有趣的工具合集,方便协助工作和生活</title>
+<meta name="description" content="实用、有趣的工具合集,方便协助工作和生活" />
+<meta name="keywords" content="爱奇工具" />
+<link rel="icon" href="__IBOXS__/picture/favicon.png" type="image/x-icon">
+<link rel="stylesheet" type="text/css" href="__IBOXS__/css/bootstrap.min.css">
+<link rel="stylesheet" type="text/css" href="__IBOXS__/css/font-awesome.min.css">
+<link rel="stylesheet" type="text/css" href="__IBOXS__/css/style.min.css">
+<script type="text/javascript" src="__IBOXS__/js/jquery.min.js"></script>
+<script type="text/javascript" src="__IBOXS__/js/clipboard.min.js"></script>
+<script type="text/javascript" src="__IBOXS__/js/bootstrap.min.js"></script>
+
+<script type="text/javascript" src="__IBOXS__/js/main.js"></script>
+<script type="text/javascript" src="__IBOXS__/js/script.min.js"></script>
+<script type="text/javascript" src="__IBOXS__/js/custom.js"></script>
+
+<!-- layui -->
+<link rel="stylesheet" href="/static/admin/layui2.5.6/layui.css" media="all"> 
+<script src="/static/admin/layui2.5.6/layui.js"></script>
+
+
+<script>
+        var _hmt = _hmt || [];
+        (function () {
+            var hm = document.createElement("script");
+            hm.src = "https://hm.baidu.com/hm.js?e4f8b8f43d92548ada77b92c1a1c57ee";
+            var s = document.getElementsByTagName("script")[0];
+            s.parentNode.insertBefore(hm, s);
+        })();
+
+        var scrolltotop={
+            setting:{
+                startline:100,
+                scrollto:0,
+                scrollduration:400,
+                fadeduration:[500,100]
+            },
+            controlHTML:'<i class="fa fa-chevron-up" aria-hidden="true"></i>',
+            controlattrs:{offsetx:40,offsety:50},
+            anchorkeyword:"#top",
+            state:{
+                isvisible:false,
+                shouldvisible:false
+            },scrollup:function(){
+                if(!this.cssfixedsupport){
+                    this.$control.css({opacity:0});
+                }
+                var dest=isNaN(this.setting.scrollto)?this.setting.scrollto:parseInt(this.setting.scrollto);
+                if(typeof dest=="string"&&jQuery("#"+dest).length==1){
+                    dest=jQuery("#"+dest).offset().top;
+                }else{
+                    dest=0;
+                }
+                this.$body.animate({scrollTop:dest},this.setting.scrollduration);
+            },keepfixed:function(){
+                var $window=jQuery(window);
+                var controlx=$window.scrollLeft()+$window.width()-this.$control.width()-this.controlattrs.offsetx;
+                var controly=$window.scrollTop()+$window.height()-this.$control.height()-this.controlattrs.offsety;
+                this.$control.css({left:controlx+"px",top:controly+"px"});
+            },togglecontrol:function(){
+                var scrolltop=jQuery(window).scrollTop();
+                if(!this.cssfixedsupport){
+                    this.keepfixed();
+                }
+                this.state.shouldvisible=(scrolltop>=this.setting.startline)?true:false;
+                if(this.state.shouldvisible&&!this.state.isvisible){
+                    this.$control.stop().animate({opacity:1},this.setting.fadeduration[0]);
+                    this.state.isvisible=true;
+                }else{
+                    if(this.state.shouldvisible==false&&this.state.isvisible){
+                        this.$control.stop().animate({opacity:0},this.setting.fadeduration[1]);
+                        this.state.isvisible=false;
+                    }
+                }
+            },init:function(){
+                jQuery(document).ready(function($){
+                    var mainobj=scrolltotop;
+                    var iebrws=document.all;
+                    mainobj.cssfixedsupport=!iebrws||iebrws&&document.compatMode=="CSS1Compat"&&window.XMLHttpRequest;
+                    mainobj.$body=(window.opera)?(document.compatMode=="CSS1Compat"?$("html"):$("body")):$("html,body");
+                    mainobj.$control=$('<div class="runtop">'+mainobj.controlHTML+"</div>").css({position:mainobj.cssfixedsupport?"fixed":"absolute",bottom:mainobj.controlattrs.offsety,right:mainobj.controlattrs.offsetx,opacity:0,cursor:"pointer"}).attr({title:"返回顶部"}).click(function(){mainobj.scrollup();return false;}).appendTo("body");if(document.all&&!window.XMLHttpRequest&&mainobj.$control.text()!=""){mainobj.$control.css({width:mainobj.$control.width()});}mainobj.togglecontrol();
+                    $('a[href="'+mainobj.anchorkeyword+'"]').click(function(){mainobj.scrollup();return false;});
+                    $(window).bind("scroll resize",function(e){mainobj.togglecontrol();});
+                });
+            }
+        };
+        scrolltotop.init();
+    </script>
+<!-- <script async src="__IBOXS__/js/adsbygoogle.js"></script> -->
+<script>
+        (adsbygoogle = window.adsbygoogle || []).push({
+            google_ad_client: "ca-pub-1101808529197281",
+            enable_page_level_ads: true
+        });
+    </script>
+<style type="text/css">
+        /*正文样式*/
+        body {
+            font-family: "HanHei SC", "PingHei", "PingFang SC", "微软雅黑", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+            font-size: 13px;
+            line-height: 1.846;
+            color: #666666;
+        }
+
+        /*主体头部空*/
+        .clearfix {
+            margin-top: 40px;
+        }
+
+        /*返回内容设为隐藏*/
+        .form-controls {
+            display: none;
+        }
+
+        #form1 {
+            text-align: center;
+            display: none;
+        }
+
+        .Explain {
+            padding-top: 10px;
+        }
+
+        /*首行缩进2个字符*/
+        .Explain dd {
+            text-indent: 2em;
+        }
+
+        /*主体底部边距*/
+        .clearfix {
+            min-height: 550px;
+        }
+
+        /*表格文字缩小*/
+        .position {
+            font-size: xx-small;
+        }
+
+        /*表格文字自动换行*/
+        .table-bordered {
+            word-break: break-all;
+            word-wrap: break-all;
+        }
+
+        .tooltip {
+            font-size: 12px;
+            position: absolute;
+            padding: 5px;
+            z-index: 100000;
+            opacity: .8;
+            font-family: Microsoft Yahei
+        }
+
+        .tipsy-arrow {
+            position: absolute;
+            width: 0;
+            height: 0;
+            line-height: 0;
+            border: 6px dashed #000;
+            top: 0;
+            left: 20%;
+            margin-left: -5px;
+            border-bottom-style: solid;
+            border-top: 0;
+            border-left-color: transparent;
+            border-right-color: transparent
+        }
+
+        .tipsy-arrow-n {
+            border-bottom-color: #6F8EC5
+        }
+
+        .tipsy-inner {
+            background-color: #6F8EC5;
+            color: #FFF;
+            max-width: 200px;
+            padding: 5px 8px 4px 8px;
+            text-align: center;
+            border-radius: 3px
+        }
+
+        @media screen and (min-width: 760px) {
+            .header_nav {
+                display: none;
+            }
+        }
+
+        #f_list {
+            position: fixed;
+            right: 30px;
+            bottom: 60px;
+            transition: bottom ease .3s;
+            z-index: 9;
+            font-size: 18px;
+            text-align: center;
+            line-height: 36px
+        }
+
+        #f_list a.btn {
+            width: 36px;
+            height: 36px;
+            display: block;
+            text-decoration: none;
+            color: #999;
+            border-radius: 5px
+        }
+
+        @media screen and (max-width: 720px) {
+            #f_list {
+                right: 0px;
+            }
+        }
+
+        .centent {
+            min-height: 500px;
+        }
+
+        /*logo居中*/
+        @media screen and (min-width: 768px) {
+            .navbar-header {
+                position: absolute;
+                top: 50%;
+                transform: translateY(-50%);
+            }
+        }
+
+        .search {
+            padding-left: 5px;
+        }
+
+        .btn, .btn:hover {
+            transition: all 0.5s linear;
+        }
+    </style>
+</head>
+<body>
+<main class="main">
+<div class="main-inner">
+<!--[if lt IE 9]>
+        <div class="notice chromeframe">您的浏览器版本<strong>太旧了</strong>,为了正常地访问网站,请升级您的浏览器 <a target="_blank"
+                                                                                          href="http://browsehappy.com">立即升级</a>
+        </div>
+        <![endif]-->
+
+<header class="header">
+
+<nav class="header-fixed">
+<div class="container">
+<div class="row flex-nowrap align-items-center justify-content-between">
+<div class="col-auto d-block d-lg-none header-fixed-col">
+<div class="main-mnu-btn">
+<span class="bar bar-1"></span>
+<span class="bar bar-2"></span>
+<span class="bar bar-3"></span>
+<span class="bar bar-4"></span>
+</div>
+</div>
+<div class="col-auto header-fixed-col">
+
+<a href="{:url('Indexs/index')}" class="logo logo-ico-widht-text" title="PathSoft">
+<img class="lazy logo-ico" data-src="__IBOXS__/picture/favicon.png" width="36" height="35" src="__IBOXS__/picture/favicon.png" alt="">
+<span class="logo-text">爱奇工具箱</span>
+</a>
+</div>
+</div>
+</div>
+</nav>
+</header>
+<link rel="stylesheet" type="text/css" href="__IBOXS__/css/templates.css">
+<link rel="stylesheet" type="text/css" href="__IBOXS__/css/bootstrap-select.min.css">
+<script src="__IBOXS__/js/bootstrap-select.min.js"></script>
+<style type="text/css">
+            .breadcrumb {
+                padding: 8px 15px 13px 15px;
+                line-height: 36px;
+            }
+
+            .breadcrumb > li {
+                margin-top: 6px;
+            }
+
+            .breadcrumb > .active {
+                color: #2c7ae7;
+                font-weight: bold;
+            }
+
+            .tools_list {
+                min-height: 500px;
+            }
+
+            .servises-item-desc a {
+                text-decoration: none;
+            }
+ 
+            .servises-item:hover .servises-item-desc a {
+                color: white;
+            }
+        </style>
+<div class="container centent" style="padding-bottom:20px;">
+<div class="row">
+
+{volist name="tags" id="vo"}
+<ol class="breadcrumb col-sm-12 " >
+    {if condition="$vo['tagname'] eq '热门' "}
+        <img src="/static/admin/images/fire.png" style="width: 20px;height: 20px;"><li style="color: #EF5350;">{$vo.tagname}</li>
+    {elseif condition="$vo['tagname'] eq '推荐' "/}
+        <img src="/static/admin/images/zan.png" style="width: 20px;height: 20px;"><li style="color: #4FC3F7;">{$vo.tagname}</li>
+    {elseif condition="$vo['tagname'] eq 'PDF' "/}   
+        <img src="/static/admin/images/pdf.png" style="width: 20px;height: 20px;"><li style="color: #FF5722;">{$vo.tagname}</li>
+    {elseif condition="$vo['tagname'] eq '开发' "/}
+        <img src="/static/admin/images/jt.png" style="width: 20px;height: 20px;"><li style="color: #EC407A;">{$vo.tagname}</li>
+    {/if}
+
+    {volist name="vo['children']" id="v"}
+           &nbsp;&nbsp;<li><a href="{:url('Index/title',['id'=>$v.id])}">{$v.title}</a></li>
+    {/volist}
+
+</ol>
+{/volist}
+
+
+<ol class="breadcrumb col-sm-12 col-auto item nav-list" id="choose-tool">
+<li><a href="{:url('Indexs/index')}"><span style="cursor: pointer;">所有工具</span></a></li>
+
+{volist name="data" id="vo"}
+    <li><a href="{:url('Index/index',['column_id'=>$vo.id])}"><span style="cursor: pointer;">{$vo.catename}</span></a></li>   
+{/volist}
+
+</ol>
+
+</div>
+</body>
+</html>

+ 234 - 0
application/index/view/blue/lst.html

@@ -0,0 +1,234 @@
+<!DOCTYPE html>
+<html lang="en" >
+<head>
+<meta charset="UTF-8">
+<title>CSS3蓝色粒子线条动画特效 - 站长素材</title>
+
+<link rel="stylesheet" href="__BOX__/css/blue.css">
+
+</head>
+<body>
+
+  <div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+<div class='💀'>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+  <div class='🌀'></div>
+</div>
+
+</body>
+</html>

+ 89 - 0
application/index/view/calputer/lst.html

@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html><head>
+	    <meta charset="utf-8">
+    <title>白色简洁计算器</title>
+
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+
+    <!-- calputer -->
+    <link rel="stylesheet" type="text/css" href="/static/index/css/css.css">
+	<script type="text/javascript" src="/static/index/js/scripts.js"></script>
+    
+</head>
+<body>
+	<!-- 头部 -->
+    
+	<!-- /头部 -->
+	
+	<div class="main-container container-fluid">
+		<div class="page-container">
+			<!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+				<div id="calcuator">
+	<input type="text" id="input-box" value="0" size="21" maxlength="21" readonly="readonly" />
+	<div id="btn-list">
+		<div onclick="operator('clear')" class=" btn-30 btn-radius color-red clear-marginleft">C</div>
+		<div onclick="operator('opposite')" class=" btn-30 btn-radius color-blue">+/-</div>
+		<div onclick="operator('percent')" class=" btn-30 btn-radius color-blue">%</div>
+		<div onclick="operator('backspace')" class=" btn-70 btn-radius color-red font-14">←</div>
+		<div onclick="typetoinput('7')" class=" btn-30 btn-radius clear-marginleft">7</div>
+		<div onclick="typetoinput('8')" class=" btn-30 btn-radius">8</div>
+		<div onclick="typetoinput('9')" class=" btn-30 btn-radius">9</div>
+		<div onclick="operator('plus')" class=" btn-30 btn-radius color-blue font-14">+</div>
+		<div onclick="operator('minus')" class=" btn-30 btn-radius color-blue font-14">-</div>
+		<div onclick="typetoinput('4')" class=" btn-30 btn-radius clear-marginleft">4</div>
+		<div onclick="typetoinput('5')" class=" btn-30 btn-radius">5</div>
+		<div onclick="typetoinput('6')" class=" btn-30 btn-radius">6</div>
+		<div onclick="operator('multiply')" class=" btn-30 btn-radius color-blue font-14">×</div>
+		<div onclick="operator('divide')" class=" btn-30 btn-radius color-blue font-12">÷</div>
+		<div onclick="typetoinput('1')" class=" btn-30 btn-radius clear-marginleft">1</div>
+		<div onclick="typetoinput('2')" class=" btn-30 btn-radius">2</div>
+		<div onclick="typetoinput('3')" class=" btn-30 btn-radius">3</div>
+		<div onclick="operator('pow')" class=" btn-30 btn-radius color-blue font-14">ײ</div>
+		<div onclick="operator('sqrt')" class=" btn-30 btn-radius color-blue font-12">√</div>
+		<div onclick="typetoinput('0')" class=" btn-70 btn-radius clear-marginleft">0</div>
+		<div onclick="typetoinput('.')" class=" btn-30 btn-radius">.</div>
+		<div onclick="operator('result')" class=" btn-70 btn-radius color-red font-14">=</div>
+	</div>
+</div>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+		</div>	
+	</div>
+
+	    <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body></html>

+ 1139 - 0
application/index/view/color/lst.html

@@ -0,0 +1,1139 @@
+<!DOCTYPE html>
+<html><head>
+	    <meta charset="utf-8">
+    <title>颜色代码选取器</title>
+
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+    
+
+    <!-- color -->
+    <style>
+html {
+  box-sizing: border-box;
+  height: 100%;
+}
+
+*,
+*:before,
+*:after {
+  box-sizing: inherit;
+}
+@media (prefers-reduced-motion: reduce) {
+  *,
+  *:before,
+  *:after {
+    -webkit-animation-duration: 0ms !important;
+            animation-duration: 0ms !important;
+    transition-duration: 0ms !important;
+  }
+}
+
+body {
+  height: 100%;
+}
+
+img {
+  max-width: 100%;
+  height: auto;
+}
+
+html {
+  background-color: #b0bec5;
+  font-family: "Roboto", sans-serif;
+  font-weight: 500;
+}
+
+.container {
+  padding: 1em;
+}
+
+.material-color-picker {
+  display: flex;
+  width: 32em;
+  margin: 0 auto;
+  background-color: white;
+  border: 1px solid #78909c;
+  border-radius: 0.5em;
+  box-shadow: 0 1em 8em rgba(0, 0, 0, 0.35);
+}
+.material-color-picker__left-panel {
+  z-index: 1;
+}
+.material-color-picker__right-panel {
+  position: relative;
+  flex-grow: 1;
+  overflow: hidden;
+}
+
+.color-selector {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: flex;
+  flex-direction: column;
+  padding: 1em 0;
+  border-right: 0.25em solid #E0E0E0;
+}
+.color-selector input[type='radio'] {
+  display: none;
+}
+.color-selector label {
+  position: relative;
+  display: inline-block;
+  padding: 0.5em 1.5em;
+  cursor: pointer;
+}
+.color-selector label:before {
+  content: '';
+  display: inline-block;
+  vertical-align: middle;
+  padding: 0.75em;
+  background-color: currentColor;
+  border-radius: 50%;
+}
+.color-selector label:after {
+  content: '';
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  padding: 0.5em;
+  border: 0.25em solid;
+  border-radius: 50%;
+  transition: padding 250ms;
+}
+.color-selector input[type='radio']:checked + label:after {
+  padding: 1em;
+}
+
+.color-palette-wrapper {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  -webkit-transform: translateX(-100%);
+          transform: translateX(-100%);
+  display: flex;
+  flex-direction: column;
+  padding: 1.5em;
+}
+.color-palette-wrapper.js-active {
+  -webkit-transform: translateX(0);
+          transform: translateX(0);
+}
+
+.color-palette-header {
+  display: flex;
+  justify-content: space-between;
+  margin: 0;
+  margin-bottom: 1em;
+  font-weight: 400;
+  color: #757575;
+}
+
+.color-palette {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: flex;
+  flex-direction: column;
+  flex-grow: 1;
+}
+.color-palette__item {
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  flex-grow: 1;
+  margin: 0.25em 0;
+  padding: 0 1em;
+  border-radius: 0.25em;
+  font-family: "Roboto Mono", monospace;
+  transition: -webkit-transform 250ms;
+  transition: transform 250ms;
+  transition: transform 250ms, -webkit-transform 250ms;
+  cursor: pointer;
+}
+.color-palette__item:hover {
+  -webkit-transform: scale(1.05);
+          transform: scale(1.05);
+}
+
+.copied-indicator {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, 0);
+          transform: translate(-50%, 0);
+  opacity: 0;
+  transition: all 250ms;
+}
+.copied-indicator.js-copied {
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  opacity: 0.75;
+}
+</style>
+</head>
+<body>
+	<!-- 头部 -->
+    
+	<!-- /头部 -->
+	
+	<div class="main-container container-fluid">
+		<div class="page-container">
+			<!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+				
+<script src="/static/index/js/knockout-min.js"></script>
+<script src="/static/index/js/clipboard.min.js"></script>
+
+<div class="container">
+    <div class="material-color-picker">
+        <div class="material-color-picker__left-panel">
+            <ol class="color-selector" data-bind="foreach: materialColors">
+                <li>
+                    <input name="material-color" type="radio" data-bind="attr: { id: 'materialColor' + $index() }, checked: selectedColor, value: color" >
+                    <label data-bind="attr: { for: 'materialColor' + $index(), title: color }, style: { 'color': $data.variations[4].hex }"></label>
+                </li>
+            </ol>
+        </div>
+        <div class="material-color-picker__right-panel" data-bind="foreach: materialColors">
+            <div class="color-palette-wrapper" data-bind="css: { 'js-active': selectedColor() === color }">
+                <h2 class="color-palette-header" data-bind="text: color"></h2>
+                <ol class="color-palette" data-bind="foreach: variations">
+                    <li id="clipboardItem" class="color-palette__item" data-bind="attr: { 'data-clipboard-text': hex }, style: { 'background-color': hex }">
+                        <span data-bind="text: weight"></span>
+                        <span data-bind="text: hex"></span>
+                        <span class="copied-indicator" data-bind="css: { 'js-copied': copiedHex() === hex }">Color copied!</span>
+                    </li>
+                </ol>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+var copiedHex = ko.observable();
+var clipboard = new Clipboard('#clipboardItem');
+
+clipboard.on('success', function(el) {
+    console.clear();
+    console.info('Action:', el.action);
+    console.info('Text:', el.text);
+    console.info('Trigger:', el.trigger);
+    el.clearSelection();
+    
+    copiedHex(el.text);
+});
+
+///
+
+var selectedColor = ko.observable("Red"); // lazy
+
+ko.applyBindings({
+    materialColors: [
+        {
+            color: "Red",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#FFEBEE"
+                },
+                {
+                    weight: 100,
+                    hex: "#FFCDD2"
+                },
+                {
+                    weight: 200,
+                    hex: "#EF9A9A"
+                },
+                {
+                    weight: 300,
+                    hex: "#E57373"
+                },
+                {
+                    weight: 400,
+                    hex: "#EF5350"
+                },
+                {
+                    weight: 500,
+                    hex: "#F44336"
+                },
+                {
+                    weight: 600,
+                    hex: "#E53935"
+                },
+                {
+                    weight: 700,
+                    hex: "#D32F2F"
+                },
+                {
+                    weight: 800,
+                    hex: "#C62828"
+                },
+                {
+                    weight: 900,
+                    hex: "#B71C1C"
+                }
+            ]
+        },
+        {
+            color: "Pink",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#FCE4EC"
+                },
+                {
+                    weight: 100,
+                    hex: "#F8BBD0"
+                },
+                {
+                    weight: 200,
+                    hex: "#F48FB1"
+                },
+                {
+                    weight: 300,
+                    hex: "#F06292"
+                },
+                {
+                    weight: 400,
+                    hex: "#EC407A"
+                },
+                {
+                    weight: 500,
+                    hex: "#E91E63"
+                },
+                {
+                    weight: 600,
+                    hex: "#D81B60"
+                },
+                {
+                    weight: 700,
+                    hex: "#C2185B"
+                },
+                {
+                    weight: 800,
+                    hex: "#AD1457"
+                },
+                {
+                    weight: 900,
+                    hex: "#880E4F"
+                }
+            ]
+        },
+        {
+            color: "Purple",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#F3E5F5"
+                },
+                {
+                    weight: 100,
+                    hex: "#E1BEE7"
+                },
+                {
+                    weight: 200,
+                    hex: "#CE93D8"
+                },
+                {
+                    weight: 300,
+                    hex: "#BA68C8"
+                },
+                {
+                    weight: 400,
+                    hex: "#AB47BC"
+                },
+                {
+                    weight: 500,
+                    hex: "#9C27B0"
+                },
+                {
+                    weight: 600,
+                    hex: "#8E24AA"
+                },
+                {
+                    weight: 700,
+                    hex: "#7B1FA2"
+                },
+                {
+                    weight: 800,
+                    hex: "#6A1B9A"
+                },
+                {
+                    weight: 900,
+                    hex: "#4A148C"
+                }
+            ]
+        },
+        {
+            color: "Deep Purple",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#EDE7F6"
+                },
+                {
+                    weight: 100,
+                    hex: "#D1C4E9"
+                },
+                {
+                    weight: 200,
+                    hex: "#B39DDB"
+                },
+                {
+                    weight: 300,
+                    hex: "#9575CD"
+                },
+                {
+                    weight: 400,
+                    hex: "#7E57C2"
+                },
+                {
+                    weight: 500,
+                    hex: "#673AB7"
+                },
+                {
+                    weight: 600,
+                    hex: "#5E35B1"
+                },
+                {
+                    weight: 700,
+                    hex: "#512DA8"
+                },
+                {
+                    weight: 800,
+                    hex: "#4527A0"
+                },
+                {
+                    weight: 900,
+                    hex: "#311B92"
+                }
+            ]
+        },
+        {
+            color: "Indigo",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#E8EAF6"
+                },
+                {
+                    weight: 100,
+                    hex: "#C5CAE9"
+                },
+                {
+                    weight: 200,
+                    hex: "#9FA8DA"
+                },
+                {
+                    weight: 300,
+                    hex: "#7986CB"
+                },
+                {
+                    weight: 400,
+                    hex: "#5C6BC0"
+                },
+                {
+                    weight: 500,
+                    hex: "#3F51B5"
+                },
+                {
+                    weight: 600,
+                    hex: "#3949AB"
+                },
+                {
+                    weight: 700,
+                    hex: "#303F9F"
+                },
+                {
+                    weight: 800,
+                    hex: "#283593"
+                },
+                {
+                    weight: 900,
+                    hex: "#1A237E"
+                }
+            ]
+        },
+        {
+            color: "Blue",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#E3F2FD"
+                },
+                {
+                    weight: 100,
+                    hex: "#BBDEFB"
+                },
+                {
+                    weight: 200,
+                    hex: "#90CAF9"
+                },
+                {
+                    weight: 300,
+                    hex: "#64B5F6"
+                },
+                {
+                    weight: 400,
+                    hex: "#42A5F5"
+                },
+                {
+                    weight: 500,
+                    hex: "#2196F3"
+                },
+                {
+                    weight: 600,
+                    hex: "#1E88E5"
+                },
+                {
+                    weight: 700,
+                    hex: "#1976D2"
+                },
+                {
+                    weight: 800,
+                    hex: "#1565C0"
+                },
+                {
+                    weight: 900,
+                    hex: "#0D47A1"
+                }
+            ]
+        },
+        {
+            color: "Light Blue",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#E1F5FE"
+                },
+                {
+                    weight: 100,
+                    hex: "#B3E5FC"
+                },
+                {
+                    weight: 200,
+                    hex: "#81D4FA"
+                },
+                {
+                    weight: 300,
+                    hex: "#4FC3F7"
+                },
+                {
+                    weight: 400,
+                    hex: "#29B6F6"
+                },
+                {
+                    weight: 500,
+                    hex: "#03A9F4"
+                },
+                {
+                    weight: 600,
+                    hex: "#039BE5"
+                },
+                {
+                    weight: 700,
+                    hex: "#0288D1"
+                },
+                {
+                    weight: 800,
+                    hex: "#0277BD"
+                },
+                {
+                    weight: 900,
+                    hex: "#01579B"
+                }
+            ]
+        },
+        {
+            color: "Cyan",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#E0F7FA"
+                },
+                {
+                    weight: 100,
+                    hex: "#B2EBF2"
+                },
+                {
+                    weight: 200,
+                    hex: "#80DEEA"
+                },
+                {
+                    weight: 300,
+                    hex: "#4DD0E1"
+                },
+                {
+                    weight: 400,
+                    hex: "#26C6DA"
+                },
+                {
+                    weight: 500,
+                    hex: "#00BCD4"
+                },
+                {
+                    weight: 600,
+                    hex: "#00ACC1"
+                },
+                {
+                    weight: 700,
+                    hex: "#0097A7"
+                },
+                {
+                    weight: 800,
+                    hex: "#00838F"
+                },
+                {
+                    weight: 900,
+                    hex: "#006064"
+                }
+            ]
+        },
+        {
+            color: "Teal",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#E0F2F1"
+                },
+                {
+                    weight: 100,
+                    hex: "#B2DFDB"
+                },
+                {
+                    weight: 200,
+                    hex: "#80CBC4"
+                },
+                {
+                    weight: 300,
+                    hex: "#4DB6AC"
+                },
+                {
+                    weight: 400,
+                    hex: "#26A69A"
+                },
+                {
+                    weight: 500,
+                    hex: "#009688"
+                },
+                {
+                    weight: 600,
+                    hex: "#00897B"
+                },
+                {
+                    weight: 700,
+                    hex: "#00796B"
+                },
+                {
+                    weight: 800,
+                    hex: "#00695C"
+                },
+                {
+                    weight: 900,
+                    hex: "#004D40"
+                }
+            ]
+        },
+        {
+            color: "Green",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#E8F5E9"
+                },
+                {
+                    weight: 100,
+                    hex: "#C8E6C9"
+                },
+                {
+                    weight: 200,
+                    hex: "#A5D6A7"
+                },
+                {
+                    weight: 300,
+                    hex: "#81C784"
+                },
+                {
+                    weight: 400,
+                    hex: "#66BB6A"
+                },
+                {
+                    weight: 500,
+                    hex: "#4CAF50"
+                },
+                {
+                    weight: 600,
+                    hex: "#43A047"
+                },
+                {
+                    weight: 700,
+                    hex: "#388E3C"
+                },
+                {
+                    weight: 800,
+                    hex: "#2E7D32"
+                },
+                {
+                    weight: 900,
+                    hex: "#1B5E20"
+                }
+            ]
+        },
+        {
+            color: "Light Green",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#F1F8E9"
+                },
+                {
+                    weight: 100,
+                    hex: "#DCEDC8"
+                },
+                {
+                    weight: 200,
+                    hex: "#C5E1A5"
+                },
+                {
+                    weight: 300,
+                    hex: "#AED581"
+                },
+                {
+                    weight: 400,
+                    hex: "#9CCC65"
+                },
+                {
+                    weight: 500,
+                    hex: "#8BC34A"
+                },
+                {
+                    weight: 600,
+                    hex: "#7CB342"
+                },
+                {
+                    weight: 700,
+                    hex: "#689F38"
+                },
+                {
+                    weight: 800,
+                    hex: "#558B2F"
+                },
+                {
+                    weight: 900,
+                    hex: "#33691E"
+                }
+            ]
+        },
+        {
+            color: "Lime",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#F9FBE7"
+                },
+                {
+                    weight: 100,
+                    hex: "#F0F4C3"
+                },
+                {
+                    weight: 200,
+                    hex: "#E6EE9C"
+                },
+                {
+                    weight: 300,
+                    hex: "#DCE775"
+                },
+                {
+                    weight: 400,
+                    hex: "#D4E157"
+                },
+                {
+                    weight: 500,
+                    hex: "#CDDC39"
+                },
+                {
+                    weight: 600,
+                    hex: "#C0CA33"
+                },
+                {
+                    weight: 700,
+                    hex: "#AFB42B"
+                },
+                {
+                    weight: 800,
+                    hex: "#9E9D24"
+                },
+                {
+                    weight: 900,
+                    hex: "#827717"
+                }
+            ]
+        },
+        {
+            color: "Yellow",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#FFFDE7"
+                },
+                {
+                    weight: 100,
+                    hex: "#FFF9C4"
+                },
+                {
+                    weight: 200,
+                    hex: "#FFF59D"
+                },
+                {
+                    weight: 300,
+                    hex: "#FFF176"
+                },
+                {
+                    weight: 400,
+                    hex: "#FFEE58"
+                },
+                {
+                    weight: 500,
+                    hex: "#FFEB3B"
+                },
+                {
+                    weight: 600,
+                    hex: "#FDD835"
+                },
+                {
+                    weight: 700,
+                    hex: "#FBC02D"
+                },
+                {
+                    weight: 800,
+                    hex: "#F9A825"
+                },
+                {
+                    weight: 900,
+                    hex: "#F57F17"
+                }
+            ]
+        },
+        {
+            color: "Amber",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#FFF8E1"
+                },
+                {
+                    weight: 100,
+                    hex: "#FFECB3"
+                },
+                {
+                    weight: 200,
+                    hex: "#FFE082"
+                },
+                {
+                    weight: 300,
+                    hex: "#FFD54F"
+                },
+                {
+                    weight: 400,
+                    hex: "#FFCA28"
+                },
+                {
+                    weight: 500,
+                    hex: "#FFC107"
+                },
+                {
+                    weight: 600,
+                    hex: "#FFB300"
+                },
+                {
+                    weight: 700,
+                    hex: "#FFA000"
+                },
+                {
+                    weight: 800,
+                    hex: "#FF8F00"
+                },
+                {
+                    weight: 900,
+                    hex: "#FF6F00"
+                }
+            ]
+        },
+        {
+            color: "Orange",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#FFF3E0"
+                },
+                {
+                    weight: 100,
+                    hex: "#FFE0B2"
+                },
+                {
+                    weight: 200,
+                    hex: "#FFCC80"
+                },
+                {
+                    weight: 300,
+                    hex: "#FFB74D"
+                },
+                {
+                    weight: 400,
+                    hex: "#FFA726"
+                },
+                {
+                    weight: 500,
+                    hex: "#FF9800"
+                },
+                {
+                    weight: 600,
+                    hex: "#FB8C00"
+                },
+                {
+                    weight: 700,
+                    hex: "#F57C00"
+                },
+                {
+                    weight: 800,
+                    hex: "#EF6C00"
+                },
+                {
+                    weight: 900,
+                    hex: "#E65100"
+                }
+            ]
+        },
+        {
+            color: "Deep Orange",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#FBE9E7"
+                },
+                {
+                    weight: 100,
+                    hex: "#FFCCBC"
+                },
+                {
+                    weight: 200,
+                    hex: "#FFAB91"
+                },
+                {
+                    weight: 300,
+                    hex: "#FF8A65"
+                },
+                {
+                    weight: 400,
+                    hex: "#FF7043"
+                },
+                {
+                    weight: 500,
+                    hex: "#FF5722"
+                },
+                {
+                    weight: 600,
+                    hex: "#F4511E"
+                },
+                {
+                    weight: 700,
+                    hex: "#E64A19"
+                },
+                {
+                    weight: 800,
+                    hex: "#D84315"
+                },
+                {
+                    weight: 900,
+                    hex: "#BF360C"
+                }
+            ]
+        },
+        {
+            color: "Brown",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#EFEBE9"
+                },
+                {
+                    weight: 100,
+                    hex: "#D7CCC8"
+                },
+                {
+                    weight: 200,
+                    hex: "#BCAAA4"
+                },
+                {
+                    weight: 300,
+                    hex: "#A1887F"
+                },
+                {
+                    weight: 400,
+                    hex: "#8D6E63"
+                },
+                {
+                    weight: 500,
+                    hex: "#795548"
+                },
+                {
+                    weight: 600,
+                    hex: "#6D4C41"
+                },
+                {
+                    weight: 700,
+                    hex: "#5D4037"
+                },
+                {
+                    weight: 800,
+                    hex: "#4E342E"
+                },
+                {
+                    weight: 900,
+                    hex: "#3E2723"
+                }
+            ]
+        },
+        {
+            color: "Grey",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#FAFAFA"
+                },
+                {
+                    weight: 100,
+                    hex: "#F5F5F5"
+                },
+                {
+                    weight: 200,
+                    hex: "#EEEEEE"
+                },
+                {
+                    weight: 300,
+                    hex: "#E0E0E0"
+                },
+                {
+                    weight: 400,
+                    hex: "#BDBDBD"
+                },
+                {
+                    weight: 500,
+                    hex: "#9E9E9E"
+                },
+                {
+                    weight: 600,
+                    hex: "#757575"
+                },
+                {
+                    weight: 700,
+                    hex: "#616161"
+                },
+                {
+                    weight: 800,
+                    hex: "#424242"
+                },
+                {
+                    weight: 900,
+                    hex: "#212121"
+                }
+            ]
+        },
+        {
+            color: "Blue Grey",
+            variations: [
+                {
+                    weight: 50,
+                    hex: "#ECEFF1"
+                },
+                {
+                    weight: 100,
+                    hex: "#CFD8DC"
+                },
+                {
+                    weight: 200,
+                    hex: "#B0BEC5"
+                },
+                {
+                    weight: 300,
+                    hex: "#90A4AE"
+                },
+                {
+                    weight: 400,
+                    hex: "#78909C"
+                },
+                {
+                    weight: 500,
+                    hex: "#607D8B"
+                },
+                {
+                    weight: 600,
+                    hex: "#546E7A"
+                },
+                {
+                    weight: 700,
+                    hex: "#455A64"
+                },
+                {
+                    weight: 800,
+                    hex: "#37474F"
+                },
+                {
+                    weight: 900,
+                    hex: "#263238"
+                }
+            ]
+        }
+    ]
+});
+</script>
+<div style="text-align:center;">
+
+</div>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+		</div>	
+	</div>
+
+	    <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body></html>

+ 375 - 0
application/index/view/contrast/lst.html

@@ -0,0 +1,375 @@
+<!DOCTYPE html>
+<html><head>
+	    <meta charset="utf-8">
+    <title>文本差异对比</title>
+
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+    
+
+    <!-- contrast -->
+<!--     <link rel="stylesheet" href="/static/index/css/2020/bootstrap.min.css"/>
+    <link rel="stylesheet" href="/static/index/css/2020/common.css"/> -->
+    <script type="text/javascript" src="/static/index/js/2020/jquery.js"></script>
+    <script type="text/javascript" src="/static/index/js/2020/bootstrap.js"></script>
+    <script type="text/javascript" src="/static/index/js/2020/layer.js"></script>
+    <link rel="alternate" hreflang="en" href="/tools-lang-en/wenbenchayi.html" >
+    <link rel="alternate" hreflang="zh-CN" href="/tools-lang-zh-CN/wenbenchayi.html" >
+    <link rel="alternate" hreflang="zh-TW" href="/tools-lang-zh-TW/wenbenchayi.html" >
+    <link rel="alternate" hreflang="ja" href="/tools-lang-ja/wenbenchayi.html" >
+    <link rel="alternate" hreflang="ko" href="/tools-lang-ko/wenbenchayi.html" >
+    <link rel="alternate" hreflang="de" href="/tools-lang-de/wenbenchayi.html" >
+    <link rel="alternate" hreflang="est" href="/tools-lang-est/wenbenchayi.html" >
+    <link rel="alternate" hreflang="fra" href="/tools-lang-fra/wenbenchayi.html" >
+    <link rel="alternate" hreflang="it" href="/tools-lang-it/wenbenchayi.html" >
+    <link rel="alternate" hreflang="ru" href="/tools-lang-ru/wenbenchayi.html" >
+    <link rel="alternate" hreflang="vi" href="/tools-lang-vi/wenbenchayi.html" >
+    <link rel="alternate" hreflang="pt" href="/tools-lang-pt/wenbenchayi.html" >
+    <link rel="alternate" hreflang="th" href="/tools-lang-th/wenbenchayi.html" >
+    <script async src="/static/index/js/2020/adsbygoogle.js"></script>
+    <script>
+        (adsbygoogle = window.adsbygoogle || []).push({
+            google_ad_client: "ca-pub-6733883877029153",
+            enable_page_level_ads: true
+        });
+    </script>
+    <link rel="stylesheet" href="/static/index/css/2020/main_style.css"/>
+    <script src="/static/index/js/2020/linediff.js"></script>
+    <script src="/static/index/js/2020/editset.js"></script>
+    <script src="/static/index/js/2020/lineutils.js"></script>
+    <script src="/static/index/js/2020/diff.js"></script>
+    <script src="/static/index/js/2020/diffformatter.js"></script>
+    <script src="/static/index/js/2020/lineformatter.js"></script>
+    <script src="/static/index/js/2020/anchoriterator.js"></script>
+    <style>
+        h3 {
+            display: table;
+        }
+    </style>
+</head>
+<body>
+	<!-- 头部 -->
+    
+	<!-- /头部 -->
+	
+	<div class="main-container container-fluid">
+		<div class="page-container">
+			<!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+				<div class="container">
+    <h1>文本差异对比</h1>
+    <div class="row">
+        <div class="wrapper">
+            <div class="left">
+                <h3>原始文本</h3>
+                <input type="file" id="file1" name="file2" class="form-control" onchange="yGetFile()">
+                <textarea id="original"> </textarea>
+            </div>
+            <div class="right">
+                <h3>新文本</h3>
+                <input type="file" id="file2" name="file2" class="form-control" onchange="xGetFile()">
+                <textarea id="edited"></textarea>
+            </div>
+        </div>
+        <button class="btn btn-success" id="diff-btn" onclick="doDiff()">
+            <strong>对比1</strong>
+        </button>
+        <button class="btn btn-success" id="diff-btn2" onclick="doDiff2()">
+            <strong>对比2</strong>
+        </button>
+        <button class="btn btn-success" id="diff-btn3" onclick="doDiff3()">
+            <strong>对比3</strong>
+        </button>
+        <button class="btn btn-success" id="diff-btn4" onclick="doDiff4()">
+            <strong>对比4</strong>
+        </button>
+        <ul id="myTab" class="nav nav-tabs top10">
+            <li class="active">
+                <a href="#home" data-toggle="tab">普通对比1</a>
+            </li>
+            <li>
+                <a href="#more" data-toggle="tab">普通对比2</a>
+            </li>
+            <li>
+                <a href="#more3" data-toggle="tab">普通对比3</a>
+            </li>
+            <li>
+                <a href="#more4" data-toggle="tab">普通对比4</a>
+            </li>
+        </ul>
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade in active top10" id="home">
+                <div class="wrapper">
+                    <div class="left">
+                        <h3>原始文本</h3>
+                    </div>
+                    <div class="right">
+                        <h3>新文本</h3>
+                    </div>
+                </div>
+                <div class="wrapper">
+                    <div class="left scroll" id="scrollLeft">
+                        <pre id="original_result"></pre>
+                    </div>
+                    <div class="right scroll" id="scrollRight">
+                        <pre id="edited_result"></pre>
+                    </div>
+                </div>
+            </div>
+            <div class="tab-pane fade top10" id="more">
+                <div class="more_show">
+
+                </div>
+            </div>
+            <div class="tab-pane fade top10" id="more3">
+                <div class="more_show_3" id="more_show_3">
+
+                </div>
+            </div>
+            <div class="tab-pane fade top10" id="more4">
+                <div class="more_show_4" id="more_show_4">
+
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="/static/index/js/2020/jquery-ui.min.js"></script>
+<link rel="stylesheet" href="/static/index/css/2020/jquery-ui.min.css">
+<script>
+    $("#search").autocomplete({
+        source: "/Home/Index/AjaxSearch.html",
+        select: function (event, ui) {
+            var command = ui.item['value'];
+            $.ajax({
+                type: "get",
+                url: "/Home/Index/AjaxTools.html",
+                data: {name: command},
+                dataType: 'json',
+                success: function (result) {
+                    if (result.code == 1) {
+                        window.location = result.data['url'];
+                    }
+                }
+            });
+        }
+    });
+</script>
+
+<script>
+    $(function () {
+        var urlLog = document.URL, refererLog = document.referrer;
+        $.ajax({
+            type: "post",
+            url: "/Dev/Base/log.html",
+            dataType: "json",
+            data: {url: urlLog, referer: refererLog},
+            success: function (data) {
+            }
+        });
+
+    })
+
+    /**baidu zd**/
+    $(function(){
+        var bp = document.createElement('script');
+        var curProtocol = window.location.protocol.split(':')[0];
+        if (curProtocol === 'https') {
+            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
+        }
+        else {
+            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
+        }
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(bp, s);
+    });
+</script>
+<script async src="/static/index/js/2020/8e3f22fc70904fc593a1cc9cd4a2c2b4.js"></script>
+<script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+    gtag('config', 'UA-131433579-1');
+</script>
+<script>
+    var _hmt = _hmt || [];
+    (function() {
+        var hm = document.createElement("script");
+        hm.src = "https://hm.baidu.com/hm.js?7405f46bed49cf2bf2c82d56bca53945";
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(hm, s);
+    })();
+</script>
+
+<link href="/static/index/css/2020/style.css" rel="stylesheet" type="text/css">
+<div style="display: none;"><input type="hidden" class="three_token" value="b008e8115a4c4956083f2ffcbc3fb33c31fea685f8a858054b9705b681bf188b"></div>
+<script src="/static/index/js/2020/common.js" type="text/javascript"></script>
+<script type='text/javascript' src='/static/index/js/2020/sharethis.js' async='async'></script>
+<script src="/static/index/js/2020/diff_match_patch.js" type="application/javascript"></script>
+<link rel="stylesheet" href="/static/index/css/2020/diffview.css"/>
+<script src="/static/index/js/2020/difflib.js" type="application/javascript"></script>
+<script src="/static/index/js/2020/diffview.js" type="application/javascript"></script>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+		</div>	
+	</div>
+
+	    <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body>
+<script>
+    var scrollLeft = document.getElementById('scrollLeft');
+    var scrollRight = document.getElementById('scrollRight');
+
+    scrollLeft.addEventListener('scroll', function () {
+        scrollRight.scrollLeft = scrollLeft.scrollLeft;
+        scrollRight.scrollTop = scrollLeft.scrollTop;
+    });
+
+    scrollRight.addEventListener('scroll', function () {
+        scrollLeft.scrollLeft = scrollRight.scrollLeft;
+        scrollLeft.scrollTop = scrollRight.scrollTop;
+    });
+    $(function () {
+        $('#diff-btn').click();
+    })
+
+    function doDiff2() {
+        var text1 = document.getElementById('original').value;
+        var text2 = document.getElementById('edited').value;
+        var dmp = new diff_match_patch();
+        var d = dmp.diff_main(text1, text2);
+        var ds = dmp.diff_prettyHtml(d);
+        $('.more_show').html(ds);
+        $('#myTab a[href="#more"]').click();
+    }
+    function doDiff3() {
+        var text1 = document.getElementById('original').value;
+        var text2 = document.getElementById('edited').value;
+        "use strict";
+        var byId = function (id) { return document.getElementById(id); },
+            base = difflib.stringAsLines(text1),
+            newtxt = difflib.stringAsLines(text2),
+            sm = new difflib.SequenceMatcher(base, newtxt),
+            opcodes = sm.get_opcodes(),
+            diffoutputdiv = byId("more_show_3"),
+            contextSize = '';
+
+        diffoutputdiv.innerHTML = "";
+        contextSize = contextSize || null;
+
+        diffoutputdiv.appendChild(diffview.buildView({
+            baseTextLines: base,
+            newTextLines: newtxt,
+            opcodes: opcodes,
+            baseTextName: "原始文本",
+            newTextName: "新文本",
+            contextSize: contextSize,
+            viewType: 0
+        }));
+        $('#myTab a[href="#more3"]').click();
+    }
+
+    function doDiff4() {
+        var text1 = document.getElementById('original').value;
+        var text2 = document.getElementById('edited').value;
+        "use strict";
+        var byId = function (id) { return document.getElementById(id); },
+            base = difflib.stringAsLines(text1),
+            newtxt = difflib.stringAsLines(text2),
+            sm = new difflib.SequenceMatcher(base, newtxt),
+            opcodes = sm.get_opcodes(),
+            diffoutputdiv = byId("more_show_4"),
+            contextSize = '';
+
+        diffoutputdiv.innerHTML = "";
+        contextSize = contextSize || null;
+
+        diffoutputdiv.appendChild(diffview.buildView({
+            baseTextLines: base,
+            newTextLines: newtxt,
+            opcodes: opcodes,
+            baseTextName: "原始文本",
+            newTextName: "新文本",
+            contextSize: contextSize,
+            viewType: 1
+        }));
+        $('#myTab a[href="#more4"]').click();
+    }
+
+    function doDiff() {
+        var diff = new SourceDiff.Diff(true);   //ignore leading whitespace
+        var formatter = new SourceDiff.DiffFormatter(diff);
+
+        var text1 = document.getElementById('original').value;
+        var text2 = document.getElementById('edited').value;
+
+        var results = formatter.formattedDiff(text1, text2);
+
+        document.getElementById('original_result').innerHTML = results[0];
+        document.getElementById('edited_result').innerHTML = results[1];
+
+        $('#myTab a[href="#home"]').click();
+    }
+
+    function yGetFile() {
+        var selectedFile = document.getElementById("file1").files[0];
+        var name = selectedFile.name;
+        var size = selectedFile.size;
+        var fileExtension = name.substring(name.lastIndexOf('.') + 1);
+        $('#file').val('');
+        var reader = new FileReader();
+        reader.readAsText(selectedFile);
+        reader.onload = function () {
+            $('#file1').val();
+            $('#original').val(this.result);
+        }
+    }
+
+    function xGetFile() {
+        var selectedFile = document.getElementById("file2").files[0];
+        var name = selectedFile.name;
+        var size = selectedFile.size;
+        var fileExtension = name.substring(name.lastIndexOf('.') + 1);
+        $('#file').val('');
+        var reader = new FileReader();
+        reader.readAsText(selectedFile);
+        reader.onload = function () {
+            $('#file2').val();
+            $('#edited').val(this.result);
+        }
+    }
+</script>
+</html>

+ 304 - 0
application/index/view/cycle/lst.html

@@ -0,0 +1,304 @@
+<!DOCTYPE html>
+<html lang="en" >
+<head>
+<meta charset="UTF-8">
+<title>赛车加载动画特效</title>
+
+<link rel="stylesheet" href="__BOX__/css/style.css">
+ 
+</head>
+<body>
+
+<svg viewBox="0 0 178 40" width="178" height="40">
+    <!-- dash included behind the car
+    ! be sure to delay the animation of the path after the dashes on the right side of the car
+    -->
+    <path
+        class="air"
+        d="M 46 16.5 h -20 a 8 8 0 0 1 0 -16"
+        fill="none"
+        stroke="#E85725"
+        stroke-width="1"
+        stroke-linejoin="round"
+        stroke-linecap="round">
+    </path>
+
+    <!-- wrap the svg describing the car in a group
+    this to translate the car horizontally within the wrapping svg
+    -->
+    <g id="car">
+        <!-- svg describing the race car in a container 118 wide and 28.125 tall
+        .125 due to the 2.25 width of the stroke
+
+        position in the bottom center of the wrapping svg
+        -->
+        <svg viewBox="0 0 118 28.125" x="30" y="11.725" width="118" height="28.125">
+            <defs>
+                <!-- circle repeated for the wheel -->
+                <circle
+                    id="circle"
+                    cx="0"
+                    cy="0"
+                    r="1">
+                </circle>
+                <!-- wheel
+                three overlapping circles describing the parts of the wheel
+                in between the circles add path elements to detail the graphic
+                -->
+                <g id="wheel">
+                    <use href="#circle" fill="#1E191A" transform="scale(10)"></use>
+                    <use href="#circle" fill="#fff" transform="scale(5)"></use>
+                    <!-- inner shadow -->
+                    <path
+                        fill="#1E191A"
+                        stroke="#1E191A"
+                        stroke-width="0.5"
+                        stroke-linecap="round"
+                        stroke-linejoin="round"
+                        opacity="0.2"
+                        stroke-dashoffset="0"
+                        d="M -3.5 0 a 4 4 0 0 1 7 0 a 3.5 3.5 0 0 0 -7 0">
+                    </path>
+                    <use href="#circle" fill="#1E191A" transform="scale(1.5)"></use>
+                    <!-- yellow stripe
+                    include stroke-dasharray values totalling the circumference of the circle
+                    this to use the dash-offset property and have the stripe rotate around the center while keeping its shape
+                    ! explicitly set the stroke-dashoffset property to 0 for the other path elements (in this way the stroke-dashoffset attribute added through the <use> element affects only this path)
+                    -->
+                    <path
+                        fill="none"
+                        stroke="#F9B35C"
+                        stroke-width="0.75"
+                        stroke-linecap="round"
+                        stroke-linejoin="round"
+                        stroke-dasharray="20 14 8 5"
+                        d="M 0 -7.5 a 7.5 7.5 0 0 1 0 15 a 7.5 7.5 0 0 1 0 -15">
+                    </path>
+                    <!-- outer glow (from a hypothetical light source) -->
+                    <path
+                        fill="none"
+                        stroke="#fff"
+                        stroke-width="1"
+                        stroke-linecap="round"
+                        stroke-linejoin="round"
+                        opacity="0.1"
+                        stroke-dashoffset="0"
+                        d="M -6.5 -6.25 a 10 10 0 0 1 13 0 a 9 9 0 0 0 -13 0">
+                    </path>
+                </g>
+            </defs>
+            <!-- group describing the pilot's helmet
+            translate in the middle of the cockpit
+            -->
+            <g transform="translate(51.5 11.125)">
+                <path
+                    stroke-width="2"
+                    stroke="#1E191A"
+                    fill="#EF3F33"
+                    d="M 0 0 v -2 a 4.5 4.5 0 0 1 9 0 v 2">
+                </path>
+                <rect
+                    fill="#1E191A"
+                    x="3.25"
+                    y="-3"
+                    width="5"
+                    height="3">
+                </rect>
+            </g>
+
+            <!-- group describing the car -->
+            <g transform="translate(10 24.125)">
+                <!-- shadow below the car
+                ! change the transform-origin of the shadow to animate it from the top center
+                the idea is to skew the shadow as the car moves
+                -->
+                <g transform="translate(59 0)">
+                    <path
+                        id="shadow"
+                        opacity="0.7"
+                        fill="#1E191A"
+                        d="M -64 0 l -4 4 h 9 l 8 -1.5 h 100 l -3.5 -2.5">
+                    </path>
+                </g>
+                <!-- path describing the frame of the car
+                ! do not add a stroke at the bottom of the frame
+                additional lines are overlapped to detail the belly of the vehicle
+                -->
+                <path
+                    fill="#fff"
+                    stroke="#1E191A"
+                    stroke-width="2.25"
+                    stroke-linecap="round"
+                    stroke-linejoin="round"
+                    d="M 0 0 v -10 l 35 -13 v 5 l 4 0.5 l 0.5 4.5 h 35.5 l 30 13">
+                </path>
+
+                <!-- wings -->
+                <g
+                    fill="#fff"
+                    stroke="#1E191A"
+                    stroke-width="2.25"
+                    stroke-linecap="round"
+                    stroke-linejoin="round">
+                    <path
+                        d="M -6 0 v -22 h 10 z">
+                    </path>
+                    <path
+                        d="M 105 0 h -3 l -12 -5.2 v 6.2 h 12">
+                    </path>
+                </g>
+
+                <!-- grey areas to create details around the car's dashes -->
+                <g
+                    fill="#949699"
+                    opacity="0.7">
+                    <rect
+                        x="16"
+                        y="-6"
+                        width="55"
+                        height="6">
+                    </rect>
+                    <path
+                        d="M 24 -14 l 13 -1.85 v 1.85">
+                    </path>
+                </g>
+
+                <!-- dashes included sparingly on top of the frame -->
+                <g
+                    fill="none"
+                    stroke="#1E191A"
+                    stroke-width="2.25"
+                    stroke-linecap="round"
+                    stroke-linejoin="round">
+                    <path
+                        stroke-dasharray="30 7 42"
+                        d="M 90 0 h -78">
+                    </path>
+                    <path
+                        d="M 39.5 -13 h -15">
+                    </path>
+                </g>
+
+                <!-- elements describing the side of the car -->
+                <path
+                    fill="#fff"
+                    stroke="#1E191A"
+                    stroke-width="2.25"
+                    stroke-linejoin="round"
+                    d="M 48.125 -6 h -29 v 6 h 29"><!-- .125 to tuck the path behind the rectangle and avoid a pixel disconnect as the svg is scaled -->
+                </path>
+
+                <rect
+                    x="48"
+                    y="-7.125"
+                    width="6.125"
+                    height="7.125"
+                    fill="#1E191A">
+                </rect>
+
+                <!-- rear view mirror -->
+                <g fill="#1E191A">
+                    <rect
+                        x="60"
+                        y="-15"
+                        width="1"
+                        height="6">
+                    </rect>
+                    <rect
+                        x="56.5"
+                        y="-17.5"
+                        width="6"
+                        height="2.5">
+                    </rect>
+                </g>
+            </g>
+
+            <!-- group describing the wheels, positioned at the bottom of the graphic and at either end of the frame -->
+            <g class="wheels" transform="translate(0 18.125)">
+                <g transform="translate(10 0)">
+                    <use href="#wheel"></use>
+                </g>
+
+                <g transform="translate(87 0)">
+                    <!-- add an offset to rotate the yellow stripe around the center -->
+                    <use href="#wheel" stroke-dashoffset="-22"></use>
+                </g>
+            </g>
+        </svg>
+    </g>
+
+    <!-- dashes included above and around the race car
+    ! include them in order from right to left
+    this allows to rapidly assign an increasing delay in the script, to have the dashes animated in sequence
+    -->
+    <g
+        fill="none"
+        stroke-width="1"
+        stroke-linejoin="round"
+        stroke-linecap="round">
+        <!-- right side -->
+        <path
+            class="air"
+            stroke="#E85725"
+            d="M 177.5 34 h -10 q -16 0 -32 -8">
+        </path>
+
+        <path
+            class="air"
+            stroke="#949699"
+            d="M 167 28.5 c -18 -2 -22 -8 -37 -10.75">
+        </path>
+
+        <path
+            class="air"
+            stroke="#949699"
+            d="M 153 20 q -4 -1.7 -8 -3">
+        </path>
+
+        <path
+            class="air"
+            stroke="#E85725"
+            d="M 117 16.85 c -12 0 -12 16 -24 16 h -8"><!-- around (117 29.85) where the right wheel is centered -->
+        </path>
+
+        <!-- left side -->
+        <path
+            class="air"
+            stroke="#949699"
+            d="M 65 12 q -5 3 -12 3.8">
+        </path>
+
+        <path
+            class="air"
+            stroke="#949699"
+            stroke-dasharray="9 10"
+            d="M 30 13.5 h -2.5 q -5 0 -5 -5">
+        </path>
+
+        <path
+            class="air"
+            stroke="#949699"
+            d="M 31 33 h -10">
+        </path>
+
+        <path
+            class="air"
+            stroke="#949699"
+            d="M 29.5 23 h -12">
+        </path>
+        <path
+            class="air"
+            stroke="#949699"
+            d="M 13.5 23 h -6">
+        </path>
+
+        <path
+            class="air"
+            stroke="#E85725"
+            d="M 28 28 h -27.5">
+        </path>
+    </g>
+</svg>
+
+</body>
+</html>

+ 133 - 0
application/index/view/dxzh/lst.html

@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+        <meta charset="utf-8">
+    <title>英文字母大小写转换工具</title>
+
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+
+
+    
+</head>
+<body>
+    <!-- 头部 -->
+    
+    <!-- /头部 -->
+    
+    <div class="main-container container-fluid">
+        <div class="page-container">
+            <!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+                <div class="container">
+        <div class="row">
+            <div class="col-md-12 col10main">             
+    <div class="accordion" id="accordion2">
+        <div class="accordion-group">          
+<ul class="nav nav-tabs hbflag">
+    <li role="presentation" ><a
+        href="#">字母大小写转换</a></li>
+</ul>
+
+            <div class="alert alert-success alert-dismissible" role="alert">
+                英文字母大小写转换工具(实现大写字母和小写字母之间的互相转换)
+            </div>
+            
+            <div class="panel">
+                <form id="form1" class="form-horizontal" action="/ensmall/" method="post">
+                <div class="form-group">
+                    <div class="col-sm-12">
+                        <textarea onmouseover="this.focus();" id="content" class="form-control" rows="14"
+                            style="max-height: 2222px;" placeholder="请输入要转换的英文字母"></textarea>
+                    </div>
+                </div>
+                <div class="form-group">
+                    <div class="col-sm-12">
+                        <input type="button" onclick="englishConvert('dx')" value="转换成大写" class="btn btn-success">
+                        <input type="button" onclick="englishConvert('xx')" value="转换成小写" class="btn btn-success">
+                        <input type="button" onclick="Empty();" value="清空输入框" class="btn btn-danger">
+                        <span id="copyallcode" class="btn btn-success" data-clipboard-target="#content">复制完整代码</span>
+                    </div>
+                </div>
+                </form>
+            </div>
+        </div>      
+ <div class="accordion-group">
+    
+            <script async src="/static/index/js/jsons/adsbygoogle.js"></script>
+            <ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-3646661869102009"
+                data-ad-slot="8284318627" data-ad-format="auto" data-full-width-responsive="true">
+            </ins>
+            <script>
+                (adsbygoogle = window.adsbygoogle || []).push({});
+            </script>
+ </div>       
+    </div>
+            </div>
+        </div>   
+    </div>
+<a class="gotop" href="#" title="返回顶部" style="display: none;"><span class="arrow"></span>
+    <span class="arrow lit"></span></a>
+<script>
+    (function () {
+        var bp = document.createElement('script');
+        var curProtocol = window.location.protocol.split(':')[0];
+        if (curProtocol === 'https') {
+            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
+        }
+        else {
+            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
+        }
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(bp, s);
+    })();
+</script>
+
+    
+    <script src="/static/index/js/jsons/jquery-1.11.3.min.js" type="text/javascript"></script>
+    <script src="/static/index/js/jsons/bootstrap3.5min.js" type="text/javascript"></script>
+    <script src="/static/index/js/jsons/filesave.js" type="text/javascript"></script>
+    <script src="/static/index/js/jsons/clipboard.min.js" type="text/javascript"></script>
+    <script src="/static/index/js/jsons/mainjs.js" type="text/javascript"></script>
+    
+    <script src="/static/index/js/jsons/ensmalljs.js" type="text/javascript"></script>
+
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+        </div>  
+    </div>
+
+        <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body></html>

+ 356 - 0
application/index/view/fire/lst.html

@@ -0,0 +1,356 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Canvas火焰光标特效</title>
+
+<style>
+@import url(https://fonts.googleapis.com/css?family=Amatic+SC);
+html, body {
+	margin:0;
+	padding:0;
+	height: 100%;
+	overflow: hidden;
+}
+</style>
+
+</head>
+<body>
+
+<canvas id="fire"></canvas>
+
+<script>
+var Fire  = function(){
+
+	this.canvas 		= document.getElementById('fire');
+	this.ctx 			= this.canvas.getContext('2d');
+	this.canvas.height 	= window.innerHeight;
+	this.canvas.width 	= window.innerWidth;
+
+	this.aFires 		= [];
+	this.aSpark 		= [];
+	this.aSpark2 		= [];
+
+
+
+	this.mouse = {
+		x : this.canvas.width * .5,
+		y : this.canvas.height * .75,
+	}
+
+
+
+	this.init();
+
+}
+Fire.prototype.init = function()
+{
+	
+	this.canvas.addEventListener('mousemove', this.updateMouse.bind( this ), false);
+
+}
+Fire.prototype.run = function(){
+	
+	this.update();
+	this.draw();
+
+	if( this.bRuning )
+		requestAnimationFrame( this.run.bind( this ) );
+
+}
+Fire.prototype.start = function(){
+
+	this.bRuning = true;
+	this.run();
+
+}
+Fire.prototype.stop = function(){
+
+	this.bRuning = false;
+
+}
+Fire.prototype.update = function(){
+
+	this.aFires.push( new Flame( this.mouse ) );
+	this.aSpark.push( new Spark( this.mouse ) );
+	this.aSpark2.push( new Spark( this.mouse ) );
+
+
+
+	for (var i = this.aFires.length - 1; i >= 0; i--) {
+
+		if( this.aFires[i].alive )
+			this.aFires[i].update();
+		else
+			this.aFires.splice( i, 1 );
+
+	}
+
+	for (var i = this.aSpark.length - 1; i >= 0; i--) {
+
+		if( this.aSpark[i].alive )
+			this.aSpark[i].update();
+		else
+			this.aSpark.splice( i, 1 );
+
+	}
+
+
+	for (var i = this.aSpark2.length - 1; i >= 0; i--) {
+
+		if( this.aSpark2[i].alive )
+			this.aSpark2[i].update();
+		else
+			this.aSpark2.splice( i, 1 );
+
+	}
+
+}
+
+Fire.prototype.draw = function(){
+
+	this.ctx.globalCompositeOperation = "source-over";
+	this.ctx.fillStyle = "rgba( 15, 5, 2, 1 )";
+	this.ctx.fillRect( 0, 0, window.innerWidth, window.innerHeight );
+	
+	this.grd = this.ctx.createRadialGradient( this.mouse.x, this.mouse.y - 200,200,this.mouse.x, this.mouse.y - 100,0 );
+	this.grd.addColorStop(0,"rgb( 15, 5, 2 )");
+	this.grd.addColorStop(1,"rgb( 30, 10, 2 )");
+	this.ctx.beginPath();
+	this.ctx.arc( this.mouse.x, this.mouse.y - 100, 200, 0, 2*Math.PI );
+	this.ctx.fillStyle= this.grd;
+	this.ctx.fill();
+	
+
+	this.ctx.font = "15em Amatic SC";
+	this.ctx.textAlign = "center";
+	this.ctx.strokeStyle = "rgb(50, 20, 0)";
+	this.ctx.fillStyle = "rgb(120, 10, 0)";
+	this.ctx.lineWidth = 2;
+	this.ctx.strokeText("Fire",this.canvas.width/2, this.canvas.height * .72 );
+	this.ctx.fillText("Fire",this.canvas.width/2, this.canvas.height * .72 );	
+
+
+
+	this.ctx.globalCompositeOperation = "overlay";//or lighter or soft-light
+
+	for (var i = this.aFires.length - 1; i >= 0; i--) {
+
+		this.aFires[i].draw( this.ctx );
+
+	}
+
+	this.ctx.globalCompositeOperation = "soft-light";//"soft-light";//"color-dodge";
+
+	for (var i = this.aSpark.length - 1; i >= 0; i--) {
+		
+		if( ( i % 2 ) === 0 )
+			this.aSpark[i].draw( this.ctx );
+
+	}
+
+
+	this.ctx.globalCompositeOperation = "color-dodge";//"soft-light";//"color-dodge";
+
+	for (var i = this.aSpark2.length - 1; i >= 0; i--) {
+
+		this.aSpark2[i].draw( this.ctx );
+
+	}
+
+
+}
+
+Fire.prototype.updateMouse = function( e ){
+
+	this.mouse.x = e.clientX;
+	this.mouse.y = e.clientY;
+
+	//this.aFires.push( new Flame( this.mouse ) );
+
+}
+
+
+
+
+
+
+
+
+var Flame = function( mouse ){
+
+	this.cx = mouse.x;
+	this.cy = mouse.y;
+	this.x = rand( this.cx - 25, this.cx + 25);
+	this.y = rand( this.cy - 5, this.cy + 5);
+	this.vy = rand( 1, 3 );
+	this.vx = rand( -1, 1 );
+	this.r = rand( 20, 30 );
+	this.life = rand( 3, 6 );
+	this.alive = true;
+	this.c = {
+
+		h : Math.floor( rand( 2, 40) ),
+		s : 100,
+		l : rand( 80, 100 ),
+		a : 0,
+		ta : rand( 0.8, 0.9 )
+
+	}
+
+
+}
+Flame.prototype.update = function()
+{
+
+	this.y -= this.vy;
+	this.vy += 0.05;
+
+
+	this.x += this.vx;
+
+	if( this.x < this.cx )
+		this.vx += 0.1;
+	else
+		this.vx -= 0.1;
+
+
+
+
+	if(  this.r > 0 )
+		this.r -= 0.1;
+	
+	if(  this.r <= 0 )
+		this.r = 0;
+
+
+
+	this.life -= 0.15;
+
+	if( this.life <= 0 ){
+
+		this.c.a -= 0.05;
+
+		if( this.c.a <= 0 )
+			this.alive = false;
+
+	}else if( this.life > 0 && this.c.a < this.c.ta ){
+
+		this.c.a += .08;
+
+	}
+
+}
+Flame.prototype.draw = function( ctx ){
+
+	ctx.beginPath();
+	ctx.arc( this.x, this.y, this.r * 3, 0, 2*Math.PI );
+	ctx.fillStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + (this.c.a/20) + ")";
+	ctx.fill();
+
+	ctx.beginPath();
+	ctx.arc( this.x, this.y, this.r, 0, 2*Math.PI );
+	ctx.fillStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + this.c.a + ")";
+	ctx.fill();
+
+}
+
+
+
+
+
+
+
+
+var Spark = function( mouse ){
+
+	this.cx = mouse.x;
+	this.cy = mouse.y;
+	this.x = rand( this.cx -40, this.cx + 40);
+	this.y = rand( this.cy, this.cy + 5);
+	this.lx = this.x;
+	this.ly = this.y;
+	this.vy = rand( 1, 3 );
+	this.vx = rand( -4, 4 );
+	this.r = rand( 0, 1 );
+	this.life = rand( 4, 5 );
+	this.alive = true;
+	this.c = {
+
+		h : Math.floor( rand( 2, 40) ),
+		s : 100,
+		l : rand( 40, 100 ),
+		a : rand( 0.8, 0.9 )
+
+	}
+
+}
+Spark.prototype.update = function()
+{
+
+	this.lx = this.x;
+	this.ly = this.y;
+
+	this.y -= this.vy;
+	this.x += this.vx;
+
+	if( this.x < this.cx )
+		this.vx += 0.2;
+	else
+		this.vx -= 0.2;
+
+	this.vy += 0.08;
+	this.life -= 0.1;
+
+	if( this.life <= 0 ){
+
+		this.c.a -= 0.05;
+
+		if( this.c.a <= 0 )
+			this.alive = false;
+
+	}
+
+}
+Spark.prototype.draw = function( ctx ){
+
+	ctx.beginPath();
+	ctx.moveTo( this.lx , this.ly);
+	ctx.lineTo( this.x, this.y);
+	ctx.strokeStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + (this.c.a / 2) + ")";
+	ctx.lineWidth = this.r * 2;
+	ctx.lineCap = 'round';
+	ctx.stroke();
+	ctx.closePath();
+
+	ctx.beginPath();
+	ctx.moveTo( this.lx , this.ly);
+	ctx.lineTo( this.x, this.y);
+	ctx.strokeStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + this.c.a + ")";
+	ctx.lineWidth = this.r;
+	ctx.stroke();
+	ctx.closePath();
+
+}
+
+rand = function( min, max ){ return Math.random() * ( max - min) + min; };
+onresize = function () { oCanvas.canvas.width = window.innerWidth; oCanvas.canvas.height = window.innerHeight; };
+
+
+
+var oCanvas;
+init = function()
+{
+
+	oCanvas = new Fire();
+	oCanvas.start();
+
+}
+
+
+window.onload = init;
+</script>
+
+</div>
+</body>
+</html>

+ 199 - 0
application/index/view/font/lst.html

@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html><head>
+        <meta charset="utf-8">
+    <title>简体繁体火星文转换</title>
+
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+
+    <!-- fonts -->
+   <!--  <link rel="stylesheet" href="/static/index/css/2020/bootstrap.min.css"/>
+    <link rel="stylesheet" href="/static/index/css/2020/common.css"/> -->
+    <script type="text/javascript" src="/static/index/js/2020/jquery.js"></script>
+    <script type="text/javascript" src="/static/index/js/2020/bootstrap.js"></script>
+    <link rel="alternate" hreflang="en" href="/tools-lang-en/fontconvert.html" >
+    <link rel="alternate" hreflang="zh-CN" href="/tools-lang-zh-CN/fontconvert.html" >
+    <link rel="alternate" hreflang="zh-TW" href="/tools-lang-zh-TW/fontconvert.html" >
+    <link rel="alternate" hreflang="ja" href="/tools-lang-ja/fontconvert.html" >
+    <link rel="alternate" hreflang="ko" href="/tools-lang-ko/fontconvert.html" >
+    <link rel="alternate" hreflang="de" href="/tools-lang-de/fontconvert.html" >
+    <link rel="alternate" hreflang="est" href="/tools-lang-est/fontconvert.html" >
+    <link rel="alternate" hreflang="fra" href="/tools-lang-fra/fontconvert.html" >
+    <link rel="alternate" hreflang="it" href="/tools-lang-it/fontconvert.html" >
+    <link rel="alternate" hreflang="ru" href="/tools-lang-ru/fontconvert.html" >
+    <link rel="alternate" hreflang="vi" href="/tools-lang-vi/fontconvert.html" >
+    <link rel="alternate" hreflang="pt" href="/tools-lang-pt/fontconvert.html" >
+    <link rel="alternate" hreflang="th" href="/tools-lang-th/fontconvert.html" >
+    <script async src="/static/index/js/2020/adsbygoogle.js"></script>
+    <script>
+        (adsbygoogle = window.adsbygoogle || []).push({
+            google_ad_client: "ca-pub-6733883877029153",
+            enable_page_level_ads: true
+        });
+    </script>
+    <style>
+        .p_tab {
+            border: 1px;
+        }
+    </style>
+    
+</head>
+<body>
+    <!-- 头部 -->
+    
+    <!-- /头部 -->
+    
+    <div class="main-container container-fluid">
+        <div class="page-container">
+            <!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+                <div class="container">
+    <h2>中文转换简繁体,火星语</h2>
+    <h5>请输入需要转换的文字:</h5>
+    <textarea rows="10" id="txtsource" class="form-control col-xs-12"></textarea>
+    <p style="margin-top:10px;" class="col-xs-12 form-inline">
+        <button onclick="convert(2)" class="btn btn-success">转换为火星文</button>&nbsp;&nbsp;
+        <button onclick="convert(1)" class="btn btn-success">转换为繁体字</button>&nbsp;&nbsp;
+        <button onclick="convert(0)" class="btn btn-success">转换为简体字</button>&nbsp;&nbsp;
+        <!--<button class="btn btn-primary" onclick="copyButton()" >复制结果</button>&nbsp;&nbsp;-->
+    </p>
+    <h5 style="margin-top:20px;">转换结果:</h5>
+    <textarea rows="10" id="txtresult" class="form-control col-xs-12 col-xs-12"></textarea>
+
+
+</div>
+<script src="/static/index/js/2020/jquery-ui.min.js"></script>
+<link rel="stylesheet" href="/static/index/css/2020/jquery-ui.min.css">
+<script>
+    $("#search").autocomplete({
+        source: "/Home/Index/AjaxSearch.html",
+        select: function (event, ui) {
+            var command = ui.item['value'];
+            $.ajax({
+                type: "get",
+                url: "/Home/Index/AjaxTools.html",
+                data: {name: command},
+                dataType: 'json',
+                success: function (result) {
+                    if (result.code == 1) {
+                        window.location = result.data['url'];
+                    }
+                }
+            });
+        }
+    });
+</script>
+
+<script>
+    $(function () {
+        var urlLog = document.URL, refererLog = document.referrer;
+        $.ajax({
+            type: "post",
+            url: "/Dev/Base/log.html",
+            dataType: "json",
+            data: {url: urlLog, referer: refererLog},
+            success: function (data) {
+            }
+        });
+
+    })
+
+    /**baidu zd**/
+    $(function(){
+        var bp = document.createElement('script');
+        var curProtocol = window.location.protocol.split(':')[0];
+        if (curProtocol === 'https') {
+            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
+        }
+        else {
+            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
+        }
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(bp, s);
+    });
+</script>
+<script async src="/static/index/js/2020/a53c79c56046445c9442f353e24193fd.js"></script>
+<script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+    gtag('config', 'UA-131433579-1');
+</script>
+<script>
+    var _hmt = _hmt || [];
+    (function() {
+        var hm = document.createElement("script");
+        hm.src = "https://hm.baidu.com/hm.js?7405f46bed49cf2bf2c82d56bca53945";
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(hm, s);
+    })();
+</script>
+<link href="/static/index/css/2020/style.css" rel="stylesheet" type="text/css">
+<div style="display: none;"><input type="hidden" class="three_token" value="31cf7a435a359e8f89b8b7cca992cee4852fe87864ecc51e91eb68e1d81dfdd4"></div>
+<script src="/static/index/js/2020/common.js" type="text/javascript"></script>
+<script type='text/javascript' src='/static/index/js/2020/sharethis.js' async='async'></script>
+<script src="/static/index/js/2020/clipboard.min.js"></script>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+        </div>  
+    </div>
+
+        <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body>
+<script>
+    function copy(e){
+        return;
+        var text = $(e).val();
+        var clipboard = new Clipboard(e, {
+            text: function () {
+                return text;
+            }
+        });
+        clipboard.on('success', function (eve) {
+                layer.msg(text + " - 复制成功");
+                var item = $(e).parent().parent().find('.state');
+                item.html('已使用');
+                item.css('color', '#6de36d');
+            }
+        );
+
+        clipboard.on('error', function (e) {
+            console.log(e);
+        });
+    }
+</script>
+<script src="/static/index/js/2020/huoxing.js"></script>
+</html>

+ 1519 - 0
application/index/view/ggame/lst.html

@@ -0,0 +1,1519 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>跳跃闯关小游戏</title>
+<style type="text/css">
+* { margin:0; padding:0; }
+#canvas { display:block; margin:10px auto; border:1px solid #bbb; outline:none; }
+.box { position:relative; }
+</style>
+<script src="/static/index/i7box/game/js/jquery.min.js"></script>
+</head>
+
+<body>
+
+	<div class="box">
+    	<canvas id="canvas" tabindex="0"></canvas>
+    </div>
+
+<script type="text/javascript">
+
+$(document).ready(function(e) {
+    var canvas = document.getElementById("canvas");
+	var ctx = canvas.getContext("2d");
+	var c = $("#canvas");
+	var cur = c.css('cursor');
+	var w = 600, h = 600, dx = 0, dy = 0, x = 0, y = 0;
+	var x2 = x;
+	var y2 = y;
+	var w2 = w/2;
+	var h2 = h/2;
+	var mf = [w2,h2];
+	var fadewh = 0;
+	var le = 1;
+	var lea = 30;
+	var tle = le;
+	var lv = '';
+	var mr = 20;
+	var mr2 = mr/2;
+	var start = true, fade = false, level1 = false, lev = false, mov = false, choose = false, pause = false;
+	var kaishisize = '20px';
+	var tm = 1;
+	var ya = [];
+	var chu = [];
+	var bu = [];
+	var yd = [];
+	var bd = [];
+	var yc = [];
+	var ly = [];
+	var yq = [];
+	var zb = [];
+	var bc = [];
+	var lt = [];
+	var th = [];
+	var cs = [];
+	var cd = [];
+	var ty = [];
+	var hb = [];
+	var zz = [];
+	var v = 0;
+	var a = .2;
+	var mxl = 0, mxr = 0;
+	var xv = 2;
+	var sv = -7;
+	var sx = 0;
+	var sy = 0;
+	var sx2 = 0;
+	var sy2 = 0;
+	var xa = 0;
+	var xaj = .2;
+	var bingf = 1;
+	var pi2 = Math.PI/2;
+	var jian = false;
+	var kong = false;
+	var isStart = true;
+	var ov = false;
+	var nanc = false;
+	var fa = 10;
+	var yi = true;
+	var dkong = false;
+	var choosestyle = '#fff';
+	var menustyle = '#999';
+	var restyle = '#999';
+	var tingstyle = '#999';
+	var backstyle = '#fff'; 
+	var cox = 100, coy = 100, cow = 60, coh = 30, coxk = 85, coyk = 40;
+	var coy2 = coy;
+	var cox2 = cox;
+	var cohang = 0;
+	var choo = [];
+	canvas.width = w;
+	canvas.height = h;
+	ctx.fillStyle = '#000';
+	ctx.fillRect(0,0,w,h);
+	function begin(){
+		ctx.fillStyle = '#fff';
+		ctx.fillRect(0,0,w,h);
+		if(start)toStart();
+		if(choose)toChoose();
+		if(level1)toLevel1();
+		if(lev)toLev();
+		if(mov)move();
+		if(ov)over();
+		if(fade)toFade();
+		if(pause)toPause();
+		if(isStart)window.requestAnimationFrame(begin);
+	}
+	c.mousemove(function(e){
+		dx = e.pageX - c.offset().left - parseInt(c.css('border-left-width'));
+		dy = e.pageY - c.offset().top - parseInt(c.css('border-top-width'));
+		mm();
+	});
+	function mm(){
+		if(start){
+			if(dx >= 250 && dx <= 350 && dy >= 288 && dy <= 318){
+				kaishisize = '22px';
+				c.css('cursor','pointer');
+			}else if(dx >= 270 && dx <= 330 && dy >= 362 && dy <= 386){
+				c.css('cursor','pointer');
+				choosestyle = '#000';
+			}
+			else{
+				kaishisize = '20px';
+				choosestyle = '#fff';
+				c.css('cursor',cur);
+			}
+		}
+		if(choose && choo.length){
+			if(dx >= 270 && dx <= 330 && dy >= 482 && dy <= 506){
+				backstyle = '#000';
+				c.css('cursor','pointer');
+			}else{
+				backstyle = "#fff";
+				for(var i=0;i<lea;i++){
+					if(dx >= choo[i].x && dx <= choo[i].x+cow && dy >= choo[i].y && dy <= choo[i].y+coh){
+						choo[i].c = "#000";
+						c.css('cursor','pointer');
+						break;
+					}else{
+						choo[i].c = "#fff";
+						c.css('cursor',cur);
+					}
+				}
+			}
+		}
+		if(level1){
+			if(dx >= 560 && dx <= 590 && dy >= 10 && dy <= 35){
+				menustyle = '#bbb';
+				c.css('cursor','pointer');
+			}else if(dx >= 520 && dx <= 540 && dy >= 12 && dy <= 32){
+				restyle = '#bbb';
+				c.css('cursor','pointer');
+			}else if(dx >= 478 && dx <= 502 && dy >= 9 && dy <= 37){
+				tingstyle = '#bbb';
+				c.css('cursor','pointer');
+			}else{
+				menustyle = '#999';
+				restyle = '#999';
+				tingstyle = '#999';
+				c.css('cursor',cur);
+			}
+		}
+		if(pause){
+			if(Math.sqrt(Math.pow(dx-300,2)+Math.pow(dy-300,2)) <= 100){
+				c.css('cursor','pointer');
+			}else{
+				c.css('cursor',cur);
+			}
+		}
+	}
+	c.click(function(){
+		if(start){
+			if(dx >= 250 && dx <= 350 && dy >= 288 && dy <= 318){
+				start = false;
+				kaishisize = '20px';
+				c.css('cursor',cur);
+				fade = true;
+			}else if(dx >= 270 && dx <= 330 && dy >= 362 && dy <= 386){
+				start = false;
+				kaishisize = '20px';
+				choosestyle = '#fff';
+				c.css('cursor',cur);
+				choose = true;
+			}
+		}
+		if(choose && choo.length){
+			for(var i=0;i<lea;i++){
+				if(dx >= choo[i].x && dx <= choo[i].x+cow && dy >= choo[i].y && dy <= choo[i].y+coh){
+					le = i+1;
+					c.css('cursor',cur);
+					fade = true;
+					choose = false;
+					break;
+				}
+			}
+			if(dx >= 270 && dx <= 330 && dy >= 482 && dy <= 506){
+				choose = false;
+				start = true;
+			}
+		}
+		if(level1){
+			if(dx >= 560 && dx <= 590 && dy >= 10 && dy <= 35){
+				start = true;
+				mov = false;
+				level1 = false;
+				lev = false;
+				le = 1;
+				tle = 1;
+			}else if(dx >= 520 && dx <= 540 && dy >= 12 && dy <= 32){
+				xuan();
+			}else if(dx >= 478 && dx <= 502 && dy >= 9 && dy <= 37){
+				isStart = false;
+				pause = true;
+			}
+		}
+		if(pause){
+			if(Math.sqrt(Math.pow(dx-300,2)+Math.pow(dy-300,2)) <= 100){
+				isStart = true;
+				pause = false;
+				level1 = true;
+				mov = true;
+				begin();
+			}
+		}
+	});
+	function toPause(){
+		level1 = false;
+		mov = false;
+		ctx.fillStyle = 'rgba(0,0,0,.5)';
+		ctx.fillRect(0,0,w,h);
+		ctx.beginPath();
+		ctx.fillStyle = '#000';
+		ctx.arc(300,300,100,0,4*pi2);
+		ctx.closePath();
+		ctx.fill();
+		ctx.beginPath();
+		ctx.fillStyle = '#fff';
+		ctx.arc(300,300,96,0,4*pi2);
+		ctx.closePath();
+		ctx.fill();
+		ctx.beginPath();
+		ctx.fillStyle = '#000';
+		ctx.moveTo(370,300);
+		ctx.lineTo(250,230);
+		ctx.lineTo(250,370);
+		ctx.closePath();
+		ctx.fill();
+	}
+	function toChoose(){
+		ctx.fillStyle = '#999';
+		ctx.fillRect(0,0,w,h);
+		for(var i=0;i<lea;i++){
+			if(!choo[i]){
+				choo[i] = {};
+			}
+			choo[i].x = cox+(cohang*coxk);
+			choo[i].y = coy;
+			ctx.beginPath();
+			ctx.strokeStyle = choo[i].c ||'#fff';
+			ctx.strokeRect(cox+(cohang*coxk),coy,cow,coh);
+			ctx.closePath();
+			ctx.fillStyle = choo[i].c ||'#fff';
+			ctx.font = '16px 微软雅黑';
+			ctx.fillText(i+1, cox+(cohang*coxk)+cow/2,coy+coh*2/3);
+			cohang++;
+			if((i+1)%5 == 0 && i != 1){
+				coy+=coyk
+				cox = cox2;
+				cohang = 0;
+			}
+		}
+		ctx.fillStyle = backstyle;
+		ctx.font = '16px 微软雅黑';
+		ctx.fillText('返回',300,500);
+		ctx.beginPath();
+		ctx.strokeStyle = backstyle;
+		ctx.strokeRect(270,482,60,24);
+		ctx.closePath();
+		coy = coy2;
+		cox = cox2;
+		cohang = 0;
+	}
+	function toStart(){
+		ctx.fillStyle = '#999';
+		ctx.fillRect(0,0,w,h);
+		ctx.font = kaishisize+' 微软雅黑';
+		ctx.fillStyle = '#fff';
+		ctx.textAlign = 'center';
+		ctx.fillText("开始游戏", 300, 310);
+		ctx.fillStyle = choosestyle;
+		ctx.font = '16px 微软雅黑';
+		ctx.fillText("选关", 300, 380);
+		ctx.beginPath();
+		ctx.strokeStyle = '#fff';
+		ctx.strokeRect(250,288,100,30);
+		ctx.closePath();
+		ctx.beginPath();
+		ctx.strokeStyle = choosestyle;
+		ctx.strokeRect(270,362,60,24);
+		ctx.closePath();
+	}
+	function toFade(){
+		ctx.fillStyle = '#fff';
+		ctx.fillRect(0,0,w,h);
+		if(tle != 1){
+			if(yi){
+				fadewh = Math.max.apply(null, mf) - fa;
+				fa*=-1;
+				yi = false;
+			}
+			if(fadewh <= 0)fa*=-1;
+			fadewh += fa;
+		}else{
+			fadewh += fa;
+		}
+		ctx.fillStyle = '#999';
+		ctx.fillRect(0-fadewh,0-fadewh,w2,h2);
+		ctx.fillRect(w2+fadewh,0-fadewh,w2,h2);
+		ctx.fillRect(0-fadewh,h2+fadewh,w2,h2);
+		ctx.fillRect(w2+fadewh,h2+fadewh,w2,h2);
+		if(fadewh >= w2 && fadewh >= h2){
+			yi = true;
+			fadewh = 0;
+			xuan();
+		}
+	}
+	function xuan(){
+		fade = false;
+		lev = true;
+		level1 = true;
+		mov = true;
+		ya = [];
+		chu = [];
+		bu = [];
+		bd = []; 
+		yd = []; // 移动
+		bc = [];
+		yc = []; // 隐藏
+		ly = []; // 全屏
+		yq = []; // 圆圈
+		zb = []; // 钟摆
+		lt = []; // 落体
+		th = []; // 弹簧
+		cs = []; // 传送
+		cd = []; // 传送带
+		ty = []; // 跳跃
+		hb = []; // 滑冰
+		zz = []; // 沼泽
+		tm = 1;
+		v = 0;
+		lv = le;
+		if(le == 0){
+			/*ya[1] = [200,400,200,10];
+			bu.push([450,400,50,10]);
+			yd.push([101,300,200,10,'x',100,300,4,1,0,.2]); // [7].最大速度 [8] 方向 [9] 随意 [10]最小速度 [10]>=[7]时匀速
+			bd.push([101,250,50,30,'x',100,450,3,1,0,2]);
+			yc.push([200,400,200,10,.05,5,1,false]); // [4]隐藏速度 [5]隐藏后多久出来 后面固定值
+			ly.push([40,40,40,40,4,3]); // [4]x+ [5]y+ 
+			yq.push([300,300,100,40,40,1,pi2,0.03]);  // 中心 半径 方块宽高 正反 初始位置 速度
+			zb.push([500,300,100,20,20,-1,pi2+0.8,pi2+1,0.05,0.001]); // 中心 半径 方块宽高 正反 初始位置 最高位置 速度 最小速度
+			bc.push([200,400,200,10,.01,1,1]); // [6]/[4]显示的时间  [5]/[4]隐藏的时间
+			lt.push([0,-40,40,40,680,0.1,0.5,0,true]); // [4] 落体y距离  [5]加速度 [6]停留时间 [7]初始速度
+			th.push([0,450,50,50,12,true]); // [4]速度
+			cs.push([0,480,mr,mr,300,480,mr,mr,true]);
+			cd.push([200,400,200,10,1,true]);
+			ty.push([200,460,40,40,2,5,1,100,500,true]); // [4] x速度 [5] y速度 [6]方向 [x边距]
+			hb.push([0,500,150,100,2]); 
+			zz.push([250,400,100,10]); */
+		}else if(le == 1){
+			ya.push([0,500,200,100]);
+			ya.push([200,400,200,200]);
+			ya.push([400,300,200,300]);
+			chu = [560,280,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 2){
+			ya.push([0,500,250,100]);
+			ya.push([350,500,250,100]);
+			chu = [500,480,mr,mr];
+			x = 100;
+			y = 400;
+		}else if(le == 3){
+			ya.push([0,500,w,100]);
+			bu.push([290,100,20,400]);
+			th.push([240,460,40,40,12.5,true]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 4){
+			hb.push([0,500,150,100,2]);
+			hb.push([290,500,20,100,2]);
+			hb.push([450,500,600,100,2]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 5){
+			ya.push([0,500,200,100]);
+			ya.push([500,300,100,10]);
+			yc.push([200,400,40,10,.05,5,1,false]);
+			yc.push([300,400,40,10,.05,5,1,false]);
+			yc.push([400,400,40,10,.05,5,1,false]);
+			chu = [560,280,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 6){
+			ya.push([0,500,100,100]);
+			zz.push([200,500,500,100]);
+			bu.push([300,460,40,40]);
+			bu.push([440,460,40,40]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 7){
+			ya.push([0,500,100,100]);
+			ya.push([500,400,100,10]);
+			cd.push([200,500,100,10,1.5,true]);
+			cd.push([360,500,100,10,-1.5,true]);
+			chu = [560,380,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 8){
+			ya.push([0,500,w,100]);
+			bu.push([200,420,40,80]);
+			bu.push([400,420,40,80]);
+			chu = [500,480,mr,mr];
+			x = 100;
+			y = 400;
+		}else if(le == 9){
+			ya.push([0,500,w,100]);
+			ty.push([200,460,40,40,2,5,1,100,500,true]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 10){
+			ya.push([0,500,100,100]);
+			ya.push([500,500,100,100]);
+			hb.push([200,500,150,10,4]); 
+			bu.push([350,440,30,70]);
+			cd.push([380,500,100,10,-1.5,true]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 11){
+			ya.push([100,0,300,h]);
+			ya.push([0,500,100,10]);
+			ya.push([400,500,200,10]);
+			ya.push([400,400,200,10]);
+			cs.push([80,480,mr,mr,400,480,mr,mr,true]);
+			cs.push([580,480,mr,mr,400,380,mr,mr,true]);
+			zb.push([500,405,80,20,20,-1,pi2+0.8,pi2+1,0.06,0.002]);
+			chu = [560,380,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 12){
+			ya.push([0,500,100,100]);
+			ya.push([500,500,100,100]);
+			th.push([60,460,40,40,12,true]);
+			hb.push([100,100,400,10,5]);
+			bu.push([100,0,400,10]);
+			ty.push([240,60,40,40,2,4,1,240,358,true]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 13){
+			ya.push([0,500,100,100]);
+			ya.push([500,500,100,100]);
+			yd.push([201,400,50,10,'x',100,250,4,-1,0,1]);
+			cd.push([380,400,100,10,-1.8,true]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 14){
+			ya.push([0,550,50,50]);
+			ya.push([50,500,150,100]);
+			ya.push([250,500,400,200]);
+			ya.push([200,550,50,50]);
+			bd.push([0,260,400,200,'y',200,300,3,-1,0,1]);
+			bd.push([450,260,150,200,'y',200,300,3,-1,0,1]);
+			bd.push([400,260,50,150,'y',200,300,3,-1,0,1]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 520;
+		}else if(le == 15){
+			ya.push([0,500,100,100]);
+			hb.push([100,500,100,100,7]);
+			ya.push([200,500,100,100]);
+			lt.push([145,-10,10,10,620,0,0,15,true]);
+			cd.push([300,500,200,10,4,true]);
+			ya.push([500,500,100,10]);
+			bu.push([480,460,40,40]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 16){
+			ya.push([0,500,170,100]);
+			ya.push([300,500,200,100]);
+			ya.push([500,100,100,10]);
+			th.push([460,460,40,40,12,true]);
+			bd.push([450,250,20,20,'x',400,500,3,1,0,2]);
+			chu = [560,80,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 17){
+			ya.push([0,500,150,10]);
+			ya.push([280,500,100,10]);
+			ya.push([510,500,90,10]);
+			ya.push([0,200,100,10]);
+			cd.push([230,200,100,10,1,true]);
+			ya.push([460,200,140,10]);
+			zb.push([270,205,240,80,80,-1,pi2+0.8,pi2+1,0.05,0.001]);
+			cs.push([580,480,mr,mr,0,180,mr,mr,true]);
+			chu = [560,180,mr,mr];
+			x = 40;
+			y = 400;
+		}else if(le == 18){
+			ya.push([0,500,100,100]);
+			ya.push([500,500,100,100]);
+			yd.push([201,400,50,10,'x',100,260,3,-1,0,1.5]);
+			yd.push([301,400,50,10,'x',300,450,4,1,0,3]);
+			chu = [560,480,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 19){
+			ya.push([0,500,100,100]);
+			ya.push([500,100,100,10]);
+			yd.push([201,400,50,10,'x',100,260,3,-1,0,1.5]);
+			yd.push([400,400,50,10,'y',200,450,4,1,0,3]);
+			chu = [560,80,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 20){
+			ya.push([0,500,100,100]);
+			ya.push([200,500,50,100]);
+			ya.push([350,500,50,100]);
+			ya.push([0,200,400,20]);
+			bu.push([120,180,60,20]);
+			bu.push([360,140,20,60]);
+			yd.push([500,400,50,10,'y',200,550,4,1,0,3]);
+			bd.push([140,450,20,20,'y',350,500,3,1,0,2]);
+			bd.push([290,450,20,20,'y',350,500,4,1,0,1]);
+			chu = [80,180,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 21){
+			ya.push([0,500,w,100]);
+			ya.push([0,300,500,10]);
+			ya.push([550,400,50,10]);
+			bd.push([200,480,20,20,'x',100,300,3,1,0,3]);
+			bd.push([200,400,40,60,'x',100,300,4,1,0,4]);
+			bd.push([400,480,20,20,'x',340,500,8,1,0,3]);
+			bd.push([515,400,20,20,'y',240,440,5,1,0,3]);
+			bd.push([200,260,40,40,'x',100,460,12,1,0,1]);
+			chu = [20,280,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 22){
+			ya.push([0,500,20,20]);
+			ya.push([100,400,20,20]);
+			ya.push([200,284,20,20]);
+			ya.push([300,166,20,20]);
+			ya.push([400,400,200,20]);
+			bu.push([79,405,20,20]);
+			bu.push([179,289,20,20]);
+			bu.push([233,275,20,20]);
+			bu.push([455,380,20,20]);
+			bu.push([505,380,20,20]);
+			chu = [480,380,mr,mr];
+			x = 0;
+			y = 400;
+		}else if(le == 23){
+			ya.push([0,300,100,10]);
+			ya.push([200,300,50,10]);
+			ya.push([350,300,50,10]);
+			ya.push([500,300,100,10]);
+			bu.push([60,280,30,20]);
+			bu.push([210,280,30,20]);
+			bu.push([360,280,30,20]);
+			bu.push([525,280,20,20]);
+			bu.push([575,280,20,20]);
+			chu = [550,280,mr,mr];
+			x = 20;
+			y = 200;
+		}else if(le == 24){
+			ya.push([450,580,40,20]);
+			ya.push([100,350,50,10]);
+			ya.push([250,250,50,10]);
+			ya.push([400,400,50,10]);
+			yc.push([320,430,60,10,.05,5,1,false]);
+			yd.push([20,401,60,10,'y',200,450,5,-1,0,3]);
+			yd.push([170,401,60,10,'y',100,450,6,-1,0,6]);
+			yd.push([500,501,50,10,'y',450,550,2,-1,0,.5]);
+			bu.push([100,0,50,300]);
+			bu.push([100,360,50,240]);
+			bu.push([250,0,50,200]);
+			bu.push([250,260,50,340]);
+			bu.push([400,0,50,350]);
+			bu.push([400,410,50,200]);
+			bu.push( [550,410,50,200]);
+			bu.push([450,410,50,50]);
+			chu = [460,560,mr,mr];
+			x = 40;
+			y = 160;
+		}else if(le == 25){
+			ya.push([0,580,w,20]);
+			ya.push([400,50,200,50]);
+			bu.push([0,420,400,50]);
+			bu.push([450,420,150,50]);
+			bu.push([0,250,50,50]);
+			bu.push([100,250,500,50]);
+			bu.push([0,50,350,50]);
+			yc.push([120,240,50,10,.05,5,1,false]);
+			yc.push([180,160,50,10,.05,5,1,false]);
+			yc.push([270,220,50,10,.05,5,1,false]);
+			yd.push([400,500,50,10,'y',420,520,3,1,0,0.5]);
+			yd.push([300,380,50,10,'x',120,340,3,1,0,2]);
+			yd.push([50,300,50,10,'y',250,380,2,1,0,0.5]);
+			yd.push([350,120,50,10,'y',100,200,2,1,0,0.5]);
+			yq.push([475,75,50,20,20,-1,pi2,0.03]);
+			chu = [560,30,mr,mr];
+			x = 100;
+			y = 540;
+		}else if(le == 26){
+			ya.push([0,500,100,100]);
+			ya.push([0,100,500,10]);
+			ya.push([550,200,50,10]);
+			yc.push([150,400,50,10,.05,5,1,false]);
+			yc.push([270,330,50,10,.05,5,1,false]);
+			yc.push([400,260,50,10,.05,5,1,false]);
+			yq.push([175,405,40,20,20,1,pi2,0.03]);
+			yq.push([425,265,40,20,20,-1,pi2,0.05]);
+			zb.push([200,0,80,40,40,-1,pi2+0.8,pi2+1,0.05,0.001]);
+			lt.push([270,-50,50,50,700,0.1,0.5,0,true]);
+			chu = [20,80,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 27){
+			ya.push([0,500,100,100]);
+			ya.push([150,480,50,10]);
+			ya.push([250,460,50,10]);
+			ya.push([350,440,50,10]);
+			ya.push([450,420,50,10]);
+			ya.push([550,400,50,10]);
+			ya.push([550,300,50,10]);
+			ya.push([550,200,50,10]);
+			ya.push([450,180,50,10]);
+			ya.push([350,160,50,10]);
+			ya.push([250,140,50,10]);
+			ya.push([150,120,50,10]);
+			ya.push([0,100,100,10]);
+			lt.push([115,-20,20,20,620,0.2,0.5,1,true]);
+			lt.push([215,-20,20,20,620,0.5,1,1,true]);
+			lt.push([315,-20,20,20,620,1,0,0,true]);
+			lt.push([415,-20,20,20,620,0.1,1,3,true]);
+			lt.push([500,-20,20,20,620,0.2,0.2,3,true]);
+			lt.push([530,-20,20,20,620,0.1,0,5,true]);
+			chu = [20,80,mr,mr];
+			x = 20;
+			y = 400;
+		}else if(le == 28){
+			ya.push([250,580,100,20]);
+			ya.push([250,50,100,10]);
+			yd.push([101,500,50,10,'x',100,450,2,1,0,2]);
+			yd.push([300,400,40,10,'x',100,460,2.5,1,0,2.5]);
+			yd.push([400,300,30,10,'x',100,470,3,-1,0,3]);
+			yd.push([400,200,20,10,'x',100,480,4,1,0,4]);
+			yc.push([200,100,20,10,.05,5,1,false]);
+			yc.push([380,100,20,10,.05,5,1,false]);
+			bu.push([200,480,20,20]);
+			bu.push([380,480,20,20]);
+			bu.push([280,380,20,20]);
+			bu.push([180,280,20,20]);
+			bu.push([420,280,20,20]);
+			bu.push([100,140,60,60]);
+			bu.push([440,140,60,60]);
+			bd.push([225,60,20,20,'y',0,100,3,1,0,0.1]);
+			bd.push([355,80,20,20,'y',0,100,2.5,-1,0,0.5]);
+			chu = [290,30,mr,mr];
+			x = 290;
+			y = 540;
+		}else if(le == 29){
+			ya.push([400,500,200,100]);
+			ya.push([380,400,160,10]);
+			ya.push([360,300,180,10]);
+			ya.push([340,200,200,10]);
+			ya.push([100,100,440,10]);
+			ya.push([280,200,10,400]);
+			ya.push([530,100,10,400]);
+			ya.push([100,100,10,410]);
+			ya.push([150,200,130,10]);
+			ya.push([150,300,130,10]);
+			ya.push([150,400,130,10]);
+			ya.push([150,500,130,10]);
+			ya.push([110,450,130,10]);
+			ya.push([110,350,130,10]);
+			ya.push([110,250,130,10]);
+			bc.push([540,400,60,60,.01,1,1]);
+			yc.push([0,150,50,10,.05,5,1,false]);
+			yc.push([0,250,50,10,.05,5,1,false]);
+			yc.push([0,350,50,10,.05,5,1,false]);
+			yc.push([0,450,50,10,.05,5,1,false]);
+			yc.push([50,500,50,10,.05,5,1,false]);
+			yc.push([50,400,50,10,.05,5,1,false]);
+			yc.push([50,300,50,10,.05,5,1,false]);
+			yc.push([50,200,50,10,.05,5,1,false]);
+			yd.push([101,550,50,10,'x',0,200,3,1,0,2]);
+			lt.push([170,-40,40,40,640,0.1,0.5,0,true]);
+			zb.push([200,100,88,20,20,-1,pi2+0.8,pi2+1,0.05,0.003]);
+			zb.push([400,0,78,40,40,1,pi2-0.8,pi2+1,0.1,0.002]);
+			yq.push([225,455,40,10,10,1,pi2,0.05]);
+			chu = [560,480,mr,mr];
+			x = 440;
+			y = 440;
+		}else if(le == 30){
+			ya.push([0,590,w,10]);
+			ya.push([0,490,500,10]);
+			ya.push([100,390,500,10]);
+			ya.push([0,290,500,10]);
+			ya.push([100,190,500,10]);
+			ya.push([0,90,500,10]);
+			yq.push([495,495,50,10,10,1,pi2,0.03]);
+			yq.push([105,395,50,10,10,-1,pi2,0.05]);
+			yq.push([495,295,50,10,10,1,pi2,0.07]);
+			yq.push([105,195,50,10,10,-1,pi2,0.09]);
+			yq.push([495,95,50,10,10,1,pi2,0.11]);
+			bd.push([150,450,40,90,'y',400,500,4,1,0,.2]);
+			bd.push([350,306,40,90,'y',300,400,5,1,0,.2]);
+			bd.push([300,286,40,90,'y',200,300,2,1,0,1.5]);
+			bd.push([200,86,40,90,'y',0,200,8,1,0,1.5]);
+			bd.push([400,1,40,90,'y',0,100,2,1,0,1.5]);
+			zb.push([300,0,68,40,40,-1,pi2+0.8,pi2+1,0.08,0.002]);
+			ly.push([40,40,40,40,3,3]);
+			chu = [20,70,mr,mr];
+			x = 20;
+			y = 560;
+		}else{
+			ov = true;
+		}
+		x2 = x;
+		y2 = y;
+	}
+	function toLevel1(){
+		ctx.fillStyle = '#999';
+		for(var i=0;i<ya.length;i++){
+			ctx.fillRect(ya[i][0],ya[i][1],ya[i][2],ya[i][3]);
+		}
+		ctx.fillStyle = '#B9CDF6';
+		for(var i=0;i<hb.length;i++){
+			ctx.fillRect(hb[i][0],hb[i][1],hb[i][2],hb[i][3]);
+		}
+		ctx.fillStyle = '#222';
+		for(var i=0;i<zz.length;i++){
+			ctx.fillRect(zz[i][0],zz[i][1],zz[i][2],zz[i][3]);
+		}
+		ctx.fillStyle = '#999';
+		for(var i=0;i<yc.length;i++){
+			if(yc[i][7]){
+				yc[i][6]-=yc[i][4];
+			}
+			if(yc[i][6] < -yc[i][5]){
+				yc[i][6] = 1;
+				yc[i][7] = false;
+			}
+			if(yc[i][6] >= 0 ){
+				ctx.fillStyle = 'rgba(205,198,115,'+yc[i][6]+')';
+				ctx.fillRect(yc[i][0],yc[i][1],yc[i][2],yc[i][3]);
+			}
+		}
+		for(var i=0;i<cd.length;i++){
+			ctx.fillStyle = '#cdb5cd';
+			ctx.fillRect(cd[i][0],cd[i][1],cd[i][2],cd[i][3]);
+			ctx.fillStyle = '#ad85ad';
+			if(cd[i][4]>=0){
+				if(cd[i][5]){
+					cd[i][5]=false;
+					cd[i][6]=cd[i][0];
+					cd[i][7]=cd[i][0]+(cd[i][2]/2);
+					cd[i][8]=cd[i][2]/4;
+				}
+				cd[i][6]+=cd[i][4];
+				cd[i][7]+=cd[i][4];
+				if(cd[i][6]>=cd[i][0]+(cd[i][2]/2)){
+					cd[i][6]=cd[i][0];
+					cd[i][7]=cd[i][0]+(cd[i][2]/2);
+				}
+				if(cd[i][7]>cd[i][0]+(3*cd[i][2]/4)){
+					cd[i][8] = cd[i][0]+cd[i][2]-cd[i][7];
+					ctx.fillRect(cd[i][0],cd[i][1],(cd[i][2]/4)-cd[i][8],5);
+				}else{
+					cd[i][8] = cd[i][2]/4;
+				}
+				ctx.fillRect(cd[i][6],cd[i][1],cd[i][2]/4,5);
+				ctx.fillRect(cd[i][7],cd[i][1],cd[i][8],5);
+			}else{
+				if(cd[i][5]){
+					cd[i][5]=false;
+					cd[i][6]=cd[i][0]+cd[i][2]/4;
+					cd[i][7]=cd[i][0]+(3*cd[i][2]/4);
+					cd[i][8]=cd[i][2]/4;
+				}
+				cd[i][6]+=cd[i][4];
+				cd[i][7]+=cd[i][4];
+				if(cd[i][7]<=cd[i][0]+cd[i][2]/4){
+					cd[i][6]=cd[i][0]+cd[i][2]/4;
+					cd[i][7]=cd[i][0]+(3*cd[i][2]/4);
+				}
+				if(cd[i][6]<cd[i][0]){
+					cd[i][6] = cd[i][0];
+					cd[i][8]+=cd[i][4];
+					ctx.fillRect(cd[i][0]+(3*cd[i][2]/4)+cd[i][8],cd[i][1],cd[i][2]/4-cd[i][8],5);
+				}else{
+					cd[i][8]=cd[i][2]/4;
+				}
+				ctx.fillRect(cd[i][6],cd[i][1],cd[i][8],5);
+				ctx.fillRect(cd[i][7],cd[i][1],cd[i][2]/4,5);
+			}
+		}
+		ctx.fillStyle = '#8ad';
+		for(var i=0;i<th.length;i++){
+			if(th[i][5]){
+				th[i][5] = false;
+				th[i][6] = th[i][3];
+				th[i][7] = th[i][1];
+				th[i][8] = true;
+			}
+			ctx.fillRect(th[i][0],th[i][1],th[i][2],10);
+			ctx.fillRect(th[i][0],th[i][1]+th[i][3]-10,th[i][2],10);
+			ctx.strokeStyle = '#999';
+			ctx.lineWidth = 2;
+			ctx.lineCap = 'round';
+			ctx.beginPath();
+			ctx.moveTo(th[i][0]+5,th[i][1]+5);
+			ctx.lineTo(th[i][0]+th[i][2]-5,th[i][1]+th[i][3]-5);
+			ctx.stroke();
+			ctx.closePath();
+			ctx.beginPath();
+			ctx.moveTo(th[i][0]+5,th[i][1]+th[i][3]-5);
+			ctx.lineTo(th[i][0]+th[i][2]-5,th[i][1]+5);
+			ctx.stroke();
+			ctx.closePath();
+		}
+		for(var i=0;i<cs.length;i++){
+			ctx.lineWidth = 2;
+			ctx.strokeStyle = '#F08080';
+			ctx.strokeRect(cs[i][0],cs[i][1],cs[i][2],cs[i][3]);
+			ctx.strokeRect(cs[i][4],cs[i][5],cs[i][6],cs[i][7]);
+			ctx.font = '14px 微软雅黑';
+			ctx.fillStyle = '#F08080';
+			ctx.fillText(i+1, cs[i][0]+10, cs[i][1]+16);
+			ctx.fillText(i+1, cs[i][4]+10, cs[i][5]+16);
+		}
+		ctx.fillStyle = '#d08';
+		for(var i=0;i<bu.length;i++){
+			ctx.fillRect(bu[i][0],bu[i][1],bu[i][2],bu[i][3]);
+		}
+		for(var i=0;i<bc.length;i++){
+			bc[i][6]-=bc[i][4];
+			if(bc[i][6] < -bc[i][5]){
+				bc[i][6] = 1;
+			}
+			if(bc[i][6] > 0){
+				ctx.fillRect(bc[i][0],bc[i][1],bc[i][2],bc[i][3]);
+			}
+		}
+		for(var i=0;i<yq.length;i++){
+			yq[i][6]+=yq[i][7]*yq[i][5];
+			yq[i][8] = yq[i][0]+(yq[i][2]*Math.cos(yq[i][6]))-(yq[i][3]/2);
+			yq[i][9] = yq[i][1]+(yq[i][2]*Math.sin(yq[i][6]))-(yq[i][4]/2);
+			ctx.fillRect(yq[i][8],yq[i][9],yq[i][3],yq[i][4]);
+		}
+		for(var i=0;i<zb.length;i++){
+			zb[i][10] = Math.abs((Math.abs(zb[i][6]-pi2)-Math.abs(zb[i][7] - pi2))*zb[i][8])/Math.abs(zb[i][7] - pi2);
+			if(zb[i][10]<=zb[i][9]){
+				zb[i][10] = zb[i][9];
+			}
+			if(Math.abs(zb[i][6]-pi2)>=Math.abs(zb[i][7]-pi2)){
+				zb[i][5]*=-1;
+			}
+			zb[i][6]+=zb[i][10]*zb[i][5];
+			zb[i][11] = zb[i][0]+(zb[i][2]*Math.cos(zb[i][6]))-(zb[i][3]/2);
+			zb[i][12] = zb[i][1]+(zb[i][2]*Math.sin(zb[i][6]))-(zb[i][4]/2);
+			ctx.fillRect(zb[i][11],zb[i][12],zb[i][3],zb[i][4]);
+			ctx.beginPath();
+			ctx.strokeStyle = '#999';
+			ctx.lineWidth = (zb[i][3]+zb[i][4])/20;
+			ctx.lineCap = 'round';
+			ctx.moveTo(zb[i][0],zb[i][1]);
+			ctx.lineTo(zb[i][0]+(zb[i][2]*Math.cos(zb[i][6])),zb[i][1]+(zb[i][2]*Math.sin(zb[i][6])));
+			ctx.stroke();
+			ctx.closePath();
+		}
+		for(var i=0;i<ly.length;i++){
+			ly[i][0]+=ly[i][4];
+			ly[i][1]+=ly[i][5];
+			if(ly[i][0] < 0){
+				ly[i][0]*=-1;
+				ly[i][4]*=-1;
+			}else if(ly[i][0]+ly[i][2] > w){
+				ly[i][0] = 2*(w-ly[i][2]) - ly[i][0];
+				ly[i][4]*=-1;
+			}
+			if(ly[i][1] < 0){
+				ly[i][1]*=-1;
+				ly[i][5]*=-1;
+			}else if(ly[i][1]+ly[i][3] > h){
+				ly[i][1] = 2*(h-ly[i][3]) - ly[i][1];
+				ly[i][5]*=-1;
+			}
+			ctx.fillRect(ly[i][0],ly[i][1],ly[i][2],ly[i][3]);
+		}
+		ctx.fillStyle = '#999';
+		for(var i=0;i<yd.length;i++){
+			if(yd[i][4] == 'x'){
+				yd[i][9] = yd[i][7]*yd[i][8]*Math.min.apply(null, [yd[i][6]-yd[i][0],yd[i][0]-yd[i][5]])/(yd[i][6]-yd[i][5]);
+				if(Math.abs(yd[i][9]) <= yd[i][10])yd[i][9]=yd[i][10]*yd[i][8];
+				if(yd[i][0]+yd[i][9] >= yd[i][6] || yd[i][0]+yd[i][9] <= yd[i][5])yd[i][8]*=-1;
+				yd[i][11] = yd[i][0];
+				yd[i][0]+=yd[i][9];
+				ctx.fillRect(yd[i][0],yd[i][1],yd[i][2],yd[i][3]);
+			}else{
+				yd[i][9] = yd[i][7]*yd[i][8]*Math.min.apply(null, [yd[i][6]-yd[i][1],yd[i][1]-yd[i][5]])/(yd[i][6]-yd[i][5]);
+				if(Math.abs(yd[i][9]) <= yd[i][10])yd[i][9]=yd[i][10]*yd[i][8];
+				if(yd[i][1]+yd[i][9] >= yd[i][6] || yd[i][1]+yd[i][9] <= yd[i][5])yd[i][8]*=-1;
+				yd[i][11] = yd[i][1];
+				yd[i][1]+=yd[i][9];
+				ctx.fillRect(yd[i][0],yd[i][1],yd[i][2],yd[i][3]);
+			}
+		}
+		ctx.fillStyle = '#d08';
+		for(var i=0;i<ty.length;i++){
+			if(ty[i][9]){
+				ty[i][9] = false;
+				ty[i][10] = ty[i][1];
+				ty[i][11]=-1*ty[i][5];
+			}
+			ty[i][0]+=(ty[i][4]*ty[i][6]);
+			ty[i][11]+=a;
+			ty[i][1]+=ty[i][11];
+			if(ty[i][1]>=ty[i][10]){
+				ty[i][1] = ty[i][10];
+				ty[i][11]=-1*ty[i][5];
+			}
+			if(ty[i][0]<=ty[i][7]){
+				ty[i][6]*=-1;
+				ty[i][0] = 2*ty[i][7]-ty[i][0];
+			}else if(ty[i][0]+ty[i][2]>=ty[i][8]){
+				ty[i][6]*=-1;
+				ty[i][0] = 2*(ty[i][8]-ty[i][2])-ty[i][0];
+			}
+			ctx.fillRect(ty[i][0],ty[i][1],ty[i][2],ty[i][3]);
+		}
+		for(var i=0;i<lt.length;i++){
+			if(lt[i][8]){
+				lt[i][8] = false;
+				lt[i][9] = lt[i][1];
+				lt[i][10] = lt[i][7];
+				lt[i][11] = lt[i][6];
+			}
+			lt[i][6]-=0.01;
+			if(lt[i][6]<=0){
+				lt[i][7]+=lt[i][5];
+				lt[i][1]+=lt[i][7];
+			}
+			if(lt[i][1]+lt[i][3]>lt[i][4]){
+				lt[i][1] = lt[i][9];
+				lt[i][7] = lt[i][10];
+				lt[i][6] = lt[i][11];
+			}
+			ctx.fillRect(lt[i][0],lt[i][1],lt[i][2],lt[i][3]);
+		}
+		for(var i=0;i<bd.length;i++){
+			if(bd[i][4] == 'x'){
+				bd[i][9] = bd[i][7]*bd[i][8]*Math.min.apply(null, [bd[i][6]-bd[i][0],bd[i][0]-bd[i][5]])/(bd[i][6]-bd[i][5]);
+				if(Math.abs(bd[i][9]) <= bd[i][10])bd[i][9]=bd[i][10]*bd[i][8];
+				if(bd[i][0]+bd[i][9] >= bd[i][6] || bd[i][0]+bd[i][9] <= bd[i][5])bd[i][8]*=-1;
+				bd[i][11] = bd[i][0];
+				bd[i][0]+=bd[i][9];
+				ctx.fillRect(bd[i][0],bd[i][1],bd[i][2],bd[i][3]);
+			}else{
+				bd[i][9] = bd[i][7]*bd[i][8]*Math.min.apply(null, [bd[i][6]-bd[i][1],bd[i][1]-bd[i][5]])/(bd[i][6]-bd[i][5]);
+				if(Math.abs(bd[i][9]) <= bd[i][10])bd[i][9]=bd[i][10]*bd[i][8];
+				if(bd[i][1]+bd[i][9] >= bd[i][6] || bd[i][1]+bd[i][9] <= bd[i][5])bd[i][8]*=-1;
+				bd[i][11] = bd[i][1];
+				bd[i][1]+=bd[i][9];
+				ctx.fillRect(bd[i][0],bd[i][1],bd[i][2],bd[i][3]);
+			}
+		}
+		ctx.lineWidth = 2;
+		ctx.strokeStyle = '#32CD32';
+		ctx.strokeRect(chu[0],chu[1],chu[2],chu[3]);
+		/*if(le == 1){
+			ctx.font = '14px 微软雅黑';
+			ctx.fillStyle = '#32CD32';
+			ctx.fillText("出口", 510, 480);
+			ctx.fillStyle = '#d08';
+			ctx.fillText("不能碰", 475, 390);
+		};*/
+	}
+	function toLev(){
+		tm-=.01;
+		ctx.fillStyle = 'rgba(34,136,221,'+tm+')';
+		ctx.font = '30px 微软雅黑';
+		ctx.textAlign = 'center';
+		ctx.fillText("第 "+lv+" 关", 300, 310);
+		if(tm <= 0){
+			tm = 1;
+			lev = false;
+		}
+	}
+	function move(){
+		sx = x;
+		sy = y;
+		if(mxl && !mxr){
+			x-=mxl;
+			bingf = -1;
+		}else if(!mxl && mxr){
+			x+=mxr;
+			bingf = 1;
+		}
+		if(x < 0){
+			x = 0;
+		}else if(x+mr > w){
+			x = w-mr;
+		}
+		kong = true;
+		dkong = true;
+		for(var i=0;i<ya.length;i++){
+			if(sx+mr <= ya[i][0] && x+mr >= ya[i][0] && y+mr > ya[i][1] && y <= ya[i][1]+ya[i][3]){
+				x = ya[i][0]-mr;
+			}else if(sx >= ya[i][0]+ya[i][2] && x <= ya[i][0]+ya[i][2] && y+mr > ya[i][1] && y <= ya[i][1]+ya[i][3]){
+				x = ya[i][0]+ya[i][2];
+			}
+			if(x+mr > ya[i][0] && x < ya[i][2]+ya[i][0] && parseInt(y+mr) <= ya[i][1] && parseInt(y+mr+v) >= ya[i][1]){
+				v = 0;
+				y = ya[i][1]-mr;
+			}else if(x+mr > ya[i][0] && x < ya[i][2]+ya[i][0] && parseInt(y) > ya[i][1]+ya[i][3] && parseInt(y+v) <= ya[i][1]+ya[i][3]){
+				v = 0;
+				y = ya[i][1]+ya[i][3];
+			}
+			if(y == ya[i][1]-mr && v != sv){
+				if(x+mr <= ya[i][0] || x >= ya[i][2]+ya[i][0]){
+					kong = true;
+				}else{
+					v = 0;
+					kong = false;
+					if(jian)v = sv;
+				}
+			}
+			if(!kong)dkong = false;
+		}
+		for(var i=0;i<zz.length;i++){
+			if(sx+mr <= zz[i][0] && x+mr >= zz[i][0] && y+mr > zz[i][1] && y <= zz[i][1]+zz[i][3]){
+				x = zz[i][0]-mr;
+			}else if(sx >= zz[i][0]+zz[i][2] && x <= zz[i][0]+zz[i][2] && y+mr > zz[i][1] && y <= zz[i][1]+zz[i][3]){
+				x = zz[i][0]+zz[i][2];
+			}
+			if(x+mr > zz[i][0] && x < zz[i][2]+zz[i][0] && parseInt(y+mr) <= zz[i][1] && parseInt(y+mr+v) >= zz[i][1]){
+				v = 0;
+				y = zz[i][1]-mr;
+			}else if(x+mr > zz[i][0] && x < zz[i][2]+zz[i][0] && parseInt(y) > zz[i][1]+zz[i][3] && parseInt(y+v) <= zz[i][1]+zz[i][3]){
+				v = 0;
+				y = zz[i][1]+zz[i][3];
+			}
+			if(y == zz[i][1]-mr && v != sv){
+				if(x+mr <= zz[i][0] || x >= zz[i][2]+zz[i][0]){
+					kong = true;
+				}else{
+					v = 0;
+					kong = false;
+					if(jian)v = sv;
+					x = sx;
+				}
+			}
+			if(!kong)dkong = false;
+		}
+		for(var i=0;i<hb.length;i++){
+			if(sx+mr <= hb[i][0] && x+mr >= hb[i][0] && y+mr > hb[i][1] && y <= hb[i][1]+hb[i][3]){
+				x = hb[i][0]-mr;
+			}else if(sx >= hb[i][0]+hb[i][2] && x <= hb[i][0]+hb[i][2] && y+mr > hb[i][1] && y <= hb[i][1]+hb[i][3]){
+				x = hb[i][0]+hb[i][2];
+			}
+			if(x+mr > hb[i][0] && x < hb[i][2]+hb[i][0] && parseInt(y+mr) <= hb[i][1] && parseInt(y+mr+v) >= hb[i][1]){
+				v = 0;
+				y = hb[i][1]-mr;
+			}else if(x+mr > hb[i][0] && x < hb[i][2]+hb[i][0] && parseInt(y) > hb[i][1]+hb[i][3] && parseInt(y+v) <= hb[i][1]+hb[i][3]){
+				v = 0;
+				y = hb[i][1]+hb[i][3];
+			}
+			if(y == hb[i][1]-mr && v != sv){
+				if(x+mr <= hb[i][0] || x >= hb[i][2]+hb[i][0]){
+					kong = true;
+				}else{
+					v = 0;
+					kong = false;
+					if(jian)v = sv;
+					x = sx + (hb[i][4]*bingf);
+					if(x < 0){
+						x = 0;
+					}else if(x+mr > w){
+						x = w-mr;
+					}
+				}
+			}
+			if(!kong)dkong = false;
+		}
+		for(var i=0;i<cd.length;i++){
+			if(sx+mr <= cd[i][0] && x+mr >= cd[i][0] && y+mr > cd[i][1] && y <= cd[i][1]+cd[i][3]){
+				x = cd[i][0]-mr;
+			}else if(sx >= cd[i][0]+cd[i][2] && x <= cd[i][0]+cd[i][2] && y+mr > cd[i][1] && y <= cd[i][1]+cd[i][3]){
+				x = cd[i][0]+cd[i][2];
+			}
+			if(x+mr > cd[i][0] && x < cd[i][2]+cd[i][0] && parseInt(y+mr) <= cd[i][1] && parseInt(y+mr+v) >= cd[i][1]){
+				v = 0;
+				y = cd[i][1]-mr;
+			}else if(x+mr > cd[i][0] && x < cd[i][2]+cd[i][0] && parseInt(y) > cd[i][1]+cd[i][3] && parseInt(y+v) <= cd[i][1]+cd[i][3]){
+				v = 0;
+				y = cd[i][1]+cd[i][3];
+			}
+			if(y == cd[i][1]-mr && v != sv){
+				if(x+mr <= cd[i][0] || x >= cd[i][2]+cd[i][0]){
+					kong = true;
+				}else{
+					x+=cd[i][4];
+					v = 0;
+					kong = false;
+					if(jian)v = sv;
+				}
+			}
+			if(!kong)dkong = false;
+		}
+		for(var i=0;i<th.length;i++){
+			if(sx+mr <= th[i][0] && x+mr >= th[i][0] && y+mr > th[i][1] && y <= th[i][1]+th[i][3]){
+				x = th[i][0]-mr;
+			}else if(sx >= th[i][0]+th[i][2] && x <= th[i][0]+th[i][2] && y+mr > th[i][1] && y <= th[i][1]+th[i][3]){
+				x = th[i][0]+th[i][2];
+			}
+			if(x+mr > th[i][0] && x < th[i][2]+th[i][0] && parseInt(y+mr) <= th[i][1] && parseInt(y+mr+v) >= th[i][1]){
+				v = 0;
+				y = th[i][1]-mr;
+			}else if(x+mr > th[i][0] && x < th[i][2]+th[i][0] && parseInt(y) > th[i][1]+th[i][3] && parseInt(y+v) <= th[i][1]+th[i][3]){
+				v = 0;
+				y = th[i][1]+th[i][3];
+			}
+			if(y == th[i][1]-mr && v != sv){
+				if(x+mr <= th[i][0] || x >= th[i][2]+th[i][0]){
+					kong = true;
+				}else{
+					if(th[i][3]>=21 && th[i][8]){
+						th[i][1]+=1;
+						th[i][3]-=1;
+						y = th[i][1]-mr;
+					}else{
+						if(th[i][3]-10>=th[i][6]){
+							th[i][3] = th[i][6];
+							th[i][1] = th[i][7];
+							y = th[i][1]-mr;
+							v = -th[i][4];
+							th[i][8] = true;
+						}else{
+							th[i][1]-=10;
+							th[i][3]+=10;
+							y = th[i][1]-mr;
+							v = 0;
+							th[i][8] = false;
+						}
+					}
+					kong = false;
+					if(jian)v = sv;
+				}
+			}else{
+				if(th[i][3]+10>=th[i][6]){
+					th[i][3] = th[i][6];
+					th[i][1] = th[i][7];
+				}else{
+					th[i][1]-=10;
+					th[i][3]+=10;
+				}
+			}
+			if(!kong)dkong = false;
+		}
+		for(var i=0;i<yc.length;i++){
+			if(yc[i][6] >= 0){
+				if(sx+mr <= yc[i][0] && x+mr >= yc[i][0] && y+mr > yc[i][1] && y <= yc[i][1]+yc[i][3]){
+					x = yc[i][0]-mr;
+				}else if(sx >= yc[i][0]+yc[i][2] && x <= yc[i][0]+yc[i][2] && y+mr > yc[i][1] && y <= yc[i][1]+yc[i][3]){
+					x = yc[i][0]+yc[i][2];
+				}
+				if(x+mr > yc[i][0] && x < yc[i][2]+yc[i][0] && parseInt(y+mr) <= yc[i][1] && parseInt(y+mr+v) >= yc[i][1]){
+					v = 0;
+					y = yc[i][1]-mr;
+					yc[i][7] = true;
+				}else if(x+mr > yc[i][0] && x < yc[i][2]+yc[i][0] && parseInt(y) > yc[i][1]+yc[i][3] && parseInt(y+v) <= yc[i][1]+yc[i][3]){
+					v = 0;
+					y = yc[i][1]+yc[i][3];
+				}
+				if(y == yc[i][1]-mr && v != sv){
+					if(x+mr <= yc[i][0] || x >= yc[i][2]+yc[i][0]){
+						kong = true;
+					}else{
+						v = 0;
+						kong = false;
+						if(jian)v = sv;
+					}
+				}
+				if(!kong)dkong = false;
+			}
+		}
+		for(var i=0;i<yd.length;i++){
+			if(yd[i][4] == 'x'){
+				if(sx+mr <= yd[i][11] && x+mr >= yd[i][0] && y+mr > yd[i][1] && y <= yd[i][1]+yd[i][3]){
+					x = yd[i][0]-mr;
+				}else if(sx >= yd[i][11]+yd[i][2] && x <= yd[i][0]+yd[i][2] && y+mr > yd[i][1] && y <= yd[i][1]+yd[i][3]){
+					x = yd[i][0]+yd[i][2];
+				}
+				if(x+mr > yd[i][0] && x < yd[i][2]+yd[i][0] && parseInt(y+mr) <= yd[i][1] && parseInt(y+mr+v) >= yd[i][1]){
+					v = 0;
+					y = yd[i][1]-mr;
+				}else if(x+mr > yd[i][0] && x < yd[i][2]+yd[i][0] && parseInt(y) > yd[i][1]+yd[i][3] && parseInt(y+v) <= yd[i][1]+yd[i][3]){
+					v = 0;
+					y = yd[i][1]+yd[i][3];
+				}
+				if(y == yd[i][1]-mr && v != sv){
+					if(x+mr <= yd[i][0] || x >= yd[i][2]+yd[i][0]){
+						kong = true;
+					}else{
+						x-=(yd[i][11]-yd[i][0]);
+						v = 0;
+						kong = false;
+						if(jian)v = sv;
+					}
+				}
+				if(!kong)dkong = false;
+			}else{
+				if(sx+mr <= yd[i][0] && x+mr >= yd[i][0] && y+mr > yd[i][1] && y <= yd[i][1]+yd[i][3]){
+					x = yd[i][0]-mr;
+				}else if(sx >= yd[i][0]+yd[i][2] && x <= yd[i][0]+yd[i][2] && y+mr > yd[i][1] && y <= yd[i][1]+yd[i][3]){
+					x = yd[i][0]+yd[i][2];
+				}
+				if(x+mr > yd[i][0] && x < yd[i][2]+yd[i][0] && parseInt(y+mr) <= parseInt(yd[i][11]) && parseInt(y+mr+v) >= yd[i][1]){
+					v = 0;
+					y = yd[i][1]-mr;
+					yd[i][12] = true;
+				}else if(x+mr > yd[i][0] && x < yd[i][2]+yd[i][0] && parseInt(y) >= yd[i][1]+yd[i][3] && parseInt(y+v) <= yd[i][1]+yd[i][3]+yd[i][9]){
+					v = 0;
+					y = yd[i][1]+yd[i][3];
+				}
+				if(yd[i][12]){
+					y = yd[i][1]-mr;
+					if(v == sv){
+						yd[i][12] = false;
+					}
+				}
+				if(y == yd[i][1]-mr && v != sv){
+					if(x+mr <= yd[i][0] || x >= yd[i][2]+yd[i][0]){
+						yd[i][12] = false;
+						kong = true;
+					}else{
+						v = 0;
+						kong = false;
+						if(jian)v = sv;
+					}
+				}
+				if(!kong)dkong = false;
+			}
+		}
+		for(var i=0;i<cs.length;i++){
+			if(x > cs[i][0]-mr2 && x < cs[i][0]+mr2 && y > cs[i][1]-mr2 && y < cs[i][1]+mr2){
+				if(cs[i][8]){
+					x = cs[i][4];
+					y = cs[i][5];
+					v = 0;
+					cs[i][8] = false;
+				}
+			}else if(x > cs[i][4]-mr2 && x < cs[i][4]+mr2 && y > cs[i][5]-mr2 && y < cs[i][5]+mr2){
+				if(cs[i][8]){
+					x = cs[i][0];
+					y = cs[i][1];
+					v = 0;
+					cs[i][8] = false;
+				}
+			}else{
+				cs[i][8] = true;
+			}
+		}
+		kong = dkong;
+		for(var i=0;i<bu.length;i++){
+			if(x+mr > bu[i][0] && x < bu[i][0]+bu[i][2] && y+mr > bu[i][1] && y < bu[i][1]+bu[i][3]){
+				dea();
+				break;
+			}
+		}
+		for(var i=0;i<ty.length;i++){
+			if(x+mr > ty[i][0] && x < ty[i][0]+ty[i][2] && y+mr > ty[i][1] && y < ty[i][1]+ty[i][3]){
+				dea();
+				break;
+			}
+		}
+		for(var i=0;i<bd.length;i++){
+			if(x+mr > bd[i][0] && x < bd[i][0]+bd[i][2] && y+mr > bd[i][1] && y < bd[i][1]+bd[i][3]){
+				dea();
+				break;
+			}
+		}
+		for(var i=0;i<bc.length;i++){
+			if(x+mr > bc[i][0] && x < bc[i][0]+bc[i][2] && y+mr > bc[i][1] && y < bc[i][1]+bc[i][3] && bc[i][6] > 0){
+				dea();
+				break;
+			}
+		}
+		for(var i=0;i<ly.length;i++){
+			if(x+mr > ly[i][0] && x < ly[i][0]+ly[i][2] && y+mr > ly[i][1] && y < ly[i][1]+ly[i][3]){
+				dea();
+				break;
+			}
+		}
+		for(var i=0;i<yq.length;i++){
+			if(x+mr > yq[i][8] && x < yq[i][8]+yq[i][3] && y+mr > yq[i][9] && y < yq[i][9]+yq[i][4]){
+				dea();
+				break;
+			}
+		}
+		for(var i=0;i<lt.length;i++){
+			if(x+mr > lt[i][0] && x < lt[i][0]+lt[i][2] && y+mr > lt[i][1] && y < lt[i][1]+lt[i][3]){
+				dea();
+				break;
+			}
+		}
+		for(var i=0;i<zb.length;i++){
+			if(x+mr > zb[i][11] && x < zb[i][11]+zb[i][3] && y+mr > zb[i][12] && y < zb[i][12]+zb[i][4]){
+				dea();
+				break;
+			}
+		}
+		if(y < 0){
+			y = 0;
+			v = 0;
+		}else if(y > h){
+			dea();
+		}
+		if(kong){
+			v+=a;
+		}
+		if(v == 0 && nanc && !kong){
+			jian = true;
+			v = sv;
+		}
+		y+=v;
+		sx2 = sx;
+		sy2 = sy;
+		sx2<x-2?sx2=x-2:sx2;
+		sx2>x+2?sx2=x+2:sx2;
+		sy2<y-2?sy2=y-2:sy2;
+		sy2>y+2?sy2=y+2:sy2;
+		ctx.fillStyle = '#f82';
+		ctx.fillRect(x,y,mr,mr);
+		ctx.beginPath();
+		ctx.fillStyle = '#fff';
+		ctx.arc(x+5,y+5,4,0,2*Math.PI);
+		ctx.fill();
+		ctx.beginPath();
+		ctx.arc(x+15,y+5,4,0,2*Math.PI);
+		ctx.fill();
+		if(kong){
+			ctx.fillStyle = '#fff';
+			ctx.beginPath();
+			ctx.arc(x+10,y+15,4,0,2*Math.PI);
+			ctx.fill();
+		}else{
+			ctx.fillStyle = '#fff';
+			ctx.beginPath();
+			ctx.fillRect(x+2,y+12,16,6);
+		}
+		ctx.fillStyle = '#000';
+		ctx.beginPath();
+		ctx.arc(sx2+5,sy2+5,2,0,2*Math.PI);
+		ctx.fill();
+		ctx.beginPath();
+		ctx.arc(sx2+15,sy2+5,2,0,2*Math.PI);
+		ctx.fill();
+		ctx.fillStyle = menustyle;
+		ctx.fillRect(560,10,30,5);
+		ctx.fillRect(560,20,30,5);
+		ctx.fillRect(560,30,30,5);
+		ctx.fillStyle = restyle;
+		ctx.beginPath();
+		ctx.moveTo(530,22);
+		ctx.arc(530,22,14,pi2,2*pi2,true);
+		ctx.closePath();
+		ctx.fill();
+		ctx.beginPath();
+		ctx.fillStyle = '#fff';
+		ctx.arc(530,22,10,0,4*pi2);
+		ctx.closePath();
+		ctx.fill();
+		ctx.beginPath();
+		ctx.fillStyle = restyle;
+		ctx.moveTo(522,32);
+		ctx.lineTo(530,24);
+		ctx.lineTo(530,40);
+		ctx.closePath();
+		ctx.fill();
+		ctx.fillStyle = tingstyle;
+		ctx.fillRect(478,9,8,28);
+		ctx.fillRect(494,9,8,28);
+		if(x > chu[0]-mr2 && x < chu[0]+mr2 && y > chu[1]-mr2 && y < chu[1]+mr2){
+			le++;
+			tle = 0;
+			fade = true;
+			lev = false;
+			mov = false;
+		}
+	}
+	function dea(){
+		lev = true;
+		x = x2;
+		y = y2;
+		v = 0;
+	}
+	function over(){
+		fade = false;
+		lev = false;
+		mov = false;
+		level1 = false;
+		ctx.fillStyle = '#999';
+		ctx.fillRect(0,0,w,h);
+		ctx.font = kaishisize+' 微软雅黑';
+		ctx.fillStyle = '#fff';
+		ctx.textAlign = 'center';
+		ctx.fillText("恭喜通关", 300, 310);
+	}
+	function ranz(x1,x2){
+		return Math.floor(Math.random()*(x2-x1+1)+x1);
+	}
+	function ran(x1,x2){
+		return Math.random()*(x2-x1)+x1;
+	}
+	c.keydown(function(key){
+		if((key.keyCode>36 && key.keyCode<41) || key.keyCode == 82 || key.keyCode == 32){
+			if(key.keyCode == 37){
+				mxl = xv;
+			};
+			if(key.keyCode == 39){
+				mxr = xv;
+			};
+			if(key.keyCode == 38){
+				nanc = true;
+			};
+			if(key.keyCode == 38 && !kong){
+				jian = true;
+				v = sv;
+			};
+			if(key.keyCode == 82){
+				xuan();
+			}
+			if(key.keyCode == 32){
+				if(level1){
+					isStart = false;
+					pause = true;
+				}else if(pause){
+					isStart = true;
+					pause = false;
+					level1 = true;
+					mov = true;
+					begin();
+				}
+			}
+			return false;
+		}
+	});
+	c.keyup(function(key){
+		if(key.keyCode>36 && key.keyCode<41){
+			if(key.keyCode == 37){
+				mxl = 0;
+			};
+			if(key.keyCode == 39){
+				mxr = 0;
+			};
+			if(key.keyCode == 38 && jian){
+				jian = false;
+				if(v < 0)v = v/2;
+			};
+			if(key.keyCode == 38){
+				nanc = false;
+			};
+			return false;
+		}
+	});
+	(function() {
+		var lastTime = 0;
+		var vendors = ['webkit', 'moz'];
+		for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
+			window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
+			window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||
+										  window[vendors[x] + 'CancelRequestAnimationFrame'];
+		}
+	
+		if (!window.requestAnimationFrame) {
+			window.requestAnimationFrame = function(callback, element) {
+				var currTime = new Date().getTime();
+				var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));
+				var id = window.setTimeout(function() {
+					callback(currTime + timeToCall);
+				}, timeToCall);
+				lastTime = currTime + timeToCall;
+				return id;
+			};
+		}
+		if (!window.cancelAnimationFrame) {
+			window.cancelAnimationFrame = function(id) {
+				clearTimeout(id);
+			};
+		}
+	}());
+	begin();
+});
+
+</script>
+
+</body>
+</html>

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

@@ -0,0 +1,122 @@
+
+<!-- 头部 -->
+{include file="base/header"/} 
+
+<div class="row row-xs tools_list">
+<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
+<div class="row">
+
+
+
+{volist name="goods" id="v"}
+
+
+<div class="col-lg-4 col-md-6 col-12 item boxs tool-item tools">
+<div class="servises-item">
+<div class="servises-item-ico">
+<i class="i i-outline md-48" style="font-size: 36px;">{$v.keywords}</i>
+</div>
+<h4 class="servises-item-title">{$v.title}</h4>
+<div class="servises-item-desc">
+<div class="">
+<div class="col-xs-6 item">
+
+<a title="点赞 " class="z" id="{$v.id}" href="javascript:void(0);">
+<i class="fa fa-heart"></i>
+<var id="zan31">{$v.likes}</var>
+</a>
+
+</div>
+<div class="col-xs-6 item">
+<a class="item-link" title="所有者 "><i class="fa fa-user"></i>&nbsp;&nbsp;{$v.author}</a>
+</div>
+<div class="col-xs-12 item">
+<a rel="nofollow" title="类别 " class="cat-label" data-class=".tools" href="javascript:;"><i class="fa fa-star"></i>&nbsp;&nbsp;{$cid.catename}</a>
+</div>
+</div>
+<div style="font-size: 16px; margin-top:10px; font-weight: bold;">
+        <a target="_blank" class="item-btn" href="{:url($v.url)}">进入</a>
+</div>
+</div>
+</div>
+</div>
+
+
+{/volist}
+
+
+
+
+
+
+
+
+
+</div>
+</div>
+</div>
+
+
+
+
+
+<script type="text/javascript">
+layui.use(['form', 'layedit', 'jquery'], function(){
+        var form = layui.form
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ;
+
+        //点赞
+        $(".z").on('click',function(){
+            var Oa=$(this);
+            var id=Oa.attr('id');//获取id属性
+
+            $.post('{:url("Base/praise")}',{id:id},function(data){
+                if(data==1){
+                    layer.msg('感谢您的支持!!',{icon:6});
+                    setTimeout(function () {
+                        window.location.reload();
+                    }, 700); 
+                }else{
+                    setTimeout(function () {
+                        layer.msg('您已经点过赞了,不要重复哦!',{icon:5});
+                    }, 700); 
+                }
+
+            },'json');
+
+        })
+
+
+});
+</script>
+
+
+<script type="text/javascript">
+                // 无刷新导航js
+                $(function () {
+                    $('#choose-tool li, .cat-label').click(function () {
+                        if ($(this).attr('class') == 'active') return false;
+                        $('.active').removeClass("active");
+                        $(this).addClass("active");
+                        if ($(this).data("class") !== ".tool-item") $(".tool-item").hide();
+                        $($(this).data("class")).fadeIn(0);
+                    });
+                });
+
+
+
+
+               
+</script>
+
+
+
+
+</div>
+
+
+
+<!-- 头部 -->
+{include file="base/footer"/} 

+ 112 - 0
application/index/view/index/title.html

@@ -0,0 +1,112 @@
+
+<!-- 头部 -->
+{include file="base/header"/} 
+
+<div class="row row-xs tools_list">
+<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
+<div class="row">
+
+
+
+{volist name="titles" id="vo"}
+<div class="col-lg-4 col-md-6 col-12 item boxs tool-item tools">
+<div class="servises-item">
+<div class="servises-item-ico">
+<i class="i i-outline md-48" style="font-size: 36px;">{$vo.keywords}</i>
+</div>
+<h4 class="servises-item-title">{$vo.title}</h4>
+<div class="servises-item-desc">
+<div class="">
+<div class="col-xs-6 item">
+
+<a title="点赞 " class="z" id="{$vo.id}" href="javascript:void(0);">
+<i class="fa fa-heart"></i>
+<var id="zan31">{$vo.likes}</var>
+</a>
+
+</div>
+<div class="col-xs-6 item">
+<a class="item-link" title="所有者 "><i class="fa fa-user"></i>&nbsp;&nbsp;{$vo.author}</a>
+</div>
+<div class="col-xs-12 item">
+<a rel="nofollow" title="类别 " class="cat-label" data-class=".tools" href="javascript:;"><i class="fa fa-star"></i>&nbsp;&nbsp;{$catename}</a>
+</div>
+</div>
+<div style="font-size: 16px; margin-top:10px; font-weight: bold;">
+<a target="_blank" class="item-btn" href="{:url($vo.url)}">进入</a>
+</div>
+</div>
+</div>
+</div>
+{/volist}
+
+
+
+
+
+
+
+
+
+</div>
+</div>
+</div>
+
+
+
+
+
+<script type="text/javascript">
+layui.use(['form', 'layedit', 'jquery'], function(){
+        var form = layui.form
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ;
+
+        //点赞
+        $(".z").on('click',function(){
+            var Oa=$(this);
+            var id=Oa.attr('id');//获取id属性
+
+            $.post('{:url("Base/praise")}',{id:id},function(data){
+                if(data==1){
+                    layer.msg('感谢您的支持!!',{icon:6});
+                    setTimeout(function () {
+                        window.location.reload();
+                    }, 700); 
+                }else{
+                    setTimeout(function () {
+                        layer.msg('您已经点过赞了,不要重复哦!',{icon:5});
+                    }, 700); 
+                }
+
+            },'json');
+
+        })
+
+
+});
+</script>
+
+
+<script type="text/javascript">
+                // 无刷新导航js
+                $(function () {
+                    $('#choose-tool li, .cat-label').click(function () {
+                        if ($(this).attr('class') == 'active') return false;
+                        $('.active').removeClass("active");
+                        $(this).addClass("active");
+                        if ($(this).data("class") !== ".tool-item") $(".tool-item").hide();
+                        $($(this).data("class")).fadeIn(0);
+                    });
+                });
+</script>
+
+
+
+</div>
+
+
+
+<!-- 头部 -->
+{include file="base/footer"/} 

+ 123 - 0
application/index/view/indexs/index.html

@@ -0,0 +1,123 @@
+
+<!-- 头部 -->
+{include file="base/header"/} 
+
+<div class="row row-xs tools_list">
+<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
+<div class="row">
+
+
+
+
+
+{volist name="cid" id="v"}
+
+<div class="col-lg-4 col-md-6 col-12 item boxs tool-item tools">
+<div class="servises-item">
+<div class="servises-item-ico">
+<i class="i i-outline md-48" style="font-size: 36px;">{$v.keywords}</i>
+</div>
+<h4 class="servises-item-title">{$v.title}</h4>
+<div class="servises-item-desc">
+<div class="">
+<div class="col-xs-6 item">
+
+<a title="点赞 " class="z" id="{$v.id}" href="javascript:void(0);">
+<i class="fa fa-heart"></i>
+<var id="zan31">{$v.likes}</var>
+</a>
+
+</div>
+<div class="col-xs-6 item">
+<a class="item-link" title="所有者 "><i class="fa fa-user"></i>&nbsp;&nbsp;{$v.author}</a>
+</div>
+<div class="col-xs-12 item">
+<a rel="nofollow" title="类别 " class="cat-label" data-class=".tools" href="javascript:;"><i class="fa fa-star"></i>&nbsp;&nbsp;{$v.catename}</a>
+</div>
+</div>
+<div style="font-size: 16px; margin-top:10px; font-weight: bold;">
+<a target="_blank" class="item-btn" href="{:url($v.url)}">进入</a>
+</div>
+</div>
+</div>
+</div>
+{/volist}
+
+
+
+
+
+
+
+
+
+</div>
+</div>
+</div>
+
+
+
+<script type="text/javascript">
+layui.use(['form', 'layedit', 'jquery'], function(){
+        var form = layui.form
+            ,layer = layui.layer
+            ,$ = layui.jquery
+            ;
+
+        //点赞
+        $(".z").on('click',function(){
+            var Oa=$(this);
+            var id=Oa.attr('id');//获取id属性值
+
+            $.post('{:url("Base/praise")}',{id:id},function(data){
+                if(data==1){
+                    layer.msg('感谢您的支持!!',{icon:6});
+                    setTimeout(function () {
+                        window.location.reload();
+                    }, 700); 
+                }else{
+                    setTimeout(function () {
+                        layer.msg('您已经点过赞了,不要重复哦!',{icon:5});
+                    }, 700); 
+                }
+
+            },'json');
+
+        })
+
+
+});
+</script>
+
+
+
+
+
+
+
+
+<script type="text/javascript">
+                // 无刷新导航js
+                $(function () {
+                    $('#choose-tool li, .cat-label').click(function () {
+                        if ($(this).attr('class') == 'active') return false;
+                        $('.active').removeClass("active");
+                        $(this).addClass("active");
+                        if ($(this).data("class") !== ".tool-item") $(".tool-item").hide();
+                        $($(this).data("class")).fadeIn(0);
+                    });
+                });
+</script>
+
+
+
+
+
+
+
+</div>
+
+
+
+<!-- 头部 -->
+{include file="base/footer"/} 

+ 233 - 0
application/index/view/jsonpost/lst.html

@@ -0,0 +1,233 @@
+<!DOCTYPE html>
+<html><head>
+        <meta charset="utf-8">
+    <title>json和postman互转</title>
+
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+
+    <!-- jsonpost -->
+    <!-- <link rel="stylesheet" href="/static/index/css/2020/bootstrap.min.css"/>
+    <link rel="stylesheet" href="/static/index/css/2020/common.css"/> -->
+    <script type="text/javascript" src="/static/index/js/2020/jquery.js"></script>
+    <script type="text/javascript" src="/static/index/js/2020/bootstrap.js"></script>
+    <script type="text/javascript" src="/static/index/js/2020/layer.js"></script>
+    <link rel="alternate" hreflang="en" href="/tools-lang-en/jsontopostman.html" >
+    <link rel="alternate" hreflang="zh-CN" href="/tools-lang-zh-CN/jsontopostman.html" >
+    <link rel="alternate" hreflang="zh-TW" href="/tools-lang-zh-TW/jsontopostman.html" >
+    <link rel="alternate" hreflang="ja" href="/tools-lang-ja/jsontopostman.html" >
+    <link rel="alternate" hreflang="ko" href="/tools-lang-ko/jsontopostman.html" >
+    <link rel="alternate" hreflang="de" href="/tools-lang-de/jsontopostman.html" >
+    <link rel="alternate" hreflang="est" href="/tools-lang-est/jsontopostman.html" >
+    <link rel="alternate" hreflang="fra" href="/tools-lang-fra/jsontopostman.html" >
+    <link rel="alternate" hreflang="it" href="/tools-lang-it/jsontopostman.html" >
+    <link rel="alternate" hreflang="ru" href="/tools-lang-ru/jsontopostman.html" >
+    <link rel="alternate" hreflang="vi" href="/tools-lang-vi/jsontopostman.html" >
+    <link rel="alternate" hreflang="pt" href="/tools-lang-pt/jsontopostman.html" >
+    <link rel="alternate" hreflang="th" href="/tools-lang-th/jsontopostman.html" >
+    <script async src="/static/index/js/2020/adsbygoogle.js"></script>
+    <script>
+        (adsbygoogle = window.adsbygoogle || []).push({
+            google_ad_client: "ca-pub-6733883877029153",
+            enable_page_level_ads: true
+        });
+    </script>
+    <style>
+        .p_tab {
+            border: 1px;
+        }
+
+        button {
+            margin-top: 10px;
+        }
+    </style>
+    
+</head>
+<body>
+    <!-- 头部 -->
+    
+    <!-- /头部 -->
+    
+    <div class="main-container container-fluid">
+        <div class="page-container">
+            <!-- Page Sidebar -->
+           
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+               <div class="container">
+    <h1>JSON互转postman参数</h1>
+    <div class="row">
+        <div class="col-lg-5">
+            <textarea class="form-control" rows="20" id="input">{"uid":"xxx","xxx":"gh","email":"xxxx@qq.com","token":"xxxx"}
+</textarea>
+        </div>
+        <div class="col-lg-2">
+            <button class="btn btn-success" onclick="jsontopostman()" data-toggle="tooltip" data-placement="top" title="在输入参数地方,Bulk Edit编辑参数输入!">JSON转postman</button>
+            <button class="btn btn-primary" onclick="postmantojson()" data-toggle="tooltip" data-placement="top" title="将Bulk Edit的参数转成json数据">postman转JSON</button>
+        </div>
+        <div class="col-lg-5">
+            <textarea class="form-control" rows="20" id="result"></textarea>
+        </div>
+    </div>
+</div>
+<script src="/static/index/js/2020/jquery-ui.min.js"></script>
+<link rel="stylesheet" href="/static/index/css/2020/jquery-ui.min.css">
+<script>
+    $("#search").autocomplete({
+        source: "/Home/Index/AjaxSearch.html",
+        select: function (event, ui) {
+            var command = ui.item['value'];
+            $.ajax({
+                type: "get",
+                url: "/Home/Index/AjaxTools.html",
+                data: {name: command},
+                dataType: 'json',
+                success: function (result) {
+                    if (result.code == 1) {
+                        window.location = result.data['url'];
+                    }
+                }
+            });
+        }
+    });
+</script>
+
+<script>
+    $(function () {
+        var urlLog = document.URL, refererLog = document.referrer;
+        $.ajax({
+            type: "post",
+            url: "/Dev/Base/log.html",
+            dataType: "json",
+            data: {url: urlLog, referer: refererLog},
+            success: function (data) {
+            }
+        });
+
+    })
+
+    /**baidu zd**/
+    $(function(){
+        var bp = document.createElement('script');
+        var curProtocol = window.location.protocol.split(':')[0];
+        if (curProtocol === 'https') {
+            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
+        }
+        else {
+            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
+        }
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(bp, s);
+    });
+</script>
+<script async src="/static/index/js/2020/4861e82dd786478faf715f1792f54dd2.js"></script>
+<script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+    gtag('config', 'UA-131433579-1');
+</script>
+<script>
+    var _hmt = _hmt || [];
+    (function() {
+        var hm = document.createElement("script");
+        hm.src = "https://hm.baidu.com/hm.js?7405f46bed49cf2bf2c82d56bca53945";
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(hm, s);
+    })();
+</script>
+
+<link href="/static/index/css/2020/style.css" rel="stylesheet" type="text/css">
+<div style="display: none;"><input type="hidden" class="three_token" value="23412caf9139cdb4e41aa0c61c19a86e41f9a4aeaa2b122577262478e8c8713c"></div>
+<script src="/static/index/js/2020/common.js" type="text/javascript"></script>
+<script type='text/javascript' src='/static/index/js/2020/sharethis.js' async='async'></script>
+<script type="text/javascript" src="/static/index/js/2020/formatjson.js"></script>
+<script>
+    $(function () {
+        $('[data-toggle="tooltip"]').tooltip();
+    });
+
+    function jsontopostman() {
+        var input = $('#input').val();
+        if (input == '') {
+            layer.msg('输入需要转换内容!');
+            return;
+        }
+        var result = "";
+        try {
+            input = eval("(" + input + ")");
+        } catch (e) {
+            layer.msg("JSON格式不正确!" + e.message);
+            return;
+        }
+        for (let k in input) {
+            result += k + ":" + input[k] + "\r\n";
+        }
+        $('#result').val(result);
+    }
+
+    function postmantojson() {
+        var input = $('#input').val();
+        if (input == '') {
+            layer.msg('输入需要转换内容!');
+            return;
+        }
+        var result = {}
+        input = input.split("\n");
+        for (var i = 0; i < input.length; i++) {
+            var tmp = input[i];
+            tmp = tmp.split(':');
+            var key = trim(tmp[0]), value = trim(tmp[1]);
+            if (key == "") {
+                continue;
+            }
+            result[key] = value;
+        }
+        $('#result').val(formatJson(result));
+    }
+
+    function trim(str) {
+        if (str == "" || str == undefined) {
+            return str;
+        }
+        return str.replace(/(^\s*)|(\s*$)/g, "");
+    }
+</script>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+        </div>  
+    </div>
+
+        <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body></html>

+ 39 - 0
application/index/view/jumpgame/lst.html

@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<title>闯关小游戏</title>
+<meta name="apple-mobile-web-app-capable" content="no">
+<meta name="apple-mobile-web-app-status-bar-style" content="black">
+<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
+<meta name="format-detection" content="telephone=no">
+<style type="text/css">
+*{
+	font-size: 0;
+}
+body{ margin: 0; padding: 0; font-size: 0; background-color: #2D2D2D;        }
+canvas{
+	display: block;
+	margin: auto;
+	position: absolute;
+	top:50%;
+	left: 50%;
+	transform: translate(-50%,-50%);
+	-webkit-transform: translate(-50%,-50%);
+	-ms-transform: translate(-50%,-50%);
+	-moz-transform: translate(-50%,-50%);
+	-o-transform: translate(-50%,-50%);
+}
+</style>
+<script type="text/javascript" src="/static/index/i7box/game/js/globalPrototype.js"></script>
+<script type="text/javascript" src="/static/index/i7box/game/js/global.js"></script>
+<script type="text/javascript" src="/static/index/i7box/game/js/data.js"></script>
+</head>
+<body>
+
+<canvas id="c"></canvas>
+
+<script type="text/javascript" src="/static/index/i7box/game/js/index.js"></script>
+
+</body>
+</html>

+ 243 - 0
application/index/view/ld/lst.html

@@ -0,0 +1,243 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>坐标雷达扫描特效</title>
+
+<script src="__BOX__/js/jquery.min.js"></script>
+
+<style>
+html, body {
+  width: 100%;
+  height: 100%;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+  font-family: Abel;
+}
+
+canvas {
+  background-color: #333;
+  -webkit-transform: scaleY(-1);
+          transform: scaleY(-1);
+}
+
+.info {
+  position: absolute;
+  left: 50px;
+  bottom: 50px;
+}
+
+h1 {
+  color: white;
+  letter-spacing: 3px;
+  margin: 0;
+}
+
+.message {
+  margin: 0;
+  color: #b99362;
+}
+</style>
+</head>
+<body>
+
+<canvas id="myCanvas"></canvas>
+<div class="info">
+  <h1>Boss, CODING Please.</h1>
+  <p class="message">temp</p>
+</div>
+
+<script>
+var c = $("#myCanvas")[0];
+var ctx = c.getContext("2d");
+var color_gold="185,147,98";
+var ww,wh;
+var center={x: 0,y: 0};
+
+function getWindowSize(){
+  ww=$(window).outerWidth();
+  wh=$(window).outerHeight();
+  c.width=ww;
+  c.height=wh;
+  center={x: ww/2,y: wh/2};
+  
+  ctx.restore();
+  ctx.translate(center.x,center.y);
+}
+getWindowSize();
+
+$(window).resize(getWindowSize);
+
+var enemies=Array(10).fill({}).map(
+  function(obj){
+    return {
+      r: Math.random()*200,
+      deg: Math.random()*360,
+      opacity: 0
+    } 
+  }
+);
+
+setInterval(draw,10);
+var time=0;
+
+var deg_to_pi=Math.PI/180;
+
+function Point(r,deg){
+  return {
+    x: r*Math.cos(deg_to_pi*deg),
+    y: r*Math.sin(deg_to_pi*deg),
+  };
+}
+
+function Color(op){
+  return "rgba("+color_gold+","+op+")";
+}
+
+function draw(){
+  time+=1;
+  
+  ctx.fillStyle = "#111";
+  ctx.beginPath();
+  ctx.rect(-2000,-2000,4000,4000);
+  ctx.fill();
+  
+  ctx.strokeStyle="rgba(255,255,255,0.1)";
+  ctx.moveTo(-ww/2,0);
+  ctx.lineTo(ww/2,0);
+  ctx.moveTo(0,-wh/2);
+  ctx.lineTo(0,wh/2);
+  ctx.stroke();
+  
+  ctx.strokeStyle=Color(1);
+  var r=200;
+  var deg=time;
+  var newpoint=Point(r,deg);
+  var line_deg = (time/2) % 360;
+  // console.log(line_deg);
+  
+  var line_deg_len=100;
+  
+  for(var i=0;i<line_deg_len;i++){
+    // var deg = (time-i);
+    var deg1 = (line_deg-i-1) ;
+    var deg2 = (line_deg-i) ;
+    
+    var point1=Point(r,deg1);
+    var point2=Point(r,deg2);
+    var opacity=1-(i/line_deg_len)-0.3;
+    if (i==0) opacity=1;
+    ctx.beginPath();
+    // ctx.fillStyle="white";
+    ctx.fillStyle=Color(opacity);
+    ctx.moveTo(0,0);
+    ctx.lineTo(point1.x,point1.y);
+    ctx.lineTo(point2.x,point2.y);
+    // ctx.stroke();
+    ctx.fill();
+  }
+  
+  enemies.forEach(function(obj){
+    ctx.fillStyle=Color(obj.opacity);
+    var obj_point=Point(obj.r,obj.deg);
+    
+    ctx.beginPath();
+    ctx.arc(
+      obj_point.x,obj_point.y,
+      4,0,2*Math.PI
+    );
+    ctx.fill();
+    
+    ctx.strokeStyle= Color(obj.opacity);
+    var x_size=6;
+    ctx.lineWidth=4;
+    ctx.beginPath();
+    ctx.moveTo(obj_point.x-x_size,obj_point.y+x_size);
+    ctx.lineTo(obj_point.x+x_size,obj_point.y-x_size);
+    ctx.moveTo(obj_point.x+x_size,obj_point.y+x_size);
+    ctx.lineTo(obj_point.x-x_size,obj_point.y-x_size);
+    ctx.stroke();
+    
+    if (Math.abs(obj.deg - line_deg)<=1){
+      obj.opacity=1;
+      $(".message").text("Detected: "+ obj.r.toFixed(3) + " at " +obj.deg.toFixed(3));
+    }
+    obj.opacity*=0.99;
+    
+    ctx.strokeStyle= Color(obj.opacity);
+    ctx.lineWidth=1;
+    ctx.beginPath();
+    ctx.arc(
+      obj_point.x,obj_point.y,
+      10*(1/(obj.opacity+0.0001)),0,2*Math.PI
+    );
+    ctx.stroke();
+    
+    
+  });
+  
+  ctx.strokeStyle=Color(1);
+  var split =120;
+  var feature =15;
+  var start_r=230;
+  var len = 5;
+  
+  for(var i=0;i<split;i++){
+    ctx.beginPath();
+    var deg = (i/120) * 360;
+    
+    if (i%feature==0){
+      len=10;
+      ctx.lineWidth=3;
+    }else{
+      len=5; 
+      ctx.lineWidth=1;
+    }
+    
+    
+    var point1 =Point(start_r,deg);
+    var point2 =Point(start_r+len,deg);
+    
+    ctx.moveTo(point1.x,point1.y);
+    ctx.lineTo(point2.x,point2.y);
+    
+    ctx.stroke();
+    
+  }
+  
+  function CondCircle(r,lineWidth,func_cond){
+    
+    ctx.lineWidth=lineWidth;
+    ctx.strokeStyle=Color(1);
+    
+    ctx.beginPath();
+    for(var i=0;i<=360;i++){
+      var point =Point(r,i);
+      if (func_cond(i)){
+        ctx.lineTo(point.x,point.y);
+      }else{
+        ctx.moveTo(point.x,point.y);
+      }
+    }
+    ctx.stroke();
+   
+  }
+  // CondCircle(300);
+  
+  CondCircle(300,2,function(deg){
+    return ((deg+time/10)%180)<90;
+  });
+  CondCircle(100,1,function(deg){
+    return (deg%3)<1;
+  });
+  CondCircle(190,1,function(deg){
+    return true;
+  });
+  
+  
+}
+</script>
+
+</body>
+</html>

+ 195 - 0
application/index/view/number/lst.html

@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html><head>
+        <meta charset="utf-8">
+    <title>金额大写转换</title>
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+
+    <!-- number -->
+    <!-- <link rel="stylesheet" href="/static/index/css/2020/bootstrap.min.css"/>
+    <link rel="stylesheet" href="/static/index/css/2020/bootstrap-theme.min.css"/>
+    <link rel="stylesheet" href="/static/index/css/2020/common.css"/> -->
+    <script type="text/javascript" src="/static/index/js/2020/jquery.js"></script>
+    <script type="text/javascript" src="/static/index/js/2020/bootstrap.js"></script>
+    <link rel="alternate" hreflang="en" href="/tools-lang-en/numberTurn.html" >
+    <link rel="alternate" hreflang="zh-CN" href="/tools-lang-zh-CN/numberTurn.html" >
+    <link rel="alternate" hreflang="zh-TW" href="/tools-lang-zh-TW/numberTurn.html" >
+    <link rel="alternate" hreflang="ja" href="/tools-lang-ja/numberTurn.html" >
+    <link rel="alternate" hreflang="ko" href="/tools-lang-ko/numberTurn.html" >
+    <link rel="alternate" hreflang="de" href="/tools-lang-de/numberTurn.html" >
+    <link rel="alternate" hreflang="est" href="/tools-lang-est/numberTurn.html" >
+    <link rel="alternate" hreflang="fra" href="/tools-lang-fra/numberTurn.html" >
+    <link rel="alternate" hreflang="it" href="/tools-lang-it/numberTurn.html" >
+    <link rel="alternate" hreflang="ru" href="/tools-lang-ru/numberTurn.html" >
+    <link rel="alternate" hreflang="vi" href="/tools-lang-vi/numberTurn.html" >
+    <link rel="alternate" hreflang="pt" href="/tools-lang-pt/numberTurn.html" >
+    <link rel="alternate" hreflang="th" href="/tools-lang-th/numberTurn.html" >
+    <script async src="/static/index/js/2020/adsbygoogle.js"></script>
+    <script>
+        (adsbygoogle = window.adsbygoogle || []).push({
+            google_ad_client: "ca-pub-6733883877029153",
+            enable_page_level_ads: true
+        });
+    </script>
+    <style>
+        .p_tab {
+            border: 1px;
+        }
+    </style>
+    
+</head>
+<body>
+    <!-- 头部 -->
+    
+    <!-- /头部 -->
+    
+    <div class="main-container container-fluid">
+        <div class="page-container">
+            <!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+                <div class='container'>
+    <h1>金额大写转换</h1>
+        <div class="tab-pane fade in active" id="number">
+            <div class="col-xs-12 col-md-7 col-lg-7" style='display:block;word-break: break-all;word-wrap: break-word;'>
+                <h4 id='number-h4'>请输入数字</h4>
+                <input type="text" id="number_name" name="number_name" class="form-control" onpropertychange="disposeNumber()">
+                <h4>结果:</h4>
+                <textarea class='form-control' id="result"></textarea>
+
+            </div>
+            <div class="col-xs-12 col-md-5 col-lg-5">
+            </div>
+        </div>
+    <div class="col-xs-12">
+        <hr/>
+        <h4>说明</h4>
+        <label>中文大写金额数字正楷填写,如壹(壹)、贰(贰)、叁、肆(肆)、伍(伍)、陆(陆)、柒、捌、玖、拾、佰、仟、万(万)、亿、元、角、分、零、整(正)等。</label>
+        <hr/>
+        <h4>对应大写汉字</h4>
+        <label>零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿。</label>
+    </div>
+</div>
+<!-- loading -->
+<div class="modal fade" id="loading" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop='static'>
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h4 class="modal-title" id="myModalLabel">提示</h4>
+            </div>
+            <div class="modal-body">
+                请稍候/文件上传中。。。
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="/static/index/js/2020/jquery-ui.min.js"></script>
+<link rel="stylesheet" href="/static/index/css/2020/jquery-ui.min.css">
+<script>
+    $("#search").autocomplete({
+        source: "/Home/Index/AjaxSearch.html",
+        select: function (event, ui) {
+            var command = ui.item['value'];
+            $.ajax({
+                type: "get",
+                url: "/Home/Index/AjaxTools.html",
+                data: {name: command},
+                dataType: 'json',
+                success: function (result) {
+                    if (result.code == 1) {
+                        window.location = result.data['url'];
+                    }
+                }
+            });
+        }
+    });
+</script>
+
+<script>
+    $(function () {
+        var urlLog = document.URL, refererLog = document.referrer;
+        $.ajax({
+            type: "post",
+            url: "/Dev/Base/log.html",
+            dataType: "json",
+            data: {url: urlLog, referer: refererLog},
+            success: function (data) {
+            }
+        });
+
+    })
+
+    /**baidu zd**/
+    $(function(){
+        var bp = document.createElement('script');
+        var curProtocol = window.location.protocol.split(':')[0];
+        if (curProtocol === 'https') {
+            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
+        }
+        else {
+            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
+        }
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(bp, s);
+    });
+</script>
+<script async src="/static/index/js/2020/042ec0a47cda403daada39041a71c5da.js"></script>
+<script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+    gtag('config', 'UA-131433579-1');
+</script>
+<script>
+    var _hmt = _hmt || [];
+    (function() {
+        var hm = document.createElement("script");
+        hm.src = "https://hm.baidu.com/hm.js?7405f46bed49cf2bf2c82d56bca53945";
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(hm, s);
+    })();
+</script>
+<link href="/static/index/css/2020/style.css" rel="stylesheet" type="text/css">
+<div style="display: none;"><input type="hidden" class="three_token" value="ba957bd2b8ef4465ce8efa94e38cf580b2ec42f4ba52d1c1617ac3aa590dd221"></div>
+<script src="/static/index/js/2020/common.js" type="text/javascript"></script>
+<script type='text/javascript' src='/static/index/js/2020/sharethis.js' async='async'></script>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+        </div>  
+    </div>
+
+        <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+</body>
+<script type="text/javascript" src="/static/index/js/2020/ajaxfileupload.js"></script>
+<script type="text/javascript" src="/static/index/js/2020/numberturn.js"></script>
+</html>

+ 116 - 0
application/index/view/ocr/lst.html

@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>图片OCR文字识别</title>
+    <meta name="keywords" content="图片OCR文字识别"/>
+    <meta name="description" content=""/>
+    <link rel="stylesheet" href="__GJ__/css/basic.css">
+    <link rel="stylesheet" href="__GJ__/css/bootstrap.min.css">
+    <link rel="stylesheet" href="__GJ__/css/header-footer.css">
+    <link rel="stylesheet" href="__GJ__/css/index.css">
+    <link rel="stylesheet" href="__GJ__/css/common.css">
+    <script src="__GJ__/js/jquery.js"></script>
+    <script src="__GJ__/js/bootstrap.min.js"></script>
+    <script src="__GJ__/js/main.js"></script>
+    <script src="__GJ__/js/jquery.lazyload.mini.js"></script>
+    <script src="__GJ__/js/common.js"></script>
+    <script src="__GJ__/js/layer.js"></script>
+    <script data-ad-client="ca-pub-2597465019259789" async src="__GJ__/js/adsbygoogle.js"></script>
+</head>
+<body>
+<div class="nav-bar navbar-inverse navbar-fixed-top">
+    <div class="container">
+        <div class="navbar-header">
+
+            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                <span class="sr-only"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </button>
+        </div>
+        
+    </div>
+</div>
+
+
+<link rel="stylesheet" href="__GJ__/css/archive.css">
+<div class="container">
+    <div class="post-wrapper">
+              <div class="post-title">图片OCR文字识别</div>
+        <div class="codepen-box clearfix">
+            <iframe src="https://www.toolnb.com/tools/ocr.html?form=link" id="result" width="100%" style="height: 750px;" frameborder="no" border="0" marginwidth="0" marginheight="0" allowtransparency="yes"></iframe>
+        </div>
+       
+        
+    </div>
+</div>
+<style>
+    .mood-div-main {
+        text-align: center;
+    }
+
+    #result {
+        border: 1px solid #ececec;
+    }
+
+    .mood li {
+        display: inline-grid;
+        text-align: center;
+        cursor: pointer;
+        margin-top: 5px;
+        margin-left: 16px;
+    }
+
+    .mood .active {
+        border: 1px solid #ececec;
+        padding: 6px;
+        border-radius: 16px;
+    }
+
+    .mood li img {
+        display: inline-table;
+    }
+
+    .mood li span {
+        display: inline-table;
+    }
+
+    .mood li p {
+        display: inline-table;
+    }
+</style>
+<script>
+    $(function () {
+        $('.mood li').mousemove(function () {
+            $('.mood li').removeClass('active');
+            $(this).addClass('active');
+        });
+        $('.mood li').click(function () {
+            var id = $(this).attr('data-id'), tools = "ocr", e = this;
+            $.ajax({
+                type: "post",
+                url: "/site/tools-mood",
+                data: {id: id, alias: tools},
+                dataType: 'json',
+                success: function (result) {
+                    if (result.code == 1) {
+                        var number = $(e).find('p').attr('data-number');
+                        number = parseInt(number);
+                        $(e).find('p').attr('data-number', number + 1);
+                        $(e).find('p').html((number + 1) + "人");
+                    } else {
+                        alert(result.msg);
+                    }
+                }
+            });
+        });
+    });
+</script>
+
+
+</body>
+</html>

+ 3 - 0
application/index/view/openmoji/lst.html

@@ -0,0 +1,3 @@
+<script type="text/javascript">
+	window.location.href="https://openmoji.dashgame.com";
+</script>

+ 194 - 0
application/index/view/pdf/lst.html

@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html><head>
+	<meta charset="utf-8">
+    <title>PDF转图片|PDF转JPG</title>
+    <meta name="description" content="Dashboard">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <!--Basic Styles-->
+    <link href="/static/index/style/bootstrap.css" rel="stylesheet">
+    <link href="/static/index/style/font-awesome.css" rel="stylesheet">
+    <link href="/static/index/style/weather-icons.css" rel="stylesheet">
+
+    <!--Beyond styles-->
+    <link id="beyond-link" href="/static/index/style/beyond.css" rel="stylesheet" type="text/css">
+    <link href="/static/index/style/demo.css" rel="stylesheet">
+    <link href="/static/index/style/typicons.css" rel="stylesheet">
+    <link href="/static/index/style/animate.css" rel="stylesheet">
+
+    <!-- pdf -->
+    <link rel="shortcut icon" href="/favicon.ico">
+	<!-- <link href="/static/index/css/pdf/all.min.css" rel="stylesheet"> -->
+	<link rel="stylesheet" href="/static/index/css/pdf/iconfont.css">
+	<link rel="stylesheet" type="text/css" href="/static/index/css/pdf/tools.css" />
+	<link rel="stylesheet" type="text/css" href="/static/index/css/pdf/pdf2img_style.css"/>
+	<script src="/static/index/js/pdf/jquery.min.js" type="text/javascript"></script>
+
+    
+</head>   
+<body>
+	<!-- 头部 -->
+    
+	<!-- /头部 -->
+	
+	<div class="main-container container-fluid">
+		<div class="page-container">
+			<!-- Page Sidebar -->
+            
+            <!-- /Page Sidebar -->
+            <!-- Page Content -->
+            <div class="page-content">
+                <!-- Page Breadcrumb -->
+                
+                <!-- /Page Breadcrumb -->
+
+                <!-- Page Body -->
+                <div class="page-body">
+                    
+				<div class="container">
+<h1>pdf转png或jpg</h1>
+<div class="file fullwidth gap-top">
+<span class="file-cta">
+<input id="input_file" class="file-input" type="file" accept="application/pdf"
+onchange="loadPDF(this.files[0])">
+<span class="file-icon">
+<i class="fas fa-upload"></i>
+</span>
+<span class="file-button">选择一个PDF文件</span>
+</span>
+<span id="file_name" class="file-name"></span>
+</div>
+<div class="content-center gap-top">
+<div class="group">
+<button class="button" onclick="prevPage()">
+<i class="fa fa-arrow-left"></i>
+<span>上一页</span>
+</button>
+<button class="button" onclick="nextPage()">
+<span>下一页</span>
+<i class="fa fa-arrow-right"></i>
+</button>
+</div>
+<div id="out_type" class="group">
+<button class="button primary">
+<span>JPG</span>
+</button>
+<button class="button">
+<span>PNG</span>
+</button>
+</div>
+<button class="button primary" onclick="save()">
+<span>保存本页</span>
+</button>
+<button class="button primary" onclick="saveAll()">
+<span>全部保存</span>
+</button>
+</div>
+<p id="page_num"></p>
+<div class="content-center gap-top">
+<canvas id="preview" class="bordered" hidden></canvas>
+</div>
+</div>
+                
+                </div>
+                <!-- /Page Body -->
+            </div>
+            <!-- /Page Content -->
+		</div>	
+	</div>
+
+	    <!--Basic Scripts-->
+    <script src="/static/index/style/jquery_002.js"></script>
+    <script src="/static/index/style/bootstrap.js"></script>
+    <script src="/static/index/style/jquery.js"></script>
+    <!--Beyond Scripts-->
+    <script src="/static/index/style/beyond.js"></script>
+    
+
+
+</body>
+<script src="/static/index/js/pdf/pdf.min.js" type="text/javascript"></script>
+<script>
+pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdn.bootcss.com/pdf.js/2.2.228/pdf.worker.min.js';
+const preview = document.getElementById('preview');
+const page_num = document.getElementById('page_num');
+const out_type = document.getElementById('out_type');
+let pdfFile, pdf, pageNum, context = preview.getContext('2d');
+out_type.querySelectorAll('.button').forEach(function (btn) {
+btn.onclick = function () {
+out_type.querySelector('.primary').classList.remove('primary');
+btn.classList.add('primary');
+}
+});
+function loadPDF(file) {
+pdfFile = file;
+file_name.innerHTML = file.name;
+let reader = new FileReader();
+reader.onload = (e) => showPDF(e.target.result);
+reader.readAsDataURL(file);
+}
+function showPDF(url) {
+let loadingTask = pdfjsLib.getDocument(url);
+loadingTask.promise.then(function (doc) {
+pdf = doc;
+pageNum = 1;
+preview.hidden = false;
+readerPage()
+}, function (reason) {
+alert(reason)
+});
+}
+function prevPage() {
+if (pageNum <= 1) {
+return;
+}
+pageNum--;
+readerPage()
+}
+function nextPage() {
+if (pageNum >= pdf.numPages) {
+return;
+}
+pageNum++;
+readerPage()
+}
+function readerPage(callback) {
+pdf.getPage(pageNum).then(function (page) {
+let scale = 1.5;
+let viewport = page.getViewport({scale: scale});
+preview.height = viewport.height;
+preview.width = viewport.width;
+let renderContext = {
+canvasContext: context,
+viewport: viewport
+};
+page.render(renderContext).promise.then(callback);
+});
+}
+function save() {
+let a = document.createElement('a');
+let event = new MouseEvent('click');
+let type = out_type.querySelector('.primary').innerText.toLowerCase();
+a.download = pdfFile.name + '-' + pageNum + '.' + type;
+a.href = preview.toDataURL(type === 'png' ? 'image/png' : 'image/jpeg');
+a.dispatchEvent(event)
+}
+function saveAll() {
+pageNum = 1;
+savePage()
+}
+function savePage() {
+if (pageNum > pdf.numPages) {
+alert('全部保存成功');
+return
+}
+readerPage(function () {
+save();
+pageNum++;
+savePage();
+});
+}
+</script>
+<script src="/static/index/js/pdf/commonfooter.js" type="text/javascript"></script>
+</html>

+ 115 - 0
application/index/view/pdfdoc/lst.html

@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>PDF转WORD(doc)</title>
+    <meta name="keywords" content="PDF转WORD"/>
+    <meta name="description" content=""/>
+    <link rel="stylesheet" href="__GJ__/css/basic.css">
+    <link rel="stylesheet" href="__GJ__/css/bootstrap.min.css">
+    <link rel="stylesheet" href="__GJ__/css/header-footer.css">
+    <link rel="stylesheet" href="__GJ__/css/index.css">
+    <link rel="stylesheet" href="__GJ__/css/common.css">
+    <script src="__GJ__/js/jquery.js"></script>
+    <script src="__GJ__/js/bootstrap.min.js"></script>
+    <script src="__GJ__/js/main.js"></script>
+    <script src="__GJ__/js/jquery.lazyload.mini.js"></script>
+    <script src="__GJ__/js/common.js"></script>
+    <script src="__GJ__/js/layer.js"></script>
+    <script data-ad-client="ca-pub-2597465019259789" async src="__GJ__/js/adsbygoogle.js"></script>
+</head>
+<body>
+<div class="nav-bar navbar-inverse navbar-fixed-top">
+    <div class="container">
+        <div class="navbar-header">
+
+            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                <span class="sr-only"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </button>
+        </div>
+
+    </div>
+</div>
+
+
+<link rel="stylesheet" href="__GJ__/css/archive.css">
+<div class="container">
+    <div class="post-wrapper">
+                <div class="post-title">PDF转WORD</div>
+        <div class="codepen-box clearfix">
+            <iframe src="https://www.toolnb.com/tools/pdftoword.html?form=link" id="result" width="100%" style="height: 750px;" frameborder="no" border="0" marginwidth="0" marginheight="0" allowtransparency="yes"></iframe>
+        </div>
+
+ 
+    </div>
+</div>
+<style>
+    .mood-div-main {
+        text-align: center;
+    }
+
+    #result {
+        border: 1px solid #ececec;
+    }
+
+    .mood li {
+        display: inline-grid;
+        text-align: center;
+        cursor: pointer;
+        margin-top: 5px;
+        margin-left: 16px;
+    }
+
+    .mood .active {
+        border: 1px solid #ececec;
+        padding: 6px;
+        border-radius: 16px;
+    }
+
+    .mood li img {
+        display: inline-table;
+    }
+
+    .mood li span {
+        display: inline-table;
+    }
+
+    .mood li p {
+        display: inline-table;
+    }
+</style>
+<script>
+    $(function () {
+        $('.mood li').mousemove(function () {
+            $('.mood li').removeClass('active');
+            $(this).addClass('active');
+        });
+        $('.mood li').click(function () {
+            var id = $(this).attr('data-id'), tools = "pdftoword", e = this;
+            $.ajax({
+                type: "post",
+                url: "/site/tools-mood",
+                data: {id: id, alias: tools},
+                dataType: 'json',
+                success: function (result) {
+                    if (result.code == 1) {
+                        var number = $(e).find('p').attr('data-number');
+                        number = parseInt(number);
+                        $(e).find('p').attr('data-number', number + 1);
+                        $(e).find('p').html((number + 1) + "人");
+                    } else {
+                        alert(result.msg);
+                    }
+                }
+            });
+        });
+    });
+</script>
+
+</body>
+</html>

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels